@csmart/ngc-smart-victim 0.1.7 → 1.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. package/csmart-ngc-smart-victim.d.ts +1 -15
  2. package/esm2020/csmart-ngc-smart-victim.mjs +5 -0
  3. package/esm2020/lib/caseNote/caseNote.component.mjs +185 -0
  4. package/esm2020/lib/common-dialog/common-dialog.component.mjs +23 -0
  5. package/esm2020/lib/common-dialog/common-dialog.module.mjs +38 -0
  6. package/esm2020/lib/common-dialog/common-dialog.service.mjs +33 -0
  7. package/esm2020/lib/contact/contact.component.mjs +140 -0
  8. package/esm2020/lib/intake.service.mjs +57 -0
  9. package/esm2020/lib/safetyPlan/serviceProvider.component.mjs +115 -0
  10. package/esm2020/lib/safetyPlan/victimSafetyPlan.component.mjs +116 -0
  11. package/esm2020/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +340 -0
  12. package/esm2020/lib/shared/app.shared.module.mjs +213 -0
  13. package/esm2020/lib/shared/directives/phone-mask.directive.mjs +114 -0
  14. package/esm2020/lib/shared/validators/date.validator.mjs +59 -0
  15. package/esm2020/lib/shared/validators/index.mjs +2 -0
  16. package/esm2020/lib/smart-victim-delete-confirm.component.mjs +53 -0
  17. package/esm2020/lib/smart-victim-detail/smart-victim-detail.component.mjs +958 -0
  18. package/esm2020/lib/smart-victim.component.mjs +310 -0
  19. package/esm2020/lib/smart-victim.model.mjs +132 -0
  20. package/esm2020/lib/smart-victim.module.mjs +138 -0
  21. package/esm2020/lib/smart-victim.service.mjs +347 -0
  22. package/esm2020/lib/victim-routing.module.mjs +42 -0
  23. package/esm2020/lib/victimSearch/VictimSearchFilter.mjs +3 -0
  24. package/esm2020/lib/victimSearch/victimSearchForm.component.mjs +38 -0
  25. package/esm2020/public-api.mjs +12 -0
  26. package/fesm2015/csmart-ngc-smart-victim.mjs +3221 -0
  27. package/fesm2015/csmart-ngc-smart-victim.mjs.map +1 -0
  28. package/fesm2020/csmart-ngc-smart-victim.mjs +3210 -0
  29. package/fesm2020/csmart-ngc-smart-victim.mjs.map +1 -0
  30. package/lib/caseNote/caseNote.component.d.ts +6 -2
  31. package/lib/common-dialog/common-dialog.component.d.ts +4 -1
  32. package/lib/common-dialog/common-dialog.module.d.ts +6 -0
  33. package/lib/common-dialog/common-dialog.service.d.ts +4 -1
  34. package/lib/contact/contact.component.d.ts +4 -1
  35. package/lib/intake.service.d.ts +3 -0
  36. package/lib/safetyPlan/serviceProvider.component.d.ts +4 -1
  37. package/lib/safetyPlan/victimSafetyPlan.component.d.ts +7 -2
  38. package/lib/safetyPlan/victimSafetyPlanDetail.component.d.ts +7 -2
  39. package/lib/shared/app.shared.module.d.ts +30 -0
  40. package/lib/shared/directives/phone-mask.directive.d.ts +5 -2
  41. package/lib/smart-victim-delete-confirm.component.d.ts +3 -0
  42. package/lib/smart-victim-detail/smart-victim-detail.component.d.ts +9 -4
  43. package/lib/smart-victim.component.d.ts +8 -3
  44. package/lib/smart-victim.module.d.ts +47 -0
  45. package/lib/smart-victim.service.d.ts +3 -0
  46. package/lib/victim-routing.module.d.ts +5 -0
  47. package/lib/victimSearch/victimSearchForm.component.d.ts +3 -0
  48. package/package.json +28 -18
  49. package/public-api.d.ts +4 -0
  50. package/bundles/csmart-ngc-smart-victim.umd.js +0 -6434
  51. package/bundles/csmart-ngc-smart-victim.umd.js.map +0 -1
  52. package/bundles/csmart-ngc-smart-victim.umd.min.js +0 -16
  53. package/bundles/csmart-ngc-smart-victim.umd.min.js.map +0 -1
  54. package/csmart-ngc-smart-victim.metadata.json +0 -1
  55. package/esm2015/csmart-ngc-smart-victim.js +0 -25
  56. package/esm2015/lib/caseNote/caseNote.component.js +0 -349
  57. package/esm2015/lib/common-dialog/common-dialog.component.js +0 -46
  58. package/esm2015/lib/common-dialog/common-dialog.module.js +0 -32
  59. package/esm2015/lib/common-dialog/common-dialog.service.js +0 -63
  60. package/esm2015/lib/contact/contact.component.js +0 -232
  61. package/esm2015/lib/intake.service.js +0 -183
  62. package/esm2015/lib/safetyPlan/serviceProvider.component.js +0 -130
  63. package/esm2015/lib/safetyPlan/victimSafetyPlan.component.js +0 -257
  64. package/esm2015/lib/safetyPlan/victimSafetyPlanDetail.component.js +0 -556
  65. package/esm2015/lib/shared/app.shared.module.js +0 -81
  66. package/esm2015/lib/shared/directives/phone-mask.directive.js +0 -168
  67. package/esm2015/lib/shared/validators/date.validator.js +0 -108
  68. package/esm2015/lib/shared/validators/index.js +0 -7
  69. package/esm2015/lib/smart-victim-delete-confirm.component.js +0 -61
  70. package/esm2015/lib/smart-victim-detail/smart-victim-detail.component.js +0 -1410
  71. package/esm2015/lib/smart-victim.component.js +0 -476
  72. package/esm2015/lib/smart-victim.model.js +0 -631
  73. package/esm2015/lib/smart-victim.module.js +0 -84
  74. package/esm2015/lib/smart-victim.service.js +0 -792
  75. package/esm2015/lib/victim-routing.module.js +0 -40
  76. package/esm2015/lib/victimSearch/VictimSearchFilter.js +0 -20
  77. package/esm2015/lib/victimSearch/victimSearchForm.component.js +0 -59
  78. package/esm2015/public-api.js +0 -13
  79. package/esm5/csmart-ngc-smart-victim.js +0 -25
  80. package/esm5/lib/caseNote/caseNote.component.js +0 -372
  81. package/esm5/lib/common-dialog/common-dialog.component.js +0 -48
  82. package/esm5/lib/common-dialog/common-dialog.module.js +0 -36
  83. package/esm5/lib/common-dialog/common-dialog.service.js +0 -75
  84. package/esm5/lib/contact/contact.component.js +0 -285
  85. package/esm5/lib/intake.service.js +0 -194
  86. package/esm5/lib/safetyPlan/serviceProvider.component.js +0 -99
  87. package/esm5/lib/safetyPlan/victimSafetyPlan.component.js +0 -306
  88. package/esm5/lib/safetyPlan/victimSafetyPlanDetail.component.js +0 -628
  89. package/esm5/lib/shared/app.shared.module.js +0 -85
  90. package/esm5/lib/shared/directives/phone-mask.directive.js +0 -184
  91. package/esm5/lib/shared/validators/date.validator.js +0 -108
  92. package/esm5/lib/shared/validators/index.js +0 -7
  93. package/esm5/lib/smart-victim-delete-confirm.component.js +0 -51
  94. package/esm5/lib/smart-victim-detail/smart-victim-detail.component.js +0 -1502
  95. package/esm5/lib/smart-victim.component.js +0 -528
  96. package/esm5/lib/smart-victim.model.js +0 -541
  97. package/esm5/lib/smart-victim.module.js +0 -84
  98. package/esm5/lib/smart-victim.service.js +0 -1063
  99. package/esm5/lib/victim-routing.module.js +0 -44
  100. package/esm5/lib/victimSearch/VictimSearchFilter.js +0 -24
  101. package/esm5/lib/victimSearch/victimSearchForm.component.js +0 -70
  102. package/esm5/public-api.js +0 -13
  103. package/fesm2015/csmart-ngc-smart-victim.js +0 -5690
  104. package/fesm2015/csmart-ngc-smart-victim.js.map +0 -1
  105. package/fesm5/csmart-ngc-smart-victim.js +0 -6211
  106. package/fesm5/csmart-ngc-smart-victim.js.map +0 -1
