@csmart/ngc-smart-victim 1.14.42 → 1.14.44

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. package/{esm2020 → esm2022}/csmart-ngc-smart-victim.mjs +4 -4
  2. package/esm2022/lib/caseNote/caseNote.component.mjs +219 -0
  3. package/esm2022/lib/common-dialog/common-dialog.component.mjs +26 -0
  4. package/{esm2020 → esm2022}/lib/common-dialog/common-dialog.module.mjs +34 -34
  5. package/esm2022/lib/common-dialog/common-dialog.service.mjs +34 -0
  6. package/esm2022/lib/contact/contact.component.mjs +158 -0
  7. package/esm2022/lib/email.services.mjs +43 -0
  8. package/esm2022/lib/intake.service.mjs +59 -0
  9. package/esm2022/lib/safetyPlan/serviceProvider.component.mjs +105 -0
  10. package/esm2022/lib/safetyPlan/victimSafetyPlan.component.mjs +146 -0
  11. package/esm2022/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +372 -0
  12. package/{esm2020 → esm2022}/lib/shared/app.shared.module.mjs +215 -215
  13. package/esm2022/lib/shared/validators/date.validator.mjs +59 -0
  14. package/{esm2020 → esm2022}/lib/shared/validators/index.mjs +1 -1
  15. package/esm2022/lib/smart-victim-delete-confirm.component.mjs +46 -0
  16. package/esm2022/lib/smart-victim-detail/smart-victim-detail.component.mjs +1141 -0
  17. package/esm2022/lib/smart-victim.component.mjs +343 -0
  18. package/esm2022/lib/smart-victim.model.mjs +233 -0
  19. package/{esm2020 → esm2022}/lib/smart-victim.module.mjs +128 -128
  20. package/esm2022/lib/smart-victim.service.mjs +357 -0
  21. package/{esm2020 → esm2022}/lib/victim-routing.module.mjs +41 -41
  22. package/esm2022/lib/victimSearch/VictimSearchFilter.mjs +8 -0
  23. package/esm2022/lib/victimSearch/victimSearchForm.component.mjs +37 -0
  24. package/{esm2020 → esm2022}/public-api.mjs +10 -10
  25. package/{fesm2020 → fesm2022}/csmart-ngc-smart-victim.mjs +3360 -3065
  26. package/fesm2022/csmart-ngc-smart-victim.mjs.map +1 -0
  27. package/index.d.ts +5 -5
  28. package/lib/caseNote/caseNote.component.d.ts +51 -51
  29. package/lib/common-dialog/common-dialog.component.d.ts +14 -14
  30. package/lib/common-dialog/common-dialog.module.d.ts +8 -8
  31. package/lib/common-dialog/common-dialog.service.d.ts +11 -11
  32. package/lib/contact/contact.component.d.ts +40 -40
  33. package/lib/email.services.d.ts +11 -11
  34. package/lib/intake.service.d.ts +57 -57
  35. package/lib/safetyPlan/serviceProvider.component.d.ts +19 -19
  36. package/lib/safetyPlan/victimSafetyPlan.component.d.ts +54 -54
  37. package/lib/safetyPlan/victimSafetyPlanDetail.component.d.ts +62 -62
  38. package/lib/shared/app.shared.module.d.ts +33 -33
  39. package/lib/shared/validators/date.validator.d.ts +9 -9
  40. package/lib/shared/validators/index.d.ts +1 -1
  41. package/lib/smart-victim-delete-confirm.component.d.ts +12 -12
  42. package/lib/smart-victim-detail/smart-victim-detail.component.d.ts +129 -129
  43. package/lib/smart-victim.component.d.ts +68 -68
  44. package/lib/smart-victim.model.d.ts +205 -205
  45. package/lib/smart-victim.module.d.ts +49 -49
  46. package/lib/smart-victim.service.d.ts +71 -71
  47. package/lib/victim-routing.module.d.ts +7 -7
  48. package/lib/victimSearch/VictimSearchFilter.d.ts +7 -7
  49. package/lib/victimSearch/victimSearchForm.component.d.ts +14 -14
  50. package/package.json +5 -11
  51. package/public-api.d.ts +7 -7
  52. package/esm2020/lib/caseNote/caseNote.component.mjs +0 -194
  53. package/esm2020/lib/common-dialog/common-dialog.component.mjs +0 -23
  54. package/esm2020/lib/common-dialog/common-dialog.service.mjs +0 -33
  55. package/esm2020/lib/contact/contact.component.mjs +0 -140
  56. package/esm2020/lib/email.services.mjs +0 -42
  57. package/esm2020/lib/intake.service.mjs +0 -57
  58. package/esm2020/lib/safetyPlan/serviceProvider.component.mjs +0 -99
  59. package/esm2020/lib/safetyPlan/victimSafetyPlan.component.mjs +0 -116
  60. package/esm2020/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +0 -340
  61. package/esm2020/lib/shared/validators/date.validator.mjs +0 -59
  62. package/esm2020/lib/smart-victim-delete-confirm.component.mjs +0 -44
  63. package/esm2020/lib/smart-victim-detail/smart-victim-detail.component.mjs +0 -1104
  64. package/esm2020/lib/smart-victim.component.mjs +0 -314
  65. package/esm2020/lib/smart-victim.model.mjs +0 -133
  66. package/esm2020/lib/smart-victim.service.mjs +0 -352
  67. package/esm2020/lib/victimSearch/VictimSearchFilter.mjs +0 -3
  68. package/esm2020/lib/victimSearch/victimSearchForm.component.mjs +0 -38
  69. package/fesm2015/csmart-ngc-smart-victim.mjs +0 -3273
  70. package/fesm2015/csmart-ngc-smart-victim.mjs.map +0 -1
  71. package/fesm2020/csmart-ngc-smart-victim.mjs.map +0 -1
