tango-app-ui-manage-settings 3.3.0-beta.3 → 3.3.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/esm2022/lib/components/payments-subscription/billing/billing.component.mjs +3 -3
  2. package/esm2022/lib/components/payments-subscription/payments-subscription.component.mjs +6 -4
  3. package/esm2022/lib/components/payments-subscription/request-popups/skiptrail/skiptrail.component.mjs +29 -0
  4. package/esm2022/lib/components/payments-subscription/request-popups/subscribe-request/subscribe-request.component.mjs +3 -3
  5. package/esm2022/lib/components/payments-subscription/subscription-popups/multidropdown/multidropdown.component.mjs +3 -3
  6. package/esm2022/lib/components/payments-subscription/subscription-popups/trail-settings/trail-settings.component.mjs +3 -3
  7. package/esm2022/lib/components/payments-subscription/subscription-popups/unsubscribe-request/unsubscribe-request.component.mjs +3 -3
  8. package/esm2022/lib/components/payments-subscription/subscription-popups/upgrade-plan/upgrade-plan.component.mjs +34 -7
  9. package/esm2022/lib/components/payments-subscription/subscription-popups/viewstores/viewstores.component.mjs +2 -2
  10. package/esm2022/lib/components/tango-manage-settings/tango-manage-settings.component.mjs +43 -28
  11. package/esm2022/lib/services/payment-subscription.service.mjs +2 -1
  12. package/esm2022/lib/tango-manage-settings.module.mjs +6 -3
  13. package/fesm2022/tango-app-ui-manage-settings.mjs +121 -50
  14. package/fesm2022/tango-app-ui-manage-settings.mjs.map +1 -1
  15. package/lib/components/activity-logs/activity-logs.component.d.ts +1 -1
  16. package/lib/components/contact-directory/contact-directory.component.d.ts +1 -1
  17. package/lib/components/payments-subscription/billing/billing-group-form/billing-group-form.component.d.ts +1 -1
  18. package/lib/components/payments-subscription/billing/billing.component.d.ts +1 -1
  19. package/lib/components/payments-subscription/invoice-credits/invoice-credits.component.d.ts +2 -2
  20. package/lib/components/payments-subscription/payments-subscription.component.d.ts +1 -0
  21. package/lib/components/payments-subscription/request-popups/skiptrail/skiptrail.component.d.ts +12 -0
  22. package/lib/components/payments-subscription/subscription-popups/upgrade-plan/upgrade-plan.component.d.ts +2 -1
  23. package/lib/components/tango-manage-settings/tango-manage-settings.component.d.ts +1 -1
  24. package/lib/services/payment-subscription.service.d.ts +1 -0
  25. package/lib/tango-manage-settings.module.d.ts +13 -12
  26. package/package.json +1 -1
@@ -191,10 +191,10 @@ export class BillingComponent {
191
191
  });
192
192
  }
