simpo-component-library 3.6.708 → 3.6.710
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/categories-with-image-backgound-columns/categories-with-image-backgound-columns.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +10 -12
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +9 -3
- package/fesm2022/simpo-component-library.mjs +25 -21
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/ecommerce/sections/featured-category/featured-category.component.d.ts +1 -1
- package/lib/ecommerce/sections/user-profile/user-profile.component.d.ts +1 -0
- package/package.json +1 -1
- package/simpo-component-library-3.6.710.tgz +0 -0
- package/simpo-component-library-3.6.708.tgz +0 -0
|
@@ -196,7 +196,7 @@ export class OrderDetailsComponent {
|
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OrderDetailsComponent, deps: [{ token: i1.EventsService }, { token: i2.StorageServiceService }, { token: i3.RestService }, { token: i4.MessageService }, { token: i5.ImageUplaodService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
199
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OrderDetailsComponent, isStandalone: true, selector: "simpo-order-details", inputs: { responseData: "responseData", data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass", orderDetailData: "orderDetailData" }, outputs: { goBackEmitter: "goBackEmitter" }, ngImport: i0, template: "<ng-container *ngIf=\"!isLoading\">\r\n <div class=\"container-fluid\" [attr.style]=\"customClass\" style=\"background-color: #f8f9fa; min-height: 100vh;\">\r\n <!-- Main Box -->\r\n <div class=\"border-0 mx-auto\">\r\n\r\n <!-- Back button & Thanks -->\r\n <div class=\"d-flex align-items-center mb-2\">\r\n <svg (click)=\"goBack()\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-chevron-left cp text-muted\">\r\n <path d=\"m15 18-6-6 6-6\"></path>\r\n </svg>\r\n <span class=\"text-muted fw-medium py-1\">Thanks!</span>\r\n </div>\r\n\r\n <!-- Main Headline -->\r\n <h2 class=\"fw-semibold mb-2 text-dark\" style=\"font-size: 1.75rem;\">\r\n {{ orderDetailData?.brandOrderDetails?.[0]?.orderStatus?.replaceAll(\"_\", \" \") | titlecase }} \uD83D\uDE80\r\n </h2>\r\n <p class=\"text-muted mb-3 fs-15\">\r\n {{ orderDetailData?.brandOrderDetails?.[0]?.orderStatus === 'DELIVERED' ? 'Your order has been\r\n delivered. Enjoy!' : (orderDetailData?.brandOrderDetails?.[0]?.orderStatus === 'CANCELLED' ? 'Your order\r\n was cancelled.' : 'Your order is on the way. It will be shipped. We will inform you.') }}\r\n </p>\r\n\r\n <!-- Colored Line -->\r\n <div class=\"mb-3\" style=\"height: 3px; width: 100%;\"\r\n [style.background]=\"'linear-gradient(to right, ' + (styles?.background?.color || '#20c997') + ', transparent)'\">\r\n </div>\r\n\r\n <!-- Order Number & Actions -->\r\n <div class=\"d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-2\">\r\n <div class=\"fw-semibold text-dark mb-2 mb-md-0 d-flex align-items-center\">\r\n Order number:\r\n <span class=\"ms-1\" [style.color]=\"styles?.background?.color || '#20c997'\">\r\n {{ orderDetailData?.orderNum }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Content Grid Layout -->\r\n <div class=\"row mt-2\">\r\n <!-- Left Column -->\r\n <div class=\"col-lg-7 col-xl-8 mb-4\">\r\n <!-- Items List -->\r\n <div class=\"card border mb-4 overflow-hidden\"\r\n style=\"border-color: #eaeaea !important; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.02);\">\r\n <ng-container\r\n *ngFor=\"let item of orderDetailData?.brandOrderDetails[0]?.orderedItems; let last = last\">\r\n <div class=\"p-4\" [ngClass]=\"{'border-bottom': !last}\">\r\n <div class=\"d-flex flex-column flex-md-row align-items-start justify-content-between\">\r\n <div class=\"d-flex gap-4 w-100\">\r\n <!-- Image -->\r\n <img loading=\"lazy\"\r\n onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [src]=\"item.imgUrl\" alt=\"{{ item.itemName }}\"\r\n class=\"rounded shadow-sm flex-shrink-0\"\r\n style=\"width: 80px; height: 80px; object-fit: cover; border-radius: 8px !important;\">\r\n\r\n <!-- Details -->\r\n <div class=\"flex-grow-1\">\r\n <h6 class=\"fw-bold text-dark mb-1\" style=\"font-size: 15px;\">{{ item.itemName\r\n }}</h6>\r\n <p class=\"text-muted small mb-2\" style=\"font-size: 13px;\"\r\n *ngIf=\"item.variantName || item.customizationDetails\">{{\r\n item.variantName ||\r\n 'Regular' }}</p>\r\n <div class=\"fw-semibold text-dark mt-1\" style=\"font-size: 13px;\">Quantity {{\r\n item.quantity }}</div>\r\n\r\n <!-- Review Section -->\r\n <div class=\"mt-4 pt-3 border-top\"\r\n *ngIf=\"orderDetailData?.brandOrderDetails?.[0]?.orderStatus == 'DELIVERED'\">\r\n\r\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\r\n <h6 class=\"fw-bold mb-0 text-dark\" style=\"font-size: 14px;\">Leave a\r\n Review\r\n </h6>\r\n <p-rating [(ngModel)]=\"item.rating\" [cancel]=\"false\"\r\n [readonly]=\"false\"\r\n (ngModelChange)=\"submitReview(item)\"></p-rating>\r\n </div>\r\n\r\n <div class=\"add-detail-review text-primary fw-medium cursor-pointer d-inline-flex align-items-center gap-1\"\r\n style=\"font-size: 13px;\"\r\n (click)=\"item.showReview = !item.showReview\">\r\n <mat-icon\r\n style=\"font-size: 15px; width: 15px; height: 15px;\">mode_edit</mat-icon>\r\n <span>Write a Detailed Review</span>\r\n </div>\r\n\r\n <div *ngIf=\"item.showReview\" class=\"mt-3 p-4 bg-white\"\r\n style=\"border: 1px solid #f0f0f0; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.03);\">\r\n\r\n <h6 class=\"fw-semibold text-dark mb-3\" style=\"font-size: 14px;\">\r\n Share your\r\n experience</h6>\r\n\r\n <div class=\"mb-4\">\r\n <textarea class=\"form-control shadow-none review-textarea\"\r\n [(ngModel)]=\"item.review\" rows=\"4\"\r\n placeholder=\"What did you like or dislike? How was the fit and quality?\"></textarea>\r\n </div>\r\n\r\n <div class=\"mb-4\">\r\n <h6 class=\"fw-medium text-muted mb-2\" style=\"font-size: 13px;\">\r\n Attach\r\n Photos <span\r\n style=\"font-size: 11px; opacity: 0.7;\">(Optional)</span>\r\n </h6>\r\n <div class=\"d-flex gap-3 flex-wrap align-items-center\">\r\n <div class=\"position-relative\"\r\n *ngFor=\"let img of item?.reviewImages ?? []\">\r\n <img [src]=\"img.imgUrl\" alt=\"\"\r\n style=\"width: 72px; height: 72px; object-fit: cover; border-radius: 8px; border: 1px solid #e2e8f0; box-shadow: 0 2px 4px rgba(0,0,0,0.02);\">\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-center cursor-pointer review-upload-box\"\r\n (click)=\"reviewFileInput.click()\">\r\n <mat-icon\r\n style=\"font-size: 26px; width: 26px; height: 26px;\">add_photo_alternate</mat-icon>\r\n </div>\r\n <input type=\"file\" name=\"myfile\" multiple hidden\r\n accept=\"image/jpg,image/jpeg,image/gif,image/png,application/pdf,image/x-eps\"\r\n (change)=\"uploadImage($event, item)\" class=\"pc-btn\"\r\n #reviewFileInput />\r\n </div>\r\n </div>\r\n\r\n <div class=\"w-100 mt-2 d-flex justify-content-end\">\r\n <button\r\n class=\"btn w-40 fw-bold shadow-sm d-flex justify-content-center align-items-center gap-2 review-submit-btn\"\r\n [style.background]=\"styles?.background?.color || '#20c997'\"\r\n (click)=\"submitReview(item)\">\r\n Submit Review\r\n <mat-icon\r\n style=\"font-size: 18px; width: 18px; height: 18px;\">send</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Price -->\r\n <div class=\"text-end fw-bold text-dark d-none d-md-block\"\r\n style=\"font-size: 15px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ (item.sellingPrice * item.quantity) |\r\n number:\r\n '1.0-2' }}\r\n </div>\r\n </div>\r\n <!-- Mobile Price -->\r\n <div class=\"text-start fw-bold text-dark fs-6 mt-3 d-md-none w-100\">\r\n <span [innerHTML]=\"currency\"></span>{{ (item.sellingPrice * item.quantity) |\r\n number:\r\n '1.0-2' }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Summary Section -->\r\n <div class=\"row gx-5\">\r\n <!-- Left: Address & Payment -->\r\n <div class=\"col-md-6 mb-4 mb-md-0 d-flex flex-column gap-4\">\r\n <div>\r\n <h6 class=\"text-dark mb-2\" style=\"font-size: 13px; font-weight: 600;\">Shipping Address\r\n </h6>\r\n <div class=\"text-dark\" style=\"font-size: 13px;\">\r\n <span class=\"d-block mb-1\">{{ orderDetailData?.addressDetails?.receiverName\r\n }}</span>\r\n <span class=\"text-muted d-block\" style=\"line-height: 1.5; max-width: 280px;\">\r\n {{ orderAddress }}<br>\r\n {{ orderDetailData?.addressDetails?.receiverPhone }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <h6 class=\"text-dark mb-2\" style=\"font-size: 13px; font-weight: 600;\">Payment</h6>\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <span class=\"text-primary fw-bolder fs-5\"\r\n *ngIf=\"getKey(orderDetailData?.paymentDetails)!=='COD'\"\r\n style=\"font-family: Arial, sans-serif; letter-spacing: -0.5px;\">VISA</span>\r\n <mat-icon *ngIf=\"getKey(orderDetailData?.paymentDetails)==='COD'\" class=\"text-muted\"\r\n style=\"font-size: 28px; width: 28px; height: 28px;\">payments</mat-icon>\r\n\r\n <div>\r\n <div class=\"text-dark\" style=\"font-size: 13px;\">\r\n {{orderDetailData?.paymentDetails ?\r\n (getKey(orderDetailData?.paymentDetails)==='COD' ? 'Cash on Delivery':\r\n getKey(orderDetailData?.paymentDetails) ) : 'N/A'}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px; letter-spacing: 0.5px;\"\r\n *ngIf=\"getKey(orderDetailData?.paymentDetails)!=='COD'\">**** **** **** 1234\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Right: Bill Details -->\r\n <div class=\"col-md-6 pt-1\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Subtotal</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.totalNetValue |\r\n number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\"\r\n *ngIf=\"orderDetailData?.billDetails?.discountAmount\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Discount</span>\r\n <span class=\"text-success fw-medium\" style=\"font-size: 13px;\">\r\n -<span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.discountAmount\r\n |\r\n number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Shipping</span>\r\n <span class=\"text-dark fw-medium\"\r\n style=\"font-size: 13px;\">{{orderDetailData?.billDetails.deliveryCharges ?\r\n orderDetailData?.billDetails.deliveryCharges : 'FREE'}}</span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Estimated Tax</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.discountAmount\r\n ?\r\n orderDetailData?.billDetails?.totalTaxAfterDiscount :\r\n orderDetailData?.billDetails?.totalTax\r\n | number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\"\r\n *ngIf=\"orderDetailData?.billDetails?.orraSchemeRedeemedAmount\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Redeem Amount</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n -<span [innerHTML]=\"currency\"></span>{{\r\n orderDetailData?.billDetails?.orraSchemeRedeemedAmount | number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <hr class=\"text-muted my-3\" style=\"opacity: 0.15;\">\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"text-dark\" style=\"font-size: 14px; font-weight: 600;\">Total</span>\r\n <span class=\"text-dark fw-bold\" style=\"font-size: 16px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.finalPrice }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Right Column -->\r\n <div class=\"col-lg-5 col-xl-4\">\r\n <!-- Timeline Card -->\r\n <div class=\"card border p-4 mb-4\"\r\n style=\"border-color: #eaeaea !important; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.02);\"\r\n *ngIf=\"orderDetailData?.orderTrackingLink || (orderTimiline && orderTimiline.length > 0)\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-4 pb-3 border-bottom\">\r\n <h5 class=\"fw-bold mb-0 text-dark d-flex align-items-center gap-2\" style=\"font-size: 16px;\">\r\n <mat-icon style=\"color: #6c757d;\">timeline</mat-icon> Order Timeline\r\n </h5>\r\n\r\n <div *ngIf=\"orderDetailData?.orderTrackingLink\"\r\n class=\"d-inline-flex align-items-center gap-1 cursor-pointer fw-medium\"\r\n [style.color]=\"styles?.background?.color || '#0d6efd'\" style=\"font-size: 13px;\"\r\n (click)=\"trackOrder()\">\r\n <mat-icon\r\n style=\"font-size: 15px; width: 15px; height: 15px;\">location_searching</mat-icon>\r\n <span style=\"text-decoration: underline; text-underline-offset: 3px;\">Track Order</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"px-2 pt-2\" *ngIf=\"orderTimiline && orderTimiline.length > 0\">\r\n <p-timeline [value]=\"orderTimiline\" styleClass=\"custom-timeline\" align=\"left\">\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <!-- Completed -->\r\n <span class=\"custom-marker completed-marker\"\r\n *ngIf=\"event.statusType === 'completed' || event.statusType === 'delivered'\"\r\n [style.backgroundColor]=\"styles?.background?.color || '#059669'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"3\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"></polyline>\r\n </svg>\r\n </span>\r\n\r\n <!-- Active -->\r\n <span class=\"custom-marker active-marker\" *ngIf=\"event.statusType === 'active'\"\r\n [style.borderColor]=\"styles?.background?.color || '#059669'\"></span>\r\n\r\n <!-- Future -->\r\n <span class=\"custom-marker future-marker\"\r\n *ngIf=\"event.statusType === 'future'\"></span>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\" let-event let-last=\"last\">\r\n <div class=\"ms-4\" [ngClass]=\"{'pb-4': !last}\">\r\n <div class=\"fw-semibold text-dark\" style=\"font-size: 15px; margin-bottom: 2px;\">\r\n {{\r\n event.name?.replaceAll(\"_\", \" \") | titlecase }}</div>\r\n <div style=\"font-size: 14px;\"\r\n [ngClass]=\"{'text-muted': event.statusType !== 'future', 'text-light-grey': event.statusType === 'future'}\">\r\n {{ event.date ? (event.date | date:'MMM d') : 'Not yet' }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-timeline>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<!-- Loading Skeleton -->\r\n<div class=\"container-fluid py-4\" *ngIf=\"isLoading\" style=\"background-color: #f8f9fa; min-height: 100vh;\">\r\n <div class=\"mx-auto\" style=\"max-width: 1000px;\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '60vh',\r\n 'border-radius': '12px',\r\n 'margin': '20px 0'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n</div>", styles: [".right{height:250px;padding:15px;background-color:#f8f8f8;border-radius:8px;color:#000}*{font-family:var(--website-font-family)}hr{border-top-width:2px;margin:15px 0}.f-13{font-size:13px}.f-16{font-size:16px}.fw-800{font-weight:800}.br-6{border-radius:6px}textarea{resize:unset}.action-btn>button{font-size:14px!important;border:none;width:fit-content!important;margin-top:5px;border-radius:3px;padding:5px 10px;background-color:tomato;color:#fff}.mat-icon{height:30px;width:30px;font-size:30px}.timeline{margin:25px 0}.onlyMobile{display:none}.track-order{background-color:#000;color:#fff;border:1px solid black;width:auto;border-radius:3px;padding:5px}@media only screen and (max-width: 475px){.onlyDesktop{display:none!important}.onlyMobile{display:block}.mat-icon{width:46px}.time-line{padding-bottom:6px}.right{width:98%!important;margin-bottom:4px!important;height:auto!important;padding:15px!important;margin-top:5%}.main-section{width:100%!important;flex-direction:column!important}.left{width:100%!important;padding:3%}.orderNum{margin-bottom:25px}}@media (min-width:768px) and (max-width:1024px){.left{padding:3%;width:70%}.right{width:28%!important;padding:2%;margin-top:10%;margin-right:3%}}.mt-25{margin-top:25px}.cp{cursor:pointer}.item-summary{box-shadow:0 0 4px #00000040;border-radius:12px}mat-icon{font-family:Material Icons!important}::ng-deep .p-rating-icon{color:#ffc107!important;font-size:1.25rem!important}::ng-deep .p-timeline-event-content{padding:0!important}::ng-deep .p-timeline-event-connector{background:#000!important;width:3px!important;position:absolute;bottom:-10px;height:55px;left:12px}.sbt-btn{border-radius:8px}::ng-deep .p-timeline-event-marker{display:none!important}@media screen and (min-width: 1200px){.scroll-45{overflow-y:scroll;height:45vh}.scroll-60{overflow-y:scroll;height:60vh}}.f-16{font-size:16px!important}.f-13{font-size:13px!important}@media (max-width: 575.98px){.display-6{font-size:1.5rem}.h3{font-size:1.25rem}}.gap-3{gap:1rem!important}.shadow-sm{box-shadow:0 .125rem .5rem #0000001a!important}.card-header{border-bottom:unset!important}.btn:hover{transform:translateY(-1px);transition:all .2s ease}.card:hover{transform:translateY(-2px);transition:all .3s ease}.bg-opacity-10{background-color:rgba(var(--bs-primary-rgb),.1)!important}.cursor-pointer{cursor:pointer}.transition-transform{transition:transform .3s ease}.rotate-180{transform:rotate(180deg)}.card-header:hover{opacity:.9;transition:opacity .2s ease}.card-body{transition:all .3s ease}.review-img{display:flex;gap:10px;margin-top:10px}.review-img img{max-width:100px;max-height:140px}.add-review-img{color:#828484;width:65px;display:flex;align-items:center;justify-content:center;order:3px dotted black;background:#f0f2f2;border:1px solid #d5d9d9!important;cursor:pointer}.order-status{border-radius:8px;padding:5px 8px;font-size:16px}.ORDER_PLACED{background-color:#fffce1;color:#bdad18}.ORDER_CONFIRMED{background-color:#ffe5d1;color:#d97a3b}.DISPATCHED{background-color:#e1f7e7;color:#3bb378}.IN_TRANSIT{background-color:#d1e7ff;color:#3b82d9}.OUT_FOR_DELIVERY{background-color:#f6e1ff;color:#9a3bd9}.DELIVERED{color:#097d5f;background-color:#edfffa}.CANCELLED{background-color:#ffdddb;color:#c11a0f}.fs-15{font-size:15px}.review-textarea{border:1px solid #e2e8f0;border-radius:8px;font-size:14px;resize:none;background-color:#f8fafc;padding:12px 8px;transition:all .2s ease-in-out}.review-textarea:focus{border-color:#cbd5e1;background-color:#fff;box-shadow:0 0 0 3px #e2e8f080!important;outline:none}.review-upload-box{width:72px;height:72px;border:2px dashed #cbd5e1;border-radius:8px;background-color:#f8fafc;transition:all .2s ease-in-out;color:#64748b}.review-upload-box:hover{background-color:#f1f5f9;border-color:#94a3b8;color:#475569}.review-submit-btn{color:#fff!important;border-radius:8px;padding:12px 0;font-size:14px!important;border:none;letter-spacing:.3px;transition:transform .1s ease,box-shadow .2s ease}.review-submit-btn:hover{box-shadow:0 6px 15px #0000001a;transform:translateY(-1px)}.review-submit-btn:active{transform:translateY(1px)}::ng-deep .custom-timeline .custom-marker{display:flex!important;align-items:center!important;justify-content:center!important;width:28px!important;height:28px!important;border-radius:50%!important;z-index:10}::ng-deep .custom-timeline .active-marker{background-color:#fff!important;border-width:6px!important;border-style:solid!important}::ng-deep .custom-timeline .future-marker{background-color:#fff!important;border:5px solid #cbd5e1!important}::ng-deep .custom-timeline .p-timeline-event-marker{border:none!important;background:transparent!important;display:flex!important}::ng-deep .custom-timeline .p-timeline-event-connector{background-color:#cbd5e1!important;width:2px!important}::ng-deep .custom-timeline .p-timeline-event-opposite{display:none!important;flex:0!important;padding:0!important}::ng-deep .custom-timeline .p-timeline-event{min-height:50px}.text-light-grey{color:#94a3b8}.w-40{width:40%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.DecimalPipe, name: "number" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i7.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "ngmodule", type: TimelineModule }, { kind: "component", type: i8.Timeline, selector: "p-timeline", inputs: ["value", "style", "styleClass", "align", "layout"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: PanelModule }, { kind: "ngmodule", type: RatingModule }, { kind: "component", type: i9.Rating, selector: "p-rating", inputs: ["disabled", "readonly", "stars", "cancel", "iconOnClass", "iconOnStyle", "iconOffClass", "iconOffStyle", "iconCancelClass", "iconCancelStyle", "autofocus"], outputs: ["onRate", "onCancel", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTooltipModule }] }); }
|
|
199
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OrderDetailsComponent, isStandalone: true, selector: "simpo-order-details", inputs: { responseData: "responseData", data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass", orderDetailData: "orderDetailData" }, outputs: { goBackEmitter: "goBackEmitter" }, ngImport: i0, template: "<ng-container *ngIf=\"!isLoading\">\r\n <div class=\"container-fluid\" [attr.style]=\"customClass\" style=\"background-color: #f8f9fa; min-height: 100vh;\">\r\n <!-- Main Box -->\r\n <div class=\"border-0 mx-auto\">\r\n\r\n <!-- Back button & Thanks -->\r\n <div class=\"d-flex align-items-center mb-2\">\r\n <svg (click)=\"goBack()\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-chevron-left cp text-muted\">\r\n <path d=\"m15 18-6-6 6-6\"></path>\r\n </svg>\r\n <span class=\"text-muted fw-medium py-1\">Thanks!</span>\r\n </div>\r\n\r\n <!-- Main Headline -->\r\n <h2 class=\"fw-semibold mb-2 text-dark\" style=\"font-size: 1.75rem;\">\r\n {{ orderDetailData?.brandOrderDetails?.[0]?.orderStatus?.replaceAll(\"_\", \" \") | titlecase }} \uD83D\uDE80\r\n </h2>\r\n <p class=\"text-muted mb-3 fs-15\">\r\n {{ orderDetailData?.brandOrderDetails?.[0]?.orderStatus === 'DELIVERED' ? 'Your order has been\r\n delivered. Enjoy!' : (orderDetailData?.brandOrderDetails?.[0]?.orderStatus === 'CANCELLED' ? 'Your order\r\n was cancelled.' : 'Your order is on the way. It will be shipped. We will inform you.') }}\r\n </p>\r\n\r\n <!-- Colored Line -->\r\n <div class=\"mb-3\" style=\"height: 3px; width: 100%;\"\r\n [style.background]=\"'linear-gradient(to right, ' + (styles?.background?.color || '#20c997') + ', transparent)'\">\r\n </div>\r\n\r\n <!-- Order Number & Actions -->\r\n <div class=\"d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-2\">\r\n <div class=\"fw-semibold text-dark mb-2 mb-md-0 d-flex align-items-center\">\r\n Order number:\r\n <span class=\"ms-1\" [style.color]=\"styles?.background?.color || '#20c997'\">\r\n {{ orderDetailData?.orderNum }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Content Grid Layout -->\r\n <div class=\"row mt-2\">\r\n <!-- Left Column -->\r\n <div class=\"col-lg-7 col-xl-8 mb-4\">\r\n <!-- Items List -->\r\n <div class=\"card border mb-4 overflow-hidden\"\r\n style=\"border-color: #eaeaea !important; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.02);\">\r\n <ng-container\r\n *ngFor=\"let item of orderDetailData?.brandOrderDetails[0]?.orderedItems; let last = last\">\r\n <div class=\"p-4\" [ngClass]=\"{'border-bottom': !last}\">\r\n <div class=\"d-flex flex-column flex-md-row align-items-start justify-content-between\">\r\n <div class=\"d-flex gap-4 w-100\">\r\n <!-- Image -->\r\n <img loading=\"lazy\"\r\n onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [src]=\"item.imgUrl\" alt=\"{{ item.itemName }}\"\r\n class=\"rounded shadow-sm flex-shrink-0\"\r\n style=\"width: 80px; height: 80px; object-fit: cover; border-radius: 8px !important;\">\r\n\r\n <!-- Details -->\r\n <div class=\"flex-grow-1\">\r\n <h6 class=\"fw-bold text-dark mb-1\" style=\"font-size: 15px;\">{{ item.itemName\r\n }}</h6>\r\n <p class=\"text-muted small mb-2\" style=\"font-size: 13px;\"\r\n *ngIf=\"item.variantName || item.customizationDetails\">{{\r\n item.variantName ||\r\n 'Regular' }}</p>\r\n <div class=\"fw-semibold text-dark mt-1\" style=\"font-size: 13px;\">Quantity {{\r\n item.quantity }}</div>\r\n\r\n <!-- Review Section -->\r\n <div class=\"mt-4 pt-3 border-top\"\r\n *ngIf=\"orderDetailData?.brandOrderDetails?.[0]?.orderStatus == 'DELIVERED'\">\r\n\r\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\r\n <h6 class=\"fw-bold mb-0 text-dark\" style=\"font-size: 14px;\">Leave a\r\n Review\r\n </h6>\r\n <p-rating [(ngModel)]=\"item.rating\" [cancel]=\"false\"\r\n [readonly]=\"false\"\r\n (ngModelChange)=\"submitReview(item)\"></p-rating>\r\n </div>\r\n\r\n <div class=\"add-detail-review text-primary fw-medium cursor-pointer d-inline-flex align-items-center gap-1\"\r\n style=\"font-size: 13px;\"\r\n (click)=\"item.showReview = !item.showReview\">\r\n <mat-icon\r\n style=\"font-size: 15px; width: 15px; height: 15px;\">mode_edit</mat-icon>\r\n <span>Write a Detailed Review</span>\r\n </div>\r\n\r\n <div *ngIf=\"item.showReview\" class=\"mt-3 p-4 bg-white\"\r\n style=\"border: 1px solid #f0f0f0; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.03);\">\r\n\r\n <h6 class=\"fw-semibold text-dark mb-3\" style=\"font-size: 14px;\">\r\n Share your\r\n experience</h6>\r\n\r\n <div class=\"mb-4\">\r\n <textarea class=\"form-control shadow-none review-textarea\"\r\n [(ngModel)]=\"item.review\" rows=\"4\"\r\n placeholder=\"What did you like or dislike? How was the fit and quality?\"></textarea>\r\n </div>\r\n\r\n <div class=\"mb-4\">\r\n <h6 class=\"fw-medium text-muted mb-2\" style=\"font-size: 13px;\">\r\n Attach\r\n Photos <span\r\n style=\"font-size: 11px; opacity: 0.7;\">(Optional)</span>\r\n </h6>\r\n <div class=\"d-flex gap-3 flex-wrap align-items-center\">\r\n <div class=\"position-relative\"\r\n *ngFor=\"let img of item?.reviewImages ?? []\">\r\n <img [src]=\"img.imgUrl\" alt=\"\"\r\n style=\"width: 72px; height: 72px; object-fit: cover; border-radius: 8px; border: 1px solid #e2e8f0; box-shadow: 0 2px 4px rgba(0,0,0,0.02);\">\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-center cursor-pointer review-upload-box\"\r\n (click)=\"reviewFileInput.click()\">\r\n <mat-icon\r\n style=\"font-size: 26px; width: 26px; height: 26px;\">add_photo_alternate</mat-icon>\r\n </div>\r\n <input type=\"file\" name=\"myfile\" multiple hidden\r\n accept=\"image/jpg,image/jpeg,image/gif,image/png,application/pdf,image/x-eps\"\r\n (change)=\"uploadImage($event, item)\" class=\"pc-btn\"\r\n #reviewFileInput />\r\n </div>\r\n </div>\r\n\r\n <div class=\"w-100 mt-2 d-flex justify-content-end\">\r\n <button\r\n class=\"btn w-40 fw-bold shadow-sm d-flex justify-content-center align-items-center gap-2 review-submit-btn\"\r\n [style.background]=\"styles?.background?.color || '#20c997'\"\r\n (click)=\"submitReview(item)\">\r\n Submit Review\r\n <mat-icon\r\n style=\"font-size: 18px; width: 18px; height: 18px;\">send</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Price -->\r\n <div class=\"text-end fw-bold text-dark d-none d-md-block\"\r\n style=\"font-size: 15px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ (item.sellingPrice * item.quantity) |\r\n number:\r\n '1.0-2' }}\r\n </div>\r\n </div>\r\n <!-- Mobile Price -->\r\n <div class=\"text-start fw-bold text-dark fs-6 mt-3 d-md-none w-100\">\r\n <span [innerHTML]=\"currency\"></span>{{ (item.sellingPrice * item.quantity) |\r\n number:\r\n '1.0-2' }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Summary Section -->\r\n <div class=\"row gx-5\">\r\n <!-- Left: Address & Payment -->\r\n <div class=\"col-md-6 mb-4 mb-md-0 d-flex flex-column gap-4\">\r\n <div>\r\n <h6 class=\"text-dark mb-2\" style=\"font-size: 13px; font-weight: 600;\">Shipping Address\r\n </h6>\r\n <div class=\"text-dark\" style=\"font-size: 13px;\">\r\n <span class=\"d-block mb-1\">{{ orderDetailData?.addressDetails?.receiverName\r\n }}</span>\r\n <span class=\"text-muted d-block\" style=\"line-height: 1.5; max-width: 280px;\">\r\n {{ orderAddress }}<br>\r\n {{ orderDetailData?.addressDetails?.receiverPhone }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <h6 class=\"text-dark mb-2\" style=\"font-size: 13px; font-weight: 600;\">Payment</h6>\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <span class=\"text-primary fw-bolder fs-5\"\r\n *ngIf=\"getKey(orderDetailData?.paymentDetails)!=='COD'\"\r\n style=\"font-family: Arial, sans-serif; letter-spacing: -0.5px;\">VISA</span>\r\n <mat-icon *ngIf=\"getKey(orderDetailData?.paymentDetails)==='COD'\" class=\"text-muted\"\r\n style=\"font-size: 28px; width: 28px; height: 28px;\">payments</mat-icon>\r\n\r\n <div>\r\n <div class=\"text-dark\" style=\"font-size: 13px;\">\r\n {{orderDetailData?.paymentDetails ?\r\n (getKey(orderDetailData?.paymentDetails)==='COD' ? 'Cash on Delivery':\r\n getKey(orderDetailData?.paymentDetails) ) : 'N/A'}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px; letter-spacing: 0.5px;\"\r\n *ngIf=\"getKey(orderDetailData?.paymentDetails)!=='COD'\">**** **** **** 1234\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Right: Bill Details -->\r\n <div class=\"col-md-6 pt-1\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Subtotal</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.totalNetValue |\r\n number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\"\r\n *ngIf=\"orderDetailData?.billDetails?.discountAmount\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Discount</span>\r\n <span class=\"text-success fw-medium\" style=\"font-size: 13px;\">\r\n -<span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.discountAmount\r\n |\r\n number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Shipping</span>\r\n <span class=\"text-dark fw-medium\"\r\n style=\"font-size: 13px;\">{{orderDetailData?.billDetails.deliveryCharges ?\r\n orderDetailData?.billDetails.deliveryCharges : 'FREE'}}</span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Estimated Tax</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.discountAmount\r\n ?\r\n orderDetailData?.billDetails?.totalTaxAfterDiscount :\r\n orderDetailData?.billDetails?.totalTax\r\n | number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2 text-success\" *ngIf=\"orderDetailData?.rewardUsed === 'REWARD_POINTS'\">\r\n <span style=\"font-size: 13px;\">Reward Amount</span>\r\n <span class=\" fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.pointsConvertedINR }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2 text-success\" *ngIf=\"orderDetailData?.rewardUsed === 'VOUCHER'\">\r\n <span style=\"font-size: 13px;\">Reward Amount</span>\r\n <span class=\" fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData.voucherValue }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\"\r\n *ngIf=\"orderDetailData?.billDetails?.orraSchemeRedeemedAmount\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Redeem Amount</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n -<span [innerHTML]=\"currency\"></span>{{\r\n orderDetailData?.billDetails?.orraSchemeRedeemedAmount | number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <hr class=\"text-muted my-3\" style=\"opacity: 0.15;\">\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"text-dark\" style=\"font-size: 14px; font-weight: 600;\">Total</span>\r\n <span class=\"text-dark fw-bold\" style=\"font-size: 16px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.finalPrice }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center text-success\" *ngIf=\"orderDetailData?.rewardUsed === 'REWARD_POINTS'\">\r\n <span style=\"font-size: 14px; font-weight: 600;\">Amount Paid</span>\r\n <span class=\"fw-bold\" style=\"font-size: 16px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.finalPrice === orderDetailData?.pointsConvertedINR ? '0' : (orderDetailData?.billDetails?.finalPrice - orderDetailData?.pointsConvertedINR) }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center text-success\" *ngIf=\"orderDetailData?.rewardUsed === 'VOUCHER'\">\r\n <span style=\"font-size: 14px; font-weight: 600;\">Amount Paid</span>\r\n <span class=\"fw-bold\" style=\"font-size: 16px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.finalPrice === orderDetailData?.voucherValue ? '0' : (orderDetailData?.billDetails?.finalPrice - orderDetailData?.voucherValue) }}\r\n </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Right Column -->\r\n <div class=\"col-lg-5 col-xl-4\">\r\n <!-- Timeline Card -->\r\n <div class=\"card border p-4 mb-4\"\r\n style=\"border-color: #eaeaea !important; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.02);\"\r\n *ngIf=\"orderDetailData?.orderTrackingLink || (orderTimiline && orderTimiline.length > 0)\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-4 pb-3 border-bottom\">\r\n <h5 class=\"fw-bold mb-0 text-dark d-flex align-items-center gap-2\" style=\"font-size: 16px;\">\r\n <mat-icon style=\"color: #6c757d;\">timeline</mat-icon> Order Timeline\r\n </h5>\r\n\r\n <div *ngIf=\"orderDetailData?.orderTrackingLink\"\r\n class=\"d-inline-flex align-items-center gap-1 cursor-pointer fw-medium\"\r\n [style.color]=\"styles?.background?.color || '#0d6efd'\" style=\"font-size: 13px;\"\r\n (click)=\"trackOrder()\">\r\n <mat-icon\r\n style=\"font-size: 15px; width: 15px; height: 15px;\">location_searching</mat-icon>\r\n <span style=\"text-decoration: underline; text-underline-offset: 3px;\">Track Order</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"px-2 pt-2\" *ngIf=\"orderTimiline && orderTimiline.length > 0\">\r\n <p-timeline [value]=\"orderTimiline\" styleClass=\"custom-timeline\" align=\"left\">\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <!-- Completed -->\r\n <span class=\"custom-marker completed-marker\"\r\n *ngIf=\"event.statusType === 'completed' || event.statusType === 'delivered'\"\r\n [style.backgroundColor]=\"styles?.background?.color || '#059669'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"3\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"></polyline>\r\n </svg>\r\n </span>\r\n\r\n <!-- Active -->\r\n <span class=\"custom-marker active-marker\" *ngIf=\"event.statusType === 'active'\"\r\n [style.borderColor]=\"styles?.background?.color || '#059669'\"></span>\r\n\r\n <!-- Future -->\r\n <span class=\"custom-marker future-marker\"\r\n *ngIf=\"event.statusType === 'future'\"></span>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\" let-event let-last=\"last\">\r\n <div class=\"ms-4\" [ngClass]=\"{'pb-4': !last}\">\r\n <div class=\"fw-semibold text-dark\" style=\"font-size: 15px; margin-bottom: 2px;\">\r\n {{\r\n event.name?.replaceAll(\"_\", \" \") | titlecase }}</div>\r\n <div style=\"font-size: 14px;\"\r\n [ngClass]=\"{'text-muted': event.statusType !== 'future', 'text-light-grey': event.statusType === 'future'}\">\r\n {{ event.date ? (event.date | date:'MMM d') : 'Not yet' }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-timeline>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<!-- Loading Skeleton -->\r\n<div class=\"container-fluid py-4\" *ngIf=\"isLoading\" style=\"background-color: #f8f9fa; min-height: 100vh;\">\r\n <div class=\"mx-auto\" style=\"max-width: 1000px;\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '60vh',\r\n 'border-radius': '12px',\r\n 'margin': '20px 0'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n</div>", styles: [".right{height:250px;padding:15px;background-color:#f8f8f8;border-radius:8px;color:#000}*{font-family:var(--website-font-family)}hr{border-top-width:2px;margin:15px 0}.f-13{font-size:13px}.f-16{font-size:16px}.fw-800{font-weight:800}.br-6{border-radius:6px}textarea{resize:unset}.action-btn>button{font-size:14px!important;border:none;width:fit-content!important;margin-top:5px;border-radius:3px;padding:5px 10px;background-color:tomato;color:#fff}.mat-icon{height:30px;width:30px;font-size:30px}.timeline{margin:25px 0}.onlyMobile{display:none}.track-order{background-color:#000;color:#fff;border:1px solid black;width:auto;border-radius:3px;padding:5px}@media only screen and (max-width: 475px){.onlyDesktop{display:none!important}.onlyMobile{display:block}.mat-icon{width:46px}.time-line{padding-bottom:6px}.right{width:98%!important;margin-bottom:4px!important;height:auto!important;padding:15px!important;margin-top:5%}.main-section{width:100%!important;flex-direction:column!important}.left{width:100%!important;padding:3%}.orderNum{margin-bottom:25px}}@media (min-width:768px) and (max-width:1024px){.left{padding:3%;width:70%}.right{width:28%!important;padding:2%;margin-top:10%;margin-right:3%}}.mt-25{margin-top:25px}.cp{cursor:pointer}.item-summary{box-shadow:0 0 4px #00000040;border-radius:12px}mat-icon{font-family:Material Icons!important}::ng-deep .p-rating-icon{color:#ffc107!important;font-size:1.25rem!important}::ng-deep .p-timeline-event-content{padding:0!important}::ng-deep .p-timeline-event-connector{background:#000!important;width:3px!important;position:absolute;bottom:-10px;height:55px;left:12px}.sbt-btn{border-radius:8px}::ng-deep .p-timeline-event-marker{display:none!important}@media screen and (min-width: 1200px){.scroll-45{overflow-y:scroll;height:45vh}.scroll-60{overflow-y:scroll;height:60vh}}.f-16{font-size:16px!important}.f-13{font-size:13px!important}@media (max-width: 575.98px){.display-6{font-size:1.5rem}.h3{font-size:1.25rem}}.gap-3{gap:1rem!important}.shadow-sm{box-shadow:0 .125rem .5rem #0000001a!important}.card-header{border-bottom:unset!important}.btn:hover{transform:translateY(-1px);transition:all .2s ease}.card:hover{transform:translateY(-2px);transition:all .3s ease}.bg-opacity-10{background-color:rgba(var(--bs-primary-rgb),.1)!important}.cursor-pointer{cursor:pointer}.transition-transform{transition:transform .3s ease}.rotate-180{transform:rotate(180deg)}.card-header:hover{opacity:.9;transition:opacity .2s ease}.card-body{transition:all .3s ease}.review-img{display:flex;gap:10px;margin-top:10px}.review-img img{max-width:100px;max-height:140px}.add-review-img{color:#828484;width:65px;display:flex;align-items:center;justify-content:center;order:3px dotted black;background:#f0f2f2;border:1px solid #d5d9d9!important;cursor:pointer}.order-status{border-radius:8px;padding:5px 8px;font-size:16px}.ORDER_PLACED{background-color:#fffce1;color:#bdad18}.ORDER_CONFIRMED{background-color:#ffe5d1;color:#d97a3b}.DISPATCHED{background-color:#e1f7e7;color:#3bb378}.IN_TRANSIT{background-color:#d1e7ff;color:#3b82d9}.OUT_FOR_DELIVERY{background-color:#f6e1ff;color:#9a3bd9}.DELIVERED{color:#097d5f;background-color:#edfffa}.CANCELLED{background-color:#ffdddb;color:#c11a0f}.fs-15{font-size:15px}.review-textarea{border:1px solid #e2e8f0;border-radius:8px;font-size:14px;resize:none;background-color:#f8fafc;padding:12px 8px;transition:all .2s ease-in-out}.review-textarea:focus{border-color:#cbd5e1;background-color:#fff;box-shadow:0 0 0 3px #e2e8f080!important;outline:none}.review-upload-box{width:72px;height:72px;border:2px dashed #cbd5e1;border-radius:8px;background-color:#f8fafc;transition:all .2s ease-in-out;color:#64748b}.review-upload-box:hover{background-color:#f1f5f9;border-color:#94a3b8;color:#475569}.review-submit-btn{color:#fff!important;border-radius:8px;padding:12px 0;font-size:14px!important;border:none;letter-spacing:.3px;transition:transform .1s ease,box-shadow .2s ease}.review-submit-btn:hover{box-shadow:0 6px 15px #0000001a;transform:translateY(-1px)}.review-submit-btn:active{transform:translateY(1px)}::ng-deep .custom-timeline .custom-marker{display:flex!important;align-items:center!important;justify-content:center!important;width:28px!important;height:28px!important;border-radius:50%!important;z-index:10}::ng-deep .custom-timeline .active-marker{background-color:#fff!important;border-width:6px!important;border-style:solid!important}::ng-deep .custom-timeline .future-marker{background-color:#fff!important;border:5px solid #cbd5e1!important}::ng-deep .custom-timeline .p-timeline-event-marker{border:none!important;background:transparent!important;display:flex!important}::ng-deep .custom-timeline .p-timeline-event-connector{background-color:#cbd5e1!important;width:2px!important}::ng-deep .custom-timeline .p-timeline-event-opposite{display:none!important;flex:0!important;padding:0!important}::ng-deep .custom-timeline .p-timeline-event{min-height:50px}.text-light-grey{color:#94a3b8}.w-40{width:40%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.DecimalPipe, name: "number" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i7.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "ngmodule", type: TimelineModule }, { kind: "component", type: i8.Timeline, selector: "p-timeline", inputs: ["value", "style", "styleClass", "align", "layout"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: PanelModule }, { kind: "ngmodule", type: RatingModule }, { kind: "component", type: i9.Rating, selector: "p-rating", inputs: ["disabled", "readonly", "stars", "cancel", "iconOnClass", "iconOnStyle", "iconOffClass", "iconOffStyle", "iconCancelClass", "iconCancelStyle", "autofocus"], outputs: ["onRate", "onCancel", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTooltipModule }] }); }
|
|
200
200
|
}
|
|
201
201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OrderDetailsComponent, decorators: [{
|
|
202
202
|
type: Component,
|
|
@@ -210,7 +210,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
210
210
|
FormsModule,
|
|
211
211
|
BackgroundDirective,
|
|
212
212
|
MatTooltipModule
|
|
213
|
-
], template: "<ng-container *ngIf=\"!isLoading\">\r\n <div class=\"container-fluid\" [attr.style]=\"customClass\" style=\"background-color: #f8f9fa; min-height: 100vh;\">\r\n <!-- Main Box -->\r\n <div class=\"border-0 mx-auto\">\r\n\r\n <!-- Back button & Thanks -->\r\n <div class=\"d-flex align-items-center mb-2\">\r\n <svg (click)=\"goBack()\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-chevron-left cp text-muted\">\r\n <path d=\"m15 18-6-6 6-6\"></path>\r\n </svg>\r\n <span class=\"text-muted fw-medium py-1\">Thanks!</span>\r\n </div>\r\n\r\n <!-- Main Headline -->\r\n <h2 class=\"fw-semibold mb-2 text-dark\" style=\"font-size: 1.75rem;\">\r\n {{ orderDetailData?.brandOrderDetails?.[0]?.orderStatus?.replaceAll(\"_\", \" \") | titlecase }} \uD83D\uDE80\r\n </h2>\r\n <p class=\"text-muted mb-3 fs-15\">\r\n {{ orderDetailData?.brandOrderDetails?.[0]?.orderStatus === 'DELIVERED' ? 'Your order has been\r\n delivered. Enjoy!' : (orderDetailData?.brandOrderDetails?.[0]?.orderStatus === 'CANCELLED' ? 'Your order\r\n was cancelled.' : 'Your order is on the way. It will be shipped. We will inform you.') }}\r\n </p>\r\n\r\n <!-- Colored Line -->\r\n <div class=\"mb-3\" style=\"height: 3px; width: 100%;\"\r\n [style.background]=\"'linear-gradient(to right, ' + (styles?.background?.color || '#20c997') + ', transparent)'\">\r\n </div>\r\n\r\n <!-- Order Number & Actions -->\r\n <div class=\"d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-2\">\r\n <div class=\"fw-semibold text-dark mb-2 mb-md-0 d-flex align-items-center\">\r\n Order number:\r\n <span class=\"ms-1\" [style.color]=\"styles?.background?.color || '#20c997'\">\r\n {{ orderDetailData?.orderNum }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Content Grid Layout -->\r\n <div class=\"row mt-2\">\r\n <!-- Left Column -->\r\n <div class=\"col-lg-7 col-xl-8 mb-4\">\r\n <!-- Items List -->\r\n <div class=\"card border mb-4 overflow-hidden\"\r\n style=\"border-color: #eaeaea !important; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.02);\">\r\n <ng-container\r\n *ngFor=\"let item of orderDetailData?.brandOrderDetails[0]?.orderedItems; let last = last\">\r\n <div class=\"p-4\" [ngClass]=\"{'border-bottom': !last}\">\r\n <div class=\"d-flex flex-column flex-md-row align-items-start justify-content-between\">\r\n <div class=\"d-flex gap-4 w-100\">\r\n <!-- Image -->\r\n <img loading=\"lazy\"\r\n onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [src]=\"item.imgUrl\" alt=\"{{ item.itemName }}\"\r\n class=\"rounded shadow-sm flex-shrink-0\"\r\n style=\"width: 80px; height: 80px; object-fit: cover; border-radius: 8px !important;\">\r\n\r\n <!-- Details -->\r\n <div class=\"flex-grow-1\">\r\n <h6 class=\"fw-bold text-dark mb-1\" style=\"font-size: 15px;\">{{ item.itemName\r\n }}</h6>\r\n <p class=\"text-muted small mb-2\" style=\"font-size: 13px;\"\r\n *ngIf=\"item.variantName || item.customizationDetails\">{{\r\n item.variantName ||\r\n 'Regular' }}</p>\r\n <div class=\"fw-semibold text-dark mt-1\" style=\"font-size: 13px;\">Quantity {{\r\n item.quantity }}</div>\r\n\r\n <!-- Review Section -->\r\n <div class=\"mt-4 pt-3 border-top\"\r\n *ngIf=\"orderDetailData?.brandOrderDetails?.[0]?.orderStatus == 'DELIVERED'\">\r\n\r\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\r\n <h6 class=\"fw-bold mb-0 text-dark\" style=\"font-size: 14px;\">Leave a\r\n Review\r\n </h6>\r\n <p-rating [(ngModel)]=\"item.rating\" [cancel]=\"false\"\r\n [readonly]=\"false\"\r\n (ngModelChange)=\"submitReview(item)\"></p-rating>\r\n </div>\r\n\r\n <div class=\"add-detail-review text-primary fw-medium cursor-pointer d-inline-flex align-items-center gap-1\"\r\n style=\"font-size: 13px;\"\r\n (click)=\"item.showReview = !item.showReview\">\r\n <mat-icon\r\n style=\"font-size: 15px; width: 15px; height: 15px;\">mode_edit</mat-icon>\r\n <span>Write a Detailed Review</span>\r\n </div>\r\n\r\n <div *ngIf=\"item.showReview\" class=\"mt-3 p-4 bg-white\"\r\n style=\"border: 1px solid #f0f0f0; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.03);\">\r\n\r\n <h6 class=\"fw-semibold text-dark mb-3\" style=\"font-size: 14px;\">\r\n Share your\r\n experience</h6>\r\n\r\n <div class=\"mb-4\">\r\n <textarea class=\"form-control shadow-none review-textarea\"\r\n [(ngModel)]=\"item.review\" rows=\"4\"\r\n placeholder=\"What did you like or dislike? How was the fit and quality?\"></textarea>\r\n </div>\r\n\r\n <div class=\"mb-4\">\r\n <h6 class=\"fw-medium text-muted mb-2\" style=\"font-size: 13px;\">\r\n Attach\r\n Photos <span\r\n style=\"font-size: 11px; opacity: 0.7;\">(Optional)</span>\r\n </h6>\r\n <div class=\"d-flex gap-3 flex-wrap align-items-center\">\r\n <div class=\"position-relative\"\r\n *ngFor=\"let img of item?.reviewImages ?? []\">\r\n <img [src]=\"img.imgUrl\" alt=\"\"\r\n style=\"width: 72px; height: 72px; object-fit: cover; border-radius: 8px; border: 1px solid #e2e8f0; box-shadow: 0 2px 4px rgba(0,0,0,0.02);\">\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-center cursor-pointer review-upload-box\"\r\n (click)=\"reviewFileInput.click()\">\r\n <mat-icon\r\n style=\"font-size: 26px; width: 26px; height: 26px;\">add_photo_alternate</mat-icon>\r\n </div>\r\n <input type=\"file\" name=\"myfile\" multiple hidden\r\n accept=\"image/jpg,image/jpeg,image/gif,image/png,application/pdf,image/x-eps\"\r\n (change)=\"uploadImage($event, item)\" class=\"pc-btn\"\r\n #reviewFileInput />\r\n </div>\r\n </div>\r\n\r\n <div class=\"w-100 mt-2 d-flex justify-content-end\">\r\n <button\r\n class=\"btn w-40 fw-bold shadow-sm d-flex justify-content-center align-items-center gap-2 review-submit-btn\"\r\n [style.background]=\"styles?.background?.color || '#20c997'\"\r\n (click)=\"submitReview(item)\">\r\n Submit Review\r\n <mat-icon\r\n style=\"font-size: 18px; width: 18px; height: 18px;\">send</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Price -->\r\n <div class=\"text-end fw-bold text-dark d-none d-md-block\"\r\n style=\"font-size: 15px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ (item.sellingPrice * item.quantity) |\r\n number:\r\n '1.0-2' }}\r\n </div>\r\n </div>\r\n <!-- Mobile Price -->\r\n <div class=\"text-start fw-bold text-dark fs-6 mt-3 d-md-none w-100\">\r\n <span [innerHTML]=\"currency\"></span>{{ (item.sellingPrice * item.quantity) |\r\n number:\r\n '1.0-2' }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Summary Section -->\r\n <div class=\"row gx-5\">\r\n <!-- Left: Address & Payment -->\r\n <div class=\"col-md-6 mb-4 mb-md-0 d-flex flex-column gap-4\">\r\n <div>\r\n <h6 class=\"text-dark mb-2\" style=\"font-size: 13px; font-weight: 600;\">Shipping Address\r\n </h6>\r\n <div class=\"text-dark\" style=\"font-size: 13px;\">\r\n <span class=\"d-block mb-1\">{{ orderDetailData?.addressDetails?.receiverName\r\n }}</span>\r\n <span class=\"text-muted d-block\" style=\"line-height: 1.5; max-width: 280px;\">\r\n {{ orderAddress }}<br>\r\n {{ orderDetailData?.addressDetails?.receiverPhone }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <h6 class=\"text-dark mb-2\" style=\"font-size: 13px; font-weight: 600;\">Payment</h6>\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <span class=\"text-primary fw-bolder fs-5\"\r\n *ngIf=\"getKey(orderDetailData?.paymentDetails)!=='COD'\"\r\n style=\"font-family: Arial, sans-serif; letter-spacing: -0.5px;\">VISA</span>\r\n <mat-icon *ngIf=\"getKey(orderDetailData?.paymentDetails)==='COD'\" class=\"text-muted\"\r\n style=\"font-size: 28px; width: 28px; height: 28px;\">payments</mat-icon>\r\n\r\n <div>\r\n <div class=\"text-dark\" style=\"font-size: 13px;\">\r\n {{orderDetailData?.paymentDetails ?\r\n (getKey(orderDetailData?.paymentDetails)==='COD' ? 'Cash on Delivery':\r\n getKey(orderDetailData?.paymentDetails) ) : 'N/A'}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px; letter-spacing: 0.5px;\"\r\n *ngIf=\"getKey(orderDetailData?.paymentDetails)!=='COD'\">**** **** **** 1234\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Right: Bill Details -->\r\n <div class=\"col-md-6 pt-1\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Subtotal</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.totalNetValue |\r\n number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\"\r\n *ngIf=\"orderDetailData?.billDetails?.discountAmount\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Discount</span>\r\n <span class=\"text-success fw-medium\" style=\"font-size: 13px;\">\r\n -<span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.discountAmount\r\n |\r\n number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Shipping</span>\r\n <span class=\"text-dark fw-medium\"\r\n style=\"font-size: 13px;\">{{orderDetailData?.billDetails.deliveryCharges ?\r\n orderDetailData?.billDetails.deliveryCharges : 'FREE'}}</span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Estimated Tax</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.discountAmount\r\n ?\r\n orderDetailData?.billDetails?.totalTaxAfterDiscount :\r\n orderDetailData?.billDetails?.totalTax\r\n | number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\"\r\n *ngIf=\"orderDetailData?.billDetails?.orraSchemeRedeemedAmount\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Redeem Amount</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n -<span [innerHTML]=\"currency\"></span>{{\r\n orderDetailData?.billDetails?.orraSchemeRedeemedAmount | number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <hr class=\"text-muted my-3\" style=\"opacity: 0.15;\">\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"text-dark\" style=\"font-size: 14px; font-weight: 600;\">Total</span>\r\n <span class=\"text-dark fw-bold\" style=\"font-size: 16px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.finalPrice }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Right Column -->\r\n <div class=\"col-lg-5 col-xl-4\">\r\n <!-- Timeline Card -->\r\n <div class=\"card border p-4 mb-4\"\r\n style=\"border-color: #eaeaea !important; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.02);\"\r\n *ngIf=\"orderDetailData?.orderTrackingLink || (orderTimiline && orderTimiline.length > 0)\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-4 pb-3 border-bottom\">\r\n <h5 class=\"fw-bold mb-0 text-dark d-flex align-items-center gap-2\" style=\"font-size: 16px;\">\r\n <mat-icon style=\"color: #6c757d;\">timeline</mat-icon> Order Timeline\r\n </h5>\r\n\r\n <div *ngIf=\"orderDetailData?.orderTrackingLink\"\r\n class=\"d-inline-flex align-items-center gap-1 cursor-pointer fw-medium\"\r\n [style.color]=\"styles?.background?.color || '#0d6efd'\" style=\"font-size: 13px;\"\r\n (click)=\"trackOrder()\">\r\n <mat-icon\r\n style=\"font-size: 15px; width: 15px; height: 15px;\">location_searching</mat-icon>\r\n <span style=\"text-decoration: underline; text-underline-offset: 3px;\">Track Order</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"px-2 pt-2\" *ngIf=\"orderTimiline && orderTimiline.length > 0\">\r\n <p-timeline [value]=\"orderTimiline\" styleClass=\"custom-timeline\" align=\"left\">\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <!-- Completed -->\r\n <span class=\"custom-marker completed-marker\"\r\n *ngIf=\"event.statusType === 'completed' || event.statusType === 'delivered'\"\r\n [style.backgroundColor]=\"styles?.background?.color || '#059669'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"3\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"></polyline>\r\n </svg>\r\n </span>\r\n\r\n <!-- Active -->\r\n <span class=\"custom-marker active-marker\" *ngIf=\"event.statusType === 'active'\"\r\n [style.borderColor]=\"styles?.background?.color || '#059669'\"></span>\r\n\r\n <!-- Future -->\r\n <span class=\"custom-marker future-marker\"\r\n *ngIf=\"event.statusType === 'future'\"></span>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\" let-event let-last=\"last\">\r\n <div class=\"ms-4\" [ngClass]=\"{'pb-4': !last}\">\r\n <div class=\"fw-semibold text-dark\" style=\"font-size: 15px; margin-bottom: 2px;\">\r\n {{\r\n event.name?.replaceAll(\"_\", \" \") | titlecase }}</div>\r\n <div style=\"font-size: 14px;\"\r\n [ngClass]=\"{'text-muted': event.statusType !== 'future', 'text-light-grey': event.statusType === 'future'}\">\r\n {{ event.date ? (event.date | date:'MMM d') : 'Not yet' }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-timeline>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<!-- Loading Skeleton -->\r\n<div class=\"container-fluid py-4\" *ngIf=\"isLoading\" style=\"background-color: #f8f9fa; min-height: 100vh;\">\r\n <div class=\"mx-auto\" style=\"max-width: 1000px;\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '60vh',\r\n 'border-radius': '12px',\r\n 'margin': '20px 0'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n</div>", styles: [".right{height:250px;padding:15px;background-color:#f8f8f8;border-radius:8px;color:#000}*{font-family:var(--website-font-family)}hr{border-top-width:2px;margin:15px 0}.f-13{font-size:13px}.f-16{font-size:16px}.fw-800{font-weight:800}.br-6{border-radius:6px}textarea{resize:unset}.action-btn>button{font-size:14px!important;border:none;width:fit-content!important;margin-top:5px;border-radius:3px;padding:5px 10px;background-color:tomato;color:#fff}.mat-icon{height:30px;width:30px;font-size:30px}.timeline{margin:25px 0}.onlyMobile{display:none}.track-order{background-color:#000;color:#fff;border:1px solid black;width:auto;border-radius:3px;padding:5px}@media only screen and (max-width: 475px){.onlyDesktop{display:none!important}.onlyMobile{display:block}.mat-icon{width:46px}.time-line{padding-bottom:6px}.right{width:98%!important;margin-bottom:4px!important;height:auto!important;padding:15px!important;margin-top:5%}.main-section{width:100%!important;flex-direction:column!important}.left{width:100%!important;padding:3%}.orderNum{margin-bottom:25px}}@media (min-width:768px) and (max-width:1024px){.left{padding:3%;width:70%}.right{width:28%!important;padding:2%;margin-top:10%;margin-right:3%}}.mt-25{margin-top:25px}.cp{cursor:pointer}.item-summary{box-shadow:0 0 4px #00000040;border-radius:12px}mat-icon{font-family:Material Icons!important}::ng-deep .p-rating-icon{color:#ffc107!important;font-size:1.25rem!important}::ng-deep .p-timeline-event-content{padding:0!important}::ng-deep .p-timeline-event-connector{background:#000!important;width:3px!important;position:absolute;bottom:-10px;height:55px;left:12px}.sbt-btn{border-radius:8px}::ng-deep .p-timeline-event-marker{display:none!important}@media screen and (min-width: 1200px){.scroll-45{overflow-y:scroll;height:45vh}.scroll-60{overflow-y:scroll;height:60vh}}.f-16{font-size:16px!important}.f-13{font-size:13px!important}@media (max-width: 575.98px){.display-6{font-size:1.5rem}.h3{font-size:1.25rem}}.gap-3{gap:1rem!important}.shadow-sm{box-shadow:0 .125rem .5rem #0000001a!important}.card-header{border-bottom:unset!important}.btn:hover{transform:translateY(-1px);transition:all .2s ease}.card:hover{transform:translateY(-2px);transition:all .3s ease}.bg-opacity-10{background-color:rgba(var(--bs-primary-rgb),.1)!important}.cursor-pointer{cursor:pointer}.transition-transform{transition:transform .3s ease}.rotate-180{transform:rotate(180deg)}.card-header:hover{opacity:.9;transition:opacity .2s ease}.card-body{transition:all .3s ease}.review-img{display:flex;gap:10px;margin-top:10px}.review-img img{max-width:100px;max-height:140px}.add-review-img{color:#828484;width:65px;display:flex;align-items:center;justify-content:center;order:3px dotted black;background:#f0f2f2;border:1px solid #d5d9d9!important;cursor:pointer}.order-status{border-radius:8px;padding:5px 8px;font-size:16px}.ORDER_PLACED{background-color:#fffce1;color:#bdad18}.ORDER_CONFIRMED{background-color:#ffe5d1;color:#d97a3b}.DISPATCHED{background-color:#e1f7e7;color:#3bb378}.IN_TRANSIT{background-color:#d1e7ff;color:#3b82d9}.OUT_FOR_DELIVERY{background-color:#f6e1ff;color:#9a3bd9}.DELIVERED{color:#097d5f;background-color:#edfffa}.CANCELLED{background-color:#ffdddb;color:#c11a0f}.fs-15{font-size:15px}.review-textarea{border:1px solid #e2e8f0;border-radius:8px;font-size:14px;resize:none;background-color:#f8fafc;padding:12px 8px;transition:all .2s ease-in-out}.review-textarea:focus{border-color:#cbd5e1;background-color:#fff;box-shadow:0 0 0 3px #e2e8f080!important;outline:none}.review-upload-box{width:72px;height:72px;border:2px dashed #cbd5e1;border-radius:8px;background-color:#f8fafc;transition:all .2s ease-in-out;color:#64748b}.review-upload-box:hover{background-color:#f1f5f9;border-color:#94a3b8;color:#475569}.review-submit-btn{color:#fff!important;border-radius:8px;padding:12px 0;font-size:14px!important;border:none;letter-spacing:.3px;transition:transform .1s ease,box-shadow .2s ease}.review-submit-btn:hover{box-shadow:0 6px 15px #0000001a;transform:translateY(-1px)}.review-submit-btn:active{transform:translateY(1px)}::ng-deep .custom-timeline .custom-marker{display:flex!important;align-items:center!important;justify-content:center!important;width:28px!important;height:28px!important;border-radius:50%!important;z-index:10}::ng-deep .custom-timeline .active-marker{background-color:#fff!important;border-width:6px!important;border-style:solid!important}::ng-deep .custom-timeline .future-marker{background-color:#fff!important;border:5px solid #cbd5e1!important}::ng-deep .custom-timeline .p-timeline-event-marker{border:none!important;background:transparent!important;display:flex!important}::ng-deep .custom-timeline .p-timeline-event-connector{background-color:#cbd5e1!important;width:2px!important}::ng-deep .custom-timeline .p-timeline-event-opposite{display:none!important;flex:0!important;padding:0!important}::ng-deep .custom-timeline .p-timeline-event{min-height:50px}.text-light-grey{color:#94a3b8}.w-40{width:40%}\n"] }]
|
|
213
|
+
], template: "<ng-container *ngIf=\"!isLoading\">\r\n <div class=\"container-fluid\" [attr.style]=\"customClass\" style=\"background-color: #f8f9fa; min-height: 100vh;\">\r\n <!-- Main Box -->\r\n <div class=\"border-0 mx-auto\">\r\n\r\n <!-- Back button & Thanks -->\r\n <div class=\"d-flex align-items-center mb-2\">\r\n <svg (click)=\"goBack()\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-chevron-left cp text-muted\">\r\n <path d=\"m15 18-6-6 6-6\"></path>\r\n </svg>\r\n <span class=\"text-muted fw-medium py-1\">Thanks!</span>\r\n </div>\r\n\r\n <!-- Main Headline -->\r\n <h2 class=\"fw-semibold mb-2 text-dark\" style=\"font-size: 1.75rem;\">\r\n {{ orderDetailData?.brandOrderDetails?.[0]?.orderStatus?.replaceAll(\"_\", \" \") | titlecase }} \uD83D\uDE80\r\n </h2>\r\n <p class=\"text-muted mb-3 fs-15\">\r\n {{ orderDetailData?.brandOrderDetails?.[0]?.orderStatus === 'DELIVERED' ? 'Your order has been\r\n delivered. Enjoy!' : (orderDetailData?.brandOrderDetails?.[0]?.orderStatus === 'CANCELLED' ? 'Your order\r\n was cancelled.' : 'Your order is on the way. It will be shipped. We will inform you.') }}\r\n </p>\r\n\r\n <!-- Colored Line -->\r\n <div class=\"mb-3\" style=\"height: 3px; width: 100%;\"\r\n [style.background]=\"'linear-gradient(to right, ' + (styles?.background?.color || '#20c997') + ', transparent)'\">\r\n </div>\r\n\r\n <!-- Order Number & Actions -->\r\n <div class=\"d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-2\">\r\n <div class=\"fw-semibold text-dark mb-2 mb-md-0 d-flex align-items-center\">\r\n Order number:\r\n <span class=\"ms-1\" [style.color]=\"styles?.background?.color || '#20c997'\">\r\n {{ orderDetailData?.orderNum }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Content Grid Layout -->\r\n <div class=\"row mt-2\">\r\n <!-- Left Column -->\r\n <div class=\"col-lg-7 col-xl-8 mb-4\">\r\n <!-- Items List -->\r\n <div class=\"card border mb-4 overflow-hidden\"\r\n style=\"border-color: #eaeaea !important; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.02);\">\r\n <ng-container\r\n *ngFor=\"let item of orderDetailData?.brandOrderDetails[0]?.orderedItems; let last = last\">\r\n <div class=\"p-4\" [ngClass]=\"{'border-bottom': !last}\">\r\n <div class=\"d-flex flex-column flex-md-row align-items-start justify-content-between\">\r\n <div class=\"d-flex gap-4 w-100\">\r\n <!-- Image -->\r\n <img loading=\"lazy\"\r\n onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n [src]=\"item.imgUrl\" alt=\"{{ item.itemName }}\"\r\n class=\"rounded shadow-sm flex-shrink-0\"\r\n style=\"width: 80px; height: 80px; object-fit: cover; border-radius: 8px !important;\">\r\n\r\n <!-- Details -->\r\n <div class=\"flex-grow-1\">\r\n <h6 class=\"fw-bold text-dark mb-1\" style=\"font-size: 15px;\">{{ item.itemName\r\n }}</h6>\r\n <p class=\"text-muted small mb-2\" style=\"font-size: 13px;\"\r\n *ngIf=\"item.variantName || item.customizationDetails\">{{\r\n item.variantName ||\r\n 'Regular' }}</p>\r\n <div class=\"fw-semibold text-dark mt-1\" style=\"font-size: 13px;\">Quantity {{\r\n item.quantity }}</div>\r\n\r\n <!-- Review Section -->\r\n <div class=\"mt-4 pt-3 border-top\"\r\n *ngIf=\"orderDetailData?.brandOrderDetails?.[0]?.orderStatus == 'DELIVERED'\">\r\n\r\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\r\n <h6 class=\"fw-bold mb-0 text-dark\" style=\"font-size: 14px;\">Leave a\r\n Review\r\n </h6>\r\n <p-rating [(ngModel)]=\"item.rating\" [cancel]=\"false\"\r\n [readonly]=\"false\"\r\n (ngModelChange)=\"submitReview(item)\"></p-rating>\r\n </div>\r\n\r\n <div class=\"add-detail-review text-primary fw-medium cursor-pointer d-inline-flex align-items-center gap-1\"\r\n style=\"font-size: 13px;\"\r\n (click)=\"item.showReview = !item.showReview\">\r\n <mat-icon\r\n style=\"font-size: 15px; width: 15px; height: 15px;\">mode_edit</mat-icon>\r\n <span>Write a Detailed Review</span>\r\n </div>\r\n\r\n <div *ngIf=\"item.showReview\" class=\"mt-3 p-4 bg-white\"\r\n style=\"border: 1px solid #f0f0f0; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.03);\">\r\n\r\n <h6 class=\"fw-semibold text-dark mb-3\" style=\"font-size: 14px;\">\r\n Share your\r\n experience</h6>\r\n\r\n <div class=\"mb-4\">\r\n <textarea class=\"form-control shadow-none review-textarea\"\r\n [(ngModel)]=\"item.review\" rows=\"4\"\r\n placeholder=\"What did you like or dislike? How was the fit and quality?\"></textarea>\r\n </div>\r\n\r\n <div class=\"mb-4\">\r\n <h6 class=\"fw-medium text-muted mb-2\" style=\"font-size: 13px;\">\r\n Attach\r\n Photos <span\r\n style=\"font-size: 11px; opacity: 0.7;\">(Optional)</span>\r\n </h6>\r\n <div class=\"d-flex gap-3 flex-wrap align-items-center\">\r\n <div class=\"position-relative\"\r\n *ngFor=\"let img of item?.reviewImages ?? []\">\r\n <img [src]=\"img.imgUrl\" alt=\"\"\r\n style=\"width: 72px; height: 72px; object-fit: cover; border-radius: 8px; border: 1px solid #e2e8f0; box-shadow: 0 2px 4px rgba(0,0,0,0.02);\">\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-center cursor-pointer review-upload-box\"\r\n (click)=\"reviewFileInput.click()\">\r\n <mat-icon\r\n style=\"font-size: 26px; width: 26px; height: 26px;\">add_photo_alternate</mat-icon>\r\n </div>\r\n <input type=\"file\" name=\"myfile\" multiple hidden\r\n accept=\"image/jpg,image/jpeg,image/gif,image/png,application/pdf,image/x-eps\"\r\n (change)=\"uploadImage($event, item)\" class=\"pc-btn\"\r\n #reviewFileInput />\r\n </div>\r\n </div>\r\n\r\n <div class=\"w-100 mt-2 d-flex justify-content-end\">\r\n <button\r\n class=\"btn w-40 fw-bold shadow-sm d-flex justify-content-center align-items-center gap-2 review-submit-btn\"\r\n [style.background]=\"styles?.background?.color || '#20c997'\"\r\n (click)=\"submitReview(item)\">\r\n Submit Review\r\n <mat-icon\r\n style=\"font-size: 18px; width: 18px; height: 18px;\">send</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Price -->\r\n <div class=\"text-end fw-bold text-dark d-none d-md-block\"\r\n style=\"font-size: 15px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ (item.sellingPrice * item.quantity) |\r\n number:\r\n '1.0-2' }}\r\n </div>\r\n </div>\r\n <!-- Mobile Price -->\r\n <div class=\"text-start fw-bold text-dark fs-6 mt-3 d-md-none w-100\">\r\n <span [innerHTML]=\"currency\"></span>{{ (item.sellingPrice * item.quantity) |\r\n number:\r\n '1.0-2' }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Summary Section -->\r\n <div class=\"row gx-5\">\r\n <!-- Left: Address & Payment -->\r\n <div class=\"col-md-6 mb-4 mb-md-0 d-flex flex-column gap-4\">\r\n <div>\r\n <h6 class=\"text-dark mb-2\" style=\"font-size: 13px; font-weight: 600;\">Shipping Address\r\n </h6>\r\n <div class=\"text-dark\" style=\"font-size: 13px;\">\r\n <span class=\"d-block mb-1\">{{ orderDetailData?.addressDetails?.receiverName\r\n }}</span>\r\n <span class=\"text-muted d-block\" style=\"line-height: 1.5; max-width: 280px;\">\r\n {{ orderAddress }}<br>\r\n {{ orderDetailData?.addressDetails?.receiverPhone }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <h6 class=\"text-dark mb-2\" style=\"font-size: 13px; font-weight: 600;\">Payment</h6>\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <span class=\"text-primary fw-bolder fs-5\"\r\n *ngIf=\"getKey(orderDetailData?.paymentDetails)!=='COD'\"\r\n style=\"font-family: Arial, sans-serif; letter-spacing: -0.5px;\">VISA</span>\r\n <mat-icon *ngIf=\"getKey(orderDetailData?.paymentDetails)==='COD'\" class=\"text-muted\"\r\n style=\"font-size: 28px; width: 28px; height: 28px;\">payments</mat-icon>\r\n\r\n <div>\r\n <div class=\"text-dark\" style=\"font-size: 13px;\">\r\n {{orderDetailData?.paymentDetails ?\r\n (getKey(orderDetailData?.paymentDetails)==='COD' ? 'Cash on Delivery':\r\n getKey(orderDetailData?.paymentDetails) ) : 'N/A'}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px; letter-spacing: 0.5px;\"\r\n *ngIf=\"getKey(orderDetailData?.paymentDetails)!=='COD'\">**** **** **** 1234\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Right: Bill Details -->\r\n <div class=\"col-md-6 pt-1\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Subtotal</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.totalNetValue |\r\n number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\"\r\n *ngIf=\"orderDetailData?.billDetails?.discountAmount\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Discount</span>\r\n <span class=\"text-success fw-medium\" style=\"font-size: 13px;\">\r\n -<span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.discountAmount\r\n |\r\n number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Shipping</span>\r\n <span class=\"text-dark fw-medium\"\r\n style=\"font-size: 13px;\">{{orderDetailData?.billDetails.deliveryCharges ?\r\n orderDetailData?.billDetails.deliveryCharges : 'FREE'}}</span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Estimated Tax</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.discountAmount\r\n ?\r\n orderDetailData?.billDetails?.totalTaxAfterDiscount :\r\n orderDetailData?.billDetails?.totalTax\r\n | number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2 text-success\" *ngIf=\"orderDetailData?.rewardUsed === 'REWARD_POINTS'\">\r\n <span style=\"font-size: 13px;\">Reward Amount</span>\r\n <span class=\" fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.pointsConvertedINR }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2 text-success\" *ngIf=\"orderDetailData?.rewardUsed === 'VOUCHER'\">\r\n <span style=\"font-size: 13px;\">Reward Amount</span>\r\n <span class=\" fw-medium\" style=\"font-size: 13px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData.voucherValue }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\"\r\n *ngIf=\"orderDetailData?.billDetails?.orraSchemeRedeemedAmount\">\r\n <span class=\"text-muted\" style=\"font-size: 13px;\">Redeem Amount</span>\r\n <span class=\"text-dark fw-medium\" style=\"font-size: 13px;\">\r\n -<span [innerHTML]=\"currency\"></span>{{\r\n orderDetailData?.billDetails?.orraSchemeRedeemedAmount | number:'1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <hr class=\"text-muted my-3\" style=\"opacity: 0.15;\">\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"text-dark\" style=\"font-size: 14px; font-weight: 600;\">Total</span>\r\n <span class=\"text-dark fw-bold\" style=\"font-size: 16px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.finalPrice }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center text-success\" *ngIf=\"orderDetailData?.rewardUsed === 'REWARD_POINTS'\">\r\n <span style=\"font-size: 14px; font-weight: 600;\">Amount Paid</span>\r\n <span class=\"fw-bold\" style=\"font-size: 16px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.finalPrice === orderDetailData?.pointsConvertedINR ? '0' : (orderDetailData?.billDetails?.finalPrice - orderDetailData?.pointsConvertedINR) }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center text-success\" *ngIf=\"orderDetailData?.rewardUsed === 'VOUCHER'\">\r\n <span style=\"font-size: 14px; font-weight: 600;\">Amount Paid</span>\r\n <span class=\"fw-bold\" style=\"font-size: 16px;\">\r\n <span [innerHTML]=\"currency\"></span>{{ orderDetailData?.billDetails?.finalPrice === orderDetailData?.voucherValue ? '0' : (orderDetailData?.billDetails?.finalPrice - orderDetailData?.voucherValue) }}\r\n </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Right Column -->\r\n <div class=\"col-lg-5 col-xl-4\">\r\n <!-- Timeline Card -->\r\n <div class=\"card border p-4 mb-4\"\r\n style=\"border-color: #eaeaea !important; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.02);\"\r\n *ngIf=\"orderDetailData?.orderTrackingLink || (orderTimiline && orderTimiline.length > 0)\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-4 pb-3 border-bottom\">\r\n <h5 class=\"fw-bold mb-0 text-dark d-flex align-items-center gap-2\" style=\"font-size: 16px;\">\r\n <mat-icon style=\"color: #6c757d;\">timeline</mat-icon> Order Timeline\r\n </h5>\r\n\r\n <div *ngIf=\"orderDetailData?.orderTrackingLink\"\r\n class=\"d-inline-flex align-items-center gap-1 cursor-pointer fw-medium\"\r\n [style.color]=\"styles?.background?.color || '#0d6efd'\" style=\"font-size: 13px;\"\r\n (click)=\"trackOrder()\">\r\n <mat-icon\r\n style=\"font-size: 15px; width: 15px; height: 15px;\">location_searching</mat-icon>\r\n <span style=\"text-decoration: underline; text-underline-offset: 3px;\">Track Order</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"px-2 pt-2\" *ngIf=\"orderTimiline && orderTimiline.length > 0\">\r\n <p-timeline [value]=\"orderTimiline\" styleClass=\"custom-timeline\" align=\"left\">\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <!-- Completed -->\r\n <span class=\"custom-marker completed-marker\"\r\n *ngIf=\"event.statusType === 'completed' || event.statusType === 'delivered'\"\r\n [style.backgroundColor]=\"styles?.background?.color || '#059669'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"3\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\"></polyline>\r\n </svg>\r\n </span>\r\n\r\n <!-- Active -->\r\n <span class=\"custom-marker active-marker\" *ngIf=\"event.statusType === 'active'\"\r\n [style.borderColor]=\"styles?.background?.color || '#059669'\"></span>\r\n\r\n <!-- Future -->\r\n <span class=\"custom-marker future-marker\"\r\n *ngIf=\"event.statusType === 'future'\"></span>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\" let-event let-last=\"last\">\r\n <div class=\"ms-4\" [ngClass]=\"{'pb-4': !last}\">\r\n <div class=\"fw-semibold text-dark\" style=\"font-size: 15px; margin-bottom: 2px;\">\r\n {{\r\n event.name?.replaceAll(\"_\", \" \") | titlecase }}</div>\r\n <div style=\"font-size: 14px;\"\r\n [ngClass]=\"{'text-muted': event.statusType !== 'future', 'text-light-grey': event.statusType === 'future'}\">\r\n {{ event.date ? (event.date | date:'MMM d') : 'Not yet' }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-timeline>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<!-- Loading Skeleton -->\r\n<div class=\"container-fluid py-4\" *ngIf=\"isLoading\" style=\"background-color: #f8f9fa; min-height: 100vh;\">\r\n <div class=\"mx-auto\" style=\"max-width: 1000px;\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '60vh',\r\n 'border-radius': '12px',\r\n 'margin': '20px 0'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n</div>", styles: [".right{height:250px;padding:15px;background-color:#f8f8f8;border-radius:8px;color:#000}*{font-family:var(--website-font-family)}hr{border-top-width:2px;margin:15px 0}.f-13{font-size:13px}.f-16{font-size:16px}.fw-800{font-weight:800}.br-6{border-radius:6px}textarea{resize:unset}.action-btn>button{font-size:14px!important;border:none;width:fit-content!important;margin-top:5px;border-radius:3px;padding:5px 10px;background-color:tomato;color:#fff}.mat-icon{height:30px;width:30px;font-size:30px}.timeline{margin:25px 0}.onlyMobile{display:none}.track-order{background-color:#000;color:#fff;border:1px solid black;width:auto;border-radius:3px;padding:5px}@media only screen and (max-width: 475px){.onlyDesktop{display:none!important}.onlyMobile{display:block}.mat-icon{width:46px}.time-line{padding-bottom:6px}.right{width:98%!important;margin-bottom:4px!important;height:auto!important;padding:15px!important;margin-top:5%}.main-section{width:100%!important;flex-direction:column!important}.left{width:100%!important;padding:3%}.orderNum{margin-bottom:25px}}@media (min-width:768px) and (max-width:1024px){.left{padding:3%;width:70%}.right{width:28%!important;padding:2%;margin-top:10%;margin-right:3%}}.mt-25{margin-top:25px}.cp{cursor:pointer}.item-summary{box-shadow:0 0 4px #00000040;border-radius:12px}mat-icon{font-family:Material Icons!important}::ng-deep .p-rating-icon{color:#ffc107!important;font-size:1.25rem!important}::ng-deep .p-timeline-event-content{padding:0!important}::ng-deep .p-timeline-event-connector{background:#000!important;width:3px!important;position:absolute;bottom:-10px;height:55px;left:12px}.sbt-btn{border-radius:8px}::ng-deep .p-timeline-event-marker{display:none!important}@media screen and (min-width: 1200px){.scroll-45{overflow-y:scroll;height:45vh}.scroll-60{overflow-y:scroll;height:60vh}}.f-16{font-size:16px!important}.f-13{font-size:13px!important}@media (max-width: 575.98px){.display-6{font-size:1.5rem}.h3{font-size:1.25rem}}.gap-3{gap:1rem!important}.shadow-sm{box-shadow:0 .125rem .5rem #0000001a!important}.card-header{border-bottom:unset!important}.btn:hover{transform:translateY(-1px);transition:all .2s ease}.card:hover{transform:translateY(-2px);transition:all .3s ease}.bg-opacity-10{background-color:rgba(var(--bs-primary-rgb),.1)!important}.cursor-pointer{cursor:pointer}.transition-transform{transition:transform .3s ease}.rotate-180{transform:rotate(180deg)}.card-header:hover{opacity:.9;transition:opacity .2s ease}.card-body{transition:all .3s ease}.review-img{display:flex;gap:10px;margin-top:10px}.review-img img{max-width:100px;max-height:140px}.add-review-img{color:#828484;width:65px;display:flex;align-items:center;justify-content:center;order:3px dotted black;background:#f0f2f2;border:1px solid #d5d9d9!important;cursor:pointer}.order-status{border-radius:8px;padding:5px 8px;font-size:16px}.ORDER_PLACED{background-color:#fffce1;color:#bdad18}.ORDER_CONFIRMED{background-color:#ffe5d1;color:#d97a3b}.DISPATCHED{background-color:#e1f7e7;color:#3bb378}.IN_TRANSIT{background-color:#d1e7ff;color:#3b82d9}.OUT_FOR_DELIVERY{background-color:#f6e1ff;color:#9a3bd9}.DELIVERED{color:#097d5f;background-color:#edfffa}.CANCELLED{background-color:#ffdddb;color:#c11a0f}.fs-15{font-size:15px}.review-textarea{border:1px solid #e2e8f0;border-radius:8px;font-size:14px;resize:none;background-color:#f8fafc;padding:12px 8px;transition:all .2s ease-in-out}.review-textarea:focus{border-color:#cbd5e1;background-color:#fff;box-shadow:0 0 0 3px #e2e8f080!important;outline:none}.review-upload-box{width:72px;height:72px;border:2px dashed #cbd5e1;border-radius:8px;background-color:#f8fafc;transition:all .2s ease-in-out;color:#64748b}.review-upload-box:hover{background-color:#f1f5f9;border-color:#94a3b8;color:#475569}.review-submit-btn{color:#fff!important;border-radius:8px;padding:12px 0;font-size:14px!important;border:none;letter-spacing:.3px;transition:transform .1s ease,box-shadow .2s ease}.review-submit-btn:hover{box-shadow:0 6px 15px #0000001a;transform:translateY(-1px)}.review-submit-btn:active{transform:translateY(1px)}::ng-deep .custom-timeline .custom-marker{display:flex!important;align-items:center!important;justify-content:center!important;width:28px!important;height:28px!important;border-radius:50%!important;z-index:10}::ng-deep .custom-timeline .active-marker{background-color:#fff!important;border-width:6px!important;border-style:solid!important}::ng-deep .custom-timeline .future-marker{background-color:#fff!important;border:5px solid #cbd5e1!important}::ng-deep .custom-timeline .p-timeline-event-marker{border:none!important;background:transparent!important;display:flex!important}::ng-deep .custom-timeline .p-timeline-event-connector{background-color:#cbd5e1!important;width:2px!important}::ng-deep .custom-timeline .p-timeline-event-opposite{display:none!important;flex:0!important;padding:0!important}::ng-deep .custom-timeline .p-timeline-event{min-height:50px}.text-light-grey{color:#94a3b8}.w-40{width:40%}\n"] }]
|
|
214
214
|
}], ctorParameters: () => [{ type: i1.EventsService }, { type: i2.StorageServiceService }, { type: i3.RestService }, { type: i4.MessageService }, { type: i5.ImageUplaodService }], propDecorators: { responseData: [{
|
|
215
215
|
type: Input
|
|
216
216
|
}], data: [{
|
|
@@ -229,4 +229,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
229
229
|
}], goBackEmitter: [{
|
|
230
230
|
type: Output
|
|
231
231
|
}] } });
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9vcmRlci1kZXRhaWxzL29yZGVyLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvb3JkZXItZGV0YWlscy9vcmRlci1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTlFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7QUFtQjNELE1BQU0sT0FBTyxxQkFBcUI7SUFZaEMsWUFDbUIsYUFBNEIsRUFDckMsY0FBcUMsRUFDckMsV0FB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O0lBQ0gsQ0FBQzsrR0FsTlUscUJBQXFCO21HQUFyQixxQkFBcUIsb1NDbkNsQyxncHZCQWdWTSwrN0pEMVRGLFlBQVkscWdCQUNaLG9CQUFvQiw4TUFDcEIsY0FBYyxxUUFDZCxPQUFPLDBJQUNQLFdBQVcsOEJBQ1gsWUFBWSx3VEFDWixXQUFXLGluQkFFWCxnQkFBZ0I7OzRGQUtQLHFCQUFxQjtrQkFqQmpDLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsY0FBYzt3QkFDZCxPQUFPO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3FCQUNqQjs4TUFLUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNvQixlQUFlO3NCQUF4QyxLQUFLO3VCQUFDLGlCQUFpQjtnQkFDZCxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IFRpbWVsaW5lTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90aW1lbGluZSc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2ZpbGVTdHlsZXNNb2RhbCB9IGZyb20gJy4uL3VzZXItcHJvZmlsZS91c2VyLXByb2ZpbGUubW9kYWwnO1xyXG5pbXBvcnQgeyBCVVNJTkVTU19DT05TVEFOVFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYnVzaW5lc3MuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBQYW5lbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcGFuZWwnO1xyXG5pbXBvcnQgeyBSYXRpbmdNb2R1bGUgfSBmcm9tICdwcmltZW5nL3JhdGluZyc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSW1hZ2VVcGxhb2RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaW1hZ2UtdXBsb2FkLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7TWF0VG9vbHRpcE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLW9yZGVyLWRldGFpbHMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICBUaW1lbGluZU1vZHVsZSxcclxuICAgIE1hdEljb24sXHJcbiAgICBQYW5lbE1vZHVsZSxcclxuICAgIFJhdGluZ01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vcmRlci1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vb3JkZXItZGV0YWlscy5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgT3JkZXJEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSByZXNwb25zZURhdGE/OiBhbnk7XHJcbiAgQElucHV0KCkgZGF0YT86IGFueTtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dChcIm9yZGVyRGV0YWlsRGF0YVwiKSBvcmRlckRldGFpbERhdGE6IGFueTtcclxuICBAT3V0cHV0KCkgZ29CYWNrRW1pdHRlcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN0eWxlcz86IFByb2ZpbGVTdHlsZXNNb2RhbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbWFnZVVwbG9hZFNlcnZpY2U6IEltYWdlVXBsYW9kU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIHB1YmxpYyBvcmRlclRpbWlsaW5lOiBhbnkgPSBbXTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5vcmRlckRldGFpbERhdGE/LmJyYW5kT3JkZXJEZXRhaWxzPy5bMF0/LnRpbWVMaW5lTGlzdCk7XHJcbiAgICBsZXQgdGltZWxpbmVMaXN0ID0gdGhpcy5vcmRlckRldGFpbERhdGE/LmJyYW5kT3JkZXJEZXRhaWxzPy5bMF0/LnRpbWVMaW5lTGlzdCB8fCBbXTtcclxuICAgIGxldCBsYXN0RGF0ZUluZGV4ID0gLTE7XHJcbiAgICB0aW1lbGluZUxpc3QuZm9yRWFjaCgodDogYW55LCBpZHg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgaWYgKHQuZGF0ZSkgbGFzdERhdGVJbmRleCA9IGlkeDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub3JkZXJUaW1pbGluZSA9IHRpbWVsaW5lTGlzdC5tYXAoKHRpbWVsaW5lOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgbGV0IHN0YXR1c1R5cGUgPSAnZnV0dXJlJztcclxuICAgICAgaWYgKHRpbWVsaW5lLmRhdGUpIHtcclxuICAgICAgICAgaWYgKHRpbWVsaW5lLm9yZGVyU3RhdHVzID09PSAnREVMSVZFUkVEJyB8fCB0aW1lbGluZS5vcmRlclN0YXR1cyA9PT0gJ0NBTkNFTExFRCcpIHtcclxuICAgICAgICAgICAgIHN0YXR1c1R5cGUgPSAnY29tcGxldGVkJztcclxuICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIHN0YXR1c1R5cGUgPSBpbmRleCA9PT0gbGFzdERhdGVJbmRleCA/ICdhY3RpdmUnIDogJ2NvbXBsZXRlZCc7XHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGljb246IHRoaXMuZ2V0SWNvbih0aW1lbGluZS5vcmRlclN0YXR1cyksXHJcbiAgICAgICAgbmFtZTogdGltZWxpbmUudGl0bGUsXHJcbiAgICAgICAgZGVzYzogdGltZWxpbmUuYm9keSxcclxuICAgICAgICBkYXRlIDogdGltZWxpbmUuZGF0ZSxcclxuICAgICAgICBzdGF0dXNUeXBlOiBzdGF0dXNUeXBlXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5zaG93TG9hZGluZ1NjcmVlbi5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gcmVzcG9uc2U7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMub3JkZXJEZXRhaWxEYXRhPy5icmFuZE9yZGVyRGV0YWlsc1swXT8ub3JkZXJlZEl0ZW1zPy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGl0ZW0/LnJldmlldz8ubGVuZ3RoID4gMClcclxuICAgICAgICBpdGVtLnNob3dSZXZpZXcgPSB0cnVlO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaXRlbS5zaG93UmV2aWV3ID0gZmFsc2U7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJY29uKHR5cGU6IFwiT1JERVJfUExBQ0VEXCIgfCBcIk9SREVSX0NPTkZJUk1FRFwiIHwgXCJESVNQQVRDSEVEXCIgfCBcIklOX1RSQU5TSVRcIiB8IFwiT1VUX0ZPUl9ERUxJVkVSWVwiIHwgXCJERUxJVkVSRURcIiB8IFwiQ0FOQ0VMTEVEXCIpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFwiT1JERVJfUExBQ0VEXCI6XHJcbiAgICAgIGNhc2UgXCJPUkRFUl9DT05GSVJNRURcIjpcclxuICAgICAgICByZXR1cm4gXCJ3aWRnZXRzXCI7XHJcbiAgICAgIGNhc2UgXCJESVNQQVRDSEVEXCI6XHJcbiAgICAgIGNhc2UgXCJJTl9UUkFOU0lUXCI6XHJcbiAgICAgIGNhc2UgXCJPVVRfRk9SX0RFTElWRVJZXCI6XHJcbiAgICAgICAgcmV0dXJuIFwibG9jYWxfc2hpcHBpbmdcIjtcclxuICAgICAgY2FzZSBcIkRFTElWRVJFRFwiOlxyXG4gICAgICAgIHJldHVybiBcImluYm94XCI7XHJcbiAgICAgIGNhc2UgXCJDQU5DRUxMRURcIjpcclxuICAgICAgICByZXR1cm4gXCJjYW5jZWxcIjtcclxuICAgIH1cclxuICB9XHJcbiAgZ29CYWNrKCkge1xyXG4gICAgdGhpcy5nb0JhY2tFbWl0dGVyLmVtaXQoKTtcclxuICB9XHJcbiAgZ2V0S2V5KG9iajogYW55KSB7XHJcbiAgICByZXR1cm4gb2JqID8gT2JqZWN0LmtleXMob2JqKVswXSA6ICdOL0EnO1xyXG4gIH1cclxuICBnZXQgZ2V0Q2FyZEJHQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDb21wbGVtZW50Q29sb3IodGhpcy5zdHlsZXM/LmJhY2tncm91bmQuY29sb3IgPz8gXCIjMDAwMDBcIik7XHJcbiAgfVxyXG4gIGdldCBpc01vYmlsZSgpIHtcclxuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA0NzU7XHJcbiAgfVxyXG4gIGdldFN1cHBvcnRpbmdDb2xvcihiZ0NvbG9yOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29tcGxlbWVudENvbG9yKGJnQ29sb3IpO1xyXG4gIH1cclxuICBwcml2YXRlIGdldENvbXBsZW1lbnRDb2xvcihoZXhDb2xvcjogc3RyaW5nKSB7XHJcblxyXG4gICAgaWYgKGhleENvbG9yLmxlbmd0aCA8PSA0KVxyXG4gICAgICBoZXhDb2xvciA9IHRoaXMuY29udmVydEhFWChoZXhDb2xvcik7XHJcblxyXG4gICAgaGV4Q29sb3IgPSBoZXhDb2xvci5yZXBsYWNlKC9eIy8sICcnKTtcclxuXHJcbiAgICBsZXQgciA9IHBhcnNlSW50KGhleENvbG9yLnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgbGV0IGcgPSBwYXJzZUludChoZXhDb2xvci5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGxldCBiID0gcGFyc2VJbnQoaGV4Q29sb3Iuc3Vic3RyaW5nKDQsIDYpLCAxNik7XHJcblxyXG4gICAgciA9IDI1NSAtIHI7XHJcbiAgICBnID0gMjU1IC0gZztcclxuICAgIGIgPSAyNTUgLSBiO1xyXG5cclxuICAgIGxldCBjb21wSGV4ID0gYCMke3IudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyl9JHtnLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpfSR7Yi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX1gO1xyXG5cclxuICAgIHJldHVybiBjb21wSGV4LnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgY29udmVydEhFWChoZXhDb2xvcjogc3RyaW5nKSB7XHJcbiAgICBoZXhDb2xvciA9IGhleENvbG9yLnJlcGxhY2UoL14jLywgJycpO1xyXG4gICAgbGV0IGNvbG9yID0gXCIjXCI7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKylcclxuICAgICAgY29sb3IgKz0gKGhleENvbG9yW2ldICsgaGV4Q29sb3JbaSArIDFdKTtcclxuICAgIHJldHVybiBjb2xvcjtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW5jeSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEJVU0lORVNTX0NPTlNUQU5UUy5DVVJSRU5DWTtcclxuICB9XHJcbiAgZ2V0IGNhbkNhbmNlbE9yZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMub3JkZXJUaW1pbGluZT8ubGVuZ3RoID09IDE7XHJcbiAgfVxyXG4gIGdldCBvcmRlckFkZHJlc3MoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm9yZGVyRGV0YWlsRGF0YT8uYWRkcmVzc0RldGFpbHM/LmFkZHJlc3NMaW5lMSArICcsICcgKyB0aGlzLm9yZGVyRGV0YWlsRGF0YT8uYWRkcmVzc0RldGFpbHM/LmFkZHJlc3NMaW5lMiArICcsICcgKyB0aGlzLm9yZGVyRGV0YWlsRGF0YT8uYWRkcmVzc0RldGFpbHM/LmxvY2FsaXR5TmFtZSArICcsICcgKyB0aGlzLm9yZGVyRGV0YWlsRGF0YT8uYWRkcmVzc0RldGFpbHM/LmNpdHlOYW1lICsgJywgJyArIHRoaXMub3JkZXJEZXRhaWxEYXRhPy5hZGRyZXNzRGV0YWlscz8uc3RhdGVOYW1lO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tPcmRlcigpIHtcclxuICAgIHdpbmRvdy5vcGVuKHRoaXMub3JkZXJEZXRhaWxEYXRhPy5vcmRlclRyYWNraW5nTGluaywgJ19ibGFuaycpO1xyXG4gIH1cclxuICBwcm9kdWN0UmV2aWV3OiBudW1iZXIgPSAwXHJcbiAgYXN5bmMgc3VibWl0UmV2aWV3KGl0ZW06IGFueSkge1xyXG4gICAgaWYgKCFpdGVtLnJhdGluZyB8fCBpdGVtLnJhdGluZyA8IDEpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1JldmlldycsIGRldGFpbDogJ1BsZWFzZSBnaXZlIGEgcmF0aW5nIHRvIHRoZSBwcm9kdWN0JyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtLnJldmlld0ltYWdlcykge1xyXG4gICAgICBmb3IgKGxldCB1cGxvYWRlZEltYWdlIG9mIGl0ZW0ucmV2aWV3SW1hZ2VzKSB7XHJcbiAgICAgICAgaWYgKHVwbG9hZGVkSW1hZ2UuZmlsZSkge1xyXG4gICAgICAgICAgY29uc3QgZmlsZVVybDogYW55ID1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbWFnZVVwbG9hZFNlcnZpY2UudXBsb2FkRmlsZUluQVdTKFxyXG4gICAgICAgICAgICAgIHVwbG9hZGVkSW1hZ2UuZmlsZSxcclxuICAgICAgICAgICAgICAnbGlicmFyeS1tZWRpYSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIHVwbG9hZGVkSW1hZ2UuaW1nVXJsID0gZmlsZVVybFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgdXNlcklkOiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKT8udXNlcklkID8/IFwiXCIsXHJcbiAgICAgIGJ1c2luZXNzSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gXCJcIixcclxuICAgICAgcHJvZHVjdElkOiBpdGVtLml0ZW1JZCxcclxuICAgICAgcmF0aW5nOiBpdGVtLnJhdGluZyxcclxuICAgICAgcmV2aWV3OiBpdGVtLnJldmlldyxcclxuICAgICAgcHJvZHVjdEltYWdlczogaXRlbS5yZXZpZXdJbWFnZXMsXHJcbiAgICAgIG9yZGVySWQ6IHRoaXMub3JkZXJEZXRhaWxEYXRhPy51c2VyT3JkZXJJZCA/PyBcIlwiLFxyXG4gICAgICB1c2VyTmFtZTogdGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKCk/LmNvbnRhY3QubmFtZVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN0U2VydmljZS5hZGRSZXZpZXdUb1Byb2R1Y3QocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnUmV2aWV3JywgZGV0YWlsOiAnUmV2aWV3IEFkZGVkIFN1Y2Nlc3NmdWxseScgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnUmV2aWV3JywgZGV0YWlsOiAnQWRkaW5nIFJldmlldyBDYXVzZWQgZXJyb3InIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2VjdGlvbnNWaXNpYmxlID0ge1xyXG4gICAgYmlsbERldGFpbHM6IHRydWUsXHJcbiAgICBkZWxpdmVyeURldGFpbHM6IGZhbHNlLFxyXG4gICAgdGltZWxpbmU6IGZhbHNlXHJcbiAgfTtcclxuICB0b2dnbGVTZWN0aW9uKHNlY3Rpb246IGtleW9mIHR5cGVvZiB0aGlzLnNlY3Rpb25zVmlzaWJsZSkge1xyXG4gICAgdGhpcy5zZWN0aW9uc1Zpc2libGVbc2VjdGlvbl0gPSAhdGhpcy5zZWN0aW9uc1Zpc2libGVbc2VjdGlvbl07XHJcbiAgfVxyXG5cclxuICB1cGxvYWRJbWFnZShldjogYW55LCBpdGVtOiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbGVzID0gZXYudGFyZ2V0Py5maWxlcztcclxuXHJcbiAgICBpZiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ05vIGZpbGVzIGZvdW5kIGluIGlucHV0Jyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbnN1cmUgdXBsb2FkZWRJbWFnZXMgYXJyYXkgZXhpc3RzXHJcbiAgICBpZiAoIWl0ZW0ucmV2aWV3SW1hZ2VzKSB7XHJcbiAgICAgIGl0ZW0ucmV2aWV3SW1hZ2VzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgZmlsZURhdGEgb2YgZmlsZXMpIHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGl0ZW0ucmV2aWV3SW1hZ2VzLnB1c2goe1xyXG4gICAgICAgICAgaW1nVXJsOiByZXNwb25zZS50YXJnZXQucmVzdWx0LFxyXG4gICAgICAgICAgZmlsZTogZmlsZURhdGFcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpbGVSZWFkZXIgZXJyb3I6JywgZXJyKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGVEYXRhKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiBbYXR0ci5zdHlsZV09XCJjdXN0b21DbGFzc1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTsgbWluLWhlaWdodDogMTAwdmg7XCI+XHJcbiAgICAgICAgPCEtLSBNYWluIEJveCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLTAgbXgtYXV0b1wiPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBCYWNrIGJ1dHRvbiAmIFRoYW5rcyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZ29CYWNrKClcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImx1Y2lkZSBsdWNpZGUtY2hldnJvbi1sZWZ0IGNwIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwibTE1IDE4LTYtNiA2LTZcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1tZWRpdW0gcHktMVwiPlRoYW5rcyE8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBNYWluIEhlYWRsaW5lIC0tPlxyXG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJmdy1zZW1pYm9sZCBtYi0yIHRleHQtZGFya1wiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtO1wiPlxyXG4gICAgICAgICAgICAgICAge3sgb3JkZXJEZXRhaWxEYXRhPy5icmFuZE9yZGVyRGV0YWlscz8uWzBdPy5vcmRlclN0YXR1cz8ucmVwbGFjZUFsbChcIl9cIiwgXCIgXCIpIHwgdGl0bGVjYXNlIH19IPCfmoBcclxuICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIG1iLTMgZnMtMTVcIj5cclxuICAgICAgICAgICAgICAgIHt7IG9yZGVyRGV0YWlsRGF0YT8uYnJhbmRPcmRlckRldGFpbHM/LlswXT8ub3JkZXJTdGF0dXMgPT09ICdERUxJVkVSRUQnID8gJ1lvdXIgb3JkZXIgaGFzIGJlZW5cclxuICAgICAgICAgICAgICAgIGRlbGl2ZXJlZC4gRW5qb3khJyA6IChvcmRlckRldGFpbERhdGE/LmJyYW5kT3JkZXJEZXRhaWxzPy5bMF0/Lm9yZGVyU3RhdHVzID09PSAnQ0FOQ0VMTEVEJyA/ICdZb3VyIG9yZGVyXHJcbiAgICAgICAgICAgICAgICB3YXMgY2FuY2VsbGVkLicgOiAnWW91ciBvcmRlciBpcyBvbiB0aGUgd2F5LiBJdCB3aWxsIGJlIHNoaXBwZWQuIFdlIHdpbGwgaW5mb3JtIHlvdS4nKSB9fVxyXG4gICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICA8IS0tIENvbG9yZWQgTGluZSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiBzdHlsZT1cImhlaWdodDogM3B4OyB3aWR0aDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwgJyArIChzdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yIHx8ICcjMjBjOTk3JykgKyAnLCB0cmFuc3BhcmVudCknXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBPcmRlciBOdW1iZXIgJiBBY3Rpb25zIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtbWQtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLW1kLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1kYXJrIG1iLTIgbWItbWQtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgT3JkZXIgbnVtYmVyOlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiIFtzdHlsZS5jb2xvcl09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yIHx8ICcjMjBjOTk3J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmRlckRldGFpbERhdGE/Lm9yZGVyTnVtIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDb250ZW50IEdyaWQgTGF5b3V0IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gTGVmdCBDb2x1bW4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTcgY29sLXhsLTggbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gSXRlbXMgTGlzdCAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBib3JkZXIgbWItNCBvdmVyZmxvdy1oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1jb2xvcjogI2VhZWFlYSAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOiA4cHg7IGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLDAsMCwwLjAyKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3JkZXJEZXRhaWxEYXRhPy5icmFuZE9yZGVyRGV0YWlsc1swXT8ub3JkZXJlZEl0ZW1zOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTRcIiBbbmdDbGFzc109XCJ7J2JvcmRlci1ib3R0b20nOiAhbGFzdH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtbWQtcm93IGFsaWduLWl0ZW1zLXN0YXJ0IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTQgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW1hZ2UgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVycm9yPVwidGhpcy5zcmM9J2h0dHBzOi8vaS5wb3N0aW1nLmNjL2hQUzJKcFYwL25vLWltYWdlLWF2YWlsYWJsZS5qcGcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIml0ZW0uaW1nVXJsXCIgYWx0PVwie3sgaXRlbS5pdGVtTmFtZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkIHNoYWRvdy1zbSBmbGV4LXNocmluay0wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiA4MHB4OyBoZWlnaHQ6IDgwcHg7IG9iamVjdC1maXQ6IGNvdmVyOyBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERldGFpbHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJmdy1ib2xkIHRleHQtZGFyayBtYi0xXCIgc3R5bGU9XCJmb250LXNpemU6IDE1cHg7XCI+e3sgaXRlbS5pdGVtTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG1iLTJcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udmFyaWFudE5hbWUgfHwgaXRlbS5jdXN0b21pemF0aW9uRGV0YWlsc1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udmFyaWFudE5hbWUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZ3VsYXInIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZCB0ZXh0LWRhcmsgbXQtMVwiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlF1YW50aXR5IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ucXVhbnRpdHkgfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSZXZpZXcgU2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBwdC0zIGJvcmRlci10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyRGV0YWlsRGF0YT8uYnJhbmRPcmRlckRldGFpbHM/LlswXT8ub3JkZXJTdGF0dXMgPT0gJ0RFTElWRVJFRCdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cImZ3LWJvbGQgbWItMCB0ZXh0LWRhcmtcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIj5MZWF2ZSBhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV2aWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtcmF0aW5nIFsobmdNb2RlbCldPVwiaXRlbS5yYXRpbmdcIiBbY2FuY2VsXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInN1Ym1pdFJldmlldyhpdGVtKVwiPjwvcC1yYXRpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1kZXRhaWwtcmV2aWV3IHRleHQtcHJpbWFyeSBmdy1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpdGVtLnNob3dSZXZpZXcgPSAhaXRlbS5zaG93UmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTVweDsgd2lkdGg6IDE1cHg7IGhlaWdodDogMTVweDtcIj5tb2RlX2VkaXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+V3JpdGUgYSBEZXRhaWxlZCBSZXZpZXc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uc2hvd1Jldmlld1wiIGNsYXNzPVwibXQtMyBwLTQgYmctd2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjZjBmMGYwOyBib3JkZXItcmFkaXVzOiAxMnB4OyBib3gtc2hhZG93OiAwIDRweCAyMHB4IHJnYmEoMCwwLDAsMC4wMyk7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1kYXJrIG1iLTNcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZSB5b3VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZXJpZW5jZTwvaDY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2hhZG93LW5vbmUgcmV2aWV3LXRleHRhcmVhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnJldmlld1wiIHJvd3M9XCI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaGF0IGRpZCB5b3UgbGlrZSBvciBkaXNsaWtlPyBIb3cgd2FzIHRoZSBmaXQgYW5kIHF1YWxpdHk/XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwiZnctbWVkaXVtIHRleHQtbXV0ZWQgbWItMlwiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhvdG9zIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTFweDsgb3BhY2l0eTogMC43O1wiPihPcHRpb25hbCk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oNj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpbWcgb2YgaXRlbT8ucmV2aWV3SW1hZ2VzID8/IFtdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1nLmltZ1VybFwiIGFsdD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNzJweDsgaGVpZ2h0OiA3MnB4OyBvYmplY3QtZml0OiBjb3ZlcjsgYm9yZGVyLXJhZGl1czogOHB4OyBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwOyBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjAyKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGN1cnNvci1wb2ludGVyIHJldmlldy11cGxvYWQtYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXZpZXdGaWxlSW5wdXQuY2xpY2soKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDI2cHg7IHdpZHRoOiAyNnB4OyBoZWlnaHQ6IDI2cHg7XCI+YWRkX3Bob3RvX2FsdGVybmF0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwibXlmaWxlXCIgbXVsdGlwbGUgaGlkZGVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS9qcGcsaW1hZ2UvanBlZyxpbWFnZS9naWYsaW1hZ2UvcG5nLGFwcGxpY2F0aW9uL3BkZixpbWFnZS94LWVwc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZEltYWdlKCRldmVudCwgaXRlbSlcIiBjbGFzcz1cInBjLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcmV2aWV3RmlsZUlucHV0IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgbXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gdy00MCBmdy1ib2xkIHNoYWRvdy1zbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcmV2aWV3LXN1Ym1pdC1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yIHx8ICcjMjBjOTk3J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXRSZXZpZXcoaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VibWl0IFJldmlld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4OyB3aWR0aDogMThweDsgaGVpZ2h0OiAxOHB4O1wiPnNlbmQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQcmljZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZCBmdy1ib2xkIHRleHQtZGFyayBkLW5vbmUgZC1tZC1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjdXJyZW5jeVwiPjwvc3Bhbj57eyAoaXRlbS5zZWxsaW5nUHJpY2UgKiBpdGVtLnF1YW50aXR5KSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxLjAtMicgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNb2JpbGUgUHJpY2UgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN0YXJ0IGZ3LWJvbGQgdGV4dC1kYXJrIGZzLTYgbXQtMyBkLW1kLW5vbmUgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY3VycmVuY3lcIj48L3NwYW4+e3sgKGl0ZW0uc2VsbGluZ1ByaWNlICogaXRlbS5xdWFudGl0eSkgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEuMC0yJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdW1tYXJ5IFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBneC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTGVmdDogQWRkcmVzcyAmIFBheW1lbnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi00IG1iLW1kLTAgZC1mbGV4IGZsZXgtY29sdW1uIGdhcC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cInRleHQtZGFyayBtYi0yXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA2MDA7XCI+U2hpcHBpbmcgQWRkcmVzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZGFya1wiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtYmxvY2sgbWItMVwiPnt7IG9yZGVyRGV0YWlsRGF0YT8uYWRkcmVzc0RldGFpbHM/LnJlY2VpdmVyTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCIgc3R5bGU9XCJsaW5lLWhlaWdodDogMS41OyBtYXgtd2lkdGg6IDI4MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JkZXJBZGRyZXNzIH19PGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JkZXJEZXRhaWxEYXRhPy5hZGRyZXNzRGV0YWlscz8ucmVjZWl2ZXJQaG9uZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cInRleHQtZGFyayBtYi0yXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA2MDA7XCI+UGF5bWVudDwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZnctYm9sZGVyIGZzLTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRLZXkob3JkZXJEZXRhaWxEYXRhPy5wYXltZW50RGV0YWlscykhPT0nQ09EJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IC0wLjVweDtcIj5WSVNBPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJnZXRLZXkob3JkZXJEZXRhaWxEYXRhPy5wYXltZW50RGV0YWlscyk9PT0nQ09EJ1wiIGNsYXNzPVwidGV4dC1tdXRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjhweDsgd2lkdGg6IDI4cHg7IGhlaWdodDogMjhweDtcIj5wYXltZW50czwvbWF0LWljb24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZGFya1wiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3JkZXJEZXRhaWxEYXRhPy5wYXltZW50RGV0YWlscyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldEtleShvcmRlckRldGFpbERhdGE/LnBheW1lbnREZXRhaWxzKT09PSdDT0QnID8gJ0Nhc2ggb24gRGVsaXZlcnknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEtleShvcmRlckRldGFpbERhdGE/LnBheW1lbnREZXRhaWxzKSApIDogJ04vQSd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDsgbGV0dGVyLXNwYWNpbmc6IDAuNXB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRLZXkob3JkZXJEZXRhaWxEYXRhPy5wYXltZW50RGV0YWlscykhPT0nQ09EJ1wiPioqKiogKioqKiAqKioqIDEyMzRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmlnaHQ6IEJpbGwgRGV0YWlscyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHB0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIj5TdWJ0b3RhbDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFyayBmdy1tZWRpdW1cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjdXJyZW5jeVwiPjwvc3Bhbj57eyBvcmRlckRldGFpbERhdGE/LmJpbGxEZXRhaWxzPy50b3RhbE5ldFZhbHVlIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOicxLjAtMicgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/LmRpc2NvdW50QW1vdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+RGlzY291bnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1Y2Nlc3MgZnctbWVkaXVtXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC08c3BhbiBbaW5uZXJIVE1MXT1cImN1cnJlbmN5XCI+PC9zcGFuPnt7IG9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/LmRpc2NvdW50QW1vdW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOicxLjAtMicgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+U2hpcHBpbmc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhcmsgZnctbWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+e3tvcmRlckRldGFpbERhdGE/LmJpbGxEZXRhaWxzLmRlbGl2ZXJ5Q2hhcmdlcyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHMuZGVsaXZlcnlDaGFyZ2VzIDogJ0ZSRUUnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+RXN0aW1hdGVkIFRheDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFyayBmdy1tZWRpdW1cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjdXJyZW5jeVwiPjwvc3Bhbj57eyBvcmRlckRldGFpbERhdGE/LmJpbGxEZXRhaWxzPy5kaXNjb3VudEFtb3VudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/LnRvdGFsVGF4QWZ0ZXJEaXNjb3VudCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/LnRvdGFsVGF4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbnVtYmVyOicxLjAtMicgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/Lm9ycmFTY2hlbWVSZWRlZW1lZEFtb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlJlZGVlbSBBbW91bnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhcmsgZnctbWVkaXVtXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC08c3BhbiBbaW5uZXJIVE1MXT1cImN1cnJlbmN5XCI+PC9zcGFuPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/Lm9ycmFTY2hlbWVSZWRlZW1lZEFtb3VudCB8IG51bWJlcjonMS4wLTInIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwidGV4dC1tdXRlZCBteS0zXCIgc3R5bGU9XCJvcGFjaXR5OiAwLjE1O1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhcmtcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDYwMDtcIj5Ub3RhbDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFyayBmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDE2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY3VycmVuY3lcIj48L3NwYW4+e3sgb3JkZXJEZXRhaWxEYXRhPy5iaWxsRGV0YWlscz8uZmluYWxQcmljZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0IENvbHVtbiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNSBjb2wteGwtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVGltZWxpbmUgQ2FyZCAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBib3JkZXIgcC00IG1iLTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1jb2xvcjogI2VhZWFlYSAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOiA4cHg7IGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLDAsMCwwLjAyKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyRGV0YWlsRGF0YT8ub3JkZXJUcmFja2luZ0xpbmsgfHwgKG9yZGVyVGltaWxpbmUgJiYgb3JkZXJUaW1pbGluZS5sZW5ndGggPiAwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi00IHBiLTMgYm9yZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiZnctYm9sZCBtYi0wIHRleHQtZGFyayBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCIgc3R5bGU9XCJmb250LXNpemU6IDE2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY29sb3I6ICM2Yzc1N2Q7XCI+dGltZWxpbmU8L21hdC1pY29uPiBPcmRlciBUaW1lbGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oNT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3JkZXJEZXRhaWxEYXRhPy5vcmRlclRyYWNraW5nTGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBjdXJzb3ItcG9pbnRlciBmdy1tZWRpdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yIHx8ICcjMGQ2ZWZkJ1wiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRyYWNrT3JkZXIoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTVweDsgd2lkdGg6IDE1cHg7IGhlaWdodDogMTVweDtcIj5sb2NhdGlvbl9zZWFyY2hpbmc8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IHRleHQtdW5kZXJsaW5lLW9mZnNldDogM3B4O1wiPlRyYWNrIE9yZGVyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMlwiICpuZ0lmPVwib3JkZXJUaW1pbGluZSAmJiBvcmRlclRpbWlsaW5lLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRpbWVsaW5lIFt2YWx1ZV09XCJvcmRlclRpbWlsaW5lXCIgc3R5bGVDbGFzcz1cImN1c3RvbS10aW1lbGluZVwiIGFsaWduPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJtYXJrZXJcIiBsZXQtZXZlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ29tcGxldGVkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1tYXJrZXIgY29tcGxldGVkLW1hcmtlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV2ZW50LnN0YXR1c1R5cGUgPT09ICdjb21wbGV0ZWQnIHx8IGV2ZW50LnN0YXR1c1R5cGUgPT09ICdkZWxpdmVyZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5jb2xvciB8fCAnIzA1OTY2OSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMjAgNiA5IDE3IDQgMTJcIj48L3BvbHlsaW5lPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1tYXJrZXIgYWN0aXZlLW1hcmtlclwiICpuZ0lmPVwiZXZlbnQuc3RhdHVzVHlwZSA9PT0gJ2FjdGl2ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cInN0eWxlcz8uYmFja2dyb3VuZD8uY29sb3IgfHwgJyMwNTk2NjknXCI+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGdXR1cmUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLW1hcmtlciBmdXR1cmUtbWFya2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXZlbnQuc3RhdHVzVHlwZSA9PT0gJ2Z1dHVyZSdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIiBsZXQtZXZlbnQgbGV0LWxhc3Q9XCJsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy00XCIgW25nQ2xhc3NdPVwieydwYi00JzogIWxhc3R9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1kYXJrXCIgc3R5bGU9XCJmb250LXNpemU6IDE1cHg7IG1hcmdpbi1ib3R0b206IDJweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm5hbWU/LnJlcGxhY2VBbGwoXCJfXCIsIFwiIFwiKSB8IHRpdGxlY2FzZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndGV4dC1tdXRlZCc6IGV2ZW50LnN0YXR1c1R5cGUgIT09ICdmdXR1cmUnLCAndGV4dC1saWdodC1ncmV5JzogZXZlbnQuc3RhdHVzVHlwZSA9PT0gJ2Z1dHVyZSd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZXZlbnQuZGF0ZSA/IChldmVudC5kYXRlIHwgZGF0ZTonTU1NIGQnKSA6ICdOb3QgeWV0JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtdGltZWxpbmU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjwhLS0gTG9hZGluZyBTa2VsZXRvbiAtLT5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBweS00XCIgKm5nSWY9XCJpc0xvYWRpbmdcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7IG1pbi1oZWlnaHQ6IDEwMHZoO1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm14LWF1dG9cIiBzdHlsZT1cIm1heC13aWR0aDogMTAwMHB4O1wiPlxyXG4gICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyIGNvdW50PVwiMVwiIGFwcGVhcmFuY2U9XCJjaXJjbGVcIiBbdGhlbWVdPVwie1xyXG4gICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICc2MHZoJyxcclxuICAgICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnMTJweCcsXHJcbiAgICAgICAgICAgICdtYXJnaW4nOiAnMjBweCAwJ1xyXG4gICAgICAgIH1cIj48L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9vcmRlci1kZXRhaWxzL29yZGVyLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvb3JkZXItZGV0YWlscy9vcmRlci1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTlFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7QUFtQjNELE1BQU0sT0FBTyxxQkFBcUI7SUFZaEMsWUFDbUIsYUFBNEIsRUFDckMsY0FBcUMsRUFDckMsV0FB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O0lBQ0gsQ0FBQzsrR0FsTlUscUJBQXFCO21HQUFyQixxQkFBcUIsb1NDbkNsQyxrazBCQTZXTSwrN0pEdlZGLFlBQVkscWdCQUNaLG9CQUFvQiw4TUFDcEIsY0FBYyxxUUFDZCxPQUFPLDBJQUNQLFdBQVcsOEJBQ1gsWUFBWSx3VEFDWixXQUFXLGluQkFFWCxnQkFBZ0I7OzRGQUtQLHFCQUFxQjtrQkFqQmpDLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsY0FBYzt3QkFDZCxPQUFPO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3FCQUNqQjs4TUFLUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNvQixlQUFlO3NCQUF4QyxLQUFLO3VCQUFDLGlCQUFpQjtnQkFDZCxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IFRpbWVsaW5lTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90aW1lbGluZSc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2ZpbGVTdHlsZXNNb2RhbCB9IGZyb20gJy4uL3VzZXItcHJvZmlsZS91c2VyLXByb2ZpbGUubW9kYWwnO1xyXG5pbXBvcnQgeyBCVVNJTkVTU19DT05TVEFOVFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYnVzaW5lc3MuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBQYW5lbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcGFuZWwnO1xyXG5pbXBvcnQgeyBSYXRpbmdNb2R1bGUgfSBmcm9tICdwcmltZW5nL3JhdGluZyc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSW1hZ2VVcGxhb2RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaW1hZ2UtdXBsb2FkLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7TWF0VG9vbHRpcE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLW9yZGVyLWRldGFpbHMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICBUaW1lbGluZU1vZHVsZSxcclxuICAgIE1hdEljb24sXHJcbiAgICBQYW5lbE1vZHVsZSxcclxuICAgIFJhdGluZ01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vcmRlci1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vb3JkZXItZGV0YWlscy5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgT3JkZXJEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSByZXNwb25zZURhdGE/OiBhbnk7XHJcbiAgQElucHV0KCkgZGF0YT86IGFueTtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dChcIm9yZGVyRGV0YWlsRGF0YVwiKSBvcmRlckRldGFpbERhdGE6IGFueTtcclxuICBAT3V0cHV0KCkgZ29CYWNrRW1pdHRlcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN0eWxlcz86IFByb2ZpbGVTdHlsZXNNb2RhbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbWFnZVVwbG9hZFNlcnZpY2U6IEltYWdlVXBsYW9kU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIHB1YmxpYyBvcmRlclRpbWlsaW5lOiBhbnkgPSBbXTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5vcmRlckRldGFpbERhdGE/LmJyYW5kT3JkZXJEZXRhaWxzPy5bMF0/LnRpbWVMaW5lTGlzdCk7XHJcbiAgICBsZXQgdGltZWxpbmVMaXN0ID0gdGhpcy5vcmRlckRldGFpbERhdGE/LmJyYW5kT3JkZXJEZXRhaWxzPy5bMF0/LnRpbWVMaW5lTGlzdCB8fCBbXTtcclxuICAgIGxldCBsYXN0RGF0ZUluZGV4ID0gLTE7XHJcbiAgICB0aW1lbGluZUxpc3QuZm9yRWFjaCgodDogYW55LCBpZHg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgaWYgKHQuZGF0ZSkgbGFzdERhdGVJbmRleCA9IGlkeDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub3JkZXJUaW1pbGluZSA9IHRpbWVsaW5lTGlzdC5tYXAoKHRpbWVsaW5lOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgbGV0IHN0YXR1c1R5cGUgPSAnZnV0dXJlJztcclxuICAgICAgaWYgKHRpbWVsaW5lLmRhdGUpIHtcclxuICAgICAgICAgaWYgKHRpbWVsaW5lLm9yZGVyU3RhdHVzID09PSAnREVMSVZFUkVEJyB8fCB0aW1lbGluZS5vcmRlclN0YXR1cyA9PT0gJ0NBTkNFTExFRCcpIHtcclxuICAgICAgICAgICAgIHN0YXR1c1R5cGUgPSAnY29tcGxldGVkJztcclxuICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgIHN0YXR1c1R5cGUgPSBpbmRleCA9PT0gbGFzdERhdGVJbmRleCA/ICdhY3RpdmUnIDogJ2NvbXBsZXRlZCc7XHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGljb246IHRoaXMuZ2V0SWNvbih0aW1lbGluZS5vcmRlclN0YXR1cyksXHJcbiAgICAgICAgbmFtZTogdGltZWxpbmUudGl0bGUsXHJcbiAgICAgICAgZGVzYzogdGltZWxpbmUuYm9keSxcclxuICAgICAgICBkYXRlIDogdGltZWxpbmUuZGF0ZSxcclxuICAgICAgICBzdGF0dXNUeXBlOiBzdGF0dXNUeXBlXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5zaG93TG9hZGluZ1NjcmVlbi5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gcmVzcG9uc2U7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMub3JkZXJEZXRhaWxEYXRhPy5icmFuZE9yZGVyRGV0YWlsc1swXT8ub3JkZXJlZEl0ZW1zPy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGl0ZW0/LnJldmlldz8ubGVuZ3RoID4gMClcclxuICAgICAgICBpdGVtLnNob3dSZXZpZXcgPSB0cnVlO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaXRlbS5zaG93UmV2aWV3ID0gZmFsc2U7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJY29uKHR5cGU6IFwiT1JERVJfUExBQ0VEXCIgfCBcIk9SREVSX0NPTkZJUk1FRFwiIHwgXCJESVNQQVRDSEVEXCIgfCBcIklOX1RSQU5TSVRcIiB8IFwiT1VUX0ZPUl9ERUxJVkVSWVwiIHwgXCJERUxJVkVSRURcIiB8IFwiQ0FOQ0VMTEVEXCIpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFwiT1JERVJfUExBQ0VEXCI6XHJcbiAgICAgIGNhc2UgXCJPUkRFUl9DT05GSVJNRURcIjpcclxuICAgICAgICByZXR1cm4gXCJ3aWRnZXRzXCI7XHJcbiAgICAgIGNhc2UgXCJESVNQQVRDSEVEXCI6XHJcbiAgICAgIGNhc2UgXCJJTl9UUkFOU0lUXCI6XHJcbiAgICAgIGNhc2UgXCJPVVRfRk9SX0RFTElWRVJZXCI6XHJcbiAgICAgICAgcmV0dXJuIFwibG9jYWxfc2hpcHBpbmdcIjtcclxuICAgICAgY2FzZSBcIkRFTElWRVJFRFwiOlxyXG4gICAgICAgIHJldHVybiBcImluYm94XCI7XHJcbiAgICAgIGNhc2UgXCJDQU5DRUxMRURcIjpcclxuICAgICAgICByZXR1cm4gXCJjYW5jZWxcIjtcclxuICAgIH1cclxuICB9XHJcbiAgZ29CYWNrKCkge1xyXG4gICAgdGhpcy5nb0JhY2tFbWl0dGVyLmVtaXQoKTtcclxuICB9XHJcbiAgZ2V0S2V5KG9iajogYW55KSB7XHJcbiAgICByZXR1cm4gb2JqID8gT2JqZWN0LmtleXMob2JqKVswXSA6ICdOL0EnO1xyXG4gIH1cclxuICBnZXQgZ2V0Q2FyZEJHQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDb21wbGVtZW50Q29sb3IodGhpcy5zdHlsZXM/LmJhY2tncm91bmQuY29sb3IgPz8gXCIjMDAwMDBcIik7XHJcbiAgfVxyXG4gIGdldCBpc01vYmlsZSgpIHtcclxuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA0NzU7XHJcbiAgfVxyXG4gIGdldFN1cHBvcnRpbmdDb2xvcihiZ0NvbG9yOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29tcGxlbWVudENvbG9yKGJnQ29sb3IpO1xyXG4gIH1cclxuICBwcml2YXRlIGdldENvbXBsZW1lbnRDb2xvcihoZXhDb2xvcjogc3RyaW5nKSB7XHJcblxyXG4gICAgaWYgKGhleENvbG9yLmxlbmd0aCA8PSA0KVxyXG4gICAgICBoZXhDb2xvciA9IHRoaXMuY29udmVydEhFWChoZXhDb2xvcik7XHJcblxyXG4gICAgaGV4Q29sb3IgPSBoZXhDb2xvci5yZXBsYWNlKC9eIy8sICcnKTtcclxuXHJcbiAgICBsZXQgciA9IHBhcnNlSW50KGhleENvbG9yLnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgbGV0IGcgPSBwYXJzZUludChoZXhDb2xvci5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGxldCBiID0gcGFyc2VJbnQoaGV4Q29sb3Iuc3Vic3RyaW5nKDQsIDYpLCAxNik7XHJcblxyXG4gICAgciA9IDI1NSAtIHI7XHJcbiAgICBnID0gMjU1IC0gZztcclxuICAgIGIgPSAyNTUgLSBiO1xyXG5cclxuICAgIGxldCBjb21wSGV4ID0gYCMke3IudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyl9JHtnLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpfSR7Yi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX1gO1xyXG5cclxuICAgIHJldHVybiBjb21wSGV4LnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgY29udmVydEhFWChoZXhDb2xvcjogc3RyaW5nKSB7XHJcbiAgICBoZXhDb2xvciA9IGhleENvbG9yLnJlcGxhY2UoL14jLywgJycpO1xyXG4gICAgbGV0IGNvbG9yID0gXCIjXCI7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKylcclxuICAgICAgY29sb3IgKz0gKGhleENvbG9yW2ldICsgaGV4Q29sb3JbaSArIDFdKTtcclxuICAgIHJldHVybiBjb2xvcjtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW5jeSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEJVU0lORVNTX0NPTlNUQU5UUy5DVVJSRU5DWTtcclxuICB9XHJcbiAgZ2V0IGNhbkNhbmNlbE9yZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMub3JkZXJUaW1pbGluZT8ubGVuZ3RoID09IDE7XHJcbiAgfVxyXG4gIGdldCBvcmRlckFkZHJlc3MoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm9yZGVyRGV0YWlsRGF0YT8uYWRkcmVzc0RldGFpbHM/LmFkZHJlc3NMaW5lMSArICcsICcgKyB0aGlzLm9yZGVyRGV0YWlsRGF0YT8uYWRkcmVzc0RldGFpbHM/LmFkZHJlc3NMaW5lMiArICcsICcgKyB0aGlzLm9yZGVyRGV0YWlsRGF0YT8uYWRkcmVzc0RldGFpbHM/LmxvY2FsaXR5TmFtZSArICcsICcgKyB0aGlzLm9yZGVyRGV0YWlsRGF0YT8uYWRkcmVzc0RldGFpbHM/LmNpdHlOYW1lICsgJywgJyArIHRoaXMub3JkZXJEZXRhaWxEYXRhPy5hZGRyZXNzRGV0YWlscz8uc3RhdGVOYW1lO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tPcmRlcigpIHtcclxuICAgIHdpbmRvdy5vcGVuKHRoaXMub3JkZXJEZXRhaWxEYXRhPy5vcmRlclRyYWNraW5nTGluaywgJ19ibGFuaycpO1xyXG4gIH1cclxuICBwcm9kdWN0UmV2aWV3OiBudW1iZXIgPSAwXHJcbiAgYXN5bmMgc3VibWl0UmV2aWV3KGl0ZW06IGFueSkge1xyXG4gICAgaWYgKCFpdGVtLnJhdGluZyB8fCBpdGVtLnJhdGluZyA8IDEpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1JldmlldycsIGRldGFpbDogJ1BsZWFzZSBnaXZlIGEgcmF0aW5nIHRvIHRoZSBwcm9kdWN0JyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtLnJldmlld0ltYWdlcykge1xyXG4gICAgICBmb3IgKGxldCB1cGxvYWRlZEltYWdlIG9mIGl0ZW0ucmV2aWV3SW1hZ2VzKSB7XHJcbiAgICAgICAgaWYgKHVwbG9hZGVkSW1hZ2UuZmlsZSkge1xyXG4gICAgICAgICAgY29uc3QgZmlsZVVybDogYW55ID1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbWFnZVVwbG9hZFNlcnZpY2UudXBsb2FkRmlsZUluQVdTKFxyXG4gICAgICAgICAgICAgIHVwbG9hZGVkSW1hZ2UuZmlsZSxcclxuICAgICAgICAgICAgICAnbGlicmFyeS1tZWRpYSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIHVwbG9hZGVkSW1hZ2UuaW1nVXJsID0gZmlsZVVybFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgdXNlcklkOiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKT8udXNlcklkID8/IFwiXCIsXHJcbiAgICAgIGJ1c2luZXNzSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gXCJcIixcclxuICAgICAgcHJvZHVjdElkOiBpdGVtLml0ZW1JZCxcclxuICAgICAgcmF0aW5nOiBpdGVtLnJhdGluZyxcclxuICAgICAgcmV2aWV3OiBpdGVtLnJldmlldyxcclxuICAgICAgcHJvZHVjdEltYWdlczogaXRlbS5yZXZpZXdJbWFnZXMsXHJcbiAgICAgIG9yZGVySWQ6IHRoaXMub3JkZXJEZXRhaWxEYXRhPy51c2VyT3JkZXJJZCA/PyBcIlwiLFxyXG4gICAgICB1c2VyTmFtZTogdGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKCk/LmNvbnRhY3QubmFtZVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN0U2VydmljZS5hZGRSZXZpZXdUb1Byb2R1Y3QocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnUmV2aWV3JywgZGV0YWlsOiAnUmV2aWV3IEFkZGVkIFN1Y2Nlc3NmdWxseScgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnUmV2aWV3JywgZGV0YWlsOiAnQWRkaW5nIFJldmlldyBDYXVzZWQgZXJyb3InIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2VjdGlvbnNWaXNpYmxlID0ge1xyXG4gICAgYmlsbERldGFpbHM6IHRydWUsXHJcbiAgICBkZWxpdmVyeURldGFpbHM6IGZhbHNlLFxyXG4gICAgdGltZWxpbmU6IGZhbHNlXHJcbiAgfTtcclxuICB0b2dnbGVTZWN0aW9uKHNlY3Rpb246IGtleW9mIHR5cGVvZiB0aGlzLnNlY3Rpb25zVmlzaWJsZSkge1xyXG4gICAgdGhpcy5zZWN0aW9uc1Zpc2libGVbc2VjdGlvbl0gPSAhdGhpcy5zZWN0aW9uc1Zpc2libGVbc2VjdGlvbl07XHJcbiAgfVxyXG5cclxuICB1cGxvYWRJbWFnZShldjogYW55LCBpdGVtOiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbGVzID0gZXYudGFyZ2V0Py5maWxlcztcclxuXHJcbiAgICBpZiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ05vIGZpbGVzIGZvdW5kIGluIGlucHV0Jyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbnN1cmUgdXBsb2FkZWRJbWFnZXMgYXJyYXkgZXhpc3RzXHJcbiAgICBpZiAoIWl0ZW0ucmV2aWV3SW1hZ2VzKSB7XHJcbiAgICAgIGl0ZW0ucmV2aWV3SW1hZ2VzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgZmlsZURhdGEgb2YgZmlsZXMpIHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGl0ZW0ucmV2aWV3SW1hZ2VzLnB1c2goe1xyXG4gICAgICAgICAgaW1nVXJsOiByZXNwb25zZS50YXJnZXQucmVzdWx0LFxyXG4gICAgICAgICAgZmlsZTogZmlsZURhdGFcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpbGVSZWFkZXIgZXJyb3I6JywgZXJyKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGVEYXRhKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiBbYXR0ci5zdHlsZV09XCJjdXN0b21DbGFzc1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTsgbWluLWhlaWdodDogMTAwdmg7XCI+XHJcbiAgICAgICAgPCEtLSBNYWluIEJveCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLTAgbXgtYXV0b1wiPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBCYWNrIGJ1dHRvbiAmIFRoYW5rcyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZ29CYWNrKClcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImx1Y2lkZSBsdWNpZGUtY2hldnJvbi1sZWZ0IGNwIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwibTE1IDE4LTYtNiA2LTZcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1tZWRpdW0gcHktMVwiPlRoYW5rcyE8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBNYWluIEhlYWRsaW5lIC0tPlxyXG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJmdy1zZW1pYm9sZCBtYi0yIHRleHQtZGFya1wiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtO1wiPlxyXG4gICAgICAgICAgICAgICAge3sgb3JkZXJEZXRhaWxEYXRhPy5icmFuZE9yZGVyRGV0YWlscz8uWzBdPy5vcmRlclN0YXR1cz8ucmVwbGFjZUFsbChcIl9cIiwgXCIgXCIpIHwgdGl0bGVjYXNlIH19IPCfmoBcclxuICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIG1iLTMgZnMtMTVcIj5cclxuICAgICAgICAgICAgICAgIHt7IG9yZGVyRGV0YWlsRGF0YT8uYnJhbmRPcmRlckRldGFpbHM/LlswXT8ub3JkZXJTdGF0dXMgPT09ICdERUxJVkVSRUQnID8gJ1lvdXIgb3JkZXIgaGFzIGJlZW5cclxuICAgICAgICAgICAgICAgIGRlbGl2ZXJlZC4gRW5qb3khJyA6IChvcmRlckRldGFpbERhdGE/LmJyYW5kT3JkZXJEZXRhaWxzPy5bMF0/Lm9yZGVyU3RhdHVzID09PSAnQ0FOQ0VMTEVEJyA/ICdZb3VyIG9yZGVyXHJcbiAgICAgICAgICAgICAgICB3YXMgY2FuY2VsbGVkLicgOiAnWW91ciBvcmRlciBpcyBvbiB0aGUgd2F5LiBJdCB3aWxsIGJlIHNoaXBwZWQuIFdlIHdpbGwgaW5mb3JtIHlvdS4nKSB9fVxyXG4gICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICA8IS0tIENvbG9yZWQgTGluZSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiBzdHlsZT1cImhlaWdodDogM3B4OyB3aWR0aDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwgJyArIChzdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yIHx8ICcjMjBjOTk3JykgKyAnLCB0cmFuc3BhcmVudCknXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBPcmRlciBOdW1iZXIgJiBBY3Rpb25zIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtbWQtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLW1kLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1kYXJrIG1iLTIgbWItbWQtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgT3JkZXIgbnVtYmVyOlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiIFtzdHlsZS5jb2xvcl09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yIHx8ICcjMjBjOTk3J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmRlckRldGFpbERhdGE/Lm9yZGVyTnVtIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDb250ZW50IEdyaWQgTGF5b3V0IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gTGVmdCBDb2x1bW4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTcgY29sLXhsLTggbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gSXRlbXMgTGlzdCAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBib3JkZXIgbWItNCBvdmVyZmxvdy1oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1jb2xvcjogI2VhZWFlYSAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOiA4cHg7IGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLDAsMCwwLjAyKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3JkZXJEZXRhaWxEYXRhPy5icmFuZE9yZGVyRGV0YWlsc1swXT8ub3JkZXJlZEl0ZW1zOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTRcIiBbbmdDbGFzc109XCJ7J2JvcmRlci1ib3R0b20nOiAhbGFzdH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtbWQtcm93IGFsaWduLWl0ZW1zLXN0YXJ0IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTQgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW1hZ2UgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVycm9yPVwidGhpcy5zcmM9J2h0dHBzOi8vaS5wb3N0aW1nLmNjL2hQUzJKcFYwL25vLWltYWdlLWF2YWlsYWJsZS5qcGcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIml0ZW0uaW1nVXJsXCIgYWx0PVwie3sgaXRlbS5pdGVtTmFtZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkIHNoYWRvdy1zbSBmbGV4LXNocmluay0wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiA4MHB4OyBoZWlnaHQ6IDgwcHg7IG9iamVjdC1maXQ6IGNvdmVyOyBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERldGFpbHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJmdy1ib2xkIHRleHQtZGFyayBtYi0xXCIgc3R5bGU9XCJmb250LXNpemU6IDE1cHg7XCI+e3sgaXRlbS5pdGVtTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG1iLTJcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udmFyaWFudE5hbWUgfHwgaXRlbS5jdXN0b21pemF0aW9uRGV0YWlsc1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udmFyaWFudE5hbWUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZ3VsYXInIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZCB0ZXh0LWRhcmsgbXQtMVwiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlF1YW50aXR5IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ucXVhbnRpdHkgfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSZXZpZXcgU2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBwdC0zIGJvcmRlci10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyRGV0YWlsRGF0YT8uYnJhbmRPcmRlckRldGFpbHM/LlswXT8ub3JkZXJTdGF0dXMgPT0gJ0RFTElWRVJFRCdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cImZ3LWJvbGQgbWItMCB0ZXh0LWRhcmtcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIj5MZWF2ZSBhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV2aWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtcmF0aW5nIFsobmdNb2RlbCldPVwiaXRlbS5yYXRpbmdcIiBbY2FuY2VsXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInN1Ym1pdFJldmlldyhpdGVtKVwiPjwvcC1yYXRpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1kZXRhaWwtcmV2aWV3IHRleHQtcHJpbWFyeSBmdy1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpdGVtLnNob3dSZXZpZXcgPSAhaXRlbS5zaG93UmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTVweDsgd2lkdGg6IDE1cHg7IGhlaWdodDogMTVweDtcIj5tb2RlX2VkaXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+V3JpdGUgYSBEZXRhaWxlZCBSZXZpZXc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uc2hvd1Jldmlld1wiIGNsYXNzPVwibXQtMyBwLTQgYmctd2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjZjBmMGYwOyBib3JkZXItcmFkaXVzOiAxMnB4OyBib3gtc2hhZG93OiAwIDRweCAyMHB4IHJnYmEoMCwwLDAsMC4wMyk7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1kYXJrIG1iLTNcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZSB5b3VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZXJpZW5jZTwvaDY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2hhZG93LW5vbmUgcmV2aWV3LXRleHRhcmVhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnJldmlld1wiIHJvd3M9XCI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaGF0IGRpZCB5b3UgbGlrZSBvciBkaXNsaWtlPyBIb3cgd2FzIHRoZSBmaXQgYW5kIHF1YWxpdHk/XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwiZnctbWVkaXVtIHRleHQtbXV0ZWQgbWItMlwiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhvdG9zIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTFweDsgb3BhY2l0eTogMC43O1wiPihPcHRpb25hbCk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oNj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpbWcgb2YgaXRlbT8ucmV2aWV3SW1hZ2VzID8/IFtdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1nLmltZ1VybFwiIGFsdD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNzJweDsgaGVpZ2h0OiA3MnB4OyBvYmplY3QtZml0OiBjb3ZlcjsgYm9yZGVyLXJhZGl1czogOHB4OyBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwOyBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjAyKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGN1cnNvci1wb2ludGVyIHJldmlldy11cGxvYWQtYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXZpZXdGaWxlSW5wdXQuY2xpY2soKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDI2cHg7IHdpZHRoOiAyNnB4OyBoZWlnaHQ6IDI2cHg7XCI+YWRkX3Bob3RvX2FsdGVybmF0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwibXlmaWxlXCIgbXVsdGlwbGUgaGlkZGVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS9qcGcsaW1hZ2UvanBlZyxpbWFnZS9naWYsaW1hZ2UvcG5nLGFwcGxpY2F0aW9uL3BkZixpbWFnZS94LWVwc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZEltYWdlKCRldmVudCwgaXRlbSlcIiBjbGFzcz1cInBjLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcmV2aWV3RmlsZUlucHV0IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgbXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gdy00MCBmdy1ib2xkIHNoYWRvdy1zbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcmV2aWV3LXN1Ym1pdC1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yIHx8ICcjMjBjOTk3J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXRSZXZpZXcoaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VibWl0IFJldmlld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4OyB3aWR0aDogMThweDsgaGVpZ2h0OiAxOHB4O1wiPnNlbmQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQcmljZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZCBmdy1ib2xkIHRleHQtZGFyayBkLW5vbmUgZC1tZC1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjdXJyZW5jeVwiPjwvc3Bhbj57eyAoaXRlbS5zZWxsaW5nUHJpY2UgKiBpdGVtLnF1YW50aXR5KSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxLjAtMicgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNb2JpbGUgUHJpY2UgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN0YXJ0IGZ3LWJvbGQgdGV4dC1kYXJrIGZzLTYgbXQtMyBkLW1kLW5vbmUgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY3VycmVuY3lcIj48L3NwYW4+e3sgKGl0ZW0uc2VsbGluZ1ByaWNlICogaXRlbS5xdWFudGl0eSkgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEuMC0yJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdW1tYXJ5IFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBneC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTGVmdDogQWRkcmVzcyAmIFBheW1lbnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi00IG1iLW1kLTAgZC1mbGV4IGZsZXgtY29sdW1uIGdhcC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cInRleHQtZGFyayBtYi0yXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA2MDA7XCI+U2hpcHBpbmcgQWRkcmVzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZGFya1wiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtYmxvY2sgbWItMVwiPnt7IG9yZGVyRGV0YWlsRGF0YT8uYWRkcmVzc0RldGFpbHM/LnJlY2VpdmVyTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCIgc3R5bGU9XCJsaW5lLWhlaWdodDogMS41OyBtYXgtd2lkdGg6IDI4MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JkZXJBZGRyZXNzIH19PGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JkZXJEZXRhaWxEYXRhPy5hZGRyZXNzRGV0YWlscz8ucmVjZWl2ZXJQaG9uZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cInRleHQtZGFyayBtYi0yXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA2MDA7XCI+UGF5bWVudDwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZnctYm9sZGVyIGZzLTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRLZXkob3JkZXJEZXRhaWxEYXRhPy5wYXltZW50RGV0YWlscykhPT0nQ09EJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IC0wLjVweDtcIj5WSVNBPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJnZXRLZXkob3JkZXJEZXRhaWxEYXRhPy5wYXltZW50RGV0YWlscyk9PT0nQ09EJ1wiIGNsYXNzPVwidGV4dC1tdXRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjhweDsgd2lkdGg6IDI4cHg7IGhlaWdodDogMjhweDtcIj5wYXltZW50czwvbWF0LWljb24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZGFya1wiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3JkZXJEZXRhaWxEYXRhPy5wYXltZW50RGV0YWlscyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldEtleShvcmRlckRldGFpbERhdGE/LnBheW1lbnREZXRhaWxzKT09PSdDT0QnID8gJ0Nhc2ggb24gRGVsaXZlcnknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEtleShvcmRlckRldGFpbERhdGE/LnBheW1lbnREZXRhaWxzKSApIDogJ04vQSd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDsgbGV0dGVyLXNwYWNpbmc6IDAuNXB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRLZXkob3JkZXJEZXRhaWxEYXRhPy5wYXltZW50RGV0YWlscykhPT0nQ09EJ1wiPioqKiogKioqKiAqKioqIDEyMzRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmlnaHQ6IEJpbGwgRGV0YWlscyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHB0LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIj5TdWJ0b3RhbDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFyayBmdy1tZWRpdW1cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjdXJyZW5jeVwiPjwvc3Bhbj57eyBvcmRlckRldGFpbERhdGE/LmJpbGxEZXRhaWxzPy50b3RhbE5ldFZhbHVlIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOicxLjAtMicgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/LmRpc2NvdW50QW1vdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+RGlzY291bnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1Y2Nlc3MgZnctbWVkaXVtXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC08c3BhbiBbaW5uZXJIVE1MXT1cImN1cnJlbmN5XCI+PC9zcGFuPnt7IG9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/LmRpc2NvdW50QW1vdW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOicxLjAtMicgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+U2hpcHBpbmc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhcmsgZnctbWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+e3tvcmRlckRldGFpbERhdGE/LmJpbGxEZXRhaWxzLmRlbGl2ZXJ5Q2hhcmdlcyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHMuZGVsaXZlcnlDaGFyZ2VzIDogJ0ZSRUUnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+RXN0aW1hdGVkIFRheDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFyayBmdy1tZWRpdW1cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjdXJyZW5jeVwiPjwvc3Bhbj57eyBvcmRlckRldGFpbERhdGE/LmJpbGxEZXRhaWxzPy5kaXNjb3VudEFtb3VudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/LnRvdGFsVGF4QWZ0ZXJEaXNjb3VudCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/LnRvdGFsVGF4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbnVtYmVyOicxLjAtMicgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yIHRleHQtc3VjY2Vzc1wiICpuZ0lmPVwib3JkZXJEZXRhaWxEYXRhPy5yZXdhcmRVc2VkID09PSAnUkVXQVJEX1BPSU5UUydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIj5SZXdhcmQgQW1vdW50PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIGZ3LW1lZGl1bVwiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImN1cnJlbmN5XCI+PC9zcGFuPnt7IG9yZGVyRGV0YWlsRGF0YT8ucG9pbnRzQ29udmVydGVkSU5SIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMiB0ZXh0LXN1Y2Nlc3NcIiAqbmdJZj1cIm9yZGVyRGV0YWlsRGF0YT8ucmV3YXJkVXNlZCA9PT0gJ1ZPVUNIRVInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlJld2FyZCBBbW91bnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIgZnctbWVkaXVtXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY3VycmVuY3lcIj48L3NwYW4+e3sgb3JkZXJEZXRhaWxEYXRhLnZvdWNoZXJWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3JkZXJEZXRhaWxEYXRhPy5iaWxsRGV0YWlscz8ub3JyYVNjaGVtZVJlZGVlbWVkQW1vdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7XCI+UmVkZWVtIEFtb3VudDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFyayBmdy1tZWRpdW1cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTxzcGFuIFtpbm5lckhUTUxdPVwiY3VycmVuY3lcIj48L3NwYW4+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJEZXRhaWxEYXRhPy5iaWxsRGV0YWlscz8ub3JyYVNjaGVtZVJlZGVlbWVkQW1vdW50IHwgbnVtYmVyOicxLjAtMicgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJ0ZXh0LW11dGVkIG15LTNcIiBzdHlsZT1cIm9wYWNpdHk6IDAuMTU7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFya1wiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNjAwO1wiPlRvdGFsPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYXJrIGZ3LWJvbGRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjdXJyZW5jeVwiPjwvc3Bhbj57eyBvcmRlckRldGFpbERhdGE/LmJpbGxEZXRhaWxzPy5maW5hbFByaWNlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1zdWNjZXNzXCIgKm5nSWY9XCJvcmRlckRldGFpbERhdGE/LnJld2FyZFVzZWQgPT09ICdSRVdBUkRfUE9JTlRTJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNjAwO1wiPkFtb3VudCBQYWlkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImN1cnJlbmN5XCI+PC9zcGFuPnt7IG9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/LmZpbmFsUHJpY2UgPT09IG9yZGVyRGV0YWlsRGF0YT8ucG9pbnRzQ29udmVydGVkSU5SID8gJzAnIDogKG9yZGVyRGV0YWlsRGF0YT8uYmlsbERldGFpbHM/LmZpbmFsUHJpY2UgLSBvcmRlckRldGFpbERhdGE/LnBvaW50c0NvbnZlcnRlZElOUikgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB0ZXh0LXN1Y2Nlc3NcIiAqbmdJZj1cIm9yZGVyRGV0YWlsRGF0YT8ucmV3YXJkVXNlZCA9PT0gJ1ZPVUNIRVInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7XCI+QW1vdW50IFBhaWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDE2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY3VycmVuY3lcIj48L3NwYW4+e3sgb3JkZXJEZXRhaWxEYXRhPy5iaWxsRGV0YWlscz8uZmluYWxQcmljZSA9PT0gb3JkZXJEZXRhaWxEYXRhPy52b3VjaGVyVmFsdWUgPyAnMCcgOiAob3JkZXJEZXRhaWxEYXRhPy5iaWxsRGV0YWlscz8uZmluYWxQcmljZSAtIG9yZGVyRGV0YWlsRGF0YT8udm91Y2hlclZhbHVlKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBSaWdodCBDb2x1bW4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTUgY29sLXhsLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFRpbWVsaW5lIENhcmQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyIHAtNCBtYi00XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXItY29sb3I6ICNlYWVhZWEgIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogOHB4OyBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwwLDAsMC4wMik7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcmRlckRldGFpbERhdGE/Lm9yZGVyVHJhY2tpbmdMaW5rIHx8IChvcmRlclRpbWlsaW5lICYmIG9yZGVyVGltaWxpbmUubGVuZ3RoID4gMClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItNCBwYi0zIGJvcmRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImZ3LWJvbGQgbWItMCB0ZXh0LWRhcmsgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImNvbG9yOiAjNmM3NTdkO1wiPnRpbWVsaW5lPC9tYXQtaWNvbj4gT3JkZXIgVGltZWxpbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9yZGVyRGV0YWlsRGF0YT8ub3JkZXJUcmFja2luZ0xpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgY3Vyc29yLXBvaW50ZXIgZnctbWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5jb2xvciB8fCAnIzBkNmVmZCdcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0cmFja09yZGVyKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE1cHg7IHdpZHRoOiAxNXB4OyBoZWlnaHQ6IDE1cHg7XCI+bG9jYXRpb25fc2VhcmNoaW5nPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IDNweDtcIj5UcmFjayBPcmRlcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTJcIiAqbmdJZj1cIm9yZGVyVGltaWxpbmUgJiYgb3JkZXJUaW1pbGluZS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC10aW1lbGluZSBbdmFsdWVdPVwib3JkZXJUaW1pbGluZVwiIHN0eWxlQ2xhc3M9XCJjdXN0b20tdGltZWxpbmVcIiBhbGlnbj1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibWFya2VyXCIgbGV0LWV2ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbXBsZXRlZCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tbWFya2VyIGNvbXBsZXRlZC1tYXJrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJldmVudC5zdGF0dXNUeXBlID09PSAnY29tcGxldGVkJyB8fCBldmVudC5zdGF0dXNUeXBlID09PSAnZGVsaXZlcmVkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInN0eWxlcz8uYmFja2dyb3VuZD8uY29sb3IgfHwgJyMwNTk2NjknXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjIwIDYgOSAxNyA0IDEyXCI+PC9wb2x5bGluZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGl2ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tbWFya2VyIGFjdGl2ZS1tYXJrZXJcIiAqbmdJZj1cImV2ZW50LnN0YXR1c1R5cGUgPT09ICdhY3RpdmUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yIHx8ICcjMDU5NjY5J1wiPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRnV0dXJlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1tYXJrZXIgZnV0dXJlLW1hcmtlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV2ZW50LnN0YXR1c1R5cGUgPT09ICdmdXR1cmUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCIgbGV0LWV2ZW50IGxldC1sYXN0PVwibGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXMtNFwiIFtuZ0NsYXNzXT1cInsncGItNCc6ICFsYXN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIHRleHQtZGFya1wiIHN0eWxlPVwiZm9udC1zaXplOiAxNXB4OyBtYXJnaW4tYm90dG9tOiAycHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5uYW1lPy5yZXBsYWNlQWxsKFwiX1wiLCBcIiBcIikgfCB0aXRsZWNhc2UgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtbXV0ZWQnOiBldmVudC5zdGF0dXNUeXBlICE9PSAnZnV0dXJlJywgJ3RleHQtbGlnaHQtZ3JleSc6IGV2ZW50LnN0YXR1c1R5cGUgPT09ICdmdXR1cmUnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGV2ZW50LmRhdGUgPyAoZXZlbnQuZGF0ZSB8IGRhdGU6J01NTSBkJykgOiAnTm90IHlldCcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLXRpbWVsaW5lPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48IS0tIExvYWRpbmcgU2tlbGV0b24gLS0+XHJcbjxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgcHktNFwiICpuZ0lmPVwiaXNMb2FkaW5nXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhOyBtaW4taGVpZ2h0OiAxMDB2aDtcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJteC1hdXRvXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMDBweDtcIj5cclxuICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlciBjb3VudD1cIjFcIiBhcHBlYXJhbmNlPVwiY2lyY2xlXCIgW3RoZW1lXT1cIntcclxuICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnNjB2aCcsXHJcbiAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzEycHgnLFxyXG4gICAgICAgICAgICAnbWFyZ2luJzogJzIwcHggMCdcclxuICAgICAgICB9XCI+PC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|