@@ -0,0 +1,343 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Component, ViewChild, Input, Inject } from '@angular/core';
3
+ import { ActivatedRoute, Router } from '@angular/router';
4
+ import { MatTableDataSource } from '@angular/material/table';
5
+ import { MatSort } from '@angular/material/sort';
6
+ import { MatDialog } from '@angular/material/dialog';
7
+ import { AccessType, } from "@csmart/ngc-smart-core";
8
+ import { NgcSmartVictimService } from './smart-victim.service';
9
+ import { VictimListFilter, SMART_WARRANT_URL } from './smart-victim.model';
10
+ //import { SmartVictimDetailComponent } from './smart-victim-detail/smart-victim-detail.component';
11
+ import { IntakeStep, IntakeServicesComponent, } from './intake.service';
12
+ import { MatPaginator } from '@angular/material/paginator';
13
+ import { MatSnackBar } from '@angular/material/snack-bar';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@angular/material/dialog";
16
+ import * as i2 from "./smart-victim.service";
17
+ import * as i3 from "@angular/router";
18
+ import * as i4 from "@angular/material/snack-bar";
19
+ import * as i5 from "./intake.service";
20
+ import * as i6 from "@angular/common";
21
+ import * as i7 from "@angular/material/button";
22
+ import * as i8 from "@angular/material/card";
23
+ import * as i9 from "@angular/material/icon";
24
+ import * as i10 from "@angular/material/paginator";
25
+ import * as i11 from "@angular/material/table";
26
+ import * as i12 from "@csmart/ngc-smart-core";
27
+ import * as i13 from "./smart-victim-detail/smart-victim-detail.component";
28
+ import * as i14 from "./victimSearch/victimSearchForm.component";
29
+ export class NgcSmartVictimComponent {
30
+ dialog;
31
+ victimService;
32
+ router;
33
+ route;
34
+ snackBar;
35
+ intakeService;
36
+ smartWarrantUrl;
37
+ document;
38
+ offenderId;
39
+ staffId;
40
+ staffRole;
41
+ showCaseNote;
42
+ showSafetyPlan;
43
+ //@Input() showAdd: string;
44
+ showAdd;
45
+ showEdit;
46
+ showRelationshipColumn;
47
+ showOffenderNameColumn;
48
+ showOffenderPhoneColumn;
49
+ showSearchForm;
50
+ accessByModule;
51
+ intakeFlag;
52
+ appModuleId = '';
53
+ activatedRoute = null;
54
+ paginator;
55
+ sort;
56
+ // @ViewChild(SmartVictimDetailComponent) child;
57
+ displayedColumns;
58
+ victims = [];
59
+ victimDetail = {};
60
+ showDetail = false;
61
+ victimListFilter = new VictimListFilter();
62
+ victimListDataSource = new MatTableDataSource();
63
+ doSpin = false;
64
+ showListFlag = false;
65
+ msg = "";
66
+ isIntake = false;
67
+ updateAccessControlConfig;
68
+ createAccessControlConfig;
69
+ deleteAccessControlConfig;
70
+ constructor(dialog, victimService, router, route, snackBar, intakeService, smartWarrantUrl, document) {
71
+ this.dialog = dialog;
72
+ this.victimService = victimService;
73
+ this.router = router;
74
+ this.route = route;
75
+ this.snackBar = snackBar;
76
+ this.intakeService = intakeService;
77
+ this.smartWarrantUrl = smartWarrantUrl;
78
+ this.document = document;
79
+ }
80
+ // private onChange(filter: VictimListFilter) {
81
+ // console.log('filter in onchange');
82
+ // console.log(filter);
83
+ // this.getVictimList(filter);
84
+ // }
85
+ applyFilter(filterValue) {
86
+ this.victimListDataSource.filter = filterValue.trim().toLowerCase();
87
+ }
88
+ addRecord() {
89
+ this.showDetail = true;
90
+ this.showAdd = false;
91
+ this.victimDetail = null;
92
+ this.showListFlag = false;
93
+ }
94
+ editVictimDetail(record) {
95
+ console.log("victim edit record");
96
+ console.log(record);
97
+ console.log(record.victimId);
98
+ this.victimDetail = record;
99
+ this.showDetail = true;
100
+ this.showAdd = false;
101
+ this.showListFlag = false;
102
+ }
103
+ save(detail) {
104
+ this.showDetail = false;
105
+ this.showAdd = true;
106
+ this.showListFlag = true;
107
+ }
108
+ cancel() {
109
+ this.showDetail = false;
110
+ this.victimDetail = {};
111
+ }
112
+ ngAfterViewInit() {
113
+ this.victimListDataSource.paginator = this.paginator;
114
+ this.victimListDataSource.sort = this.sort;
115
+ }
116
+ ngOnChanges() {
117
+ this.updateAccessControlConfig = {
118
+ accessType: AccessType.UPDATE,
119
+ appModuleId: this.appModuleId,
120
+ roleId: null,
121
+ route: this.activatedRoute.snapshot,
122
+ };
123
+ this.createAccessControlConfig = {
124
+ accessType: AccessType.CREATE,
125
+ appModuleId: this.appModuleId,
126
+ roleId: null,
127
+ route: this.activatedRoute.snapshot,
128
+ };
129
+ this.deleteAccessControlConfig = {
130
+ accessType: AccessType.DELETE,
131
+ appModuleId: this.appModuleId,
132
+ roleId: null,
133
+ route: this.activatedRoute.snapshot,
134
+ };
135
+ }
136
+ ngOnInit() {
137
+ const queryParams = this.route.snapshot.queryParams;
138
+ if (queryParams['routeTo']) {
139
+ this.router.navigate([queryParams['routeTo']]);
140
+ }
141
+ var data = this.route.snapshot.data;
142
+ var myPath = this.router.url.slice(-10);
143
+ console.log("offender id at smart-victim");
144
+ console.log(this.offenderId);
145
+ console.log("staff id at smart-victim");
146
+ console.log(this.staffId);
147
+ console.log("insakeFlag at smart-victim");
148
+ console.log(this.intakeFlag);
149
+ console.log("smart-victim ngOnInit");
150
+ console.log(this.intakeFlag);
151
+ console.log(myPath);
152
+ if (this.intakeFlag == "true") {
153
+ this.isIntake = true;
154
+ }
155
+ this.displayedColumns = ["lastName", "firstName"];
156
+ if (this.showRelationshipColumn == true ||
157
+ myPath == "victimList" ||
158
+ myPath == "victimHome") {
159
+ this.displayedColumns.push("relationship");
160
+ }
161
+ if (this.showOffenderNameColumn == true) {
162
+ this.displayedColumns.push("offenderName");
163
+ }
164
+ if (this.showOffenderPhoneColumn == true ||
165
+ myPath == "victimList" ||
166
+ myPath == "victimHome") {
167
+ this.displayedColumns.push("homePhone");
168
+ }
169
+ this.displayedColumns.push("victimId");
170
+ if (this.showSearchForm == true) {
171
+ this.showListFlag = false;
172
+ }
173
+ console.log("this.showSearchForm");
174
+ console.log(this.showSearchForm);
175
+ console.log("myPath");
176
+ console.log(myPath);
177
+ if (this.showSearchForm == false ||
178
+ myPath == "victimList" ||
179
+ myPath == "victimHome") {
180
+ var myOffenderId;
181
+ if (this.offenderId) {
182
+ myOffenderId = this.offenderId;
183
+ }
184
+ else {
185
+ console.log("back from previous page");
186
+ this.showAdd = true;
187
+ this.showRelationshipColumn = true;
188
+ //this.displayedColumns.push("relationship");
189
+ this.showOffenderPhoneColumn = true;
190
+ // this.displayedColumns.push("homePhone");
191
+ this.accessByModule = "true";
192
+ this.showEdit = "true";
193
+ this.showCaseNote = "true";
194
+ this.showSafetyPlan = "true";
195
+ myOffenderId = data.selectedOffender.offenderId;
196
+ }
197
+ const victimListFilter = {
198
+ offenderId: myOffenderId,
199
+ lastName: null,
200
+ firstName: null,
201
+ pdid: null,
202
+ birthDate: null,
203
+ };
204
+ console.log("victimListFilter in smar-victim componenet");
205
+ console.log(victimListFilter);
206
+ this.victimService
207
+ .getVictimListByFilter(victimListFilter)
208
+ .subscribe((data) => {
209
+ this.victims = data;
210
+ this.victimListDataSource.data = data;
211
+ console.log("victim data at line 245");
212
+ console.log(this.victims);
213
+ console.log("showListFlag");
214
+ console.log(this.showListFlag);
215
+ this.showListFlag = true;
216
+ if (data.length == 0) {
217
+ this.msg = "No Record Found!";
218
+ }
219
+ });
220
+ }
221
+ else {
222
+ console.log("find filter");
223
+ console.log(this.victimListFilter);
224
+ if (this.showListFlag === true) {
225
+ if (this.victimListFilter != null) {
226
+ this.victimService
227
+ .getVictimListByFilter(this.victimListFilter)
228
+ .subscribe((data) => {
229
+ this.victims = data;
230
+ this.victimListDataSource.data = data;
231
+ console.log("victim data at line 279");
232
+ console.log(data);
233
+ });
234
+ }
235
+ }
236
+ }
237
+ }
238
+ // phone number format on the victim list
239
+ formatPhoneNumber(phoneNumberString) {
240
+ if (!phoneNumberString)
241
+ return "";
242
+ var cleaned = ("" + phoneNumberString).replace(/\D/g, "");
243
+ var match = cleaned.match(/^(\d{3})(\d{3})(\d{4})$/);
244
+ if (match) {
245
+ return "(" + match[1] + ") " + match[2] + "-" + match[3];
246
+ }
247
+ return "";
248
+ }
249
+ saveIntake() {
250
+ if (!this.isIntake) {
251
+ return;
252
+ }
253
+ const intakeStep = {
254
+ intakeStepId: IntakeStep.VictimInformation,
255
+ offenderId: this.offenderId,
256
+ modifiedBy: this.staffId,
257
+ };
258
+ this.intakeService
259
+ .updateIntakeSteps(this.offenderId, intakeStep)
260
+ .subscribe((res) => {
261
+ console.log("save intake step.");
262
+ this.snackBar.open("Status Saved.", "", {
263
+ duration: 3000,
264
+ });
265
+ //this.router.navigate(['/warrant '], { queryParams: { intake: 1 } });
266
+ this.document.location.href =
267
+ `${this.smartWarrantUrl}/?offenderId=${this.offenderId}&intakeFlag=${this.isIntake}&routeTo=warrant`;
268
+ });
269
+ }
270
+ goToCaseNote(victimId) {
271
+ this.router.navigate(["casenote", victimId, this.offenderId]);
272
+ }
273
+ goToSaftyPlan(victimId) {
274
+ this.router.navigate(["saftyPlan", victimId]);
275
+ }
276
+ getVictimList(filter) {
277
+ this.victimListFilter = filter;
278
+ console.log("this.victimListFilter inside getVictimList");
279
+ console.log(this.victimListFilter);
280
+ this.doSpin = true;
281
+ this.victimService.getVictimListByFilter(filter).subscribe((data) => {
282
+ this.doSpin = !this.doSpin;
283
+ if (data.length > 0) {
284
+ this.showListFlag = true;
285
+ this.victimListDataSource.data = data;
286
+ }
287
+ else {
288
+ this.msg = "No record found!";
289
+ }
290
+ }, (err) => {
291
+ this.doSpin = !this.doSpin;
292
+ });
293
+ }
294
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgcSmartVictimComponent, deps: [{ token: i1.MatDialog }, { token: i2.NgcSmartVictimService }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i4.MatSnackBar }, { token: i5.IntakeServicesComponent }, { token: SMART_WARRANT_URL }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
295
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: NgcSmartVictimComponent, selector: "csmart-victim", inputs: { offenderId: "offenderId", staffId: "staffId", staffRole: "staffRole", showCaseNote: "showCaseNote", showSafetyPlan: "showSafetyPlan", showAdd: "showAdd", showEdit: "showEdit", showRelationshipColumn: "showRelationshipColumn", showOffenderNameColumn: "showOffenderNameColumn", showOffenderPhoneColumn: "showOffenderPhoneColumn", showSearchForm: "showSearchForm", accessByModule: "accessByModule", intakeFlag: "intakeFlag", appModuleId: "appModuleId", activatedRoute: "activatedRoute" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"showSearchForm\">\r\n <app-victim-search-form\r\n (onSearch)=\"getVictimList($event)\">\r\n </app-victim-search-form>\r\n</div>\r\n\r\n<div *ngIf=\"showDetail\">\r\n <csmart-victim-detail [victimDetail]=\"victimDetail\" \r\n [staffId]=\"staffId\"\r\n [offenderId] =\"offenderId\"\r\n [isIntake]=\"isIntake\"\r\n (onSave)=\"save($event)\" \r\n (onCancel)=\"cancel()\" >\r\n</csmart-victim-detail>\r\n</div>\r\n<div class=\"main-container\">\r\n \r\n <div class=\"add-action\" *ngIf=\"showAdd\">\r\n <button mat-raised-button color=\"primary\" \r\n accessControl\r\n [accessControlConfig]=\"createAccessControlConfig\" \r\n (click)=\"addRecord()\">\r\n <mat-icon>add</mat-icon>\r\n Add Victim\r\n </button>\r\n &nbsp;&nbsp;\r\n\r\n <div *ngIf=\"isIntake\">\r\n <button \r\n mat-raised-button \r\n color=\"primary\" \r\n accessControl\r\n [accessControlConfig]=\"updateAccessControlConfig\" \r\n (click)=\"saveIntake()\">\r\n Continue\r\n </button> \r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"showListFlag\">\r\n <mat-card id=\"divVictim\" >\r\n <mat-card-content >\r\n <mat-table #table [dataSource]=\"victimListDataSource\" >\r\n\r\n <ng-container matColumnDef=\"lastName\">\r\n <mat-header-cell *matHeaderCellDef>Victim Last Name</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" > {{row.lastName}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"firstName\">\r\n <mat-header-cell *matHeaderCellDef >Victim First Name</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" > {{row.firstName}} </mat-cell>\r\n </ng-container>\r\n \r\n <div *ngIf=\"showRelationshipColumn\">\r\n <ng-container matColumnDef=\"relationship\">\r\n <mat-header-cell *matHeaderCellDef >Relationship to Offender</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" > {{row.relationship}} </mat-cell>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"showOffenderPhoneColumn\">\r\n <ng-container matColumnDef=\"homePhone\">\r\n <mat-header-cell *matHeaderCellDef >Phone Number</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" > \r\n Home phone: {{formatPhoneNumber(row.homePhone)}}<br> \r\n Cell Phone: {{formatPhoneNumber(row.cellPhone)}}<br>\r\n Work Phone: {{formatPhoneNumber(row.workPhone)}} \r\n\r\n </mat-cell>\r\n </ng-container>\r\n </div>\r\n \r\n <div *ngIf=\"showOffenderNameColumn\">\r\n <ng-container matColumnDef=\"offenderName\">\r\n <mat-header-cell *matHeaderCellDef>Offender Name</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" > {{row.offenderName}} </mat-cell>\r\n </ng-container>\r\n </div>\r\n \r\n <ng-container matColumnDef=\"victimId\">\r\n <mat-header-cell *matHeaderCellDef ></mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" >\r\n \r\n <!-- <div *ngIf=\"accessByModule\">\r\n <mat-checkbox></mat-checkbox>\r\n </div> -->\r\n \r\n <div *ngIf=\"showEdit\">\r\n <button class=\"edit-btn\" mat-icon-button color=\"primary\" matTooltip=\"View/Edit Victim\"\r\n accessControl\r\n [accessControlConfig]=\"updateAccessControlConfig\" \r\n (click)=\"editVictimDetail(row)\">\r\n <i class=\"material-icons\">mode_edit</i>\r\n </button>\r\n </div>\r\n\r\n \r\n\r\n &nbsp;&nbsp; \r\n\r\n <div *ngIf=\"showCaseNote\">\r\n <button type=\"button\" matTooltip=\"CaseNote\" mat-raised-button color=\"primary\" \r\n accessControl\r\n [accessControlConfig]=\"updateAccessControlConfig\" \r\n (click)=\"goToCaseNote(row.victimId)\"> \r\n <span class=\"glyphicon glyphicon-pencil\" ></span>&nbsp;Case Note\r\n </button> \r\n </div>\r\n &nbsp;&nbsp;\r\n \r\n <div *ngIf=\"showSafetyPlan\">\r\n <button type=\"button\" matTooltip=\"safety plan\" mat-raised-button color=\"primary\"\r\n accessControl\r\n [accessControlConfig]=\"updateAccessControlConfig\" \r\n (click)=\"goToSaftyPlan(row.victimId)\"> \r\n <span class=\"glyphicon glyphicon-pencil\" ></span>&nbsp;Safety Plan\r\n </button>\r\n </div>\r\n &nbsp;&nbsp;\r\n \r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns: displayedColumns\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n <mat-paginator #paginator [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 100]\"></mat-paginator> \r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <div>\r\n <b>{{msg}}</b>\r\n </div>\r\n</div>", styles: ["div.services{max-width:500px;margin:auto;border:3px solid #73AD21}.rTable{display:block;width:100%}.rTableHeading,.rTableBody,.rTableFoot,.rTableRow{clear:both}.rTableHead,.rTableFoot{background-color:#ddd;font-weight:700}.rTableCell,.rTableHead{border:0px;float:left;padding:1px;width:28%}.rTable:after{visibility:hidden;display:block;font-size:0;content:\" \";clear:both;height:0}.victimSearch{display:grid;grid-template-columns:1fr 1fr 1fr;grid-column-gap:10px}.edit-btn{margin-right:4px}.main-container{display:flex;margin-top:8px}.add-action{display:flex;justify-content:flex-end;margin-bottom:8px}.example-headers-align .mat-expansion-panel-header-title,.example-headers-align .mat-expansion-panel-header-description{flex-basis:0}.example-headers-align .mat-expansion-panel-header-description{justify-content:space-between;align-items:center}mat-form-field{margin-right:12px}.actions{display:flex;justify-content:space-around}.Row{display:table;width:100%;table-layout:fixed}.Column{display:table-cell}.sp-form textarea{float:left;margin-top:20px;margin-bottom:10px;width:462px;height:70px;overflow:auto;box-sizing:border-box}.mat-column-lastName,.mat-column-firstName,.mat-column-relationship,.mat-column-homePhone,.mat-column-offenderName{word-wrap:break-word!important;white-space:unset!important;flex:0 0 15%!important;width:15%!important;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mat-column-victimId{word-wrap:break-word!important;white-space:unset!important;flex:0 0 25%!important;width:25%!important;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i8.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i12.SmartAccessControlDirective, selector: "[accessControl]", inputs: ["accessControlConfig"] }, { kind: "component", type: i13.SmartVictimDetailComponent, selector: "csmart-victim-detail", inputs: ["victimDetail", "staffId", "offenderId", "isIntake"], outputs: ["onSave", "onCancel"] }, { kind: "component", type: i14.VictimSearchFormComponent, selector: "app-victim-search-form", outputs: ["onSearch"] }] });
296
+ }
297
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgcSmartVictimComponent, decorators: [{
298
+ type: Component,
299
+ args: [{ selector: "csmart-victim", template: "<div *ngIf=\"showSearchForm\">\r\n <app-victim-search-form\r\n (onSearch)=\"getVictimList($event)\">\r\n </app-victim-search-form>\r\n</div>\r\n\r\n<div *ngIf=\"showDetail\">\r\n <csmart-victim-detail [victimDetail]=\"victimDetail\" \r\n [staffId]=\"staffId\"\r\n [offenderId] =\"offenderId\"\r\n [isIntake]=\"isIntake\"\r\n (onSave)=\"save($event)\" \r\n (onCancel)=\"cancel()\" >\r\n</csmart-victim-detail>\r\n</div>\r\n<div class=\"main-container\">\r\n \r\n <div class=\"add-action\" *ngIf=\"showAdd\">\r\n <button mat-raised-button color=\"primary\" \r\n accessControl\r\n [accessControlConfig]=\"createAccessControlConfig\" \r\n (click)=\"addRecord()\">\r\n <mat-icon>add</mat-icon>\r\n Add Victim\r\n </button>\r\n &nbsp;&nbsp;\r\n\r\n <div *ngIf=\"isIntake\">\r\n <button \r\n mat-raised-button \r\n color=\"primary\" \r\n accessControl\r\n [accessControlConfig]=\"updateAccessControlConfig\" \r\n (click)=\"saveIntake()\">\r\n Continue\r\n </button> \r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"showListFlag\">\r\n <mat-card id=\"divVictim\" >\r\n <mat-card-content >\r\n <mat-table #table [dataSource]=\"victimListDataSource\" >\r\n\r\n <ng-container matColumnDef=\"lastName\">\r\n <mat-header-cell *matHeaderCellDef>Victim Last Name</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" > {{row.lastName}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"firstName\">\r\n <mat-header-cell *matHeaderCellDef >Victim First Name</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" > {{row.firstName}} </mat-cell>\r\n </ng-container>\r\n \r\n <div *ngIf=\"showRelationshipColumn\">\r\n <ng-container matColumnDef=\"relationship\">\r\n <mat-header-cell *matHeaderCellDef >Relationship to Offender</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" > {{row.relationship}} </mat-cell>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"showOffenderPhoneColumn\">\r\n <ng-container matColumnDef=\"homePhone\">\r\n <mat-header-cell *matHeaderCellDef >Phone Number</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" > \r\n Home phone: {{formatPhoneNumber(row.homePhone)}}<br> \r\n Cell Phone: {{formatPhoneNumber(row.cellPhone)}}<br>\r\n Work Phone: {{formatPhoneNumber(row.workPhone)}} \r\n\r\n </mat-cell>\r\n </ng-container>\r\n </div>\r\n \r\n <div *ngIf=\"showOffenderNameColumn\">\r\n <ng-container matColumnDef=\"offenderName\">\r\n <mat-header-cell *matHeaderCellDef>Offender Name</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" > {{row.offenderName}} </mat-cell>\r\n </ng-container>\r\n </div>\r\n \r\n <ng-container matColumnDef=\"victimId\">\r\n <mat-header-cell *matHeaderCellDef ></mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" >\r\n \r\n <!-- <div *ngIf=\"accessByModule\">\r\n <mat-checkbox></mat-checkbox>\r\n </div> -->\r\n \r\n <div *ngIf=\"showEdit\">\r\n <button class=\"edit-btn\" mat-icon-button color=\"primary\" matTooltip=\"View/Edit Victim\"\r\n accessControl\r\n [accessControlConfig]=\"updateAccessControlConfig\" \r\n (click)=\"editVictimDetail(row)\">\r\n <i class=\"material-icons\">mode_edit</i>\r\n </button>\r\n </div>\r\n\r\n \r\n\r\n &nbsp;&nbsp; \r\n\r\n <div *ngIf=\"showCaseNote\">\r\n <button type=\"button\" matTooltip=\"CaseNote\" mat-raised-button color=\"primary\" \r\n accessControl\r\n [accessControlConfig]=\"updateAccessControlConfig\" \r\n (click)=\"goToCaseNote(row.victimId)\"> \r\n <span class=\"glyphicon glyphicon-pencil\" ></span>&nbsp;Case Note\r\n </button> \r\n </div>\r\n &nbsp;&nbsp;\r\n \r\n <div *ngIf=\"showSafetyPlan\">\r\n <button type=\"button\" matTooltip=\"safety plan\" mat-raised-button color=\"primary\"\r\n accessControl\r\n [accessControlConfig]=\"updateAccessControlConfig\" \r\n (click)=\"goToSaftyPlan(row.victimId)\"> \r\n <span class=\"glyphicon glyphicon-pencil\" ></span>&nbsp;Safety Plan\r\n </button>\r\n </div>\r\n &nbsp;&nbsp;\r\n \r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns: displayedColumns\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n <mat-paginator #paginator [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 100]\"></mat-paginator> \r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <div>\r\n <b>{{msg}}</b>\r\n </div>\r\n</div>", styles: ["div.services{max-width:500px;margin:auto;border:3px solid #73AD21}.rTable{display:block;width:100%}.rTableHeading,.rTableBody,.rTableFoot,.rTableRow{clear:both}.rTableHead,.rTableFoot{background-color:#ddd;font-weight:700}.rTableCell,.rTableHead{border:0px;float:left;padding:1px;width:28%}.rTable:after{visibility:hidden;display:block;font-size:0;content:\" \";clear:both;height:0}.victimSearch{display:grid;grid-template-columns:1fr 1fr 1fr;grid-column-gap:10px}.edit-btn{margin-right:4px}.main-container{display:flex;margin-top:8px}.add-action{display:flex;justify-content:flex-end;margin-bottom:8px}.example-headers-align .mat-expansion-panel-header-title,.example-headers-align .mat-expansion-panel-header-description{flex-basis:0}.example-headers-align .mat-expansion-panel-header-description{justify-content:space-between;align-items:center}mat-form-field{margin-right:12px}.actions{display:flex;justify-content:space-around}.Row{display:table;width:100%;table-layout:fixed}.Column{display:table-cell}.sp-form textarea{float:left;margin-top:20px;margin-bottom:10px;width:462px;height:70px;overflow:auto;box-sizing:border-box}.mat-column-lastName,.mat-column-firstName,.mat-column-relationship,.mat-column-homePhone,.mat-column-offenderName{word-wrap:break-word!important;white-space:unset!important;flex:0 0 15%!important;width:15%!important;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mat-column-victimId{word-wrap:break-word!important;white-space:unset!important;flex:0 0 25%!important;width:25%!important;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}\n"] }]
300
+ }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.NgcSmartVictimService }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i4.MatSnackBar }, { type: i5.IntakeServicesComponent }, { type: undefined, decorators: [{
301
+ type: Inject,
302
+ args: [SMART_WARRANT_URL]
303
+ }] }, { type: undefined, decorators: [{
304
+ type: Inject,
305
+ args: [DOCUMENT]
306
+ }] }], propDecorators: { offenderId: [{
307
+ type: Input
308
+ }], staffId: [{
309
+ type: Input
310
+ }], staffRole: [{
311
+ type: Input
312
+ }], showCaseNote: [{
313
+ type: Input
314
+ }], showSafetyPlan: [{
315
+ type: Input
316
+ }], showAdd: [{
317
+ type: Input
318
+ }], showEdit: [{
319
+ type: Input
320
+ }], showRelationshipColumn: [{
321
+ type: Input
322
+ }], showOffenderNameColumn: [{
323
+ type: Input
324
+ }], showOffenderPhoneColumn: [{
325
+ type: Input
326
+ }], showSearchForm: [{
327
+ type: Input
328
+ }], accessByModule: [{
329
+ type: Input
330
+ }], intakeFlag: [{
331
+ type: Input
332
+ }], appModuleId: [{
333
+ type: Input
334
+ }], activatedRoute: [{
335
+ type: Input
336
+ }], paginator: [{
337
+ type: ViewChild,
338
+ args: [MatPaginator]
339
+ }], sort: [{
340
+ type: ViewChild,
341
+ args: [MatSort]
342
+ }] } });
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmljdGltLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9zbWFydC12aWN0aW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdjLXNtYXJ0LXZpY3RpbS9zcmMvbGliL3NtYXJ0LXZpY3RpbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFZLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBeUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxjQUFjLEVBQUMsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBaUMsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRyxtR0FBbUc7QUFFbkcsT0FBTyxFQUVMLFVBQVUsRUFDVix1QkFBdUIsR0FDeEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBTTFELE1BQU0sT0FBTyx1QkFBdUI7SUFxQ3hCO0lBQ0E7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aUI7OzBCQUN4QixNQUFNOzJCQUFDLFFBQVE7eUNBM0NULFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFbUIsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUNILElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5ULCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkNoYW5nZXMsIFZpZXdDaGlsZCwgSW5wdXQsIE91dHB1dCwgQWZ0ZXJWaWV3SW5pdCwgSW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYsIE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7XHJcbiAgU2VsZWN0ZWRPZmZlbmRlcixcclxuICBMb2dpblN0YWZmLFxyXG4gIFNtYXJ0QWNjZXNzQ29udHJvbENvbmZpZyxcclxuICBBY2Nlc3NUeXBlLFxyXG59IGZyb20gXCJAY3NtYXJ0L25nYy1zbWFydC1jb3JlXCI7XHJcbmltcG9ydCB7IE5nY1NtYXJ0VmljdGltU2VydmljZSB9IGZyb20gJy4vc21hcnQtdmljdGltLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbGVtZW50c1ZpY3RpbSwgVmljdGltTGlzdEZpbHRlciwgVmljdGltLCBTTUFSVF9XQVJSQU5UX1VSTCB9IGZyb20gJy4vc21hcnQtdmljdGltLm1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRWaWN0aW1EZWxldGVDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi9zbWFydC12aWN0aW0tZGVsZXRlLWNvbmZpcm0uY29tcG9uZW50JztcclxuLy9pbXBvcnQgeyBTbWFydFZpY3RpbURldGFpbENvbXBvbmVudCB9IGZyb20gJy4vc21hcnQtdmljdGltLWRldGFpbC9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEludGFrZVN0ZXBTdGF0dXNNb2RlbCxcclxuICBJbnRha2VTdGVwLFxyXG4gIEludGFrZVNlcnZpY2VzQ29tcG9uZW50LFxyXG59IGZyb20gJy4vaW50YWtlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImNzbWFydC12aWN0aW1cIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3NtYXJ0LXZpY3RpbS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9zbWFydC12aWN0aW0uY29tcG9uZW50LmNzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nY1NtYXJ0VmljdGltQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIG9mZmVuZGVySWQ6IG51bWJlcjtcclxuICBASW5wdXQoKSBzdGFmZklkOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc3RhZmZSb2xlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2hvd0Nhc2VOb3RlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2hvd1NhZmV0eVBsYW46IHN0cmluZztcclxuICAvL0BJbnB1dCgpIHNob3dBZGQ6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93QWRkOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNob3dFZGl0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2hvd1JlbGF0aW9uc2hpcENvbHVtbjogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93T2ZmZW5kZXJOYW1lQ29sdW1uOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNob3dPZmZlbmRlclBob25lQ29sdW1uOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hGb3JtOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFjY2Vzc0J5TW9kdWxlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaW50YWtlRmxhZzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwcE1vZHVsZUlkID0gJyc7XHJcbiAgQElucHV0KCkgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlID0gbnVsbDtcclxuXHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydDogTWF0U29ydDtcclxuICAvLyBAVmlld0NoaWxkKFNtYXJ0VmljdGltRGV0YWlsQ29tcG9uZW50KSBjaGlsZDtcclxuXHJcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW107XHJcbiAgdmljdGltczogVmljdGltW10gPSBbXTtcclxuICB2aWN0aW1EZXRhaWwgPSA8VmljdGltPnt9O1xyXG4gIHNob3dEZXRhaWwgPSBmYWxzZTtcclxuICB2aWN0aW1MaXN0RmlsdGVyOiBWaWN0aW1MaXN0RmlsdGVyID0gbmV3IFZpY3RpbUxpc3RGaWx0ZXIoKTtcclxuICB2aWN0aW1MaXN0RGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuICBkb1NwaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93TGlzdEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtc2c6IHN0cmluZyA9IFwiXCI7XHJcbiAgaXNJbnRha2UgPSBmYWxzZTtcclxuXHJcbiAgdXBkYXRlQWNjZXNzQ29udHJvbENvbmZpZzogU21hcnRBY2Nlc3NDb250cm9sQ29uZmlnO1xyXG4gIGNyZWF0ZUFjY2Vzc0NvbnRyb2xDb25maWc6IFNtYXJ0QWNjZXNzQ29udHJvbENvbmZpZztcclxuICBkZWxldGVBY2Nlc3NDb250cm9sQ29uZmlnOiBTbWFydEFjY2Vzc0NvbnRyb2xDb25maWc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSB2aWN0aW1TZXJ2aWNlOiBOZ2NTbWFydFZpY3RpbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgIHByaXZhdGUgaW50YWtlU2VydmljZTogSW50YWtlU2VydmljZXNDb21wb25lbnQsXHJcbiAgICBASW5qZWN0KFNNQVJUX1dBUlJBTlRfVVJMKSBwcml2YXRlIHNtYXJ0V2FycmFudFVybDogc3RyaW5nLFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55XHJcbiAgKSB7fVxyXG5cclxuICAvLyBwcml2YXRlIG9uQ2hhbmdlKGZpbHRlcjogVmljdGltTGlzdEZpbHRlcikge1xyXG4gIC8vICAgY29uc29sZS5sb2coJ2ZpbHRlciBpbiBvbmNoYW5nZScpO1xyXG4gIC8vICAgY29uc29sZS5sb2coZmlsdGVyKTtcclxuICAvLyAgIHRoaXMuZ2V0VmljdGltTGlzdChmaWx0ZXIpO1xyXG4gIC8vIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXIoZmlsdGVyVmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy52aWN0aW1MaXN0RGF0YVNvdXJjZS5maWx0ZXIgPSBmaWx0ZXJWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcbiAgYWRkUmVjb3JkKCkge1xyXG4gICAgdGhpcy5zaG93RGV0YWlsID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd0FkZCA9IGZhbHNlO1xyXG4gICAgdGhpcy52aWN0aW1EZXRhaWwgPSBudWxsO1xyXG4gICAgdGhpcy5zaG93TGlzdEZsYWcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGVkaXRWaWN0aW1EZXRhaWwocmVjb3JkKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcInZpY3RpbSBlZGl0IHJlY29yZFwiKTtcclxuICAgIGNvbnNvbGUubG9nKHJlY29yZCk7XHJcbiAgICBjb25zb2xlLmxvZyhyZWNvcmQudmljdGltSWQpO1xyXG4gICAgdGhpcy52aWN0aW1EZXRhaWwgPSByZWNvcmQ7XHJcbiAgICB0aGlzLnNob3dEZXRhaWwgPSB0cnVlO1xyXG4gICAgdGhpcy5zaG93QWRkID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dMaXN0RmxhZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2F2ZShkZXRhaWw6IFZpY3RpbSkge1xyXG4gICAgdGhpcy5zaG93RGV0YWlsID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dBZGQgPSB0cnVlO1xyXG4gICAgdGhpcy5zaG93TGlzdEZsYWcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5zaG93RGV0YWlsID0gZmFsc2U7XHJcbiAgICB0aGlzLnZpY3RpbURldGFpbCA9IDxWaWN0aW0+e307XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnZpY3RpbUxpc3REYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xyXG4gICAgdGhpcy52aWN0aW1MaXN0RGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAgdGhpcy51cGRhdGVBY2Nlc3NDb250cm9sQ29uZmlnID0ge1xyXG4gICAgICAgYWNjZXNzVHlwZTogQWNjZXNzVHlwZS5VUERBVEUsXHJcbiAgICAgICBhcHBNb2R1bGVJZDogdGhpcy5hcHBNb2R1bGVJZCxcclxuICAgICAgIHJvbGVJZDogbnVsbCxcclxuICAgICAgIHJvdXRlOiB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LFxyXG4gICAgIH07XHJcbiAgICAgdGhpcy5jcmVhdGVBY2Nlc3NDb250cm9sQ29uZmlnID0ge1xyXG4gICAgICAgYWNjZXNzVHlwZTogQWNjZXNzVHlwZS5DUkVBVEUsXHJcbiAgICAgICBhcHBNb2R1bGVJZDogdGhpcy5hcHBNb2R1bGVJZCxcclxuICAgICAgIHJvbGVJZDogbnVsbCxcclxuICAgICAgIHJvdXRlOiB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LFxyXG4gICAgIH07XHJcbiAgICAgdGhpcy5kZWxldGVBY2Nlc3NDb250cm9sQ29uZmlnID0ge1xyXG4gICAgICAgYWNjZXNzVHlwZTogQWNjZXNzVHlwZS5ERUxFVEUsXHJcbiAgICAgICBhcHBNb2R1bGVJZDogdGhpcy5hcHBNb2R1bGVJZCxcclxuICAgICAgIHJvbGVJZDogbnVsbCxcclxuICAgICAgIHJvdXRlOiB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LFxyXG4gICAgIH07XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcclxuICAgIGlmKHF1ZXJ5UGFyYW1zWydyb3V0ZVRvJ10pIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3F1ZXJ5UGFyYW1zWydyb3V0ZVRvJ11dKTtcclxuICAgIH1cclxuICAgIHZhciBkYXRhID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhO1xyXG4gICAgdmFyIG15UGF0aCA9IHRoaXMucm91dGVyLnVybC5zbGljZSgtMTApO1xyXG5cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIm9mZmVuZGVyIGlkIGF0IHNtYXJ0LXZpY3RpbVwiKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMub2ZmZW5kZXJJZCk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN0YWZmIGlkIGF0IHNtYXJ0LXZpY3RpbVwiKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuc3RhZmZJZCk7XHJcbiAgICBjb25zb2xlLmxvZyhcImluc2FrZUZsYWcgYXQgc21hcnQtdmljdGltXCIpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5pbnRha2VGbGFnKTtcclxuXHJcblxyXG4gICAgY29uc29sZS5sb2coXCJzbWFydC12aWN0aW0gbmdPbkluaXRcIik7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmludGFrZUZsYWcpO1xyXG4gICAgY29uc29sZS5sb2cobXlQYXRoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pbnRha2VGbGFnID09IFwidHJ1ZVwiKSB7XHJcbiAgICAgIHRoaXMuaXNJbnRha2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFtcImxhc3ROYW1lXCIsIFwiZmlyc3ROYW1lXCJdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zaG93UmVsYXRpb25zaGlwQ29sdW1uID09IHRydWUgfHxcclxuICAgICAgbXlQYXRoID09IFwidmljdGltTGlzdFwiIHx8XHJcbiAgICAgIG15UGF0aCA9PSBcInZpY3RpbUhvbWVcIlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5wdXNoKFwicmVsYXRpb25zaGlwXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2hvd09mZmVuZGVyTmFtZUNvbHVtbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5wdXNoKFwib2ZmZW5kZXJOYW1lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zaG93T2ZmZW5kZXJQaG9uZUNvbHVtbiA9PSB0cnVlIHx8XHJcbiAgICAgIG15UGF0aCA9PSBcInZpY3RpbUxpc3RcIiB8fFxyXG4gICAgICBteVBhdGggPT0gXCJ2aWN0aW1Ib21lXCJcclxuICAgICkge1xyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaChcImhvbWVQaG9uZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaChcInZpY3RpbUlkXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dTZWFyY2hGb3JtID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zaG93TGlzdEZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcInRoaXMuc2hvd1NlYXJjaEZvcm1cIik7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNob3dTZWFyY2hGb3JtKTtcclxuICAgIGNvbnNvbGUubG9nKFwibXlQYXRoXCIpO1xyXG4gICAgY29uc29sZS5sb2cobXlQYXRoKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2hvd1NlYXJjaEZvcm0gPT0gZmFsc2UgfHxcclxuICAgICAgbXlQYXRoID09IFwidmljdGltTGlzdFwiIHx8XHJcbiAgICAgIG15UGF0aCA9PSBcInZpY3RpbUhvbWVcIlxyXG4gICAgKSB7XHJcbiAgICAgIHZhciBteU9mZmVuZGVySWQ7XHJcbiAgICAgIGlmICh0aGlzLm9mZmVuZGVySWQpIHtcclxuICAgICAgICBteU9mZmVuZGVySWQgPSB0aGlzLm9mZmVuZGVySWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJiYWNrIGZyb20gcHJldmlvdXMgcGFnZVwiKTtcclxuICAgICAgICB0aGlzLnNob3dBZGQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1JlbGF0aW9uc2hpcENvbHVtbiA9IHRydWU7XHJcbiAgICAgICAgLy90aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaChcInJlbGF0aW9uc2hpcFwiKTtcclxuICAgICAgICB0aGlzLnNob3dPZmZlbmRlclBob25lQ29sdW1uID0gdHJ1ZTtcclxuICAgICAgICAvLyB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaChcImhvbWVQaG9uZVwiKTtcclxuICAgICAgICB0aGlzLmFjY2Vzc0J5TW9kdWxlID0gXCJ0cnVlXCI7XHJcbiAgICAgICAgdGhpcy5zaG93RWRpdCA9IFwidHJ1ZVwiO1xyXG4gICAgICAgIHRoaXMuc2hvd0Nhc2VOb3RlID0gXCJ0cnVlXCI7XHJcbiAgICAgICAgdGhpcy5zaG93U2FmZXR5UGxhbiA9IFwidHJ1ZVwiO1xyXG5cclxuICAgICAgICBteU9mZmVuZGVySWQgPSBkYXRhLnNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdmljdGltTGlzdEZpbHRlcjogVmljdGltTGlzdEZpbHRlciA9IHtcclxuICAgICAgICBvZmZlbmRlcklkOiBteU9mZmVuZGVySWQsXHJcbiAgICAgICAgbGFzdE5hbWU6IG51bGwsXHJcbiAgICAgICAgZmlyc3ROYW1lOiBudWxsLFxyXG4gICAgICAgIHBkaWQ6IG51bGwsXHJcbiAgICAgICAgYmlydGhEYXRlOiBudWxsLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCJ2aWN0aW1MaXN0RmlsdGVyIGluIHNtYXItdmljdGltIGNvbXBvbmVuZXRcIik7XHJcbiAgICAgIGNvbnNvbGUubG9nKHZpY3RpbUxpc3RGaWx0ZXIpO1xyXG5cclxuICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlXHJcbiAgICAgICAgLmdldFZpY3RpbUxpc3RCeUZpbHRlcih2aWN0aW1MaXN0RmlsdGVyKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IFZpY3RpbVtdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbXMgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1MaXN0RGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInZpY3RpbSBkYXRhIGF0IGxpbmUgMjQ1XCIpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1zKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwic2hvd0xpc3RGbGFnXCIpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy5zaG93TGlzdEZsYWcpO1xyXG4gICAgICAgICAgdGhpcy5zaG93TGlzdEZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5tc2cgPSBcIk5vIFJlY29yZCBGb3VuZCFcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiZmluZCBmaWx0ZXJcIik7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltTGlzdEZpbHRlcik7XHJcblxyXG4gICAgICBpZiAodGhpcy5zaG93TGlzdEZsYWcgPT09IHRydWUpIHtcclxuICAgICAgICBpZiAodGhpcy52aWN0aW1MaXN0RmlsdGVyICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMudmljdGltU2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0VmljdGltTGlzdEJ5RmlsdGVyKHRoaXMudmljdGltTGlzdEZpbHRlcilcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogVmljdGltW10pID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnZpY3RpbXMgPSBkYXRhO1xyXG4gICAgICAgICAgICAgIHRoaXMudmljdGltTGlzdERhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidmljdGltIGRhdGEgYXQgbGluZSAyNzlcIik7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuLy8gcGhvbmUgbnVtYmVyIGZvcm1hdCBvbiB0aGUgdmljdGltIGxpc3RcclxuICBmb3JtYXRQaG9uZU51bWJlcihwaG9uZU51bWJlclN0cmluZykge1xyXG4gICAgaWYgKCFwaG9uZU51bWJlclN0cmluZykgcmV0dXJuIFwiXCI7XHJcbiAgICB2YXIgY2xlYW5lZCA9IChcIlwiICsgcGhvbmVOdW1iZXJTdHJpbmcpLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuICAgIHZhciBtYXRjaCA9IGNsZWFuZWQubWF0Y2goL14oXFxkezN9KShcXGR7M30pKFxcZHs0fSkkLyk7XHJcbiAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgcmV0dXJuIFwiKFwiICsgbWF0Y2hbMV0gKyBcIikgXCIgKyBtYXRjaFsyXSArIFwiLVwiICsgbWF0Y2hbM107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIHNhdmVJbnRha2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJbnRha2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50YWtlU3RlcCA9IDxJbnRha2VTdGVwU3RhdHVzTW9kZWw+e1xyXG4gICAgICBpbnRha2VTdGVwSWQ6IEludGFrZVN0ZXAuVmljdGltSW5mb3JtYXRpb24sXHJcbiAgICAgIG9mZmVuZGVySWQ6IHRoaXMub2ZmZW5kZXJJZCxcclxuICAgICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkLFxyXG4gICAgfTtcclxuICAgIHRoaXMuaW50YWtlU2VydmljZVxyXG4gICAgICAudXBkYXRlSW50YWtlU3RlcHModGhpcy5vZmZlbmRlcklkLCBpbnRha2VTdGVwKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInNhdmUgaW50YWtlIHN0ZXAuXCIpO1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcIlN0YXR1cyBTYXZlZC5cIiwgXCJcIiwge1xyXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy93YXJyYW50ICddLCB7IHF1ZXJ5UGFyYW1zOiB7IGludGFrZTogMSB9IH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPVxyXG4gICAgICAgICAgYCR7dGhpcy5zbWFydFdhcnJhbnRVcmx9Lz9vZmZlbmRlcklkPSR7dGhpcy5vZmZlbmRlcklkfSZpbnRha2VGbGFnPSR7dGhpcy5pc0ludGFrZX0mcm91dGVUbz13YXJyYW50YDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnb1RvQ2FzZU5vdGUodmljdGltSWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiY2FzZW5vdGVcIiwgdmljdGltSWQsIHRoaXMub2ZmZW5kZXJJZF0pO1xyXG4gIH1cclxuXHJcbiAgZ29Ub1NhZnR5UGxhbih2aWN0aW1JZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJzYWZ0eVBsYW5cIiwgdmljdGltSWRdKTtcclxuICB9XHJcblxyXG4gIGdldFZpY3RpbUxpc3QoZmlsdGVyOiBWaWN0aW1MaXN0RmlsdGVyKSB7XHJcbiAgICB0aGlzLnZpY3RpbUxpc3RGaWx0ZXIgPSBmaWx0ZXI7XHJcbiAgICBjb25zb2xlLmxvZyhcInRoaXMudmljdGltTGlzdEZpbHRlciBpbnNpZGUgZ2V0VmljdGltTGlzdFwiKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltTGlzdEZpbHRlcik7XHJcbiAgICB0aGlzLmRvU3BpbiA9IHRydWU7XHJcbiAgICB0aGlzLnZpY3RpbVNlcnZpY2UuZ2V0VmljdGltTGlzdEJ5RmlsdGVyKGZpbHRlcikuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YTogVmljdGltW10pID0+IHtcclxuICAgICAgIHRoaXMuZG9TcGluID0gIXRoaXMuZG9TcGluO1xyXG5cclxuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dMaXN0RmxhZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUxpc3REYXRhU291cmNlLmRhdGEgPSBkYXRhO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tc2cgPSBcIk5vIHJlY29yZCBmb3VuZCFcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLmRvU3BpbiA9ICF0aGlzLmRvU3BpbjtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cInNob3dTZWFyY2hGb3JtXCI+XHJcbiAgICA8YXBwLXZpY3RpbS1zZWFyY2gtZm9ybVxyXG4gICAgKG9uU2VhcmNoKT1cImdldFZpY3RpbUxpc3QoJGV2ZW50KVwiPlxyXG4gICAgPC9hcHAtdmljdGltLXNlYXJjaC1mb3JtPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJzaG93RGV0YWlsXCI+XHJcbiAgPGNzbWFydC12aWN0aW0tZGV0YWlsIFt2aWN0aW1EZXRhaWxdPVwidmljdGltRGV0YWlsXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGFmZklkXT1cInN0YWZmSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb2ZmZW5kZXJJZF0gPVwib2ZmZW5kZXJJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0ludGFrZV09XCJpc0ludGFrZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvblNhdmUpPVwic2F2ZSgkZXZlbnQpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNhbmNlbCk9XCJjYW5jZWwoKVwiID5cclxuPC9jc21hcnQtdmljdGltLWRldGFpbD5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJtYWluLWNvbnRhaW5lclwiPlxyXG4gICAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiYWRkLWFjdGlvblwiICpuZ0lmPVwic2hvd0FkZFwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgICAgYWNjZXNzQ29udHJvbFxyXG4gICAgICAgICAgW2FjY2Vzc0NvbnRyb2xDb25maWddPVwiY3JlYXRlQWNjZXNzQ29udHJvbENvbmZpZ1wiICBcclxuICAgICAgICAgIChjbGljayk9XCJhZGRSZWNvcmQoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICBBZGQgVmljdGltXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgJm5ic3A7Jm5ic3A7XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImlzSW50YWtlXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICBhY2Nlc3NDb250cm9sXHJcbiAgICAgICAgW2FjY2Vzc0NvbnRyb2xDb25maWddPVwidXBkYXRlQWNjZXNzQ29udHJvbENvbmZpZ1wiICAgICAgICAgIFxyXG4gICAgICAgIChjbGljayk9XCJzYXZlSW50YWtlKClcIj5cclxuICAgICAgICBDb250aW51ZVxyXG4gICAgICAgIDwvYnV0dG9uPiBcclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICA8ZGl2ICpuZ0lmPVwic2hvd0xpc3RGbGFnXCI+XHJcbiAgICA8bWF0LWNhcmQgaWQ9XCJkaXZWaWN0aW1cIiA+XHJcbiAgICAgICAgICA8bWF0LWNhcmQtY29udGVudCA+XHJcbiAgICAgICAgICAgIDxtYXQtdGFibGUgI3RhYmxlIFtkYXRhU291cmNlXT1cInZpY3RpbUxpc3REYXRhU291cmNlXCIgPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibGFzdE5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlZpY3RpbSBMYXN0IE5hbWU8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgPiB7e3Jvdy5sYXN0TmFtZX19ICA8L21hdC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZmlyc3ROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgPlZpY3RpbSBGaXJzdCBOYW1lPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiA+IHt7cm93LmZpcnN0TmFtZX19IDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICAqbmdJZj1cInNob3dSZWxhdGlvbnNoaXBDb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInJlbGF0aW9uc2hpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmID5SZWxhdGlvbnNoaXAgdG8gT2ZmZW5kZXI8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiID4ge3tyb3cucmVsYXRpb25zaGlwfX0gPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgICpuZ0lmPVwic2hvd09mZmVuZGVyUGhvbmVDb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImhvbWVQaG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmID5QaG9uZSBOdW1iZXI8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiID4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvbWUgcGhvbmU6IHt7Zm9ybWF0UGhvbmVOdW1iZXIocm93LmhvbWVQaG9uZSl9fTxicj4gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBDZWxsIFBob25lOiB7e2Zvcm1hdFBob25lTnVtYmVyKHJvdy5jZWxsUGhvbmUpfX08YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmsgUGhvbmU6IHt7Zm9ybWF0UGhvbmVOdW1iZXIocm93LndvcmtQaG9uZSl9fSBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiAgKm5nSWY9XCJzaG93T2ZmZW5kZXJOYW1lQ29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJvZmZlbmRlck5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+T2ZmZW5kZXIgTmFtZTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiID4ge3tyb3cub2ZmZW5kZXJOYW1lfX0gPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ2aWN0aW1JZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmID48L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICAqbmdJZj1cImFjY2Vzc0J5TW9kdWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94PjwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICAqbmdJZj1cInNob3dFZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZWRpdC1idG5cIiAgbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICBtYXRUb29sdGlwPVwiVmlldy9FZGl0IFZpY3RpbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzQ29udHJvbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2Nlc3NDb250cm9sQ29uZmlnXT1cInVwZGF0ZUFjY2Vzc0NvbnRyb2xDb25maWdcIiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRWaWN0aW1EZXRhaWwocm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5tb2RlX2VkaXQ8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgICpuZ0lmPVwic2hvd0Nhc2VOb3RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXRUb29sdGlwPVwiQ2FzZU5vdGVcIiAgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NDb250cm9sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXNzQ29udHJvbENvbmZpZ109XCJ1cGRhdGVBY2Nlc3NDb250cm9sQ29uZmlnXCIgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9DYXNlTm90ZShyb3cudmljdGltSWQpXCI+ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tcGVuY2lsXCIgPjwvc3Bhbj4mbmJzcDtDYXNlIE5vdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgICpuZ0lmPVwic2hvd1NhZmV0eVBsYW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgIG1hdFRvb2x0aXA9XCJzYWZldHkgcGxhblwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NDb250cm9sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXNzQ29udHJvbENvbmZpZ109XCJ1cGRhdGVBY2Nlc3NDb250cm9sQ29uZmlnXCIgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9TYWZ0eVBsYW4ocm93LnZpY3RpbUlkKVwiPiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi1wZW5jaWxcIiA+PC9zcGFuPiZuYnNwO1NhZmV0eSBQbGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7XHJcbiAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLXJvd1wiPjwvbWF0LWhlYWRlci1yb3c+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiIGNsYXNzPVwiZXhhbXBsZS1yb3dcIj48L21hdC1yb3c+XHJcbiAgICAgICAgICAgICAgICA8L21hdC10YWJsZT5cclxuXHJcbiAgICAgICAgICAgICAgPG1hdC1wYWdpbmF0b3IgI3BhZ2luYXRvciBbcGFnZVNpemVdPVwiMTBcIiBbcGFnZVNpemVPcHRpb25zXT1cIls1LCAxMCwgMjUsIDEwMF1cIj48L21hdC1wYWdpbmF0b3I+IFxyXG4gICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXY+XHJcbiAgICAgICAgPGI+e3ttc2d9fTwvYj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=