@csmart/ngc-smart-victim 1.14.43 → 1.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. package/{esm2020 → esm2022}/csmart-ngc-smart-victim.mjs +4 -4
  2. package/esm2022/lib/caseNote/caseNote.component.mjs +194 -0
  3. package/esm2022/lib/common-dialog/common-dialog.component.mjs +23 -0
  4. package/{esm2020 → esm2022}/lib/common-dialog/common-dialog.module.mjs +34 -34
  5. package/{esm2020 → esm2022}/lib/common-dialog/common-dialog.service.mjs +33 -33
  6. package/esm2022/lib/contact/contact.component.mjs +140 -0
  7. package/{esm2020 → esm2022}/lib/email.services.mjs +29 -29
  8. package/esm2022/lib/intake.service.mjs +57 -0
  9. package/{esm2020 → esm2022}/lib/safetyPlan/serviceProvider.component.mjs +62 -62
  10. package/esm2022/lib/safetyPlan/victimSafetyPlan.component.mjs +116 -0
  11. package/esm2022/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +340 -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 +44 -0
  16. package/esm2022/lib/smart-victim-detail/smart-victim-detail.component.mjs +1104 -0
  17. package/esm2022/lib/smart-victim.component.mjs +314 -0
  18. package/{esm2020 → esm2022}/lib/smart-victim.model.mjs +132 -132
  19. package/{esm2020 → esm2022}/lib/smart-victim.module.mjs +128 -128
  20. package/esm2022/lib/smart-victim.service.mjs +352 -0
  21. package/{esm2020 → esm2022}/lib/victim-routing.module.mjs +41 -41
  22. package/{esm2020 → esm2022}/lib/victimSearch/VictimSearchFilter.mjs +2 -2
  23. package/esm2022/lib/victimSearch/victimSearchForm.component.mjs +38 -0
  24. package/{esm2020 → esm2022}/public-api.mjs +10 -10
  25. package/fesm2022/csmart-ngc-smart-victim.mjs +3261 -0
  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/contact/contact.component.mjs +0 -140
  55. package/esm2020/lib/intake.service.mjs +0 -57
  56. package/esm2020/lib/safetyPlan/victimSafetyPlan.component.mjs +0 -116
  57. package/esm2020/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +0 -340
  58. package/esm2020/lib/shared/validators/date.validator.mjs +0 -59
  59. package/esm2020/lib/smart-victim-delete-confirm.component.mjs +0 -44
  60. package/esm2020/lib/smart-victim-detail/smart-victim-detail.component.mjs +0 -1104
  61. package/esm2020/lib/smart-victim.component.mjs +0 -314
  62. package/esm2020/lib/smart-victim.service.mjs +0 -352
  63. package/esm2020/lib/victimSearch/victimSearchForm.component.mjs +0 -38
  64. package/fesm2015/csmart-ngc-smart-victim.mjs +0 -3273
  65. package/fesm2015/csmart-ngc-smart-victim.mjs.map +0 -1
  66. package/fesm2020/csmart-ngc-smart-victim.mjs +0 -3261
  67. package/fesm2020/csmart-ngc-smart-victim.mjs.map +0 -1