@@ -1,628 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/safetyPlan/victimSafetyPlanDetail.component.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import * as tslib_1 from "tslib";
7
- import { Component } from '@angular/core';
8
- import { NgcSmartVictimService } from '../smart-victim.service';
9
- import { FormControl, FormBuilder, Validators } from '@angular/forms';
10
- import { MatSnackBar, MatTableDataSource, MatDialog } from '@angular/material';
11
- import { CommonDialogService } from '.././common-dialog/common-dialog.service';
12
- import { HttpClient } from '@angular/common/http';
13
- import { Router, ActivatedRoute } from '@angular/router';
14
- import { dateValidator } from '../shared/validators';
15
- import { SeriveProviderComponent } from '../safetyPlan/serviceProvider.component';
16
- var VictimSafetyPlanDetailComponent = /** @class */ (function () {
17
- function VictimSafetyPlanDetailComponent(dialog, _victimServicesComponent, http, snackBar, route, router, commonDialogService, formBuilder) {
18
- this.dialog = dialog;
19
- this._victimServicesComponent = _victimServicesComponent;
20
- this.http = http;
21
- this.snackBar = snackBar;
22
- this.route = route;
23
- this.router = router;
24
- this.commonDialogService = commonDialogService;
25
- this.formBuilder = formBuilder;
26
- this.editSafetyPlan = (/** @type {?} */ ({}));
27
- this.providerListCollection = [];
28
- this.serviceCheck = [];
29
- this.victimServiceStatusHistoriesDataSource = new MatTableDataSource();
30
- this.initForm();
31
- }
32
- /**
33
- * @private
34
- * @return {?}
35
- */
36
- VictimSafetyPlanDetailComponent.prototype.initForm = /**
37
- * @private
38
- * @return {?}
39
- */
40
- function () {
41
- this.spForm = this.formBuilder.group({
42
- serviceGoal: new FormControl('', Validators.compose([
43
- Validators.required
44
- ])),
45
- goalStatus: new FormControl('', Validators.compose([
46
- Validators.required
47
- ])),
48
- goalStatusDate: new FormControl('', Validators.compose([
49
- Validators.required, dateValidator()
50
- ])),
51
- comment: new FormControl('', Validators.required)
52
- });
53
- this.spForm.markAsPristine();
54
- this.spForm.markAsUntouched();
55
- };
56
- /**
57
- * @return {?}
58
- */
59
- VictimSafetyPlanDetailComponent.prototype.ngOnInit = /**
60
- * @return {?}
61
- */
62
- function () {
63
- var _this = this;
64
- /** @type {?} */
65
- var data = this.route.snapshot.data;
66
- this.loginStaff = data.loginStaff;
67
- this.staffId = this.loginStaff.staffId;
68
- this.sub = this.route.params.subscribe((/**
69
- * @param {?} params
70
- * @return {?}
71
- */
72
- function (params) {
73
- _this.victimServiceId = params['victimServiceId'];
74
- _this.victimId = params['victimId'];
75
- }));
76
- this.hiddenAddNewFlag = false;
77
- this.isDisplay = false;
78
- this._victimServicesComponent.getVictimServiceTypes().subscribe((/**
79
- * @param {?} items
80
- * @return {?}
81
- */
82
- function (items) {
83
- _this.victimServiceTypes = items;
84
- }));
85
- this._victimServicesComponent.getVictimServiceStatus().subscribe((/**
86
- * @param {?} items
87
- * @return {?}
88
- */
89
- function (items) {
90
- _this.victimServiceStatus = items;
91
- }));
92
- this._victimServicesComponent.getVictim(this.victimId).subscribe((/**
93
- * @param {?} items
94
- * @return {?}
95
- */
96
- function (items) {
97
- _this.victimName = items.firstName + ', ' + items.lastName;
98
- }));
99
- //---------------graphQL--------------------------------------
100
- // this.getVictimServiceTypeProgramProviders().subscribe(result => {
101
- // this.providerList = result;
102
- // });
103
- // console.log('this.victimServiceId');
104
- // console.log(this.victimServiceId);
105
- if (this.victimServiceId != 0) {
106
- this._victimServicesComponent.getVictimServices(this.victimServiceId).subscribe((/**
107
- * @param {?} victimSafetyPlans
108
- * @return {?}
109
- */
110
- function (victimSafetyPlans) {
111
- console.log('victimSafetyPlans');
112
- console.log(victimSafetyPlans);
113
- _this.editSafetyPlan = victimSafetyPlans[0];
114
- _this.victimId = victimSafetyPlans[0].victimId;
115
- console.log('this.editSafetyPlan');
116
- console.log(_this.editSafetyPlan);
117
- // console.log('this.editSafetyPlan.goal');
118
- // console.log(this.editSafetyPlan.goal);
119
- // console.log('this.editSafetyPlan[0].goal');
120
- // console.log(this.editSafetyPlan[0].goal);
121
- }));
122
- this._victimServicesComponent.getServiceStatusHistories(this.victimServiceId).subscribe((/**
123
- * @param {?} victimServiceStatusHistories
124
- * @return {?}
125
- */
126
- function (victimServiceStatusHistories) {
127
- // this.victimServiceStatusHistories = victimServiceStatusHistories;
128
- _this.victimServiceStatusHistoriesDataSource.data = victimServiceStatusHistories;
129
- }));
130
- }
131
- this.loadProvider();
132
- };
133
- //pass in id
134
- //pass in id
135
- /**
136
- * @param {?} providerListCollectionKey
137
- * @param {?} serviceTypeName
138
- * @param {?} event
139
- * @return {?}
140
- */
141
- VictimSafetyPlanDetailComponent.prototype.isInArray =
142
- //pass in id
143
- /**
144
- * @param {?} providerListCollectionKey
145
- * @param {?} serviceTypeName
146
- * @param {?} event
147
- * @return {?}
148
- */
149
- function (providerListCollectionKey, serviceTypeName, event) {
150
- var _this = this;
151
- console.log('providerListCollectionKey');
152
- console.log(providerListCollectionKey);
153
- console.log('serviceTypeName');
154
- console.log(serviceTypeName);
155
- console.log('event.source.value');
156
- console.log(event.checked);
157
- if (event.checked == true) {
158
- for (var j = 0; j < this.providerListCollection.length; j++) {
159
- if (providerListCollectionKey == this.providerListCollection[j].groupId) {
160
- this.providerListCollection[j].isDisplay = !this.providerListCollection[j].isDisplay;
161
- /** @type {?} */
162
- var dialogRef = this.dialog.open(SeriveProviderComponent, {
163
- width: '500px',
164
- data: (/** @type {?} */ ({
165
- serviceType: serviceTypeName,
166
- serviceTypeId: providerListCollectionKey,
167
- providerCollections: tslib_1.__spread(this.providerListCollection),
168
- })),
169
- panelClass: 'formFieldWidth480',
170
- });
171
- dialogRef.afterClosed().subscribe((/**
172
- * @param {?} result
173
- * @return {?}
174
- */
175
- function (result) {
176
- console.log('The dialog was closed');
177
- console.log(result);
178
- if (result) {
179
- console.log('The dialog was closed, inside result');
180
- _this.savePlanProvider(providerListCollectionKey, result.voteeProviderId);
181
- }
182
- }));
183
- // return;
184
- }
185
- }
186
- } //if event.checked == true
187
- //this.router.navigate(['saftyPlanDetail', this.victimServiceId, this.victimId ]);
188
- };
189
- /**
190
- * @return {?}
191
- */
192
- VictimSafetyPlanDetailComponent.prototype.loadProvider = /**
193
- * @return {?}
194
- */
195
- function () {
196
- var _this = this;
197
- this.providerListCollection = [];
198
- this._victimServicesComponent.getvVictimServiceTypeProgramProviders()
199
- .subscribe((/**
200
- * @param {?} providerList
201
- * @return {?}
202
- */
203
- function (providerList) {
204
- if (providerList) {
205
- /** @type {?} */
206
- var providers = Object.create(null);
207
- for (var i = 0; i < providerList.length; i++) {
208
- if (!providers[providerList[i].victimServiceTypeId]) {
209
- providers[providerList[i].victimServiceTypeId] = [];
210
- if (_this.editSafetyPlan.vVictimServiceDetails != null) {
211
- for (var j = 0; j < _this.editSafetyPlan.vVictimServiceDetails.length; j++) {
212
- if (providerList[i].victimServiceTypeId == _this.editSafetyPlan.vVictimServiceDetails[j].victimServiceId.toString()) {
213
- _this.isDisplay = true;
214
- }
215
- }
216
- }
217
- _this.providerListCollection.push({ groupId: providerList[i].victimServiceTypeId, isDisplay: _this.isDisplay, collection: providers[providerList[i].victimServiceTypeId] });
218
- }
219
- providers[providerList[i].victimServiceTypeId].push(providerList[i]);
220
- }
221
- }
222
- }));
223
- };
224
- //---------------graphQL--------------------------------------
225
- // getVictimServiceTypeProgramProviders(): Observable<VictimServiceTypeProgramProviderModel[]> {
226
- // const queryString = `
227
- // {
228
- // findVictimServiceTypeProgramProviders {
229
- // data {
230
- // victimServiceTypeProgramProviderId
231
- // victimServiceType
232
- // victimProgramProvider
233
- // }
234
- // }
235
- // }`;
236
- // return this.http.post<any>(environment.smartApiUrl, { query: queryString })
237
- // .map(result => {
238
- // return result.data.findVictimServiceTypeProgramProviders.data;
239
- // });
240
- // }
241
- //---------------graphQL--------------------------------------
242
- // getVictimServiceTypeProgramProviders(): Observable<VictimServiceTypeProgramProviderModel[]> {
243
- // const queryString = `
244
- // {
245
- // findVictimServiceTypeProgramProviders {
246
- // data {
247
- // victimServiceTypeProgramProviderId
248
- // victimServiceType
249
- // victimProgramProvider
250
- // }
251
- // }
252
- // }`;
253
- // return this.http.post<any>(environment.smartApiUrl, { query: queryString })
254
- // .map(result => {
255
- // return result.data.findVictimServiceTypeProgramProviders.data;
256
- // });
257
- // }
258
- /**
259
- * @param {?} victimServiceTypeId
260
- * @return {?}
261
- */
262
- VictimSafetyPlanDetailComponent.prototype.evaluateSelection =
263
- //---------------graphQL--------------------------------------
264
- // getVictimServiceTypeProgramProviders(): Observable<VictimServiceTypeProgramProviderModel[]> {
265
- // const queryString = `
266
- // {
267
- // findVictimServiceTypeProgramProviders {
268
- // data {
269
- // victimServiceTypeProgramProviderId
270
- // victimServiceType
271
- // victimProgramProvider
272
- // }
273
- // }
274
- // }`;
275
- // return this.http.post<any>(environment.smartApiUrl, { query: queryString })
276
- // .map(result => {
277
- // return result.data.findVictimServiceTypeProgramProviders.data;
278
- // });
279
- // }
280
- /**
281
- * @param {?} victimServiceTypeId
282
- * @return {?}
283
- */
284
- function (victimServiceTypeId) {
285
- if (this.editSafetyPlan.vVictimServiceDetails) {
286
- return this.editSafetyPlan.vVictimServiceDetails.findIndex((/**
287
- * @param {?} r
288
- * @return {?}
289
- */
290
- function (r) { return r.victimServiceTypeId === victimServiceTypeId; })) >= 0;
291
- }
292
- };
293
- /**
294
- * @param {?} victimServiceTypeId
295
- * @param {?} victimProgramProviderId
296
- * @return {?}
297
- */
298
- VictimSafetyPlanDetailComponent.prototype.savePlanProvider = /**
299
- * @param {?} victimServiceTypeId
300
- * @param {?} victimProgramProviderId
301
- * @return {?}
302
- */
303
- function (victimServiceTypeId, victimProgramProviderId) {
304
- var _this = this;
305
- console.log('savePlanProvider');
306
- console.log(victimServiceTypeId);
307
- console.log(victimProgramProviderId);
308
- if (victimProgramProviderId === "" || victimProgramProviderId === null || victimProgramProviderId === undefined) {
309
- this.snackBar.open('Please pick a program on the drop down list !', '', { duration: 120, });
310
- // alert('Please pick a program on the drop down list !');
311
- }
312
- else {
313
- if (this.victimServiceId == 0) {
314
- //insert
315
- console.log('insert new plan');
316
- /** @type {?} */
317
- var safetyPlan = {
318
- victimId: this.victimId,
319
- fullName: null,
320
- victimServiceId: 0,
321
- goal: this.editSafetyPlan.goal,
322
- comment: this.editSafetyPlan.comment,
323
- modifiedBy: this.staffId,
324
- victimServiceStatusId: null,
325
- status: null,
326
- startDate: null,
327
- vVictimServiceDetails: null,
328
- victimName: null
329
- };
330
- this._victimServicesComponent.addSafetyPlan(safetyPlan).subscribe((/**
331
- * @param {?} itms
332
- * @return {?}
333
- */
334
- function (itms) {
335
- /** @type {?} */
336
- var victimServiceStatus = {
337
- victimServiceStatusHistoryId: 0,
338
- victimServiceId: itms.victimServiceId,
339
- victimServiceStatusId: _this.editSafetyPlan.victimServiceStatusId,
340
- startDate: _this.editSafetyPlan.startDate,
341
- modifiedBy: _this.staffId,
342
- comment: 'test add safety plan'
343
- };
344
- _this._victimServicesComponent.addVictimServiceStatus(victimServiceStatus).subscribe((/**
345
- * @return {?}
346
- */
347
- function () {
348
- console.log('check itms.victimServiceId iniside add victim serive status');
349
- console.log(itms.victimServiceId);
350
- /** @type {?} */
351
- var victimServiceDetail = {
352
- victimServiceId: itms.victimServiceId,
353
- victimServiceDetailId: 0,
354
- victimServiceTypeId: victimServiceTypeId,
355
- victimProgramProviderId: victimProgramProviderId,
356
- modifiedBy: _this.staffId,
357
- victimProgramProvider: null
358
- };
359
- console.log('add plan provider here at insert');
360
- _this._victimServicesComponent.addPlanProvider(victimServiceDetail).subscribe((/**
361
- * @return {?}
362
- */
363
- function () {
364
- _this.router.navigate(['saftyPlanDetail', itms.victimServiceId, _this.victimId]);
365
- }));
366
- }));
367
- }));
368
- }
369
- else //update
370
- {
371
- /** @type {?} */
372
- var victimServiceDetail = {
373
- victimServiceId: this.victimServiceId,
374
- victimServiceDetailId: 0,
375
- victimServiceTypeId: victimServiceTypeId,
376
- victimProgramProviderId: victimProgramProviderId,
377
- modifiedBy: this.staffId,
378
- victimProgramProvider: null
379
- };
380
- console.log('add plan provider here at update');
381
- this._victimServicesComponent.addPlanProvider(victimServiceDetail).subscribe((/**
382
- * @return {?}
383
- */
384
- function () {
385
- _this.router.navigate(['saftyPlanDetail', _this.victimServiceId, _this.victimId]);
386
- }));
387
- }
388
- }
389
- };
390
- /**
391
- * @param {?} victimProgramProviderId
392
- * @return {?}
393
- */
394
- VictimSafetyPlanDetailComponent.prototype.deleteProvider = /**
395
- * @param {?} victimProgramProviderId
396
- * @return {?}
397
- */
398
- function (victimProgramProviderId) {
399
- var _this = this;
400
- this.commonDialogService
401
- .confirm('', 'Do you want to delete this provider?', 'Yes', 'No')
402
- .subscribe((/**
403
- * @param {?} res
404
- * @return {?}
405
- */
406
- function (res) {
407
- _this.result = res;
408
- if (_this.result) {
409
- _this._victimServicesComponent.deleteProvider(victimProgramProviderId, _this.staffId)
410
- .subscribe((/**
411
- * @param {?} result
412
- * @return {?}
413
- */
414
- function (result) {
415
- _this.snackBar.open('delete provider Successfully !', '', {
416
- duration: 3000,
417
- });
418
- location.reload();
419
- }));
420
- }
421
- }));
422
- // location.reload();
423
- };
424
- /**
425
- * @return {?}
426
- */
427
- VictimSafetyPlanDetailComponent.prototype.saveSafetyPlan = /**
428
- * @return {?}
429
- */
430
- function () {
431
- var _this = this;
432
- if (this.editSafetyPlan.victimServiceId === undefined) {
433
- /** @type {?} */
434
- var safetyPlan = {
435
- victimId: this.victimId,
436
- fullName: null,
437
- victimServiceId: 0,
438
- goal: this.editSafetyPlan.goal,
439
- comment: this.editSafetyPlan.comment,
440
- modifiedBy: this.staffId,
441
- victimServiceStatusId: null,
442
- status: null,
443
- startDate: null,
444
- vVictimServiceDetails: null,
445
- victimName: null
446
- };
447
- this._victimServicesComponent.addSafetyPlan(safetyPlan).subscribe((/**
448
- * @param {?} itms
449
- * @return {?}
450
- */
451
- function (itms) {
452
- /** @type {?} */
453
- var victimServiceStatus = {
454
- victimServiceStatusHistoryId: 0,
455
- victimServiceId: itms.victimServiceId,
456
- victimServiceStatusId: _this.editSafetyPlan.victimServiceStatusId,
457
- startDate: _this.editSafetyPlan.startDate,
458
- modifiedBy: _this.staffId,
459
- comment: 'test add safety Plan'
460
- };
461
- _this._victimServicesComponent.addVictimServiceStatus(victimServiceStatus).subscribe((/**
462
- * @param {?} resp
463
- * @return {?}
464
- */
465
- function (resp) {
466
- _this.snackBar.open('Insert status successfully!', '', {
467
- duration: 3000,
468
- });
469
- }));
470
- _this.router.navigate(['saftyPlanDetail', itms.victimServiceId, _this.victimId]);
471
- }));
472
- }
473
- else {
474
- // this.editSafetyPlan.modifiedBy=this.loginStaff.staffId;
475
- this.editSafetyPlan.modifiedBy = this.staffId;
476
- this._victimServicesComponent.updateSafetyPlan(this.editSafetyPlan).subscribe((/**
477
- * @param {?} resp
478
- * @return {?}
479
- */
480
- function (resp) {
481
- // this.snackBar.open('update Successfully!', '', {
482
- // duration: 3000,
483
- // });
484
- // this.snackBar.open('update Successfully!', '', {
485
- // duration: 3000,
486
- // });
487
- /** @type {?} */
488
- var victimServiceStatus = {
489
- victimServiceStatusHistoryId: 0,
490
- victimServiceId: _this.editSafetyPlan.victimServiceId.toString(),
491
- victimServiceStatusId: _this.editSafetyPlan.victimServiceStatusId,
492
- startDate: _this.editSafetyPlan.startDate,
493
- modifiedBy: _this.staffId,
494
- comment: 'test update safety Plan'
495
- };
496
- _this._victimServicesComponent.addVictimServiceStatus(victimServiceStatus).subscribe();
497
- _this.router.navigate(['saftyPlanDetail', _this.editSafetyPlan.victimServiceId, _this.victimId]);
498
- }));
499
- }
500
- };
501
- /**
502
- * @return {?}
503
- */
504
- VictimSafetyPlanDetailComponent.prototype.back = /**
505
- * @return {?}
506
- */
507
- function () {
508
- console.log('this.victimId');
509
- console.log(this.victimId);
510
- this.router.navigate(['saftyPlan', this.victimId]);
511
- };
512
- VictimSafetyPlanDetailComponent.decorators = [
513
- { type: Component, args: [{
514
- template: "<mat-card>\r\n <mat-card-header>\r\n \r\n </mat-card-header>\r\n <mat-card-content>\r\n <mat-toolbar color=\"primary\">\r\n <h4 class=\"card-header\" style=\"display: inline-block;\">Safety Plan</h4>\r\n </mat-toolbar>\r\n \r\n \r\n <div class='container'>\r\n <form [formGroup]=\"spForm\" #spDetailForm=\"ngForm\" >\r\n \r\n \r\n <div class=\"row\" ><b>Victim Name:</b> {{victimName}} </div>\r\n \r\n\r\n <div class=\"row\" > \r\n <mat-form-field >\r\n <mat-label>Goal:</mat-label>\r\n <input matInput formControlName=\"serviceGoal\" [(ngModel)]=\"editSafetyPlan.goal\" >\r\n </mat-form-field>\r\n \r\n </div>\r\n \r\n \r\n \r\n \r\n \r\n \r\n <div class=\"row\"> \r\n <mat-form-field>\r\n <mat-label>Goal Status:</mat-label>\r\n <mat-select formControlName=\"goalStatus\" [(ngModel)]=\"editSafetyPlan.victimServiceStatusId\" >\r\n \r\n <mat-option *ngFor=\" let victimServiceStatu of victimServiceStatus\" [value]=\"victimServiceStatu.victimServiceStatusId\" >{{victimServiceStatu.name}}</mat-option>\r\n \r\n </mat-select> \r\n </mat-form-field>\r\n </div>\r\n \r\n\r\n \r\n \r\n <div class=\"row\"> \r\n \r\n <mat-form-field>\r\n <mat-label>Goal Status Date:</mat-label>\r\n <input matInput \r\n formControlName=\"goalStatusDate\" \r\n [matDatepicker]=\"goalStatusDate\" \r\n placeholder=\"Choose a date\" [(ngModel)]=\"editSafetyPlan.startDate\" \r\n (click)=\"goalStatusDate.open()\" \r\n >\r\n \r\n <mat-datepicker-toggle matSuffix [for]=\"goalStatusDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #goalStatusDate></mat-datepicker> \r\n </mat-form-field> \r\n\r\n\r\n <div class=\"help-block\" \r\n *ngIf=\"spForm.get('goalStatusDate').hasError('date') \r\n && (spForm.get('goalStatusDate').dirty || spForm.get('goalStatusDate').touched)\">\r\n <mat-error>Future Date is <strong>not allowed</strong> for goal status date</mat-error>\r\n </div>\r\n </div>\r\n\r\n \r\n <div class=\"row\" > \r\n <!-- <mat-form-field style=\"width: 200px;\"> -->\r\n <!-- <mat-label>Comment:</mat-label> \r\n <textarea mdInput \r\n class=\"textarea-content\"\r\n [(ngModel)]=\"editSafetyPlan.comment\"\r\n formControlName=\"comment\" \r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\"\r\n >\r\n </textarea> -->\r\n <!-- </mat-form-field> -->\r\n\r\n\r\n\r\n <mat-form-field style=\"width: 400px;\">\r\n <mat-label>Comment:</mat-label>\r\n <textarea \r\n class=\"textarea-content\"\r\n matInput \r\n placeholder=\"\" \r\n formControlName=\"comment\" \r\n [(ngModel)]=\"editSafetyPlan.comment\"\r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\">\r\n </textarea> \r\n\r\n \r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n </form>\r\n </div><!--end form-->\r\n \r\n \r\n <br>\r\n\r\n <div class=\"row\"><b>Need and provider:</b><br> (click on a check box to select provider information)\r\n \r\n <mat-list>\r\n <mat-list-item *ngFor=\"let serviceType of victimServiceTypes; let i=index\" >\r\n <mat-checkbox class=\"example-margin\" name=\"victimService\" color =\"primary\" [checked]=\"evaluateSelection(serviceType.victimServiceTypeId)\" (change)=\"isInArray(serviceType.victimServiceTypeId,serviceType.name, $event);\" > {{serviceType.name}}</mat-checkbox>\r\n <div> &nbsp;&nbsp;</div>\r\n <div *ngFor=\"let provider of providerListCollection; let pi = index\" >\r\n <!-- <div *ngIf=\"provider.isDisplay && serviceType.victimServiceTypeId == provider.groupId \" class=\"Row\">\r\n \r\n <div class=\"serviceSelect\"> -->\r\n <!-- <mat-form-field> -->\r\n <!-- <mat-select name=\"provider\" id=\"provider.groupId\" [(ngModel)]=\"providerId\" > -->\r\n <!-- <mat-select name=\"provider\" id=\"provider.groupId\" [(value)]=\"providerId\" > \r\n <mat-option *ngFor=\" let providerOption of provider.collection\" [value]=\"providerOption.victimProgramProviderId\" >{{providerOption.victimProgramProvider}}</mat-option>\r\n </mat-select> -->\r\n <!-- </mat-form-field> -->\r\n \r\n <!-- </div>\r\n\r\n <div class=\"serviceButton\">\r\n <button mat-raised-button color=\"primary\" (click)=\"savePlanProvider(serviceType.victimServiceTypeId ,providerId)\">Add Provider</button>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div *ngFor=\" let serviceprovider of editSafetyPlan.vVictimServiceDetails\" >\r\n \r\n <div *ngIf=\"serviceType.victimServiceTypeId===serviceprovider.victimServiceTypeId\" class=\"Row\" >\r\n <!-- . {{ serviceprovider.victimProgramProvider}}<button mat-raised-button color=\"primary\" (click)=\"deleteProvider(serviceprovider.victimServiceDetailId)\">Delete</button> <br> -->\r\n <div class=\"serviceSelect\" >\r\n . {{ serviceprovider.victimProgramProvider}}\r\n </div>\r\n <div class=\"serviceButton\">\r\n <button mat-raised-button color=\"primary\" (click)=\"deleteProvider(serviceprovider.victimServiceDetailId)\">Delete</button> \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n </mat-list-item> \r\n \r\n </mat-list>\r\n </div>\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n <!-- <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Victim Name:</b> {{victimName}} </div>\r\n <div class='col-md-7'> \r\n \r\n </div> \r\n </div> -->\r\n <!-- <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'> \r\n <mat-form-field >\r\n <input matInput name=\"serviceGoal\" [(ngModel)]=\"editSafetyPlan.goal\" required placeholder=\"\">\r\n </mat-form-field>\r\n </div> \r\n </div>\r\n\r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal Status:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'> \r\n <mat-select name=\"goalStatus\" [style.width]=\"'50%'\" [(ngModel)]=\"editSafetyPlan.victimServiceStatusId\" required>\r\n <mat-option *ngFor=\" let victimServiceStatu of victimServiceStatus\" [value]=\"victimServiceStatu.victimServiceStatusId\" >{{victimServiceStatu.name}}</mat-option>\r\n </mat-select>\r\n </div> \r\n </div>\r\n \r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal Status Date:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'> \r\n <input matInput name=\"goalStatusDate\" [matDatepicker]=\"goalStatusDate\" placeholder=\"Choose a date\" [(ngModel)]=\"editSafetyPlan.startDate\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"goalStatusDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #goalStatusDate></mat-datepicker> \r\n </div> \r\n </div>\r\n \r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Comment:</b></div>\r\n <div class='col-md-7'> \r\n <textarea mdInput placeholder=\"\" rows=\"10\" cols=\"50\" name=\"comment\" [(ngModel)]=\"editSafetyPlan.comment\"></textarea> \r\n </div> \r\n </div> -->\r\n\r\n \r\n <div class='row' >\r\n <div class='col-md-12 text-center'>\r\n <!-- <button type=\"button\" class=\"btn btn-default btn-small\" (click)=\"print()\">Print</button> -->\r\n <button mat-raised-button color=\"primary\" (click)=\"saveSafetyPlan()\" [disabled]=\"!spForm.valid\">Save</button>\r\n <!-- &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"commondialogRef.close()\">Cancel</button> -->\r\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\r\n </div> \r\n </div> \r\n\r\n <!--status hisotry-->\r\n \r\n <mat-table #table [dataSource]=\"victimServiceStatusHistoriesDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"startDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Start Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.startDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"victimServiceStatusId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Status</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimServiceStatusId}} </mat-cell>\r\n </ng-container>\r\n \r\n \r\n <ng-container matColumnDef=\"comment\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"[ 'startDate', 'victimServiceStatusId', 'comment']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:[ 'startDate', 'victimServiceStatusId', 'comment'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n \r\n \r\n\r\n</mat-card-content>\r\n</mat-card>",
515
- providers: [CommonDialogService],
516
- styles: ["div.serviceSelect{width:500px}div.serviceButton{width:20%}.container{margin:16px;display:-ms-grid;display:grid;-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}.app-class .mat-list-item{height:auto}.textarea-content{width:500px}"]
517
- }] }
518
- ];
519
- /** @nocollapse */
520
- VictimSafetyPlanDetailComponent.ctorParameters = function () { return [
521
- { type: MatDialog },
522
- { type: NgcSmartVictimService },
523
- { type: HttpClient },
524
- { type: MatSnackBar },
525
- { type: ActivatedRoute },
526
- { type: Router },
527
- { type: CommonDialogService },
528
- { type: FormBuilder }
529
- ]; };
530
- return VictimSafetyPlanDetailComponent;
531
- }());
532
- export { VictimSafetyPlanDetailComponent };
533
- if (false) {
534
- /** @type {?} */
535
- VictimSafetyPlanDetailComponent.prototype.hiddenAddNewFlag;
536
- /** @type {?} */
537
- VictimSafetyPlanDetailComponent.prototype.safetyPlans;
538
- /** @type {?} */
539
- VictimSafetyPlanDetailComponent.prototype.safetyPlan;
540
- /** @type {?} */
541
- VictimSafetyPlanDetailComponent.prototype.editSafetyPlan;
542
- /** @type {?} */
543
- VictimSafetyPlanDetailComponent.prototype.errorMessage;
544
- /** @type {?} */
545
- VictimSafetyPlanDetailComponent.prototype.contactTypes;
546
- /** @type {?} */
547
- VictimSafetyPlanDetailComponent.prototype.contactPurposes;
548
- /** @type {?} */
549
- VictimSafetyPlanDetailComponent.prototype.victimServiceTypes;
550
- /** @type {?} */
551
- VictimSafetyPlanDetailComponent.prototype.victimSafetyPlans;
552
- /** @type {?} */
553
- VictimSafetyPlanDetailComponent.prototype.victimServiceStatus;
554
- /** @type {?} */
555
- VictimSafetyPlanDetailComponent.prototype.providerList;
556
- /** @type {?} */
557
- VictimSafetyPlanDetailComponent.prototype.providerListCollection;
558
- /** @type {?} */
559
- VictimSafetyPlanDetailComponent.prototype.victimServiceDetail;
560
- /** @type {?} */
561
- VictimSafetyPlanDetailComponent.prototype.indx;
562
- /** @type {?} */
563
- VictimSafetyPlanDetailComponent.prototype.serviceCheck;
564
- /** @type {?} */
565
- VictimSafetyPlanDetailComponent.prototype.victimName;
566
- /** @type {?} */
567
- VictimSafetyPlanDetailComponent.prototype.isDisplay;
568
- /** @type {?} */
569
- VictimSafetyPlanDetailComponent.prototype.staffId;
570
- /** @type {?} */
571
- VictimSafetyPlanDetailComponent.prototype.victimId;
572
- /** @type {?} */
573
- VictimSafetyPlanDetailComponent.prototype.victimServiceId;
574
- /** @type {?} */
575
- VictimSafetyPlanDetailComponent.prototype.offenderId;
576
- /** @type {?} */
577
- VictimSafetyPlanDetailComponent.prototype.loginStaff;
578
- /**
579
- * @type {?}
580
- * @private
581
- */
582
- VictimSafetyPlanDetailComponent.prototype.sub;
583
- /** @type {?} */
584
- VictimSafetyPlanDetailComponent.prototype.result;
585
- /** @type {?} */
586
- VictimSafetyPlanDetailComponent.prototype.victimServiceStatusHistoriesDataSource;
587
- /** @type {?} */
588
- VictimSafetyPlanDetailComponent.prototype.providerId;
589
- /** @type {?} */
590
- VictimSafetyPlanDetailComponent.prototype.selected;
591
- /** @type {?} */
592
- VictimSafetyPlanDetailComponent.prototype.spForm;
593
- /** @type {?} */
594
- VictimSafetyPlanDetailComponent.prototype.dialog;
595
- /**
596
- * @type {?}
597
- * @private
598
- */
599
- VictimSafetyPlanDetailComponent.prototype._victimServicesComponent;
600
- /**
601
- * @type {?}
602
- * @private
603
- */
604
- VictimSafetyPlanDetailComponent.prototype.http;
605
- /** @type {?} */
606
- VictimSafetyPlanDetailComponent.prototype.snackBar;
607
- /**
608
- * @type {?}
609
- * @private
610
- */
611
- VictimSafetyPlanDetailComponent.prototype.route;
612
- /**
613
- * @type {?}
614
- * @private
615
- */
616
- VictimSafetyPlanDetailComponent.prototype.router;
617
- /**
618
- * @type {?}
619
- * @private
620
- */
621
- VictimSafetyPlanDetailComponent.prototype.commonDialogService;
622
- /**
623
- * @type {?}
624
- * @private
625
- */
626
- VictimSafetyPlanDetailComponent.prototype.formBuilder;
627
- }
628
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmljdGltU2FmZXR5UGxhbkRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY3NtYXJ0L25nYy1zbWFydC12aWN0aW0vIiwic291cmNlcyI6WyJsaWIvc2FmZXR5UGxhbi92aWN0aW1TYWZldHlQbGFuRGV0YWlsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFhLFdBQVcsRUFBQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUloRixPQUFPLEVBQUUsV0FBVyxFQUFDLGtCQUFrQixFQUFDLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxVQUFVLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxhQUFhLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFFeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFDLE1BQU0seUNBQXlDLENBQUE7QUFHaEY7SUF5Q0UseUNBQ1MsTUFBaUIsRUFDaEIsd0JBQStDLEVBQy9DLElBQWdCLEVBQ2pCLFFBQXFCLEVBQ3BCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxtQkFBd0MsRUFDeEMsV0FBd0I7UUFQekIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNoQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQXVCO1FBQy9DLFNBQUksR0FBSixJQUFJLENBQVk7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNwQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdB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IENvbXBvbmVudCwgT25Jbml0LEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2NTbWFydFZpY3RpbVNlcnZpY2UgfSBmcm9tICcuLi9zbWFydC12aWN0aW0uc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFZpY3RpbVNhZmV0eVBsYW4sVmljdGltU2VydmljZURldGFpbCxcclxuICBWaWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yeSxWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlck1vZGVsLFxyXG4gIFByb3ZpZGVyTGlzdENvbGxlY3Rpb25Nb2RlbCB9IGZyb20gJy4uL3NtYXJ0LXZpY3RpbS5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyLE1hdFRhYmxlRGF0YVNvdXJjZSxNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XHJcbmltcG9ydCB7IENvbW1vbkRpYWxvZ1NlcnZpY2V9IGZyb20gJy4uLy4vY29tbW9uLWRpYWxvZy9jb21tb24tZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU2VsZWN0ZWRPZmZlbmRlciwgTG9naW5TdGFmZiB9IGZyb20gJ0Bjc21hcnQvbmdjLXNtYXJ0LWNvcmUnO1xyXG5pbXBvcnQgeyBkYXRlVmFsaWRhdG9yLCBwYXNzRGF0ZVZhbGlkYXRvciB9IGZyb20gJy4uL3NoYXJlZC92YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgdHlwZVNvdXJjZVNwYW4gfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XHJcbmltcG9ydCB7IFNlcml2ZVByb3ZpZGVyQ29tcG9uZW50fSBmcm9tICcuLi9zYWZldHlQbGFuL3NlcnZpY2VQcm92aWRlci5jb21wb25lbnQnXHJcbmltcG9ydCB7IFByb3ZpZGVyc0RpYWxvZ0RhdGF9IGZyb20gJy4uL3NtYXJ0LXZpY3RpbS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJy4vdmljdGltU2FmZXR5UGxhbkRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbQ29tbW9uRGlhbG9nU2VydmljZV0sXHJcbiAgc3R5bGVVcmxzOiBbJy4vdmljdGltU2FmZXR5UGxhbi5jb21wb25lbnQuY3NzJ11cclxuIFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFZpY3RpbVNhZmV0eVBsYW5EZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuXHJcbiAgaGlkZGVuQWRkTmV3RmxhZzogYm9vbGVhbjtcclxuICBzYWZldHlQbGFuczogVmljdGltU2FmZXR5UGxhbltdO1xyXG4gIHNhZmV0eVBsYW46IFZpY3RpbVNhZmV0eVBsYW47XHJcbiAgZWRpdFNhZmV0eVBsYW46IFZpY3RpbVNhZmV0eVBsYW4gPSA8VmljdGltU2FmZXR5UGxhbj57fTtcclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICBjb250YWN0VHlwZXM6IGFueVtdO1xyXG4gIGNvbnRhY3RQdXJwb3NlczogYW55W107XHJcbiAgdmljdGltU2VydmljZVR5cGVzOiBhbnlbXTtcclxuICB2aWN0aW1TYWZldHlQbGFuczogVmljdGltU2FmZXR5UGxhbltdO1xyXG4gIHZpY3RpbVNlcnZpY2VTdGF0dXM6IGFueVtdO1xyXG4gIHByb3ZpZGVyTGlzdDogVmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJNb2RlbFtdO1xyXG4gIHByb3ZpZGVyTGlzdENvbGxlY3Rpb246UHJvdmlkZXJMaXN0Q29sbGVjdGlvbk1vZGVsW109W107XHJcbiAgdmljdGltU2VydmljZURldGFpbDogVmljdGltU2VydmljZURldGFpbFtdO1xyXG4gIGluZHg6YW55O1xyXG4gIHNlcnZpY2VDaGVjayA9IFtdO1xyXG4gIHZpY3RpbU5hbWU6IHN0cmluZztcclxuICBpc0Rpc3BsYXk6IGJvb2xlYW47XHJcbiAgc3RhZmZJZDogbnVtYmVyO1xyXG4gIHZpY3RpbUlkOiBudW1iZXI7XHJcbiAgdmljdGltU2VydmljZUlkOiBudW1iZXI7XHJcbiAgb2ZmZW5kZXJJZDogbnVtYmVyO1xyXG4gIGxvZ2luU3RhZmY6IExvZ2luU3RhZmY7XHJcbiAgcHJpdmF0ZSBzdWI6IGFueTtcclxuICByZXN1bHQ6IGFueTtcclxuICB2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzRGF0YVNvdXJjZT0gbmV3ICBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuICBwcm92aWRlcklkOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWQ6IHN0cmluZztcclxuXHJcblxyXG4gIHNwRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50OiBOZ2NTbWFydFZpY3RpbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwdWJsaWMgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBjb21tb25EaWFsb2dTZXJ2aWNlOiBDb21tb25EaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgXHJcbiAgKSB7XHJcblxyXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGluaXRGb3JtKCkge1xyXG5cclxuXHRcclxuXHRcdFx0dGhpcy5zcEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBzZXJ2aWNlR29hbDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFx0XHQgIF0pKSxcclxuICAgICAgICAgIGdvYWxTdGF0dXM6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFx0XHQgIF0pKSxcclxuICAgICAgICAgIGdvYWxTdGF0dXNEYXRlOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsZGF0ZVZhbGlkYXRvcigpXHRcdCAgXSkpLFxyXG4gICAgICAgICAgY29tbWVudDogbmV3IEZvcm1Db250cm9sKCcnLFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNwRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICB0aGlzLnNwRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgICAgXHJcbiAgICB9XHJcbiBcclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICBcclxuXHJcbiAgICB2YXIgZGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcclxuICAgIHRoaXMubG9naW5TdGFmZiA9IGRhdGEubG9naW5TdGFmZjtcclxuICAgIHRoaXMuc3RhZmZJZCA9ICB0aGlzLmxvZ2luU3RhZmYuc3RhZmZJZDtcclxuXHJcbiAgICB0aGlzLnN1YiA9IHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLnZpY3RpbVNlcnZpY2VJZCA9IHBhcmFtc1sndmljdGltU2VydmljZUlkJ107XHJcbiAgICAgIHRoaXMudmljdGltSWQgPSBwYXJhbXNbJ3ZpY3RpbUlkJ107XHJcbiBcclxuICAgIH0pO1xyXG4gICBcclxuICAgIHRoaXMuaGlkZGVuQWRkTmV3RmxhZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0Rpc3BsYXkgPSBmYWxzZTtcclxuICAgXHJcbiBcclxuXHJcbiAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltU2VydmljZVR5cGVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZVR5cGVzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltU2VydmljZVN0YXR1cygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2VTdGF0dXMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRWaWN0aW0odGhpcy52aWN0aW1JZCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudmljdGltTmFtZSA9IGl0ZW1zLmZpcnN0TmFtZSArICcsICcgKyBpdGVtcy5sYXN0TmFtZTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiBcclxuICAgICBcclxuICAvLy0tLS0tLS0tLS0tLS0tLWdyYXBoUUwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAvLyB0aGlzLmdldFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVycygpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAvLyB0aGlzLnByb3ZpZGVyTGlzdCA9IHJlc3VsdDtcclxuICAgICAgLy8gfSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbVNlcnZpY2VJZCcpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbVNlcnZpY2VJZCk7XHJcbiAgICAgXHJcbiAgICBpZiAodGhpcy52aWN0aW1TZXJ2aWNlSWQhPTApe1xyXG4gICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRWaWN0aW1TZXJ2aWNlcyh0aGlzLnZpY3RpbVNlcnZpY2VJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgIHZpY3RpbVNhZmV0eVBsYW5zID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd2aWN0aW1TYWZldHlQbGFucycpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codmljdGltU2FmZXR5UGxhbnMpO1xyXG5cclxuICAgICAgICAgIHRoaXMuZWRpdFNhZmV0eVBsYW4gPSB2aWN0aW1TYWZldHlQbGFuc1swXTtcclxuICAgICAgICAgIHRoaXMudmljdGltSWQgPSAgdmljdGltU2FmZXR5UGxhbnNbMF0udmljdGltSWQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5lZGl0U2FmZXR5UGxhbicpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy5lZGl0U2FmZXR5UGxhbik7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5lZGl0U2FmZXR5UGxhbi5nb2FsJyk7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmVkaXRTYWZldHlQbGFuLmdvYWwpO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMuZWRpdFNhZmV0eVBsYW5bMF0uZ29hbCcpO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5lZGl0U2FmZXR5UGxhblswXS5nb2FsKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0U2VydmljZVN0YXR1c0hpc3Rvcmllcyh0aGlzLnZpY3RpbVNlcnZpY2VJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXMgPT4ge1xyXG4gICAgICAgIC8vIHRoaXMudmljdGltU2VydmljZVN0YXR1c0hpc3RvcmllcyA9IHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXM7XHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzRGF0YVNvdXJjZS5kYXRhID0gdmljdGltU2VydmljZVN0YXR1c0hpc3RvcmllcztcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZFByb3ZpZGVyKCk7XHJcbiBcclxuICB9XHJcbiAgLy9wYXNzIGluIGlkXHJcbmlzSW5BcnJheShwcm92aWRlckxpc3RDb2xsZWN0aW9uS2V5OnN0cmluZywgc2VydmljZVR5cGVOYW1lOiBzdHJpbmcsIGV2ZW50KXtcclxuXHJcbiAgICBjb25zb2xlLmxvZygncHJvdmlkZXJMaXN0Q29sbGVjdGlvbktleScpO1xyXG4gICAgY29uc29sZS5sb2cocHJvdmlkZXJMaXN0Q29sbGVjdGlvbktleSk7XHJcblxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdzZXJ2aWNlVHlwZU5hbWUnKTtcclxuICAgIGNvbnNvbGUubG9nKHNlcnZpY2VUeXBlTmFtZSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ2V2ZW50LnNvdXJjZS52YWx1ZScpO1xyXG4gICAgY29uc29sZS5sb2coZXZlbnQuY2hlY2tlZCk7XHJcblxyXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQgPT0gdHJ1ZSl7XHJcblxyXG4gICAgICBmb3IobGV0IGo9MDtqPHRoaXMucHJvdmlkZXJMaXN0Q29sbGVjdGlvbi5sZW5ndGg7aisrKXtcclxuICAgICAgICBpZihwcm92aWRlckxpc3RDb2xsZWN0aW9uS2V5PT10aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb25bal0uZ3JvdXBJZCl7XHJcbiAgICAgICAgICB0aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb25bal0uaXNEaXNwbGF5PSF0aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb25bal0uaXNEaXNwbGF5O1xyXG5cclxuICAgICBcclxuXHJcbiAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2VyaXZlUHJvdmlkZXJDb21wb25lbnQsIHtcclxuICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxyXG4gICAgICAgICAgZGF0YTogPFByb3ZpZGVyc0RpYWxvZ0RhdGE+e1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgc2VydmljZVR5cGU6c2VydmljZVR5cGVOYW1lLFxyXG4gICAgICAgICAgIHNlcnZpY2VUeXBlSWQ6IHByb3ZpZGVyTGlzdENvbGxlY3Rpb25LZXksXHJcbiAgICAgICAgICAgcHJvdmlkZXJDb2xsZWN0aW9uczogWy4uLnRoaXMucHJvdmlkZXJMaXN0Q29sbGVjdGlvbl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcGFuZWxDbGFzczogJ2Zvcm1GaWVsZFdpZHRoNDgwJyxcclxuICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVGhlIGRpYWxvZyB3YXMgY2xvc2VkJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVGhlIGRpYWxvZyB3YXMgY2xvc2VkLCBpbnNpZGUgcmVzdWx0Jyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZVBsYW5Qcm92aWRlcihwcm92aWRlckxpc3RDb2xsZWN0aW9uS2V5LHJlc3VsdC52b3RlZVByb3ZpZGVySWQpO1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgXHJcbiAgICAgICAgIC8vIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9Ly9pZiBldmVudC5jaGVja2VkID09IHRydWVcclxuICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuRGV0YWlsJywgdGhpcy52aWN0aW1TZXJ2aWNlSWQsICB0aGlzLnZpY3RpbUlkIF0pOyBcclxuICAgICAgXHJcbiAgfVxyXG5cclxubG9hZFByb3ZpZGVyKCl7IFxyXG5cclxuIHRoaXMucHJvdmlkZXJMaXN0Q29sbGVjdGlvbj1bXTtcclxuICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldHZWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcnMoKVxyXG4gICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgIChwcm92aWRlckxpc3Q6VmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJNb2RlbFtdICk9PnsgXHJcbiAgICAgICAgaWYocHJvdmlkZXJMaXN0KXtcclxuICAgXHJcbiAgICAgICAgICBsZXQgcHJvdmlkZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgICAgIGZvcihsZXQgaT0wO2k8cHJvdmlkZXJMaXN0Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCFwcm92aWRlcnNbcHJvdmlkZXJMaXN0W2ldLnZpY3RpbVNlcnZpY2VUeXBlSWRdKSB7XHJcbiAgICAgICAgICAgICAgcHJvdmlkZXJzW3Byb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkXSA9IFtdO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgaWYgKCB0aGlzLmVkaXRTYWZldHlQbGFuLnZWaWN0aW1TZXJ2aWNlRGV0YWlscyAhPSBudWxsICl7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHRoaXMuZWRpdFNhZmV0eVBsYW4udlZpY3RpbVNlcnZpY2VEZXRhaWxzLmxlbmd0aDsgaisrKXtcclxuICAgICAgICAgICAgICAgIGlmICggcHJvdmlkZXJMaXN0W2ldLnZpY3RpbVNlcnZpY2VUeXBlSWQgPT0gdGhpcy5lZGl0U2FmZXR5UGxhbi52VmljdGltU2VydmljZURldGFpbHNbal0udmljdGltU2VydmljZUlkLnRvU3RyaW5nKCkgKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pc0Rpc3BsYXkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJMaXN0Q29sbGVjdGlvbi5wdXNoKHsgZ3JvdXBJZDogcHJvdmlkZXJMaXN0W2ldLnZpY3RpbVNlcnZpY2VUeXBlSWQsaXNEaXNwbGF5OnRoaXMuaXNEaXNwbGF5LCBjb2xsZWN0aW9uOiBwcm92aWRlcnNbcHJvdmlkZXJMaXN0W2ldLnZpY3RpbVNlcnZpY2VUeXBlSWRdIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwcm92aWRlcnNbcHJvdmlkZXJMaXN0W2ldLnZpY3RpbVNlcnZpY2VUeXBlSWRdLnB1c2gocHJvdmlkZXJMaXN0W2ldKTtcclxuICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICB9XHJcbi8vLS0tLS0tLS0tLS0tLS0tZ3JhcGhRTC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vICAgZ2V0VmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJzKCk6IE9ic2VydmFibGU8VmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJNb2RlbFtdPiB7XHJcbi8vICAgICBjb25zdCBxdWVyeVN0cmluZyA9IGBcclxuLy8gICAgICAgICB7XHJcbi8vICAgICAgICAgICBmaW5kVmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJzIHtcclxuLy8gICAgICAgICAgICAgICAgIGRhdGEge1xyXG4vLyAgICAgICAgICAgICAgICAgICB2aWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcklkXHJcbi8vICAgICAgICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VUeXBlXHJcbi8vICAgICAgICAgICAgICAgICAgIHZpY3RpbVByb2dyYW1Qcm92aWRlclxyXG4vLyAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICB9YDtcclxuIFxyXG4vLyAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oZW52aXJvbm1lbnQuc21hcnRBcGlVcmwsIHsgcXVlcnk6IHF1ZXJ5U3RyaW5nIH0pXHJcbi8vICAgICAgICAgLm1hcChyZXN1bHQgPT4ge1xyXG4vLyAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YS5maW5kVmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJzLmRhdGE7XHJcbi8vICAgICB9KTtcclxuLy8gfVxyXG5cclxuICBldmFsdWF0ZVNlbGVjdGlvbih2aWN0aW1TZXJ2aWNlVHlwZUlkOiBzdHJpbmcpIHtcclxuICAgaWYgKHRoaXMuZWRpdFNhZmV0eVBsYW4udlZpY3RpbVNlcnZpY2VEZXRhaWxzKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lZGl0U2FmZXR5UGxhbi52VmljdGltU2VydmljZURldGFpbHMuZmluZEluZGV4KHIgPT4gci52aWN0aW1TZXJ2aWNlVHlwZUlkID09PSB2aWN0aW1TZXJ2aWNlVHlwZUlkKSA+PSAwO1xyXG4gICB9XHJcbiAgfVxyXG5cclxuXHJcbnNhdmVQbGFuUHJvdmlkZXIodmljdGltU2VydmljZVR5cGVJZDogc3RyaW5nLHZpY3RpbVByb2dyYW1Qcm92aWRlcklkOiBzdHJpbmcpe1xyXG5cclxuICBjb25zb2xlLmxvZygnc2F2ZVBsYW5Qcm92aWRlcicpO1xyXG4gIGNvbnNvbGUubG9nKHZpY3RpbVNlcnZpY2VUeXBlSWQpO1xyXG4gIGNvbnNvbGUubG9nKHZpY3RpbVByb2dyYW1Qcm92aWRlcklkKTtcclxuXHJcbiAgaWYgKHZpY3RpbVByb2dyYW1Qcm92aWRlcklkID09PSBcIlwiIHx8IHZpY3RpbVByb2dyYW1Qcm92aWRlcklkPT09IG51bGwgfHwgdmljdGltUHJvZ3JhbVByb3ZpZGVySWQgPT09IHVuZGVmaW5lZCl7XHJcbiAgXHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1BsZWFzZSBwaWNrIGEgcHJvZ3JhbSBvbiB0aGUgZHJvcCBkb3duIGxpc3QgIScsICcnLCB7IGR1cmF0aW9uOiAxMjAsfSk7XHJcbiAgIC8vIGFsZXJ0KCdQbGVhc2UgcGljayBhIHByb2dyYW0gb24gdGhlIGRyb3AgZG93biBsaXN0ICEnKTtcclxuXHJcbiAgfWVsc2VcclxuICB7XHJcbiAgICBcclxuICBpZiAoIHRoaXMudmljdGltU2VydmljZUlkID09IDApe1xyXG4gICAvL2luc2VydFxyXG4gICBjb25zb2xlLmxvZygnaW5zZXJ0IG5ldyBwbGFuJyk7XHJcbiAgIGNvbnN0IHNhZmV0eVBsYW46IFZpY3RpbVNhZmV0eVBsYW4gPSB7XHJcbiAgICB2aWN0aW1JZDp0aGlzLnZpY3RpbUlkLFxyXG4gICAgZnVsbE5hbWU6IG51bGwsXHJcbiAgICB2aWN0aW1TZXJ2aWNlSWQ6IDAsXHJcbiAgICBnb2FsOnRoaXMuZWRpdFNhZmV0eVBsYW4uZ29hbCxcclxuICAgIGNvbW1lbnQ6IHRoaXMuZWRpdFNhZmV0eVBsYW4uY29tbWVudCxcclxuICAgIG1vZGlmaWVkQnk6dGhpcy5zdGFmZklkLFxyXG4gICAgdmljdGltU2VydmljZVN0YXR1c0lkOiBudWxsLFxyXG4gICAgc3RhdHVzOiBudWxsLFxyXG4gICAgc3RhcnREYXRlOiBudWxsLFxyXG4gICAgdlZpY3RpbVNlcnZpY2VEZXRhaWxzOiBudWxsLFxyXG4gICAgdmljdGltTmFtZTogbnVsbFxyXG59O1xyXG50aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5hZGRTYWZldHlQbGFuKHNhZmV0eVBsYW4pLnN1YnNjcmliZShcclxuICAoaXRtczphbnkpPT57XHJcbiAgICBjb25zdCB2aWN0aW1TZXJ2aWNlU3RhdHVzOiBWaWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yeT0ge1xyXG4gICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yeUlkOjAsXHJcbiAgICAgIHZpY3RpbVNlcnZpY2VJZDogaXRtcy52aWN0aW1TZXJ2aWNlSWQsXHJcbiAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlU3RhdHVzSWQgLFxyXG4gICAgICBzdGFydERhdGU6IHRoaXMuZWRpdFNhZmV0eVBsYW4uc3RhcnREYXRlLFxyXG4gICAgICBtb2RpZmllZEJ5OnRoaXMuc3RhZmZJZCxcclxuICAgICAgY29tbWVudDondGVzdCBhZGQgc2FmZXR5IHBsYW4nXHJcbiAgICAgIH07XHJcblxyXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkVmljdGltU2VydmljZVN0YXR1cyh2aWN0aW1TZXJ2aWNlU3RhdHVzKS5zdWJzY3JpYmUoXHJcbiBcclxuICAgICAgKCkgPT57XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2NoZWNrIGl0bXMudmljdGltU2VydmljZUlkIGluaXNpZGUgYWRkIHZpY3RpbSBzZXJpdmUgc3RhdHVzJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaXRtcy52aWN0aW1TZXJ2aWNlSWQpO1xyXG5cclxuICAgICAgICBjb25zdCB2aWN0aW1TZXJ2aWNlRGV0YWlsOiBWaWN0aW1TZXJ2aWNlRGV0YWlsID0ge1xyXG4gICAgICAgICAgdmljdGltU2VydmljZUlkOiBpdG1zLnZpY3RpbVNlcnZpY2VJZCxcclxuICAgICAgICAgIHZpY3RpbVNlcnZpY2VEZXRhaWxJZDogMCxcclxuICAgICAgICAgIHZpY3RpbVNlcnZpY2VUeXBlSWQ6IHZpY3RpbVNlcnZpY2VUeXBlSWQsXHJcbiAgICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogdmljdGltUHJvZ3JhbVByb3ZpZGVySWQsXHJcbiAgICAgICAgICBtb2RpZmllZEJ5OiB0aGlzLnN0YWZmSWQsXHJcbiAgICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXI6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgXHJcbiAgICAgICAgY29uc29sZS5sb2coJ2FkZCBwbGFuIHByb3ZpZGVyIGhlcmUgYXQgaW5zZXJ0Jyk7XHJcbiAgICBcclxuICAgICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5hZGRQbGFuUHJvdmlkZXIodmljdGltU2VydmljZURldGFpbCkuc3Vic2NyaWJlKFxyXG5cclxuICAgICAgICAgICgpID0+e1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NhZnR5UGxhbkRldGFpbCcsICBpdG1zLnZpY3RpbVNlcnZpY2VJZCwgIHRoaXMudmljdGltSWQgXSk7IFxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgKTtcclxuXHJcbiAgICAgIH1cclxuICAgICApO1xyXG4gICBcclxuICBcclxuICBcclxuICB9XHJcblxyXG5cclxuKTtcclxuICB9XHJcbiAgZWxzZS8vdXBkYXRlXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHZpY3RpbVNlcnZpY2VEZXRhaWw6IFZpY3RpbVNlcnZpY2VEZXRhaWwgPSB7XHJcbiAgICAgICAgdmljdGltU2VydmljZUlkOiB0aGlzLnZpY3RpbVNlcnZpY2VJZCxcclxuICAgICAgICB2aWN0aW1TZXJ2aWNlRGV0YWlsSWQ6IDAsXHJcbiAgICAgICAgdmljdGltU2VydmljZVR5cGVJZDogdmljdGltU2VydmljZVR5cGVJZCxcclxuICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogdmljdGltUHJvZ3JhbVByb3ZpZGVySWQsXHJcbiAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkLFxyXG4gICAgICAgIHZpY3RpbVByb2dyYW1Qcm92aWRlcjogbnVsbFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zb2xlLmxvZygnYWRkIHBsYW4gcHJvdmlkZXIgaGVyZSBhdCB1cGRhdGUnKTtcclxuICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkUGxhblByb3ZpZGVyKHZpY3RpbVNlcnZpY2VEZXRhaWwpLnN1YnNjcmliZShcclxuXHJcbiAgICAgICAgKCkgPT57XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuRGV0YWlsJywgIHRoaXMudmljdGltU2VydmljZUlkLCAgdGhpcy52aWN0aW1JZCBdKTsgXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG59XHJcblxyXG5cclxuICBkZWxldGVQcm92aWRlcih2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogc3RyaW5nKXtcclxuXHJcbiAgICB0aGlzLmNvbW1vbkRpYWxvZ1NlcnZpY2VcclxuICAgIC5jb25maXJtKCcnLCAnRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcHJvdmlkZXI/JywgJ1llcycsICdObycpXHJcbiAgICAuc3Vic2NyaWJlKHJlcyA9PiB7dGhpcy5yZXN1bHQgPSAgcmVzO1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdCkge1xyXG4gICAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZGVsZXRlUHJvdmlkZXIodmljdGltUHJvZ3JhbVByb3ZpZGVySWQsIHRoaXMuc3RhZmZJZClcclxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdkZWxldGUgcHJvdmlkZXIgU3VjY2Vzc2Z1bGx5ICEnLCAnJywge1xyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgfSk7XHJcbiBcclxuICAgIC8vIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG5cclxuICB9XHJcbnNhdmVTYWZldHlQbGFuKCkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlSWQgPT09IHVuZGVmaW5lZCApIHtcclxuXHJcbiAgICAgICAgICBjb25zdCBzYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuID0ge1xyXG4gICAgICAgICAgICB2aWN0aW1JZDogdGhpcy52aWN0aW1JZCxcclxuICAgICAgICAgICAgZnVsbE5hbWU6IG51bGwsXHJcbiAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VJZDogMCxcclxuICAgICAgICAgICAgZ29hbDp0aGlzLmVkaXRTYWZldHlQbGFuLmdvYWwsXHJcbiAgICAgICAgICAgIGNvbW1lbnQ6IHRoaXMuZWRpdFNhZmV0eVBsYW4uY29tbWVudCxcclxuICAgICAgICAgICAgbW9kaWZpZWRCeTp0aGlzLnN0YWZmSWQsXHJcbiAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogbnVsbCxcclxuICAgICAgICAgICAgc3RhdHVzOiBudWxsLFxyXG4gICAgICAgICAgICBzdGFydERhdGU6IG51bGwsXHJcbiAgICAgICAgICAgIHZWaWN0aW1TZXJ2aWNlRGV0YWlsczogbnVsbCxcclxuICAgICAgICAgICAgdmljdGltTmFtZTogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkU2FmZXR5UGxhbihzYWZldHlQbGFuKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoaXRtczphbnkpPT57XHJcbiAgICAgICAgICAgIGNvbnN0IHZpY3RpbVNlcnZpY2VTdGF0dXM6IFZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3J5PSB7XHJcbiAgICAgICAgICAgICAgdmljdGltU2VydmljZVN0YXR1c0hpc3RvcnlJZDowLFxyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VJZDogaXRtcy52aWN0aW1TZXJ2aWNlSWQsXHJcbiAgICAgICAgICAgICAgdmljdGltU2VydmljZVN0YXR1c0lkOiB0aGlzLmVkaXRTYWZldHlQbGFuLnZpY3RpbVNlcnZpY2VTdGF0dXNJZCAsXHJcbiAgICAgICAgICAgICAgc3RhcnREYXRlOiB0aGlzLmVkaXRTYWZldHlQbGFuLnN0YXJ0RGF0ZSxcclxuICAgICAgICAgICAgICBtb2RpZmllZEJ5OnRoaXMuc3RhZmZJZCxcclxuICAgICAgICAgICAgICBjb21tZW50Oid0ZXN0IGFkZCBzYWZldHkgUGxhbidcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkVmljdGltU2VydmljZVN0YXR1cyh2aWN0aW1TZXJ2aWNlU3RhdHVzKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgcmVzcD0+e1xyXG4gICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdJbnNlcnQgc3RhdHVzIHN1Y2Nlc3NmdWxseSEnLCAnJywge1xyXG4gICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzYWZ0eVBsYW5EZXRhaWwnLCAgaXRtcy52aWN0aW1TZXJ2aWNlSWQsICB0aGlzLnZpY3RpbUlkIF0pOyBcclxuICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLmVkaXRTYWZldHlQbGFuLm1vZGlmaWVkQnk9dGhpcy5sb2dpblN0YWZmLnN0YWZmSWQ7XHJcbiAgICAgIHRoaXMuZWRpdFNhZmV0eVBsYW4ubW9kaWZpZWRCeSA9dGhpcy5zdGFmZklkO1xyXG4gICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC51cGRhdGVTYWZldHlQbGFuKHRoaXMuZWRpdFNhZmV0eVBsYW4pLnN1YnNjcmliZShcclxuICAgICAgICByZXNwPT57XHJcbiAgICAgICAgICAgIC8vICB0aGlzLnNuYWNrQmFyLm9wZW4oJ3VwZGF0ZSBTdWNjZXNzZnVsbHkhJywgJycsIHtcclxuICAgICAgICAgICAgLy8gIGR1cmF0aW9uOiAzMDAwLFxyXG4gICAgICAgICAgICAvLyAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmljdGltU2VydmljZVN0YXR1czogVmljdGltU2VydmljZVN0YXR1c0hpc3Rvcnk9IHtcclxuICAgICAgICAgICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yeUlkOjAsXHJcbiAgICAgICAgICAgICAgdmljdGltU2VydmljZUlkOiB0aGlzLmVkaXRTYWZldHlQbGFuLnZpY3RpbVNlcnZpY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlU3RhdHVzSWQgLFxyXG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5lZGl0U2FmZXR5UGxhbi5zdGFydERhdGUsXHJcbiAgICAgICAgICAgICAgbW9kaWZpZWRCeTp0aGlzLnN0YWZmSWQsXHJcbiAgICAgICAgICAgICAgY29tbWVudDondGVzdCB1cGRhdGUgc2FmZXR5IFBsYW4nXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmFkZFZpY3RpbVNlcnZpY2VTdGF0dXModmljdGltU2VydmljZVN0YXR1cykuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgICBcclxuICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NhZnR5UGxhbkRldGFpbCcsICB0aGlzLmVkaXRTYWZldHlQbGFuLnZpY3RpbVNlcnZpY2VJZCwgIHRoaXMudmljdGltSWQgXSk7IFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IFxyXG4gIH1cclxuXHJcbiAgYmFjaygpe1xyXG4gICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltSWQnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltSWQpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzYWZ0eVBsYW4nLCB0aGlzLnZpY3RpbUlkXSk7IFxyXG4gIH1cclxuIFxyXG5cclxufVxyXG5cclxuIl19