tango-app-ui-analyse-report 3.3.1-alpha.0 → 3.3.1-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/get-download-report/get-download-report.component.mjs +61 -0
- package/esm2022/lib/components/tango-analyse-report/tango-analyse-report.component.mjs +22 -5
- package/esm2022/lib/components/user-report/user-report.component.mjs +234 -0
- package/esm2022/lib/service/analysereport.service.mjs +65 -0
- package/esm2022/lib/tango-analyse-report.module.mjs +24 -6
- package/fesm2022/tango-app-ui-analyse-report.mjs +393 -12
- package/fesm2022/tango-app-ui-analyse-report.mjs.map +1 -1
- package/lib/components/get-download-report/get-download-report.component.d.ts +17 -0
- package/lib/components/tango-analyse-report/tango-analyse-report.component.d.ts +7 -1
- package/lib/components/user-report/user-report.component.d.ts +57 -0
- package/lib/service/analysereport.service.d.ts +23 -0
- package/lib/tango-analyse-report.module.d.ts +8 -3
- package/package.json +1 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../service/analysereport.service";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
export class GetDownloadReportComponent {
|
|
6
|
+
service;
|
|
7
|
+
data;
|
|
8
|
+
activeData;
|
|
9
|
+
reportList;
|
|
10
|
+
noData = false;
|
|
11
|
+
constructor(service) {
|
|
12
|
+
this.service = service;
|
|
13
|
+
}
|
|
14
|
+
ngOnInit() {
|
|
15
|
+
this.getReportList();
|
|
16
|
+
}
|
|
17
|
+
getReportList() {
|
|
18
|
+
let payload = {
|
|
19
|
+
fileDate: this.data?.fileDate,
|
|
20
|
+
clientId: this.data?.clientId
|
|
21
|
+
};
|
|
22
|
+
this.service.getReportList(payload).subscribe({
|
|
23
|
+
next: (res) => {
|
|
24
|
+
if (res && res.code === 200) {
|
|
25
|
+
this.reportList = res?.data?.result;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
this.noData = true;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
complete: () => {
|
|
32
|
+
},
|
|
33
|
+
error: (err) => {
|
|
34
|
+
this.noData = true;
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
downLoadData(type) {
|
|
39
|
+
this.service.downloadReport(type).subscribe((res) => {
|
|
40
|
+
this.saveFile(res, type.split('/').pop());
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
saveFile(buffer, filename) {
|
|
44
|
+
const blob = new Blob([buffer], { type: 'application/octet-stream' });
|
|
45
|
+
const url = window.URL.createObjectURL(blob);
|
|
46
|
+
const anchor = document.createElement('a');
|
|
47
|
+
anchor.href = url;
|
|
48
|
+
anchor.download = filename;
|
|
49
|
+
anchor.click();
|
|
50
|
+
window.URL.revokeObjectURL(url);
|
|
51
|
+
}
|
|
52
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GetDownloadReportComponent, deps: [{ token: i1.AnalysereportService }], target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GetDownloadReportComponent, selector: "lib-get-download-report", inputs: { data: "data" }, ngImport: i0, template: "<div class=\"card border-0\">\r\n <div class=\"card-header\">\r\n <span class=\"card-title\">Report History</span>\r\n </div>\r\n <div *ngIf=\"!noData\" class=\"card-body\">\r\n <div *ngFor=\"let list of reportList\">\r\n <div class=\"DownloadReport mb-5 cursor-pointer\" (click)=\"downLoadData(list?.Key)\">{{list?.Key.split('/').splice(1).join('/')}}||{{list?.LastModified}}</div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"card-body border-0\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div> \r\n </div>\r\n</div> \r\n", styles: [".DownloadReport{font-size:16px;font-weight:600;text-decoration:underline;color:#00a3ff}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
54
|
+
}
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GetDownloadReportComponent, decorators: [{
|
|
56
|
+
type: Component,
|
|
57
|
+
args: [{ selector: 'lib-get-download-report', template: "<div class=\"card border-0\">\r\n <div class=\"card-header\">\r\n <span class=\"card-title\">Report History</span>\r\n </div>\r\n <div *ngIf=\"!noData\" class=\"card-body\">\r\n <div *ngFor=\"let list of reportList\">\r\n <div class=\"DownloadReport mb-5 cursor-pointer\" (click)=\"downLoadData(list?.Key)\">{{list?.Key.split('/').splice(1).join('/')}}||{{list?.LastModified}}</div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"card-body border-0\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div> \r\n </div>\r\n</div> \r\n", styles: [".DownloadReport{font-size:16px;font-weight:600;text-decoration:underline;color:#00a3ff}\n"] }]
|
|
58
|
+
}], ctorParameters: () => [{ type: i1.AnalysereportService }], propDecorators: { data: [{
|
|
59
|
+
type: Input
|
|
60
|
+
}] } });
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWRvd25sb2FkLXJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXJlcG9ydC9zcmMvbGliL2NvbXBvbmVudHMvZ2V0LWRvd25sb2FkLXJlcG9ydC9nZXQtZG93bmxvYWQtcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtcmVwb3J0L3NyYy9saWIvY29tcG9uZW50cy9nZXQtZG93bmxvYWQtcmVwb3J0L2dldC1kb3dubG9hZC1yZXBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBQyxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7QUFReEQsTUFBTSxPQUFPLDBCQUEwQjtJQU1uQjtJQUxULElBQUksQ0FBSztJQUNsQixVQUFVLENBQU07SUFDaEIsVUFBVSxDQUFNO0lBQ2hCLE1BQU0sR0FBVyxLQUFLLENBQUM7SUFFekIsWUFBb0IsT0FBNEI7UUFBNUIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7SUFFaEQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLE9BQU8sR0FBRztZQUNaLFFBQVEsRUFBRyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVE7WUFDOUIsUUFBUSxFQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUTtTQUMvQixDQUFBO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVDLElBQUksRUFBQyxDQUFDLEdBQU8sRUFBRSxFQUFFO2dCQUNmLElBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFDO29CQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDO2lCQUNyQztxQkFBSTtvQkFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztpQkFDcEI7WUFDSCxDQUFDO1lBQ0QsUUFBUSxFQUFDLEdBQUUsRUFBRTtZQUViLENBQUM7WUFDRCxLQUFLLEVBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRTtnQkFDWCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNyQixDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFRO1FBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUMzQyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFQSxRQUFRLENBQUMsTUFBbUIsRUFBRSxRQUFnQjtRQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFLENBQUMsQ0FBQztRQUN0RSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7d0dBbERZLDBCQUEwQjs0RkFBMUIsMEJBQTBCLHlGQ1J2Qyw0dUJBZUE7OzRGRFBhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx5QkFBeUI7eUZBSzFCLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCxJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFuYWx5c2VyZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hbmFseXNlcmVwb3J0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZ2V0LWRvd25sb2FkLXJlcG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dldC1kb3dubG9hZC1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9nZXQtZG93bmxvYWQtcmVwb3J0LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgR2V0RG93bmxvYWRSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGRhdGE6YW55O1xyXG4gIGFjdGl2ZURhdGE6IGFueTtcclxuICByZXBvcnRMaXN0OiBhbnk7XHJcbiAgbm9EYXRhOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbmNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTpBbmFseXNlcmVwb3J0U2VydmljZSl7XHJcblxyXG59XHJcblxyXG5uZ09uSW5pdCgpe1xyXG4gIHRoaXMuZ2V0UmVwb3J0TGlzdCgpO1xyXG59XHJcblxyXG5nZXRSZXBvcnRMaXN0KCl7XHJcbiAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICBmaWxlRGF0ZSA6IHRoaXMuZGF0YT8uZmlsZURhdGUsXHJcbiAgICBjbGllbnRJZCA6IHRoaXMuZGF0YT8uY2xpZW50SWRcclxuICB9XHJcbiAgdGhpcy5zZXJ2aWNlLmdldFJlcG9ydExpc3QocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6KHJlczphbnkpID0+IHtcclxuICAgICAgaWYocmVzICYmIHJlcy5jb2RlID09PSAyMDApe1xyXG4gICAgICAgIHRoaXMucmVwb3J0TGlzdCA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjb21wbGV0ZTooKT0+e1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuICAgIGVycm9yOihlcnIpPT57XHJcbiAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgIH0sXHJcbiAgfSlcclxufVxyXG5cclxuZG93bkxvYWREYXRhKHR5cGU6YW55KXtcclxuICB0aGlzLnNlcnZpY2UuZG93bmxvYWRSZXBvcnQodHlwZSkuc3Vic2NyaWJlKChyZXMpPT57XHJcbiAgICB0aGlzLnNhdmVGaWxlKHJlcywgdHlwZS5zcGxpdCgnLycpLnBvcCgpKVxyXG4gIH0pXHJcbn1cclxuXHJcbiBzYXZlRmlsZShidWZmZXI6IEFycmF5QnVmZmVyLCBmaWxlbmFtZTogc3RyaW5nKSB7XHJcbiAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0pO1xyXG4gIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gIGNvbnN0IGFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICBhbmNob3IuaHJlZiA9IHVybDtcclxuICBhbmNob3IuZG93bmxvYWQgPSBmaWxlbmFtZTtcclxuICBhbmNob3IuY2xpY2soKTtcclxuICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xyXG59XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlci0wXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtdGl0bGVcIj5SZXBvcnQgSGlzdG9yeTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIiFub0RhdGFcIiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGxpc3Qgb2YgcmVwb3J0TGlzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiRG93bmxvYWRSZXBvcnQgbWItNSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJkb3duTG9hZERhdGEobGlzdD8uS2V5KVwiPnt7bGlzdD8uS2V5LnNwbGl0KCcvJykuc3BsaWNlKDEpLmpvaW4oJy8nKX19fHx7e2xpc3Q/Lkxhc3RNb2RpZmllZH19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJub0RhdGFcIiBjbGFzcz1cImNhcmQtYm9keSBib3JkZXItMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjIHctMjVcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgPC9kaXY+IFxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiBcclxuIl19
|
|
@@ -1,11 +1,28 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "tango-app-ui-global";
|
|
4
|
+
import * as i2 from "../user-report/user-report.component";
|
|
3
5
|
export class TangoAnalyseReportComponent {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
pageInfo;
|
|
7
|
+
constructor(pageInfo) {
|
|
8
|
+
this.pageInfo = pageInfo;
|
|
9
|
+
}
|
|
10
|
+
ngOnInit() {
|
|
11
|
+
this.setPageData();
|
|
12
|
+
}
|
|
13
|
+
setPageData() {
|
|
14
|
+
this.pageInfo.setTitle('Reports');
|
|
15
|
+
this.pageInfo.setDescription('Reports');
|
|
16
|
+
this.pageInfo.setBreadcrumbs([
|
|
17
|
+
{ title: 'Analyze', path: '/manage/traffic', isActive: false, isSeparator: false },
|
|
18
|
+
{ title: 'Analyze', path: '/manage/traffic', isActive: false, isSeparator: true },
|
|
19
|
+
]);
|
|
20
|
+
}
|
|
21
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoAnalyseReportComponent, deps: [{ token: i1.PageInfoService }], target: i0.ɵɵFactoryTarget.Component });
|
|
22
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TangoAnalyseReportComponent, selector: "lib-tango-analyse-report", ngImport: i0, template: "<lib-user-report></lib-user-report>", styles: [""], dependencies: [{ kind: "component", type: i2.UserReportComponent, selector: "lib-user-report" }] });
|
|
6
23
|
}
|
|
7
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoAnalyseReportComponent, decorators: [{
|
|
8
25
|
type: Component,
|
|
9
|
-
args: [{ selector: 'lib-tango-analyse-report', template: "<
|
|
10
|
-
}] });
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
args: [{ selector: 'lib-tango-analyse-report', template: "<lib-user-report></lib-user-report>" }]
|
|
27
|
+
}], ctorParameters: () => [{ type: i1.PageInfoService }] });
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tYW5hbHlzZS1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS1yZXBvcnQvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLWFuYWx5c2UtcmVwb3J0L3RhbmdvLWFuYWx5c2UtcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtcmVwb3J0L3NyYy9saWIvY29tcG9uZW50cy90YW5nby1hbmFseXNlLXJlcG9ydC90YW5nby1hbmFseXNlLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7O0FBUWxELE1BQU0sT0FBTywyQkFBMkI7SUFFbkI7SUFBbkIsWUFBbUIsUUFBd0I7UUFBeEIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7SUFBRyxDQUFDO0lBRS9DLFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVBLFdBQVc7UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUMzQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtZQUNsRixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtTQUNsRixDQUFDLENBQUE7SUFDSixDQUFDO3dHQWZVLDJCQUEyQjs0RkFBM0IsMkJBQTJCLGdFQ1J4QyxxQ0FBbUM7OzRGRFF0QiwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10YW5nby1hbmFseXNlLXJlcG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhbmdvLWFuYWx5c2UtcmVwb3J0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdGFuZ28tYW5hbHlzZS1yZXBvcnQuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYW5nb0FuYWx5c2VSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGFnZUluZm86UGFnZUluZm9TZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICB9XHJcblxyXG4gICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoJ1JlcG9ydHMnKVxyXG4gICAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbignUmVwb3J0cycpXHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcclxuICAgICAgeyB0aXRsZTogJ0FuYWx5emUnLCBwYXRoOiAnL21hbmFnZS90cmFmZmljJywgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogJ0FuYWx5emUnLCBwYXRoOiAnL21hbmFnZS90cmFmZmljJywgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSlcclxuICB9XHJcblxyXG59XHJcbiIsIjxsaWItdXNlci1yZXBvcnQ+PC9saWItdXNlci1yZXBvcnQ+Il19
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { Component, ViewChild } from '@angular/core';
|
|
2
|
+
import { Subject, takeUntil } from "rxjs";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
5
|
+
import * as i2 from "tango-app-ui-global";
|
|
6
|
+
import * as i3 from "../../service/analysereport.service";
|
|
7
|
+
import * as i4 from "@angular/common";
|
|
8
|
+
import * as i5 from "tango-app-ui-shared";
|
|
9
|
+
import * as i6 from "@angular/forms";
|
|
10
|
+
export class UserReportComponent {
|
|
11
|
+
modalservice;
|
|
12
|
+
gs;
|
|
13
|
+
service;
|
|
14
|
+
confirmationModal;
|
|
15
|
+
modalRef;
|
|
16
|
+
loading = true;
|
|
17
|
+
noData = false;
|
|
18
|
+
showsidenav = false;
|
|
19
|
+
openCustom = false;
|
|
20
|
+
openAccordian = false;
|
|
21
|
+
customName = '';
|
|
22
|
+
standardData = [{ name: 'Template A', value: 'A' }, { name: 'Template B', value: 'B' }, { name: 'Template C', value: 'C' }, { name: 'Template D', value: 'D' }];
|
|
23
|
+
costomButtons = ['Metrics', 'Comparision', 'Time Filter'];
|
|
24
|
+
metricsData = [{ name: 'Billable Entities', checked: false, value: 'Billable Entities' }, { name: 'Bounced Footfall', checked: false, value: "Bounced Count" }, { name: 'Missed Opportunity', checked: false, value: 'Missed Opportunity Count' }, { name: 'Engagers Count', checked: false, value: 'Engagers Count' }, { name: 'Conversion', checked: false, value: 'Conversion Rate' }, { name: 'Age', checked: false, value: 'age' }, { name: 'Gender', checked: false, value: 'gender' }, { name: 'NOB', checked: false, value: 'nob' }];
|
|
25
|
+
comparisionData = ['WTD', 'MTD', 'None'];
|
|
26
|
+
filterData = ['hour', 'day'];
|
|
27
|
+
infraTable = [];
|
|
28
|
+
selectedData;
|
|
29
|
+
custombtn = 'Metrics';
|
|
30
|
+
metricsArray = [];
|
|
31
|
+
comparisionFilter = 'WTD';
|
|
32
|
+
filterDataList = 'hour';
|
|
33
|
+
sortBy = -1;
|
|
34
|
+
sortColumName;
|
|
35
|
+
totalCount;
|
|
36
|
+
searchValue;
|
|
37
|
+
dynamicData = {};
|
|
38
|
+
displayedColumns = [];
|
|
39
|
+
destroy$ = new Subject();
|
|
40
|
+
constructor(modalservice, gs, service) {
|
|
41
|
+
this.modalservice = modalservice;
|
|
42
|
+
this.gs = gs;
|
|
43
|
+
this.service = service;
|
|
44
|
+
}
|
|
45
|
+
ngOnInit() {
|
|
46
|
+
this.selectedData = this.standardData[0];
|
|
47
|
+
this.gs.dataRangeValue.pipe(takeUntil(this.destroy$)).subscribe((data) => {
|
|
48
|
+
if (data == null) {
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.dynamicData = {
|
|
52
|
+
clientId: data.client,
|
|
53
|
+
storeId: data.stores.filter((item) => item.checked).map((item) => item.storeId),
|
|
54
|
+
fromDate: data.date.startDate,
|
|
55
|
+
toDate: data.date.endDate,
|
|
56
|
+
limit: 10,
|
|
57
|
+
offset: 1,
|
|
58
|
+
templateType: this.selectedData.value,
|
|
59
|
+
export: false,
|
|
60
|
+
searchValue: this.searchValue
|
|
61
|
+
};
|
|
62
|
+
this.getTemplates();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
getTemplates() {
|
|
67
|
+
this.loading = true;
|
|
68
|
+
this.service.reportList(this.dynamicData).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
69
|
+
if (res && res.data.templateData?.length) {
|
|
70
|
+
this.infraTable = res.data?.templateData;
|
|
71
|
+
this.totalCount = res.data.totalCount;
|
|
72
|
+
this.displayedColumns = Object.keys(this.infraTable[0]);
|
|
73
|
+
this.loading = false;
|
|
74
|
+
this.noData = false;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this.loading = false;
|
|
78
|
+
this.noData = true;
|
|
79
|
+
}
|
|
80
|
+
}, () => {
|
|
81
|
+
this.loading = false;
|
|
82
|
+
this.noData = true;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
sidenav() {
|
|
86
|
+
this.showsidenav = !this.showsidenav;
|
|
87
|
+
}
|
|
88
|
+
selectRadio(data) {
|
|
89
|
+
this.selectedData = data;
|
|
90
|
+
this.dynamicData.templateType = data.value;
|
|
91
|
+
this.getTemplates();
|
|
92
|
+
}
|
|
93
|
+
createCustom() {
|
|
94
|
+
this.customName = '';
|
|
95
|
+
const modalRef = this.modalservice.open(this.confirmationModal, { centered: true });
|
|
96
|
+
modalRef.result.then((result) => {
|
|
97
|
+
this.openAccordian = !this.openAccordian;
|
|
98
|
+
this.openCustom = !this.openCustom;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
customOption(data) {
|
|
102
|
+
this.custombtn = data;
|
|
103
|
+
}
|
|
104
|
+
movetoNext() {
|
|
105
|
+
if (this.custombtn === 'Metrics') {
|
|
106
|
+
this.custombtn = 'Comparision';
|
|
107
|
+
}
|
|
108
|
+
else if (this.custombtn === 'Comparision') {
|
|
109
|
+
this.custombtn = 'Time Filter';
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
movetoBack() {
|
|
113
|
+
if (this.custombtn === 'Comparision') {
|
|
114
|
+
this.custombtn = 'Metrics';
|
|
115
|
+
}
|
|
116
|
+
else if (this.custombtn === 'Time Filter') {
|
|
117
|
+
this.custombtn = 'Comparision';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
getComparision(data) {
|
|
121
|
+
this.comparisionFilter = data;
|
|
122
|
+
}
|
|
123
|
+
getFilter(data) {
|
|
124
|
+
this.filterDataList = data;
|
|
125
|
+
}
|
|
126
|
+
customCreate() {
|
|
127
|
+
this.loading = true;
|
|
128
|
+
this.selectedData = {};
|
|
129
|
+
let selectField = this.metricsData.filter((item) => item.checked).map((item) => item.value);
|
|
130
|
+
let data = {
|
|
131
|
+
clientId: this.dynamicData.clientId,
|
|
132
|
+
storeId: this.dynamicData.storeId,
|
|
133
|
+
fromDate: this.dynamicData.fromDate,
|
|
134
|
+
toDate: this.dynamicData.toDate,
|
|
135
|
+
limit: this.dynamicData.limit,
|
|
136
|
+
offset: this.dynamicData.offset,
|
|
137
|
+
export: false,
|
|
138
|
+
comparisonFilter: this.comparisionFilter,
|
|
139
|
+
timeFilter: this.filterDataList,
|
|
140
|
+
seletedFields: selectField,
|
|
141
|
+
searchValue: this.searchValue
|
|
142
|
+
};
|
|
143
|
+
this.service.customTemplate(data).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
144
|
+
if (res && res.data?.customTemp?.length) {
|
|
145
|
+
this.infraTable = res.data.customTemp;
|
|
146
|
+
this.totalCount = res.data.totalCount;
|
|
147
|
+
this.displayedColumns = Object.keys(this.infraTable[0]);
|
|
148
|
+
this.loading = false;
|
|
149
|
+
this.noData = false;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
this.loading = false;
|
|
153
|
+
this.noData = true;
|
|
154
|
+
}
|
|
155
|
+
}, () => {
|
|
156
|
+
this.loading = false;
|
|
157
|
+
this.noData = true;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
// cancelCustom(){
|
|
161
|
+
// this.openCustom = true;
|
|
162
|
+
// this.openAccordian = false;
|
|
163
|
+
// }
|
|
164
|
+
sortData(value) {
|
|
165
|
+
if (this.sortColumName == value) {
|
|
166
|
+
this.sortBy *= -1;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
this.sortBy = 1;
|
|
170
|
+
}
|
|
171
|
+
this.sortColumName = value;
|
|
172
|
+
}
|
|
173
|
+
onPageChange(pageOffset) {
|
|
174
|
+
this.dynamicData.offset = pageOffset;
|
|
175
|
+
if (this.openCustom) {
|
|
176
|
+
this.customCreate();
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this.getTemplates();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
onPageSizeChange(pageSize) {
|
|
183
|
+
this.dynamicData.limit = parseInt(pageSize);
|
|
184
|
+
this.dynamicData.offset = 1;
|
|
185
|
+
if (this.openCustom) {
|
|
186
|
+
this.customCreate();
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
this.getTemplates();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
searchData() {
|
|
193
|
+
if (this.openCustom) {
|
|
194
|
+
this.customCreate();
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
this.getTemplates();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
ExportasXlsx() {
|
|
201
|
+
let data = {
|
|
202
|
+
storeId: this.dynamicData.storeId,
|
|
203
|
+
fromDate: this.dynamicData.fromDate,
|
|
204
|
+
toDate: this.dynamicData.toDate,
|
|
205
|
+
limit: 10000,
|
|
206
|
+
offset: 1,
|
|
207
|
+
templateType: this.selectedData.value,
|
|
208
|
+
export: true,
|
|
209
|
+
searchValue: this.searchValue
|
|
210
|
+
};
|
|
211
|
+
this.service.downloadReportList(data).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
212
|
+
if (res) {
|
|
213
|
+
this.service.saveAsExcelFile(res, this.selectedData.name);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
reset() {
|
|
218
|
+
this.openCustom = false;
|
|
219
|
+
this.custombtn = 'Metrics';
|
|
220
|
+
this.metricsData.forEach((item) => item.checked = false);
|
|
221
|
+
}
|
|
222
|
+
shareData() {
|
|
223
|
+
}
|
|
224
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserReportComponent, deps: [{ token: i1.NgbModal }, { token: i2.GlobalStateService }, { token: i3.AnalysereportService }], target: i0.ɵɵFactoryTarget.Component });
|
|
225
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UserReportComponent, selector: "lib-user-report", viewQueries: [{ propertyName: "confirmationModal", first: true, predicate: ["confirmationModal"], descendants: true }], ngImport: i0, template: "<div class=\"row mb-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-sm-3':'d-none'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-body p-0\">\r\n <div ngbAccordion [closeOthers]=\"true\">\r\n <!-- Standard Template Start -->\r\n\r\n <div ngbAccordionItem [collapsed]=\"openAccordian\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton (click)=\"reset()\">\r\n <div class=\"d-grid\">Standard Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"pt-0 border-0\">\r\n <ng-template class=\"d-flex flex-column justify-content-between\">\r\n <div class=\"card-body h-auto p-0\">\r\n <div class=\"card-label\">\r\n Please select a report to preview \r\n </div>\r\n <div *ngFor=\"let data of standardData\" class=\"mt-5 cursor-pointer\">\r\n <div (click)=\"selectRadio(data)\" class=\"d-flex align-items-center\">\r\n <input [checked]=\"selectedData.name === data.name\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Standard Template End -->\r\n <!-- Custom Template Start -->\r\n <!-- *ngIf=\"!openCustom\" -->\r\n <div ngbAccordionItem [collapsed]=\"!openCustom\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading pt-0\" ngbAccordionButton (click)=\"openCustom = !openCustom;\">\r\n <div class=\"d-grid\">Custom Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"card-body h-100px p-0\">\r\n <div class=\"card-label\">\r\n Please select your data points to add into the reports\r\n </div>\r\n <div class=\"btnheader w-100 p-2 mt-5\">\r\n <span class=\"cursor-pointer px-2\" (click)=\"customOption(button)\" [ngClass]=\"this.custombtn === button ? 'btn px-3':'px-3'\" *ngFor=\"let button of costomButtons\">{{button}}</span>\r\n </div>\r\n <div [ngClass]=\"!infraTable.length ? 'h-100 overflow-auto' : ''\">\r\n <div *ngIf=\"custombtn === 'Metrics'\">\r\n <div *ngFor=\"let data of metricsData\" class=\"mt-5\">\r\n <div>\r\n <input type=\"checkbox\" class=\"mt-2 cursor-pointer\" [(ngModel)]=\"data.checked\">\r\n <span class=\"ms-5 standard fs-4\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Comparision'\">\r\n <div *ngFor=\"let data of comparisionData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getComparision(data)\">\r\n <input [checked]=\"comparisionFilter === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Time Filter'\">\r\n <div *ngFor=\"let data of filterData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getFilter(data)\">\r\n <input [checked]=\"filterDataList === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data === 'hour' ? 'By Hour' : 'By Date'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Custom Template End -->\r\n \r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0 mt-5\">\r\n <!-- <button *ngIf=\"!openAccordian\" (click)=\"createCustom()\" class=\"btn btn-primary w-100\">\r\n Create Custom Template\r\n </button> -->\r\n <div *ngIf=\"openCustom\" class=\"d-flex w-100 mt-5\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27259 12.6363L4.63623 8.99989L8.27259 5.36353M13.3635 12.6363L9.72714 8.99989L13.3635 5.36353\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-sm-9':'col-sm-12'\">\r\n <div class=\"card position-relative h-100\">\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">{{selectedData?.name || 'Custom Template'}}</span>\r\n </div>\r\n <div class=\"card-toolbar\">\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-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n 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\" class=\"form-control ps-14 me-2\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" placeholder=\"Search\"\r\n autocomplete=\"off\"/>\r\n </div> \r\n <button class=\"btn btn-default btn-outline me-3\" (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 *ngIf=\"!showsidenav\" class=\"ms-3\">Export</span></button>\r\n <!-- <button class=\"btn btn-default btn-outline\" (click)=\"shareData()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10164_5579)\"><path d=\"M18.3332 1.66675L9.1665 10.8334M18.3332 1.66675L12.4998 18.3334L9.1665 10.8334M18.3332 1.66675L1.6665 7.50008L9.1665 10.8334\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g><defs><clipPath id=\"clip0_10164_5579\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg><span *ngIf=\"!showsidenav\" class=\"ms-3\">Share</span>\r\n </button> -->\r\n </div>\r\n </div>\r\n <div class=\"card-body\"> \r\n <ng-container *ngIf=\"loading\">\r\n <div class=\"row loader card d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"row\" *ngIf=\"!loading && noData\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body my-8 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Report Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" *ngIf=\"!loading && infraTable.length\">\r\n <table class=\"table bottom-border text-nowrap w-100\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of displayedColumns;let i=index\">\r\n <div class=\"cursor-pointer\" (click)=\"sortData(column)\">\r\n <span>{{column}}</span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== 1 || sortColumName !== column\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== -1\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of infraTable; let i = index\">\r\n <td *ngFor=\"let key of displayedColumns\">\r\n <span>{{key === 'date' ? (data[key] | date:'dd MMM, YYYY') : (data[key] || '--') }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"dynamicData.offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"[10,20,30]\" [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\" *ngIf=\"!loading && infraTable.length\"></lib-pagination>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmationModal let-modal>\r\n <div class=\"card border-0\">\r\n <div class=\"card-body\">\r\n <img src=\"./assets/tango/Images/custompopup-icon.png\">\r\n <div class=\" mt-5\">\r\n <span class=\"header fw-bold\">Custom Template Name</span>\r\n <div class=\"mt-3 sub-header fw-semibold\">Are you sure you want to delete the user globally?</div>\r\n </div>\r\n <div class=\"mt-10\">\r\n <label class=\"sub-header\" style=\"color: #344054; font-weight: 400;\" for=\"custom-name\">Template Name</label>\r\n <input type=\"text\" [(ngModel)]=\"customName\" class=\"form-control mt-2\" id=\"custom-Name\">\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-default btn-outline w-50 me-2\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary w-50 ms-2\" [disabled]=\"customName === ''\" (click)=\"modal.close()\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>", styles: [".backButtonright{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;right:-10px;z-index:5}.backButtonleft{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-10px;z-index:5}.dynamicClass1{display:none}.card-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.standard{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.radio{width:16px!important;height:16px!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}.btnheader{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.btnheader .btn{background:#fff!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}tbody tr{vertical-align:middle;height:70px!important}.header{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.sub-header{color:var(--Gray-500, #667085)!important;font-size:14px!important;line-height:20px}.hidden{visibility:hidden}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i1.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i1.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i1.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i1.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i1.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
|
|
226
|
+
}
|
|
227
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserReportComponent, decorators: [{
|
|
228
|
+
type: Component,
|
|
229
|
+
args: [{ selector: 'lib-user-report', template: "<div class=\"row mb-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-sm-3':'d-none'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-body p-0\">\r\n <div ngbAccordion [closeOthers]=\"true\">\r\n <!-- Standard Template Start -->\r\n\r\n <div ngbAccordionItem [collapsed]=\"openAccordian\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton (click)=\"reset()\">\r\n <div class=\"d-grid\">Standard Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"pt-0 border-0\">\r\n <ng-template class=\"d-flex flex-column justify-content-between\">\r\n <div class=\"card-body h-auto p-0\">\r\n <div class=\"card-label\">\r\n Please select a report to preview \r\n </div>\r\n <div *ngFor=\"let data of standardData\" class=\"mt-5 cursor-pointer\">\r\n <div (click)=\"selectRadio(data)\" class=\"d-flex align-items-center\">\r\n <input [checked]=\"selectedData.name === data.name\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Standard Template End -->\r\n <!-- Custom Template Start -->\r\n <!-- *ngIf=\"!openCustom\" -->\r\n <div ngbAccordionItem [collapsed]=\"!openCustom\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading pt-0\" ngbAccordionButton (click)=\"openCustom = !openCustom;\">\r\n <div class=\"d-grid\">Custom Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"card-body h-100px p-0\">\r\n <div class=\"card-label\">\r\n Please select your data points to add into the reports\r\n </div>\r\n <div class=\"btnheader w-100 p-2 mt-5\">\r\n <span class=\"cursor-pointer px-2\" (click)=\"customOption(button)\" [ngClass]=\"this.custombtn === button ? 'btn px-3':'px-3'\" *ngFor=\"let button of costomButtons\">{{button}}</span>\r\n </div>\r\n <div [ngClass]=\"!infraTable.length ? 'h-100 overflow-auto' : ''\">\r\n <div *ngIf=\"custombtn === 'Metrics'\">\r\n <div *ngFor=\"let data of metricsData\" class=\"mt-5\">\r\n <div>\r\n <input type=\"checkbox\" class=\"mt-2 cursor-pointer\" [(ngModel)]=\"data.checked\">\r\n <span class=\"ms-5 standard fs-4\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Comparision'\">\r\n <div *ngFor=\"let data of comparisionData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getComparision(data)\">\r\n <input [checked]=\"comparisionFilter === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Time Filter'\">\r\n <div *ngFor=\"let data of filterData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getFilter(data)\">\r\n <input [checked]=\"filterDataList === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data === 'hour' ? 'By Hour' : 'By Date'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Custom Template End -->\r\n \r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0 mt-5\">\r\n <!-- <button *ngIf=\"!openAccordian\" (click)=\"createCustom()\" class=\"btn btn-primary w-100\">\r\n Create Custom Template\r\n </button> -->\r\n <div *ngIf=\"openCustom\" class=\"d-flex w-100 mt-5\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27259 12.6363L4.63623 8.99989L8.27259 5.36353M13.3635 12.6363L9.72714 8.99989L13.3635 5.36353\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-sm-9':'col-sm-12'\">\r\n <div class=\"card position-relative h-100\">\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">{{selectedData?.name || 'Custom Template'}}</span>\r\n </div>\r\n <div class=\"card-toolbar\">\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-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n 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\" class=\"form-control ps-14 me-2\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" placeholder=\"Search\"\r\n autocomplete=\"off\"/>\r\n </div> \r\n <button class=\"btn btn-default btn-outline me-3\" (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 *ngIf=\"!showsidenav\" class=\"ms-3\">Export</span></button>\r\n <!-- <button class=\"btn btn-default btn-outline\" (click)=\"shareData()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10164_5579)\"><path d=\"M18.3332 1.66675L9.1665 10.8334M18.3332 1.66675L12.4998 18.3334L9.1665 10.8334M18.3332 1.66675L1.6665 7.50008L9.1665 10.8334\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g><defs><clipPath id=\"clip0_10164_5579\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg><span *ngIf=\"!showsidenav\" class=\"ms-3\">Share</span>\r\n </button> -->\r\n </div>\r\n </div>\r\n <div class=\"card-body\"> \r\n <ng-container *ngIf=\"loading\">\r\n <div class=\"row loader card d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"row\" *ngIf=\"!loading && noData\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body my-8 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Report Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" *ngIf=\"!loading && infraTable.length\">\r\n <table class=\"table bottom-border text-nowrap w-100\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of displayedColumns;let i=index\">\r\n <div class=\"cursor-pointer\" (click)=\"sortData(column)\">\r\n <span>{{column}}</span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== 1 || sortColumName !== column\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== -1\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of infraTable; let i = index\">\r\n <td *ngFor=\"let key of displayedColumns\">\r\n <span>{{key === 'date' ? (data[key] | date:'dd MMM, YYYY') : (data[key] || '--') }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"dynamicData.offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"[10,20,30]\" [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\" *ngIf=\"!loading && infraTable.length\"></lib-pagination>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmationModal let-modal>\r\n <div class=\"card border-0\">\r\n <div class=\"card-body\">\r\n <img src=\"./assets/tango/Images/custompopup-icon.png\">\r\n <div class=\" mt-5\">\r\n <span class=\"header fw-bold\">Custom Template Name</span>\r\n <div class=\"mt-3 sub-header fw-semibold\">Are you sure you want to delete the user globally?</div>\r\n </div>\r\n <div class=\"mt-10\">\r\n <label class=\"sub-header\" style=\"color: #344054; font-weight: 400;\" for=\"custom-name\">Template Name</label>\r\n <input type=\"text\" [(ngModel)]=\"customName\" class=\"form-control mt-2\" id=\"custom-Name\">\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-default btn-outline w-50 me-2\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary w-50 ms-2\" [disabled]=\"customName === ''\" (click)=\"modal.close()\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>", styles: [".backButtonright{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;right:-10px;z-index:5}.backButtonleft{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-10px;z-index:5}.dynamicClass1{display:none}.card-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.standard{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.radio{width:16px!important;height:16px!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}.btnheader{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.btnheader .btn{background:#fff!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}tbody tr{vertical-align:middle;height:70px!important}.header{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.sub-header{color:var(--Gray-500, #667085)!important;font-size:14px!important;line-height:20px}.hidden{visibility:hidden}\n"] }]
|
|
230
|
+
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.GlobalStateService }, { type: i3.AnalysereportService }], propDecorators: { confirmationModal: [{
|
|
231
|
+
type: ViewChild,
|
|
232
|
+
args: ['confirmationModal']
|
|
233
|
+
}] } });
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS1yZXBvcnQvc3JjL2xpYi9jb21wb25lbnRzL3VzZXItcmVwb3J0L3VzZXItcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtcmVwb3J0L3NyYy9saWIvY29tcG9uZW50cy91c2VyLXJlcG9ydC91c2VyLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFRLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLG1CQUFtQjtJQTRCVjtJQUE4QjtJQUE4QjtJQTFCaEQsaUJBQWlCLENBQU07SUFDdkQsUUFBUSxDQUEwQjtJQUNsQyxPQUFPLEdBQVcsSUFBSSxDQUFDO0lBQ3ZCLE1BQU0sR0FBVyxLQUFLLENBQUM7SUFDdkIsV0FBVyxHQUFXLEtBQUssQ0FBQztJQUM1QixVQUFVLEdBQVcsS0FBSyxDQUFDO0lBQzNCLGFBQWEsR0FBVyxLQUFLLENBQUM7SUFDOUIsVUFBVSxHQUFNLEVBQUUsQ0FBQztJQUNuQixZQUFZLEdBQU8sQ0FBQyxFQUFDLElBQUksRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsSUFBSSxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxJQUFJLEVBQUMsWUFBWSxFQUFDLEtBQUssRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLElBQUksRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUE7SUFDNUksYUFBYSxHQUFPLENBQUMs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QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQzFGLElBQUcsR0FBRyxFQUFHO2dCQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVEO1FBRUgsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFDRCxTQUFTO0lBRVQsQ0FBQzt3R0F0TlUsbUJBQW1COzRGQUFuQixtQkFBbUIsK0tDWGhDLDgxZ0JBd09nQjs7NEZEN05ILG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7aUpBTUssaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCxPbkluaXQsVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbCxOZ2JNb2RhbE1vZHVsZSxOZ2JNb2RhbFJlZiB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFuYWx5c2VyZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hbmFseXNlcmVwb3J0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdXNlci1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VzZXItcmVwb3J0LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlclJlcG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29uZmlybWF0aW9uTW9kYWwnKSBjb25maXJtYXRpb25Nb2RhbDogYW55O1xyXG4gIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZiB8IHVuZGVmaW5lZDtcclxuICBsb2FkaW5nOmJvb2xlYW4gPSB0cnVlO1xyXG4gIG5vRGF0YTpib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd3NpZGVuYXY6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIG9wZW5DdXN0b206Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIG9wZW5BY2NvcmRpYW46Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1c3RvbU5hbWU6YW55ID0nJztcclxuICBzdGFuZGFyZERhdGE6YW55ID0gW3tuYW1lOidUZW1wbGF0ZSBBJyx2YWx1ZTonQSd9LHtuYW1lOidUZW1wbGF0ZSBCJyx2YWx1ZTonQid9LHtuYW1lOidUZW1wbGF0ZSBDJyx2YWx1ZTonQyd9LHtuYW1lOidUZW1wbGF0ZSBEJyx2YWx1ZTonRCd9XVxyXG4gIGNvc3RvbUJ1dHRvbnM6YW55ID0gWydNZXRyaWNzJywnQ29tcGFyaXNpb24nLCdUaW1lIEZpbHRlciddXHJcbiAgbWV0cmljc0RhdGE6YW55ID0gW3tuYW1lOidCaWxsYWJsZSBFbnRpdGllcycsY2hlY2tlZDpmYWxzZSx2YWx1ZTonQmlsbGFibGUgRW50aXRpZXMnfSx7bmFtZTonQm91bmNlZCBGb290ZmFsbCcsY2hlY2tlZDpmYWxzZSx2YWx1ZTpcIkJvdW5jZWQgQ291bnRcIn0se25hbWU6J01pc3NlZCBPcHBvcnR1bml0eScsY2hlY2tlZDpmYWxzZSx2YWx1ZTonTWlzc2VkIE9wcG9ydHVuaXR5IENvdW50J30se25hbWU6J0VuZ2FnZXJzIENvdW50JyxjaGVja2VkOmZhbHNlLHZhbHVlOidFbmdhZ2VycyBDb3VudCd9LHtuYW1lOidDb252ZXJzaW9uJyxjaGVja2VkOmZhbHNlLHZhbHVlOidDb252ZXJzaW9uIFJhdGUnfSx7bmFtZTonQWdlJyxjaGVja2VkOmZhbHNlLHZhbHVlOidhZ2UnfSx7bmFtZTonR2VuZGVyJyxjaGVja2VkOmZhbHNlLHZhbHVlOidnZW5kZXInfSx7bmFtZTonTk9CJyxjaGVja2VkOmZhbHNlLHZhbHVlOidub2InfV1cclxuICBjb21wYXJpc2lvbkRhdGE6YW55ID0gWydXVEQnLCdNVEQnLCdOb25lJ11cclxuICBmaWx0ZXJEYXRhOmFueSA9IFsnaG91cicsJ2RheSddXHJcbiAgaW5mcmFUYWJsZTphbnkgPSBbXVxyXG4gIHNlbGVjdGVkRGF0YTogYW55O1xyXG4gIGN1c3RvbWJ0bjogYW55ID0gJ01ldHJpY3MnO1xyXG4gIG1ldHJpY3NBcnJheTogYW55W10gPSBbXTtcclxuICBjb21wYXJpc2lvbkZpbHRlcjogc3RyaW5nID0gJ1dURCc7XHJcbiAgZmlsdGVyRGF0YUxpc3Q6IHN0cmluZyA9ICdob3VyJztcclxuICBzb3J0Qnk6YW55ID0gLTE7XHJcbiAgc29ydENvbHVtTmFtZTphbnk7XHJcbiAgdG90YWxDb3VudDphbnk7XHJcbiAgc2VhcmNoVmFsdWU6IGFueTtcclxuICBkeW5hbWljRGF0YTphbnkgPSB7fTtcclxuICBkaXNwbGF5ZWRDb2x1bW5zOmFueSA9IFtdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9kYWxzZXJ2aWNlOk5nYk1vZGFsLHByaXZhdGUgZ3M6R2xvYmFsU3RhdGVTZXJ2aWNlLHByaXZhdGUgc2VydmljZTpBbmFseXNlcmVwb3J0U2VydmljZSl7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc3RhbmRhcmREYXRhWzBdO1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYoZGF0YT09bnVsbCl7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICB0aGlzLmR5bmFtaWNEYXRhID0ge1xyXG4gICAgICAgICAgY2xpZW50SWQ6ZGF0YS5jbGllbnQsXHJcbiAgICAgICAgICBzdG9yZUlkOiBkYXRhLnN0b3Jlcy5maWx0ZXIoKGl0ZW06YW55KSA9PiBpdGVtLmNoZWNrZWQpLm1hcCgoaXRlbTphbnkpID0+IGl0ZW0uc3RvcmVJZCksXHJcbiAgICAgICAgICBmcm9tRGF0ZTogZGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgICAgIHRvRGF0ZTogZGF0YS5kYXRlLmVuZERhdGUsXHJcbiAgICAgICAgICBsaW1pdDogMTAsXHJcbiAgICAgICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgICAgICB0ZW1wbGF0ZVR5cGU6IHRoaXMuc2VsZWN0ZWREYXRhLnZhbHVlLFxyXG4gICAgICAgICAgZXhwb3J0OmZhbHNlLFxyXG4gICAgICAgICAgc2VhcmNoVmFsdWU6dGhpcy5zZWFyY2hWYWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXRUZW1wbGF0ZXMoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXJ2aWNlLnJlcG9ydExpc3QodGhpcy5keW5hbWljRGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzICYmIHJlcy5kYXRhLnRlbXBsYXRlRGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbmZyYVRhYmxlID0gcmVzLmRhdGE/LnRlbXBsYXRlRGF0YTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbENvdW50O1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKHRoaXMuaW5mcmFUYWJsZVswXSk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0sKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaWRlbmF2KCl7XHJcbiAgICB0aGlzLnNob3dzaWRlbmF2ID0gIXRoaXMuc2hvd3NpZGVuYXY7XHJcbiAgfVxyXG4gIHNlbGVjdFJhZGlvKGRhdGE6YW55KXtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gZGF0YTtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEudGVtcGxhdGVUeXBlID0gZGF0YS52YWx1ZTtcclxuICAgIHRoaXMuZ2V0VGVtcGxhdGVzKCk7XHJcbiAgfVxyXG4gIGNyZWF0ZUN1c3RvbSgpe1xyXG4gICAgdGhpcy5jdXN0b21OYW1lID0gJyc7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxzZXJ2aWNlLm9wZW4odGhpcy5jb25maXJtYXRpb25Nb2RhbCwgeyBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHsgXHJcbiAgICAgIHRoaXMub3BlbkFjY29yZGlhbiA9ICF0aGlzLm9wZW5BY2NvcmRpYW47XHJcbiAgICAgIHRoaXMub3BlbkN1c3RvbSA9ICF0aGlzLm9wZW5DdXN0b207XHJcbiAgICB9KTtcclxuICB9XHJcbiAgY3VzdG9tT3B0aW9uKGRhdGE6YW55KXtcclxuICAgIHRoaXMuY3VzdG9tYnRuID0gZGF0YTtcclxuICB9XHJcbiAgbW92ZXRvTmV4dCgpe1xyXG4gICAgaWYodGhpcy5jdXN0b21idG4gPT09ICdNZXRyaWNzJyl7XHJcbiAgICAgIHRoaXMuY3VzdG9tYnRuID0gJ0NvbXBhcmlzaW9uJ1xyXG4gICAgfWVsc2UgaWYodGhpcy5jdXN0b21idG4gPT09ICdDb21wYXJpc2lvbicpe1xyXG4gICAgICB0aGlzLmN1c3RvbWJ0biA9ICdUaW1lIEZpbHRlcidcclxuICAgIH1cclxuICB9XHJcbiAgbW92ZXRvQmFjaygpe1xyXG4gICAgaWYodGhpcy5jdXN0b21idG4gPT09ICdDb21wYXJpc2lvbicpe1xyXG4gICAgICB0aGlzLmN1c3RvbWJ0biA9ICdNZXRyaWNzJ1xyXG4gICAgfWVsc2UgaWYodGhpcy5jdXN0b21idG4gPT09ICdUaW1lIEZpbHRlcicpe1xyXG4gICAgICB0aGlzLmN1c3RvbWJ0biA9ICdDb21wYXJpc2lvbidcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0Q29tcGFyaXNpb24oZGF0YTphbnkpe1xyXG4gICAgdGhpcy5jb21wYXJpc2lvbkZpbHRlciA9IGRhdGE7XHJcbiAgfVxyXG4gIGdldEZpbHRlcihkYXRhOmFueSl7XHJcbiAgICB0aGlzLmZpbHRlckRhdGFMaXN0ID0gZGF0YTtcclxuICB9XHJcbiAgY3VzdG9tQ3JlYXRlKCl7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSB7fTtcclxuICAgIGxldCBzZWxlY3RGaWVsZCA9ICB0aGlzLm1ldHJpY3NEYXRhLmZpbHRlcigoaXRlbTphbnkpID0+IGl0ZW0uY2hlY2tlZCkubWFwKChpdGVtOmFueSkgPT4gaXRlbS52YWx1ZSk7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgY2xpZW50SWQ6dGhpcy5keW5hbWljRGF0YS5jbGllbnRJZCxcclxuICAgICAgc3RvcmVJZDogdGhpcy5keW5hbWljRGF0YS5zdG9yZUlkLFxyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5keW5hbWljRGF0YS5mcm9tRGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmR5bmFtaWNEYXRhLnRvRGF0ZSxcclxuICAgICAgbGltaXQ6IHRoaXMuZHluYW1pY0RhdGEubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy5keW5hbWljRGF0YS5vZmZzZXQsXHJcbiAgICAgIGV4cG9ydDpmYWxzZSwgICAgXHJcbiAgICAgIGNvbXBhcmlzb25GaWx0ZXI6IHRoaXMuY29tcGFyaXNpb25GaWx0ZXIsXHJcbiAgICAgIHRpbWVGaWx0ZXI6IHRoaXMuZmlsdGVyRGF0YUxpc3QsIFxyXG4gICAgICBzZWxldGVkRmllbGRzOnNlbGVjdEZpZWxkLFxyXG4gICAgICBzZWFyY2hWYWx1ZTp0aGlzLnNlYXJjaFZhbHVlXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlcnZpY2UuY3VzdG9tVGVtcGxhdGUoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZihyZXMgJiYgcmVzLmRhdGE/LmN1c3RvbVRlbXA/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5pbmZyYVRhYmxlID0gcmVzLmRhdGEuY3VzdG9tVGVtcDtcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLnRvdGFsQ291bnQ7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBPYmplY3Qua2V5cyh0aGlzLmluZnJhVGFibGVbMF0pO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIGNhbmNlbEN1c3RvbSgpe1xyXG4gIC8vICAgICB0aGlzLm9wZW5DdXN0b20gPSB0cnVlO1xyXG4gIC8vICAgICB0aGlzLm9wZW5BY2NvcmRpYW4gPSBmYWxzZTtcclxuICAvLyB9XHJcblxyXG4gIHNvcnREYXRhKHZhbHVlOmFueSl7XHJcbiAgICBpZih0aGlzLnNvcnRDb2x1bU5hbWUgPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5zb3J0QnkgKj0gLTE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zb3J0QnkgPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zb3J0Q29sdW1OYW1lID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogYW55KSB7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLm9mZnNldCA9IHBhZ2VPZmZzZXQ7XHJcbiAgICBpZih0aGlzLm9wZW5DdXN0b20pIHtcclxuICAgICAgdGhpcy5jdXN0b21DcmVhdGUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogYW55KSB7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0ID0gcGFyc2VJbnQocGFnZVNpemUpO1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5vZmZzZXQgPSAxO1xyXG4gICAgaWYodGhpcy5vcGVuQ3VzdG9tKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tQ3JlYXRlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2VhcmNoRGF0YSgpe1xyXG4gICAgaWYodGhpcy5vcGVuQ3VzdG9tKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tQ3JlYXRlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgRXhwb3J0YXNYbHN4KCl7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgc3RvcmVJZDogdGhpcy5keW5hbWljRGF0YS5zdG9yZUlkLFxyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5keW5hbWljRGF0YS5mcm9tRGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmR5bmFtaWNEYXRhLnRvRGF0ZSxcclxuICAgICAgbGltaXQ6IDEwMDAwLFxyXG4gICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgIHRlbXBsYXRlVHlwZTogdGhpcy5zZWxlY3RlZERhdGEudmFsdWUsXHJcbiAgICAgIGV4cG9ydDp0cnVlLFxyXG4gICAgICBzZWFyY2hWYWx1ZTp0aGlzLnNlYXJjaFZhbHVlXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlcnZpY2UuZG93bmxvYWRSZXBvcnRMaXN0KGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcyApIHtcclxuICAgICAgICAgIHRoaXMuc2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLHRoaXMuc2VsZWN0ZWREYXRhLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLm9wZW5DdXN0b20gPSBmYWxzZTtcclxuICAgIHRoaXMuY3VzdG9tYnRuID0gJ01ldHJpY3MnO1xyXG4gICAgdGhpcy5tZXRyaWNzRGF0YS5mb3JFYWNoKChpdGVtOmFueSkgPT4gaXRlbS5jaGVja2VkID0gZmFsc2UpO1xyXG4gIH1cclxuICBzaGFyZURhdGEoKXtcclxuXHJcbiAgfVxyXG4gIC8vIGNvbnZlcnRDb2x1bW5UaXRsZShkYXRhOmFueSkge1xyXG4gIC8vICAgbGV0IHdvcmRMaXN0ID0gZGF0YS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKS5zcGxpdCgnICcpO1xyXG4gIC8vICAgaWYod29yZExpc3Rbd29yZExpc3QubGVuZ3RoLTFdID09ICdDb3VudCcpIHtcclxuICAvLyAgICAgd29yZExpc3Quc3BsaWNlKHdvcmRMaXN0Lmxlbmd0aC0xLDEpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgd29yZExpc3QgPSB3b3JkTGlzdC5qb2luKCcgJyk7XHJcbiAgLy8gICB3b3JkTGlzdCA9IHdvcmRMaXN0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZExpc3Quc2xpY2UoMSk7XHJcbiAgLy8gICBpZih3b3JkTGlzdC5pbmNsdWRlcygnLScpKSB7XHJcbiAgLy8gICAgIHdvcmRMaXN0ID0gJ0FnZSAnICt3b3JkTGlzdDtcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiB3b3JkTGlzdDtcclxuICAvLyB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvdyBtYi01XCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJzaG93c2lkZW5hdiA/ICdjb2wtc20tMyc6J2Qtbm9uZSdcIj5cclxuICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbiBbY2xvc2VPdGhlcnNdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBTdGFuZGFyZCBUZW1wbGF0ZSBTdGFydCAgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25JdGVtIFtjb2xsYXBzZWRdPVwib3BlbkFjY29yZGlhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZ3JpZFwiPlN0YW5kYXJkIFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHkgY2xhc3M9XCJwdC0wIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtYXV0byBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSByZXBvcnQgdG8gcHJldmlldyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc3RhbmRhcmREYXRhXCIgY2xhc3M9XCJtdC01IGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2VsZWN0UmFkaW8oZGF0YSlcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NoZWNrZWRdPVwic2VsZWN0ZWREYXRhLm5hbWUgPT09IGRhdGEubmFtZVwiIHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwicmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgc3RhbmRhcmRcIj57e2RhdGEubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFN0YW5kYXJkIFRlbXBsYXRlIEVuZCAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEN1c3RvbSBUZW1wbGF0ZSBTdGFydCAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tICpuZ0lmPVwiIW9wZW5DdXN0b21cIiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgIG5nYkFjY29yZGlvbkl0ZW0gW2NvbGxhcHNlZF09XCIhb3BlbkN1c3RvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZyBwdC0wXCIgbmdiQWNjb3JkaW9uQnV0dG9uIChjbGljayk9XCJvcGVuQ3VzdG9tID0gIW9wZW5DdXN0b207XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ncmlkXCI+Q3VzdG9tIFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBoLTEwMHB4IHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCB5b3VyIGRhdGEgcG9pbnRzIHRvIGFkZCBpbnRvIHRoZSByZXBvcnRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuaGVhZGVyIHctMTAwIHAtMiBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcHgtMlwiIChjbGljayk9XCJjdXN0b21PcHRpb24oYnV0dG9uKVwiIFtuZ0NsYXNzXT1cInRoaXMuY3VzdG9tYnRuID09PSBidXR0b24gPyAnYnRuIHB4LTMnOidweC0zJ1wiICpuZ0Zvcj1cImxldCBidXR0b24gb2YgY29zdG9tQnV0dG9uc1wiPnt7YnV0dG9ufX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIiFpbmZyYVRhYmxlLmxlbmd0aCA/ICdoLTEwMCBvdmVyZmxvdy1hdXRvJyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VzdG9tYnRuID09PSAnTWV0cmljcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIG1ldHJpY3NEYXRhXCIgY2xhc3M9XCJtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtdC0yIGN1cnNvci1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJkYXRhLmNoZWNrZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNSBzdGFuZGFyZCBmcy00XCI+e3tkYXRhLm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXN0b21idG4gPT09ICdDb21wYXJpc2lvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIGNvbXBhcmlzaW9uRGF0YVwiIGNsYXNzPVwibXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIChjbGljayk9XCJnZXRDb21wYXJpc2lvbihkYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjaGVja2VkXT1cImNvbXBhcmlzaW9uRmlsdGVyID09PSBkYXRhXCIgdHlwZT1cInJhZGlvXCIgY2xhc3M9XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01IHN0YW5kYXJkIGZzLTRcIj57e2RhdGF9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXN0b21idG4gPT09ICdUaW1lIEZpbHRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpbHRlckRhdGFcIiBjbGFzcz1cIm10LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAoY2xpY2spPVwiZ2V0RmlsdGVyKGRhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NoZWNrZWRdPVwiZmlsdGVyRGF0YUxpc3QgPT09IGRhdGFcIiB0eXBlPVwicmFkaW9cIiBjbGFzcz1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgc3RhbmRhcmQgZnMtNFwiPnt7ZGF0YSA9PT0gJ2hvdXInID8gJ0J5IEhvdXInIDogJ0J5IERhdGUnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBDdXN0b20gVGVtcGxhdGUgRW5kICAtLT5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wIG10LTVcIj5cclxuICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cIiFvcGVuQWNjb3JkaWFuXCIgKGNsaWNrKT1cImNyZWF0ZUN1c3RvbSgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICBDcmVhdGUgQ3VzdG9tIFRlbXBsYXRlXHJcbiAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3BlbkN1c3RvbVwiIGNsYXNzPVwiZC1mbGV4IHctMTAwIG10LTVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmUgdy01MCBtZS0zXCIgW25nQ2xhc3NdPVwiY3VzdG9tYnRuID09PSAnTWV0cmljcycgPyAnaGlkZGVuJyA6ICcnXCIgKGNsaWNrKT1cIm1vdmV0b0JhY2soKVwiPkJhY2s8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjdXN0b21idG4gIT09ICdUaW1lIEZpbHRlcidcIiAoY2xpY2spPVwibW92ZXRvTmV4dCgpXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXByaW1hcnkgdy01MCBtcy0zXCI+TmV4dDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImN1c3RvbWJ0biA9PT0gJ1RpbWUgRmlsdGVyJ1wiIChjbGljayk9XCJjdXN0b21DcmVhdGUoKVwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1wcmltYXJ5IHctNTAgbXMtM1wiPlZpZXc8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd3NpZGVuYXZcIiAoY2xpY2spPVwic2lkZW5hdigpXCIgY2xhc3M9XCJiYWNrQnV0dG9ucmlnaHQgdGV4dC1jZW50ZXIgcHQtMSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yNzI1OSAxMi42MzYzTDQuNjM2MjMgOC45OTk4OUw4LjI3MjU5IDUuMzYzNTNNMTMuMzYzNSAxMi42MzYzTDkuNzI3MTQgOC45OTk4OUwxMy4zNjM1IDUuMzYzNTNcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInNob3dzaWRlbmF2ID8gJ2NvbC1zbS05JzonY29sLXNtLTEyJ1wiPlxyXG4gICAgIDxkaXYgY2xhc3M9XCJjYXJkIHBvc2l0aW9uLXJlbGF0aXZlIGgtMTAwXCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFzaG93c2lkZW5hdlwiIChjbGljayk9XCJzaWRlbmF2KClcIiBjbGFzcz1cImJhY2tCdXR0b25sZWZ0IHRleHQtY2VudGVyIHB0LTEgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuNzI3MTQgMTIuNjM2NUwxMy4zNjM1IDkuMDAwMTNMOS43MjcxNCA1LjM2Mzc3TTQuNjM2MjMgMTIuNjM2NUw4LjI3MjU5IDkuMDAwMTNMNC42MzYyMyA1LjM2Mzc3XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3tzZWxlY3RlZERhdGE/Lm5hbWUgfHwgJ0N1c3RvbSBUZW1wbGF0ZSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyXCIgcng9XCIxXCIgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwcy0xNCBtZS0yXCIgKGNoYW5nZSk9XCJzZWFyY2hEYXRhKClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIi8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1vdXRsaW5lIG1lLTNcIiAoY2xpY2spPVwiRXhwb3J0YXNYbHN4KClcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgIDwvc3ZnPiA8c3BhbiAqbmdJZj1cIiFzaG93c2lkZW5hdlwiIGNsYXNzPVwibXMtM1wiPkV4cG9ydDwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb3V0bGluZVwiIChjbGljayk9XCJzaGFyZURhdGEoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xMDE2NF81NTc5KVwiPjxwYXRoIGQ9XCJNMTguMzMzMiAxLjY2Njc1TDkuMTY2NSAxMC44MzM0TTE4LjMzMzIgMS42NjY3NUwxMi40OTk4IDE4LjMzMzRMOS4xNjY1IDEwLjgzMzRNMTguMzMzMiAxLjY2Njc1TDEuNjY2NSA3LjUwMDA4TDkuMTY2NSAxMC44MzM0XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPC9nPjxkZWZzPjxjbGlwUGF0aCBpZD1cImNsaXAwXzEwMTY0XzU1NzlcIj48cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIi8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+PHNwYW4gKm5nSWY9XCIhc2hvd3NpZGVuYXZcIiBjbGFzcz1cIm1zLTNcIj5TaGFyZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj4gXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBjYXJkICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFsb2FkaW5nICYmIG5vRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgbXktOCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhbWFpbnRleHQgbXQtM1wiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YXN1YnRleHRcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIFJlcG9ydCBBbmFseXNpczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiICpuZ0lmPVwiIWxvYWRpbmcgJiYgaW5mcmFUYWJsZS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGRpc3BsYXllZENvbHVtbnM7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2NvbHVtbn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbiAmJiBzb3J0QnkgIT09IDEgfHwgc29ydENvbHVtTmFtZSAhPT0gY29sdW1uXCIgY2xhc3M9XCJtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMS4zMzMzN1YxMC42NjY3TTYuMDAwMTYgMTAuNjY2N0wxMC42NjY4IDYuMDAwMDRNNi4wMDAxNiAxMC42NjY3TDEuMzMzNSA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbiA/ICcjMDBBM0ZGJyA6JyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbiAmJiBzb3J0QnkgIT09IC0xXCIgY2xhc3M9XCJtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMTAuNjY2N0w2LjAwMDE2IDEuMzMzMzdNNi4wMDAxNiAxLjMzMzM3TDEuMzMzNSA2LjAwMDA0TTYuMDAwMTYgMS4zMzMzN0wxMC42NjY4IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gY29sdW1uID8gJyMwMEEzRkYnIDonIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGRhdGEgb2YgaW5mcmFUYWJsZTsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBrZXkgb2YgZGlzcGxheWVkQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7a2V5ID09PSAnZGF0ZScgPyAoZGF0YVtrZXldIHwgZGF0ZTonZGQgTU1NLCBZWVlZJykgOiAoZGF0YVtrZXldIHx8ICctLScpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBbaXRlbXNQZXJQYWdlXT1cImR5bmFtaWNEYXRhLmxpbWl0XCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJkeW5hbWljRGF0YS5vZmZzZXRcIiBbdG90YWxJdGVtc109XCJ0b3RhbENvdW50XCJcclxuICAgICAgICAgICAgICAgIFtwYWdpbmF0aW9uU2l6ZXNdPVwiWzEwLDIwLDMwXVwiIFtwYWdlU2l6ZV09XCJkeW5hbWljRGF0YS5saW1pdFwiXHJcbiAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCIgKm5nSWY9XCIhbG9hZGluZyAmJiBpbmZyYVRhYmxlLmxlbmd0aFwiPjwvbGliLXBhZ2luYXRpb24+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29uZmlybWF0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ltYWdlcy9jdXN0b21wb3B1cC1pY29uLnBuZ1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIiBtdC01XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXIgZnctYm9sZFwiPkN1c3RvbSBUZW1wbGF0ZSBOYW1lPC9zcGFuPlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgc3ViLWhlYWRlciBmdy1zZW1pYm9sZFwiPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHVzZXIgZ2xvYmFsbHk/PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xMFwiPlxyXG4gICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdWItaGVhZGVyXCIgc3R5bGU9XCJjb2xvcjogIzM0NDA1NDsgZm9udC13ZWlnaHQ6IDQwMDtcIiBmb3I9XCJjdXN0b20tbmFtZVwiPlRlbXBsYXRlIE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImN1c3RvbU5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtdC0yXCIgaWQ9XCJjdXN0b20tTmFtZVwiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTEwXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1vdXRsaW5lIHctNTAgbWUtMlwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy01MCBtcy0yXCIgW2Rpc2FibGVkXT1cImN1c3RvbU5hbWUgPT09ICcnXCIgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKClcIj5BcHBseTwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPiJdfQ==
|