193
193
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BillingComponent, deps: [{ token: i1.NgbModal }, { token: i2.ClientApiService }, { token: i3.PaymentSubscriptionService }], target: i0.ɵɵFactoryTarget.Component });
194
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: BillingComponent, selector: "lib-billing", ngImport: i0, template: "<div *ngIf=\"allItems === 1\" class=\"d-flex justify-content-end mb-5\">\r\n <button [disabled]=\"!clientId\" (click)=\"manageBilling()\" type=\"submit\"\r\n class=\"btn-outline btn align-items-end needhelp me-4\"><span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15029_77738)\">\r\n <path\r\n d=\"M9.16602 3.33417H3.33268C2.89065 3.33417 2.46673 3.50977 2.15417 3.82233C1.84161 4.13489 1.66602 4.55881 1.66602 5.00084V16.6675C1.66602 17.1095 1.84161 17.5335 2.15417 17.846C2.46673 18.1586 2.89065 18.3342 3.33268 18.3342H14.9993C15.4414 18.3342 15.8653 18.1586 16.1779 17.846C16.4904 17.5335 16.666 17.1095 16.666 16.6675V10.8342M15.416 2.08417C15.7475 1.75265 16.1972 1.56641 16.666 1.56641C17.1349 1.56641 17.5845 1.75265 17.916 2.08417C18.2475 2.41569 18.4338 2.86533 18.4338 3.33417C18.4338 3.80301 18.2475 4.25265 17.916 4.58417L9.99935 12.5008L6.66602 13.3342L7.49935 10.0008L15.416 2.08417Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15029_77738\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>Manage Billing</button>\r\n</div>\r\n\r\n<div [ngClass]=\"allItems === 1 ? 'row-cols-2' : 'row-cols-1'\" class=\"row mb-5\">\r\n <div class=\"col\">\r\n <div class=\"rounded-box \">\r\n <div class=\"header mb-5\">\r\n Payment Details\r\n </div>\r\n <div *ngIf=\"allItems === 1\" class=\"row row-cols-2\">\r\n <div class=\"col label mb-3\">Payment Type </div>\r\n <div class=\"col value mb-3\">\r\n <span *ngIf=\"accountDetails?.paymentType === 'virtual_account'\" > Virtual Account</span>\r\n </div>\r\n <div class=\"col label mb-3\">Account No </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.accountNumber}}</div>\r\n <div class=\"col label mb-3\">IFSC Code </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.ifsc}}</div>\r\n <!-- <div class=\"col label mb-3\">SWIFT Code </div>\r\n <div class=\"col value mb-3\">HDFCINBBCHE</div> -->\r\n <div class=\"col label mb-3\">Branch </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.branch}}</div>\r\n </div>\r\n <div *ngIf=\"allItems > 1\" class=\"row row-cols-2\">\r\n <div class=\"col\">\r\n <div class=\"row row-cols-2\">\r\n <div class=\"col label mb-3\">Payment Type </div>\r\n <div class=\"col value mb-3\">\r\n <span *ngIf=\"accountDetails?.paymentType === 'virtual_account'\" > Virtual Account</span>\r\n </div>\r\n <div class=\"col label mb-3\">Account No </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.accountNumber}}</div>\r\n <div class=\"col label mb-3\">IFSC Code </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.ifsc}}</div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"row row-cols-2\">\r\n <!-- <div class=\"col label mb-3\">SWIFT Code </div>\r\n <div class=\"col value mb-3\">HDFCINBBCHE</div> -->\r\n <div class=\"col label mb-3\">Branch </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.branch}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"allItems === 1\" class=\"col\">\r\n <div class=\"rounded-box \">\r\n <div class=\"header mb-5\">\r\n Payment Details\r\n </div>\r\n <div class=\"row row-cols-2\">\r\n <ng-container *ngFor=\"let group of billingGroups\" >\r\n <ng-container *ngIf=\"group.isPrimary\" >\r\n <div class=\"col label mb-3\">Next Billing Date </div>\r\n <div class=\"col value mb-3\">{{dayjs().endOf('month').format('DD-MM-YYYY')}}</div>\r\n <div class=\"col label mb-3\">Registered Company Name </div>\r\n <div class=\"col value mb-3\">{{group?.registeredCompanyName ? group.registeredCompanyName : '-'}}</div>\r\n <div class=\"col label mb-3\">Billing Address </div>\r\n <div class=\"col value mb-3\">{{group?.addressLineOne ? group.addressLineOne : '-'}}</div>\r\n <div class=\"col label mb-3\">GST No</div>\r\n <div class=\"col value mb-3\">{{group?.gst ? group.gst : '-'}}</div> \r\n </ng-container>\r\n </ng-container>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<div *ngIf=\"allItems > 1\">\r\n <div class=\"d-flex justify-content-end align-items-center mb-5\">\r\n <div class=\"me-4\">\r\n <div class=\"search-input\">\r\n <span class=\"icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M11.5 10L11.43 10.73C12.41 9.59 13 8.11 13 6.5C13 2.91 10.09 0 6.5 0C2.91 0 0 2.91 0 6.5C0 10.09 2.91 13 6.5 13C8.11 13 9.59 12.41 10.73 11.43L10.2762 11.71L16 17.49L17.49 16L11.5 10ZM6.5 11C4.01 11 2 8.99 2 6.5C2 4.01 4.01 2 6.5 2C8.99 2 11 4.01 11 6.5C11 8.99 8.99 11 6.5 11Z\"\r\n fill=\"black\" fill-opacity=\"0.54\" />\r\n </svg>\r\n </span>\r\n <input [formControl]=\"searchInput\" type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n </div>\r\n <div class=\"me-4\">\r\n <button (click)=\"onExport()\" [disabled]=\"!clientId\" type=\"submit\" class=\"btn-outline btn align-items-end needhelp \"><span\r\n class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>Export</button>\r\n </div>\r\n <div class=\"me-4\">\r\n <button [disabled]=\"!clientId\" (click)=\"manageBilling()\" class=\"btn btn-primary w-100\">\r\n <span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99935 4.16602V15.8327M4.16602 9.99935H15.8327\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n Add Group</button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"(billingGroupsApiState | async) === 'loaded'\">\r\n <ng-container *ngIf=\"billingGroups?.length\" >\r\n <div class=\"table-responsive store-table\">\r\n <table class=\"table bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"form-check-label\" for=\"flexCheckDefault\">\r\n <span>Group name</span>\r\n </label>\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('groupName')\"\r\n [ngClass]=\"sortedColumn === 'groupName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>Stores\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('stores')\"\r\n [ngClass]=\"sortedColumn === 'stores' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>GST Number\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('gst')\"\r\n [ngClass]=\"sortedColumn === 'gst' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Place of Supply\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('placeOfSupply')\"\r\n [ngClass]=\"sortedColumn === 'placeOfSupply' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Tag\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('groupTag')\"\r\n [ngClass]=\"sortedColumn === 'groupTag' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of billingGroups\">\r\n <td>\r\n <span class=\"me-4\" >{{data?.groupName}}</span> \r\n <span *ngIf=\"data.isPrimary\" class=\"primary-badge\" >Primary</span>\r\n </td>\r\n <td>\r\n {{data?.stores}}\r\n </td>\r\n <td>\r\n {{data?.gst}}\r\n </td>\r\n <td>\r\n {{data?.placeOfSupply}}\r\n </td>\r\n <td>\r\n {{data?.groupTag}}\r\n </td>\r\n <td>\r\n <span (click)=\"manageBilling(data._id)\" class=\"me-8 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M9.16602 3.33417H3.33268C2.89065 3.33417 2.46673 3.50977 2.15417 3.82233C1.84161 4.13489 1.66602 4.55881 1.66602 5.00084V16.6675C1.66602 17.1095 1.84161 17.5335 2.15417 17.846C2.46673 18.1586 2.89065 18.3342 3.33268 18.3342H14.9993C15.4414 18.3342 15.8653 18.1586 16.1779 17.846C16.4904 17.5335 16.666 17.1095 16.666 16.6675V10.8342M15.416 2.08417C15.7475 1.75265 16.1972 1.56641 16.666 1.56641C17.1349 1.56641 17.5845 1.75265 17.916 2.08417C18.2475 2.41569 18.4338 2.86533 18.4338 3.33417C18.4338 3.80301 18.2475 4.25265 17.916 4.58417L9.99935 12.5008L6.66602 13.3342L7.49935 10.0008L15.416 2.08417Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span (click)=\"viewBilling(data)\" class=\"cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M0.833984 10.0007C0.833984 10.0007 4.16732 3.33398 10.0007 3.33398C15.834 3.33398 19.1673 10.0007 19.1673 10.0007C19.1673 10.0007 15.834 16.6673 10.0007 16.6673C4.16732 16.6673 0.833984 10.0007 0.833984 10.0007Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0007 12.5007C11.3814 12.5007 12.5006 11.3814 12.5006 10.0007C12.5006 8.61994 11.3814 7.50065 10.0007 7.50065C8.61994 7.50065 7.50065 8.61994 7.50065 10.0007C7.50065 11.3814 8.61994 12.5007 10.0007 12.5007Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"my-3\">\r\n <!-- <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination> -->\r\n </div> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!billingGroups?.length\" >\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"(billingGroupsApiState | async) === 'loading'\">\r\n <div class=\"shimmer-card w-100\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n</div>", styles: [":host{width:100%}.rounded-box{border-radius:12px;border:1px solid #D0D5DD;padding:12px 24px;height:100%}.header{color:#344054;font-size:20px;font-weight:500;line-height:30px}.label{color:#667085;font-size:16px;font-weight:500;line-height:24px}.value{color:#1d2939;font-size:16px;font-weight:500;line-height:24px}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap;border:1px solid #D0D5DD}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.search-input{position:relative}.search-input .icon{position:absolute;left:18px;top:13px}.search-input input{border-radius:7.28px;border:.91px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 .91px 1.82px #1018280d;color:#0000008a;font-size:16px;font-weight:400}.search-input .form-control:focus{box-shadow:none}table td{color:#101828;font-size:14px;font-weight:500;line-height:20px}.rotate{rotate:180deg;transition:1s}.primary-badge{padding:2px 8px;border-radius:16px;background:#eaf8ff;color:#009bf3;font-size:12px;font-weight:500;line-height:18px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
194
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: BillingComponent, selector: "lib-billing", ngImport: i0, template: "<div *ngIf=\"allItems === 1\" class=\"d-flex justify-content-end mb-5\">\r\n <button [disabled]=\"!clientId\" (click)=\"manageBilling()\" type=\"submit\"\r\n class=\"btn-outline btn align-items-end needhelp me-4\"><span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15029_77738)\">\r\n <path\r\n d=\"M9.16602 3.33417H3.33268C2.89065 3.33417 2.46673 3.50977 2.15417 3.82233C1.84161 4.13489 1.66602 4.55881 1.66602 5.00084V16.6675C1.66602 17.1095 1.84161 17.5335 2.15417 17.846C2.46673 18.1586 2.89065 18.3342 3.33268 18.3342H14.9993C15.4414 18.3342 15.8653 18.1586 16.1779 17.846C16.4904 17.5335 16.666 17.1095 16.666 16.6675V10.8342M15.416 2.08417C15.7475 1.75265 16.1972 1.56641 16.666 1.56641C17.1349 1.56641 17.5845 1.75265 17.916 2.08417C18.2475 2.41569 18.4338 2.86533 18.4338 3.33417C18.4338 3.80301 18.2475 4.25265 17.916 4.58417L9.99935 12.5008L6.66602 13.3342L7.49935 10.0008L15.416 2.08417Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15029_77738\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>Manage Billing</button>\r\n</div>\r\n\r\n<div [ngClass]=\"allItems === 1 ? 'row-cols-2' : 'row-cols-1'\" class=\"row mb-5\">\r\n <div class=\"col\">\r\n <div class=\"rounded-box \">\r\n <div class=\"header mb-5\">\r\n Payment Details\r\n </div>\r\n <div *ngIf=\"allItems === 1\" class=\"row row-cols-2\">\r\n <div class=\"col label mb-3\">Payment Type </div>\r\n <div class=\"col value mb-3\">\r\n <span *ngIf=\"accountDetails?.paymentType === 'virtual_account'\" > Virtual Account</span>\r\n </div>\r\n <div class=\"col label mb-3\">Account No </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.accountNumber}}</div>\r\n <div class=\"col label mb-3\">IFSC Code </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.ifsc}}</div>\r\n <!-- <div class=\"col label mb-3\">SWIFT Code </div>\r\n <div class=\"col value mb-3\">HDFCINBBCHE</div> -->\r\n <div class=\"col label mb-3\">Branch </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.branch}}</div>\r\n </div>\r\n <div *ngIf=\"allItems > 1\" class=\"row row-cols-2\">\r\n <div class=\"col\">\r\n <div class=\"row row-cols-2\">\r\n <div class=\"col label mb-3\">Payment Type </div>\r\n <div class=\"col value mb-3\">\r\n <span *ngIf=\"accountDetails?.paymentType === 'virtual_account'\" > Virtual Account</span>\r\n </div>\r\n <div class=\"col label mb-3\">Account No </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.accountNumber}}</div>\r\n <div class=\"col label mb-3\">IFSC Code </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.ifsc}}</div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"row row-cols-2\">\r\n <!-- <div class=\"col label mb-3\">SWIFT Code </div>\r\n <div class=\"col value mb-3\">HDFCINBBCHE</div> -->\r\n <div class=\"col label mb-3\">Branch </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.branch}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"allItems === 1\" class=\"col\">\r\n <div class=\"rounded-box \">\r\n <div class=\"header mb-5\">\r\n Payment Details\r\n </div>\r\n <div class=\"row row-cols-2\">\r\n <ng-container *ngFor=\"let group of billingGroups\" >\r\n <ng-container *ngIf=\"group.isPrimary\" >\r\n <!-- <div class=\"col label mb-3\">Next Billing Date </div>\r\n <div class=\"col value mb-3\">{{dayjs().endOf('month').format('DD-MM-YYYY')}}</div> -->\r\n <div class=\"col label mb-3\">Registered Company Name </div>\r\n <div class=\"col value mb-3\">{{group?.registeredCompanyName ? group.registeredCompanyName : '-'}}</div>\r\n <div class=\"col label mb-3\">Billing Address </div>\r\n <div class=\"col value mb-3\">{{group?.addressLineOne ? group.addressLineOne : '-'}} {{group.addressLineTwo?group.addressLineTwo:\"\"}} {{group.city?group.city:\"\"}} {{group.state?group.state:\"\"}} {{group.country?group.country:\"\"}} {{group.pinCode?group.pinCode:\"\"}}</div>\r\n <div class=\"col label mb-3\">GST No</div>\r\n <div class=\"col value mb-3\">{{group?.gst ? group.gst : '-'}}</div> \r\n </ng-container>\r\n </ng-container>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<div *ngIf=\"allItems > 1\">\r\n <div class=\"d-flex justify-content-end align-items-center mb-5\">\r\n <div class=\"me-4\">\r\n <div class=\"search-input\">\r\n <span class=\"icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M11.5 10L11.43 10.73C12.41 9.59 13 8.11 13 6.5C13 2.91 10.09 0 6.5 0C2.91 0 0 2.91 0 6.5C0 10.09 2.91 13 6.5 13C8.11 13 9.59 12.41 10.73 11.43L10.2762 11.71L16 17.49L17.49 16L11.5 10ZM6.5 11C4.01 11 2 8.99 2 6.5C2 4.01 4.01 2 6.5 2C8.99 2 11 4.01 11 6.5C11 8.99 8.99 11 6.5 11Z\"\r\n fill=\"black\" fill-opacity=\"0.54\" />\r\n </svg>\r\n </span>\r\n <input [formControl]=\"searchInput\" type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n </div>\r\n <div class=\"me-4\">\r\n <button (click)=\"onExport()\" [disabled]=\"!clientId\" type=\"submit\" class=\"btn-outline btn align-items-end needhelp \"><span\r\n class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>Export</button>\r\n </div>\r\n <div class=\"me-4\">\r\n <button [disabled]=\"!clientId\" (click)=\"manageBilling()\" class=\"btn btn-primary w-100\">\r\n <span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99935 4.16602V15.8327M4.16602 9.99935H15.8327\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n Add Billing Group</button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"(billingGroupsApiState | async) === 'loaded'\">\r\n <ng-container *ngIf=\"billingGroups?.length\" >\r\n <div class=\"table-responsive store-table\">\r\n <table class=\"table bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"form-check-label\" for=\"flexCheckDefault\">\r\n <span>Group name</span>\r\n </label>\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('groupName')\"\r\n [ngClass]=\"sortedColumn === 'groupName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>Stores\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('stores')\"\r\n [ngClass]=\"sortedColumn === 'stores' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>GST Number\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('gst')\"\r\n [ngClass]=\"sortedColumn === 'gst' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Place of Supply\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('placeOfSupply')\"\r\n [ngClass]=\"sortedColumn === 'placeOfSupply' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Tag\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('groupTag')\"\r\n [ngClass]=\"sortedColumn === 'groupTag' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of billingGroups\">\r\n <td>\r\n <span class=\"me-4\" >{{data?.groupName}}</span> \r\n <span *ngIf=\"data.isPrimary\" class=\"primary-badge\" >Primary</span>\r\n </td>\r\n <td>\r\n {{data?.stores}}\r\n </td>\r\n <td>\r\n {{data?.gst}}\r\n </td>\r\n <td>\r\n {{data?.placeOfSupply}}\r\n </td>\r\n <td>\r\n {{data?.groupTag}}\r\n </td>\r\n <td>\r\n <span (click)=\"manageBilling(data._id)\" class=\"me-8 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M9.16602 3.33417H3.33268C2.89065 3.33417 2.46673 3.50977 2.15417 3.82233C1.84161 4.13489 1.66602 4.55881 1.66602 5.00084V16.6675C1.66602 17.1095 1.84161 17.5335 2.15417 17.846C2.46673 18.1586 2.89065 18.3342 3.33268 18.3342H14.9993C15.4414 18.3342 15.8653 18.1586 16.1779 17.846C16.4904 17.5335 16.666 17.1095 16.666 16.6675V10.8342M15.416 2.08417C15.7475 1.75265 16.1972 1.56641 16.666 1.56641C17.1349 1.56641 17.5845 1.75265 17.916 2.08417C18.2475 2.41569 18.4338 2.86533 18.4338 3.33417C18.4338 3.80301 18.2475 4.25265 17.916 4.58417L9.99935 12.5008L6.66602 13.3342L7.49935 10.0008L15.416 2.08417Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span (click)=\"viewBilling(data)\" class=\"cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M0.833984 10.0007C0.833984 10.0007 4.16732 3.33398 10.0007 3.33398C15.834 3.33398 19.1673 10.0007 19.1673 10.0007C19.1673 10.0007 15.834 16.6673 10.0007 16.6673C4.16732 16.6673 0.833984 10.0007 0.833984 10.0007Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0007 12.5007C11.3814 12.5007 12.5006 11.3814 12.5006 10.0007C12.5006 8.61994 11.3814 7.50065 10.0007 7.50065C8.61994 7.50065 7.50065 8.61994 7.50065 10.0007C7.50065 11.3814 8.61994 12.5007 10.0007 12.5007Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"my-3\">\r\n <!-- <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination> -->\r\n </div> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!billingGroups?.length\" >\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"(billingGroupsApiState | async) === 'loading'\">\r\n <div class=\"shimmer-card w-100\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n</div>", styles: [":host{width:100%}.rounded-box{border-radius:12px;border:1px solid #D0D5DD;padding:12px 24px;height:100%}.header{color:#344054;font-size:20px;font-weight:500;line-height:30px}.label{color:#667085;font-size:16px;font-weight:500;line-height:24px}.value{color:#1d2939;font-size:16px;font-weight:500;line-height:24px}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap;border:1px solid #D0D5DD}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.search-input{position:relative}.search-input .icon{position:absolute;left:18px;top:13px}.search-input input{border-radius:7.28px;border:.91px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 .91px 1.82px #1018280d;color:#0000008a;font-size:16px;font-weight:400}.search-input .form-control:focus{box-shadow:none}table td{color:#101828;font-size:14px;font-weight:500;line-height:20px}.rotate{rotate:180deg;transition:1s}.primary-badge{padding:2px 8px;border-radius:16px;background:#eaf8ff;color:#009bf3;font-size:12px;font-weight:500;line-height:18px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
195
195
  }
196
196
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BillingComponent, decorators: [{
197
197
  type: Component,
198
- args: [{ selector: 'lib-billing', template: "<div *ngIf=\"allItems === 1\" class=\"d-flex justify-content-end mb-5\">\r\n <button [disabled]=\"!clientId\" (click)=\"manageBilling()\" type=\"submit\"\r\n class=\"btn-outline btn align-items-end needhelp me-4\"><span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15029_77738)\">\r\n <path\r\n d=\"M9.16602 3.33417H3.33268C2.89065 3.33417 2.46673 3.50977 2.15417 3.82233C1.84161 4.13489 1.66602 4.55881 1.66602 5.00084V16.6675C1.66602 17.1095 1.84161 17.5335 2.15417 17.846C2.46673 18.1586 2.89065 18.3342 3.33268 18.3342H14.9993C15.4414 18.3342 15.8653 18.1586 16.1779 17.846C16.4904 17.5335 16.666 17.1095 16.666 16.6675V10.8342M15.416 2.08417C15.7475 1.75265 16.1972 1.56641 16.666 1.56641C17.1349 1.56641 17.5845 1.75265 17.916 2.08417C18.2475 2.41569 18.4338 2.86533 18.4338 3.33417C18.4338 3.80301 18.2475 4.25265 17.916 4.58417L9.99935 12.5008L6.66602 13.3342L7.49935 10.0008L15.416 2.08417Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15029_77738\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>Manage Billing</button>\r\n</div>\r\n\r\n<div [ngClass]=\"allItems === 1 ? 'row-cols-2' : 'row-cols-1'\" class=\"row mb-5\">\r\n <div class=\"col\">\r\n <div class=\"rounded-box \">\r\n <div class=\"header mb-5\">\r\n Payment Details\r\n </div>\r\n <div *ngIf=\"allItems === 1\" class=\"row row-cols-2\">\r\n <div class=\"col label mb-3\">Payment Type </div>\r\n <div class=\"col value mb-3\">\r\n <span *ngIf=\"accountDetails?.paymentType === 'virtual_account'\" > Virtual Account</span>\r\n </div>\r\n <div class=\"col label mb-3\">Account No </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.accountNumber}}</div>\r\n <div class=\"col label mb-3\">IFSC Code </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.ifsc}}</div>\r\n <!-- <div class=\"col label mb-3\">SWIFT Code </div>\r\n <div class=\"col value mb-3\">HDFCINBBCHE</div> -->\r\n <div class=\"col label mb-3\">Branch </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.branch}}</div>\r\n </div>\r\n <div *ngIf=\"allItems > 1\" class=\"row row-cols-2\">\r\n <div class=\"col\">\r\n <div class=\"row row-cols-2\">\r\n <div class=\"col label mb-3\">Payment Type </div>\r\n <div class=\"col value mb-3\">\r\n <span *ngIf=\"accountDetails?.paymentType === 'virtual_account'\" > Virtual Account</span>\r\n </div>\r\n <div class=\"col label mb-3\">Account No </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.accountNumber}}</div>\r\n <div class=\"col label mb-3\">IFSC Code </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.ifsc}}</div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"row row-cols-2\">\r\n <!-- <div class=\"col label mb-3\">SWIFT Code </div>\r\n <div class=\"col value mb-3\">HDFCINBBCHE</div> -->\r\n <div class=\"col label mb-3\">Branch </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.branch}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"allItems === 1\" class=\"col\">\r\n <div class=\"rounded-box \">\r\n <div class=\"header mb-5\">\r\n Payment Details\r\n </div>\r\n <div class=\"row row-cols-2\">\r\n <ng-container *ngFor=\"let group of billingGroups\" >\r\n <ng-container *ngIf=\"group.isPrimary\" >\r\n <div class=\"col label mb-3\">Next Billing Date </div>\r\n <div class=\"col value mb-3\">{{dayjs().endOf('month').format('DD-MM-YYYY')}}</div>\r\n <div class=\"col label mb-3\">Registered Company Name </div>\r\n <div class=\"col value mb-3\">{{group?.registeredCompanyName ? group.registeredCompanyName : '-'}}</div>\r\n <div class=\"col label mb-3\">Billing Address </div>\r\n <div class=\"col value mb-3\">{{group?.addressLineOne ? group.addressLineOne : '-'}}</div>\r\n <div class=\"col label mb-3\">GST No</div>\r\n <div class=\"col value mb-3\">{{group?.gst ? group.gst : '-'}}</div> \r\n </ng-container>\r\n </ng-container>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<div *ngIf=\"allItems > 1\">\r\n <div class=\"d-flex justify-content-end align-items-center mb-5\">\r\n <div class=\"me-4\">\r\n <div class=\"search-input\">\r\n <span class=\"icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M11.5 10L11.43 10.73C12.41 9.59 13 8.11 13 6.5C13 2.91 10.09 0 6.5 0C2.91 0 0 2.91 0 6.5C0 10.09 2.91 13 6.5 13C8.11 13 9.59 12.41 10.73 11.43L10.2762 11.71L16 17.49L17.49 16L11.5 10ZM6.5 11C4.01 11 2 8.99 2 6.5C2 4.01 4.01 2 6.5 2C8.99 2 11 4.01 11 6.5C11 8.99 8.99 11 6.5 11Z\"\r\n fill=\"black\" fill-opacity=\"0.54\" />\r\n </svg>\r\n </span>\r\n <input [formControl]=\"searchInput\" type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n </div>\r\n <div class=\"me-4\">\r\n <button (click)=\"onExport()\" [disabled]=\"!clientId\" type=\"submit\" class=\"btn-outline btn align-items-end needhelp \"><span\r\n class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>Export</button>\r\n </div>\r\n <div class=\"me-4\">\r\n <button [disabled]=\"!clientId\" (click)=\"manageBilling()\" class=\"btn btn-primary w-100\">\r\n <span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99935 4.16602V15.8327M4.16602 9.99935H15.8327\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n Add Group</button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"(billingGroupsApiState | async) === 'loaded'\">\r\n <ng-container *ngIf=\"billingGroups?.length\" >\r\n <div class=\"table-responsive store-table\">\r\n <table class=\"table bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"form-check-label\" for=\"flexCheckDefault\">\r\n <span>Group name</span>\r\n </label>\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('groupName')\"\r\n [ngClass]=\"sortedColumn === 'groupName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>Stores\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('stores')\"\r\n [ngClass]=\"sortedColumn === 'stores' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>GST Number\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('gst')\"\r\n [ngClass]=\"sortedColumn === 'gst' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Place of Supply\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('placeOfSupply')\"\r\n [ngClass]=\"sortedColumn === 'placeOfSupply' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Tag\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('groupTag')\"\r\n [ngClass]=\"sortedColumn === 'groupTag' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of billingGroups\">\r\n <td>\r\n <span class=\"me-4\" >{{data?.groupName}}</span> \r\n <span *ngIf=\"data.isPrimary\" class=\"primary-badge\" >Primary</span>\r\n </td>\r\n <td>\r\n {{data?.stores}}\r\n </td>\r\n <td>\r\n {{data?.gst}}\r\n </td>\r\n <td>\r\n {{data?.placeOfSupply}}\r\n </td>\r\n <td>\r\n {{data?.groupTag}}\r\n </td>\r\n <td>\r\n <span (click)=\"manageBilling(data._id)\" class=\"me-8 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M9.16602 3.33417H3.33268C2.89065 3.33417 2.46673 3.50977 2.15417 3.82233C1.84161 4.13489 1.66602 4.55881 1.66602 5.00084V16.6675C1.66602 17.1095 1.84161 17.5335 2.15417 17.846C2.46673 18.1586 2.89065 18.3342 3.33268 18.3342H14.9993C15.4414 18.3342 15.8653 18.1586 16.1779 17.846C16.4904 17.5335 16.666 17.1095 16.666 16.6675V10.8342M15.416 2.08417C15.7475 1.75265 16.1972 1.56641 16.666 1.56641C17.1349 1.56641 17.5845 1.75265 17.916 2.08417C18.2475 2.41569 18.4338 2.86533 18.4338 3.33417C18.4338 3.80301 18.2475 4.25265 17.916 4.58417L9.99935 12.5008L6.66602 13.3342L7.49935 10.0008L15.416 2.08417Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span (click)=\"viewBilling(data)\" class=\"cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M0.833984 10.0007C0.833984 10.0007 4.16732 3.33398 10.0007 3.33398C15.834 3.33398 19.1673 10.0007 19.1673 10.0007C19.1673 10.0007 15.834 16.6673 10.0007 16.6673C4.16732 16.6673 0.833984 10.0007 0.833984 10.0007Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0007 12.5007C11.3814 12.5007 12.5006 11.3814 12.5006 10.0007C12.5006 8.61994 11.3814 7.50065 10.0007 7.50065C8.61994 7.50065 7.50065 8.61994 7.50065 10.0007C7.50065 11.3814 8.61994 12.5007 10.0007 12.5007Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"my-3\">\r\n <!-- <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination> -->\r\n </div> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!billingGroups?.length\" >\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"(billingGroupsApiState | async) === 'loading'\">\r\n <div class=\"shimmer-card w-100\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n</div>", styles: [":host{width:100%}.rounded-box{border-radius:12px;border:1px solid #D0D5DD;padding:12px 24px;height:100%}.header{color:#344054;font-size:20px;font-weight:500;line-height:30px}.label{color:#667085;font-size:16px;font-weight:500;line-height:24px}.value{color:#1d2939;font-size:16px;font-weight:500;line-height:24px}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap;border:1px solid #D0D5DD}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.search-input{position:relative}.search-input .icon{position:absolute;left:18px;top:13px}.search-input input{border-radius:7.28px;border:.91px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 .91px 1.82px #1018280d;color:#0000008a;font-size:16px;font-weight:400}.search-input .form-control:focus{box-shadow:none}table td{color:#101828;font-size:14px;font-weight:500;line-height:20px}.rotate{rotate:180deg;transition:1s}.primary-badge{padding:2px 8px;border-radius:16px;background:#eaf8ff;color:#009bf3;font-size:12px;font-weight:500;line-height:18px}\n"] }]
198
+ args: [{ selector: 'lib-billing', template: "<div *ngIf=\"allItems === 1\" class=\"d-flex justify-content-end mb-5\">\r\n <button [disabled]=\"!clientId\" (click)=\"manageBilling()\" type=\"submit\"\r\n class=\"btn-outline btn align-items-end needhelp me-4\"><span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15029_77738)\">\r\n <path\r\n d=\"M9.16602 3.33417H3.33268C2.89065 3.33417 2.46673 3.50977 2.15417 3.82233C1.84161 4.13489 1.66602 4.55881 1.66602 5.00084V16.6675C1.66602 17.1095 1.84161 17.5335 2.15417 17.846C2.46673 18.1586 2.89065 18.3342 3.33268 18.3342H14.9993C15.4414 18.3342 15.8653 18.1586 16.1779 17.846C16.4904 17.5335 16.666 17.1095 16.666 16.6675V10.8342M15.416 2.08417C15.7475 1.75265 16.1972 1.56641 16.666 1.56641C17.1349 1.56641 17.5845 1.75265 17.916 2.08417C18.2475 2.41569 18.4338 2.86533 18.4338 3.33417C18.4338 3.80301 18.2475 4.25265 17.916 4.58417L9.99935 12.5008L6.66602 13.3342L7.49935 10.0008L15.416 2.08417Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15029_77738\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>Manage Billing</button>\r\n</div>\r\n\r\n<div [ngClass]=\"allItems === 1 ? 'row-cols-2' : 'row-cols-1'\" class=\"row mb-5\">\r\n <div class=\"col\">\r\n <div class=\"rounded-box \">\r\n <div class=\"header mb-5\">\r\n Payment Details\r\n </div>\r\n <div *ngIf=\"allItems === 1\" class=\"row row-cols-2\">\r\n <div class=\"col label mb-3\">Payment Type </div>\r\n <div class=\"col value mb-3\">\r\n <span *ngIf=\"accountDetails?.paymentType === 'virtual_account'\" > Virtual Account</span>\r\n </div>\r\n <div class=\"col label mb-3\">Account No </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.accountNumber}}</div>\r\n <div class=\"col label mb-3\">IFSC Code </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.ifsc}}</div>\r\n <!-- <div class=\"col label mb-3\">SWIFT Code </div>\r\n <div class=\"col value mb-3\">HDFCINBBCHE</div> -->\r\n <div class=\"col label mb-3\">Branch </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.branch}}</div>\r\n </div>\r\n <div *ngIf=\"allItems > 1\" class=\"row row-cols-2\">\r\n <div class=\"col\">\r\n <div class=\"row row-cols-2\">\r\n <div class=\"col label mb-3\">Payment Type </div>\r\n <div class=\"col value mb-3\">\r\n <span *ngIf=\"accountDetails?.paymentType === 'virtual_account'\" > Virtual Account</span>\r\n </div>\r\n <div class=\"col label mb-3\">Account No </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.accountNumber}}</div>\r\n <div class=\"col label mb-3\">IFSC Code </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.ifsc}}</div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"row row-cols-2\">\r\n <!-- <div class=\"col label mb-3\">SWIFT Code </div>\r\n <div class=\"col value mb-3\">HDFCINBBCHE</div> -->\r\n <div class=\"col label mb-3\">Branch </div>\r\n <div class=\"col value mb-3\">{{accountDetails?.branch}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"allItems === 1\" class=\"col\">\r\n <div class=\"rounded-box \">\r\n <div class=\"header mb-5\">\r\n Payment Details\r\n </div>\r\n <div class=\"row row-cols-2\">\r\n <ng-container *ngFor=\"let group of billingGroups\" >\r\n <ng-container *ngIf=\"group.isPrimary\" >\r\n <!-- <div class=\"col label mb-3\">Next Billing Date </div>\r\n <div class=\"col value mb-3\">{{dayjs().endOf('month').format('DD-MM-YYYY')}}</div> -->\r\n <div class=\"col label mb-3\">Registered Company Name </div>\r\n <div class=\"col value mb-3\">{{group?.registeredCompanyName ? group.registeredCompanyName : '-'}}</div>\r\n <div class=\"col label mb-3\">Billing Address </div>\r\n <div class=\"col value mb-3\">{{group?.addressLineOne ? group.addressLineOne : '-'}} {{group.addressLineTwo?group.addressLineTwo:\"\"}} {{group.city?group.city:\"\"}} {{group.state?group.state:\"\"}} {{group.country?group.country:\"\"}} {{group.pinCode?group.pinCode:\"\"}}</div>\r\n <div class=\"col label mb-3\">GST No</div>\r\n <div class=\"col value mb-3\">{{group?.gst ? group.gst : '-'}}</div> \r\n </ng-container>\r\n </ng-container>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<div *ngIf=\"allItems > 1\">\r\n <div class=\"d-flex justify-content-end align-items-center mb-5\">\r\n <div class=\"me-4\">\r\n <div class=\"search-input\">\r\n <span class=\"icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M11.5 10L11.43 10.73C12.41 9.59 13 8.11 13 6.5C13 2.91 10.09 0 6.5 0C2.91 0 0 2.91 0 6.5C0 10.09 2.91 13 6.5 13C8.11 13 9.59 12.41 10.73 11.43L10.2762 11.71L16 17.49L17.49 16L11.5 10ZM6.5 11C4.01 11 2 8.99 2 6.5C2 4.01 4.01 2 6.5 2C8.99 2 11 4.01 11 6.5C11 8.99 8.99 11 6.5 11Z\"\r\n fill=\"black\" fill-opacity=\"0.54\" />\r\n </svg>\r\n </span>\r\n <input [formControl]=\"searchInput\" type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n </div>\r\n <div class=\"me-4\">\r\n <button (click)=\"onExport()\" [disabled]=\"!clientId\" type=\"submit\" class=\"btn-outline btn align-items-end needhelp \"><span\r\n class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>Export</button>\r\n </div>\r\n <div class=\"me-4\">\r\n <button [disabled]=\"!clientId\" (click)=\"manageBilling()\" class=\"btn btn-primary w-100\">\r\n <span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99935 4.16602V15.8327M4.16602 9.99935H15.8327\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n Add Billing Group</button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"(billingGroupsApiState | async) === 'loaded'\">\r\n <ng-container *ngIf=\"billingGroups?.length\" >\r\n <div class=\"table-responsive store-table\">\r\n <table class=\"table bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"form-check-label\" for=\"flexCheckDefault\">\r\n <span>Group name</span>\r\n </label>\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('groupName')\"\r\n [ngClass]=\"sortedColumn === 'groupName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>Stores\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('stores')\"\r\n [ngClass]=\"sortedColumn === 'stores' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>GST Number\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('gst')\"\r\n [ngClass]=\"sortedColumn === 'gst' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Place of Supply\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('placeOfSupply')\"\r\n [ngClass]=\"sortedColumn === 'placeOfSupply' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Tag\r\n <svg class=\"cursor-pointer\" (click)=\"onSort('groupTag')\"\r\n [ngClass]=\"sortedColumn === 'groupTag' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of billingGroups\">\r\n <td>\r\n <span class=\"me-4\" >{{data?.groupName}}</span> \r\n <span *ngIf=\"data.isPrimary\" class=\"primary-badge\" >Primary</span>\r\n </td>\r\n <td>\r\n {{data?.stores}}\r\n </td>\r\n <td>\r\n {{data?.gst}}\r\n </td>\r\n <td>\r\n {{data?.placeOfSupply}}\r\n </td>\r\n <td>\r\n {{data?.groupTag}}\r\n </td>\r\n <td>\r\n <span (click)=\"manageBilling(data._id)\" class=\"me-8 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M9.16602 3.33417H3.33268C2.89065 3.33417 2.46673 3.50977 2.15417 3.82233C1.84161 4.13489 1.66602 4.55881 1.66602 5.00084V16.6675C1.66602 17.1095 1.84161 17.5335 2.15417 17.846C2.46673 18.1586 2.89065 18.3342 3.33268 18.3342H14.9993C15.4414 18.3342 15.8653 18.1586 16.1779 17.846C16.4904 17.5335 16.666 17.1095 16.666 16.6675V10.8342M15.416 2.08417C15.7475 1.75265 16.1972 1.56641 16.666 1.56641C17.1349 1.56641 17.5845 1.75265 17.916 2.08417C18.2475 2.41569 18.4338 2.86533 18.4338 3.33417C18.4338 3.80301 18.2475 4.25265 17.916 4.58417L9.99935 12.5008L6.66602 13.3342L7.49935 10.0008L15.416 2.08417Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span (click)=\"viewBilling(data)\" class=\"cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M0.833984 10.0007C0.833984 10.0007 4.16732 3.33398 10.0007 3.33398C15.834 3.33398 19.1673 10.0007 19.1673 10.0007C19.1673 10.0007 15.834 16.6673 10.0007 16.6673C4.16732 16.6673 0.833984 10.0007 0.833984 10.0007Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0007 12.5007C11.3814 12.5007 12.5006 11.3814 12.5006 10.0007C12.5006 8.61994 11.3814 7.50065 10.0007 7.50065C8.61994 7.50065 7.50065 8.61994 7.50065 10.0007C7.50065 11.3814 8.61994 12.5007 10.0007 12.5007Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"my-3\">\r\n <!-- <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination> -->\r\n </div> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!billingGroups?.length\" >\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"(billingGroupsApiState | async) === 'loading'\">\r\n <div class=\"shimmer-card w-100\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n</div>", styles: [":host{width:100%}.rounded-box{border-radius:12px;border:1px solid #D0D5DD;padding:12px 24px;height:100%}.header{color:#344054;font-size:20px;font-weight:500;line-height:30px}.label{color:#667085;font-size:16px;font-weight:500;line-height:24px}.value{color:#1d2939;font-size:16px;font-weight:500;line-height:24px}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap;border:1px solid #D0D5DD}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.search-input{position:relative}.search-input .icon{position:absolute;left:18px;top:13px}.search-input input{border-radius:7.28px;border:.91px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 .91px 1.82px #1018280d;color:#0000008a;font-size:16px;font-weight:400}.search-input .form-control:focus{box-shadow:none}table td{color:#101828;font-size:14px;font-weight:500;line-height:20px}.rotate{rotate:180deg;transition:1s}.primary-badge{padding:2px 8px;border-radius:16px;background:#eaf8ff;color:#009bf3;font-size:12px;font-weight:500;line-height:18px}\n"] }]
199
199
  }], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.ClientApiService }, { type: i3.PaymentSubscriptionService }] });
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL3BheW1lbnRzLXN1YnNjcmlwdGlvbi9iaWxsaW5nL2JpbGxpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXNldHRpbmdzL3NyYy9saWIvY29tcG9uZW50cy9wYXltZW50cy1zdWJzY3JpcHRpb24vYmlsbGluZy9iaWxsaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUU5RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRyxNQUFNLE1BQU0sQ0FBQztBQUVoRyxPQUFRLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDM0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbURBQW1ELENBQUM7Ozs7Ozs7QUFVOUYsTUFBTSxPQUFPLGdCQUFnQjtJQXlCUDtJQUErQjtJQUF3QztJQXZCM0YsUUFBUSxDQUFPO0lBQ2YsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2pDLHFCQUFxQixHQUFHLElBQUksZUFBZSxDQUFtQyxTQUFTLENBQUMsQ0FBQTtJQUN2RSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMxQyxhQUFhLEdBQVMsRUFBRSxDQUFBO0lBQ3hCLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDYixRQUFRLENBQU87SUFDZixj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Qzt1R0ExTVUsZ0JBQWdCOzJGQUFoQixnQkFBZ0IsbURDbEI3QixtdGxCQTJTTTs7MkZEelJPLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQmlsbGluZ0dyb3VwRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vYmlsbGluZy1ncm91cC1mb3JtL2JpbGxpbmctZ3JvdXAtZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGllbnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2xpZW50LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgdGFrZVVudGlsLCBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkICB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQYXltZW50U3Vic2NyaXB0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtc3Vic2NyaXB0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgIGRheWpzIGZyb20gXCJkYXlqc1wiO1xyXG5pbXBvcnQgeyBCaWxsaW5nR3JvdXBWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9iaWxsaW5nLWdyb3VwLXZpZXcvYmlsbGluZy1ncm91cC12aWV3LmNvbXBvbmVudCc7XHJcblxyXG5cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1iaWxsaW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYmlsbGluZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2JpbGxpbmcuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCaWxsaW5nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgY2xpZW50SWQ6c3RyaW5nXHJcbiAgc2VhcmNoSW5wdXQgPSBuZXcgRm9ybUNvbnRyb2woJycpXHJcbiAgYmlsbGluZ0dyb3Vwc0FwaVN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDwnaW5pdGlhbCcgfCAnbG9hZGluZycgfCAnbG9hZGVkJz4oJ2luaXRpYWwnKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGJpbGxpbmdHcm91cHM6YW55W10gPSBbXVxyXG4gIGRheWpzID0gZGF5anNcclxuICBhbGxJdGVtczpudW1iZXJcclxuICBhY2NvdW50RGV0YWlsczphbnlcclxuXHJcblxyXG5cclxuICAvLyBwYWdpbmF0aW9uIHZhcmlhYmxlc1xyXG4gIGl0ZW1zUGVyUGFnZSA9IDEwXHJcbiAgY3VycmVudFBhZ2UgPSAxXHJcbiAgdG90YWxJdGVtcyA9IDBcclxuICBwYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF1cclxuICBwYWdlU2l6ZSA9IDEwXHJcbiAgc2VhcmNoVGVybTogc3RyaW5nXHJcbiAgc29ydGVkQ29sdW1uOiBzdHJpbmdcclxuICBzb3J0RGlyZWN0aW9uOiBudW1iZXJcclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTpOZ2JNb2RhbCwgcHJpdmF0ZSBjbGllbnRTZXJ2aWNlOkNsaWVudEFwaVNlcnZpY2UsIHByaXZhdGUgcGF5bWVudFNlcnZpY2U6UGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2Upe1xyXG4gICAgdGhpcy5jbGllbnRTZXJ2aWNlLmNsaWVudElkLnN1YnNjcmliZSgoZSk9PntcclxuICAgICAgaWYoZSl7ICAgICAgICBcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gZVxyXG4gICAgICAgIHRoaXMuZ2V0VmlydHVhbEFjY291bnQoKVxyXG4gICAgICAgIHRoaXMuZ2V0QmlsbGluZ0dyb3VwcygpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaElucHV0LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkucGlwZShkZWJvdW5jZVRpbWUoMTAwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgodmFsKSA9PiB7XHJcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlYXJjaFRlcm0gPSB2YWxcclxuICAgICAgdGhpcy5nZXRCaWxsaW5nR3JvdXBzKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGdldFZpcnR1YWxBY2NvdW50KCl7XHJcbiAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLmdldFZpcnR1YWxBY2NvdW50KHRoaXMuY2xpZW50SWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OihlKT0+e1xyXG4gICAgICAgIGlmKGUuZGF0YSl7XHJcbiAgICAgICAgICB0aGlzLmFjY291bnREZXRhaWxzID0gZS5kYXRhXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLmFjY291bnREZXRhaWxzID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICBtYW5hZ2VCaWxsaW5nKGdyb3VwSWQ/OnN0cmluZywgdGFiPzpzdHJpbmcpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihCaWxsaW5nR3JvdXBGb3JtQ29tcG9uZW50LCB7IHNpemU6ICdsZycsIGNlbnRlcmVkOiB0cnVlIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkXHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5ncm91cElkID0gZ3JvdXBJZFxyXG5cclxuICAgIGlmKHRhYil7XHJcbiAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmN1cnJlbnRUYWIgPSB0YWJcclxuICAgIH1cclxuXHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0QmlsbGluZ0dyb3VwcygpICAgIFxyXG4gICAgfSkuY2F0Y2goKGUpPT57XHJcbiAgICAgIHRoaXMuZ2V0QmlsbGluZ0dyb3VwcygpIFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRCaWxsaW5nR3JvdXBzKCkge1xyXG4gICAgdGhpcy5iaWxsaW5nR3JvdXBzQXBpU3RhdGUubmV4dCgnbG9hZGluZycpXHJcbiAgICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xyXG4gICAgICBcImxpbWl0XCI6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgIFwib2Zmc2V0XCI6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5jbGllbnRJZCxcclxuICAgICAgXCJzb3J0Q29sdW1uXCI6IHRoaXMuc29ydGVkQ29sdW1uLFxyXG4gICAgICBcInNvcnRCeVwiOiB0aGlzLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgIFwic2VhcmNoVmFsdWVcIjogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcclxuICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGlmIChkYXRhW2tleV0gPT09IHVuZGVmaW5lZCB8fCBkYXRhW2tleV0gPT09ICcnKSB7XHJcbiAgICAgICAgICBkZWxldGUgZGF0YVtrZXldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhW2tleV0pKSB7XHJcbiAgICAgICAgICBpZiAoIWRhdGFba2V5XS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdGFba2V5XVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5wYXltZW50U2VydmljZS5nZXRCaWxsaW5nR3JvdXBzKGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5iaWxsaW5nR3JvdXBzQXBpU3RhdGUubmV4dCgnbG9hZGVkJylcclxuICAgICAgICBpZiAocmVzPy5kYXRhPy5wYWdlSW5mbz8uY291bnQpIHtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlcy5kYXRhLnBhZ2VJbmZvLmNvdW50XHJcbiAgICAgICAgICB0aGlzLmFsbEl0ZW1zID0gcmVzLmRhdGEucGFnZUluZm8udG90YWxcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzPy5kYXRhPy5kYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLmJpbGxpbmdHcm91cHMgPSByZXMuZGF0YS5kYXRhXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYmlsbGluZ0dyb3VwcyA9IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydCgpe1xyXG4gICAgdGhpcy5iaWxsaW5nR3JvdXBzQXBpU3RhdGUubmV4dCgnbG9hZGluZycpXHJcbiAgICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xyXG4gICAgICBcImxpbWl0XCI6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgIFwib2Zmc2V0XCI6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5jbGllbnRJZCxcclxuICAgICAgXCJzb3J0Q29sdW1uXCI6IHRoaXMuc29ydGVkQ29sdW1uLFxyXG4gICAgICBcInNvcnRCeVwiOiB0aGlzLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgIFwic2VhcmNoVmFsdWVcIjogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICBcImlzRXhwb3J0XCI6dHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcclxuICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGlmIChkYXRhW2tleV0gPT09IHVuZGVmaW5lZCB8fCBkYXRhW2tleV0gPT09ICcnKSB7XHJcbiAgICAgICAgICBkZWxldGUgZGF0YVtrZXldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhW2tleV0pKSB7XHJcbiAgICAgICAgICBpZiAoIWRhdGFba2V5XS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdGFba2V5XVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5wYXltZW50U2VydmljZS5leHBvcnRCaWxsaW5nR3JvdXBzKGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5iaWxsaW5nR3JvdXBzQXBpU3RhdGUubmV4dCgnbG9hZGVkJylcclxuICAgICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdpbnZvaWNlJylcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBldmVudFxyXG4gICAgdGhpcy5nZXRCaWxsaW5nR3JvdXBzKClcclxuXHJcbiAgfVxyXG5cclxuICBvblBhZ2VTaXplQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxXHJcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnRcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gZXZlbnRcclxuICAgIHRoaXMuZ2V0QmlsbGluZ0dyb3VwcygpXHJcbiAgfVxyXG5cclxuICBvblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnNvcnRlZENvbHVtbiA9PT0gY29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydERpcmVjdGlvbiA9PT0gMSA/IC0xIDogMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc29ydGVkQ29sdW1uID0gY29sdW1uO1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRCaWxsaW5nR3JvdXBzKClcclxuICB9XHJcblxyXG4gIHZpZXdCaWxsaW5nKGdyb3VwRGV0YWlsczphbnkpe1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEJpbGxpbmdHcm91cFZpZXdDb21wb25lbnQsIHsgc2l6ZTogJ2xnJywgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5ncm91cERldGFpbHMgPSBncm91cERldGFpbHNcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXMpID0+IHtcclxuICAgICAgaWYocmVzPy5ncm91cElkICYmIHJlcy50YWIpe1xyXG4gICAgICAgIHRoaXMubWFuYWdlQmlsbGluZyhyZXMuZ3JvdXBJZCwgIHJlcy50YWIpXHJcbiAgICAgIH1lbHNlIGlmKHJlcz8uZ3JvdXBJZCl7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VCaWxsaW5nKHJlcy5ncm91cElkKVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiYWxsSXRlbXMgPT09IDFcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTVcIj5cclxuICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiFjbGllbnRJZFwiIChjbGljayk9XCJtYW5hZ2VCaWxsaW5nKClcIiB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBhbGlnbi1pdGVtcy1lbmQgbmVlZGhlbHAgIG1lLTRcIj48c3BhbiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE1MDI5Xzc3NzM4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS4xNjYwMiAzLjMzNDE3SDMuMzMyNjhDMi44OTA2NSAzLjMzNDE3IDIuNDY2NzMgMy41MDk3NyAyLjE1NDE3IDMuODIyMzNDMS44NDE2MSA0LjEzNDg5IDEuNjY2MDIgNC41NTg4MSAxLjY2NjAyIDUuMDAwODRWMTYuNjY3NUMxLjY2NjAyIDE3LjEwOTUgMS44NDE2MSAxNy41MzM1IDIuMTU0MTcgMTcuODQ2QzIuNDY2NzMgMTguMTU4NiAyLjg5MDY1IDE4LjMzNDIgMy4zMzI2OCAxOC4zMzQySDE0Ljk5OTNDMTUuNDQxNCAxOC4zMzQyIDE1Ljg2NTMgMTguMTU4NiAxNi4xNzc5IDE3Ljg0NkMxNi40OTA0IDE3LjUzMzUgMTYuNjY2IDE3LjEwOTUgMTYuNjY2IDE2LjY2NzVWMTAuODM0Mk0xNS40MTYgMi4wODQxN0MxNS43NDc1IDEuNzUyNjUgMTYuMTk3MiAxLjU2NjQxIDE2LjY2NiAxLjU2NjQxQzE3LjEzNDkgMS41NjY0MSAxNy41ODQ1IDEuNzUyNjUgMTcuOTE2IDIuMDg0MTdDMTguMjQ3NSAyLjQxNTY5IDE4LjQzMzggMi44NjUzMyAxOC40MzM4IDMuMzM0MTdDMTguNDMzOCAzLjgwMzAxIDE4LjI0NzUgNC4yNTI2NSAxNy45MTYgNC41ODQxN0w5Ljk5OTM1IDEyLjUwMDhMNi42NjYwMiAxMy4zMzQyTDcuNDk5MzUgMTAuMDAwOEwxNS40MTYgMi4wODQxN1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNTAyOV83NzczOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvc3Bhbj5NYW5hZ2UgQmlsbGluZzwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgW25nQ2xhc3NdPVwiYWxsSXRlbXMgPT09IDEgPyAncm93LWNvbHMtMicgOiAncm93LWNvbHMtMSdcIiBjbGFzcz1cInJvdyBtYi01XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtYm94IFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgIFBheW1lbnQgRGV0YWlsc1xyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFsbEl0ZW1zID09PSAxXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBsYWJlbCBtYi0zXCI+UGF5bWVudCBUeXBlIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB2YWx1ZSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhY2NvdW50RGV0YWlscz8ucGF5bWVudFR5cGUgPT09ICd2aXJ0dWFsX2FjY291bnQnXCIgPiBWaXJ0dWFsIEFjY291bnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgbGFiZWwgbWItM1wiPkFjY291bnQgTm8gPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj57e2FjY291bnREZXRhaWxzPy5hY2NvdW50TnVtYmVyfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgbGFiZWwgbWItM1wiPklGU0MgQ29kZSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdmFsdWUgbWItM1wiPnt7YWNjb3VudERldGFpbHM/Lmlmc2N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sIGxhYmVsIG1iLTNcIj5TV0lGVCBDb2RlIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB2YWx1ZSBtYi0zXCI+SERGQ0lOQkJDSEU8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGxhYmVsIG1iLTNcIj5CcmFuY2ggPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj57e2FjY291bnREZXRhaWxzPy5icmFuY2h9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFsbEl0ZW1zID4gMVwiIGNsYXNzPVwicm93IHJvdy1jb2xzLTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHJvdy1jb2xzLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBsYWJlbCBtYi0zXCI+UGF5bWVudCBUeXBlIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYWNjb3VudERldGFpbHM/LnBheW1lbnRUeXBlID09PSAndmlydHVhbF9hY2NvdW50J1wiID4gVmlydHVhbCBBY2NvdW50PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBsYWJlbCBtYi0zXCI+QWNjb3VudCBObyA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB2YWx1ZSBtYi0zXCI+e3thY2NvdW50RGV0YWlscz8uYWNjb3VudE51bWJlcn19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgbGFiZWwgbWItM1wiPklGU0MgQ29kZSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB2YWx1ZSBtYi0zXCI+e3thY2NvdW50RGV0YWlscz8uaWZzY319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHJvdy1jb2xzLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sIGxhYmVsIG1iLTNcIj5TV0lGVCBDb2RlIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj5IREZDSU5CQkNIRTwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBsYWJlbCBtYi0zXCI+QnJhbmNoIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj57e2FjY291bnREZXRhaWxzPy5icmFuY2h9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiYWxsSXRlbXMgPT09IDFcIiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWJveCBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICBQYXltZW50IERldGFpbHNcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93LWNvbHMtMlwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgYmlsbGluZ0dyb3Vwc1wiID5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cC5pc1ByaW1hcnlcIiA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGxhYmVsIG1iLTNcIj5OZXh0IEJpbGxpbmcgRGF0ZSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdmFsdWUgbWItM1wiPnt7ZGF5anMoKS5lbmRPZignbW9udGgnKS5mb3JtYXQoJ0RELU1NLVlZWVknKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGxhYmVsIG1iLTNcIj5SZWdpc3RlcmVkIENvbXBhbnkgTmFtZSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdmFsdWUgbWItM1wiPnt7Z3JvdXA/LnJlZ2lzdGVyZWRDb21wYW55TmFtZSA/IGdyb3VwLnJlZ2lzdGVyZWRDb21wYW55TmFtZSA6ICctJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGxhYmVsIG1iLTNcIj5CaWxsaW5nIEFkZHJlc3MgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj57e2dyb3VwPy5hZGRyZXNzTGluZU9uZSA/IGdyb3VwLmFkZHJlc3NMaW5lT25lIDogJy0nfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgbGFiZWwgbWItM1wiPkdTVCBObzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB2YWx1ZSBtYi0zXCI+e3tncm91cD8uZ3N0ID8gZ3JvdXAuZ3N0IDogJy0nfX08L2Rpdj4gICAgIFxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImFsbEl0ZW1zID4gMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciBtYi01XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMTBMMTEuNDMgMTAuNzNDMTIuNDEgOS41OSAxMyA4LjExIDEzIDYuNUMxMyAyLjkxIDEwLjA5IDAgNi41IDBDMi45MSAwIDAgMi45MSAwIDYuNUMwIDEwLjA5IDIuOTEgMTMgNi41IDEzQzguMTEgMTMgOS41OSAxMi40MSAxMC43MyAxMS40M0wxMC4yNzYyIDExLjcxTDE2IDE3LjQ5TDE3LjQ5IDE2TDExLjUgMTBaTTYuNSAxMUM0LjAxIDExIDIgOC45OSAyIDYuNUMyIDQuMDEgNC4wMSAyIDYuNSAyQzguOTkgMiAxMSA0LjAxIDExIDYuNUMxMSA4Ljk5IDguOTkgMTEgNi41IDExWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiYmxhY2tcIiBmaWxsLW9wYWNpdHk9XCIwLjU0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwic2VhcmNoSW5wdXRcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZS00XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uRXhwb3J0KClcIiBbZGlzYWJsZWRdPVwiIWNsaWVudElkXCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuLW91dGxpbmUgYnRuIGFsaWduLWl0ZW1zLWVuZCBuZWVkaGVscCBcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+RXhwb3J0PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIWNsaWVudElkXCIgKGNsaWNrKT1cIm1hbmFnZUJpbGxpbmcoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05Ljk5OTM1IDQuMTY2MDJWMTUuODMyN000LjE2NjAyIDkuOTk5MzVIMTUuODMyN1wiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgQWRkIEdyb3VwPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoYmlsbGluZ0dyb3Vwc0FwaVN0YXRlIHwgYXN5bmMpID09PSAnbG9hZGVkJ1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJiaWxsaW5nR3JvdXBzPy5sZW5ndGhcIiA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUgc3RvcmUtdGFibGVcIj5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYm90dG9tLWJvcmRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiZmxleENoZWNrRGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Hcm91cCBuYW1lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnZ3JvdXBOYW1lJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdncm91cE5hbWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5TdG9yZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N0b3JlcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZXMnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5HU1QgTnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdnc3QnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnZ3N0JyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGxhY2Ugb2YgU3VwcGx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdwbGFjZU9mU3VwcGx5JylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3BsYWNlT2ZTdXBwbHknICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5UYWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2dyb3VwVGFnJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2dyb3VwVGFnJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uczwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBkYXRhIG9mIGJpbGxpbmdHcm91cHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtNFwiID57e2RhdGE/Lmdyb3VwTmFtZX19PC9zcGFuPiAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YS5pc1ByaW1hcnlcIiBjbGFzcz1cInByaW1hcnktYmFkZ2VcIiA+UHJpbWFyeTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhPy5zdG9yZXN9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGE/LmdzdH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YT8ucGxhY2VPZlN1cHBseX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YT8uZ3JvdXBUYWd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwibWFuYWdlQmlsbGluZyhkYXRhLl9pZClcIiBjbGFzcz1cIm1lLTggY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS4xNjYwMiAzLjMzNDE3SDMuMzMyNjhDMi44OTA2NSAzLjMzNDE3IDIuNDY2NzMgMy41MDk3NyAyLjE1NDE3IDMuODIyMzNDMS44NDE2MSA0LjEzNDg5IDEuNjY2MDIgNC41NTg4MSAxLjY2NjAyIDUuMDAwODRWMTYuNjY3NUMxLjY2NjAyIDE3LjEwOTUgMS44NDE2MSAxNy41MzM1IDIuMTU0MTcgMTcuODQ2QzIuNDY2NzMgMTguMTU4NiAyLjg5MDY1IDE4LjMzNDIgMy4zMzI2OCAxOC4zMzQySDE0Ljk5OTNDMTUuNDQxNCAxOC4zMzQyIDE1Ljg2NTMgMTguMTU4NiAxNi4xNzc5IDE3Ljg0NkMxNi40OTA0IDE3LjUzMzUgMTYuNjY2IDE3LjEwOTUgMTYuNjY2IDE2LjY2NzVWMTAuODM0Mk0xNS40MTYgMi4wODQxN0MxNS43NDc1IDEuNzUyNjUgMTYuMTk3MiAxLjU2NjQxIDE2LjY2NiAxLjU2NjQxQzE3LjEzNDkgMS41NjY0MSAxNy41ODQ1IDEuNzUyNjUgMTcuOTE2IDIuMDg0MTdDMTguMjQ3NSAyLjQxNTY5IDE4LjQzMzggMi44NjUzMyAxOC40MzM4IDMuMzM0MTdDMTguNDMzOCAzLjgwMzAxIDE4LjI0NzUgNC4yNTI2NSAxNy45MTYgNC41ODQxN0w5Ljk5OTM1IDEyLjUwMDhMNi42NjYwMiAxMy4zMzQyTDcuNDk5MzUgMTAuMDAwOEwxNS40MTYgMi4wODQxN1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJ2aWV3QmlsbGluZyhkYXRhKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMC44MzM5ODQgMTAuMDAwN0MwLjgzMzk4NCAxMC4wMDA3IDQuMTY3MzIgMy4zMzM5OCAxMC4wMDA3IDMuMzMzOThDMTUuODM0IDMuMzMzOTggMTkuMTY3MyAxMC4wMDA3IDE5LjE2NzMgMTAuMDAwN0MxOS4xNjczIDEwLjAwMDcgMTUuODM0IDE2LjY2NzMgMTAuMDAwNyAxNi42NjczQzQuMTY3MzIgMTYuNjY3MyAwLjgzMzk4NCAxMC4wMDA3IDAuODMzOTg0IDEwLjAwMDdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjAwMDcgMTIuNTAwN0MxMS4zODE0IDEyLjUwMDcgMTIuNTAwNiAxMS4zODE0IDEyLjUwMDYgMTAuMDAwN0MxMi41MDA2IDguNjE5OTQgMTEuMzgxNCA3LjUwMDY1IDEwLjAwMDcgNy41MDA2NUM4LjYxOTk0IDcuNTAwNjUgNy41MDA2NSA4LjYxOTk0IDcuNTAwNjUgMTAuMDAwN0M3LjUwMDY1IDExLjM4MTQgOC42MTk5NCAxMi41MDA3IDEwLjAwMDcgMTIuNTAwN1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0zXCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCIgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCIgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPiAtLT5cclxuICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYmlsbGluZ0dyb3Vwcz8ubGVuZ3RoXCIgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyYyB3LTI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICBcclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoYmlsbGluZ0dyb3Vwc0FwaVN0YXRlIHwgYXN5bmMpID09PSAnbG9hZGluZydcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lci1jYXJkIHctMTAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuPC9kaXY+Il19
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL3BheW1lbnRzLXN1YnNjcmlwdGlvbi9iaWxsaW5nL2JpbGxpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXNldHRpbmdzL3NyYy9saWIvY29tcG9uZW50cy9wYXltZW50cy1zdWJzY3JpcHRpb24vYmlsbGluZy9iaWxsaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUU5RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRyxNQUFNLE1BQU0sQ0FBQztBQUVoRyxPQUFRLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDM0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbURBQW1ELENBQUM7Ozs7Ozs7QUFVOUYsTUFBTSxPQUFPLGdCQUFnQjtJQXlCUDtJQUErQjtJQUF3QztJQXZCM0YsUUFBUSxDQUFPO0lBQ2YsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2pDLHFCQUFxQixHQUFHLElBQUksZUFBZSxDQUFtQyxTQUFTLENBQUMsQ0FBQTtJQUN2RSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMxQyxhQUFhLEdBQVMsRUFBRSxDQUFBO0lBQ3hCLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDYixRQUFRLENBQU87SUFDZixj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Qzt1R0ExTVUsZ0JBQWdCOzJGQUFoQixnQkFBZ0IsbURDbEI3QixpNmxCQTJTTTs7MkZEelJPLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQmlsbGluZ0dyb3VwRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vYmlsbGluZy1ncm91cC1mb3JtL2JpbGxpbmctZ3JvdXAtZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGllbnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2xpZW50LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgdGFrZVVudGlsLCBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkICB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQYXltZW50U3Vic2NyaXB0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtc3Vic2NyaXB0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgIGRheWpzIGZyb20gXCJkYXlqc1wiO1xyXG5pbXBvcnQgeyBCaWxsaW5nR3JvdXBWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9iaWxsaW5nLWdyb3VwLXZpZXcvYmlsbGluZy1ncm91cC12aWV3LmNvbXBvbmVudCc7XHJcblxyXG5cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1iaWxsaW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYmlsbGluZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2JpbGxpbmcuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCaWxsaW5nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgY2xpZW50SWQ6c3RyaW5nXHJcbiAgc2VhcmNoSW5wdXQgPSBuZXcgRm9ybUNvbnRyb2woJycpXHJcbiAgYmlsbGluZ0dyb3Vwc0FwaVN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDwnaW5pdGlhbCcgfCAnbG9hZGluZycgfCAnbG9hZGVkJz4oJ2luaXRpYWwnKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGJpbGxpbmdHcm91cHM6YW55W10gPSBbXVxyXG4gIGRheWpzID0gZGF5anNcclxuICBhbGxJdGVtczpudW1iZXJcclxuICBhY2NvdW50RGV0YWlsczphbnlcclxuXHJcblxyXG5cclxuICAvLyBwYWdpbmF0aW9uIHZhcmlhYmxlc1xyXG4gIGl0ZW1zUGVyUGFnZSA9IDEwXHJcbiAgY3VycmVudFBhZ2UgPSAxXHJcbiAgdG90YWxJdGVtcyA9IDBcclxuICBwYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF1cclxuICBwYWdlU2l6ZSA9IDEwXHJcbiAgc2VhcmNoVGVybTogc3RyaW5nXHJcbiAgc29ydGVkQ29sdW1uOiBzdHJpbmdcclxuICBzb3J0RGlyZWN0aW9uOiBudW1iZXJcclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTpOZ2JNb2RhbCwgcHJpdmF0ZSBjbGllbnRTZXJ2aWNlOkNsaWVudEFwaVNlcnZpY2UsIHByaXZhdGUgcGF5bWVudFNlcnZpY2U6UGF5bWVudFN1YnNjcmlwdGlvblNlcnZpY2Upe1xyXG4gICAgdGhpcy5jbGllbnRTZXJ2aWNlLmNsaWVudElkLnN1YnNjcmliZSgoZSk9PntcclxuICAgICAgaWYoZSl7ICAgICAgICBcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gZVxyXG4gICAgICAgIHRoaXMuZ2V0VmlydHVhbEFjY291bnQoKVxyXG4gICAgICAgIHRoaXMuZ2V0QmlsbGluZ0dyb3VwcygpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaElucHV0LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkucGlwZShkZWJvdW5jZVRpbWUoMTAwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgodmFsKSA9PiB7XHJcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlYXJjaFRlcm0gPSB2YWxcclxuICAgICAgdGhpcy5nZXRCaWxsaW5nR3JvdXBzKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGdldFZpcnR1YWxBY2NvdW50KCl7XHJcbiAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLmdldFZpcnR1YWxBY2NvdW50KHRoaXMuY2xpZW50SWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OihlKT0+e1xyXG4gICAgICAgIGlmKGUuZGF0YSl7XHJcbiAgICAgICAgICB0aGlzLmFjY291bnREZXRhaWxzID0gZS5kYXRhXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLmFjY291bnREZXRhaWxzID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICBtYW5hZ2VCaWxsaW5nKGdyb3VwSWQ/OnN0cmluZywgdGFiPzpzdHJpbmcpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihCaWxsaW5nR3JvdXBGb3JtQ29tcG9uZW50LCB7IHNpemU6ICdsZycsIGNlbnRlcmVkOiB0cnVlIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkXHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5ncm91cElkID0gZ3JvdXBJZFxyXG5cclxuICAgIGlmKHRhYil7XHJcbiAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmN1cnJlbnRUYWIgPSB0YWJcclxuICAgIH1cclxuXHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0QmlsbGluZ0dyb3VwcygpICAgIFxyXG4gICAgfSkuY2F0Y2goKGUpPT57XHJcbiAgICAgIHRoaXMuZ2V0QmlsbGluZ0dyb3VwcygpIFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRCaWxsaW5nR3JvdXBzKCkge1xyXG4gICAgdGhpcy5iaWxsaW5nR3JvdXBzQXBpU3RhdGUubmV4dCgnbG9hZGluZycpXHJcbiAgICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xyXG4gICAgICBcImxpbWl0XCI6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgIFwib2Zmc2V0XCI6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5jbGllbnRJZCxcclxuICAgICAgXCJzb3J0Q29sdW1uXCI6IHRoaXMuc29ydGVkQ29sdW1uLFxyXG4gICAgICBcInNvcnRCeVwiOiB0aGlzLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgIFwic2VhcmNoVmFsdWVcIjogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcclxuICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGlmIChkYXRhW2tleV0gPT09IHVuZGVmaW5lZCB8fCBkYXRhW2tleV0gPT09ICcnKSB7XHJcbiAgICAgICAgICBkZWxldGUgZGF0YVtrZXldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhW2tleV0pKSB7XHJcbiAgICAgICAgICBpZiAoIWRhdGFba2V5XS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdGFba2V5XVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5wYXltZW50U2VydmljZS5nZXRCaWxsaW5nR3JvdXBzKGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5iaWxsaW5nR3JvdXBzQXBpU3RhdGUubmV4dCgnbG9hZGVkJylcclxuICAgICAgICBpZiAocmVzPy5kYXRhPy5wYWdlSW5mbz8uY291bnQpIHtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlcy5kYXRhLnBhZ2VJbmZvLmNvdW50XHJcbiAgICAgICAgICB0aGlzLmFsbEl0ZW1zID0gcmVzLmRhdGEucGFnZUluZm8udG90YWxcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzPy5kYXRhPy5kYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLmJpbGxpbmdHcm91cHMgPSByZXMuZGF0YS5kYXRhXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYmlsbGluZ0dyb3VwcyA9IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydCgpe1xyXG4gICAgdGhpcy5iaWxsaW5nR3JvdXBzQXBpU3RhdGUubmV4dCgnbG9hZGluZycpXHJcbiAgICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xyXG4gICAgICBcImxpbWl0XCI6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgIFwib2Zmc2V0XCI6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5jbGllbnRJZCxcclxuICAgICAgXCJzb3J0Q29sdW1uXCI6IHRoaXMuc29ydGVkQ29sdW1uLFxyXG4gICAgICBcInNvcnRCeVwiOiB0aGlzLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgIFwic2VhcmNoVmFsdWVcIjogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICBcImlzRXhwb3J0XCI6dHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcclxuICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGlmIChkYXRhW2tleV0gPT09IHVuZGVmaW5lZCB8fCBkYXRhW2tleV0gPT09ICcnKSB7XHJcbiAgICAgICAgICBkZWxldGUgZGF0YVtrZXldXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhW2tleV0pKSB7XHJcbiAgICAgICAgICBpZiAoIWRhdGFba2V5XS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdGFba2V5XVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5wYXltZW50U2VydmljZS5leHBvcnRCaWxsaW5nR3JvdXBzKGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5iaWxsaW5nR3JvdXBzQXBpU3RhdGUubmV4dCgnbG9hZGVkJylcclxuICAgICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdpbnZvaWNlJylcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBldmVudFxyXG4gICAgdGhpcy5nZXRCaWxsaW5nR3JvdXBzKClcclxuXHJcbiAgfVxyXG5cclxuICBvblBhZ2VTaXplQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxXHJcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnRcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gZXZlbnRcclxuICAgIHRoaXMuZ2V0QmlsbGluZ0dyb3VwcygpXHJcbiAgfVxyXG5cclxuICBvblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnNvcnRlZENvbHVtbiA9PT0gY29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydERpcmVjdGlvbiA9PT0gMSA/IC0xIDogMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc29ydGVkQ29sdW1uID0gY29sdW1uO1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRCaWxsaW5nR3JvdXBzKClcclxuICB9XHJcblxyXG4gIHZpZXdCaWxsaW5nKGdyb3VwRGV0YWlsczphbnkpe1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEJpbGxpbmdHcm91cFZpZXdDb21wb25lbnQsIHsgc2l6ZTogJ2xnJywgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5ncm91cERldGFpbHMgPSBncm91cERldGFpbHNcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXMpID0+IHtcclxuICAgICAgaWYocmVzPy5ncm91cElkICYmIHJlcy50YWIpe1xyXG4gICAgICAgIHRoaXMubWFuYWdlQmlsbGluZyhyZXMuZ3JvdXBJZCwgIHJlcy50YWIpXHJcbiAgICAgIH1lbHNlIGlmKHJlcz8uZ3JvdXBJZCl7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VCaWxsaW5nKHJlcy5ncm91cElkKVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiYWxsSXRlbXMgPT09IDFcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTVcIj5cclxuICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiFjbGllbnRJZFwiIChjbGljayk9XCJtYW5hZ2VCaWxsaW5nKClcIiB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBhbGlnbi1pdGVtcy1lbmQgbmVlZGhlbHAgIG1lLTRcIj48c3BhbiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE1MDI5Xzc3NzM4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS4xNjYwMiAzLjMzNDE3SDMuMzMyNjhDMi44OTA2NSAzLjMzNDE3IDIuNDY2NzMgMy41MDk3NyAyLjE1NDE3IDMuODIyMzNDMS44NDE2MSA0LjEzNDg5IDEuNjY2MDIgNC41NTg4MSAxLjY2NjAyIDUuMDAwODRWMTYuNjY3NUMxLjY2NjAyIDE3LjEwOTUgMS44NDE2MSAxNy41MzM1IDIuMTU0MTcgMTcuODQ2QzIuNDY2NzMgMTguMTU4NiAyLjg5MDY1IDE4LjMzNDIgMy4zMzI2OCAxOC4zMzQySDE0Ljk5OTNDMTUuNDQxNCAxOC4zMzQyIDE1Ljg2NTMgMTguMTU4NiAxNi4xNzc5IDE3Ljg0NkMxNi40OTA0IDE3LjUzMzUgMTYuNjY2IDE3LjEwOTUgMTYuNjY2IDE2LjY2NzVWMTAuODM0Mk0xNS40MTYgMi4wODQxN0MxNS43NDc1IDEuNzUyNjUgMTYuMTk3MiAxLjU2NjQxIDE2LjY2NiAxLjU2NjQxQzE3LjEzNDkgMS41NjY0MSAxNy41ODQ1IDEuNzUyNjUgMTcuOTE2IDIuMDg0MTdDMTguMjQ3NSAyLjQxNTY5IDE4LjQzMzggMi44NjUzMyAxOC40MzM4IDMuMzM0MTdDMTguNDMzOCAzLjgwMzAxIDE4LjI0NzUgNC4yNTI2NSAxNy45MTYgNC41ODQxN0w5Ljk5OTM1IDEyLjUwMDhMNi42NjYwMiAxMy4zMzQyTDcuNDk5MzUgMTAuMDAwOEwxNS40MTYgMi4wODQxN1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNTAyOV83NzczOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvc3Bhbj5NYW5hZ2UgQmlsbGluZzwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgW25nQ2xhc3NdPVwiYWxsSXRlbXMgPT09IDEgPyAncm93LWNvbHMtMicgOiAncm93LWNvbHMtMSdcIiBjbGFzcz1cInJvdyBtYi01XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtYm94IFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgIFBheW1lbnQgRGV0YWlsc1xyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFsbEl0ZW1zID09PSAxXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBsYWJlbCBtYi0zXCI+UGF5bWVudCBUeXBlIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB2YWx1ZSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhY2NvdW50RGV0YWlscz8ucGF5bWVudFR5cGUgPT09ICd2aXJ0dWFsX2FjY291bnQnXCIgPiBWaXJ0dWFsIEFjY291bnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgbGFiZWwgbWItM1wiPkFjY291bnQgTm8gPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj57e2FjY291bnREZXRhaWxzPy5hY2NvdW50TnVtYmVyfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgbGFiZWwgbWItM1wiPklGU0MgQ29kZSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdmFsdWUgbWItM1wiPnt7YWNjb3VudERldGFpbHM/Lmlmc2N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sIGxhYmVsIG1iLTNcIj5TV0lGVCBDb2RlIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB2YWx1ZSBtYi0zXCI+SERGQ0lOQkJDSEU8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGxhYmVsIG1iLTNcIj5CcmFuY2ggPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj57e2FjY291bnREZXRhaWxzPy5icmFuY2h9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFsbEl0ZW1zID4gMVwiIGNsYXNzPVwicm93IHJvdy1jb2xzLTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHJvdy1jb2xzLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBsYWJlbCBtYi0zXCI+UGF5bWVudCBUeXBlIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYWNjb3VudERldGFpbHM/LnBheW1lbnRUeXBlID09PSAndmlydHVhbF9hY2NvdW50J1wiID4gVmlydHVhbCBBY2NvdW50PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBsYWJlbCBtYi0zXCI+QWNjb3VudCBObyA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB2YWx1ZSBtYi0zXCI+e3thY2NvdW50RGV0YWlscz8uYWNjb3VudE51bWJlcn19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgbGFiZWwgbWItM1wiPklGU0MgQ29kZSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB2YWx1ZSBtYi0zXCI+e3thY2NvdW50RGV0YWlscz8uaWZzY319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHJvdy1jb2xzLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sIGxhYmVsIG1iLTNcIj5TV0lGVCBDb2RlIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj5IREZDSU5CQkNIRTwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBsYWJlbCBtYi0zXCI+QnJhbmNoIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj57e2FjY291bnREZXRhaWxzPy5icmFuY2h9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiYWxsSXRlbXMgPT09IDFcIiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWJveCBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICBQYXltZW50IERldGFpbHNcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93LWNvbHMtMlwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgYmlsbGluZ0dyb3Vwc1wiID5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cC5pc1ByaW1hcnlcIiA+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wgbGFiZWwgbWItM1wiPk5leHQgQmlsbGluZyBEYXRlIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB2YWx1ZSBtYi0zXCI+e3tkYXlqcygpLmVuZE9mKCdtb250aCcpLmZvcm1hdCgnREQtTU0tWVlZWScpfX08L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGxhYmVsIG1iLTNcIj5SZWdpc3RlcmVkIENvbXBhbnkgTmFtZSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdmFsdWUgbWItM1wiPnt7Z3JvdXA/LnJlZ2lzdGVyZWRDb21wYW55TmFtZSA/IGdyb3VwLnJlZ2lzdGVyZWRDb21wYW55TmFtZSA6ICctJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGxhYmVsIG1iLTNcIj5CaWxsaW5nIEFkZHJlc3MgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHZhbHVlIG1iLTNcIj57e2dyb3VwPy5hZGRyZXNzTGluZU9uZSA/IGdyb3VwLmFkZHJlc3NMaW5lT25lIDogJy0nfX0ge3tncm91cC5hZGRyZXNzTGluZVR3bz9ncm91cC5hZGRyZXNzTGluZVR3bzpcIlwifX0ge3tncm91cC5jaXR5P2dyb3VwLmNpdHk6XCJcIn19IHt7Z3JvdXAuc3RhdGU/Z3JvdXAuc3RhdGU6XCJcIn19IHt7Z3JvdXAuY291bnRyeT9ncm91cC5jb3VudHJ5OlwiXCJ9fSB7e2dyb3VwLnBpbkNvZGU/Z3JvdXAucGluQ29kZTpcIlwifX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgbGFiZWwgbWItM1wiPkdTVCBObzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB2YWx1ZSBtYi0zXCI+e3tncm91cD8uZ3N0ID8gZ3JvdXAuZ3N0IDogJy0nfX08L2Rpdj4gICAgIFxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImFsbEl0ZW1zID4gMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciBtYi01XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMTBMMTEuNDMgMTAuNzNDMTIuNDEgOS41OSAxMyA4LjExIDEzIDYuNUMxMyAyLjkxIDEwLjA5IDAgNi41IDBDMi45MSAwIDAgMi45MSAwIDYuNUMwIDEwLjA5IDIuOTEgMTMgNi41IDEzQzguMTEgMTMgOS41OSAxMi40MSAxMC43MyAxMS40M0wxMC4yNzYyIDExLjcxTDE2IDE3LjQ5TDE3LjQ5IDE2TDExLjUgMTBaTTYuNSAxMUM0LjAxIDExIDIgOC45OSAyIDYuNUMyIDQuMDEgNC4wMSAyIDYuNSAyQzguOTkgMiAxMSA0LjAxIDExIDYuNUMxMSA4Ljk5IDguOTkgMTEgNi41IDExWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiYmxhY2tcIiBmaWxsLW9wYWNpdHk9XCIwLjU0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwic2VhcmNoSW5wdXRcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZS00XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uRXhwb3J0KClcIiBbZGlzYWJsZWRdPVwiIWNsaWVudElkXCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuLW91dGxpbmUgYnRuIGFsaWduLWl0ZW1zLWVuZCBuZWVkaGVscCBcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+RXhwb3J0PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIWNsaWVudElkXCIgKGNsaWNrKT1cIm1hbmFnZUJpbGxpbmcoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05Ljk5OTM1IDQuMTY2MDJWMTUuODMyN000LjE2NjAyIDkuOTk5MzVIMTUuODMyN1wiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgQWRkIEJpbGxpbmcgR3JvdXA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihiaWxsaW5nR3JvdXBzQXBpU3RhdGUgfCBhc3luYykgPT09ICdsb2FkZWQnXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJpbGxpbmdHcm91cHM/Lmxlbmd0aFwiID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZSBzdG9yZS10YWJsZVwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmbGV4Q2hlY2tEZWZhdWx0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkdyb3VwIG5hbWU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdncm91cE5hbWUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2dyb3VwTmFtZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlN0b3Jlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnc3RvcmVzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlcycgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkdTVCBOdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2dzdCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdnc3QnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QbGFjZSBvZiBTdXBwbHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3BsYWNlT2ZTdXBwbHknKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAncGxhY2VPZlN1cHBseScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlRhZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnZ3JvdXBUYWcnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnZ3JvdXBUYWcnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb25zPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGRhdGEgb2YgYmlsbGluZ0dyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS00XCIgPnt7ZGF0YT8uZ3JvdXBOYW1lfX08L3NwYW4+ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhLmlzUHJpbWFyeVwiIGNsYXNzPVwicHJpbWFyeS1iYWRnZVwiID5QcmltYXJ5PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGE/LnN0b3Jlc319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YT8uZ3N0fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhPy5wbGFjZU9mU3VwcGx5fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhPy5ncm91cFRhZ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJtYW5hZ2VCaWxsaW5nKGRhdGEuX2lkKVwiIGNsYXNzPVwibWUtOCBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjE2NjAyIDMuMzM0MTdIMy4zMzI2OEMyLjg5MDY1IDMuMzM0MTcgMi40NjY3MyAzLjUwOTc3IDIuMTU0MTcgMy44MjIzM0MxLjg0MTYxIDQuMTM0ODkgMS42NjYwMiA0LjU1ODgxIDEuNjY2MDIgNS4wMDA4NFYxNi42Njc1QzEuNjY2MDIgMTcuMTA5NSAxLjg0MTYxIDE3LjUzMzUgMi4xNTQxNyAxNy44NDZDMi40NjY3MyAxOC4xNTg2IDIuODkwNjUgMTguMzM0MiAzLjMzMjY4IDE4LjMzNDJIMTQuOTk5M0MxNS40NDE0IDE4LjMzNDIgMTUuODY1MyAxOC4xNTg2IDE2LjE3NzkgMTcuODQ2QzE2LjQ5MDQgMTcuNTMzNSAxNi42NjYgMTcuMTA5NSAxNi42NjYgMTYuNjY3NVYxMC44MzQyTTE1LjQxNiAyLjA4NDE3QzE1Ljc0NzUgMS43NTI2NSAxNi4xOTcyIDEuNTY2NDEgMTYuNjY2IDEuNTY2NDFDMTcuMTM0OSAxLjU2NjQxIDE3LjU4NDUgMS43NTI2NSAxNy45MTYgMi4wODQxN0MxOC4yNDc1IDIuNDE1NjkgMTguNDMzOCAyLjg2NTMzIDE4LjQzMzggMy4zMzQxN0MxOC40MzM4IDMuODAzMDEgMTguMjQ3NSA0LjI1MjY1IDE3LjkxNiA0LjU4NDE3TDkuOTk5MzUgMTIuNTAwOEw2LjY2NjAyIDEzLjMzNDJMNy40OTkzNSAxMC4wMDA4TDE1LjQxNiAyLjA4NDE3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInZpZXdCaWxsaW5nKGRhdGEpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0wLjgzMzk4NCAxMC4wMDA3QzAuODMzOTg0IDEwLjAwMDcgNC4xNjczMiAzLjMzMzk4IDEwLjAwMDcgMy4zMzM5OEMxNS44MzQgMy4zMzM5OCAxOS4xNjczIDEwLjAwMDcgMTkuMTY3MyAxMC4wMDA3QzE5LjE2NzMgMTAuMDAwNyAxNS44MzQgMTYuNjY3MyAxMC4wMDA3IDE2LjY2NzNDNC4xNjczMiAxNi42NjczIDAuODMzOTg0IDEwLjAwMDcgMC44MzM5ODQgMTAuMDAwN1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuMDAwNyAxMi41MDA3QzExLjM4MTQgMTIuNTAwNyAxMi41MDA2IDExLjM4MTQgMTIuNTAwNiAxMC4wMDA3QzEyLjUwMDYgOC42MTk5NCAxMS4zODE0IDcuNTAwNjUgMTAuMDAwNyA3LjUwMDY1QzguNjE5OTQgNy41MDA2NSA3LjUwMDY1IDguNjE5OTQgNy41MDA2NSAxMC4wMDA3QzcuNTAwNjUgMTEuMzgxNCA4LjYxOTk0IDEyLjUwMDcgMTAuMDAwNyAxMi41MDA3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTNcIj5cclxuICAgICAgICAgICAgPCEtLSA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJpdGVtc1BlclBhZ2VcIiBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIiBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+IC0tPlxyXG4gICAgICAgIDwvZGl2PiAgICBcclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFiaWxsaW5nR3JvdXBzPy5sZW5ndGhcIiA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjIHctMjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIFxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihiaWxsaW5nR3JvdXBzQXBpU3RhdGUgfCBhc3luYykgPT09ICdsb2FkaW5nJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyLWNhcmQgdy0xMDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG48L2Rpdj4iXX0=