vcomply-workflow-engine 2.6.19 → 2.6.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/vcomply-workflow-engine.umd.js +420 -612
- package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
- package/esm2015/lib/add-multiple-responsibility/add-multiple-responsibility.component.js +1 -1
- package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.js +1 -1
- package/esm2015/lib/confirmation-alert/confirmation-alert.component.js +4 -4
- package/esm2015/lib/confirmation-alert/confirmation-alert.component.ngfactory.js +11 -4
- package/esm2015/lib/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.js +1 -1
- package/esm2015/lib/interfaces/confirmation-alert.js +1 -1
- package/esm2015/lib/log-an-issue/log-an-issue.component.js +1 -1
- package/esm2015/lib/sharedComponents/assessment-editor/services/editor.service.js +1 -1
- package/esm2015/lib/sharedComponents/assessment-editor/services/validator.service.js +6 -4
- package/esm2015/lib/sharedComponents/assessment-editor/services/validator.service.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.js +3 -8
- package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.ngfactory.js +3 -4
- package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/format-and-evidence/format-and-evidence.component.js +1 -1
- package/esm2015/lib/sharedComponents/program-listing/program-listing.component.js +40 -220
- package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngfactory.js +70 -78
- package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/risk-classification/risk-classification.component.js +1 -1
- package/esm2015/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.js +1 -1
- package/esm2015/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.js +1 -1
- package/esm2015/lib/workflow-assessment/workflow-assessment.component.js +1 -1
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.js +146 -123
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngfactory.js +60 -88
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +14 -3
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +16 -13
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-engine.module.js +2 -4
- package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
- package/esm2015/lib/workflow-policy/workflow-policy.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/file-pill/file-pill.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/form-field/form-field.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/input-with-pill/input-with-pill.component.js +1 -1
- package/esm2015/lib/workflow-program/workflow-program.component.js +1 -1
- package/esm2015/lib/workflow-risk/workflow-risk.component.js +3 -3
- package/esm2015/lib/workflow-risk/workflow-risk.component.ngfactory.js +38 -39
- package/esm2015/lib/workflow-services/responsibility.service.js +3 -8
- package/esm2015/lib/workflow-survey-form/workflow-survey-form.component.js +1 -1
- package/esm2015/vcomply-workflow-engine.js +188 -189
- package/esm2015/vcomply-workflow-engine.ngsummary.json +1 -1
- package/fesm2015/vcomply-workflow-engine.js +229 -397
- package/fesm2015/vcomply-workflow-engine.js.map +1 -1
- package/lib/interfaces/confirmation-alert.d.ts +1 -0
- package/lib/sharedComponents/assessment-editor/services/validator.service.d.ts +1 -0
- package/lib/sharedComponents/floating-bar/floating-bar.component.d.ts +0 -2
- package/lib/sharedComponents/program-listing/program-listing.component.d.ts +1 -54
- package/lib/workflow-compliance/workflow-compliance.component.d.ts +103 -16
- package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +1 -0
- package/lib/workflow-services/responsibility.service.d.ts +1 -1
- package/package.json +2 -2
- package/vcomply-workflow-engine.d.ts +187 -188
- package/vcomply-workflow-engine.metadata.json +1 -1
- package/esm2015/lib/sharedComponents/pipes/spaceTrim.pipe.js +0 -14
- package/esm2015/lib/sharedComponents/pipes/spaceTrim.pipe.ngsummary.json +0 -1
- package/lib/sharedComponents/pipes/spaceTrim.pipe.d.ts +0 -4
|
@@ -7,11 +7,7 @@ export class ProgramListingComponent {
|
|
|
7
7
|
this.animation = false;
|
|
8
8
|
this.subList = false;
|
|
9
9
|
this.loader = false;
|
|
10
|
-
this.openedFrom = '';
|
|
11
|
-
// @Input() selectedCategories: any[] = [];
|
|
12
10
|
this.selectedCategories = [];
|
|
13
|
-
this.tempSelectedCategories = [];
|
|
14
|
-
this.mode = 'CREATE';
|
|
15
11
|
this.previousSelectedValues = {
|
|
16
12
|
program: {},
|
|
17
13
|
categories: []
|
|
@@ -54,34 +50,12 @@ export class ProgramListingComponent {
|
|
|
54
50
|
others: 0,
|
|
55
51
|
};
|
|
56
52
|
this.displayConfirmationMessage = false;
|
|
57
|
-
this.tempPrimaryProgram = {};
|
|
58
|
-
this.primaryConfirmationMessage = `Once confirmed, the <em>Primary Program</em> for this responsibility will be changed. Hence, all the default settings related to the new <em>Primary Program</em> will now apply to this responsibility.`;
|
|
59
|
-
this.isPrimaryConfirmation = false;
|
|
60
|
-
this.isUncheckedProgram = false;
|
|
61
|
-
this.isPrimaryUnchecked = false;
|
|
62
|
-
this.selectedProgramsDetail = [];
|
|
63
|
-
this.selectedProgramsId = [];
|
|
64
53
|
this.saveSelectedProgram = new EventEmitter();
|
|
65
54
|
this.closeEvent = new EventEmitter();
|
|
66
55
|
this.allCategories = [];
|
|
67
56
|
}
|
|
68
|
-
set getSelectedCategories(category) {
|
|
69
|
-
console.log('selectedCategoriesselectedCategories', category);
|
|
70
|
-
this.selectedCategories = category;
|
|
71
|
-
this.tempSelectedCategories = JSON.stringify(category);
|
|
72
|
-
}
|
|
73
|
-
;
|
|
74
|
-
set getLinkedProgram(program) {
|
|
75
|
-
this.selectedProgramsDetail = [];
|
|
76
|
-
this.selectedProgramsId = [];
|
|
77
|
-
this.selectedProgramsDetail = program;
|
|
78
|
-
this.selectedProgramsDetail.forEach((ele) => {
|
|
79
|
-
this.selectedProgramsId.push(ele === null || ele === void 0 ? void 0 : ele._id);
|
|
80
|
-
this.getSelectedProgramCount(true, ele === null || ele === void 0 ? void 0 : ele.programType);
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
57
|
ngOnInit() {
|
|
84
|
-
var _a, _b
|
|
58
|
+
var _a, _b;
|
|
85
59
|
this.animation = true;
|
|
86
60
|
setTimeout(() => {
|
|
87
61
|
this.animation = false;
|
|
@@ -106,12 +80,11 @@ export class ProgramListingComponent {
|
|
|
106
80
|
break;
|
|
107
81
|
}
|
|
108
82
|
this.getSelectedProgramCount();
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
83
|
+
if (((_b = this.selectedCategories) === null || _b === void 0 ? void 0 : _b.length) && this.currentProgram) {
|
|
84
|
+
this.populateCategories();
|
|
85
|
+
}
|
|
112
86
|
}
|
|
113
87
|
if (this.hideProgramsList) {
|
|
114
|
-
(_b = this.selectedProgramsId) === null || _b === void 0 ? void 0 : _b.push((_c = this.selectedProgram[0]) === null || _c === void 0 ? void 0 : _c._id);
|
|
115
88
|
this.getCategoriesList();
|
|
116
89
|
}
|
|
117
90
|
else {
|
|
@@ -121,23 +94,24 @@ export class ProgramListingComponent {
|
|
|
121
94
|
programs: this.currentProgram,
|
|
122
95
|
categories: (this.selectedCategories.length) ? [...new Set(this.selectedCategories)] : [],
|
|
123
96
|
};
|
|
124
|
-
this.preservePreviousDetails();
|
|
125
97
|
}
|
|
126
98
|
populateCategories() {
|
|
127
|
-
this.
|
|
99
|
+
this.loader = true;
|
|
128
100
|
let params = new HttpParams();
|
|
129
|
-
|
|
101
|
+
params = params.append('program_id', this.currentProgram._id);
|
|
130
102
|
params = params.append('isPagination', false);
|
|
131
|
-
this.responsibilityService.getProgramsList(params
|
|
103
|
+
this.responsibilityService.getProgramsList(params).subscribe({
|
|
132
104
|
next: (res) => {
|
|
133
105
|
const allCategories = res.data;
|
|
134
106
|
this.categoryData.selectedCategories = allCategories.filter((ele) => this.selectedCategories.includes(ele.category_id));
|
|
135
107
|
this.categoryData.selectedCategories.forEach((element) => {
|
|
136
108
|
this.selectedIds.push(element.category_id);
|
|
137
109
|
});
|
|
110
|
+
this.loader = false;
|
|
138
111
|
},
|
|
139
112
|
error: err => {
|
|
140
113
|
console.error(err);
|
|
114
|
+
this.loader = false;
|
|
141
115
|
}
|
|
142
116
|
});
|
|
143
117
|
}
|
|
@@ -154,119 +128,15 @@ export class ProgramListingComponent {
|
|
|
154
128
|
}
|
|
155
129
|
}
|
|
156
130
|
selectProgram(event, program) {
|
|
157
|
-
var _a;
|
|
158
|
-
this.updateSelectedPrograms(event, program);
|
|
159
|
-
// this.getSelectedProgramCount(event, program?.programType);
|
|
160
131
|
if (event) {
|
|
161
|
-
|
|
162
|
-
// this.currentProgram = program;
|
|
132
|
+
this.currentProgram = program;
|
|
163
133
|
this.selectedIds = [];
|
|
164
134
|
this.categoryList = [];
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* If the event is true, then push the program to the selectedProgramsDetail array. If the event is
|
|
170
|
-
* false, then remove the program from the selectedProgramsDetail array.
|
|
171
|
-
* @param {any} event - boolean
|
|
172
|
-
* @param {any} program - any = {
|
|
173
|
-
*/
|
|
174
|
-
updateSelectedPrograms(event, program) {
|
|
175
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
176
|
-
if (event) {
|
|
177
|
-
const indexOfProgram = (_a = this.selectedProgramsDetail) === null || _a === void 0 ? void 0 : _a.findIndex((el) => (el === null || el === void 0 ? void 0 : el.category_id) === (program === null || program === void 0 ? void 0 : program.category_id));
|
|
178
|
-
if (indexOfProgram === -1 && ((_b = Object.keys(program)) === null || _b === void 0 ? void 0 : _b.length)) {
|
|
179
|
-
(_c = this.selectedProgramsId) === null || _c === void 0 ? void 0 : _c.push(program === null || program === void 0 ? void 0 : program._id);
|
|
180
|
-
(_d = this.selectedProgramsDetail) === null || _d === void 0 ? void 0 : _d.push(program);
|
|
181
|
-
this.getSelectedProgramCount(event, program === null || program === void 0 ? void 0 : program.programType);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
const indexOfProgram = (_e = this.selectedProgramsDetail) === null || _e === void 0 ? void 0 : _e.findIndex((el) => (el === null || el === void 0 ? void 0 : el.category_id) === (program === null || program === void 0 ? void 0 : program.category_id));
|
|
186
|
-
if (indexOfProgram !== -1) {
|
|
187
|
-
(_f = this.selectedProgramsDetail) === null || _f === void 0 ? void 0 : _f.splice(indexOfProgram, 1);
|
|
188
|
-
}
|
|
189
|
-
const indexOfId = (_g = this.selectedProgramsId) === null || _g === void 0 ? void 0 : _g.findIndex((el) => el === (program === null || program === void 0 ? void 0 : program._id));
|
|
190
|
-
if (indexOfId !== -1) {
|
|
191
|
-
(_h = this.selectedProgramsId) === null || _h === void 0 ? void 0 : _h.splice(indexOfId, 1);
|
|
192
|
-
}
|
|
193
|
-
this.isPrimaryUnchecked = false;
|
|
194
|
-
if (this.currentProgram && ((_j = this.currentProgram) === null || _j === void 0 ? void 0 : _j.category_id) === (program === null || program === void 0 ? void 0 : program.category_id)) {
|
|
195
|
-
// this.primaryConfirmationMessage = 'You cannot deselect this Program since this is the <em>Primary Program</em> for this responsibility. To proceed, first select another Program as the <em>Primary Program</em>.';
|
|
196
|
-
this.isPrimaryConfirmation = true;
|
|
197
|
-
this.isPrimaryUnchecked = true;
|
|
198
|
-
this.tempPrimaryProgram = JSON.stringify(program);
|
|
199
|
-
// this.currentProgram = undefined;
|
|
200
|
-
}
|
|
201
|
-
// }
|
|
202
|
-
this.getSelectedProgramCount(event, program === null || program === void 0 ? void 0 : program.programType);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* If the currentProgram is set, then set the currentProgram to the program passed in, and set the
|
|
207
|
-
* tempPrimaryProgram to the currentProgram.
|
|
208
|
-
* If the currentProgram is not set, then set the currentProgram to the program passed in.
|
|
209
|
-
* @param {any} event - any - the event that is triggered when the user clicks on the checkbox
|
|
210
|
-
* @param {any} program - the program that is being selected
|
|
211
|
-
*/
|
|
212
|
-
setPrimaryProgram(event, program) {
|
|
213
|
-
if (this.currentProgram) {
|
|
214
|
-
const currentTemp = this.currentProgram;
|
|
215
|
-
this.tempPrimaryProgram = JSON.stringify(currentTemp);
|
|
216
|
-
this.currentProgram = program;
|
|
217
|
-
this.updateSelectedPrograms(true, program);
|
|
218
|
-
if (!event) {
|
|
219
|
-
this.currentProgram = {};
|
|
220
|
-
}
|
|
221
|
-
this.primaryConfirmationMessage = 'Once confirmed, the <em>Primary Program</em> for this responsibility will be changed. Hence, all the default settings related to the new <em>Primary Program</em> will now apply to this responsibility.';
|
|
222
|
-
this.isPrimaryConfirmation = true;
|
|
223
|
-
}
|
|
224
|
-
if (event && !this.currentProgram) {
|
|
225
|
-
this.currentProgram = program;
|
|
226
|
-
this.updateSelectedPrograms(true, program);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* If the user clicks "Yes" on the confirmation modal, then the function will remove the program from
|
|
231
|
-
* the selectedProgramsDetail array and the selectedProgramsId array. If the user clicks "No" on the
|
|
232
|
-
* confirmation modal, then the function will do nothing.
|
|
233
|
-
* @param {boolean} event - boolean -> this is the value of the checkbox
|
|
234
|
-
*/
|
|
235
|
-
updatePrimaryProgram(event) {
|
|
236
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
237
|
-
if (event && this.isPrimaryUnchecked) {
|
|
238
|
-
const indexOfProgram = (_a = this.selectedProgramsDetail) === null || _a === void 0 ? void 0 : _a.findIndex((el) => { var _a, _b; return (el === null || el === void 0 ? void 0 : el.category_id) === ((_b = JSON.parse((_a = this.tempPrimaryProgram) !== null && _a !== void 0 ? _a : {})) === null || _b === void 0 ? void 0 : _b.category_id); });
|
|
239
|
-
if (indexOfProgram !== -1) {
|
|
240
|
-
(_b = this.selectedProgramsDetail) === null || _b === void 0 ? void 0 : _b.splice(indexOfProgram, 1);
|
|
241
|
-
}
|
|
242
|
-
const indexOfId = (_c = this.selectedProgramsId) === null || _c === void 0 ? void 0 : _c.findIndex((el) => { var _a, _b; return el === ((_b = JSON.parse((_a = this.tempPrimaryProgram) !== null && _a !== void 0 ? _a : {})) === null || _b === void 0 ? void 0 : _b._id); });
|
|
243
|
-
if (indexOfId !== -1) {
|
|
244
|
-
(_d = this.selectedProgramsId) === null || _d === void 0 ? void 0 : _d.splice(indexOfId, 1);
|
|
245
|
-
}
|
|
246
|
-
this.isPrimaryConfirmation = false;
|
|
247
|
-
this.currentProgram = {};
|
|
248
|
-
}
|
|
249
|
-
else if (!event && this.isPrimaryUnchecked) {
|
|
250
|
-
this.updateSelectedPrograms(true, ((_e = this.tempPrimaryProgram) === null || _e === void 0 ? void 0 : _e.length) ? JSON.parse((_f = this.tempPrimaryProgram) !== null && _f !== void 0 ? _f : {}) : {});
|
|
251
|
-
this.currentProgram = ((_g = this.tempPrimaryProgram) === null || _g === void 0 ? void 0 : _g.length) ? JSON.parse((_h = this.tempPrimaryProgram) !== null && _h !== void 0 ? _h : {}) : {};
|
|
252
|
-
this.isPrimaryConfirmation = false;
|
|
253
|
-
}
|
|
254
|
-
else if (event) {
|
|
255
|
-
// this.currentProgram = this.isPrimaryUnchecked ? {} : JSON.parse(this.tempPrimaryProgram);
|
|
256
|
-
this.updateSelectedPrograms(this.isPrimaryUnchecked ? false : true, ((_j = this.tempPrimaryProgram) === null || _j === void 0 ? void 0 : _j.length) ? JSON.parse((_k = this.tempPrimaryProgram) !== null && _k !== void 0 ? _k : {}) : {});
|
|
257
|
-
this.isPrimaryConfirmation = false;
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
let currentPrimary = JSON.stringify(this.currentProgram);
|
|
261
|
-
this.currentProgram = {};
|
|
262
|
-
// this.updateSelectedPrograms(false, JSON.parse(currentPrimary)?? {});
|
|
263
|
-
this.updateSelectedPrograms(true, (_l = JSON.parse(currentPrimary)) !== null && _l !== void 0 ? _l : {});
|
|
264
|
-
this.currentProgram = ((_m = this.tempPrimaryProgram) === null || _m === void 0 ? void 0 : _m.length) ? JSON.parse((_o = this.tempPrimaryProgram) !== null && _o !== void 0 ? _o : {}) : {};
|
|
265
|
-
this.isPrimaryConfirmation = false;
|
|
135
|
+
this.getSelectedProgramCount();
|
|
266
136
|
}
|
|
267
|
-
this.isPrimaryUnchecked = false;
|
|
268
137
|
}
|
|
269
138
|
selectAllCategories(value) {
|
|
139
|
+
var _a;
|
|
270
140
|
if (value) {
|
|
271
141
|
this.selectedIds = [];
|
|
272
142
|
this.categoryData.selectedCategories = [];
|
|
@@ -279,9 +149,9 @@ export class ProgramListingComponent {
|
|
|
279
149
|
else {
|
|
280
150
|
this.loader = true;
|
|
281
151
|
let params = new HttpParams();
|
|
282
|
-
|
|
152
|
+
params = params.append('program_id', (_a = this.currentProgram) === null || _a === void 0 ? void 0 : _a._id);
|
|
283
153
|
params = params.append('isPagination', false);
|
|
284
|
-
this.responsibilityService.getProgramsList(params
|
|
154
|
+
this.responsibilityService.getProgramsList(params).subscribe({
|
|
285
155
|
next: (res) => {
|
|
286
156
|
const allCategories = res.data;
|
|
287
157
|
this.categoryData.selectedCategories = res.data;
|
|
@@ -314,16 +184,12 @@ export class ProgramListingComponent {
|
|
|
314
184
|
}
|
|
315
185
|
}
|
|
316
186
|
openCategories() {
|
|
317
|
-
var _a, _b
|
|
318
|
-
this.
|
|
319
|
-
const isSubProgram = (_a = this.selectedProgramsDetail) === null || _a === void 0 ? void 0 : _a.some((el) => { var _a; return (_a = el === null || el === void 0 ? void 0 : el.child_id) === null || _a === void 0 ? void 0 : _a.length; });
|
|
320
|
-
this.populateCategories();
|
|
321
|
-
if (((_c = (_b = this.currentProgram) === null || _b === void 0 ? void 0 : _b.child_id) === null || _c === void 0 ? void 0 : _c.length) || isSubProgram) {
|
|
187
|
+
var _a, _b;
|
|
188
|
+
if ((_b = (_a = this.currentProgram) === null || _a === void 0 ? void 0 : _a.child_id) === null || _b === void 0 ? void 0 : _b.length) {
|
|
322
189
|
this.showCategories = true;
|
|
323
190
|
this.getCategoriesList();
|
|
324
191
|
}
|
|
325
192
|
else {
|
|
326
|
-
this.selectedIds = [];
|
|
327
193
|
this.save();
|
|
328
194
|
}
|
|
329
195
|
}
|
|
@@ -339,7 +205,6 @@ export class ProgramListingComponent {
|
|
|
339
205
|
});
|
|
340
206
|
}
|
|
341
207
|
else {
|
|
342
|
-
this.getProgramsList();
|
|
343
208
|
this.categoryData.selectedCategories = [];
|
|
344
209
|
this.selectedIds = [];
|
|
345
210
|
}
|
|
@@ -399,14 +264,15 @@ export class ProgramListingComponent {
|
|
|
399
264
|
});
|
|
400
265
|
}
|
|
401
266
|
getCategoriesList(queryObject) {
|
|
267
|
+
var _a;
|
|
402
268
|
this.loader = true;
|
|
403
269
|
let params = new HttpParams();
|
|
404
|
-
|
|
270
|
+
params = params.append('program_id', (_a = this.currentProgram) === null || _a === void 0 ? void 0 : _a._id);
|
|
405
271
|
params = params.append('pageNo', this.categoryData.currentPage);
|
|
406
272
|
if (queryObject === null || queryObject === void 0 ? void 0 : queryObject.search) {
|
|
407
273
|
params = params.append('searchText', this.categorySearchString);
|
|
408
274
|
}
|
|
409
|
-
this.responsibilityService.getProgramsList(params
|
|
275
|
+
this.responsibilityService.getProgramsList(params).subscribe({
|
|
410
276
|
next: (res) => {
|
|
411
277
|
this.categoryData.data = res.data;
|
|
412
278
|
this.categoryData.from = res.from;
|
|
@@ -428,15 +294,12 @@ export class ProgramListingComponent {
|
|
|
428
294
|
if (mode) {
|
|
429
295
|
this.selectedIds.push(category.category_id);
|
|
430
296
|
this.categoryData.selectedCategories.push(category);
|
|
431
|
-
this.selectedCategories.push(category.category_id);
|
|
432
297
|
}
|
|
433
298
|
else {
|
|
434
299
|
const index = this.selectedIds.findIndex((element) => element == category.category_id);
|
|
435
300
|
this.selectedIds.splice(index, 1);
|
|
436
301
|
const categoryIndex = this.categoryData.selectedCategories.findIndex((ele) => ele.category_id == category.category_id);
|
|
437
302
|
this.categoryData.selectedCategories.splice(categoryIndex, 1);
|
|
438
|
-
const selectedIndex = this.selectedCategories.findIndex((ele) => ele == (category === null || category === void 0 ? void 0 : category.category_id));
|
|
439
|
-
this.selectedCategories.splice(selectedIndex, 1);
|
|
440
303
|
}
|
|
441
304
|
}
|
|
442
305
|
removeCategories(event) {
|
|
@@ -446,14 +309,6 @@ export class ProgramListingComponent {
|
|
|
446
309
|
this.selectedIds.splice(index, 1);
|
|
447
310
|
}
|
|
448
311
|
close() {
|
|
449
|
-
var _a, _b, _c, _d, _e;
|
|
450
|
-
const currentProgram = ((_a = this.preservePrimaryProgram) === null || _a === void 0 ? void 0 : _a.length) ? JSON.parse(this.preservePrimaryProgram) : {};
|
|
451
|
-
const selectedProgramsId = ((_b = this.preservedProgramsId) === null || _b === void 0 ? void 0 : _b.length) ? JSON.parse(this.preservedProgramsId) : undefined;
|
|
452
|
-
const selectedProgramsDetail = ((_c = this.preservedSelectedPrograms) === null || _c === void 0 ? void 0 : _c.length) ? JSON.parse(this.preservedSelectedPrograms) : [];
|
|
453
|
-
if (((_d = this.preservePrimaryProgram) === null || _d === void 0 ? void 0 : _d.length) && ((_e = this.preservedSelectedPrograms) === null || _e === void 0 ? void 0 : _e.length)) {
|
|
454
|
-
this.saveSelectedProgram.emit({ program: currentProgram, categories: JSON.parse(this.tempSelectedCategories), linkedProgram: selectedProgramsDetail });
|
|
455
|
-
}
|
|
456
|
-
// this.saveSelectedProgram.emit({program: currentProgram, categories: this.selectedIds, linkedProgram: selectedProgramsDetail });
|
|
457
312
|
this.closeEvent.emit();
|
|
458
313
|
}
|
|
459
314
|
save() {
|
|
@@ -461,86 +316,54 @@ export class ProgramListingComponent {
|
|
|
461
316
|
this.displayConfirmationMessage = true;
|
|
462
317
|
}
|
|
463
318
|
else {
|
|
464
|
-
this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds
|
|
465
|
-
// this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds });
|
|
319
|
+
this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds });
|
|
466
320
|
}
|
|
467
321
|
}
|
|
468
322
|
saveChanges(value) {
|
|
469
323
|
if (value) {
|
|
470
|
-
this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds
|
|
471
|
-
// this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds });
|
|
324
|
+
this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds });
|
|
472
325
|
}
|
|
473
326
|
else {
|
|
474
327
|
this.displayConfirmationMessage = false;
|
|
475
328
|
}
|
|
476
329
|
}
|
|
477
330
|
deleteEvent(event) {
|
|
478
|
-
|
|
479
|
-
const indexOfProgram = (_a = this.selectedProgramsDetail) === null || _a === void 0 ? void 0 : _a.findIndex((el) => (el === null || el === void 0 ? void 0 : el.category_id) === (event === null || event === void 0 ? void 0 : event.category_id));
|
|
480
|
-
if (indexOfProgram !== -1) {
|
|
481
|
-
(_b = this.selectedProgramsDetail) === null || _b === void 0 ? void 0 : _b.splice(indexOfProgram, 1);
|
|
482
|
-
}
|
|
483
|
-
const indexOfId = (_c = this.selectedProgramsId) === null || _c === void 0 ? void 0 : _c.findIndex((el) => el === (event === null || event === void 0 ? void 0 : event._id));
|
|
484
|
-
if (indexOfId !== -1) {
|
|
485
|
-
(_d = this.selectedProgramsId) === null || _d === void 0 ? void 0 : _d.splice(indexOfId, 1);
|
|
486
|
-
}
|
|
487
|
-
// this.currentProgram = undefined;
|
|
331
|
+
this.currentProgram = undefined;
|
|
488
332
|
this.showCategories = false;
|
|
489
333
|
this.selectedIds = [];
|
|
490
334
|
this.categoryList = [];
|
|
491
335
|
//As this is a radio list and only one item can be selected thats why we are resetting all the counts to zero
|
|
492
|
-
this.
|
|
336
|
+
this.programData.SelectedInternalControlsProgramsCount = 0;
|
|
337
|
+
this.programData.SelectedOthersProgramsCount = 0;
|
|
338
|
+
this.programData.SelectedRegulationProgramsCount = 0;
|
|
339
|
+
this.programData.SelectedStandardProgramsCount = 0;
|
|
493
340
|
}
|
|
494
|
-
getSelectedProgramCount(
|
|
495
|
-
|
|
496
|
-
|
|
341
|
+
getSelectedProgramCount() {
|
|
342
|
+
this.programData.SelectedInternalControlsProgramsCount = 0;
|
|
343
|
+
this.programData.SelectedOthersProgramsCount = 0;
|
|
344
|
+
this.programData.SelectedRegulationProgramsCount = 0;
|
|
345
|
+
this.programData.SelectedStandardProgramsCount = 0;
|
|
346
|
+
switch (this.currentProgram.programType) {
|
|
497
347
|
case 0:
|
|
498
|
-
|
|
348
|
+
this.programData.SelectedOthersProgramsCount++;
|
|
499
349
|
break;
|
|
500
350
|
case 1:
|
|
501
|
-
|
|
351
|
+
this.programData.SelectedRegulationProgramsCount++;
|
|
502
352
|
break;
|
|
503
353
|
case 2:
|
|
504
|
-
|
|
354
|
+
this.programData.SelectedStandardProgramsCount++;
|
|
505
355
|
break;
|
|
506
356
|
case 3:
|
|
507
|
-
|
|
357
|
+
this.programData.SelectedInternalControlsProgramsCount++;
|
|
508
358
|
break;
|
|
509
359
|
}
|
|
510
360
|
}
|
|
511
|
-
/**
|
|
512
|
-
* If the selectedProgram array has a length, then preserve the first element of the array as the
|
|
513
|
-
* preservePrimaryProgram variable. Otherwise, set the preservePrimaryProgram variable to an empty
|
|
514
|
-
* object.
|
|
515
|
-
*
|
|
516
|
-
* If the selectedProgramsId array has a length, then preserve the array as the preservedProgramsId
|
|
517
|
-
* variable. Otherwise, set the preservedProgramsId variable to an empty array.
|
|
518
|
-
*
|
|
519
|
-
* If the selectedProgramsDetail array has a length, then preserve the array as the
|
|
520
|
-
* preservedSelectedPrograms variable. Otherwise, set the preservedSelectedPrograms variable to an
|
|
521
|
-
* empty array.
|
|
522
|
-
*
|
|
523
|
-
* If the selectedProgram array does not have a length, then set the selectedProgramsDetail array to
|
|
524
|
-
* an empty array and the selectedProgramsId array to an empty array.
|
|
525
|
-
*/
|
|
526
|
-
preservePreviousDetails() {
|
|
527
|
-
var _a, _b, _c;
|
|
528
|
-
if (((_a = this.selectedProgram[0]) === null || _a === void 0 ? void 0 : _a.length) || this.currentProgram) {
|
|
529
|
-
this.preservePrimaryProgram = ((_b = this.selectedProgram) === null || _b === void 0 ? void 0 : _b.length) ? JSON.stringify(this.selectedProgram[0]) : {};
|
|
530
|
-
this.preservedProgramsId = ((_c = this.selectedProgramsId) === null || _c === void 0 ? void 0 : _c.length) ? JSON.stringify(this.selectedProgramsId) : [];
|
|
531
|
-
this.preservedSelectedPrograms = this.selectedProgramsDetail ? JSON.stringify(this.selectedProgramsDetail) : [];
|
|
532
|
-
}
|
|
533
|
-
else {
|
|
534
|
-
this.selectedProgramsDetail = [];
|
|
535
|
-
this.selectedProgramsId = [];
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
361
|
}
|
|
539
362
|
ProgramListingComponent.decorators = [
|
|
540
363
|
{ type: Component, args: [{
|
|
541
364
|
selector: 'app-program-listing',
|
|
542
|
-
template: "<div class=\"program-listing\" [class.animate]=\"animation\" *ngIf=\"!showCategories && !hideProgramsList\">\r\n <div class=\"program-listing-head\">\r\n <h3 class=\"program-listing-title\">Select a Program</h3>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n <div class=\"filter-card-row\">\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'regulations'\" (click)=\"changeTab('regulations')\">\r\n <div class=\"left\">\r\n <label>REGULATIONS</label>\r\n <p *ngIf=\"programData?.SelectedRegulationProgramsCount> 0\">\r\n {{programData?.SelectedRegulationProgramsCount}}\r\n {{(programData?.SelectedRegulationProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllRegulationProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'standards'\" (click)=\"changeTab('standards')\">\r\n <div class=\"left\">\r\n <label>STANDARDS</label>\r\n <p *ngIf=\"programData?.SelectedStandardProgramsCount> 0\">\r\n {{programData?.SelectedStandardProgramsCount}}\r\n {{(programData?.SelectedStandardProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllStandardProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'internal_controls'\"\r\n (click)=\"changeTab('internal_controls')\">\r\n <div class=\"left\">\r\n <label>INTERNAL CONTROLS</label>\r\n <p *ngIf=\"programData?.SelectedInternalControlsProgramsCount> 0\">\r\n {{programData?.SelectedInternalControlsProgramsCount}}\r\n {{(programData?.SelectedInternalControlsProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllInternalControlsProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'others'\" (click)=\"changeTab('others')\">\r\n <div class=\"left\">\r\n <label>OTHERS</label>\r\n <p *ngIf=\"programData?.SelectedOthersProgramsCount> 0\">\r\n {{programData?.SelectedOthersProgramsCount}}\r\n {{(programData?.SelectedOthersProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllOthersProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"search-block\">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\" #searchProgram (keyup.enter)=\"handleSearch($event.target.value)\"\r\n placeholder=\"Search Programs\" />\r\n </div>\r\n <app-pagination *ngIf=\"programData.totalPages > 1\" [start]=\"programData.from\" [end]=\"programData.to\" [total]=\"programData.totalRecords\" [pageCount]=\"programData.totalPages\" [currentPage]=\"programData.currentPage\" (selectedPage)=\"changePage($event,'program')\"></app-pagination>\r\n <div class=\"program-listing-part\" [class.with-category-list]=\"!showCategories && !hideProgramsList\" [class.with-pagination]=\"programData.totalPages > 1\">\r\n <app-no-data *ngIf=\"programData?.data?.length===0 && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\"\r\n [noDataText]=\"'No Data Found'\"></app-no-data>\r\n\r\n <div class=\"program-listing-item\" [class.active]=\"showCategories && currentProgram?._id == program?._id\" *ngFor=\"let program of programData.data;let i = index\" [class.final-select]=\"false\">\r\n <!-- after category was select & user move to back and edit then final-select class was show -->\r\n <div class=\"table-row main-list\" [class.active]=\"selectedProgramsId?.includes(program?._id)\" [class.disabled]=\"currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM')\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+programData.from\" placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">{{i+programData.from}}</div>\r\n <app-cs-checkbox\r\n [disabled]=\"currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM')\"\r\n [ngValue]=\"selectedProgramsId?.includes(program?._id)\"\r\n (ngValueChange)=\"selectProgram($event,program)\"\r\n ></app-cs-checkbox>\r\n <!-- <app-cs-radio [name]=\"'t'\" [checked]=\"currentProgram?._id == program?._id\" (checkedEvent)=\"selectProgram($event.target.checked,program)\"></app-cs-radio> -->\r\n </div>\r\n <div class=\"table-column name\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"program?.item_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{program?.name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-column primary-program\" >\r\n <app-cs-switch\r\n *ngIf=\"!(mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') || currentProgram?._id === program?._id\"\r\n [disabled]=\"currentProgram?._id === program?._id\"\r\n [ngValue]='currentProgram?._id === program?._id' \r\n (ngValueChange)=\"setPrimaryProgram($event, program)\"\r\n >{{currentProgram?._id === program?._id ? 'PRIMARY PROGRAM' : 'SET AS PRIMARY PROGRAM'}}</app-cs-switch>\r\n </div>\r\n <!-- <div class=\"table-column action\">\r\n <button class=\"arrow\" *ngIf=\"program?.child_id?.length\" [class.disabled]=\"false\"\r\n [disabled]=\"false\">\r\n <i *ngIf=\"!(showCategories && currentProgram?._id == program?._id)\"\r\n (click)=\"selectProgram($event,program)\" class=\"icons\"></i>\r\n <i *ngIf=\"showCategories && currentProgram?._id == program?._id\" class=\"icons\"></i>\r\n </button>\r\n </div> -->\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-confirmation\" *ngIf=\"isPrimaryConfirmation && !isPrimaryUnchecked\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text\" [innerHTML]=\"primaryConfirmationMessage\"></div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"updatePrimaryProgram(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"updatePrimaryProgram(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"program-listing-confirmation error-confirmation\" *ngIf=\"isPrimaryUnchecked\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text vx-pr-4\">You cannot deselect this Program since this is the <em>Primary Program</em> for this responsibility. To proceed, first select another Program as the <em>Primary Program</em>.</div>\r\n </div>\r\n <button class=\"ok-btn\" (click)=\"updatePrimaryProgram(false)\">OK</button>\r\n </div>\r\n </div>\r\n <!-- <app-floating-bar [selectedData]=\"(currentProgram?.category_id)?[currentProgram]:[]\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true \" (closeList)=\"close()\">\r\n </app-floating-bar> -->\r\n\r\n <!-- ((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true -->\r\n <app-floating-bar [selectedData]=\"(selectedProgramsDetail?.length) ? selectedProgramsDetail : []\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true\" (closeList)=\"close()\" [defaultSelected]=\"currentProgram\" [nonRemovableUsersList]=\"(currentProgram?.category_id) ? [currentProgram?.category_id]:[]\" [elementId]=\"'category_id'\">\r\n </app-floating-bar>\r\n\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n</div>\r\n<div class=\"program-listing\" [class.animate]=\"animation\" *ngIf=\"showCategories || hideProgramsList\">\r\n <div class=\"program-listing-head\">\r\n <h3 class=\"program-listing-title\">\r\n <button class=\"back-btn\" (click)=\"backToPrograms()\"><i class=\"icons\"></i></button>\r\n <!-- <span *ngIf=\"currentProgram?.name\"> {{currentProgram?.name}} > </span> -->\r\n Program > Select Program Categories\r\n </h3>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n <div class=\"search-block\">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\" #searchCategory (keyup.enter)=\"categorySearch($event.target.value)\"\r\n placeholder=\"Search Categories\" />\r\n </div>\r\n <app-pagination *ngIf=\"categoryData.totalPages > 1\" class=\"category-pagination\" [start]=\"categoryData.from\" [end]=\"categoryData.to\" [total]=\"categoryData.totalRecords\" [pageCount]=\"categoryData.totalPages\" [currentPage]=\"categoryData.currentPage\" (selectedPage)=\"changePage($event,'category')\"></app-pagination>\r\n <div class=\"program-listing-part\" [class.with-category-pagination]=\"categoryData.totalPages > 1\">\r\n <app-no-data *ngIf=\"categoryData?.data?.length===0 && !loader\" [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No Data Found'\"></app-no-data>\r\n\r\n <ng-container *ngIf=\"!loader && categoryData.data?.length\">\r\n <ng-container *ngIf=\"false\">\r\n <div class=\"selected-area\" *ngIf=\"!loader && (currentProgram?.name ? categoryData.data?.length : programData?.data?.length)\">\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='checked'\" [ngValue]=\"true\" (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox>\r\n <app-cs-checkbox-indeterminate *ngIf=\"checkCategoriesSelection()=='indeterminate'\" [ngValue]=\"true\" (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox-indeterminate>\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='unchecked'\" [ngValue]=\"false\" (ngValueChange)=\"selectAllCategories(true)\">Select All</app-cs-checkbox>\r\n </div>\r\n </ng-container>\r\n <div class=\"table-head\">\r\n <div class=\"table-row\">\r\n <div class=\"table-column serial\">#</div>\r\n <div class=\"table-column category-name\">CATEGORIES</div>\r\n <div class=\"table-column category-within\">WITHIN</div>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-item\" [class.active]=\"subList\" *ngFor=\"let category of categoryData.data;let i = index\" [class.active]=\"selectedIds.includes(category.category_id)\">\r\n <div class=\"table-row main-list\" [class.disabled]=\"false\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i + categoryData?.from\" placement=\"bottom\" delay=\"0\" type=\"black\"\r\n [tooltipMandatory]=\"true\">{{i + categoryData?.from}}</div>\r\n <app-cs-checkbox [ngValue]=\"selectedIds.includes(category.category_id)\"\r\n (ngValueChange)=\"selectCategory($event,category)\"></app-cs-checkbox>\r\n </div>\r\n <div class=\"table-column category-name\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"category?.name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{category?.name}}</div>\r\n </div>\r\n <!-- <div class=\"within-part\" *ngIf=\"category?.parent_category_name?.length>0\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"'South Africa > America > India'\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <span *ngFor=\"let parent of category?.parent_category_name;let j=index\">{{(j!=(category?.parent_category_name?.length-1))?\r\n parent+' < ':parent}} </span>\r\n </span>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"table-column category-within\" *ngIf=\"category?.parent_category_name?.length > 0\">\r\n <div *ngFor=\"let parent of category?.parent_category_name; let last = last\" class=\"within-name\" [appTooltip]=\"category?.parent_category_name?.slice()?.reverse()?.join(' > ')\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{parent}} \r\n <span *ngIf=\"!last\"> > </span>\r\n </div>\r\n <div *ngIf=\"category?.parent_category_ids?.includes(currentProgram?.category_id)\" class=\"primary-label\">PRIMARY</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n <app-floating-bar [selectedData]=\"categoryData.selectedCategories\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program Category selected'\"\r\n [pluralText]=\"'Program Categories selected'\" (closeEvent)=\"save()\"\r\n (deleteEvent)=\"removeCategories($event)\" (closeList)=\"backToPrograms()\">\r\n </app-floating-bar>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n </div>\r\n",
|
|
543
|
-
styles: ["@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::ng-deep .program-listing{background:#fff;border-top:3px solid #1e5dd3;position:fixed;top:0;right:500px;bottom:0;left:0;z-index:1}::ng-deep .program-listing.animate{-webkit-animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .program-listing-head{background:#fbfbfb;height:42px;padding:0 18px;display:flex;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .program-listing-head button.back-btn{background:transparent;border:none;border-radius:0;font-size:16px;padding:0;margin:0 8px 0 0;position:relative;top:2px}::ng-deep .program-listing-title{color:#161b2f;font-size:15px;font-weight:500;margin:0!important;line-height:20px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 20px 0 0}::ng-deep .program-listing-body{padding:24px 40px 24px 36px;height:calc(100vh - 112px)}::ng-deep .program-listing-body .filter-card{display:flex;align-items:center;box-shadow:0 0 2px #00000029;border-radius:4px;height:56px;padding:12px;width:100%;justify-content:space-between;cursor:pointer}::ng-deep .program-listing-body .filter-card.active{box-shadow:0 3px 12px #1e5dd340;pointer-events:none}::ng-deep .program-listing-body .filter-card.active span.counter{background:#f1f1f1;color:#042e7d}::ng-deep .program-listing-body .filter-card label{font-weight:500;text-transform:uppercase;color:#747576;line-height:16px;margin-left:0;font-size:11px;width:100%;pointer-events:none}::ng-deep .program-listing-body .filter-card p{line-height:16px;font-size:11px;color:#161b2f;font-weight:600;margin:0}::ng-deep .program-listing-body .filter-card span.counter{display:flex;height:32px;min-width:32px;border-radius:2px;background:#042e7d;color:#fff;font-size:11px;font-weight:600;justify-content:center;align-items:center;padding:0 4px;line-height:32px}::ng-deep .program-listing-body .filter-card .left{display:flex;flex-wrap:wrap}::ng-deep .program-listing-body .filter-card+.filter-card{margin-left:4px}::ng-deep .program-listing-body .filter-card-row{display:flex;padding-bottom:8px}::ng-deep .program-listing-body .search-block{position:relative;margin-bottom:8px}::ng-deep .program-listing-body .search-block input{height:44px;line-height:24px;padding:10px 15px 10px 40px;outline:none;border:1px solid #7475763f;border-radius:4px;width:100%;font-size:14px;color:#747576}::ng-deep .program-listing-body .search-block input::-moz-placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input:-ms-input-placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input::placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .program-listing-body .search-block i{position:absolute;left:17px;font-size:12px;font-weight:400;top:17px;pointer-events:none;color:#f1f1f1}::ng-deep .program-listing-body app-pagination .wk-pagination-sec-ds{padding-top:0!important}::ng-deep .program-listing-body app-pagination.category-pagination .wk-pagination-sec-ds{padding-bottom:0!important}::ng-deep .program-listing-body .program-listing-part{height:calc(100vh - 192px);overflow:auto;padding:0 12px 0 0;width:calc(100% + 12px)}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-track{background-color:#fff;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .program-listing-body .program-listing-part.with-pagination{height:calc(100vh - 262px)}::ng-deep .program-listing-body .program-listing-part.with-category-list{height:calc(100vh - 262px)}::ng-deep .program-listing-body .program-listing-part.with-category-list.with-pagination{height:calc(100vh - 300px)}::ng-deep .program-listing-body .program-listing-part.with-category-pagination{height:calc(100vh - 220px)}::ng-deep .program-listing-body .program-listing-part .selected-area{background:#fff;height:32px;position:sticky;top:0;z-index:1}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:100%;height:16px}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item{width:100%;position:relative}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .value,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .value{color:#161b2f;font-size:12px;font-weight:500;margin-left:24px}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .value{margin-left:0}::ng-deep .program-listing-body .program-listing-part .table-head{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .program-listing-body .program-listing-part .table-head .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column{color:#161b2f;font-size:11px;font-weight:500;height:28px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px;text-transform:uppercase}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.name{width:calc(100% - 64px);min-width:calc(100% - 64px)}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.category-name{width:calc(100% - 332px);min-width:calc(100% - 332px)}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.category-within{width:300px;min-width:300px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.final-select{background:#fbfbfb}::ng-deep .program-listing-body .program-listing-part .program-listing-item.final-select .table-row .table-column.serial .sr-no{background:transparent}::ng-deep .program-listing-body .program-listing-part .program-listing-item .main-list{border:1px solid #f1f1f1;border-radius:2px;cursor:pointer;margin-bottom:4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial .sr-no{opacity:0}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled{pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled .primary-program app-cs-switch .cs-switch .value{opacity:.4}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled .name .name-inner .name-with-count .value{color:#dbdbdb!important}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column{color:#747576;height:40px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial .sr-no{width:16px;background:#f8f8f8;-ms-writing-mode:tb-lr;writing-mode:vertical-lr;color:#747576;font-size:10px;font-weight:500;display:flex;height:100%;align-items:center;justify-content:center;position:relative;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-radio{position:absolute;top:14px;left:8px;opacity:0;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:16px;height:16px;top:12px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name{width:calc(100% - 232px);min-width:calc(100% - 232px)}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner{width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .value{color:#161b2f;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:8px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .count{background:#1e5dd3;border-radius:20px;color:#fff;font-size:9px;font-weight:500;line-height:16px;min-width:24px;display:inline-block;text-align:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .name-with-count{display:flex;align-items:center;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name{width:calc(100% - 332px);min-width:calc(100% - 332px)}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name .name-inner{width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name .name-inner .name-with-count{display:flex;align-items:center;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name .name-inner .name-with-count .value{color:#161b2f;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:8px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-within{width:300px;min-width:300px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-within .within-name{color:#747576;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-within .primary-label{background:#7aa7f7;border-radius:2px;color:#fff;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 4px;line-height:12px;margin:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program{width:200px;max-width:200px;justify-content:end}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program app-cs-switch{opacity:0;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program app-cs-switch .cs-switch .value{font-size:11px!important;color:#747576!important;font-weight:500!important;width:auto!important;margin-right:8px;cursor:pointer}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.arrow{background:transparent;border:none;border-radius:0;color:#747576;font-size:12px;padding:0;margin:0;display:flex;align-items:center;justify-content:center;height:100%;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.disabled{opacity:.5!important;pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-radio{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.primary-program app-cs-switch,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.primary-program app-cs-switch{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row{border-top:1px solid #f1f1f1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no{color:#f8f8f8}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no vui-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no vui-checkbox{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row .table-column.name .name-inner .value{color:#747576;font-size:12px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-radio{opacity:1}::ng-deep .program-listing-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1rem;z-index:1}::ng-deep .program-listing-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block{height:2.25rem;min-width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .program-listing-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .program-listing-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}::ng-deep .program-listing-confirmation.error-confirmation{background:#eb2424}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top{justify-content:space-between}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top button{height:1.5rem;width:3rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top button.ok-btn{background:#fff;color:#eb2424;margin-left:.25rem}.within-part{display:flex;align-items:center;padding-right:12px}.within-part .value{text-overflow:ellipsis!important;white-space:nowrap!important;overflow:hidden!important;font-size:11px!important;color:#747576!important}.within-box{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding:0 4px;margin-right:8px;line-height:12px}"]
|
|
365
|
+
template: "<div class=\"program-listing\" [class.animate]=\"animation\" *ngIf=\"!showCategories && !hideProgramsList\">\r\n <div class=\"program-listing-head\">\r\n <h3 class=\"program-listing-title\">Select a Program</h3>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n <div class=\"filter-card-row\">\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'regulations'\" (click)=\"changeTab('regulations')\">\r\n <div class=\"left\">\r\n <label>REGULATIONS</label>\r\n <p *ngIf=\"programData?.SelectedRegulationProgramsCount> 0\">\r\n {{programData?.SelectedRegulationProgramsCount}}\r\n {{(programData?.SelectedRegulationProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllRegulationProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'standards'\" (click)=\"changeTab('standards')\">\r\n <div class=\"left\">\r\n <label>STANDARDS</label>\r\n <p *ngIf=\"programData?.SelectedStandardProgramsCount> 0\">\r\n {{programData?.SelectedStandardProgramsCount}}\r\n {{(programData?.SelectedStandardProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllStandardProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'internal_controls'\"\r\n (click)=\"changeTab('internal_controls')\">\r\n <div class=\"left\">\r\n <label>INTERNAL CONTROLS</label>\r\n <p *ngIf=\"programData?.SelectedInternalControlsProgramsCount> 0\">\r\n {{programData?.SelectedInternalControlsProgramsCount}}\r\n {{(programData?.SelectedInternalControlsProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllInternalControlsProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'others'\" (click)=\"changeTab('others')\">\r\n <div class=\"left\">\r\n <label>OTHERS</label>\r\n <p *ngIf=\"programData?.SelectedOthersProgramsCount> 0\">\r\n {{programData?.SelectedOthersProgramsCount}}\r\n {{(programData?.SelectedOthersProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllOthersProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"search-block\">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\" #searchProgram (keyup.enter)=\"handleSearch($event.target.value)\"\r\n placeholder=\"Search Programs\" />\r\n </div>\r\n <app-pagination *ngIf=\"programData.totalPages > 1\" [start]=\"programData.from\" [end]=\"programData.to\"\r\n [total]=\"programData.totalRecords\" [pageCount]=\"programData.totalPages\"\r\n [currentPage]=\"programData.currentPage\" (selectedPage)=\"changePage($event,'program')\"></app-pagination>\r\n <div class=\"program-listing-part\" [class.with-category-list]=\"!showCategories && !hideProgramsList\" [class.with-pagination]=\"programData.totalPages > 1\">\r\n <app-no-data *ngIf=\"programData?.data?.length==0 && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\"\r\n [noDataText]=\"'No Data Found'\"></app-no-data>\r\n\r\n <div class=\"program-listing-item\" [class.active]=\"showCategories && currentProgram?._id == program?._id\"\r\n *ngFor=\"let program of programData.data;let i = index\">\r\n <div class=\"table-row main-list\" [class.active]=\"currentProgram?._id == program?._id\"\r\n [class.disabled]=\"false\" (click)=\"selectProgram(true,program)\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+programData.from\" placement=\"bottom\" delay=\"0\" type=\"black\"\r\n [tooltipMandatory]=\"true\">{{i+programData.from}}</div>\r\n <app-cs-radio [name]=\"'t'\" [checked]=\"currentProgram?._id == program?._id\"\r\n (checkedEvent)=\"selectProgram($event.target.checked,program)\"></app-cs-radio>\r\n </div>\r\n <div class=\"table-column name\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"program?.item_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{program?.name}}</div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"table-column action\">\r\n <button class=\"arrow\" *ngIf=\"program?.child_id?.length\" [class.disabled]=\"false\"\r\n [disabled]=\"false\">\r\n <i *ngIf=\"!(showCategories && currentProgram?._id == program?._id)\"\r\n (click)=\"selectProgram($event,program)\" class=\"icons\"></i>\r\n <i *ngIf=\"showCategories && currentProgram?._id == program?._id\" class=\"icons\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n <app-floating-bar [selectedData]=\"(currentProgram?.category_id)?[currentProgram]:[]\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true \" (closeList)=\"close()\">\r\n </app-floating-bar>\r\n\r\n\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n</div>\r\n<div class=\"program-listing\" [class.animate]=\"animation\" *ngIf=\"showCategories || hideProgramsList\">\r\n <div class=\"program-listing-head\">\r\n <h3 class=\"program-listing-title\">\r\n <button class=\"back-btn\" (click)=\"backToPrograms()\"><i class=\"icons\"></i></button>\r\n Program > <span *ngIf=\"currentProgram?.name\"> {{currentProgram?.name}} > </span> Select Program Categories\r\n </h3>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n\r\n <div class=\"search-block\">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\" #searchCategory (keyup.enter)=\"categorySearch($event.target.value)\"\r\n placeholder=\"Search Categories\" />\r\n </div>\r\n <app-pagination *ngIf=\"categoryData.totalPages > 1\" [start]=\"categoryData.from\" [end]=\"categoryData.to\"\r\n [total]=\"categoryData.totalRecords\" [pageCount]=\"categoryData.totalPages\"\r\n [currentPage]=\"categoryData.currentPage\" (selectedPage)=\"changePage($event,'category')\"></app-pagination>\r\n <div class=\"program-listing-part\">\r\n <app-no-data *ngIf=\"categoryData?.data?.length==0 && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\"\r\n [noDataText]=\"'No Data Found'\"></app-no-data>\r\n\r\n <ng-container *ngIf=\"!loader && categoryData.data?.length\">\r\n <div class=\"selected-area\" *ngIf=\"!loader && (currentProgram?.name ? categoryData.data?.length : programData?.data?.length)\">\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='checked'\" [ngValue]=\"true\"\r\n (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox>\r\n <app-cs-checkbox-indeterminate *ngIf=\"checkCategoriesSelection()=='indeterminate'\" [ngValue]=\"true\"\r\n (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox-indeterminate>\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='unchecked'\" [ngValue]=\"false\"\r\n (ngValueChange)=\"selectAllCategories(true)\">Select All</app-cs-checkbox>\r\n\r\n </div>\r\n <div class=\"program-listing-item\" [class.active]=\"subList\">\r\n <div class=\"table-row main-list\" *ngFor=\"let category of categoryData.data;let i = index\"\r\n [class.active]=\"selectedIds.includes(category.category_id)\" [class.disabled]=\"false\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i + categoryData?.from\" placement=\"bottom\" delay=\"0\" type=\"black\"\r\n [tooltipMandatory]=\"true\">{{i + categoryData?.from}}</div>\r\n <app-cs-checkbox [ngValue]=\"selectedIds.includes(category.category_id)\"\r\n (ngValueChange)=\"selectCategory($event,category)\"></app-cs-checkbox>\r\n </div>\r\n <div class=\"table-column name\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"category?.name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{category?.name}}</div>\r\n </div>\r\n <div class=\"within-part\" *ngIf=\"category?.parent_category_name?.length>0\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"'South Africa > America > India'\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <span\r\n *ngFor=\"let parent of category?.parent_category_name;let j=index\">{{(j!=(category?.parent_category_name?.length-1))?\r\n parent+' < ':parent}} </span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-column action\">\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n <app-floating-bar [selectedData]=\"categoryData.selectedCategories\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Category selected'\"\r\n [pluralText]=\"'Categories selected'\" (closeEvent)=\"save()\"\r\n (deleteEvent)=\"removeCategories($event)\" (closeList)=\"backToPrograms()\">\r\n </app-floating-bar>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n </div>\r\n",
|
|
366
|
+
styles: ["@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::ng-deep .program-listing{background:#fff;border-top:3px solid #1e5dd3;position:fixed;top:0;right:500px;bottom:0;left:0;z-index:1}::ng-deep .program-listing.animate{-webkit-animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .program-listing-head{background:#fbfbfb;height:42px;padding:0 18px;display:flex;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .program-listing-head button.back-btn{background:transparent;border:none;border-radius:0;font-size:16px;padding:0;margin:0 8px 0 0;position:relative;top:2px}::ng-deep .program-listing-title{color:#161b2f;font-size:15px;font-weight:500;margin:0!important;line-height:20px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 20px 0 0}::ng-deep .program-listing-body{padding:24px 40px 24px 36px;height:calc(100vh - 112px)}::ng-deep .program-listing-body .filter-card{display:flex;align-items:center;box-shadow:0 0 2px #00000029;border-radius:4px;height:56px;padding:12px;width:100%;justify-content:space-between;cursor:pointer}::ng-deep .program-listing-body .filter-card.active{box-shadow:0 3px 12px #1e5dd340;pointer-events:none}::ng-deep .program-listing-body .filter-card.active span.counter{background:#f1f1f1;color:#042e7d}::ng-deep .program-listing-body .filter-card label{font-weight:500;text-transform:uppercase;color:#747576;line-height:16px;margin-left:0;font-size:11px;width:100%;pointer-events:none}::ng-deep .program-listing-body .filter-card p{line-height:16px;font-size:11px;color:#161b2f;font-weight:600;margin:0}::ng-deep .program-listing-body .filter-card span.counter{display:flex;height:32px;min-width:32px;border-radius:2px;background:#042e7d;color:#fff;font-size:11px;font-weight:600;justify-content:center;align-items:center;padding:0 4px;line-height:32px}::ng-deep .program-listing-body .filter-card .left{display:flex;flex-wrap:wrap}::ng-deep .program-listing-body .filter-card+.filter-card{margin-left:4px}::ng-deep .program-listing-body .filter-card-row{display:flex;padding-bottom:8px}::ng-deep .program-listing-body .search-block{position:relative;margin-bottom:8px}::ng-deep .program-listing-body .search-block input{height:44px;line-height:24px;padding:10px 15px 10px 40px;outline:none;border:1px solid #7475763f;border-radius:4px;width:100%;font-size:14px;color:#747576}::ng-deep .program-listing-body .search-block input::-moz-placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input:-ms-input-placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input::placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .program-listing-body .search-block i{position:absolute;left:17px;font-size:12px;font-weight:400;top:17px;pointer-events:none;color:#f1f1f1}::ng-deep .program-listing-body app-pagination .wk-pagination-sec-ds{padding-top:0!important}::ng-deep .program-listing-body .program-listing-part{height:calc(100vh - 192px);overflow:auto;padding:0 12px 0 0;width:calc(100% + 12px)}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-track{background-color:#fff;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .program-listing-body .program-listing-part.with-pagination{height:calc(100vh - 262px)}::ng-deep .program-listing-body .program-listing-part.with-category-list{height:calc(100vh - 262px)}::ng-deep .program-listing-body .program-listing-part.with-category-list.with-pagination{height:calc(100vh - 300px)}::ng-deep .program-listing-body .program-listing-part .selected-area{background:#fff;height:32px;position:sticky;top:0;z-index:1}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:100%;height:16px}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item{width:100%;position:relative}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .value,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .value{color:#161b2f;font-size:12px;font-weight:500;margin-left:24px}::ng-deep .program-listing-body .program-listing-part .table-head .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column{color:#747576;font-size:11px;font-weight:500;height:28px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px;text-transform:uppercase}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.name{width:calc(100% - 64px);min-width:calc(100% - 64px)}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item{border:1px solid #f1f1f1;border-radius:2px;margin-bottom:4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .main-list{cursor:pointer}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active{border-color:#1e5dd3;box-shadow:0 3px 6px #4681ef26}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled{pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column{color:#747576;height:48px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial .sr-no{width:16px;background:#f8f8f8;-ms-writing-mode:tb-lr;writing-mode:vertical-lr;color:#747576;font-size:10px;font-weight:500;display:flex;height:100%;align-items:center;justify-content:center;position:relative;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-radio{position:absolute;top:14px;left:8px;opacity:0;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:16px;height:16px;top:16px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name{width:calc(100% - 64px);min-width:calc(100% - 64px)}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner{width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .value{color:#161b2f;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:8px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .count{background:#1e5dd3;border-radius:20px;color:#fff;font-size:9px;font-weight:500;line-height:16px;min-width:24px;display:inline-block;text-align:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .name-with-count{display:flex;align-items:center;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.arrow{background:transparent;border:none;border-radius:0;color:#747576;font-size:12px;padding:0;margin:0;display:flex;align-items:center;justify-content:center;height:100%;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.disabled{opacity:.5!important;pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-radio{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row{border-top:1px solid #f1f1f1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no{color:#f8f8f8}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no vui-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no vui-checkbox{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row .table-column.name .name-inner .value{color:#747576;font-size:12px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-radio{opacity:1}::ng-deep .program-listing-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1.75rem;z-index:1}::ng-deep .program-listing-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block{height:2.25rem;width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .program-listing-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .program-listing-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}.within-part{display:flex;align-items:center;padding-right:12px}.within-part .value{text-overflow:ellipsis!important;white-space:nowrap!important;overflow:hidden!important;font-size:11px!important;color:#747576!important}.within-box{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding:0 4px;margin-right:8px;line-height:12px}"]
|
|
544
367
|
},] }
|
|
545
368
|
];
|
|
546
369
|
ProgramListingComponent.ctorParameters = () => [
|
|
@@ -549,14 +372,11 @@ ProgramListingComponent.ctorParameters = () => [
|
|
|
549
372
|
ProgramListingComponent.propDecorators = {
|
|
550
373
|
programsList: [{ type: Input }],
|
|
551
374
|
selectedProgram: [{ type: Input }],
|
|
552
|
-
|
|
553
|
-
getSelectedCategories: [{ type: Input, args: ['selectedCategories',] }],
|
|
375
|
+
selectedCategories: [{ type: Input }],
|
|
554
376
|
hideProgramsList: [{ type: Input }],
|
|
555
|
-
mode: [{ type: Input }],
|
|
556
377
|
searchProgram: [{ type: ViewChild, args: ['searchProgram',] }],
|
|
557
378
|
searchCategory: [{ type: ViewChild, args: ['searchCategory',] }],
|
|
558
|
-
getLinkedProgram: [{ type: Input, args: ['linkedProgram',] }],
|
|
559
379
|
saveSelectedProgram: [{ type: Output }],
|
|
560
380
|
closeEvent: [{ type: Output }]
|
|
561
381
|
};
|
|
562
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0aW5nL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBUXZGLE1BQU0sT0FBTyx1QkFBdUI7SUFtR2xDLFlBQW9CLHFCQUE0QztRQUE1QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBbEdoRSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUlOLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDakMsMkNBQTJDO1FBRTNDLHVCQUFrQixHQUFVLEVBQUUsQ0FBQztRQUMvQiwyQkFBc0IsR0FBUSxFQUFFLENBQUM7UUFTeEIsU0FBSSxHQUFXLFFBQVEsQ0FBQztRQWtCakMsMkJBQXNCLEdBQUs7WUFDekIsT0FBTyxFQUFDLEVBQUU7WUFDVixVQUFVLEVBQUMsRUFBRTtTQUNkLENBQUE7UUFDRCxnQkFBVyxHQUFnQjtZQUN6QixJQUFJLEVBQUUsRUFBRTtZQUNSLElBQUksRUFBRSxDQUFDO1lBQ1AsRUFBRSxFQUFFLENBQUM7WUFDTCxVQUFVLEVBQUUsQ0FBQztZQUNiLFlBQVksRUFBRSxDQUFDO1lBQ2YsV0FBVyxFQUFFLENBQUM7WUFDZCxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ25DLHNC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SSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUcsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ2pIO2FBQU07WUFDTCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7U0FDOUI7SUFDSCxDQUFDOzs7WUFobEJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQiw2dmlCQUErQzs7YUFFaEQ7OztZQVBRLHFCQUFxQjs7OzJCQVkzQixLQUFLOzhCQUVMLEtBQUs7eUJBQ0wsS0FBSztvQ0FLTCxLQUFLLFNBQUMsb0JBQW9COytCQU8xQixLQUFLO21CQUNMLEtBQUs7NEJBQ0wsU0FBUyxTQUFDLGVBQWU7NkJBQ3pCLFNBQVMsU0FBQyxnQkFBZ0I7K0JBTTFCLEtBQUssU0FBQyxlQUFlO2tDQW1FckIsTUFBTTt5QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBjYXRlZ29yeUxpc3QsIHByb2dyYW1MaXN0IH0gZnJvbSAnLi9wcm9ncmFtLWxpc3QtbW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcHJvZ3JhbS1saXN0aW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wcm9ncmFtLWxpc3RpbmcuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3JhbUxpc3RpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gIHN1Ykxpc3QgPSBmYWxzZTtcclxuICBsb2FkZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwcm9ncmFtc0xpc3Q6IGFueTtcclxuICAvLyBASW5wdXQoKSBhbGxQcm9ncmFtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBzZWxlY3RlZFByb2dyYW0hOiBhbnk7XHJcbiAgQElucHV0KCkgb3BlbmVkRnJvbTogc3RyaW5nID0gJyc7XHJcbiAgLy8gQElucHV0KCkgc2VsZWN0ZWRDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBzZWxlY3RlZENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgdGVtcFNlbGVjdGVkQ2F0ZWdvcmllczogYW55ID0gW107XHJcbiAgQElucHV0KCdzZWxlY3RlZENhdGVnb3JpZXMnKSBzZXQgZ2V0U2VsZWN0ZWRDYXRlZ29yaWVzKGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCdzZWxlY3RlZENhdGVnb3JpZXNzZWxlY3RlZENhdGVnb3JpZXMnLGNhdGVnb3J5KVxyXG4gICAgdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMgPSBjYXRlZ29yeTtcclxuICAgIHRoaXMudGVtcFNlbGVjdGVkQ2F0ZWdvcmllcyA9IEpTT04uc3RyaW5naWZ5KGNhdGVnb3J5KTtcclxuICAgIFxyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIGhpZGVQcm9ncmFtc0xpc3QhOiBhbnk7XHJcbiAgQElucHV0KCkgbW9kZTogc3RyaW5nID0gJ0NSRUFURSc7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoUHJvZ3JhbScpIHNlYXJjaFByb2dyYW0hOiBhbnk7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoQ2F0ZWdvcnknKSBzZWFyY2hDYXRlZ29yeSE6IGFueTtcclxuXHJcbiAgcHJlc2VydmVkU2VsZWN0ZWRQcm9ncmFtczogYW55O1xyXG4gIHByZXNlcnZlZFByb2dyYW1zSWQ6IGFueTtcclxuICBwcmVzZXJ2ZVByaW1hcnlQcm9ncmFtOiBhbnk7XHJcbiAgXHJcbiAgQElucHV0KCdsaW5rZWRQcm9ncmFtJykgc2V0IGdldExpbmtlZFByb2dyYW0ocHJvZ3JhbTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgPSBwcm9ncmFtO1xyXG4gICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsLmZvckVhY2goIChlbGU6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZC5wdXNoKGVsZT8uX2lkKTtcclxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudCh0cnVlICwgZWxlPy5wcm9ncmFtVHlwZSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJldmlvdXNTZWxlY3RlZFZhbHVlczphbnk9e1xyXG4gICAgcHJvZ3JhbTp7fSxcclxuICAgIGNhdGVnb3JpZXM6W11cclxuICB9XHJcbiAgcHJvZ3JhbURhdGE6IHByb2dyYW1MaXN0ID0ge1xyXG4gICAgZGF0YTogW10sXHJcbiAgICBmcm9tOiAwLFxyXG4gICAgdG86IDAsXHJcbiAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwLFxyXG4gICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICBBbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbE90aGVyc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBBbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZE90aGVyc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgU2VsZWN0ZWRTdGFuZGFyZFByb2dyYW1zQ291bnQ6IDBcclxuICB9XHJcblxyXG4gIGNhdGVnb3J5RGF0YTogY2F0ZWdvcnlMaXN0ID0ge1xyXG4gICAgZGF0YTogW10sXHJcbiAgICBmcm9tOiAwLFxyXG4gICAgdG86IDAsXHJcbiAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwLFxyXG4gICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICBzZWxlY3RlZENhdGVnb3JpZXM6IFtdXHJcbiAgfVxyXG5cclxuICBzaG93Q2F0ZWdvcmllcyA9IGZhbHNlO1xyXG4gIGN1cnJlbnRQcm9ncmFtITogYW55O1xyXG4gIHNlYXJjaFN0cmluZzogc3RyaW5nID0gJyc7XHJcbiAgY2F0ZWdvcnlTZWFyY2hTdHJpbmc6IHN0cmluZyA9ICcnO1xyXG5cclxuICBhY3RpdmVUYWI6ICdyZWd1bGF0aW9ucycgfCAnc3RhbmRhcmRzJyB8ICdpbnRlcm5hbF9jb250cm9scycgfCAnb3RoZXJzJyA9ICdyZWd1bGF0aW9ucydcclxuICBzZWxlY3RlZElkczogYW55W10gPSBbXTtcclxuICBjYXRlZ29yeUxpc3Q6IGFueVtdID0gW107XHJcbiAgYmxvY2tXaWR0aDogYW55O1xyXG5cclxuICBwcm9ncmFtVHlwZU9iamVjdCA9IHtcclxuICAgIHJlZ3VsYXRpb25zOiAxLFxyXG4gICAgc3RhbmRhcmRzOiAyLFxyXG4gICAgaW50ZXJuYWxfY29udHJvbHM6IDMsXHJcbiAgICBvdGhlcnM6IDAsXHJcbiAgfVxyXG5cclxuICBkaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZTpib29sZWFuPWZhbHNlXHJcbiAgdGVtcFByaW1hcnlQcm9ncmFtOiBhbnkgPSB7fTtcclxuICBwcmltYXJ5Q29uZmlybWF0aW9uTWVzc2FnZTogc3RyaW5nID0gYE9uY2UgY29uZmlybWVkLCB0aGUgPGVtPlByaW1hcnkgUHJvZ3JhbTwvZW0+IGZvciB0aGlzIHJlc3BvbnNpYmlsaXR5IHdpbGwgYmUgY2hhbmdlZC4gSGVuY2UsIGFsbCB0aGUgZGVmYXVsdCBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBuZXcgPGVtPlByaW1hcnkgUHJvZ3JhbTwvZW0+IHdpbGwgbm93IGFwcGx5IHRvIHRoaXMgcmVzcG9uc2liaWxpdHkuYDtcclxuICBpc1ByaW1hcnlDb25maXJtYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1VuY2hlY2tlZFByb2dyYW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1ByaW1hcnlVbmNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RlZFByb2dyYW1zRGV0YWlsOiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZFByb2dyYW1zSWQ6IGFueSA9IFtdO1xyXG5cclxuICBAT3V0cHV0KCkgc2F2ZVNlbGVjdGVkUHJvZ3JhbSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBhbGxDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlc3BvbnNpYmlsaXR5U2VydmljZTogUmVzcG9uc2liaWxpdHlTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfSwgMzAwKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvZ3JhbSAmJiB0aGlzLnNlbGVjdGVkUHJvZ3JhbVswXSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1bMF07XHJcbiAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50UHJvZ3JhbT8ucHJvZ3JhbVR5cGUpIHtcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdvdGhlcnMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAncmVndWxhdGlvbnMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAnc3RhbmRhcmRzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ2ludGVybmFsX2NvbnRyb2xzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdyZWd1bGF0aW9ucyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KCk7XHJcbiAgICAgIC8vIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoICYmIHRoaXMuY3VycmVudFByb2dyYW0pIHtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlQ2F0ZWdvcmllcygpO1xyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiBcclxuICAgIGlmICh0aGlzLmhpZGVQcm9ncmFtc0xpc3QpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LnB1c2godGhpcy5zZWxlY3RlZFByb2dyYW1bMF0/Ll9pZCk7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgICB9XHJcbiBcclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcz17XHJcbiAgICAgIHByb2dyYW1zOiB0aGlzLmN1cnJlbnRQcm9ncmFtLFxyXG4gICAgICBjYXRlZ29yaWVzOih0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGgpPyAgWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZENhdGVnb3JpZXMpXTpbXSxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByZXNlcnZlUHJldmlvdXNEZXRhaWxzKCk7XHJcbiAgfVxyXG4gIHBvcHVsYXRlQ2F0ZWdvcmllcygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgLy8gcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZCcsIHRoaXMuY3VycmVudFByb2dyYW0uX2lkKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2lzUGFnaW5hdGlvbicsIGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRQcm9ncmFtc0xpc3QocGFyYW1zLCB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYWxsQ2F0ZWdvcmllcyA9IHJlcy5kYXRhO1xyXG5cclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSBhbGxDYXRlZ29yaWVzLmZpbHRlcigoZWxlOmFueSk9PnRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLmluY2x1ZGVzKGVsZS5jYXRlZ29yeV9pZCkpXHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGVsZW1lbnQuY2F0ZWdvcnlfaWQpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaGFuZGxlU2VhcmNoKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaFN0cmluZyAhPSBldmVudCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFN0cmluZyA9IGV2ZW50O1xyXG4gICAgICB0aGlzLmdldFByb2dyYW1zTGlzdCh7IHNlYXJjaDogdHJ1ZSB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBjYXRlZ29yeVNlYXJjaChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jYXRlZ29yeVNlYXJjaFN0cmluZyAhPSBldmVudCkge1xyXG4gICAgICB0aGlzLmNhdGVnb3J5U2VhcmNoU3RyaW5nID0gZXZlbnQ7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoeyBzZWFyY2g6IHRydWUgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdFByb2dyYW0oZXZlbnQ6IGFueSwgcHJvZ3JhbTogYW55KSB7XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXMoZXZlbnQsIHByb2dyYW0pO1xyXG4gICAgLy8gdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudChldmVudCwgcHJvZ3JhbT8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY3VycmVudFByb2dyYW0gPz8ge30pLmxlbmd0aCA/IG51bGwgOiB0aGlzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgLy8gdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3QgPSBbXTtcclxuICAgICAgLy8gdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudCgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgZXZlbnQgaXMgdHJ1ZSwgdGhlbiBwdXNoIHRoZSBwcm9ncmFtIHRvIHRoZSBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIGFycmF5LiBJZiB0aGUgZXZlbnQgaXNcclxuICAgKiBmYWxzZSwgdGhlbiByZW1vdmUgdGhlIHByb2dyYW0gZnJvbSB0aGUgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCBhcnJheS5cclxuICAgKiBAcGFyYW0ge2FueX0gZXZlbnQgLSBib29sZWFuXHJcbiAgICogQHBhcmFtIHthbnl9IHByb2dyYW0gLSBhbnkgPSB7XHJcbiAgICovXHJcbiAgdXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyhldmVudDogYW55LCBwcm9ncmFtOiBhbnkpIHtcclxuICAgIGlmKGV2ZW50KSB7XHJcbiAgICAgIGNvbnN0IGluZGV4T2ZQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5maW5kSW5kZXgoIChlbDogYW55KSA9PiBlbD8uY2F0ZWdvcnlfaWQgPT09IHByb2dyYW0/LmNhdGVnb3J5X2lkKTtcclxuICAgICAgaWYoaW5kZXhPZlByb2dyYW0gPT09IC0xICYmIE9iamVjdC5rZXlzKHByb2dyYW0pPy5sZW5ndGgpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8ucHVzaChwcm9ncmFtPy5faWQpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8ucHVzaChwcm9ncmFtKTtcclxuICAgICAgICB0aGlzLmdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KGV2ZW50LCBwcm9ncmFtPy5wcm9ncmFtVHlwZSk7XHJcbiAgICAgIH1cclxuICAgIH0gXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmRleE9mUHJvZ3JhbSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8uZmluZEluZGV4KCAoZWw6IGFueSkgPT4gZWw/LmNhdGVnb3J5X2lkID09PSBwcm9ncmFtPy5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgaWYoaW5kZXhPZlByb2dyYW0gIT09IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LnNwbGljZShpbmRleE9mUHJvZ3JhbSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGluZGV4T2ZJZCA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5maW5kSW5kZXgoIChlbDogYW55KSA9PiBlbCA9PT0gcHJvZ3JhbT8uX2lkKTtcclxuICAgICAgICBpZihpbmRleE9mSWQgIT09IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8uc3BsaWNlKGluZGV4T2ZJZCwgMSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuY3VycmVudFByb2dyYW0gJiYgdGhpcy5jdXJyZW50UHJvZ3JhbT8uY2F0ZWdvcnlfaWQgPT09IHByb2dyYW0/LmNhdGVnb3J5X2lkKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLnByaW1hcnlDb25maXJtYXRpb25NZXNzYWdlID0gJ1lvdSBjYW5ub3QgZGVzZWxlY3QgdGhpcyBQcm9ncmFtIHNpbmNlIHRoaXMgaXMgdGhlIDxlbT5QcmltYXJ5IFByb2dyYW08L2VtPiBmb3IgdGhpcyByZXNwb25zaWJpbGl0eS4gVG8gcHJvY2VlZCwgZmlyc3Qgc2VsZWN0IGFub3RoZXIgUHJvZ3JhbSBhcyB0aGUgPGVtPlByaW1hcnkgUHJvZ3JhbTwvZW0+Lic7XHJcbiAgICAgICAgICB0aGlzLmlzUHJpbWFyeUNvbmZpcm1hdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA9IEpTT04uc3RyaW5naWZ5KHByb2dyYW0pO1xyXG4gICAgICAgICAgLy8gdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAvLyB9XHJcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoZXZlbnQsIHByb2dyYW0/LnByb2dyYW1UeXBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBjdXJyZW50UHJvZ3JhbSBpcyBzZXQsIHRoZW4gc2V0IHRoZSBjdXJyZW50UHJvZ3JhbSB0byB0aGUgcHJvZ3JhbSBwYXNzZWQgaW4sIGFuZCBzZXQgdGhlXHJcbiAgICogdGVtcFByaW1hcnlQcm9ncmFtIHRvIHRoZSBjdXJyZW50UHJvZ3JhbS4gXHJcbiAgICogSWYgdGhlIGN1cnJlbnRQcm9ncmFtIGlzIG5vdCBzZXQsIHRoZW4gc2V0IHRoZSBjdXJyZW50UHJvZ3JhbSB0byB0aGUgcHJvZ3JhbSBwYXNzZWQgaW4uXHJcbiAgICogQHBhcmFtIHthbnl9IGV2ZW50IC0gYW55IC0gdGhlIGV2ZW50IHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBjaGVja2JveFxyXG4gICAqIEBwYXJhbSB7YW55fSBwcm9ncmFtIC0gdGhlIHByb2dyYW0gdGhhdCBpcyBiZWluZyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIHNldFByaW1hcnlQcm9ncmFtKGV2ZW50OiBhbnksIHByb2dyYW06IGFueSkge1xyXG4gICAgXHJcbiAgICBpZih0aGlzLmN1cnJlbnRQcm9ncmFtKXtcclxuICAgICAgY29uc3QgY3VycmVudFRlbXAgPSB0aGlzLmN1cnJlbnRQcm9ncmFtO1xyXG4gICAgICB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRUZW1wKTtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyh0cnVlLCBwcm9ncmFtKVxyXG4gICAgICBpZighZXZlbnQpe1xyXG4gICAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB7fTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByaW1hcnlDb25maXJtYXRpb25NZXNzYWdlID0gJ09uY2UgY29uZmlybWVkLCB0aGUgPGVtPlByaW1hcnkgUHJvZ3JhbTwvZW0+IGZvciB0aGlzIHJlc3BvbnNpYmlsaXR5IHdpbGwgYmUgY2hhbmdlZC4gSGVuY2UsIGFsbCB0aGUgZGVmYXVsdCBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBuZXcgPGVtPlByaW1hcnkgUHJvZ3JhbTwvZW0+IHdpbGwgbm93IGFwcGx5IHRvIHRoaXMgcmVzcG9uc2liaWxpdHkuJztcclxuICAgICAgdGhpcy5pc1ByaW1hcnlDb25maXJtYXRpb24gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYoZXZlbnQgJiYgIXRoaXMuY3VycmVudFByb2dyYW0pe1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFByb2dyYW1zKHRydWUsIHByb2dyYW0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgdXNlciBjbGlja3MgXCJZZXNcIiBvbiB0aGUgY29uZmlybWF0aW9uIG1vZGFsLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHJlbW92ZSB0aGUgcHJvZ3JhbSBmcm9tXHJcbiAgICogdGhlIHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgYXJyYXkgYW5kIHRoZSBzZWxlY3RlZFByb2dyYW1zSWQgYXJyYXkuIElmIHRoZSB1c2VyIGNsaWNrcyBcIk5vXCIgb24gdGhlXHJcbiAgICogY29uZmlybWF0aW9uIG1vZGFsLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIGRvIG5vdGhpbmcuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBldmVudCAtIGJvb2xlYW4gLSZndDsgdGhpcyBpcyB0aGUgdmFsdWUgb2YgdGhlIGNoZWNrYm94XHJcbiAgICovXHJcbiAgdXBkYXRlUHJpbWFyeVByb2dyYW0oZXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgIGlmKGV2ZW50ICYmIHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4T2ZQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5maW5kSW5kZXgoIChlbDogYW55KSA9PiBlbD8uY2F0ZWdvcnlfaWQgPT09IEpTT04ucGFyc2UodGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPz8ge30pPy5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIGlmKGluZGV4T2ZQcm9ncmFtICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8uc3BsaWNlKGluZGV4T2ZQcm9ncmFtLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbmRleE9mSWQgPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8uZmluZEluZGV4KCAoZWw6IGFueSkgPT4gZWwgPT09IEpTT04ucGFyc2UodGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPz8ge30pPy5faWQpO1xyXG4gICAgICBpZihpbmRleE9mSWQgIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LnNwbGljZShpbmRleE9mSWQsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB7fTtcclxuICAgIH0gZWxzZSBpZighZXZlbnQgJiYgdGhpcy5pc1ByaW1hcnlVbmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFByb2dyYW1zKHRydWUsICB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbT8ubGVuZ3RoID8gSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA/PyB7fSkgOiB7fSk7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbT8ubGVuZ3RoID8gSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA/PyB7fSkgOiB7fTtcclxuICAgICAgdGhpcy5pc1ByaW1hcnlDb25maXJtYXRpb24gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZihldmVudCkge1xyXG4gICAgICAvLyB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdGhpcy5pc1ByaW1hcnlVbmNoZWNrZWQgPyB7fSA6IEpTT04ucGFyc2UodGhpcy50ZW1wUHJpbWFyeVByb2dyYW0pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXModGhpcy5pc1ByaW1hcnlVbmNoZWNrZWQgPyBmYWxzZSA6IHRydWUsICB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbT8ubGVuZ3RoID8gSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA/PyB7fSkgOiB7fSlcclxuICAgICAgdGhpcy5pc1ByaW1hcnlDb25maXJtYXRpb24gPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBjdXJyZW50UHJpbWFyeSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudFByb2dyYW0pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0ge31cclxuICAgICAgLy8gdGhpcy51cGRhdGVTZWxlY3RlZFByb2dyYW1zKGZhbHNlLCBKU09OLnBhcnNlKGN1cnJlbnRQcmltYXJ5KT8/IHt9KTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFByb2dyYW1zKHRydWUsIEpTT04ucGFyc2UoY3VycmVudFByaW1hcnkpPz8ge30pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdGhpcy50ZW1wUHJpbWFyeVByb2dyYW0/Lmxlbmd0aCA/IEpTT04ucGFyc2UodGhpcy50ZW1wUHJpbWFyeVByb2dyYW0gPz8ge30pIDoge307XHJcbiAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsQ2F0ZWdvcmllcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW107XHJcbiAgICAgIGlmICh0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFBhZ2VzIDwgMikge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmRhdGEuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChlbGUuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnB1c2goZWxlKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICAvLyBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkJywgdGhpcy5jdXJyZW50UHJvZ3JhbT8uX2lkKTtcclxuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdpc1BhZ2luYXRpb24nLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChwYXJhbXMsIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbENhdGVnb3JpZXMgPSByZXMuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICBhbGxDYXRlZ29yaWVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChlbGVtZW50LmNhdGVnb3J5X2lkKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSBbXVxyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBjaGVja0NhdGVnb3JpZXNTZWxlY3Rpb24oKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGggPT0gdGhpcy5jYXRlZ29yeURhdGEudG90YWxSZWNvcmRzKSB7XHJcbiAgICAgIHJldHVybiAnY2hlY2tlZCc7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiAndW5jaGVja2VkJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnaW5kZXRlcm1pbmF0ZSdcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5DYXRlZ29yaWVzKCkge1xyXG4gICAgdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcclxuICAgIGNvbnN0IGlzU3ViUHJvZ3JhbSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8uc29tZSggKGVsOiBhbnkpID0+IGVsPy5jaGlsZF9pZD8ubGVuZ3RoKTtcclxuXHJcbiAgICB0aGlzLnBvcHVsYXRlQ2F0ZWdvcmllcygpO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFByb2dyYW0/LmNoaWxkX2lkPy5sZW5ndGggfHwgaXNTdWJQcm9ncmFtKSB7XHJcbiAgICAgIHRoaXMuc2hvd0NhdGVnb3JpZXMgPSB0cnVlO1xyXG4gICAgICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgIHRoaXMuc2F2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmFja1RvUHJvZ3JhbXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuaGlkZVByb2dyYW1zTGlzdCkge1xyXG4gICAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gZmFsc2U7XHJcbiAgICAgIGlmKHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcz8ucHJvZ3JhbT8uX2lkID09IHRoaXMuY3VycmVudFByb2dyYW0pe1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzKV07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGNoYW5nZVRhYih0eXBlOiAncmVndWxhdGlvbnMnIHwgJ3N0YW5kYXJkcycgfCAnaW50ZXJuYWxfY29udHJvbHMnIHwgJ290aGVycycpIHtcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gdHlwZTtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcclxuICAgIHRoaXMuc2VhcmNoUHJvZ3JhbS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFnZShldmVudDogYW55LCB0eXBlOiAnY2F0ZWdvcnknIHwgJ3Byb2dyYW0nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncHJvZ3JhbSc6XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGdldFByb2dyYW1zTGlzdChwYXJhbXNPYmplY3Q/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbVR5cGUnLCB0aGlzLnByb2dyYW1UeXBlT2JqZWN0W3RoaXMuYWN0aXZlVGFiXSk7XHJcbiAgICBpZiAocGFyYW1zT2JqZWN0Py5zZWFyY2ggfHwgdGhpcy5zZWFyY2hTdHJpbmcpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoVGV4dCcsIHRoaXMuc2VhcmNoU3RyaW5nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2VObycsIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuZGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuZnJvbSA9IHJlcy5mcm9tO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEudG8gPSByZXMudG87XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50b3RhbFBhZ2VzID0gcmVzLnRvdGFsUGFnZXM7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50b3RhbFJlY29yZHMgPSByZXMudG90YWxSZWNvcmRzO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQgPSByZXMuQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxPdGhlcnNQcm9ncmFtc0NvdW50ID0gcmVzLkFsbE90aGVyc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldENhdGVnb3JpZXNMaXN0KHF1ZXJ5T2JqZWN0PzogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIC8vIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWQnLCB0aGlzLmN1cnJlbnRQcm9ncmFtPy5faWQpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnZU5vJywgdGhpcy5jYXRlZ29yeURhdGEuY3VycmVudFBhZ2UpO1xyXG4gICAgaWYgKHF1ZXJ5T2JqZWN0Py5zZWFyY2gpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoVGV4dCcsIHRoaXMuY2F0ZWdvcnlTZWFyY2hTdHJpbmcpO1xyXG4gICAgfVxyXG4gICAgXHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0UHJvZ3JhbXNMaXN0KHBhcmFtcywgWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZFByb2dyYW1zSWQpXSApLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5mcm9tID0gcmVzLmZyb207XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG8gPSByZXMudG87XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG90YWxQYWdlcyA9IHJlcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnRvdGFsUmVjb3JkcyA9IHJlcy50b3RhbFJlY29yZHM7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zaG93Q2F0ZWdvcmllcyA9IHRydWU7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHNhdmVQcm9ncmFtKCkge1xyXG5cclxuICB9XHJcblxyXG4gIHNlbGVjdENhdGVnb3J5KG1vZGU6IGFueSwgY2F0ZWdvcnk6IGFueSkge1xyXG4gICAgaWYgKG1vZGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGNhdGVnb3J5LmNhdGVnb3J5X2lkKTtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5LmNhdGVnb3J5X2lkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZElkcy5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudCA9PSBjYXRlZ29yeS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT0gY2F0ZWdvcnkuY2F0ZWdvcnlfaWQpXHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUgPT0gY2F0ZWdvcnk/LmNhdGVnb3J5X2lkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMuc3BsaWNlKHNlbGVjdGVkSW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2F0ZWdvcmllcyhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5jYXRlZ29yeV9pZCA9PSBldmVudC5jYXRlZ29yeV9pZClcclxuICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJZHMuZmluZEluZGV4KChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQgPT0gZXZlbnQuY2F0ZWdvcnlfaWQpO1xyXG4gICAgdGhpcy5zZWxlY3RlZElkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50UHJvZ3JhbSA9IHRoaXMucHJlc2VydmVQcmltYXJ5UHJvZ3JhbT8ubGVuZ3RoID8gSlNPTi5wYXJzZSh0aGlzLnByZXNlcnZlUHJpbWFyeVByb2dyYW0pIDoge307XHJcbiAgICBjb25zdCBzZWxlY3RlZFByb2dyYW1zSWQgPSB0aGlzLnByZXNlcnZlZFByb2dyYW1zSWQ/Lmxlbmd0aCA/IEpTT04ucGFyc2UodGhpcy5wcmVzZXJ2ZWRQcm9ncmFtc0lkKSA6IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgPSB0aGlzLnByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXM/Lmxlbmd0aCA/IEpTT04ucGFyc2UodGhpcy5wcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zKSA6IFtdO1xyXG4gICAgaWYodGhpcy5wcmVzZXJ2ZVByaW1hcnlQcm9ncmFtPy5sZW5ndGggJiYgdGhpcy5wcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zPy5sZW5ndGggKXtcclxuICAgICAgdGhpcy5zYXZlU2VsZWN0ZWRQcm9ncmFtLmVtaXQoe3Byb2dyYW06IGN1cnJlbnRQcm9ncmFtLCBjYXRlZ29yaWVzOiBKU09OLnBhcnNlKHRoaXMudGVtcFNlbGVjdGVkQ2F0ZWdvcmllcyksIGxpbmtlZFByb2dyYW06IHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5zYXZlU2VsZWN0ZWRQcm9ncmFtLmVtaXQoe3Byb2dyYW06IGN1cnJlbnRQcm9ncmFtLCBjYXRlZ29yaWVzOiB0aGlzLnNlbGVjdGVkSWRzLCBsaW5rZWRQcm9ncmFtOiBzZWxlY3RlZFByb2dyYW1zRGV0YWlsICB9KTtcclxuICAgIHRoaXMuY2xvc2VFdmVudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCkge1xyXG4gICAgaWYoIXRoaXMuaGlkZVByb2dyYW1zTGlzdCl7XHJcbiAgICAgIHRoaXMuZGlzcGxheUNvbmZpcm1hdGlvbk1lc3NhZ2U9dHJ1ZTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7IHByb2dyYW06IHRoaXMuY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6IHRoaXMuc2VsZWN0ZWRJZHMsIGxpbmtlZFByb2dyYW06IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCB9KTtcclxuICAgICAgLy8gdGhpcy5zYXZlU2VsZWN0ZWRQcm9ncmFtLmVtaXQoeyBwcm9ncmFtOiB0aGlzLmN1cnJlbnRQcm9ncmFtLCBjYXRlZ29yaWVzOiB0aGlzLnNlbGVjdGVkSWRzIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUNoYW5nZXModmFsdWU6Ym9vbGVhbil7XHJcbiAgICBpZih2YWx1ZSl7XHJcbiAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHsgcHJvZ3JhbTogdGhpcy5jdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogdGhpcy5zZWxlY3RlZElkcywgbGlua2VkUHJvZ3JhbTogdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsIH0pO1xyXG4gICAgICAvLyB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7IHByb2dyYW06IHRoaXMuY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6IHRoaXMuc2VsZWN0ZWRJZHMgfSk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZT1mYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZUV2ZW50KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGluZGV4T2ZQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5maW5kSW5kZXgoIChlbDogYW55KSA9PiBlbD8uY2F0ZWdvcnlfaWQgPT09IGV2ZW50Py5jYXRlZ29yeV9pZCk7XHJcbiAgICBpZihpbmRleE9mUHJvZ3JhbSAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5zcGxpY2UoaW5kZXhPZlByb2dyYW0sIDEpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXhPZklkID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LmZpbmRJbmRleCggKGVsOiBhbnkpID0+IGVsID09PSBldmVudD8uX2lkKTtcclxuICAgIGlmKGluZGV4T2ZJZCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LnNwbGljZShpbmRleE9mSWQsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoaXMuY3VycmVudFByb2dyYW0gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IFtdO1xyXG4gICAgLy9BcyB0aGlzIGlzIGEgcmFkaW8gbGlzdCBhbmQgb25seSBvbmUgaXRlbSBjYW4gYmUgc2VsZWN0ZWQgdGhhdHMgd2h5IHdlIGFyZSByZXNldHRpbmcgYWxsIHRoZSBjb3VudHMgdG8gemVyb1xyXG4gICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudChmYWxzZSAsIGV2ZW50Py5wcm9ncmFtVHlwZSApXHJcbiAgfVxyXG5cclxuICBcclxuXHJcbiAgZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoZXZlbnQ/OiBib29sZWFuLCBwcm9ncmFtVHlwZT86IG51bWJlcikge1xyXG4gICAgLy8gc3dpdGNoICh0aGlzLmN1cnJlbnRQcm9ncmFtLnByb2dyYW1UeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHByb2dyYW1UeXBlKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBldmVudCA/IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50KysgOiB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudC0tO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgZXZlbnQgPyB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQrKyA6IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudC0tO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZXZlbnQgPyB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkU3RhbmRhcmRQcm9ncmFtc0NvdW50KysgOiB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkU3RhbmRhcmRQcm9ncmFtc0NvdW50LS07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBldmVudCA/IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudCsrIDogdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50LS07XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIHNlbGVjdGVkUHJvZ3JhbSBhcnJheSBoYXMgYSBsZW5ndGgsIHRoZW4gcHJlc2VydmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IGFzIHRoZVxyXG4gICAqIHByZXNlcnZlUHJpbWFyeVByb2dyYW0gdmFyaWFibGUuIE90aGVyd2lzZSwgc2V0IHRoZSBwcmVzZXJ2ZVByaW1hcnlQcm9ncmFtIHZhcmlhYmxlIHRvIGFuIGVtcHR5XHJcbiAgICogb2JqZWN0LlxyXG4gICAqIFxyXG4gICAqIElmIHRoZSBzZWxlY3RlZFByb2dyYW1zSWQgYXJyYXkgaGFzIGEgbGVuZ3RoLCB0aGVuIHByZXNlcnZlIHRoZSBhcnJheSBhcyB0aGUgcHJlc2VydmVkUHJvZ3JhbXNJZFxyXG4gICAqIHZhcmlhYmxlLiBPdGhlcndpc2UsIHNldCB0aGUgcHJlc2VydmVkUHJvZ3JhbXNJZCB2YXJpYWJsZSB0byBhbiBlbXB0eSBhcnJheS5cclxuICAgKiBcclxuICAgKiBJZiB0aGUgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCBhcnJheSBoYXMgYSBsZW5ndGgsIHRoZW4gcHJlc2VydmUgdGhlIGFycmF5IGFzIHRoZVxyXG4gICAqIHByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXMgdmFyaWFibGUuIE90aGVyd2lzZSwgc2V0IHRoZSBwcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zIHZhcmlhYmxlIHRvIGFuXHJcbiAgICogZW1wdHkgYXJyYXkuXHJcbiAgICogXHJcbiAgICogSWYgdGhlIHNlbGVjdGVkUHJvZ3JhbSBhcnJheSBkb2VzIG5vdCBoYXZlIGEgbGVuZ3RoLCB0aGVuIHNldCB0aGUgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCBhcnJheSB0b1xyXG4gICAqIGFuIGVtcHR5IGFycmF5IGFuZCB0aGUgc2VsZWN0ZWRQcm9ncmFtc0lkIGFycmF5IHRvIGFuIGVtcHR5IGFycmF5LlxyXG4gICAqL1xyXG4gIHByZXNlcnZlUHJldmlvdXNEZXRhaWxzKCkge1xyXG4gICAgaWYodGhpcy5zZWxlY3RlZFByb2dyYW1bMF0/Lmxlbmd0aCB8fCB0aGlzLmN1cnJlbnRQcm9ncmFtICkge1xyXG4gICAgICB0aGlzLnByZXNlcnZlUHJpbWFyeVByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZFByb2dyYW1bMF0pIDoge307IFxyXG4gICAgICB0aGlzLnByZXNlcnZlZFByb2dyYW1zSWQgPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8ubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZFByb2dyYW1zSWQpIDogW107XHJcbiAgICAgIHRoaXMucHJlc2VydmVkU2VsZWN0ZWRQcm9ncmFtcyA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCA/IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCkgOiBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZCA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
382
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0aW5nL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBUXZGLE1BQU0sT0FBTyx1QkFBdUI7SUFpRWxDLFlBQW9CLHFCQUE0QztRQUE1QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBaEVoRSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUlOLHVCQUFrQixHQUFVLEVBQUUsQ0FBQztRQUl4QywyQkFBc0IsR0FBSztZQUN6QixPQUFPLEVBQUMsRUFBRTtZQUNWLFVBQVUsRUFBQyxFQUFFO1NBQ2QsQ0FBQTtRQUNELGdCQUFXLEdBQWdCO1lBQ3pCLElBQUksRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLENBQUM7WUFDUCxFQUFFLEVBQUUsQ0FBQztZQUNMLFVBQVUsRUFBRSxDQUFDO1lBQ2IsWUFBWSxFQUFFLENBQUM7WUFDZixXQUFXLEVBQUUsQ0FBQztZQUNkLGdDQUFnQyxFQUFFLENBQUM7WUFDbkMsc0JBQXNCLEVBQUUsQ0FBQztZQUN6QiwwQkFBMEIsRUFBRSxDQUFDO1lBQzdCLHdCQUF3QixFQUFFLENBQUM7WUFDM0IscUNBQXFDLEVBQUUsQ0FBQztZQUN4QywyQkFBMkIsRUFBRSxDQUFDO1lBQzlCLCtCQUErQixFQUFFLENBQUM7WUFDbEMsNkJBQTZCLEVBQUUsQ0FBQztTQUNqQyxDQUFBO1FBRUQsaUJBQVksR0FBaUI7WUFDM0IsSUFBSSxFQUFFLEVBQUU7WUFDUixJQUFJLEVBQUUsQ0FBQztZQUNQLEVBQUUsRUFBRSxDQUFDO1lBQ0wsVUFBVSxFQUFFLENBQUM7WUFDYixZQUFZLEVBQUUsQ0FBQztZQUNmLFdBQVcsRUFBRSxDQUFDO1lBQ2Qsa0JBQWtCLEVBQUUsRUFBRTtTQUN2QixDQUFBO1FBRUQsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIseUJBQW9CLEdBQVcsRUFBRSxDQUFDO1FBRWxDLGNBQVMsR0FBaUUsYUFBYSxDQUFBO1FBQ3ZGLGdCQUFXLEdBQVUsRUFBRSxDQUFDO1FBQ3hCLGlCQUFZLEdBQVUsRUFBRSxDQUFDO1FBR3pCLHNCQUFpQixHQUFHO1lBQ2xCLFdBQVcsRUFBRSxDQUFDO1lBQ2QsU0FBUyxFQUFFLENBQUM7WUFDWixpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxDQUFDO1NBQ1YsQ0FBQTtRQUVELCtCQUEwQixHQUFTLEtBQUssQ0FBQTtRQUU5Qix3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO0lBRzFCLENBQUM7SUFFRCxRQUFROztRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsUUFBUSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLFdBQVcsRUFBRTtnQkFDeEMsS0FBSyxDQUFDO29CQUNKLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO29CQUMxQixNQUFNO2dCQUNSLEtBQUssQ0FBQztvQkFDSixJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztvQkFDL0IsTUFBTTtnQkFDUixLQUFLLENBQUM7b0JBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7b0JBQzdCLE1BQU07Z0JBQ1IsS0FBSyxDQUFDO29CQUNKLElBQUksQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLENBQUM7b0JBQ3JDLE1BQU07Z0JBQ1I7b0JBQ0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7b0JBQy9CLE1BQU07YUFDVDtZQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsTUFBTSxLQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzNCO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixHQUFDO1lBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYztZQUM3QixVQUFVLEVBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQyxDQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxFQUFFO1NBQ3ZGLENBQUE7SUFFSCxDQUFDO0lBQ0Qsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTlDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNELElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUUvQixJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFPLEVBQUMsRUFBRSxDQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7Z0JBQ3pILElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0JBQzVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDNUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDdEIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUlILFlBQVksQ0FBQyxLQUFVO1FBQ3JCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1NBQ3ZDO0lBQ0gsQ0FBQztJQUNELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLEtBQUssRUFBRTtZQUN0QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1NBQ3pDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVLEVBQUUsT0FBWTtRQUNwQyxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWM7O1FBQ2hDLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDLENBQUMsQ0FBQTthQUNIO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxHQUFHLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUU5QyxJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDM0QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7d0JBQ2pCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBRS9CLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQzt3QkFDaEQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFOzRCQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7d0JBQzVDLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUN0QixDQUFDO29CQUNELEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTt3QkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDdEIsQ0FBQztpQkFDRixDQUFDLENBQUM7YUFDSjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtZQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztTQUV2QjtJQUdILENBQUM7SUFFRCx3QkFBd0I7UUFFdEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRTtZQUNqRixPQUFPLFNBQVMsQ0FBQztTQUNsQjthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtZQUN2RCxPQUFPLFdBQVcsQ0FBQztTQUNwQjthQUFNO1lBQ0wsT0FBTyxlQUFlLENBQUE7U0FDdkI7SUFDSCxDQUFDO0lBRUQsY0FBYzs7UUFDWixJQUFJLE1BQUEsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxRQUFRLDBDQUFFLE1BQU0sRUFBRTtZQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsY0FBYzs7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUcsQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLHNCQUFzQiwwQ0FBRSxPQUFPLDBDQUFFLEdBQUcsS0FBSSxJQUFJLENBQUMsY0FBYyxFQUFDO2dCQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDNUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNyRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBSTtnQkFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7YUFDdkI7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBR0QsU0FBUyxDQUFDLElBQWtFO1FBQzFFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVUsRUFBRSxJQUE0QjtRQUNqRCxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssU0FBUztnQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixNQUFNO1NBQ1Q7SUFFSCxDQUFDO0lBSUQsZUFBZSxDQUFDLFlBQWtCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLE1BQU0sS0FBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzdDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDekQ7YUFBTTtZQUNMLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDM0QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsZ0NBQWdDLEdBQUcsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO2dCQUN6RixJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixHQUFHLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDckUsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUM7Z0JBQzdFLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEdBQUcsR0FBRyxDQUFDLHdCQUF3QixDQUFDO2dCQUN6RSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUV0QixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsV0FBaUI7O1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEUsSUFBSSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsTUFBTSxFQUFFO1lBQ3ZCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUNqRTtRQUVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNELElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO2dCQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUU3QixDQUFDO0lBR0QsV0FBVztJQUVYLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUyxFQUFFLFFBQWE7UUFDckMsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDM0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVU7UUFDekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3hILElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBQztZQUN4QixJQUFJLENBQUMsMEJBQTBCLEdBQUMsSUFBSSxDQUFDO1NBQ3RDO2FBQUk7WUFDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQy9GO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLElBQUcsS0FBSyxFQUFDO1lBQ1AsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUMvRjthQUFJO1lBQ0gsSUFBSSxDQUFDLDBCQUEwQixHQUFDLEtBQUssQ0FBQztTQUN2QztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2Qiw2R0FBNkc7UUFDN0csSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQ0FBcUMsR0FBRyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsR0FBRyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQywrQkFBK0IsR0FBRyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUlELHVCQUF1QjtRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLHFDQUFxQyxHQUFHLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLCtCQUErQixHQUFHLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsV0FBVyxDQUFDLDZCQUE2QixHQUFHLENBQUMsQ0FBQztRQUNuRCxRQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFO1lBQ3ZDLEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFLENBQUM7Z0JBQy9DLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFdBQVcsQ0FBQywrQkFBK0IsRUFBRSxDQUFDO2dCQUNuRCxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztnQkFDakQsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsV0FBVyxDQUFDLHFDQUFxQyxFQUFFLENBQUM7Z0JBQ3pELE1BQU07U0FFVDtJQUNILENBQUM7OztZQW5aRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsNHBhQUErQzs7YUFFaEQ7OztZQVBRLHFCQUFxQjs7OzJCQVkzQixLQUFLOzhCQUVMLEtBQUs7aUNBQ0wsS0FBSzsrQkFDTCxLQUFLOzRCQUNMLFNBQVMsU0FBQyxlQUFlOzZCQUN6QixTQUFTLFNBQUMsZ0JBQWdCO2tDQW1EMUIsTUFBTTt5QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBjYXRlZ29yeUxpc3QsIHByb2dyYW1MaXN0IH0gZnJvbSAnLi9wcm9ncmFtLWxpc3QtbW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcHJvZ3JhbS1saXN0aW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wcm9ncmFtLWxpc3RpbmcuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3JhbUxpc3RpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gIHN1Ykxpc3QgPSBmYWxzZTtcclxuICBsb2FkZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwcm9ncmFtc0xpc3Q6IGFueTtcclxuICAvLyBASW5wdXQoKSBhbGxQcm9ncmFtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBzZWxlY3RlZFByb2dyYW0hOiBhbnk7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGhpZGVQcm9ncmFtc0xpc3QhOiBhbnk7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoUHJvZ3JhbScpIHNlYXJjaFByb2dyYW0hOiBhbnk7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoQ2F0ZWdvcnknKSBzZWFyY2hDYXRlZ29yeSE6IGFueTtcclxuICBwcmV2aW91c1NlbGVjdGVkVmFsdWVzOmFueT17XHJcbiAgICBwcm9ncmFtOnt9LFxyXG4gICAgY2F0ZWdvcmllczpbXVxyXG4gIH1cclxuICBwcm9ncmFtRGF0YTogcHJvZ3JhbUxpc3QgPSB7XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIGZyb206IDAsXHJcbiAgICB0bzogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIEFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudDogMFxyXG4gIH1cclxuXHJcbiAgY2F0ZWdvcnlEYXRhOiBjYXRlZ29yeUxpc3QgPSB7XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIGZyb206IDAsXHJcbiAgICB0bzogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIHNlbGVjdGVkQ2F0ZWdvcmllczogW11cclxuICB9XHJcblxyXG4gIHNob3dDYXRlZ29yaWVzID0gZmFsc2U7XHJcbiAgY3VycmVudFByb2dyYW0hOiBhbnk7XHJcbiAgc2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAnJztcclxuICBjYXRlZ29yeVNlYXJjaFN0cmluZzogc3RyaW5nID0gJyc7XHJcblxyXG4gIGFjdGl2ZVRhYjogJ3JlZ3VsYXRpb25zJyB8ICdzdGFuZGFyZHMnIHwgJ2ludGVybmFsX2NvbnRyb2xzJyB8ICdvdGhlcnMnID0gJ3JlZ3VsYXRpb25zJ1xyXG4gIHNlbGVjdGVkSWRzOiBhbnlbXSA9IFtdO1xyXG4gIGNhdGVnb3J5TGlzdDogYW55W10gPSBbXTtcclxuICBibG9ja1dpZHRoOiBhbnk7XHJcblxyXG4gIHByb2dyYW1UeXBlT2JqZWN0ID0ge1xyXG4gICAgcmVndWxhdGlvbnM6IDEsXHJcbiAgICBzdGFuZGFyZHM6IDIsXHJcbiAgICBpbnRlcm5hbF9jb250cm9sczogMyxcclxuICAgIG90aGVyczogMCxcclxuICB9XHJcblxyXG4gIGRpc3BsYXlDb25maXJtYXRpb25NZXNzYWdlOmJvb2xlYW49ZmFsc2VcclxuXHJcbiAgQE91dHB1dCgpIHNhdmVTZWxlY3RlZFByb2dyYW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgYWxsQ2F0ZWdvcmllczogYW55W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcclxuICAgIH0sIDMwMCk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW0gJiYgdGhpcy5zZWxlY3RlZFByb2dyYW1bMF0pIHtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtWzBdO1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFByb2dyYW0/LnByb2dyYW1UeXBlKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAnb3RoZXJzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ3JlZ3VsYXRpb25zJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ3N0YW5kYXJkcyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdpbnRlcm5hbF9jb250cm9scyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAncmVndWxhdGlvbnMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudCgpO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCAmJiB0aGlzLmN1cnJlbnRQcm9ncmFtKSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUNhdGVnb3JpZXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gXHJcbiAgICBpZiAodGhpcy5oaWRlUHJvZ3JhbXNMaXN0KSB7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgICB9XHJcbiBcclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcz17XHJcbiAgICAgIHByb2dyYW1zOiB0aGlzLmN1cnJlbnRQcm9ncmFtLFxyXG4gICAgICBjYXRlZ29yaWVzOih0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGgpPyAgWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZENhdGVnb3JpZXMpXTpbXSxcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIHBvcHVsYXRlQ2F0ZWdvcmllcygpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZCcsIHRoaXMuY3VycmVudFByb2dyYW0uX2lkKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2lzUGFnaW5hdGlvbicsIGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRQcm9ncmFtc0xpc3QocGFyYW1zKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBhbGxDYXRlZ29yaWVzID0gcmVzLmRhdGE7XHJcblxyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IGFsbENhdGVnb3JpZXMuZmlsdGVyKChlbGU6YW55KT0+dGhpcy5zZWxlY3RlZENhdGVnb3JpZXMuaW5jbHVkZXMoZWxlLmNhdGVnb3J5X2lkKSlcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goZWxlbWVudC5jYXRlZ29yeV9pZClcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgaGFuZGxlU2VhcmNoKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaFN0cmluZyAhPSBldmVudCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFN0cmluZyA9IGV2ZW50O1xyXG4gICAgICB0aGlzLmdldFByb2dyYW1zTGlzdCh7IHNlYXJjaDogdHJ1ZSB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBjYXRlZ29yeVNlYXJjaChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jYXRlZ29yeVNlYXJjaFN0cmluZyAhPSBldmVudCkge1xyXG4gICAgICB0aGlzLmNhdGVnb3J5U2VhcmNoU3RyaW5nID0gZXZlbnQ7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoeyBzZWFyY2g6IHRydWUgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdFByb2dyYW0oZXZlbnQ6IGFueSwgcHJvZ3JhbTogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsQ2F0ZWdvcmllcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW107XHJcbiAgICAgIGlmICh0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFBhZ2VzIDwgMikge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmRhdGEuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChlbGUuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnB1c2goZWxlKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkJywgdGhpcy5jdXJyZW50UHJvZ3JhbT8uX2lkKTtcclxuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdpc1BhZ2luYXRpb24nLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWxsQ2F0ZWdvcmllcyA9IHJlcy5kYXRhO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGFsbENhdGVnb3JpZXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGVsZW1lbnQuY2F0ZWdvcnlfaWQpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGNoZWNrQ2F0ZWdvcmllc1NlbGVjdGlvbigpIHtcclxuXHJcbiAgICBpZiAodGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmxlbmd0aCA9PSB0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFJlY29yZHMpIHtcclxuICAgICAgcmV0dXJuICdjaGVja2VkJztcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuICd1bmNoZWNrZWQnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdpbmRldGVybWluYXRlJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlbkNhdGVnb3JpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UHJvZ3JhbT8uY2hpbGRfaWQ/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiYWNrVG9Qcm9ncmFtcygpIHtcclxuICAgIGlmICghdGhpcy5oaWRlUHJvZ3JhbXNMaXN0KSB7XHJcbiAgICAgIHRoaXMuc2hvd0NhdGVnb3JpZXMgPSBmYWxzZTtcclxuICAgICAgaWYodGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5faWQgPT0gdGhpcy5jdXJyZW50UHJvZ3JhbSl7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gWy4uLm5ldyBTZXQodGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMpXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGNoYW5nZVRhYih0eXBlOiAncmVndWxhdGlvbnMnIHwgJ3N0YW5kYXJkcycgfCAnaW50ZXJuYWxfY29udHJvbHMnIHwgJ290aGVycycpIHtcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gdHlwZTtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcclxuICAgIHRoaXMuc2VhcmNoUHJvZ3JhbS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFnZShldmVudDogYW55LCB0eXBlOiAnY2F0ZWdvcnknIHwgJ3Byb2dyYW0nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncHJvZ3JhbSc6XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGdldFByb2dyYW1zTGlzdChwYXJhbXNPYmplY3Q/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbVR5cGUnLCB0aGlzLnByb2dyYW1UeXBlT2JqZWN0W3RoaXMuYWN0aXZlVGFiXSk7XHJcbiAgICBpZiAocGFyYW1zT2JqZWN0Py5zZWFyY2ggfHwgdGhpcy5zZWFyY2hTdHJpbmcpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoVGV4dCcsIHRoaXMuc2VhcmNoU3RyaW5nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2VObycsIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuZGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuZnJvbSA9IHJlcy5mcm9tO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEudG8gPSByZXMudG87XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50b3RhbFBhZ2VzID0gcmVzLnRvdGFsUGFnZXM7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50b3RhbFJlY29yZHMgPSByZXMudG90YWxSZWNvcmRzO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQgPSByZXMuQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxPdGhlcnNQcm9ncmFtc0NvdW50ID0gcmVzLkFsbE90aGVyc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldENhdGVnb3JpZXNMaXN0KHF1ZXJ5T2JqZWN0PzogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWQnLCB0aGlzLmN1cnJlbnRQcm9ncmFtPy5faWQpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnZU5vJywgdGhpcy5jYXRlZ29yeURhdGEuY3VycmVudFBhZ2UpO1xyXG4gICAgaWYgKHF1ZXJ5T2JqZWN0Py5zZWFyY2gpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoVGV4dCcsIHRoaXMuY2F0ZWdvcnlTZWFyY2hTdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5mcm9tID0gcmVzLmZyb207XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG8gPSByZXMudG87XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG90YWxQYWdlcyA9IHJlcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnRvdGFsUmVjb3JkcyA9IHJlcy50b3RhbFJlY29yZHM7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zaG93Q2F0ZWdvcmllcyA9IHRydWU7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHNhdmVQcm9ncmFtKCkge1xyXG5cclxuICB9XHJcblxyXG4gIHNlbGVjdENhdGVnb3J5KG1vZGU6IGFueSwgY2F0ZWdvcnk6IGFueSkge1xyXG4gICAgaWYgKG1vZGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGNhdGVnb3J5LmNhdGVnb3J5X2lkKTtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSWRzLmZpbmRJbmRleCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50ID09IGNhdGVnb3J5LmNhdGVnb3J5X2lkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5jYXRlZ29yeV9pZCA9PSBjYXRlZ29yeS5jYXRlZ29yeV9pZClcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnNwbGljZShjYXRlZ29yeUluZGV4LCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUNhdGVnb3JpZXMoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT0gZXZlbnQuY2F0ZWdvcnlfaWQpXHJcbiAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSWRzLmZpbmRJbmRleCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50ID09IGV2ZW50LmNhdGVnb3J5X2lkKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHNhdmUoKSB7XHJcbiAgICBpZighdGhpcy5oaWRlUHJvZ3JhbXNMaXN0KXtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZT10cnVlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHsgcHJvZ3JhbTogdGhpcy5jdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogdGhpcy5zZWxlY3RlZElkcyB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDaGFuZ2VzKHZhbHVlOmJvb2xlYW4pe1xyXG4gICAgaWYodmFsdWUpe1xyXG4gICAgICB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7IHByb2dyYW06IHRoaXMuY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6IHRoaXMuc2VsZWN0ZWRJZHMgfSk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZT1mYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZUV2ZW50KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IFtdO1xyXG4gICAgLy9BcyB0aGlzIGlzIGEgcmFkaW8gbGlzdCBhbmQgb25seSBvbmUgaXRlbSBjYW4gYmUgc2VsZWN0ZWQgdGhhdHMgd2h5IHdlIGFyZSByZXNldHRpbmcgYWxsIHRoZSBjb3VudHMgdG8gemVyb1xyXG4gICAgdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50ID0gMDtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50ID0gMDtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCA9IDA7XHJcbiAgICB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkU3RhbmRhcmRQcm9ncmFtc0NvdW50ID0gMDtcclxuICB9XHJcblxyXG4gIFxyXG5cclxuICBnZXRTZWxlY3RlZFByb2dyYW1Db3VudCgpIHtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudCA9IDA7XHJcbiAgICB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudCA9IDA7XHJcbiAgICB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQgPSAwO1xyXG4gICAgdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudCA9IDA7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFByb2dyYW0ucHJvZ3JhbVR5cGUpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50Kys7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQrKztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRTdGFuZGFyZFByb2dyYW1zQ291bnQrKztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudCsrO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|