@@ -0,0 +1,314 @@
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
+ constructor(dialog, victimService, router, route, snackBar, intakeService, smartWarrantUrl, document) {
31
+ this.dialog = dialog;
32
+ this.victimService = victimService;
33
+ this.router = router;
34
+ this.route = route;
35
+ this.snackBar = snackBar;
36
+ this.intakeService = intakeService;
37
+ this.smartWarrantUrl = smartWarrantUrl;
38
+ this.document = document;
39
+ this.appModuleId = '';
40
+ this.activatedRoute = null;
41
+ this.victims = [];
42
+ this.victimDetail = {};
43
+ this.showDetail = false;
44
+ this.victimListFilter = new VictimListFilter();
45
+ this.victimListDataSource = new MatTableDataSource();
46
+ this.doSpin = false;
47
+ this.showListFlag = false;
48
+ this.msg = "";
49
+ this.isIntake = false;
50
+ }
51
+ // private onChange(filter: VictimListFilter) {
52
+ // console.log('filter in onchange');
53
+ // console.log(filter);
54
+ // this.getVictimList(filter);
55
+ // }
56
+ applyFilter(filterValue) {
57
+ this.victimListDataSource.filter = filterValue.trim().toLowerCase();
58
+ }
59
+ addRecord() {
60
+ this.showDetail = true;
61
+ this.showAdd = false;
62
+ this.victimDetail = null;
63
+ this.showListFlag = false;
64
+ }
65
+ editVictimDetail(record) {
66
+ console.log("victim edit record");
67
+ console.log(record);
68
+ console.log(record.victimId);
69
+ this.victimDetail = record;
70
+ this.showDetail = true;
71
+ this.showAdd = false;
72
+ this.showListFlag = false;
73
+ }
74
+ save(detail) {
75
+ this.showDetail = false;
76
+ this.showAdd = true;
77
+ this.showListFlag = true;
78
+ }
79
+ cancel() {
80
+ this.showDetail = false;
81
+ this.victimDetail = {};
82
+ }
83
+ ngAfterViewInit() {
84
+ this.victimListDataSource.paginator = this.paginator;
85
+ this.victimListDataSource.sort = this.sort;
86
+ }
87
+ ngOnChanges() {
88
+ this.updateAccessControlConfig = {
89
+ accessType: AccessType.UPDATE,
90
+ appModuleId: this.appModuleId,
91
+ roleId: null,
92
+ route: this.activatedRoute.snapshot,
93
+ };
94
+ this.createAccessControlConfig = {
95
+ accessType: AccessType.CREATE,
96
+ appModuleId: this.appModuleId,
97
+ roleId: null,
98
+ route: this.activatedRoute.snapshot,
99
+ };
100
+ this.deleteAccessControlConfig = {
101
+ accessType: AccessType.DELETE,
102
+ appModuleId: this.appModuleId,
103
+ roleId: null,
104
+ route: this.activatedRoute.snapshot,
105
+ };
106
+ }
107
+ ngOnInit() {
108
+ const queryParams = this.route.snapshot.queryParams;
109
+ if (queryParams['routeTo']) {
110
+ this.router.navigate([queryParams['routeTo']]);
111
+ }
112
+ var data = this.route.snapshot.data;
113
+ var myPath = this.router.url.slice(-10);
114
+ console.log("offender id at smart-victim");
115
+ console.log(this.offenderId);
116
+ console.log("staff id at smart-victim");
117
+ console.log(this.staffId);
118
+ console.log("insakeFlag at smart-victim");
119
+ console.log(this.intakeFlag);
120
+ console.log("smart-victim ngOnInit");
121
+ console.log(this.intakeFlag);
122
+ console.log(myPath);
123
+ if (this.intakeFlag == "true") {
124
+ this.isIntake = true;
125
+ }
126
+ this.displayedColumns = ["lastName", "firstName"];
127
+ if (this.showRelationshipColumn == true ||
128
+ myPath == "victimList" ||
129
+ myPath == "victimHome") {
130
+ this.displayedColumns.push("relationship");
131
+ }
132
+ if (this.showOffenderNameColumn == true) {
133
+ this.displayedColumns.push("offenderName");
134
+ }
135
+ if (this.showOffenderPhoneColumn == true ||
136
+ myPath == "victimList" ||
137
+ myPath == "victimHome") {
138
+ this.displayedColumns.push("homePhone");
139
+ }
140
+ this.displayedColumns.push("victimId");
141
+ if (this.showSearchForm == true) {
142
+ this.showListFlag = false;
143
+ }
144
+ console.log("this.showSearchForm");
145
+ console.log(this.showSearchForm);
146
+ console.log("myPath");
147
+ console.log(myPath);
148
+ if (this.showSearchForm == false ||
149
+ myPath == "victimList" ||
150
+ myPath == "victimHome") {
151
+ var myOffenderId;
152
+ if (this.offenderId) {
153
+ myOffenderId = this.offenderId;
154
+ }
155
+ else {
156
+ console.log("back from previous page");
157
+ this.showAdd = true;
158
+ this.showRelationshipColumn = true;
159
+ //this.displayedColumns.push("relationship");
160
+ this.showOffenderPhoneColumn = true;
161
+ // this.displayedColumns.push("homePhone");
162
+ this.accessByModule = "true";
163
+ this.showEdit = "true";
164
+ this.showCaseNote = "true";
165
+ this.showSafetyPlan = "true";
166
+ myOffenderId = data.selectedOffender.offenderId;
167
+ }
168
+ const victimListFilter = {
169
+ offenderId: myOffenderId,
170
+ lastName: null,
171
+ firstName: null,
172
+ pdid: null,
173
+ birthDate: null,
174
+ };
175
+ console.log("victimListFilter in smar-victim componenet");
176
+ console.log(victimListFilter);
177
+ this.victimService
178
+ .getVictimListByFilter(victimListFilter)
179
+ .subscribe((data) => {
180
+ this.victims = data;
181
+ this.victimListDataSource.data = data;
182
+ console.log("victim data at line 245");
183
+ console.log(this.victims);
184
+ console.log("showListFlag");
185
+ console.log(this.showListFlag);
186
+ this.showListFlag = true;
187
+ if (data.length == 0) {
188
+ this.msg = "No Record Found!";
189
+ }
190
+ });
191
+ }
192
+ else {
193
+ console.log("find filter");
194
+ console.log(this.victimListFilter);
195
+ if (this.showListFlag === true) {
196
+ if (this.victimListFilter != null) {
197
+ this.victimService
198
+ .getVictimListByFilter(this.victimListFilter)
199
+ .subscribe((data) => {
200
+ this.victims = data;
201
+ this.victimListDataSource.data = data;
202
+ console.log("victim data at line 279");
203
+ console.log(data);
204
+ });
205
+ }
206
+ }
207
+ }
208
+ }
209
+ // phone number format on the victim list
210
+ formatPhoneNumber(phoneNumberString) {
211
+ if (!phoneNumberString)
212
+ return "";
213
+ var cleaned = ("" + phoneNumberString).replace(/\D/g, "");
214
+ var match = cleaned.match(/^(\d{3})(\d{3})(\d{4})$/);
215
+ if (match) {
216
+ return "(" + match[1] + ") " + match[2] + "-" + match[3];
217
+ }
218
+ return "";
219
+ }
220
+ saveIntake() {
221
+ if (!this.isIntake) {
222
+ return;
223
+ }
224
+ const intakeStep = {
225
+ intakeStepId: IntakeStep.VictimInformation,
226
+ offenderId: this.offenderId,
227
+ modifiedBy: this.staffId,
228
+ };
229
+ this.intakeService
230
+ .updateIntakeSteps(this.offenderId, intakeStep)
231
+ .subscribe((res) => {
232
+ console.log("save intake step.");
233
+ this.snackBar.open("Status Saved.", "", {
234
+ duration: 3000,
235
+ });
236
+ //this.router.navigate(['/warrant '], { queryParams: { intake: 1 } });
237
+ this.document.location.href =
238
+ `${this.smartWarrantUrl}/?offenderId=${this.offenderId}&intakeFlag=${this.isIntake}&routeTo=warrant`;
239
+ });
240
+ }
241
+ goToCaseNote(victimId) {
242
+ this.router.navigate(["casenote", victimId, this.offenderId]);
243
+ }
244
+ goToSaftyPlan(victimId) {
245
+ this.router.navigate(["saftyPlan", victimId]);
246
+ }
247
+ getVictimList(filter) {
248
+ this.victimListFilter = filter;
249
+ console.log("this.victimListFilter inside getVictimList");
250
+ console.log(this.victimListFilter);
251
+ this.doSpin = true;
252
+ this.victimService.getVictimListByFilter(filter).subscribe((data) => {
253
+ this.doSpin = !this.doSpin;
254
+ if (data.length > 0) {
255
+ this.showListFlag = true;
256
+ this.victimListDataSource.data = data;
257
+ }
258
+ else {
259
+ this.msg = "No record found!";
260
+ }
261
+ }, (err) => {
262
+ this.doSpin = !this.doSpin;
263
+ });
264
+ }
265
+ /** @nocollapse */ static { this.ɵ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 }); }
266
+ /** @nocollapse */ static { this.ɵ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-stroked-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-stroked-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-stroked-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-stroked-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>\r\n", 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"] }] }); }
267
+ }
268
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgcSmartVictimComponent, decorators: [{
269
+ type: Component,
270
+ 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-stroked-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-stroked-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-stroked-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-stroked-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>\r\n", 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"] }]
271
+ }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.NgcSmartVictimService }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i4.MatSnackBar }, { type: i5.IntakeServicesComponent }, { type: undefined, decorators: [{
272
+ type: Inject,
273
+ args: [SMART_WARRANT_URL]
274
+ }] }, { type: undefined, decorators: [{
275
+ type: Inject,
276
+ args: [DOCUMENT]
277
+ }] }], propDecorators: { offenderId: [{
278
+ type: Input
279
+ }], staffId: [{
280
+ type: Input
281
+ }], staffRole: [{
282
+ type: Input
283
+ }], showCaseNote: [{
284
+ type: Input
285
+ }], showSafetyPlan: [{
286
+ type: Input
287
+ }], showAdd: [{
288
+ type: Input
289
+ }], showEdit: [{
290
+ type: Input
291
+ }], showRelationshipColumn: [{
292
+ type: Input
293
+ }], showOffenderNameColumn: [{
294
+ type: Input
295
+ }], showOffenderPhoneColumn: [{
296
+ type: Input
297
+ }], showSearchForm: [{
298
+ type: Input
299
+ }], accessByModule: [{
300
+ type: Input
301
+ }], intakeFlag: [{
302
+ type: Input
303
+ }], appModuleId: [{
304
+ type: Input
305
+ }], activatedRoute: [{
306
+ type: Input
307
+ }], paginator: [{
308
+ type: ViewChild,
309
+ args: [MatPaginator]
310
+ }], sort: [{
311
+ type: ViewChild,
312
+ args: [MatSort]
313
+ }] } });
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmljdGltLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9zbWFydC12aWN0aW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdjLXNtYXJ0LXZpY3RpbS9zcmMvbGliL3NtYXJ0LXZpY3RpbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFZLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBeUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxjQUFjLEVBQUMsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBaUMsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRyxtR0FBbUc7QUFFbkcsT0FBTyxFQUVMLFVBQVUsRUFDVix1QkFBdUIsR0FDeEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBTTFELE1BQU0sT0FBTyx1QkFBdUI7SUFvQ2xDLFlBQ1Us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QVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSCxJQUFJO3NCQUF2QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCwgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25DaGFuZ2VzLCBWaWV3Q2hpbGQsIElucHV0LCBPdXRwdXQsIEFmdGVyVmlld0luaXQsIEluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge1xyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgTG9naW5TdGFmZixcclxuICBTbWFydEFjY2Vzc0NvbnRyb2xDb25maWcsXHJcbiAgQWNjZXNzVHlwZSxcclxufSBmcm9tIFwiQGNzbWFydC9uZ2Mtc21hcnQtY29yZVwiO1xyXG5pbXBvcnQgeyBOZ2NTbWFydFZpY3RpbVNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LXZpY3RpbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWxlbWVudHNWaWN0aW0sIFZpY3RpbUxpc3RGaWx0ZXIsIFZpY3RpbSwgU01BUlRfV0FSUkFOVF9VUkwgfSBmcm9tICcuL3NtYXJ0LXZpY3RpbS5tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0VmljdGltRGVsZXRlQ29uZmlybUNvbXBvbmVudCB9IGZyb20gJy4vc21hcnQtdmljdGltLWRlbGV0ZS1jb25maXJtLmNvbXBvbmVudCc7XHJcbi8vaW1wb3J0IHsgU21hcnRWaWN0aW1EZXRhaWxDb21wb25lbnQgfSBmcm9tICcuL3NtYXJ0LXZpY3RpbS1kZXRhaWwvc21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBJbnRha2VTdGVwU3RhdHVzTW9kZWwsXHJcbiAgSW50YWtlU3RlcCxcclxuICBJbnRha2VTZXJ2aWNlc0NvbXBvbmVudCxcclxufSBmcm9tICcuL2ludGFrZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJjc21hcnQtdmljdGltXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9zbWFydC12aWN0aW0uY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vc21hcnQtdmljdGltLmNvbXBvbmVudC5jc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ2NTbWFydFZpY3RpbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSBvZmZlbmRlcklkOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc3RhZmZJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHN0YWZmUm9sZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dDYXNlTm90ZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dTYWZldHlQbGFuOiBzdHJpbmc7XHJcbiAgLy9ASW5wdXQoKSBzaG93QWRkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2hvd0FkZDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93RWRpdDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dSZWxhdGlvbnNoaXBDb2x1bW46IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd09mZmVuZGVyTmFtZUNvbHVtbjogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93T2ZmZW5kZXJQaG9uZUNvbHVtbjogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93U2VhcmNoRm9ybTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBhY2Nlc3NCeU1vZHVsZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGludGFrZUZsYWc6IHN0cmluZztcclxuICBASW5wdXQoKSBhcHBNb2R1bGVJZCA9ICcnO1xyXG4gIEBJbnB1dCgpIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSA9IG51bGw7XHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQ6IE1hdFNvcnQ7XHJcbiAgLy8gQFZpZXdDaGlsZChTbWFydFZpY3RpbURldGFpbENvbXBvbmVudCkgY2hpbGQ7XHJcblxyXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdO1xyXG4gIHZpY3RpbXM6IFZpY3RpbVtdID0gW107XHJcbiAgdmljdGltRGV0YWlsID0gPFZpY3RpbT57fTtcclxuICBzaG93RGV0YWlsID0gZmFsc2U7XHJcbiAgdmljdGltTGlzdEZpbHRlcjogVmljdGltTGlzdEZpbHRlciA9IG5ldyBWaWN0aW1MaXN0RmlsdGVyKCk7XHJcbiAgdmljdGltTGlzdERhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKCk7XHJcbiAgZG9TcGluOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0xpc3RGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbXNnOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGlzSW50YWtlID0gZmFsc2U7XHJcblxyXG4gIHVwZGF0ZUFjY2Vzc0NvbnRyb2xDb25maWc6IFNtYXJ0QWNjZXNzQ29udHJvbENvbmZpZztcclxuICBjcmVhdGVBY2Nlc3NDb250cm9sQ29uZmlnOiBTbWFydEFjY2Vzc0NvbnRyb2xDb25maWc7XHJcbiAgZGVsZXRlQWNjZXNzQ29udHJvbENvbmZpZzogU21hcnRBY2Nlc3NDb250cm9sQ29uZmlnO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdmljdGltU2VydmljZTogTmdjU21hcnRWaWN0aW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIGludGFrZVNlcnZpY2U6IEludGFrZVNlcnZpY2VzQ29tcG9uZW50LFxyXG4gICAgQEluamVjdChTTUFSVF9XQVJSQU5UX1VSTCkgcHJpdmF0ZSBzbWFydFdhcnJhbnRVcmw6IHN0cmluZyxcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueVxyXG4gICkge31cclxuXHJcbiAgLy8gcHJpdmF0ZSBvbkNoYW5nZShmaWx0ZXI6IFZpY3RpbUxpc3RGaWx0ZXIpIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKCdmaWx0ZXIgaW4gb25jaGFuZ2UnKTtcclxuICAvLyAgIGNvbnNvbGUubG9nKGZpbHRlcik7XHJcbiAgLy8gICB0aGlzLmdldFZpY3RpbUxpc3QoZmlsdGVyKTtcclxuICAvLyB9XHJcblxyXG4gIGFwcGx5RmlsdGVyKGZpbHRlclZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudmljdGltTGlzdERhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgfVxyXG4gIGFkZFJlY29yZCgpIHtcclxuICAgIHRoaXMuc2hvd0RldGFpbCA9IHRydWU7XHJcbiAgICB0aGlzLnNob3dBZGQgPSBmYWxzZTtcclxuICAgIHRoaXMudmljdGltRGV0YWlsID0gbnVsbDtcclxuICAgIHRoaXMuc2hvd0xpc3RGbGFnID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBlZGl0VmljdGltRGV0YWlsKHJlY29yZCkge1xyXG4gICAgY29uc29sZS5sb2coXCJ2aWN0aW0gZWRpdCByZWNvcmRcIik7XHJcbiAgICBjb25zb2xlLmxvZyhyZWNvcmQpO1xyXG4gICAgY29uc29sZS5sb2cocmVjb3JkLnZpY3RpbUlkKTtcclxuICAgIHRoaXMudmljdGltRGV0YWlsID0gcmVjb3JkO1xyXG4gICAgdGhpcy5zaG93RGV0YWlsID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd0FkZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93TGlzdEZsYWcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNhdmUoZGV0YWlsOiBWaWN0aW0pIHtcclxuICAgIHRoaXMuc2hvd0RldGFpbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93QWRkID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd0xpc3RGbGFnID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuc2hvd0RldGFpbCA9IGZhbHNlO1xyXG4gICAgdGhpcy52aWN0aW1EZXRhaWwgPSA8VmljdGltPnt9O1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy52aWN0aW1MaXN0RGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgIHRoaXMudmljdGltTGlzdERhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgIHRoaXMudXBkYXRlQWNjZXNzQ29udHJvbENvbmZpZyA9IHtcclxuICAgICAgIGFjY2Vzc1R5cGU6IEFjY2Vzc1R5cGUuVVBEQVRFLFxyXG4gICAgICAgYXBwTW9kdWxlSWQ6IHRoaXMuYXBwTW9kdWxlSWQsXHJcbiAgICAgICByb2xlSWQ6IG51bGwsXHJcbiAgICAgICByb3V0ZTogdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdCxcclxuICAgICB9O1xyXG4gICAgIHRoaXMuY3JlYXRlQWNjZXNzQ29udHJvbENvbmZpZyA9IHtcclxuICAgICAgIGFjY2Vzc1R5cGU6IEFjY2Vzc1R5cGUuQ1JFQVRFLFxyXG4gICAgICAgYXBwTW9kdWxlSWQ6IHRoaXMuYXBwTW9kdWxlSWQsXHJcbiAgICAgICByb2xlSWQ6IG51bGwsXHJcbiAgICAgICByb3V0ZTogdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdCxcclxuICAgICB9O1xyXG4gICAgIHRoaXMuZGVsZXRlQWNjZXNzQ29udHJvbENvbmZpZyA9IHtcclxuICAgICAgIGFjY2Vzc1R5cGU6IEFjY2Vzc1R5cGUuREVMRVRFLFxyXG4gICAgICAgYXBwTW9kdWxlSWQ6IHRoaXMuYXBwTW9kdWxlSWQsXHJcbiAgICAgICByb2xlSWQ6IG51bGwsXHJcbiAgICAgICByb3V0ZTogdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdCxcclxuICAgICB9O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM7XHJcbiAgICBpZihxdWVyeVBhcmFtc1sncm91dGVUbyddKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtxdWVyeVBhcmFtc1sncm91dGVUbyddXSk7XHJcbiAgICB9XHJcbiAgICB2YXIgZGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcclxuICAgIHZhciBteVBhdGggPSB0aGlzLnJvdXRlci51cmwuc2xpY2UoLTEwKTtcclxuXHJcblxyXG4gICAgY29uc29sZS5sb2coXCJvZmZlbmRlciBpZCBhdCBzbWFydC12aWN0aW1cIik7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLm9mZmVuZGVySWQpO1xyXG4gICAgY29uc29sZS5sb2coXCJzdGFmZiBpZCBhdCBzbWFydC12aWN0aW1cIik7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YWZmSWQpO1xyXG4gICAgY29uc29sZS5sb2coXCJpbnNha2VGbGFnIGF0IHNtYXJ0LXZpY3RpbVwiKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuaW50YWtlRmxhZyk7XHJcblxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwic21hcnQtdmljdGltIG5nT25Jbml0XCIpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5pbnRha2VGbGFnKTtcclxuICAgIGNvbnNvbGUubG9nKG15UGF0aCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaW50YWtlRmxhZyA9PSBcInRydWVcIikge1xyXG4gICAgICB0aGlzLmlzSW50YWtlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBbXCJsYXN0TmFtZVwiLCBcImZpcnN0TmFtZVwiXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2hvd1JlbGF0aW9uc2hpcENvbHVtbiA9PSB0cnVlIHx8XHJcbiAgICAgIG15UGF0aCA9PSBcInZpY3RpbUxpc3RcIiB8fFxyXG4gICAgICBteVBhdGggPT0gXCJ2aWN0aW1Ib21lXCJcclxuICAgICkge1xyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaChcInJlbGF0aW9uc2hpcFwiKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNob3dPZmZlbmRlck5hbWVDb2x1bW4gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaChcIm9mZmVuZGVyTmFtZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2hvd09mZmVuZGVyUGhvbmVDb2x1bW4gPT0gdHJ1ZSB8fFxyXG4gICAgICBteVBhdGggPT0gXCJ2aWN0aW1MaXN0XCIgfHxcclxuICAgICAgbXlQYXRoID09IFwidmljdGltSG9tZVwiXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goXCJob21lUGhvbmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goXCJ2aWN0aW1JZFwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93U2VhcmNoRm9ybSA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0xpc3RGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLnNob3dTZWFyY2hGb3JtXCIpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5zaG93U2VhcmNoRm9ybSk7XHJcbiAgICBjb25zb2xlLmxvZyhcIm15UGF0aFwiKTtcclxuICAgIGNvbnNvbGUubG9nKG15UGF0aCk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNob3dTZWFyY2hGb3JtID09IGZhbHNlIHx8XHJcbiAgICAgIG15UGF0aCA9PSBcInZpY3RpbUxpc3RcIiB8fFxyXG4gICAgICBteVBhdGggPT0gXCJ2aWN0aW1Ib21lXCJcclxuICAgICkge1xyXG4gICAgICB2YXIgbXlPZmZlbmRlcklkO1xyXG4gICAgICBpZiAodGhpcy5vZmZlbmRlcklkKSB7XHJcbiAgICAgICAgbXlPZmZlbmRlcklkID0gdGhpcy5vZmZlbmRlcklkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiYmFjayBmcm9tIHByZXZpb3VzIHBhZ2VcIik7XHJcbiAgICAgICAgdGhpcy5zaG93QWRkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dSZWxhdGlvbnNoaXBDb2x1bW4gPSB0cnVlO1xyXG4gICAgICAgIC8vdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goXCJyZWxhdGlvbnNoaXBcIik7XHJcbiAgICAgICAgdGhpcy5zaG93T2ZmZW5kZXJQaG9uZUNvbHVtbiA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goXCJob21lUGhvbmVcIik7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NCeU1vZHVsZSA9IFwidHJ1ZVwiO1xyXG4gICAgICAgIHRoaXMuc2hvd0VkaXQgPSBcInRydWVcIjtcclxuICAgICAgICB0aGlzLnNob3dDYXNlTm90ZSA9IFwidHJ1ZVwiO1xyXG4gICAgICAgIHRoaXMuc2hvd1NhZmV0eVBsYW4gPSBcInRydWVcIjtcclxuXHJcbiAgICAgICAgbXlPZmZlbmRlcklkID0gZGF0YS5zZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHZpY3RpbUxpc3RGaWx0ZXI6IFZpY3RpbUxpc3RGaWx0ZXIgPSB7XHJcbiAgICAgICAgb2ZmZW5kZXJJZDogbXlPZmZlbmRlcklkLFxyXG4gICAgICAgIGxhc3ROYW1lOiBudWxsLFxyXG4gICAgICAgIGZpcnN0TmFtZTogbnVsbCxcclxuICAgICAgICBwZGlkOiBudWxsLFxyXG4gICAgICAgIGJpcnRoRGF0ZTogbnVsbCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKFwidmljdGltTGlzdEZpbHRlciBpbiBzbWFyLXZpY3RpbSBjb21wb25lbmV0XCIpO1xyXG4gICAgICBjb25zb2xlLmxvZyh2aWN0aW1MaXN0RmlsdGVyKTtcclxuXHJcbiAgICAgIHRoaXMudmljdGltU2VydmljZVxyXG4gICAgICAgIC5nZXRWaWN0aW1MaXN0QnlGaWx0ZXIodmljdGltTGlzdEZpbHRlcilcclxuICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBWaWN0aW1bXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1zID0gZGF0YTtcclxuICAgICAgICAgIHRoaXMudmljdGltTGlzdERhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJ2aWN0aW0gZGF0YSBhdCBsaW5lIDI0NVwiKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltcyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInNob3dMaXN0RmxhZ1wiKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2hvd0xpc3RGbGFnKTtcclxuICAgICAgICAgIHRoaXMuc2hvd0xpc3RGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXNnID0gXCJObyBSZWNvcmQgRm91bmQhXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhcImZpbmQgZmlsdGVyXCIpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUxpc3RGaWx0ZXIpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2hvd0xpc3RGbGFnID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmljdGltTGlzdEZpbHRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2VcclxuICAgICAgICAgICAgLmdldFZpY3RpbUxpc3RCeUZpbHRlcih0aGlzLnZpY3RpbUxpc3RGaWx0ZXIpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IFZpY3RpbVtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy52aWN0aW1zID0gZGF0YTtcclxuICAgICAgICAgICAgICB0aGlzLnZpY3RpbUxpc3REYXRhU291cmNlLmRhdGEgPSBkYXRhO1xyXG5cclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInZpY3RpbSBkYXRhIGF0IGxpbmUgMjc5XCIpO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbi8vIHBob25lIG51bWJlciBmb3JtYXQgb24gdGhlIHZpY3RpbSBsaXN0XHJcbiAgZm9ybWF0UGhvbmVOdW1iZXIocGhvbmVOdW1iZXJTdHJpbmcpIHtcclxuICAgIGlmICghcGhvbmVOdW1iZXJTdHJpbmcpIHJldHVybiBcIlwiO1xyXG4gICAgdmFyIGNsZWFuZWQgPSAoXCJcIiArIHBob25lTnVtYmVyU3RyaW5nKS5yZXBsYWNlKC9cXEQvZywgXCJcIik7XHJcbiAgICB2YXIgbWF0Y2ggPSBjbGVhbmVkLm1hdGNoKC9eKFxcZHszfSkoXFxkezN9KShcXGR7NH0pJC8pO1xyXG4gICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgIHJldHVybiBcIihcIiArIG1hdGNoWzFdICsgXCIpIFwiICsgbWF0Y2hbMl0gKyBcIi1cIiArIG1hdGNoWzNdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICBzYXZlSW50YWtlKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSW50YWtlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGludGFrZVN0ZXAgPSA8SW50YWtlU3RlcFN0YXR1c01vZGVsPntcclxuICAgICAgaW50YWtlU3RlcElkOiBJbnRha2VTdGVwLlZpY3RpbUluZm9ybWF0aW9uLFxyXG4gICAgICBvZmZlbmRlcklkOiB0aGlzLm9mZmVuZGVySWQsXHJcbiAgICAgIG1vZGlmaWVkQnk6IHRoaXMuc3RhZmZJZCxcclxuICAgIH07XHJcbiAgICB0aGlzLmludGFrZVNlcnZpY2VcclxuICAgICAgLnVwZGF0ZUludGFrZVN0ZXBzKHRoaXMub2ZmZW5kZXJJZCwgaW50YWtlU3RlcClcclxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJzYXZlIGludGFrZSBzdGVwLlwiKTtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXCJTdGF0dXMgU2F2ZWQuXCIsIFwiXCIsIHtcclxuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvd2FycmFudCAnXSwgeyBxdWVyeVBhcmFtczogeyBpbnRha2U6IDEgfSB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5kb2N1bWVudC5sb2NhdGlvbi5ocmVmID1cclxuICAgICAgICAgIGAke3RoaXMuc21hcnRXYXJyYW50VXJsfS8/b2ZmZW5kZXJJZD0ke3RoaXMub2ZmZW5kZXJJZH0maW50YWtlRmxhZz0ke3RoaXMuaXNJbnRha2V9JnJvdXRlVG89d2FycmFudGA7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ29Ub0Nhc2VOb3RlKHZpY3RpbUlkOiBudW1iZXIpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImNhc2Vub3RlXCIsIHZpY3RpbUlkLCB0aGlzLm9mZmVuZGVySWRdKTtcclxuICB9XHJcblxyXG4gIGdvVG9TYWZ0eVBsYW4odmljdGltSWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wic2FmdHlQbGFuXCIsIHZpY3RpbUlkXSk7XHJcbiAgfVxyXG5cclxuICBnZXRWaWN0aW1MaXN0KGZpbHRlcjogVmljdGltTGlzdEZpbHRlcikge1xyXG4gICAgdGhpcy52aWN0aW1MaXN0RmlsdGVyID0gZmlsdGVyO1xyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLnZpY3RpbUxpc3RGaWx0ZXIgaW5zaWRlIGdldFZpY3RpbUxpc3RcIik7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUxpc3RGaWx0ZXIpO1xyXG4gICAgdGhpcy5kb1NwaW4gPSB0cnVlO1xyXG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldFZpY3RpbUxpc3RCeUZpbHRlcihmaWx0ZXIpLnN1YnNjcmliZShcclxuICAgICAgKGRhdGE6IFZpY3RpbVtdKSA9PiB7XHJcbiAgICAgICB0aGlzLmRvU3BpbiA9ICF0aGlzLmRvU3BpbjtcclxuXHJcbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93TGlzdEZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1MaXN0RGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubXNnID0gXCJObyByZWNvcmQgZm91bmQhXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kb1NwaW4gPSAhdGhpcy5kb1NwaW47XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJzaG93U2VhcmNoRm9ybVwiPlxyXG4gICAgPGFwcC12aWN0aW0tc2VhcmNoLWZvcm1cclxuICAgIChvblNlYXJjaCk9XCJnZXRWaWN0aW1MaXN0KCRldmVudClcIj5cclxuICAgIDwvYXBwLXZpY3RpbS1zZWFyY2gtZm9ybT5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwic2hvd0RldGFpbFwiPlxyXG4gIDxjc21hcnQtdmljdGltLWRldGFpbCBbdmljdGltRGV0YWlsXT1cInZpY3RpbURldGFpbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGFmZklkXT1cInN0YWZmSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb2ZmZW5kZXJJZF0gPVwib2ZmZW5kZXJJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0ludGFrZV09XCJpc0ludGFrZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvblNhdmUpPVwic2F2ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2FuY2VsKT1cImNhbmNlbCgpXCIgPlxyXG48L2NzbWFydC12aWN0aW0tZGV0YWlsPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1haW4tY29udGFpbmVyXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImFkZC1hY3Rpb25cIiAqbmdJZj1cInNob3dBZGRcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgIGFjY2Vzc0NvbnRyb2xcclxuICAgICAgICAgIFthY2Nlc3NDb250cm9sQ29uZmlnXT1cImNyZWF0ZUFjY2Vzc0NvbnRyb2xDb25maWdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImFkZFJlY29yZCgpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIEFkZCBWaWN0aW1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAmbmJzcDsmbmJzcDtcclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXNJbnRha2VcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBhY2Nlc3NDb250cm9sXHJcbiAgICAgICAgW2FjY2Vzc0NvbnRyb2xDb25maWddPVwidXBkYXRlQWNjZXNzQ29udHJvbENvbmZpZ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNhdmVJbnRha2UoKVwiPlxyXG4gICAgICAgIENvbnRpbnVlXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgPGRpdiAqbmdJZj1cInNob3dMaXN0RmxhZ1wiPlxyXG4gICAgPG1hdC1jYXJkIGlkPVwiZGl2VmljdGltXCIgPlxyXG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgPlxyXG4gICAgICAgICAgICA8bWF0LXRhYmxlICN0YWJsZSBbZGF0YVNvdXJjZV09XCJ2aWN0aW1MaXN0RGF0YVNvdXJjZVwiID5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImxhc3ROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5WaWN0aW0gTGFzdCBOYW1lPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiID4ge3tyb3cubGFzdE5hbWV9fSAgPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZpcnN0TmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmID5WaWN0aW0gRmlyc3QgTmFtZTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgPiB7e3Jvdy5maXJzdE5hbWV9fSA8L21hdC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAgKm5nSWY9XCJzaG93UmVsYXRpb25zaGlwQ29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyZWxhdGlvbnNoaXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiA+UmVsYXRpb25zaGlwIHRvIE9mZmVuZGVyPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiA+IHt7cm93LnJlbGF0aW9uc2hpcH19IDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICAqbmdJZj1cInNob3dPZmZlbmRlclBob25lQ29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJob21lUGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiA+UGhvbmUgTnVtYmVyPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvbWUgcGhvbmU6IHt7Zm9ybWF0UGhvbmVOdW1iZXIocm93LmhvbWVQaG9uZSl9fTxicj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2VsbCBQaG9uZToge3tmb3JtYXRQaG9uZU51bWJlcihyb3cuY2VsbFBob25lKX19PGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrIFBob25lOiB7e2Zvcm1hdFBob25lTnVtYmVyKHJvdy53b3JrUGhvbmUpfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICAqbmdJZj1cInNob3dPZmZlbmRlck5hbWVDb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm9mZmVuZGVyTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5PZmZlbmRlciBOYW1lPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgPiB7e3Jvdy5vZmZlbmRlck5hbWV9fSA8L21hdC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInZpY3RpbUlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgPjwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiA+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgICpuZ0lmPVwiYWNjZXNzQnlNb2R1bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3g+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgICpuZ0lmPVwic2hvd0VkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0LWJ0blwiICBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgIG1hdFRvb2x0aXA9XCJWaWV3L0VkaXQgVmljdGltXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NDb250cm9sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2Vzc0NvbnRyb2xDb25maWddPVwidXBkYXRlQWNjZXNzQ29udHJvbENvbmZpZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRWaWN0aW1EZXRhaWwocm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5tb2RlX2VkaXQ8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAgKm5nSWY9XCJzaG93Q2FzZU5vdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdFRvb2x0aXA9XCJDYXNlTm90ZVwiICBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc0NvbnRyb2xcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2Nlc3NDb250cm9sQ29uZmlnXT1cInVwZGF0ZUFjY2Vzc0NvbnRyb2xDb25maWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9DYXNlTm90ZShyb3cudmljdGltSWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tcGVuY2lsXCIgPjwvc3Bhbj4mbmJzcDtDYXNlIE5vdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgICpuZ0lmPVwic2hvd1NhZmV0eVBsYW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgIG1hdFRvb2x0aXA9XCJzYWZldHkgcGxhblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzQ29udHJvbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2Vzc0NvbnRyb2xDb25maWddPVwidXBkYXRlQWNjZXNzQ29udHJvbENvbmZpZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1NhZnR5UGxhbihyb3cudmljdGltSWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXBlbmNpbFwiID48L3NwYW4+Jm5ic3A7U2FmZXR5IFBsYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItcm93XCI+PC9tYXQtaGVhZGVyLXJvdz5cclxuICAgICAgICAgICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCIgY2xhc3M9XCJleGFtcGxlLXJvd1wiPjwvbWF0LXJvdz5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYmxlPlxyXG5cclxuICAgICAgICAgICAgICA8bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yIFtwYWdlU2l6ZV09XCIxMFwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgMTAwXVwiPjwvbWF0LXBhZ2luYXRvcj5cclxuICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDwvbWF0LWNhcmQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2PlxyXG4gICAgICAgIDxiPnt7bXNnfX08L2I+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==