tango-app-ui-ticket-user 3.4.0-beta.26 → 3.5.1

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.
@@ -88,7 +88,6 @@ export class AuditManagementComponent {
88
88
  sessionStorage.removeItem('employee');
89
89
  sessionStorage.removeItem('retag');
90
90
  sessionStorage.removeItem('timeSpent');
91
- // this.singledate = this.dayjs(new Date()).format('YYYY-MM-DD')
92
91
  if ('user-info' in localStorage) {
93
92
  this.userinfo = JSON.parse(localStorage.getItem('user-info') || '{}');
94
93
  this.user = this.userinfo?.user;
@@ -189,9 +188,6 @@ export class AuditManagementComponent {
189
188
  }
190
189
  this.router.navigate(['/tickets/audit', this.selectedType]);
191
190
  }
192
- // datechange(date: any) {
193
- // this.singledate = date
194
- // }
195
191
  redirectTozone(source) {
196
192
  this.selectedClient = source?.clientId;
197
193
  }
@@ -221,11 +217,11 @@ export class AuditManagementComponent {
221
217
  }
222
218
  }
223
219
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditManagementComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i2.TicketsService }, { token: i3.GlobalStateService }, { token: i4.NgbModal }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
224
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditManagementComponent, selector: "lib-audit-management", inputs: { searchAudit: "searchAudit", selectedType: "selectedType", selectedClient: "selectedClient", clientId: "clientId", text: "text", showAudit: "showAudit", refresh: "refresh" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!showAudit\" class=\"border-0\">\r\n <!-- <div class=\"card-header border-0 p-0\"> -->\r\n <!-- <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label fw-bold text-dark\">Audit Management</span> -->\r\n <!-- <p class=\"text-gray-400 fw-bold fs-5 mt-1\">\r\n Total {{datalist ? datalist?.totalStores:'0'}} Stores</p> -->\r\n <!-- </h3> -->\r\n <!-- <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-6\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" \r\n class=\"form-control w-300px ps-14\" name=\"search\" autocomplete=\"off\"\r\n placeholder=\"Search by Client Name / ID\" autocomplete=\"off\" />\r\n <div class=\"cursor-pointer ms-3\">\r\n <button class=\"btn btn-outline\" [disabled]=\"auditLoading || auditNoData\"\r\n (click)=\"exportAsXlsx()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2\">{{exportBtnText}}</span> </button></div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <!-- </div> -->\r\n <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Brand Name</th>\r\n <th>Brand ID</th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td> {{source?.clientName}} \r\n <!-- <div class=\"d-flex mt-3\"> -->\r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-primary mx-2\">Drafted</span>\r\n <span *ngIf=\"source?.isAssigned\" class=\"badge badge-light-primary mx-2\">Assigned</span>\r\n <!-- </div> -->\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedStoresCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\" [disabled]=\"!source?.isEnable\"\r\n (click)=\"mappingdata(source)\"> Start </button>\r\n \r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading && !auditNoData\" class=\"card-footer border-0\">\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n\r\n <!-- <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData && selectedType ==='zone'\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Brand Name</th>\r\n <th>Brand ID</th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td> {{source?.clientName}} \r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-danger mx-2\">Drafted</span>\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedStoresCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\"\r\n (click)=\"mappingdata(source)\" [disabled]=\"!source?.isEnable\"> Start </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div> -->\r\n\r\n <ng-container *ngIf=\"auditLoading\">\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 \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"auditNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this Date</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div> \r\n <div *ngIf=\"showAudit\" class=\"card border-0 w-100 align-items-center\">\r\n <div class=\"text-center mb-10\">\r\n <img class=\"mx-auto mb-2\" src=\"./assets/tango/Images/taketicket.svg\">\r\n <div class=\"header\">Contact admin to assign the clients</div>\r\n </div>\r\n </div>\r\n\r\n <!-- <app-date-range-picker name=\"app-range-picker-single\" type=\"single\" (change)=\"dateChanged($event)\"\r\n id=\"dateclass\">\r\n </app-date-range-picker> -->", styles: ["tr{vertical-align:middle!important}.scroll-y{overflow-y:auto!important;position:relative!important}input[type=date]{position:relative}input[type=date]::-webkit-calendar-picker-indicator{background-position:right;background-size:auto;cursor:pointer;position:absolute;bottom:10;left:0;right:0;top:5;width:auto}.btn-enable{color:var(--Primary-700, #009BF3)!important;background:var(--Primary-25, #F6FCFF)!important;border:1px solid var(--Primary-700, #009BF3)!important;padding:.775rem 1.5rem!important}.header{color:var(--Black, #101828);font-size:18px;font-weight:600;line-height:28px}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }] });
220
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditManagementComponent, selector: "lib-audit-management", inputs: { searchAudit: "searchAudit", selectedType: "selectedType", selectedClient: "selectedClient", clientId: "clientId", text: "text", showAudit: "showAudit", refresh: "refresh" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!showAudit\" class=\"border-0\">\r\n <!-- <div class=\"card-header border-0 p-0\"> -->\r\n <!-- <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label fw-bold text-dark\">Audit Management</span> -->\r\n <!-- <p class=\"text-gray-400 fw-bold fs-5 mt-1\">\r\n Total {{datalist ? datalist?.totalStores:'0'}} Stores</p> -->\r\n <!-- </h3> -->\r\n <!-- <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-6\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" \r\n class=\"form-control w-300px ps-14\" name=\"search\" autocomplete=\"off\"\r\n placeholder=\"Search by Client Name / ID\" autocomplete=\"off\" />\r\n <div class=\"cursor-pointer ms-3\">\r\n <button class=\"btn btn-outline\" [disabled]=\"auditLoading || auditNoData\"\r\n (click)=\"exportAsXlsx()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2\">{{exportBtnText}}</span> </button></div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <!-- </div> -->\r\n <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Brand Name</th>\r\n <th>Brand ID</th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td> {{source?.clientName}} \r\n <!-- <div class=\"d-flex mt-3\"> -->\r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-primary mx-2\">Drafted</span>\r\n <span *ngIf=\"source?.isAssigned\" class=\"badge badge-light-primary mx-2\">Assigned</span>\r\n <!-- </div> -->\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedStoresCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n \r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\"\r\n [disabled]=\"!source?.isEnable\" (click)=\"mappingdata(source)\"> Start </button>\r\n \r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading && !auditNoData\" class=\"card-footer border-0\">\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n\r\n <!-- <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData && selectedType ==='zone'\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Brand Name</th>\r\n <th>Brand ID</th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td> {{source?.clientName}} \r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-danger mx-2\">Drafted</span>\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedStoresCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\"\r\n (click)=\"mappingdata(source)\" [disabled]=\"!source?.isEnable\"> Start </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div> -->\r\n\r\n <ng-container *ngIf=\"auditLoading\">\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 \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"auditNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this Date</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div> \r\n <div *ngIf=\"showAudit\" class=\"card border-0 w-100 align-items-center\">\r\n <div class=\"text-center mb-10\">\r\n <img class=\"mx-auto mb-2\" src=\"./assets/tango/Images/taketicket.svg\">\r\n <div class=\"header\">Contact admin to assign the clients</div>\r\n </div>\r\n </div>\r\n\r\n <!-- <app-date-range-picker name=\"app-range-picker-single\" type=\"single\" (change)=\"dateChanged($event)\"\r\n id=\"dateclass\">\r\n </app-date-range-picker> -->", styles: ["tr{vertical-align:middle!important}.scroll-y{overflow-y:auto!important;position:relative!important}input[type=date]{position:relative}input[type=date]::-webkit-calendar-picker-indicator{background-position:right;background-size:auto;cursor:pointer;position:absolute;bottom:10;left:0;right:0;top:5;width:auto}.btn-enable{color:var(--Primary-700, #009BF3)!important;background:var(--Primary-25, #F6FCFF)!important;border:1px solid var(--Primary-700, #009BF3)!important;padding:.775rem 1.5rem!important}.header{color:var(--Black, #101828);font-size:18px;font-weight:600;line-height:28px}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }] });
225
221
  }
226
222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditManagementComponent, decorators: [{
227
223
  type: Component,
228
- args: [{ selector: 'lib-audit-management', template: "<div *ngIf=\"!showAudit\" class=\"border-0\">\r\n <!-- <div class=\"card-header border-0 p-0\"> -->\r\n <!-- <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label fw-bold text-dark\">Audit Management</span> -->\r\n <!-- <p class=\"text-gray-400 fw-bold fs-5 mt-1\">\r\n Total {{datalist ? datalist?.totalStores:'0'}} Stores</p> -->\r\n <!-- </h3> -->\r\n <!-- <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-6\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" \r\n class=\"form-control w-300px ps-14\" name=\"search\" autocomplete=\"off\"\r\n placeholder=\"Search by Client Name / ID\" autocomplete=\"off\" />\r\n <div class=\"cursor-pointer ms-3\">\r\n <button class=\"btn btn-outline\" [disabled]=\"auditLoading || auditNoData\"\r\n (click)=\"exportAsXlsx()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2\">{{exportBtnText}}</span> </button></div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <!-- </div> -->\r\n <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Brand Name</th>\r\n <th>Brand ID</th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td> {{source?.clientName}} \r\n <!-- <div class=\"d-flex mt-3\"> -->\r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-primary mx-2\">Drafted</span>\r\n <span *ngIf=\"source?.isAssigned\" class=\"badge badge-light-primary mx-2\">Assigned</span>\r\n <!-- </div> -->\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedStoresCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\" [disabled]=\"!source?.isEnable\"\r\n (click)=\"mappingdata(source)\"> Start </button>\r\n \r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading && !auditNoData\" class=\"card-footer border-0\">\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n\r\n <!-- <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData && selectedType ==='zone'\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Brand Name</th>\r\n <th>Brand ID</th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td> {{source?.clientName}} \r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-danger mx-2\">Drafted</span>\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedStoresCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\"\r\n (click)=\"mappingdata(source)\" [disabled]=\"!source?.isEnable\"> Start </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div> -->\r\n\r\n <ng-container *ngIf=\"auditLoading\">\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 \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"auditNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this Date</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div> \r\n <div *ngIf=\"showAudit\" class=\"card border-0 w-100 align-items-center\">\r\n <div class=\"text-center mb-10\">\r\n <img class=\"mx-auto mb-2\" src=\"./assets/tango/Images/taketicket.svg\">\r\n <div class=\"header\">Contact admin to assign the clients</div>\r\n </div>\r\n </div>\r\n\r\n <!-- <app-date-range-picker name=\"app-range-picker-single\" type=\"single\" (change)=\"dateChanged($event)\"\r\n id=\"dateclass\">\r\n </app-date-range-picker> -->", styles: ["tr{vertical-align:middle!important}.scroll-y{overflow-y:auto!important;position:relative!important}input[type=date]{position:relative}input[type=date]::-webkit-calendar-picker-indicator{background-position:right;background-size:auto;cursor:pointer;position:absolute;bottom:10;left:0;right:0;top:5;width:auto}.btn-enable{color:var(--Primary-700, #009BF3)!important;background:var(--Primary-25, #F6FCFF)!important;border:1px solid var(--Primary-700, #009BF3)!important;padding:.775rem 1.5rem!important}.header{color:var(--Black, #101828);font-size:18px;font-weight:600;line-height:28px}\n"] }]
224
+ args: [{ selector: 'lib-audit-management', template: "<div *ngIf=\"!showAudit\" class=\"border-0\">\r\n <!-- <div class=\"card-header border-0 p-0\"> -->\r\n <!-- <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label fw-bold text-dark\">Audit Management</span> -->\r\n <!-- <p class=\"text-gray-400 fw-bold fs-5 mt-1\">\r\n Total {{datalist ? datalist?.totalStores:'0'}} Stores</p> -->\r\n <!-- </h3> -->\r\n <!-- <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-6\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" \r\n class=\"form-control w-300px ps-14\" name=\"search\" autocomplete=\"off\"\r\n placeholder=\"Search by Client Name / ID\" autocomplete=\"off\" />\r\n <div class=\"cursor-pointer ms-3\">\r\n <button class=\"btn btn-outline\" [disabled]=\"auditLoading || auditNoData\"\r\n (click)=\"exportAsXlsx()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2\">{{exportBtnText}}</span> </button></div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <!-- </div> -->\r\n <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Brand Name</th>\r\n <th>Brand ID</th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td> {{source?.clientName}} \r\n <!-- <div class=\"d-flex mt-3\"> -->\r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-primary mx-2\">Drafted</span>\r\n <span *ngIf=\"source?.isAssigned\" class=\"badge badge-light-primary mx-2\">Assigned</span>\r\n <!-- </div> -->\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedStoresCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n \r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\"\r\n [disabled]=\"!source?.isEnable\" (click)=\"mappingdata(source)\"> Start </button>\r\n \r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading && !auditNoData\" class=\"card-footer border-0\">\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n\r\n <!-- <div class=\"card-body px-0 pt-10\" *ngIf=\"!auditLoading && !auditNoData && selectedType ==='zone'\">\r\n <div>\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Brand Name</th>\r\n <th>Brand ID</th>\r\n <th>Pending Queue</th>\r\n <th>Pending User</th>\r\n <th>Completed</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let source of dataSource ; let i = index\">\r\n <td> {{source?.clientName}} \r\n <span *ngIf=\"source?.isDraft\" class=\"badge badge-light-danger mx-2\">Drafted</span>\r\n </td>\r\n <td>{{source?.clientId ? source?.clientId : '--'}}</td>\r\n <td>{{source?.pendingByQueue ?? '--'}}</td>\r\n <td>{{source?.pendingByUser ?? '--'}}</td>\r\n <td> {{source?.completedStoresCount ?? '--'}} \r\n <div *ngIf=\"source?.completedCount\" class=\"d-flex align-items-center mt-3\">\r\n <div class=\"w-10px h-10px rounded-5 bg-success me-5\"></div>\r\n <span>{{source?.completedRatio}} %</span>\r\n </div></td> \r\n <td><button class=\"btn btn-default btn btn-outline text-capitalize cursor-pointer\"\r\n (click)=\"mappingdata(source)\" [disabled]=\"!source?.isEnable\"> Start </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"offset\"\r\n [totalItems]=\"recordsTotal\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div> -->\r\n\r\n <ng-container *ngIf=\"auditLoading\">\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 \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"auditNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this Date</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div> \r\n <div *ngIf=\"showAudit\" class=\"card border-0 w-100 align-items-center\">\r\n <div class=\"text-center mb-10\">\r\n <img class=\"mx-auto mb-2\" src=\"./assets/tango/Images/taketicket.svg\">\r\n <div class=\"header\">Contact admin to assign the clients</div>\r\n </div>\r\n </div>\r\n\r\n <!-- <app-date-range-picker name=\"app-range-picker-single\" type=\"single\" (change)=\"dateChanged($event)\"\r\n id=\"dateclass\">\r\n </app-date-range-picker> -->", styles: ["tr{vertical-align:middle!important}.scroll-y{overflow-y:auto!important;position:relative!important}input[type=date]{position:relative}input[type=date]::-webkit-calendar-picker-indicator{background-position:right;background-size:auto;cursor:pointer;position:absolute;bottom:10;left:0;right:0;top:5;width:auto}.btn-enable{color:var(--Primary-700, #009BF3)!important;background:var(--Primary-25, #F6FCFF)!important;border:1px solid var(--Primary-700, #009BF3)!important;padding:.775rem 1.5rem!important}.header{color:var(--Black, #101828);font-size:18px;font-weight:600;line-height:28px}\n"] }]
229
225
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i2.TicketsService }, { type: i3.GlobalStateService }, { type: i4.NgbModal }, { type: i1.ActivatedRoute }], propDecorators: { searchAudit: [{
230
226
  type: Input
231
227
  }], selectedType: [{
@@ -241,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
241
237
  }], refresh: [{
242
238
  type: Input
243
239
  }] } });
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbWFuYWdlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby10aWNrZXQtdXNlci9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtbWFuYWdlbWVudC9hdWRpdC1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXRpY2tldC11c2VyL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1tYW5hZ2VtZW50L2F1ZGl0LW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBNkIsS0FBSyxFQUFtRixNQUFNLGVBQWUsQ0FBQztBQUU3SixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFLMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBTzFDLE1BQU0sT0FBTyx3QkFBd0I7SUE2Q2Y7SUFDVjtJQUF3QjtJQUErQjtJQUFnQztJQUFnQztJQTVDakksVUFBVSxHQUFRLEVBQUUsQ0FBQztJQUNyQixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFDbkIsV0FBVyxHQUFRLENBQUMsQ0FBQztJQUNyQixTQUFTLENBQU07SUFDZixXQUFXLENBQU07SUFDakIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ3hCLE9BQU8sR0FBWSxJQUFJLENBQUM7SUFDeEIsY0FBYyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDakIsWUFBWSxDQUFNO0lBQ2xCLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDakIsV0FBVyxHQUFRLEVBQUUsQ0FBQztJQUN0QixZQUFZLEdBQVksSUFBSSxDQUFDO0lBQzdCLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0IsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixVQUFVLENBQU07SUFDaEIsYUFBYSxHQUFHLFFBQVEsQ0FBQTtJQUN4QixPQUFPLENBQU07SUFDYixlQUFlLEdBQVksS0FBSyxDQUFDO0lBQ2pDLE1BQU0sR0FBUSxDQUFDLENBQUE7SUFDZixRQUFRLENBQU07SUFDZCxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsUUFBUSxDQUFNO0lBQ2QsSUFBSSxDQUFNO0lBQ1YsSUFBSSxDQUFNO0lBQ1YsUUFBUSxDQUFNO0lBQ2QsVUFBVSxDQUFNO0lBQ1AsV0FBVyxDQUFNO0lBQ2pCLFlBQVksQ0FBTTtJQUNsQixjQUFjLENBQU07SUFDcEIsUUFBUSxDQUFNO0lBQ2QsSUFBSSxDQUFNO0lBQ1YsU0FBUyxDQUFNO0lBQ2YsT0FBTyxDQUFVO0lBQzFCLGFBQWEsR0FBUSxZQUFZLENBQUM7SUFDbEMsTUFBTSxHQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ1QsV0FBVyxHQUFtQixFQUFFLENBQUM7SUFDeEIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDMUMsWUFBWSxDQUFNO0lBQ2xCLGVBQWUsR0FBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEMsWUFBb0IsY0FBaUMsRUFDM0MsTUFBYyxFQUFVLEtBQXFCLEVBQVUsRUFBc0IsRUFBVSxZQUFzQixFQUFVLEtBQXFCO1FBRGxJLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUMzQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDcEosSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDbEMsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzVFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsT0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNwRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUNyQjtpQkFBTTtnQkFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzthQUFFO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbEMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUN2QyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2pDLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDckMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNsQyxjQUFjLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRXRDLGdFQUFnRTtRQUVoRSxJQUFJLFdBQVcsSUFBSSxZQUFZLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7WUFDckUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQTtZQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNoRjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDOUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtvQkFDbkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ2hGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDbEI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtRQUNELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxPQUFPLEdBQVE7WUFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCLENBQUE7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQy9FLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO29CQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQ3pCO3FCQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO29CQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUE7b0JBQzFDLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLEVBQUU7d0JBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtxQkFBRTt5QkFBTTt3QkFBRSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtxQkFBRTtvQkFDdkgsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTt3QkFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7d0JBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO3FCQUMxQjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7cUJBQ3pCO2lCQUNGO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDMUIsQ0FBQztZQUNELFFBQVEsS0FBSyxDQUFDO1NBQ2YsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVM7UUFDbkIsSUFBSSxHQUFHLEdBQVE7WUFDYixVQUFVLEVBQUUsRUFDWDtTQUNGLENBQUE7UUFDRCxJQUFJLFlBQVksSUFBSSxjQUFjLEVBQUU7U0FFbkM7YUFBTTtZQUNMLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUE7WUFDekMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1lBQ3JCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtZQUNyQixjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7U0FDMUQ7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsMkJBQTJCO0lBQzNCLElBQUk7SUFFSixjQUFjLENBQUMsTUFBVztRQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sRUFBRSxRQUFRLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFDRCxZQUFZLENBQUMsVUFBZTtRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUNELGdCQUFnQixDQUFDLFFBQWE7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxRQUFRLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDbEI7SUFDSCxDQUFDO3dHQTNNVSx3QkFBd0I7NEZBQXhCLHdCQUF3Qix5UUNkckMsMGhVQWdLOEI7OzRGRGxKakIsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLHNCQUFzQjs2TkFvQ3ZCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25Jbml0LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgdmlld0NoaWxkLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuaW1wb3J0IHsgVGlja2V0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aWNrZXQtaW5mcmEuc2VydmljZSc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCwgTmdiQWN0aXZlTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYXVkaXQtbWFuYWdlbWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F1ZGl0LW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hdWRpdC1tYW5hZ2VtZW50LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaXRNYW5hZ2VtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIGRhdGFTb3VyY2U6IGFueSA9IFtdO1xyXG4gIHNpemU6IG51bWJlciA9IDEwO1xyXG4gIG9mZnNldDogbnVtYmVyID0gMTtcclxuICBvZmZzZXR2YWx1ZTogYW55ID0gMDtcclxuICBwYWdlVmFsdWU6IGFueTtcclxuICBwYWdlRGlzcGxheTogYW55O1xyXG4gIHBhZ2VTdGFydCA9IDA7XHJcbiAgcGFnZUVuZCA9IDU7XHJcbiAgbmV4dGJ0bjogYm9vbGVhbiA9IHRydWU7XHJcbiAgYmFja2J0bjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcGFnaW5hdGlvblNpemUgPSBbMTAsIDIwXTtcclxuICBjdXJyZW50VmFsdWUgPSAxO1xyXG4gIHJlY29yZHNDb3VudDogYW55O1xyXG4gIHJlY29yZHNUb3RhbCA9IDA7XHJcbiAgc2VhcmNoVmFsdWU6IGFueSA9ICcnO1xyXG4gIGF1ZGl0TG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgYXVkaXROb0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdWJtaXR0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaW5nbGVkYXRlOiBhbnk7XHJcbiAgZXhwb3J0QnRuVGV4dCA9ICdFeHBvcnQnXHJcbiAgbG9nZGF0YTogYW55O1xyXG4gIGFjdGl2ZWxvZ25vZGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZpbHRlcjogYW55ID0gMFxyXG4gIHVzZXJpbmZvOiBhbnk7XHJcbiAgZGF5anMgPSBkYXlqcztcclxuICBjYXJkZGF0YTogYW55O1xyXG4gIHR5cGU6IGFueTtcclxuICB1c2VyOiBhbnk7XHJcbiAgZGF0YWxpc3Q6IGFueTtcclxuICBpdGVtaGVpZ2h0OiBhbnk7XHJcbiAgQElucHV0KCkgc2VhcmNoQXVkaXQ6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZFR5cGU6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENsaWVudDogYW55O1xyXG4gIEBJbnB1dCgpIGNsaWVudElkOiBhbnk7XHJcbiAgQElucHV0KCkgdGV4dDogYW55O1xyXG4gIEBJbnB1dCgpIHNob3dBdWRpdDogYW55O1xyXG4gIEBJbnB1dCgpIHJlZnJlc2g6IGJvb2xlYW47XHJcbiAgc29ydENvbHVtTmFtZTogYW55ID0gJ2NsaWVudE5hbWUnO1xyXG4gIHNvcnRCeTogYW55ID0gLTE7XHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZTogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBoZWFkZXJGaWx0ZXI6IGFueTtcclxuICBwYWdpbmF0aW9uU2l6ZXM6IGFueSA9IFsxMCwgMjAsIDMwXTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZWRldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgYXVkaXQ6IFRpY2tldHNTZXJ2aWNlLCBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgdGhpcy50eXBlID0gKHBhcmFtcy5nZXQoJ3R5cGUnKSlcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEgIT0gbnVsbCAmJiBkYXRhPy5jbGllbnRzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RlZFR5cGUpIHtcclxuICAgICAgICB0aGlzLnNob3dBdWRpdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGVhZGVyRmlsdGVyID0gZGF0YTtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gdGhpcy5oZWFkZXJGaWx0ZXI/LmNsaWVudHM7XHJcbiAgICAgICAgdGhpcy5nZXRhdWRpdGRhdGEoKTtcclxuICAgICAgfSBlbHNlIHsgdGhpcy5zaG93QXVkaXQgPSB0cnVlOyB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNpemUgPSAxMDtcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2F1ZGl0JylcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RvdGFsZmlsZXMnKVxyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnanVuaycpXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdlbXBsb3llZScpXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdyZXRhZycpXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd0aW1lU3BlbnQnKVxyXG5cclxuICAgIC8vIHRoaXMuc2luZ2xlZGF0ZSA9IHRoaXMuZGF5anMobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZLU1NLUREJylcclxuXHJcbiAgICBpZiAoJ3VzZXItaW5mbycgaW4gbG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgIHRoaXMudXNlcmluZm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VyLWluZm8nKSB8fCAne30nKVxyXG4gICAgICB0aGlzLnVzZXIgPSB0aGlzLnVzZXJpbmZvPy51c2VyXHJcbiAgICAgIHRoaXMuc2VhcmNoRGF0YSh0aGlzLnNlYXJjaEF1ZGl0KTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL3RpY2tldHMvdXNlcnNcIl0sIHsgcXVlcnlQYXJhbXM6IHsgdHlwZTogdGhpcy50eXBlIH0gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmF1ZGl0LnVzZXJEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmRhdGEpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1c2VyLWluZm8nLCBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSkpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL3RpY2tldHMvdXNlcnNcIl0sIHsgcXVlcnlQYXJhbXM6IHsgdHlwZTogdGhpcy50eXBlIH0gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmZvckVhY2goKHNiKSA9PiBzYi51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzZWFyY2hBdWRpdCddKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRGF0YShjaGFuZ2VzWydzZWFyY2hBdWRpdCddLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgICAgdGhpcy5zaXplID0gMTA7XHJcbiAgICAgIHRoaXMuc29ydEJ5ID0gLTE7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWRUeXBlJ10pIHtcclxuICAgICAgdGhpcy5zaXplID0gMTA7XHJcbiAgICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgICAgdGhpcy5nZXRhdWRpdGRhdGEoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydyZWZyZXNoJ10pIHtcclxuICAgICAgdGhpcy5nZXRhdWRpdGRhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldGF1ZGl0ZGF0YSgpIHtcclxuICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuYXVkaXROb0RhdGEgPSBmYWxzZTtcclxuICAgIGxldCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaEF1ZGl0LFxyXG4gICAgICBtb2R1bGVUeXBlOiB0aGlzLnNlbGVjdGVkVHlwZSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXHJcbiAgICAgIGxpbWl0OiBwYXJzZUludCh0aGlzLnNpemUudG9TdHJpbmcoKSksXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiB0aGlzLnNvcnRDb2x1bU5hbWUsXHJcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0QnlcclxuICAgIH1cclxuICAgIHRoaXMuYXVkaXQuZ2V0QXVkaXQocGF5bG9hZCwgdGhpcy50eXBlKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyZXMgfHwgcmVzLmNvZGUgPT0gMjA0KSB7XHJcbiAgICAgICAgICB0aGlzLmF1ZGl0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5hdWRpdE5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFsaXN0ID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gcmVzPy5kYXRhPy5jb3VudDtcclxuICAgICAgICAgIHRoaXMucmVjb3Jkc0NvdW50ID0gdGhpcy5kYXRhU291cmNlLmxlbmd0aFxyXG4gICAgICAgICAgaWYgKHRoaXMucmVjb3Jkc1RvdGFsIDwgMTApIHsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbdGhpcy5yZWNvcmRzVG90YWxdIH0gZWxzZSB7IHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdIH1cclxuICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaXROb0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaXROb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hdWRpdE5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlKCkgeyB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIHNlYXJjaERhdGEodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zZWFyY2hBdWRpdCA9IHZhbHVlO1xyXG4gICAgdGhpcy5nZXRhdWRpdGRhdGEoKTtcclxuICB9XHJcblxyXG4gIG1hcHBpbmdkYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdmFyIG9iajogYW55ID0ge1xyXG4gICAgICB0b3RhbGZpbGVzOiB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICgndG90YWxmaWxlcycgaW4gc2Vzc2lvblN0b3JhZ2UpIHtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmoudG90YWxmaWxlcy5xdWV1ZU5hbWUgPSBkYXRhLnF1ZXVlTmFtZVxyXG4gICAgICBvYmouYXVkaXQgPSB0aGlzLnR5cGVcclxuICAgICAgb2JqLnZhbHVlID0gdGhpcy50ZXh0XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3RvdGFsZmlsZXMnLCBKU09OLnN0cmluZ2lmeShvYmopKVxyXG4gICAgfVxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvdGlja2V0cy9hdWRpdCcsIHRoaXMuc2VsZWN0ZWRUeXBlXSlcclxuICB9XHJcblxyXG4gIC8vIGRhdGVjaGFuZ2UoZGF0ZTogYW55KSB7XHJcbiAgLy8gICB0aGlzLnNpbmdsZWRhdGUgPSBkYXRlXHJcbiAgLy8gfVxyXG5cclxuICByZWRpcmVjdFRvem9uZShzb3VyY2U6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENsaWVudCA9IHNvdXJjZT8uY2xpZW50SWQ7XHJcbiAgfVxyXG5cclxuICBnZXRUb2RheSgpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXVxyXG4gIH1cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogYW55KSB7XHJcbiAgICB0aGlzLm9mZnNldCA9IHBhZ2VPZmZzZXQ7XHJcbiAgICB0aGlzLmdldGF1ZGl0ZGF0YSgpO1xyXG4gIH1cclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBhbnkpIHtcclxuICAgIHRoaXMuc2l6ZSA9IHBhZ2VTaXplO1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5nZXRhdWRpdGRhdGEoKTtcclxuICB9XHJcbiAgc29ydERhdGEodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zb3J0Q29sdW1OYW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLnNvcnRCeSAqPSAtMTtcclxuICAgIHRoaXMuZ2V0YXVkaXRkYXRhKCk7XHJcbiAgfVxyXG5cclxuICBzZXRwYWdlU2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLnJlY29yZHNUb3RhbCA8IDEwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlY29yZHNUb3RhbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNpemU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiIXNob3dBdWRpdFwiIGNsYXNzPVwiYm9yZGVyLTBcIj5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHAtMFwiPiAtLT5cclxuICAgICAgICA8IS0tIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWwgZnctYm9sZCB0ZXh0LWRhcmtcIj5BdWRpdCBNYW5hZ2VtZW50PC9zcGFuPiAtLT5cclxuICAgICAgICA8IS0tIDxwIGNsYXNzPVwidGV4dC1ncmF5LTQwMCBmdy1ib2xkIGZzLTUgbXQtMVwiPlxyXG4gICAgICAgICAgICBUb3RhbCB7e2RhdGFsaXN0ID8gZGF0YWxpc3Q/LnRvdGFsU3RvcmVzOicwJ319IFN0b3JlczwvcD4gLS0+XHJcbiAgICAgICAgPCEtLSA8L2gzPiAtLT5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXIgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy02XCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNoYW5nZSk9XCJzZWFyY2hEYXRhKClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCIgXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB3LTMwMHB4IHBzLTE0XCIgbmFtZT1cInNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBDbGllbnQgTmFtZSAvIElEXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiBbZGlzYWJsZWRdPVwiYXVkaXRMb2FkaW5nIHx8IGF1ZGl0Tm9EYXRhXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnRBc1hsc3goKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48c3BhbiBjbGFzcz1cIm1zLTJcIj57e2V4cG9ydEJ0blRleHR9fTwvc3Bhbj4gPC9idXR0b24+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHgtMCBwdC0xMFwiICpuZ0lmPVwiIWF1ZGl0TG9hZGluZyAmJiAhYXVkaXROb0RhdGFcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkJyYW5kIE5hbWU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5CcmFuZCBJRDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBlbmRpbmcgUXVldWU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QZW5kaW5nIFVzZXI8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5Db21wbGV0ZWQ8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgc291cmNlIG9mIGRhdGFTb3VyY2UgOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4ge3tzb3VyY2U/LmNsaWVudE5hbWV9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImQtZmxleCBtdC0zXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic291cmNlPy5pc0RyYWZ0XCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IG14LTJcIj5EcmFmdGVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic291cmNlPy5pc0Fzc2lnbmVkXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IG14LTJcIj5Bc3NpZ25lZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tzb3VyY2U/LmNsaWVudElkID8gc291cmNlPy5jbGllbnRJZCA6ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8ucGVuZGluZ0J5UXVldWUgPz8gJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7c291cmNlPy5wZW5kaW5nQnlVc2VyID8/ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4ge3tzb3VyY2U/LmNvbXBsZXRlZFN0b3Jlc0NvdW50ID8/ICctLSd9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzb3VyY2U/LmNvbXBsZXRlZENvdW50XCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMHB4IGgtMTBweCByb3VuZGVkLTUgYmctc3VjY2VzcyBtZS01XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tzb3VyY2U/LmNvbXBsZXRlZFJhdGlvfX0gJTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdGQ+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0biBidG4tb3V0bGluZSB0ZXh0LWNhcGl0YWxpemUgY3Vyc29yLXBvaW50ZXJcIiBbZGlzYWJsZWRdPVwiIXNvdXJjZT8uaXNFbmFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibWFwcGluZ2RhdGEoc291cmNlKVwiPiBTdGFydCA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPiAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFhdWRpdExvYWRpbmcgJiYgIWF1ZGl0Tm9EYXRhXCIgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJzaXplXCIgW2N1cnJlbnRQYWdlXT1cIm9mZnNldFwiXHJcbiAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInJlY29yZHNUb3RhbFwiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInNldHBhZ2VTaXplKClcIlxyXG4gICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHgtMCBwdC0xMFwiICpuZ0lmPVwiIWF1ZGl0TG9hZGluZyAmJiAhYXVkaXROb0RhdGEgJiYgc2VsZWN0ZWRUeXBlID09PSd6b25lJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj4gIFxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkJyYW5kIE5hbWU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkJyYW5kIElEPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGVuZGluZyBRdWV1ZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBlbmRpbmcgVXNlcjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkNvbXBsZXRlZDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgc291cmNlIG9mIGRhdGFTb3VyY2UgOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiB7e3NvdXJjZT8uY2xpZW50TmFtZX19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3VyY2U/LmlzRHJhZnRcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlciBteC0yXCI+RHJhZnRlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8uY2xpZW50SWQgPyBzb3VyY2U/LmNsaWVudElkIDogJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tzb3VyY2U/LnBlbmRpbmdCeVF1ZXVlID8/ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7c291cmNlPy5wZW5kaW5nQnlVc2VyID8/ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiB7e3NvdXJjZT8uY29tcGxldGVkU3RvcmVzQ291bnQgPz8gJy0tJ319IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic291cmNlPy5jb21wbGV0ZWRDb3VudFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMHB4IGgtMTBweCByb3VuZGVkLTUgYmctc3VjY2VzcyBtZS01XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3NvdXJjZT8uY29tcGxldGVkUmF0aW99fSAlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj48L3RkPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0biBidG4tb3V0bGluZSB0ZXh0LWNhcGl0YWxpemUgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtYXBwaW5nZGF0YShzb3VyY2UpXCIgW2Rpc2FibGVkXT1cIiFzb3VyY2U/LmlzRW5hYmxlXCI+IFN0YXJ0IDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+ICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwic2l6ZVwiIFtjdXJyZW50UGFnZV09XCJvZmZzZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInJlY29yZHNUb3RhbFwiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInNldHBhZ2VTaXplKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCIgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXVkaXRMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdWRpdE5vRGF0YVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG10LTIwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLW5vZGF0YVwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YTEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtdGl0bGVcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtc3ViXCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciB0aGlzIERhdGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PiBcclxuICAgIDxkaXYgKm5nSWY9XCJzaG93QXVkaXRcIiBjbGFzcz1cImNhcmQgYm9yZGVyLTAgdy0xMDAgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG1iLTEwXCI+XHJcbiAgICAgICAgICAgPGltZyBjbGFzcz1cIm14LWF1dG8gbWItMlwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ltYWdlcy90YWtldGlja2V0LnN2Z1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+Q29udGFjdCBhZG1pbiB0byBhc3NpZ24gdGhlIGNsaWVudHM8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSA8YXBwLWRhdGUtcmFuZ2UtcGlja2VyIG5hbWU9XCJhcHAtcmFuZ2UtcGlja2VyLXNpbmdsZVwiIHR5cGU9XCJzaW5nbGVcIiAoY2hhbmdlKT1cImRhdGVDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgaWQ9XCJkYXRlY2xhc3NcIj5cclxuICA8L2FwcC1kYXRlLXJhbmdlLXBpY2tlcj4gLS0+Il19
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbWFuYWdlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby10aWNrZXQtdXNlci9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtbWFuYWdlbWVudC9hdWRpdC1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXRpY2tldC11c2VyL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1tYW5hZ2VtZW50L2F1ZGl0LW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBNkIsS0FBSyxFQUFtRixNQUFNLGVBQWUsQ0FBQztBQUU3SixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFLMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBTzFDLE1BQU0sT0FBTyx3QkFBd0I7SUE2Q2Y7SUFDVjtJQUF3QjtJQUErQjtJQUFnQztJQUFnQztJQTVDakksVUFBVSxHQUFRLEVBQUUsQ0FBQztJQUNyQixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFDbkIsV0FBVyxHQUFRLENBQUMsQ0FBQztJQUNyQixTQUFTLENBQU07SUFDZixXQUFXLENBQU07SUFDakIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ3hCLE9BQU8sR0FBWSxJQUFJLENBQUM7SUFDeEIsY0FBYyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDakIsWUFBWSxDQUFNO0lBQ2xCLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDakIsV0FBVyxHQUFRLEVB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QUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsUUFBYTtRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUNELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUI7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztTQUNsQjtJQUNILENBQUM7d0dBdk1VLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLHlRQ2RyQyxxa1VBaUs4Qjs7NEZEbkpqQix3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0Usc0JBQXNCOzZOQW9DdkIsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENoYW5nZURldGVjdG9yUmVmLCBPbkluaXQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSwgVmlld0NoaWxkLCB2aWV3Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgeyBUaWNrZXRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpY2tldC1pbmZyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hdWRpdC1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXVkaXQtbWFuYWdlbWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2F1ZGl0LW1hbmFnZW1lbnQuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpdE1hbmFnZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgZGF0YVNvdXJjZTogYW55ID0gW107XHJcbiAgc2l6ZTogbnVtYmVyID0gMTA7XHJcbiAgb2Zmc2V0OiBudW1iZXIgPSAxO1xyXG4gIG9mZnNldHZhbHVlOiBhbnkgPSAwO1xyXG4gIHBhZ2VWYWx1ZTogYW55O1xyXG4gIHBhZ2VEaXNwbGF5OiBhbnk7XHJcbiAgcGFnZVN0YXJ0ID0gMDtcclxuICBwYWdlRW5kID0gNTtcclxuICBuZXh0YnRuOiBib29sZWFuID0gdHJ1ZTtcclxuICBiYWNrYnRuOiBib29sZWFuID0gdHJ1ZTtcclxuICBwYWdpbmF0aW9uU2l6ZSA9IFsxMCwgMjBdO1xyXG4gIGN1cnJlbnRWYWx1ZSA9IDE7XHJcbiAgcmVjb3Jkc0NvdW50OiBhbnk7XHJcbiAgcmVjb3Jkc1RvdGFsID0gMDtcclxuICBzZWFyY2hWYWx1ZTogYW55ID0gJyc7XHJcbiAgYXVkaXRMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBhdWRpdE5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN1Ym1pdHRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNpbmdsZWRhdGU6IGFueTtcclxuICBleHBvcnRCdG5UZXh0ID0gJ0V4cG9ydCdcclxuICBsb2dkYXRhOiBhbnk7XHJcbiAgYWN0aXZlbG9nbm9kYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyOiBhbnkgPSAwXHJcbiAgdXNlcmluZm86IGFueTtcclxuICBkYXlqcyA9IGRheWpzO1xyXG4gIGNhcmRkYXRhOiBhbnk7XHJcbiAgdHlwZTogYW55O1xyXG4gIHVzZXI6IGFueTtcclxuICBkYXRhbGlzdDogYW55O1xyXG4gIGl0ZW1oZWlnaHQ6IGFueTtcclxuICBASW5wdXQoKSBzZWFyY2hBdWRpdDogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkVHlwZTogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ2xpZW50OiBhbnk7XHJcbiAgQElucHV0KCkgY2xpZW50SWQ6IGFueTtcclxuICBASW5wdXQoKSB0ZXh0OiBhbnk7XHJcbiAgQElucHV0KCkgc2hvd0F1ZGl0OiBhbnk7XHJcbiAgQElucHV0KCkgcmVmcmVzaDogYm9vbGVhbjtcclxuICBzb3J0Q29sdW1OYW1lOiBhbnkgPSAnY2xpZW50TmFtZSc7XHJcbiAgc29ydEJ5OiBhbnkgPSAtMTtcclxuICBwcml2YXRlIHVuc3Vic2NyaWJlOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGhlYWRlckZpbHRlcjogYW55O1xyXG4gIHBhZ2luYXRpb25TaXplczogYW55ID0gWzEwLCAyMCwgMzBdO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlZGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBhdWRpdDogVGlja2V0c1NlcnZpY2UsIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xyXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLnR5cGUgPSAocGFyYW1zLmdldCgndHlwZScpKVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSAhPSBudWxsICYmIGRhdGE/LmNsaWVudHMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkVHlwZSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0F1ZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXIgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuY2xpZW50SWQgPSB0aGlzLmhlYWRlckZpbHRlcj8uY2xpZW50cztcclxuICAgICAgICB0aGlzLmdldGF1ZGl0ZGF0YSgpO1xyXG4gICAgICB9IGVsc2UgeyB0aGlzLnNob3dBdWRpdCA9IHRydWU7IH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2l6ZSA9IDEwO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnYXVkaXQnKVxyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndG90YWxmaWxlcycpXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdqdW5rJylcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VtcGxveWVlJylcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3JldGFnJylcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RpbWVTcGVudCcpXHJcblxyXG5cclxuICAgIGlmICgndXNlci1pbmZvJyBpbiBsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgdGhpcy51c2VyaW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpIHx8ICd7fScpXHJcbiAgICAgIHRoaXMudXNlciA9IHRoaXMudXNlcmluZm8/LnVzZXJcclxuICAgICAgdGhpcy5zZWFyY2hEYXRhKHRoaXMuc2VhcmNoQXVkaXQpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvdGlja2V0cy91c2Vyc1wiXSwgeyBxdWVyeVBhcmFtczogeyB0eXBlOiB0aGlzLnR5cGUgfSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXVkaXQudXNlckRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuZGF0YSkge1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VzZXItaW5mbycsIEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKSk7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvdGlja2V0cy91c2Vyc1wiXSwgeyBxdWVyeVBhcmFtczogeyB0eXBlOiB0aGlzLnR5cGUgfSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuZm9yRWFjaCgoc2IpID0+IHNiLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3NlYXJjaEF1ZGl0J10pIHtcclxuICAgICAgdGhpcy5zZWFyY2hEYXRhKGNoYW5nZXNbJ3NlYXJjaEF1ZGl0J10uY3VycmVudFZhbHVlKTtcclxuICAgICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgICB0aGlzLnNpemUgPSAxMDtcclxuICAgICAgdGhpcy5zb3J0QnkgPSAtMTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZFR5cGUnXSkge1xyXG4gICAgICB0aGlzLnNpemUgPSAxMDtcclxuICAgICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgICB0aGlzLmdldGF1ZGl0ZGF0YSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlZnJlc2gnXSkge1xyXG4gICAgICB0aGlzLmdldGF1ZGl0ZGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0YXVkaXRkYXRhKCkge1xyXG4gICAgdGhpcy5hdWRpdExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5hdWRpdE5vRGF0YSA9IGZhbHNlO1xyXG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoQXVkaXQsXHJcbiAgICAgIG1vZHVsZVR5cGU6IHRoaXMuc2VsZWN0ZWRUeXBlLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcclxuICAgICAgbGltaXQ6IHBhcnNlSW50KHRoaXMuc2l6ZS50b1N0cmluZygpKSxcclxuICAgICAgc29ydENvbHVtbk5hbWU6IHRoaXMuc29ydENvbHVtTmFtZSxcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeVxyXG4gICAgfVxyXG4gICAgdGhpcy5hdWRpdC5nZXRBdWRpdChwYXlsb2FkLCB0aGlzLnR5cGUpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXJlcyB8fCByZXMuY29kZSA9PSAyMDQpIHtcclxuICAgICAgICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmF1ZGl0Tm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuZGF0YWxpc3QgPSByZXMuZGF0YTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRzVG90YWwgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRzQ291bnQgPSB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoXHJcbiAgICAgICAgICBpZiAodGhpcy5yZWNvcmRzVG90YWwgPCAxMCkgeyB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFt0aGlzLnJlY29yZHNUb3RhbF0gfSBlbHNlIHsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF0gfVxyXG4gICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5hdWRpdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5hdWRpdE5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hdWRpdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5hdWRpdE5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdWRpdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmF1ZGl0Tm9EYXRhID0gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgICAgY29tcGxldGUoKSB7IH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgc2VhcmNoRGF0YSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnNlYXJjaEF1ZGl0ID0gdmFsdWU7XHJcbiAgICB0aGlzLmdldGF1ZGl0ZGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgbWFwcGluZ2RhdGEoZGF0YTogYW55KSB7XHJcbiAgICB2YXIgb2JqOiBhbnkgPSB7XHJcbiAgICAgIHRvdGFsZmlsZXM6IHtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCd0b3RhbGZpbGVzJyBpbiBzZXNzaW9uU3RvcmFnZSkge1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9iai50b3RhbGZpbGVzLnF1ZXVlTmFtZSA9IGRhdGEucXVldWVOYW1lXHJcbiAgICAgIG9iai5hdWRpdCA9IHRoaXMudHlwZVxyXG4gICAgICBvYmoudmFsdWUgPSB0aGlzLnRleHRcclxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndG90YWxmaWxlcycsIEpTT04uc3RyaW5naWZ5KG9iaikpXHJcbiAgICB9XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy90aWNrZXRzL2F1ZGl0JywgdGhpcy5zZWxlY3RlZFR5cGVdKVxyXG4gIH1cclxuXHJcblxyXG4gIHJlZGlyZWN0VG96b25lKHNvdXJjZTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2xpZW50ID0gc291cmNlPy5jbGllbnRJZDtcclxuICB9XHJcblxyXG4gIGdldFRvZGF5KCkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdXHJcbiAgfVxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBhbnkpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0gcGFnZU9mZnNldDtcclxuICAgIHRoaXMuZ2V0YXVkaXRkYXRhKCk7XHJcbiAgfVxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IGFueSkge1xyXG4gICAgdGhpcy5zaXplID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmdldGF1ZGl0ZGF0YSgpO1xyXG4gIH1cclxuICBzb3J0RGF0YSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnNvcnRDb2x1bU5hbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuc29ydEJ5ICo9IC0xO1xyXG4gICAgdGhpcy5nZXRhdWRpdGRhdGEoKTtcclxuICB9XHJcblxyXG4gIHNldHBhZ2VTaXplKCkge1xyXG4gICAgaWYgKHRoaXMucmVjb3Jkc1RvdGFsIDwgMTApIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVjb3Jkc1RvdGFsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2l6ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCIhc2hvd0F1ZGl0XCIgY2xhc3M9XCJib3JkZXItMFwiPlxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcC0wXCI+IC0tPlxyXG4gICAgICAgIDwhLS0gPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbCBmdy1ib2xkIHRleHQtZGFya1wiPkF1ZGl0IE1hbmFnZW1lbnQ8L3NwYW4+IC0tPlxyXG4gICAgICAgIDwhLS0gPHAgY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIGZ3LWJvbGQgZnMtNSBtdC0xXCI+XHJcbiAgICAgICAgICAgIFRvdGFsIHt7ZGF0YWxpc3QgPyBkYXRhbGlzdD8udG90YWxTdG9yZXM6JzAnfX0gU3RvcmVzPC9wPiAtLT5cclxuICAgICAgICA8IS0tIDwvaDM+IC0tPlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhciBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTZcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgMTcuMDM2NSAxNS4xMjIzKVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAoY2hhbmdlKT1cInNlYXJjaERhdGEoKVwiIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIiBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHctMzAwcHggcHMtMTRcIiBuYW1lPVwic2VhcmNoXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IENsaWVudCBOYW1lIC8gSURcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIFtkaXNhYmxlZF09XCJhdWRpdExvYWRpbmcgfHwgYXVkaXROb0RhdGFcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydEFzWGxzeCgpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMlwiPnt7ZXhwb3J0QnRuVGV4dH19PC9zcGFuPiA8L2J1dHRvbj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgPCEtLSA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweC0wIHB0LTEwXCIgKm5nSWY9XCIhYXVkaXRMb2FkaW5nICYmICFhdWRpdE5vRGF0YVwiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYm90dG9tLWJvcmRlciB0ZXh0LW5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+QnJhbmQgTmFtZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkJyYW5kIElEPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGVuZGluZyBRdWV1ZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBlbmRpbmcgVXNlcjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkNvbXBsZXRlZDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzb3VyY2Ugb2YgZGF0YVNvdXJjZSA7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiB7e3NvdXJjZT8uY2xpZW50TmFtZX19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTNcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3VyY2U/LmlzRHJhZnRcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgbXgtMlwiPkRyYWZ0ZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3VyY2U/LmlzQXNzaWduZWRcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgbXgtMlwiPkFzc2lnbmVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8uY2xpZW50SWQgPyBzb3VyY2U/LmNsaWVudElkIDogJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7c291cmNlPy5wZW5kaW5nQnlRdWV1ZSA/PyAnLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tzb3VyY2U/LnBlbmRpbmdCeVVzZXIgPz8gJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiB7e3NvdXJjZT8uY29tcGxldGVkU3RvcmVzQ291bnQgPz8gJy0tJ319IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNvdXJjZT8uY29tcGxldGVkQ291bnRcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwcHggaC0xMHB4IHJvdW5kZWQtNSBiZy1zdWNjZXNzIG1lLTVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3NvdXJjZT8uY29tcGxldGVkUmF0aW99fSAlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+PC90ZD4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuIGJ0bi1vdXRsaW5lIHRleHQtY2FwaXRhbGl6ZSBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc291cmNlPy5pc0VuYWJsZVwiICAoY2xpY2spPVwibWFwcGluZ2RhdGEoc291cmNlKVwiPiBTdGFydCA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPiAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFhdWRpdExvYWRpbmcgJiYgIWF1ZGl0Tm9EYXRhXCIgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJzaXplXCIgW2N1cnJlbnRQYWdlXT1cIm9mZnNldFwiXHJcbiAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInJlY29yZHNUb3RhbFwiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInNldHBhZ2VTaXplKClcIlxyXG4gICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHgtMCBwdC0xMFwiICpuZ0lmPVwiIWF1ZGl0TG9hZGluZyAmJiAhYXVkaXROb0RhdGEgJiYgc2VsZWN0ZWRUeXBlID09PSd6b25lJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj4gIFxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkJyYW5kIE5hbWU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkJyYW5kIElEPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGVuZGluZyBRdWV1ZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBlbmRpbmcgVXNlcjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkNvbXBsZXRlZDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgc291cmNlIG9mIGRhdGFTb3VyY2UgOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiB7e3NvdXJjZT8uY2xpZW50TmFtZX19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3VyY2U/LmlzRHJhZnRcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlciBteC0yXCI+RHJhZnRlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3NvdXJjZT8uY2xpZW50SWQgPyBzb3VyY2U/LmNsaWVudElkIDogJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tzb3VyY2U/LnBlbmRpbmdCeVF1ZXVlID8/ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7c291cmNlPy5wZW5kaW5nQnlVc2VyID8/ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiB7e3NvdXJjZT8uY29tcGxldGVkU3RvcmVzQ291bnQgPz8gJy0tJ319IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic291cmNlPy5jb21wbGV0ZWRDb3VudFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMHB4IGgtMTBweCByb3VuZGVkLTUgYmctc3VjY2VzcyBtZS01XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3NvdXJjZT8uY29tcGxldGVkUmF0aW99fSAlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj48L3RkPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0biBidG4tb3V0bGluZSB0ZXh0LWNhcGl0YWxpemUgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtYXBwaW5nZGF0YShzb3VyY2UpXCIgW2Rpc2FibGVkXT1cIiFzb3VyY2U/LmlzRW5hYmxlXCI+IFN0YXJ0IDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+ICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwic2l6ZVwiIFtjdXJyZW50UGFnZV09XCJvZmZzZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInJlY29yZHNUb3RhbFwiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInNldHBhZ2VTaXplKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCIgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXVkaXRMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdWRpdE5vRGF0YVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG10LTIwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLW5vZGF0YVwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YTEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtdGl0bGVcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtc3ViXCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciB0aGlzIERhdGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PiBcclxuICAgIDxkaXYgKm5nSWY9XCJzaG93QXVkaXRcIiBjbGFzcz1cImNhcmQgYm9yZGVyLTAgdy0xMDAgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG1iLTEwXCI+XHJcbiAgICAgICAgICAgPGltZyBjbGFzcz1cIm14LWF1dG8gbWItMlwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ltYWdlcy90YWtldGlja2V0LnN2Z1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+Q29udGFjdCBhZG1pbiB0byBhc3NpZ24gdGhlIGNsaWVudHM8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSA8YXBwLWRhdGUtcmFuZ2UtcGlja2VyIG5hbWU9XCJhcHAtcmFuZ2UtcGlja2VyLXNpbmdsZVwiIHR5cGU9XCJzaW5nbGVcIiAoY2hhbmdlKT1cImRhdGVDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgaWQ9XCJkYXRlY2xhc3NcIj5cclxuICA8L2FwcC1kYXRlLXJhbmdlLXBpY2tlcj4gLS0+Il19