kwikid-forms 0.1.10 → 0.1.11
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/kwikid-forms.umd.js +502 -336
- package/bundles/kwikid-forms.umd.js.map +1 -1
- package/esm2015/lib/kwikid-forms.module.js +3 -5
- package/esm2015/lib/renderer/form-view/form-view.component.js +16 -6
- package/esm2015/lib/renderer/forms-list/forms-list.component.js +15 -2
- package/esm2015/lib/renderer/renderer.actions.definitions.js +9 -0
- package/esm2015/lib/renderer/renderer.component.js +331 -97
- package/esm2015/lib/renderer/renderer.helper.js +9 -0
- package/fesm2015/kwikid-forms.js +372 -263
- package/fesm2015/kwikid-forms.js.map +1 -1
- package/lib/renderer/form-view/form-view.component.d.ts +1 -2
- package/lib/renderer/renderer.actions.definitions.d.ts +50 -0
- package/lib/renderer/renderer.component.d.ts +71 -10
- package/lib/renderer/renderer.helper.d.ts +1 -0
- package/package.json +1 -1
- package/esm2015/lib/renderer/renderer.service.js +0 -169
- package/lib/renderer/renderer.service.d.ts +0 -28
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { __awaiter, __decorate } from "tslib";
|
|
2
2
|
import { animate, style, transition, trigger } from "@angular/animations";
|
|
3
3
|
import { Component, EventEmitter, HostListener, Input, Output } from "@angular/core";
|
|
4
|
-
import { checkObjectKeyExists, logMethod, Source, Validation } from "kwikid-toolkit";
|
|
4
|
+
import { Action, checkObjectKeyExists, Condition, isNotEmptyValue, logMethod, Rule, setValueToObjectPath, Source, Validation } from "kwikid-toolkit";
|
|
5
|
+
import * as cloneDeep from "lodash/cloneDeep";
|
|
5
6
|
import { EActionKey } from "./form-view/definitions/form-view.actions.definition";
|
|
7
|
+
import { ERendererActionKey } from "./renderer.actions.definitions";
|
|
6
8
|
import { Converter } from "./renderer.config-converter.helper";
|
|
7
|
-
import {
|
|
9
|
+
import { getFormConfigByKey } from "./renderer.helper";
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "./
|
|
10
|
-
import * as i2 from "./
|
|
11
|
-
import * as i3 from "
|
|
12
|
-
import * as i4 from "@taiga-ui/
|
|
13
|
-
import * as i5 from "@
|
|
14
|
-
import * as i6 from "@angular/common";
|
|
11
|
+
import * as i1 from "./forms-list/forms-list.component";
|
|
12
|
+
import * as i2 from "./form-view/form-view.component";
|
|
13
|
+
import * as i3 from "@taiga-ui/kit";
|
|
14
|
+
import * as i4 from "@taiga-ui/core";
|
|
15
|
+
import * as i5 from "@angular/common";
|
|
15
16
|
export class KwikIDFormsRendererComponent {
|
|
16
|
-
constructor(
|
|
17
|
-
this.rendererService = rendererService;
|
|
17
|
+
constructor(hostElement, cdr) {
|
|
18
18
|
this.hostElement = hostElement;
|
|
19
|
+
this.cdr = cdr;
|
|
19
20
|
this.formsData = {};
|
|
20
21
|
this.apiCallResponse = {};
|
|
21
22
|
this.onClickSubmit = new EventEmitter();
|
|
@@ -23,11 +24,14 @@ export class KwikIDFormsRendererComponent {
|
|
|
23
24
|
this.onClickApiCall = new EventEmitter();
|
|
24
25
|
this.loading = false;
|
|
25
26
|
this.loader = false;
|
|
27
|
+
this.showErrorNotification = false;
|
|
28
|
+
this.allFormsData = {};
|
|
29
|
+
this.formsList = [];
|
|
30
|
+
this.isMobileView = false;
|
|
26
31
|
// display forms and list conditionally
|
|
27
32
|
this.showForm = false;
|
|
28
33
|
this.showFormFields = true;
|
|
29
34
|
this.showFormSections = true;
|
|
30
|
-
this.showErrorNotification = false;
|
|
31
35
|
}
|
|
32
36
|
// The final value should be provided to service, so that it can be used in all components
|
|
33
37
|
windowResizeWatcher() {
|
|
@@ -40,7 +44,7 @@ export class KwikIDFormsRendererComponent {
|
|
|
40
44
|
this.showFormSections = true;
|
|
41
45
|
this.showFormFields = false;
|
|
42
46
|
}
|
|
43
|
-
this.
|
|
47
|
+
this.isMobileView = true;
|
|
44
48
|
}
|
|
45
49
|
else {
|
|
46
50
|
if (this.showForm) {
|
|
@@ -51,9 +55,12 @@ export class KwikIDFormsRendererComponent {
|
|
|
51
55
|
this.showFormSections = true;
|
|
52
56
|
this.showFormFields = false;
|
|
53
57
|
}
|
|
54
|
-
this.
|
|
58
|
+
this.isMobileView = false;
|
|
55
59
|
}
|
|
56
60
|
}
|
|
61
|
+
toggleErrorNotification(show) {
|
|
62
|
+
this.showErrorNotification = show;
|
|
63
|
+
}
|
|
57
64
|
ngOnInit() {
|
|
58
65
|
var _a, _b, _c;
|
|
59
66
|
this.loader = true;
|
|
@@ -61,10 +68,10 @@ export class KwikIDFormsRendererComponent {
|
|
|
61
68
|
const formStepKey = (_c = (_b = (_a = this.stepConfig) === null || _a === void 0 ? void 0 : _a.form) === null || _b === void 0 ? void 0 : _b.key) !== null && _c !== void 0 ? _c : undefined;
|
|
62
69
|
if (formStepKey !== undefined &&
|
|
63
70
|
checkObjectKeyExists(this.userConfig.userFormFields, formStepKey)) {
|
|
64
|
-
this.
|
|
71
|
+
this.formsList = this.userConfig.userFormFields[formStepKey];
|
|
65
72
|
}
|
|
66
73
|
else if (Array.isArray(this.userConfig.userFormFields)) {
|
|
67
|
-
this.
|
|
74
|
+
this.formsList = this.userConfig.userFormFields;
|
|
68
75
|
}
|
|
69
76
|
else {
|
|
70
77
|
throw new Error(`userFormFields doesn't have a form defined with key: ${formStepKey}`);
|
|
@@ -89,15 +96,26 @@ export class KwikIDFormsRendererComponent {
|
|
|
89
96
|
this.loader = false;
|
|
90
97
|
}
|
|
91
98
|
}
|
|
99
|
+
fetchFormConfig(url) {
|
|
100
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
101
|
+
const response = yield fetch(url, { method: "GET" });
|
|
102
|
+
const data = yield response.json();
|
|
103
|
+
return data;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
92
106
|
initializeForms() {
|
|
93
107
|
return __awaiter(this, void 0, void 0, function* () {
|
|
94
108
|
this.loader = true;
|
|
95
|
-
this.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
109
|
+
this.allFormsData = this.formsData;
|
|
110
|
+
console.log("START");
|
|
111
|
+
console.log(JSON.parse(JSON.stringify(this.formsList)));
|
|
112
|
+
yield this.updateFormsList();
|
|
113
|
+
console.log("END");
|
|
114
|
+
console.log(JSON.parse(JSON.stringify(this.formsList)));
|
|
115
|
+
this.handleResize(this.formsList);
|
|
116
|
+
console.log(JSON.stringify(this.activeFormConfig), this.formsListCompleted);
|
|
117
|
+
if (isNotEmptyValue(this.activeFormConfig)) {
|
|
118
|
+
yield this.handleOnClickSetActiveForm(this.activeFormConfig.key);
|
|
101
119
|
}
|
|
102
120
|
else {
|
|
103
121
|
this.showForm = false;
|
|
@@ -107,43 +125,221 @@ export class KwikIDFormsRendererComponent {
|
|
|
107
125
|
this.loading = false;
|
|
108
126
|
});
|
|
109
127
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
128
|
+
/**
|
|
129
|
+
* NOTE: To be deprecated.
|
|
130
|
+
* Why ? Will be directly assigned while executing 'chakra' for default form config.
|
|
131
|
+
* @param formsList any[]
|
|
132
|
+
* @param formsListCompleted string[]
|
|
133
|
+
* @returns any[]
|
|
134
|
+
*/
|
|
135
|
+
assignSequenceNoToForm(formsList) {
|
|
136
|
+
let sequenceNo = 1;
|
|
137
|
+
for (let form of formsList) {
|
|
138
|
+
if (checkObjectKeyExists(form, "hidden")) {
|
|
139
|
+
if (!form.hidden) {
|
|
140
|
+
form.sequenceNo = sequenceNo++;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
delete form["sequenceNo"];
|
|
144
|
+
}
|
|
119
145
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
146
|
+
}
|
|
147
|
+
return formsList;
|
|
148
|
+
}
|
|
149
|
+
findCompletedFormsList(allFormsData) {
|
|
150
|
+
let formsListCompleted = [];
|
|
151
|
+
Object.keys(allFormsData).map((formKey) => {
|
|
152
|
+
formsListCompleted.push(formKey);
|
|
153
|
+
});
|
|
154
|
+
return formsListCompleted;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* NOTE: To be deprecated. Why ? Will be replaced by 'chakra'.
|
|
158
|
+
* @param formsList any[]
|
|
159
|
+
* @param formsListCompleted string[]
|
|
160
|
+
* @returns any[]
|
|
161
|
+
*/
|
|
162
|
+
markFormInFormsListAsCompleted(formsList, formsListCompleted) {
|
|
163
|
+
for (let form of formsList) {
|
|
164
|
+
if (checkObjectKeyExists(form, "hidden")) {
|
|
165
|
+
if (!form.hidden) {
|
|
166
|
+
if (formsListCompleted.includes(form.key)) {
|
|
167
|
+
form = setValueToObjectPath(form, "status", "completed");
|
|
168
|
+
form = setValueToObjectPath(form, "disabled", false);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
124
171
|
}
|
|
125
|
-
this.rendererService.isMobileView = true;
|
|
126
172
|
}
|
|
127
|
-
|
|
128
|
-
|
|
173
|
+
return formsList;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* NOTE: To be deprecated. Why ? Will be replaced by 'chakra'.
|
|
177
|
+
* @param formsList any[]
|
|
178
|
+
* @param formsListCompleted string[]
|
|
179
|
+
* @returns any[]
|
|
180
|
+
*/
|
|
181
|
+
markFormInFormsListAsDisabled(formsList, formsListCompleted) {
|
|
182
|
+
for (let form of formsList) {
|
|
183
|
+
if (checkObjectKeyExists(form, "hidden")) {
|
|
184
|
+
if (!form.hidden) {
|
|
185
|
+
if (form.status !== "completed") {
|
|
186
|
+
if (checkObjectKeyExists(form, "dependentOn")) {
|
|
187
|
+
const isDependent = form.dependentOn.every((r) => formsListCompleted.includes(r));
|
|
188
|
+
if (isDependent) {
|
|
189
|
+
form = setValueToObjectPath(form, "status", "editable");
|
|
190
|
+
form = setValueToObjectPath(form, "disabled", false);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
form = setValueToObjectPath(form, "status", "locked");
|
|
194
|
+
form = setValueToObjectPath(form, "disabled", true);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
form = setValueToObjectPath(form, "dependentOn", []);
|
|
199
|
+
form = setValueToObjectPath(form, "status", "editable");
|
|
200
|
+
form = setValueToObjectPath(form, "disabled", false);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return formsList;
|
|
207
|
+
}
|
|
208
|
+
filterAllFormsData(allFormsData, formsList) {
|
|
209
|
+
let currentUserFormAllFormsData = {};
|
|
210
|
+
for (let form of formsList) {
|
|
211
|
+
if (checkObjectKeyExists(form, "hidden") && !form.hidden) {
|
|
212
|
+
if (checkObjectKeyExists(allFormsData, form.key)) {
|
|
213
|
+
currentUserFormAllFormsData = Object.assign(Object.assign({}, currentUserFormAllFormsData), { [form.key]: allFormsData[form.key] });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return currentUserFormAllFormsData;
|
|
218
|
+
}
|
|
219
|
+
checkIfFormsStatusCompleted(formsList, formsListCompleted) {
|
|
220
|
+
let allFormsCompleted = true;
|
|
221
|
+
for (const form of formsList) {
|
|
222
|
+
if (checkObjectKeyExists(form, "hidden")) {
|
|
223
|
+
if (!form.hidden) {
|
|
224
|
+
if (form.status !== "completed") {
|
|
225
|
+
allFormsCompleted = false;
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
129
230
|
}
|
|
231
|
+
return allFormsCompleted;
|
|
130
232
|
}
|
|
131
|
-
|
|
233
|
+
findActiveFormConfig(formsList) {
|
|
234
|
+
const activeFormConfig = formsList.find((form) => {
|
|
235
|
+
if (checkObjectKeyExists(form, "hidden")) {
|
|
236
|
+
if (!form.hidden) {
|
|
237
|
+
return form.status === "editable" && !form.disabled;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
return activeFormConfig;
|
|
242
|
+
}
|
|
243
|
+
updateFormsList() {
|
|
244
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
245
|
+
for (let form of this.formsList) {
|
|
246
|
+
if (checkObjectKeyExists(form, "default") &&
|
|
247
|
+
isNotEmptyValue(form.default)) {
|
|
248
|
+
const triggers = form.default.triggers;
|
|
249
|
+
const rules = form.default.rules;
|
|
250
|
+
const actions = form.default.actions;
|
|
251
|
+
const rulesMapping = new Rule(rules, {
|
|
252
|
+
USER_CONFIG: this.userConfig,
|
|
253
|
+
FORMS_LIST: this.formsList,
|
|
254
|
+
ALL_FORMS_DATA: this.allFormsData
|
|
255
|
+
}).mapping();
|
|
256
|
+
for (let action of actions) {
|
|
257
|
+
const conditionEvaluation = new Condition(action.condition, rulesMapping).evaluate();
|
|
258
|
+
if (conditionEvaluation) {
|
|
259
|
+
const actions = new Action(action, rulesMapping, {
|
|
260
|
+
FORMS_LIST: this.formsList,
|
|
261
|
+
ALL_FORMS_DATA: this.allFormsData
|
|
262
|
+
}, this.takeAction.bind(this));
|
|
263
|
+
yield actions.execute();
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
if (!checkObjectKeyExists(form, "hidden")) {
|
|
269
|
+
form.hidden = false;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
this.formsList = this.assignSequenceNoToForm(this.formsList);
|
|
274
|
+
/**
|
|
275
|
+
* Below code identifies the allFormsData required for the current User Form.
|
|
276
|
+
* Why? Because allFormsData will actually contain the whole journey's all
|
|
277
|
+
* possible User Form steps. So, it is important to set the form data which
|
|
278
|
+
* this particular User Form only has to LOCAL METHOD Variable.
|
|
279
|
+
*/
|
|
280
|
+
const currentUserFormAllFormsData = this.filterAllFormsData(this.allFormsData, this.formsList);
|
|
281
|
+
this.formsListCompleted = this.findCompletedFormsList(currentUserFormAllFormsData);
|
|
282
|
+
this.formsList = this.markFormInFormsListAsCompleted(this.formsList, this.formsListCompleted);
|
|
283
|
+
this.formsList = this.markFormInFormsListAsDisabled(this.formsList, this.formsListCompleted);
|
|
284
|
+
this.formsList = cloneDeep(this.formsList);
|
|
285
|
+
if (this.checkIfFormsStatusCompleted(this.formsList, this.formsListCompleted)) {
|
|
286
|
+
this.activeFormConfig = this.findActiveFormConfig(this.formsList);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
formHide(formKey) {
|
|
291
|
+
let form = getFormConfigByKey(this.formsList, formKey);
|
|
292
|
+
form = setValueToObjectPath(form, "hidden", true);
|
|
293
|
+
}
|
|
294
|
+
formShow(formKey) {
|
|
295
|
+
let form = getFormConfigByKey(this.formsList, formKey);
|
|
296
|
+
form = setValueToObjectPath(form, "hidden", false);
|
|
297
|
+
}
|
|
298
|
+
takeAction(action, object) {
|
|
299
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
300
|
+
switch (action.key) {
|
|
301
|
+
case ERendererActionKey.FORM_HIDE:
|
|
302
|
+
this.formHide(action.props.formKey);
|
|
303
|
+
break;
|
|
304
|
+
case ERendererActionKey.FORM_SHOW:
|
|
305
|
+
this.formShow(action.props.formKey);
|
|
306
|
+
break;
|
|
307
|
+
case EActionKey.SET_VALUE:
|
|
308
|
+
const sources = new Source({
|
|
309
|
+
USER_CONFIG: this.userConfig,
|
|
310
|
+
ALL_FORMS_DATA: this.formsData
|
|
311
|
+
});
|
|
312
|
+
const sourceValue = yield sources.getValueFromSource(action.props.value.source);
|
|
313
|
+
sources.setValueToSource(action.props.value.destination, sourceValue);
|
|
314
|
+
this.userConfig = sources.object.USER_CONFIG;
|
|
315
|
+
this.formsData = sources.object.ALL_FORMS_DATA;
|
|
316
|
+
break;
|
|
317
|
+
default:
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Library Event Listeners
|
|
324
|
+
*/
|
|
325
|
+
/**
|
|
326
|
+
* FormList - Listens to event of opening the FormView of when any form is clicked in FormList
|
|
327
|
+
* @param selectedForm string
|
|
328
|
+
*/
|
|
132
329
|
handleOnClickSetActiveForm(selectedForm) {
|
|
133
330
|
var _a;
|
|
134
331
|
return __awaiter(this, void 0, void 0, function* () {
|
|
135
332
|
this.showForm = false;
|
|
136
333
|
this.loader = true;
|
|
137
|
-
const activeFormConfig = this.
|
|
334
|
+
const activeFormConfig = this.formsList.find((form) => {
|
|
138
335
|
if (form.key === selectedForm) {
|
|
139
336
|
return form;
|
|
140
337
|
}
|
|
141
338
|
});
|
|
142
|
-
let formConfig = yield this.
|
|
339
|
+
let formConfig = yield this.fetchFormConfig(activeFormConfig.formContent.url);
|
|
143
340
|
formConfig = new Converter().convertFormConfig(formConfig);
|
|
144
|
-
const activeFormData = (_a = this.
|
|
145
|
-
this.
|
|
146
|
-
this.rendererService.setActiveFormConfig(Object.assign(Object.assign({}, activeFormConfig), formConfig));
|
|
341
|
+
const activeFormData = (_a = this.allFormsData[formConfig.key]) !== null && _a !== void 0 ? _a : {};
|
|
342
|
+
this.activeFormConfig = Object.assign(Object.assign({}, activeFormConfig), formConfig);
|
|
147
343
|
if (this.hostElement.nativeElement.offsetWidth < 600) {
|
|
148
344
|
this.showFormSections = false;
|
|
149
345
|
this.showFormFields = true;
|
|
@@ -156,11 +352,43 @@ export class KwikIDFormsRendererComponent {
|
|
|
156
352
|
this.loader = false;
|
|
157
353
|
});
|
|
158
354
|
}
|
|
159
|
-
|
|
355
|
+
/**
|
|
356
|
+
* FormView - Listens to event of executing an API call from within the FormView and emits (read as passes) the same event to the library consumer.
|
|
357
|
+
* @param e any
|
|
358
|
+
*/
|
|
359
|
+
handleOnClickApiCall(e) {
|
|
360
|
+
this.loader = true;
|
|
361
|
+
this.onClickApiCall.emit(e);
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* FormView - Listens to event of getting the Active Form's Data when the Form is Saved and emits (read as passes) the same event to the library consumer.
|
|
365
|
+
* @param e any
|
|
366
|
+
*/
|
|
367
|
+
handleOnClickSaveForm(e) {
|
|
368
|
+
this.loader = true;
|
|
369
|
+
this.activeFormData = {};
|
|
370
|
+
this.getFormData.emit({
|
|
371
|
+
[this.activeFormConfig.key]: e["data"]
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* FormView - Listens to event of showing the Forms List in Mobile View.
|
|
376
|
+
* @param e any
|
|
377
|
+
*/
|
|
378
|
+
handleOnClickViewForms(e) {
|
|
379
|
+
this.showFormSections = true;
|
|
380
|
+
this.showForm = false;
|
|
381
|
+
this.showFormFields = false;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* FormList - Listens to event of submitting all the forms and moving out of the library and also handles the validation of all the forms.
|
|
385
|
+
* @param e any
|
|
386
|
+
*/
|
|
160
387
|
handleOnClickSubmitForms(e) {
|
|
161
388
|
if (this.userConfig.userFormFieldsConfig.validation) {
|
|
389
|
+
console.log(JSON.parse(JSON.stringify(this.userConfig)));
|
|
162
390
|
const validations = new Validation({
|
|
163
|
-
|
|
391
|
+
FORMS_LIST: this.formsList,
|
|
164
392
|
ALL_FORMS_DATA: this.formsData
|
|
165
393
|
}, this.takeAction.bind(this));
|
|
166
394
|
(() => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -177,56 +405,33 @@ export class KwikIDFormsRendererComponent {
|
|
|
177
405
|
}))();
|
|
178
406
|
}
|
|
179
407
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
// form-view listener
|
|
193
|
-
handleOnClickSaveForm(e) {
|
|
194
|
-
this.loader = true;
|
|
195
|
-
this.rendererService.setActiveFormData({});
|
|
196
|
-
this.getFormData.emit({
|
|
197
|
-
[this.rendererService.activeFormConfig.key]: e["data"]
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
// form-view listener
|
|
201
|
-
handleOnClickViewForms(e) {
|
|
202
|
-
this.showFormSections = true;
|
|
203
|
-
this.showForm = false;
|
|
204
|
-
this.showFormFields = false;
|
|
205
|
-
}
|
|
206
|
-
toggleErrorNotification(show) {
|
|
207
|
-
this.showErrorNotification = show;
|
|
208
|
-
}
|
|
209
|
-
takeAction(action, userConfig, formsData) {
|
|
210
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
211
|
-
switch (action.key) {
|
|
212
|
-
case EActionKey.SET_VALUE:
|
|
213
|
-
const sources = new Source({
|
|
214
|
-
USER_CONFIG: this.userConfig,
|
|
215
|
-
ALL_FORMS_DATA: this.formsData
|
|
216
|
-
});
|
|
217
|
-
const sourceValue = yield sources.getValueFromSource(action.props.value.source);
|
|
218
|
-
sources.setValueToSource(action.props.value.destination, sourceValue);
|
|
219
|
-
this.userConfig = sources.object.USER_CONFIG;
|
|
220
|
-
this.formsData = sources.object.ALL_FORMS_DATA;
|
|
221
|
-
break;
|
|
222
|
-
default:
|
|
223
|
-
break;
|
|
408
|
+
/**
|
|
409
|
+
* Miscellaneous Methods
|
|
410
|
+
*/
|
|
411
|
+
handleResize(formsList) {
|
|
412
|
+
if (this.hostElement.nativeElement.offsetWidth < 600) {
|
|
413
|
+
const isSingleForm = (formsList) => {
|
|
414
|
+
return formsList.length === 1;
|
|
415
|
+
};
|
|
416
|
+
if (!isSingleForm(formsList)) {
|
|
417
|
+
this.showFormSections = true;
|
|
418
|
+
this.showFormFields = false;
|
|
419
|
+
this.showForm = false;
|
|
224
420
|
}
|
|
225
|
-
|
|
421
|
+
else {
|
|
422
|
+
this.showFormSections = true;
|
|
423
|
+
this.showFormFields = false;
|
|
424
|
+
this.showForm = false;
|
|
425
|
+
}
|
|
426
|
+
this.isMobileView = true;
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
this.isMobileView = false;
|
|
430
|
+
}
|
|
226
431
|
}
|
|
227
432
|
}
|
|
228
|
-
/** @nocollapse */ KwikIDFormsRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDFormsRendererComponent, deps: [{ token:
|
|
229
|
-
/** @nocollapse */ KwikIDFormsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormsRendererComponent, selector: "kwikid-forms-renderer", inputs: { stepConfig: "stepConfig", userConfig: "userConfig", formsData: "formsData", apiCallResponse: "apiCallResponse" }, outputs: { onClickSubmit: "onClickSubmit", getFormData: "getFormData", onClickApiCall: "onClickApiCall" }, host: { listeners: { "window:resize": "windowResizeWatcher($event)" } },
|
|
433
|
+
/** @nocollapse */ KwikIDFormsRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDFormsRendererComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
434
|
+
/** @nocollapse */ KwikIDFormsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormsRendererComponent, selector: "kwikid-forms-renderer", inputs: { stepConfig: "stepConfig", userConfig: "userConfig", formsData: "formsData", apiCallResponse: "apiCallResponse" }, outputs: { onClickSubmit: "onClickSubmit", getFormData: "getFormData", onClickApiCall: "onClickApiCall" }, host: { listeners: { "window:resize": "windowResizeWatcher($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div ngClass=\"kwikid-renderer\">\n <div\n ngClass=\"kwikid-layout-container\"\n *ngIf=\"!loading\"\n >\n <div\n ngClass=\"kwikid-sections-container\"\n *ngIf=\"showFormSections\"\n class=\"active\"\n [class.active]=\"showFormSections\"\n [class.mobile]=\"isMobileView\"\n >\n <kwikid-forms-list\n [showFormFields]=\"this.showFormFields\"\n [userConfig]=\"this.userConfig\"\n [formsList]=\"this.formsList\"\n [formsListCompleted]=\"this.formsListCompleted\"\n [isMobileView]=\"this.isMobileView\"\n (onClickSetActiveForm)=\"this.handleOnClickSetActiveForm($event)\"\n (onClickSubmitForms)=\"this.handleOnClickSubmitForms($event)\"\n ></kwikid-forms-list>\n </div>\n <div\n ngClass=\"kwikid-forms-container\"\n *ngIf=\"this.showForm && this.showFormFields\"\n [class.active]=\"showFormFields\"\n [class.mobile]=\"isMobileView\"\n [@panelInOut]\n >\n <kwikid-form-view\n [formConfig]=\"this.activeFormConfig\"\n [formData]=\"this.activeFormData\"\n [apiCallResponse]=\"this.apiCallResponse\"\n [formsList]=\"this.formsList\"\n [allFormsData]=\"this.allFormsData\"\n [isMobileView]=\"this.isMobileView\"\n (onClickApiCall)=\"this.handleOnClickApiCall($event)\"\n (onClickViewForms)=\"this.handleOnClickViewForms($event)\"\n (onClickSaveForm)=\"this.handleOnClickSaveForm($event)\"\n ></kwikid-form-view>\n </div>\n </div>\n</div>\n<div\n ngClass=\"kwikid-forms-renderer-loader\"\n *ngIf=\"loader\"\n>\n <span class=\"loader\"></span>\n</div>\n<tui-push\n id=\"error-notification\"\n *tuiPush=\"showErrorNotification\"\n heading=\"Please complete the required Forms!\"\n type=\"Error\"\n (close)=\"toggleErrorNotification(false)\"\n>\n <tui-svg\n src=\"tuiIconCancel\"\n style=\"color: #fff !important\"\n >\n </tui-svg>\n</tui-push>\n", styles: [":host{position:relative}.kwikid-root{width:100%;height:100%}.kwikid-renderer{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;width:100%;height:100%}.kwikid-layout-container{display:flex;flex-direction:row;padding:0 1rem;height:100%;justify-content:center;align-items:stretch;background:var(--tui-secondary);position:relative}.kwikid-sections-container{display:block;width:100%;max-width:400px;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);margin:auto 1rem auto 0;box-shadow:0 0 12px -8px var(--tui-primary)}.kwikid-sections-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s;height:100%;border-radius:0;max-width:unset}.kwikid-forms-container{display:block;width:100%;max-width:50%;margin:auto 0;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);box-shadow:0 0 12px -8px var(--tui-primary)}.kwikid-forms-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s;height:100%;border-radius:0;max-width:unset}@media screen and (max-width: 600px){.kwikid-layout-container{padding:0;background:transparent}.kwikid-sections-container{position:absolute;max-width:100%;bottom:-10000px;left:-10000px;opacity:0;padding:0;visibility:hidden}.kwikid-sections-container.active{visibility:visible}.kwikid-sections-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container{display:none;max-width:100%;height:100%;padding:0;border-radius:0;box-shadow:none}.kwikid-forms-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container.active{display:block}}.kwikid-forms-renderer-loader{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.75);display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;z-index:100}.kwikid-forms-renderer-loader .loader{width:48px;height:48px;border-radius:50%;display:inline-block;position:relative;border:3px solid;border-color:#fff #fff transparent;box-sizing:border-box;animation:rotation 1s linear infinite}.kwikid-forms-renderer-loader .loader:after{content:\"\";box-sizing:border-box;position:absolute;left:0;right:0;top:0;bottom:0;margin:auto;border:3px solid;border-color:transparent var(--tui-primary) var(--tui-primary);width:24px;height:24px;border-radius:50%;animation:rotationBack .5s linear infinite;transform-origin:center center}@keyframes rotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotationBack{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}.kwikid-forms-renderer-loader .t-loader{display:none!important}#error-notification{background-color:var(--tui-error-fill);color:#fff!important}#error-notification .t-top{color:#fff!important}#error-notification .t-close{color:#fff!important}\n"], components: [{ type: i1.KwikIDFormsListComponent, selector: "kwikid-forms-list", inputs: ["showFormFields", "userConfig", "formsList", "formsListCompleted", "isMobileView"], outputs: ["onClickSetActiveForm", "onClickHideFormsList", "onClickSubmitForms"] }, { type: i2.KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: ["formConfig", "formData", "apiCallResponse", "isMobileView", "allFormsData", "formsList"], outputs: ["onClickViewForms", "onClickSaveForm", "onClickApiCall"] }, { type: i3.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "timestamp"], outputs: ["close"] }, { type: i4.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }], directives: [{ type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.TuiPushAlertDirective, selector: "[tuiPush]", inputs: ["tuiPush"] }, { type: i3.TuiPushDirective, selector: "tui-push" }], animations: [
|
|
230
435
|
trigger("panelInOut", [
|
|
231
436
|
transition(":enter", [
|
|
232
437
|
style({ transform: "translateY(100%)" }),
|
|
@@ -237,6 +442,36 @@ export class KwikIDFormsRendererComponent {
|
|
|
237
442
|
])
|
|
238
443
|
])
|
|
239
444
|
] });
|
|
445
|
+
__decorate([
|
|
446
|
+
logMethod
|
|
447
|
+
], KwikIDFormsRendererComponent.prototype, "assignSequenceNoToForm", null);
|
|
448
|
+
__decorate([
|
|
449
|
+
logMethod
|
|
450
|
+
], KwikIDFormsRendererComponent.prototype, "findCompletedFormsList", null);
|
|
451
|
+
__decorate([
|
|
452
|
+
logMethod
|
|
453
|
+
], KwikIDFormsRendererComponent.prototype, "markFormInFormsListAsCompleted", null);
|
|
454
|
+
__decorate([
|
|
455
|
+
logMethod
|
|
456
|
+
], KwikIDFormsRendererComponent.prototype, "markFormInFormsListAsDisabled", null);
|
|
457
|
+
__decorate([
|
|
458
|
+
logMethod
|
|
459
|
+
], KwikIDFormsRendererComponent.prototype, "filterAllFormsData", null);
|
|
460
|
+
__decorate([
|
|
461
|
+
logMethod
|
|
462
|
+
], KwikIDFormsRendererComponent.prototype, "checkIfFormsStatusCompleted", null);
|
|
463
|
+
__decorate([
|
|
464
|
+
logMethod
|
|
465
|
+
], KwikIDFormsRendererComponent.prototype, "findActiveFormConfig", null);
|
|
466
|
+
__decorate([
|
|
467
|
+
logMethod
|
|
468
|
+
], KwikIDFormsRendererComponent.prototype, "updateFormsList", null);
|
|
469
|
+
__decorate([
|
|
470
|
+
logMethod
|
|
471
|
+
], KwikIDFormsRendererComponent.prototype, "formHide", null);
|
|
472
|
+
__decorate([
|
|
473
|
+
logMethod
|
|
474
|
+
], KwikIDFormsRendererComponent.prototype, "formShow", null);
|
|
240
475
|
__decorate([
|
|
241
476
|
logMethod
|
|
242
477
|
], KwikIDFormsRendererComponent.prototype, "handleOnClickSetActiveForm", null);
|
|
@@ -259,10 +494,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
259
494
|
animate(100, style({ transform: "translateY(100%)" }))
|
|
260
495
|
])
|
|
261
496
|
])
|
|
262
|
-
]
|
|
263
|
-
providers: [KwikIDRendererService]
|
|
497
|
+
]
|
|
264
498
|
}]
|
|
265
|
-
}], ctorParameters: function () { return [{ type:
|
|
499
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { windowResizeWatcher: [{
|
|
266
500
|
type: HostListener,
|
|
267
501
|
args: ["window:resize", ["$event"]]
|
|
268
502
|
}], stepConfig: [{
|
|
@@ -279,5 +513,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
279
513
|
type: Output
|
|
280
514
|
}], onClickApiCall: [{
|
|
281
515
|
type: Output
|
|
282
|
-
}], handleOnClickSetActiveForm: [], handleOnClickSubmitForms: [] } });
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxNQUFNLEVBQ04sVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7QUFtQjNELE1BQU0sT0FBTyw0QkFBNEI7SUFzRHZDLFlBQ1MsZUFBc0MsRUFDckMsV0FBdUI7UUFEeEIsb0JBQWUsR0FBZixlQUFlLENBQXVCO1FBQ3JDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBeEJqQyxjQUFTLEdBQVEsRUFBRSxDQUFDO1FBR3BCLG9CQUFlLEdBQVEsRUFBRSxDQUFDO1FBRzFCLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFHM0QsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUd6RCxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FB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YUFBYTtzQkFEWixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU07Z0JBMkdELDBCQUEwQixNQXVDaEMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBsb2dNZXRob2QsXG4gIFNvdXJjZSxcbiAgVmFsaWRhdGlvblxufSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcbmltcG9ydCB7IEVBY3Rpb25LZXkgfSBmcm9tIFwiLi9mb3JtLXZpZXcvZGVmaW5pdGlvbnMvZm9ybS12aWV3LmFjdGlvbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgQ29udmVydGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIuY29uZmlnLWNvbnZlcnRlci5oZWxwZXJcIjtcbmltcG9ydCB7IEt3aWtJRFJlbmRlcmVyU2VydmljZSB9IGZyb20gXCIuL3JlbmRlcmVyLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImt3aWtpZC1mb3Jtcy1yZW5kZXJlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3JlbmRlcmVyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9yZW5kZXJlci5jb21wb25lbnQuc2Nzc1wiXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoXCJwYW5lbEluT3V0XCIsIFtcbiAgICAgIHRyYW5zaXRpb24oXCI6ZW50ZXJcIiwgW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVZKDEwMCUpXCIgfSksXG4gICAgICAgIGFuaW1hdGUoMTUwKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKFwiOmxlYXZlXCIsIFtcbiAgICAgICAgYW5pbWF0ZSgxMDAsIHN0eWxlKHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZVkoMTAwJSlcIiB9KSlcbiAgICAgIF0pXG4gICAgXSlcbiAgXSxcbiAgcHJvdmlkZXJzOiBbS3dpa0lEUmVuZGVyZXJTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBLd2lrSURGb3Jtc1JlbmRlcmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvLyBUaGUgZmluYWwgdmFsdWUgc2hvdWxkIGJlIHByb3ZpZGVkIHRvIHNlcnZpY2UsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gYWxsIGNvbXBvbmVudHNcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIiwgW1wiJGV2ZW50XCJdKVxuICB3aW5kb3dSZXNpemVXYXRjaGVyKCkge1xuICAgIGlmICh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPCA2MDApIHtcbiAgICAgIGlmICh0aGlzLnNob3dGb3JtKSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVuZGVyZXJTZXJ2aWNlLmlzTW9iaWxlVmlldyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNob3dGb3JtKSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW5kZXJlclNlcnZpY2UuaXNNb2JpbGVWaWV3ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgc3RlcENvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJDb25maWc6IGFueTtcblxuICBASW5wdXQoKVxuICBmb3Jtc0RhdGE6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIGFwaUNhbGxSZXNwb25zZTogYW55ID0ge307XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tTdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGdldEZvcm1EYXRhOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrQXBpQ2FsbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIGRpc3BsYXkgZm9ybXMgYW5kIGxpc3QgY29uZGl0aW9uYWxseVxuICBzaG93Rm9ybTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93Rm9ybUZpZWxkczogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dGb3JtU2VjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZW5kZXJlclNlcnZpY2U6IEt3aWtJRFJlbmRlcmVyU2VydmljZSxcbiAgICBwcml2YXRlIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGZvcm1TdGVwS2V5ID0gdGhpcy5zdGVwQ29uZmlnPy5mb3JtPy5rZXkgPz8gdW5kZWZpbmVkO1xuXG4gICAgaWYgKFxuICAgICAgZm9ybVN0ZXBLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzLCBmb3JtU3RlcEtleSlcbiAgICApIHtcbiAgICAgIHRoaXMucmVuZGVyZXJTZXJ2aWNlLnNldEZvcm1zTGlzdChcbiAgICAgICAgdGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzW2Zvcm1TdGVwS2V5XVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzKSkge1xuICAgICAgdGhpcy5yZW5kZXJlclNlcnZpY2Uuc2V0Rm9ybXNMaXN0KHRoaXMudXNlckNvbmZpZy51c2VyRm9ybUZpZWxkcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHVzZXJGb3JtRmllbGRzIGRvZXNuJ3QgaGF2ZSBhIGZvcm0gZGVmaW5lZCB3aXRoIGtleTogJHtmb3JtU3RlcEtleX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1zKCk7XG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB2ZXJpZnlDaGFuZ2UgPSAocHJvcDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiAhY2hhbmdlc1twcm9wXS5maXJzdENoYW5nZTtcbiAgICB9O1xuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJ1c2VyQ29uZmlnXCIpKSB7XG4gICAgICB0aGlzLnVzZXJDb25maWcgPSBjaGFuZ2VzLnVzZXJDb25maWcuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1zRGF0YVwiKSkge1xuICAgICAgdGhpcy5mb3Jtc0RhdGEgPSBjaGFuZ2VzLmZvcm1zRGF0YS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1zKCk7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJhcGlDYWxsUmVzcG9uc2VcIikpIHtcbiAgICAgIHRoaXMuYXBpQ2FsbFJlc3BvbnNlID0gY2hhbmdlcy5hcGlDYWxsUmVzcG9uc2UuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplRm9ybXMoKSB7XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuXG4gICAgdGhpcy5yZW5kZXJlclNlcnZpY2Uuc2V0QWxsRm9ybXNEYXRhKHRoaXMuZm9ybXNEYXRhKTtcblxuICAgIHRoaXMucmVuZGVyZXJTZXJ2aWNlLnVwZGF0ZUZvcm1zTGlzdCgpO1xuXG4gICAgdGhpcy5oYW5kbGVSZXNpemUodGhpcy5yZW5kZXJlclNlcnZpY2UuZm9ybXNMaXN0KTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMucmVuZGVyZXJTZXJ2aWNlLmZvcm1zTGlzdC5sZW5ndGggIT09XG4gICAgICB0aGlzLnJlbmRlcmVyU2VydmljZS5mb3Jtc0xpc3RDb21wbGV0ZWQubGVuZ3RoXG4gICAgKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKFxuICAgICAgICB0aGlzLnJlbmRlcmVyU2VydmljZS5hY3RpdmVGb3JtQ29uZmlnLmtleVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBoYW5kbGVSZXNpemUoZm9ybXNMaXN0OiBhbnlbXSkge1xuICAgIGlmICh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPCA2MDApIHtcbiAgICAgIGNvbnN0IGlzU2luZ2xlRm9ybSA9IChmb3Jtc0xpc3Q6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiBmb3Jtc0xpc3QubGVuZ3RoID09PSAxO1xuICAgICAgfTtcbiAgICAgIGlmICghaXNTaW5nbGVGb3JtKGZvcm1zTGlzdCkpIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVuZGVyZXJTZXJ2aWNlLmlzTW9iaWxlVmlldyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXJTZXJ2aWNlLmlzTW9iaWxlVmlldyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZvcm1zLWxpc3QgbGlzdGVuZXJcbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybShzZWxlY3RlZEZvcm06IHN0cmluZykge1xuICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG5cbiAgICBjb25zdCBhY3RpdmVGb3JtQ29uZmlnID0gdGhpcy5yZW5kZXJlclNlcnZpY2UuZm9ybXNMaXN0LmZpbmQoKGZvcm0pID0+IHtcbiAgICAgIGlmIChmb3JtLmtleSA9PT0gc2VsZWN0ZWRGb3JtKSB7XG4gICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGZvcm1Db25maWcgPSBhd2FpdCB0aGlzLnJlbmRlcmVyU2VydmljZS5mZXRjaEZvcm1Db25maWcoXG4gICAgICBhY3RpdmVGb3JtQ29uZmlnLmZvcm1Db250ZW50LnVybFxuICAgICk7XG5cbiAgICBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLmNvbnZlcnRGb3JtQ29uZmlnKGZvcm1Db25maWcpO1xuXG4gICAgY29uc3QgYWN0aXZlRm9ybURhdGEgPVxuICAgICAgdGhpcy5yZW5kZXJlclNlcnZpY2UuYWxsRm9ybXNEYXRhW2Zvcm1Db25maWcua2V5XSA/PyB7fTtcbiAgICB0aGlzLnJlbmRlcmVyU2VydmljZS5zZXRBY3RpdmVGb3JtRGF0YShhY3RpdmVGb3JtRGF0YSk7XG5cbiAgICB0aGlzLnJlbmRlcmVyU2VydmljZS5zZXRBY3RpdmVGb3JtQ29uZmlnKHtcbiAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAuLi5mb3JtQ29uZmlnXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgNjAwKSB7XG4gICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoID49IDYwMCkge1xuICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Zvcm0gPSB0cnVlO1xuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gIH1cblxuICAvLyBmb3Jtcy1saXN0IGxpc3RlbmVyXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1N1Ym1pdEZvcm1zKGU6IGFueSkge1xuICAgIGlmICh0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHNDb25maWcudmFsaWRhdGlvbikge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSBuZXcgVmFsaWRhdGlvbihcbiAgICAgICAge1xuICAgICAgICAgIFVTRVJfQ09ORklHOiB0aGlzLnVzZXJDb25maWcsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuZm9ybXNEYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICApO1xuXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB2YWxpZGF0aW9ucy52YWxpZGF0ZShcbiAgICAgICAgICB0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHNDb25maWcudmFsaWRhdGlvblxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHNDb25maWcuc3RhdHVzID09PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICAgICAgdGhpcy5vbkNsaWNrU3VibWl0LmVtaXQoZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgICAgIH0sIDMwMDApO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZvcm0tdmlldyBsaXN0ZW5lclxuICBoYW5kbGVPbkNsaWNrQXBpQ2FsbChlOiBhbnkpIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgdGhpcy5vbkNsaWNrQXBpQ2FsbC5lbWl0KGUpO1xuICB9XG5cbiAgLy8gZm9ybS12aWV3IGxpc3RlbmVyXG4gIGhhbmRsZUdldEFjdGl2ZUZvcm1EYXRhKGU6IGFueSkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmdldEZvcm1EYXRhLmVtaXQoe1xuICAgICAgW3RoaXMucmVuZGVyZXJTZXJ2aWNlLmFjdGl2ZUZvcm1Db25maWcua2V5XTogZVtcImRhdGFcIl1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGZvcm0tdmlldyBsaXN0ZW5lclxuICBoYW5kbGVPbkNsaWNrU2F2ZUZvcm0oZTogYW55KSB7XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuXG4gICAgdGhpcy5yZW5kZXJlclNlcnZpY2Uuc2V0QWN0aXZlRm9ybURhdGEoe30pO1xuXG4gICAgdGhpcy5nZXRGb3JtRGF0YS5lbWl0KHtcbiAgICAgIFt0aGlzLnJlbmRlcmVyU2VydmljZS5hY3RpdmVGb3JtQ29uZmlnLmtleV06IGVbXCJkYXRhXCJdXG4gICAgfSk7XG4gIH1cblxuICAvLyBmb3JtLXZpZXcgbGlzdGVuZXJcbiAgaGFuZGxlT25DbGlja1ZpZXdGb3JtcyhlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gIH1cblxuICBzaG93RXJyb3JOb3RpZmljYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oc2hvdykge1xuICAgIHRoaXMuc2hvd0Vycm9yTm90aWZpY2F0aW9uID0gc2hvdztcbiAgfVxuXG4gIGFzeW5jIHRha2VBY3Rpb24oYWN0aW9uOiBhbnksIHVzZXJDb25maWc6IGFueSwgZm9ybXNEYXRhOiBhbnkpIHtcbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfVkFMVUU6XG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPSBuZXcgU291cmNlKHtcbiAgICAgICAgICBVU0VSX0NPTkZJRzogdGhpcy51c2VyQ29uZmlnLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmZvcm1zRGF0YVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZXMuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICAgICAgKTtcbiAgICAgICAgc291cmNlcy5zZXRWYWx1ZVRvU291cmNlKGFjdGlvbi5wcm9wcy52YWx1ZS5kZXN0aW5hdGlvbiwgc291cmNlVmFsdWUpO1xuXG4gICAgICAgIHRoaXMudXNlckNvbmZpZyA9IHNvdXJjZXMub2JqZWN0LlVTRVJfQ09ORklHO1xuICAgICAgICB0aGlzLmZvcm1zRGF0YSA9IHNvdXJjZXMub2JqZWN0LkFMTF9GT1JNU19EQVRBO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBuZ0NsYXNzPVwia3dpa2lkLXJlbmRlcmVyXCI+XG4gIDxkaXZcbiAgICBuZ0NsYXNzPVwia3dpa2lkLWxheW91dC1jb250YWluZXJcIlxuICAgICpuZ0lmPVwiIWxvYWRpbmdcIlxuICA+XG4gICAgPGRpdlxuICAgICAgbmdDbGFzcz1cImt3aWtpZC1zZWN0aW9ucy1jb250YWluZXJcIlxuICAgICAgKm5nSWY9XCJzaG93Rm9ybVNlY3Rpb25zXCJcbiAgICAgIGNsYXNzPVwiYWN0aXZlXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd0Zvcm1TZWN0aW9uc1wiXG4gICAgICBbY2xhc3MubW9iaWxlXT1cInJlbmRlcmVyU2VydmljZS5pc01vYmlsZVZpZXdcIlxuICAgID5cbiAgICAgIDxrd2lraWQtZm9ybXMtbGlzdFxuICAgICAgICBbc2hvd0Zvcm1GaWVsZHNdPVwidGhpcy5zaG93Rm9ybUZpZWxkc1wiXG4gICAgICAgIFt1c2VyQ29uZmlnXT1cInRoaXMudXNlckNvbmZpZ1wiXG4gICAgICAgIFtmb3Jtc0xpc3RdPVwidGhpcy5yZW5kZXJlclNlcnZpY2UuZm9ybXNMaXN0XCJcbiAgICAgICAgW2Zvcm1zTGlzdENvbXBsZXRlZF09XCJ0aGlzLnJlbmRlcmVyU2VydmljZS5mb3Jtc0xpc3RDb21wbGV0ZWRcIlxuICAgICAgICBbaXNNb2JpbGVWaWV3XT1cInRoaXMucmVuZGVyZXJTZXJ2aWNlLmlzTW9iaWxlVmlld1wiXG4gICAgICAgIChvbkNsaWNrU2V0QWN0aXZlRm9ybSk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKCRldmVudClcIlxuICAgICAgICAob25DbGlja1N1Ym1pdEZvcm1zKT1cInRoaXMuaGFuZGxlT25DbGlja1N1Ym1pdEZvcm1zKCRldmVudClcIlxuICAgICAgPjwva3dpa2lkLWZvcm1zLWxpc3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgbmdDbGFzcz1cImt3aWtpZC1mb3Jtcy1jb250YWluZXJcIlxuICAgICAgKm5nSWY9XCJ0aGlzLnNob3dGb3JtICYmIHRoaXMuc2hvd0Zvcm1GaWVsZHNcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93Rm9ybUZpZWxkc1wiXG4gICAgICBbY2xhc3MubW9iaWxlXT1cInJlbmRlcmVyU2VydmljZS5pc01vYmlsZVZpZXdcIlxuICAgICAgW0BwYW5lbEluT3V0XVxuICAgID5cbiAgICAgIDxrd2lraWQtZm9ybS12aWV3XG4gICAgICAgIFtmb3JtQ29uZmlnXT1cInRoaXMucmVuZGVyZXJTZXJ2aWNlLmFjdGl2ZUZvcm1Db25maWdcIlxuICAgICAgICBbZm9ybURhdGFdPVwidGhpcy5yZW5kZXJlclNlcnZpY2UuYWN0aXZlRm9ybURhdGFcIlxuICAgICAgICBbYXBpQ2FsbFJlc3BvbnNlXT1cInRoaXMuYXBpQ2FsbFJlc3BvbnNlXCJcbiAgICAgICAgW2Zvcm1zTGlzdF09XCJ0aGlzLnJlbmRlcmVyU2VydmljZS5mb3Jtc0xpc3RcIlxuICAgICAgICBbYWxsRm9ybXNEYXRhXT1cInRoaXMucmVuZGVyZXJTZXJ2aWNlLmFsbEZvcm1zRGF0YVwiXG4gICAgICAgIFtpc01vYmlsZVZpZXddPVwidGhpcy5yZW5kZXJlclNlcnZpY2UuaXNNb2JpbGVWaWV3XCJcbiAgICAgICAgKG9uQ2xpY2tBcGlDYWxsKT1cInRoaXMuaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrVmlld0Zvcm1zKT1cInRoaXMuaGFuZGxlT25DbGlja1ZpZXdGb3JtcygkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tTYXZlRm9ybSk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSgkZXZlbnQpXCJcbiAgICAgICAgKGdldEFjdGl2ZUZvcm1EYXRhKT1cInRoaXMuaGFuZGxlR2V0QWN0aXZlRm9ybURhdGEoJGV2ZW50KVwiXG4gICAgICA+PC9rd2lraWQtZm9ybS12aWV3PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdlxuICBuZ0NsYXNzPVwia3dpa2lkLWZvcm1zLXJlbmRlcmVyLWxvYWRlclwiXG4gICpuZ0lmPVwibG9hZGVyXCJcbj5cbiAgPHNwYW4gY2xhc3M9XCJsb2FkZXJcIj48L3NwYW4+XG48L2Rpdj5cbjx0dWktcHVzaFxuICBpZD1cImVycm9yLW5vdGlmaWNhdGlvblwiXG4gICp0dWlQdXNoPVwic2hvd0Vycm9yTm90aWZpY2F0aW9uXCJcbiAgaGVhZGluZz1cIlBsZWFzZSBjb21wbGV0ZSB0aGUgcmVxdWlyZWQgRm9ybXMhXCJcbiAgdHlwZT1cIkVycm9yXCJcbiAgKGNsb3NlKT1cInRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKVwiXG4+XG4gIDx0dWktc3ZnXG4gICAgc3JjPVwidHVpSWNvbkNhbmNlbFwiXG4gICAgc3R5bGU9XCJjb2xvcjogI2ZmZiAhaW1wb3J0YW50XCJcbiAgPlxuICA8L3R1aS1zdmc+XG48L3R1aS1wdXNoPlxuIl19
|
|
516
|
+
}], assignSequenceNoToForm: [], findCompletedFormsList: [], markFormInFormsListAsCompleted: [], markFormInFormsListAsDisabled: [], filterAllFormsData: [], checkIfFormsStatusCompleted: [], findActiveFormConfig: [], updateFormsList: [], formHide: [], formShow: [], handleOnClickSetActiveForm: [], handleOnClickSubmitForms: [] } });
|
|
517
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFDVCxJQUFJLEVBQ0osb0JBQW9CLEVBQ3BCLE1BQU0sRUFHTixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEtBQUssU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUVsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7QUFrQnZELE1BQU0sT0FBTyw0QkFBNEI7SUFtRXZDLFlBQ1UsV0FBdUIsRUFDdkIsR0FBc0I7UUFEdEIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFyQ2hDLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFHcEIsb0JB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QUMsUUFBUSxFQUFFO2dDQUNuQixPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7NkJBQ3ZELENBQUM7eUJBQ0gsQ0FBQztxQkFDSDtpQkFDRjtpSUFJQyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXdCekMsVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosTUFBTTtnQkFJUCxXQUFXO3NCQURWLE1BQU07Z0JBSVAsY0FBYztzQkFEYixNQUFNO2dCQStHUCxzQkFBc0IsTUFnQnRCLHNCQUFzQixNQWlCdEIsOEJBQThCLE1BeUI5Qiw2QkFBNkIsTUFpQzdCLGtCQUFrQixNQWtCbEIsMkJBQTJCLE1BcUIzQixvQkFBb0IsTUFZZCxlQUFlLE1BZ0ZyQixRQUFRLE1BT1IsUUFBUSxNQTBDRiwwQkFBMEIsTUF5RWhDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBjaGVja09iamVjdEtleUV4aXN0cyxcbiAgQ29uZGl0aW9uLFxuICBpc05vdEVtcHR5VmFsdWUsXG4gIGxvZ01ldGhvZCxcbiAgUnVsZSxcbiAgc2V0VmFsdWVUb09iamVjdFBhdGgsXG4gIFNvdXJjZSxcbiAgVEFjdGlvbixcbiAgVFJ1bGUsXG4gIFZhbGlkYXRpb25cbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQgKiBhcyBjbG9uZURlZXAgZnJvbSBcImxvZGFzaC9jbG9uZURlZXBcIjtcbmltcG9ydCB7IEVBY3Rpb25LZXkgfSBmcm9tIFwiLi9mb3JtLXZpZXcvZGVmaW5pdGlvbnMvZm9ybS12aWV3LmFjdGlvbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgVFRyaWdnZXIgfSBmcm9tIFwiLi9mb3JtLXZpZXcvZGVmaW5pdGlvbnMvZm9ybS12aWV3LnRyaWdnZXJzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IEVSZW5kZXJlckFjdGlvbktleSB9IGZyb20gXCIuL3JlbmRlcmVyLmFjdGlvbnMuZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gXCIuL3JlbmRlcmVyLmNvbmZpZy1jb252ZXJ0ZXIuaGVscGVyXCI7XG5pbXBvcnQgeyBnZXRGb3JtQ29uZmlnQnlLZXkgfSBmcm9tIFwiLi9yZW5kZXJlci5oZWxwZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImt3aWtpZC1mb3Jtcy1yZW5kZXJlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3JlbmRlcmVyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9yZW5kZXJlci5jb21wb25lbnQuc2Nzc1wiXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoXCJwYW5lbEluT3V0XCIsIFtcbiAgICAgIHRyYW5zaXRpb24oXCI6ZW50ZXJcIiwgW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVZKDEwMCUpXCIgfSksXG4gICAgICAgIGFuaW1hdGUoMTUwKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKFwiOmxlYXZlXCIsIFtcbiAgICAgICAgYW5pbWF0ZSgxMDAsIHN0eWxlKHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZVkoMTAwJSlcIiB9KSlcbiAgICAgIF0pXG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBLd2lrSURGb3Jtc1JlbmRlcmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvLyBUaGUgZmluYWwgdmFsdWUgc2hvdWxkIGJlIHByb3ZpZGVkIHRvIHNlcnZpY2UsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gYWxsIGNvbXBvbmVudHNcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIiwgW1wiJGV2ZW50XCJdKVxuICB3aW5kb3dSZXNpemVXYXRjaGVyKCkge1xuICAgIGlmICh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPCA2MDApIHtcbiAgICAgIGlmICh0aGlzLnNob3dGb3JtKSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc2hvd0Zvcm0pIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHN0ZXBDb25maWc6IGFueTtcblxuICBASW5wdXQoKVxuICB1c2VyQ29uZmlnOiBhbnk7XG5cbiAgQElucHV0KClcbiAgZm9ybXNEYXRhOiBhbnkgPSB7fTtcblxuICBASW5wdXQoKVxuICBhcGlDYWxsUmVzcG9uc2U6IGFueSA9IHt9O1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrU3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBnZXRGb3JtRGF0YTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25DbGlja0FwaUNhbGw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzaG93RXJyb3JOb3RpZmljYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oc2hvdykge1xuICAgIHRoaXMuc2hvd0Vycm9yTm90aWZpY2F0aW9uID0gc2hvdztcbiAgfVxuXG4gIGFjdGl2ZUZvcm1Db25maWc6IGFueTtcbiAgYWN0aXZlRm9ybURhdGE6IGFueTtcbiAgYWN0aXZlRm9ybUZpZWxkczogYW55W107XG4gIGFsbEZvcm1zRGF0YTogYW55ID0ge307XG4gIGZvcm1zTGlzdDogYW55W10gPSBbXTtcbiAgZm9ybXNMaXN0Q29tcGxldGVkOiBzdHJpbmdbXTtcbiAgaXNNb2JpbGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gZGlzcGxheSBmb3JtcyBhbmQgbGlzdCBjb25kaXRpb25hbGx5XG4gIHNob3dGb3JtOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dGb3JtRmllbGRzOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0Zvcm1TZWN0aW9uczogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZm9ybVN0ZXBLZXkgPSB0aGlzLnN0ZXBDb25maWc/LmZvcm0/LmtleSA/PyB1bmRlZmluZWQ7XG5cbiAgICBpZiAoXG4gICAgICBmb3JtU3RlcEtleSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHMsIGZvcm1TdGVwS2V5KVxuICAgICkge1xuICAgICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHNbZm9ybVN0ZXBLZXldO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHMpKSB7XG4gICAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMudXNlckNvbmZpZy51c2VyRm9ybUZpZWxkcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgdXNlckZvcm1GaWVsZHMgZG9lc24ndCBoYXZlIGEgZm9ybSBkZWZpbmVkIHdpdGgga2V5OiAke2Zvcm1TdGVwS2V5fWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplRm9ybXMoKTtcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChwcm9wOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBjaGFuZ2VzLmhhc093blByb3BlcnR5KHByb3ApICYmICFjaGFuZ2VzW3Byb3BdLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInVzZXJDb25maWdcIikpIHtcbiAgICAgIHRoaXMudXNlckNvbmZpZyA9IGNoYW5nZXMudXNlckNvbmZpZy5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybXNEYXRhXCIpKSB7XG4gICAgICB0aGlzLmZvcm1zRGF0YSA9IGNoYW5nZXMuZm9ybXNEYXRhLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybXMoKTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFwaUNhbGxSZXNwb25zZVwiKSkge1xuICAgICAgdGhpcy5hcGlDYWxsUmVzcG9uc2UgPSBjaGFuZ2VzLmFwaUNhbGxSZXNwb25zZS5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZldGNoRm9ybUNvbmZpZyh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IG1ldGhvZDogXCJHRVRcIiB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZUZvcm1zKCkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcblxuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gdGhpcy5mb3Jtc0RhdGE7XG5cbiAgICBjb25zb2xlLmxvZyhcIlNUQVJUXCIpO1xuICAgIGNvbnNvbGUubG9nKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3Jtc0xpc3QpKSk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVGb3Jtc0xpc3QoKTtcbiAgICBjb25zb2xlLmxvZyhcIkVORFwiKTtcbiAgICBjb25zb2xlLmxvZyhKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybXNMaXN0KSkpO1xuXG4gICAgdGhpcy5oYW5kbGVSZXNpemUodGhpcy5mb3Jtc0xpc3QpO1xuXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5hY3RpdmVGb3JtQ29uZmlnKSwgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWQpO1xuXG4gICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmFjdGl2ZUZvcm1Db25maWcpKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKHRoaXMuYWN0aXZlRm9ybUNvbmZpZy5rZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOT1RFOiBUbyBiZSBkZXByZWNhdGVkLlxuICAgKiBXaHkgPyBXaWxsIGJlIGRpcmVjdGx5IGFzc2lnbmVkIHdoaWxlIGV4ZWN1dGluZyAnY2hha3JhJyBmb3IgZGVmYXVsdCBmb3JtIGNvbmZpZy5cbiAgICogQHBhcmFtIGZvcm1zTGlzdCBhbnlbXVxuICAgKiBAcGFyYW0gZm9ybXNMaXN0Q29tcGxldGVkIHN0cmluZ1tdXG4gICAqIEByZXR1cm5zIGFueVtdXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGFzc2lnblNlcXVlbmNlTm9Ub0Zvcm0oZm9ybXNMaXN0OiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgc2VxdWVuY2VObyA9IDE7XG4gICAgZm9yIChsZXQgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuKSB7XG4gICAgICAgICAgZm9ybS5zZXF1ZW5jZU5vID0gc2VxdWVuY2VObysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtW1wic2VxdWVuY2VOb1wiXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3Jtc0xpc3Q7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpbmRDb21wbGV0ZWRGb3Jtc0xpc3QoYWxsRm9ybXNEYXRhOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGZvcm1zTGlzdENvbXBsZXRlZDogc3RyaW5nW10gPSBbXTtcblxuICAgIE9iamVjdC5rZXlzKGFsbEZvcm1zRGF0YSkubWFwKChmb3JtS2V5KSA9PiB7XG4gICAgICBmb3Jtc0xpc3RDb21wbGV0ZWQucHVzaChmb3JtS2V5KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmb3Jtc0xpc3RDb21wbGV0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogTk9URTogVG8gYmUgZGVwcmVjYXRlZC4gV2h5ID8gV2lsbCBiZSByZXBsYWNlZCBieSAnY2hha3JhJy5cbiAgICogQHBhcmFtIGZvcm1zTGlzdCBhbnlbXVxuICAgKiBAcGFyYW0gZm9ybXNMaXN0Q29tcGxldGVkIHN0cmluZ1tdXG4gICAqIEByZXR1cm5zIGFueVtdXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIG1hcmtGb3JtSW5Gb3Jtc0xpc3RBc0NvbXBsZXRlZChcbiAgICBmb3Jtc0xpc3Q6IGFueVtdLFxuICAgIGZvcm1zTGlzdENvbXBsZXRlZDogc3RyaW5nW11cbiAgKTogYW55W10ge1xuICAgIGZvciAobGV0IGZvcm0gb2YgZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikpIHtcbiAgICAgICAgaWYgKCFmb3JtLmhpZGRlbikge1xuICAgICAgICAgIGlmIChmb3Jtc0xpc3RDb21wbGV0ZWQuaW5jbHVkZXMoZm9ybS5rZXkpKSB7XG4gICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJjb21wbGV0ZWRcIik7XG4gICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1zTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOT1RFOiBUbyBiZSBkZXByZWNhdGVkLiBXaHkgPyBXaWxsIGJlIHJlcGxhY2VkIGJ5ICdjaGFrcmEnLlxuICAgKiBAcGFyYW0gZm9ybXNMaXN0IGFueVtdXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3RDb21wbGV0ZWQgc3RyaW5nW11cbiAgICogQHJldHVybnMgYW55W11cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgbWFya0Zvcm1JbkZvcm1zTGlzdEFzRGlzYWJsZWQoXG4gICAgZm9ybXNMaXN0OiBhbnlbXSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4pIHtcbiAgICAgICAgICBpZiAoZm9ybS5zdGF0dXMgIT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImRlcGVuZGVudE9uXCIpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRGVwZW5kZW50ID0gZm9ybS5kZXBlbmRlbnRPbi5ldmVyeSgocjogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgIGZvcm1zTGlzdENvbXBsZXRlZC5pbmNsdWRlcyhyKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoaXNEZXBlbmRlbnQpIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJlZGl0YWJsZVwiKTtcbiAgICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwic3RhdHVzXCIsIFwibG9ja2VkXCIpO1xuICAgICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkZXBlbmRlbnRPblwiLCBbXSk7XG4gICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInN0YXR1c1wiLCBcImVkaXRhYmxlXCIpO1xuICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1zTGlzdDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmlsdGVyQWxsRm9ybXNEYXRhKGFsbEZvcm1zRGF0YTogYW55LCBmb3Jtc0xpc3Q6IGFueVtdKTogYW55IHtcbiAgICBsZXQgY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhOiBhbnkgPSB7fTtcblxuICAgIGZvciAobGV0IGZvcm0gb2YgZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikgJiYgIWZvcm0uaGlkZGVuKSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhbGxGb3Jtc0RhdGEsIGZvcm0ua2V5KSkge1xuICAgICAgICAgIGN1cnJlbnRVc2VyRm9ybUFsbEZvcm1zRGF0YSA9IHtcbiAgICAgICAgICAgIC4uLmN1cnJlbnRVc2VyRm9ybUFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIFtmb3JtLmtleV06IGFsbEZvcm1zRGF0YVtmb3JtLmtleV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyRm9ybUFsbEZvcm1zRGF0YTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgY2hlY2tJZkZvcm1zU3RhdHVzQ29tcGxldGVkKFxuICAgIGZvcm1zTGlzdDogYW55LFxuICAgIGZvcm1zTGlzdENvbXBsZXRlZDogc3RyaW5nW11cbiAgKTogYW55IHtcbiAgICBsZXQgYWxsRm9ybXNDb21wbGV0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4pIHtcbiAgICAgICAgICBpZiAoZm9ybS5zdGF0dXMgIT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGFsbEZvcm1zQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWxsRm9ybXNDb21wbGV0ZWQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpbmRBY3RpdmVGb3JtQ29uZmlnKGZvcm1zTGlzdDogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IGFjdGl2ZUZvcm1Db25maWcgPSBmb3Jtc0xpc3QuZmluZCgoZm9ybSkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4pIHtcbiAgICAgICAgICByZXR1cm4gZm9ybS5zdGF0dXMgPT09IFwiZWRpdGFibGVcIiAmJiAhZm9ybS5kaXNhYmxlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhY3RpdmVGb3JtQ29uZmlnO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB1cGRhdGVGb3Jtc0xpc3QoKSB7XG4gICAgZm9yIChsZXQgZm9ybSBvZiB0aGlzLmZvcm1zTGlzdCkge1xuICAgICAgaWYgKFxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImRlZmF1bHRcIikgJiZcbiAgICAgICAgaXNOb3RFbXB0eVZhbHVlKGZvcm0uZGVmYXVsdClcbiAgICAgICkge1xuICAgICAgICBjb25zdCB0cmlnZ2VyczogQXJyYXk8VFRyaWdnZXI+ID0gZm9ybS5kZWZhdWx0LnRyaWdnZXJzO1xuICAgICAgICBjb25zdCBydWxlczogQXJyYXk8VFJ1bGU+ID0gZm9ybS5kZWZhdWx0LnJ1bGVzO1xuICAgICAgICBjb25zdCBhY3Rpb25zOiBBcnJheTxUQWN0aW9uPiA9IGZvcm0uZGVmYXVsdC5hY3Rpb25zO1xuXG4gICAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB7XG4gICAgICAgICAgVVNFUl9DT05GSUc6IHRoaXMudXNlckNvbmZpZyxcbiAgICAgICAgICBGT1JNU19MSVNUOiB0aGlzLmZvcm1zTGlzdCxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgfSkubWFwcGluZygpO1xuXG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgICAgY29uc3QgY29uZGl0aW9uRXZhbHVhdGlvbiA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgICAgaWYgKGNvbmRpdGlvbkV2YWx1YXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZPUk1TX0xJU1Q6IHRoaXMuZm9ybXNMaXN0LFxuICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgICAgZm9ybS5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy5hc3NpZ25TZXF1ZW5jZU5vVG9Gb3JtKHRoaXMuZm9ybXNMaXN0KTtcblxuICAgIC8qKlxuICAgICAqIEJlbG93IGNvZGUgaWRlbnRpZmllcyB0aGUgYWxsRm9ybXNEYXRhIHJlcXVpcmVkIGZvciB0aGUgY3VycmVudCBVc2VyIEZvcm0uXG4gICAgICogV2h5PyBCZWNhdXNlIGFsbEZvcm1zRGF0YSB3aWxsIGFjdHVhbGx5IGNvbnRhaW4gdGhlIHdob2xlIGpvdXJuZXkncyBhbGxcbiAgICAgKiBwb3NzaWJsZSBVc2VyIEZvcm0gc3RlcHMuIFNvLCBpdCBpcyBpbXBvcnRhbnQgdG8gc2V0IHRoZSBmb3JtIGRhdGEgd2hpY2hcbiAgICAgKiB0aGlzIHBhcnRpY3VsYXIgVXNlciBGb3JtIG9ubHkgaGFzIHRvIExPQ0FMIE1FVEhPRCBWYXJpYWJsZS5cbiAgICAgKi9cbiAgICBjb25zdCBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGEgPSB0aGlzLmZpbHRlckFsbEZvcm1zRGF0YShcbiAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgdGhpcy5mb3Jtc0xpc3RcbiAgICApO1xuXG4gICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWQgPSB0aGlzLmZpbmRDb21wbGV0ZWRGb3Jtc0xpc3QoXG4gICAgICBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGFcbiAgICApO1xuXG4gICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLm1hcmtGb3JtSW5Gb3Jtc0xpc3RBc0NvbXBsZXRlZChcbiAgICAgIHRoaXMuZm9ybXNMaXN0LFxuICAgICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWRcbiAgICApO1xuXG4gICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLm1hcmtGb3JtSW5Gb3Jtc0xpc3RBc0Rpc2FibGVkKFxuICAgICAgdGhpcy5mb3Jtc0xpc3QsXG4gICAgICB0aGlzLmZvcm1zTGlzdENvbXBsZXRlZFxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1zTGlzdCA9IGNsb25lRGVlcCh0aGlzLmZvcm1zTGlzdCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNoZWNrSWZGb3Jtc1N0YXR1c0NvbXBsZXRlZCh0aGlzLmZvcm1zTGlzdCwgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWQpXG4gICAgKSB7XG4gICAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcgPSB0aGlzLmZpbmRBY3RpdmVGb3JtQ29uZmlnKHRoaXMuZm9ybXNMaXN0KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZvcm1IaWRlKGZvcm1LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBmb3JtID0gZ2V0Rm9ybUNvbmZpZ0J5S2V5KHRoaXMuZm9ybXNMaXN0LCBmb3JtS2V5KTtcblxuICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImhpZGRlblwiLCB0cnVlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZm9ybVNob3coZm9ybUtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGZvcm0gPSBnZXRGb3JtQ29uZmlnQnlLZXkodGhpcy5mb3Jtc0xpc3QsIGZvcm1LZXkpO1xuXG4gICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiaGlkZGVuXCIsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIHRha2VBY3Rpb24oYWN0aW9uOiBhbnksIG9iamVjdDogYW55KSB7XG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XG4gICAgICBjYXNlIEVSZW5kZXJlckFjdGlvbktleS5GT1JNX0hJREU6XG4gICAgICAgIHRoaXMuZm9ybUhpZGUoYWN0aW9uLnByb3BzLmZvcm1LZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRVJlbmRlcmVyQWN0aW9uS2V5LkZPUk1fU0hPVzpcbiAgICAgICAgdGhpcy5mb3JtU2hvdyhhY3Rpb24ucHJvcHMuZm9ybUtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9WQUxVRTpcbiAgICAgICAgY29uc3Qgc291cmNlcyA9IG5ldyBTb3VyY2Uoe1xuICAgICAgICAgIFVTRVJfQ09ORklHOiB0aGlzLnVzZXJDb25maWcsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuZm9ybXNEYXRhXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICAgICApO1xuICAgICAgICBzb3VyY2VzLnNldFZhbHVlVG9Tb3VyY2UoYWN0aW9uLnByb3BzLnZhbHVlLmRlc3RpbmF0aW9uLCBzb3VyY2VWYWx1ZSk7XG5cbiAgICAgICAgdGhpcy51c2VyQ29uZmlnID0gc291cmNlcy5vYmplY3QuVVNFUl9DT05GSUc7XG4gICAgICAgIHRoaXMuZm9ybXNEYXRhID0gc291cmNlcy5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpYnJhcnkgRXZlbnQgTGlzdGVuZXJzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBGb3JtTGlzdCAtIExpc3RlbnMgdG8gZXZlbnQgb2Ygb3BlbmluZyB0aGUgRm9ybVZpZXcgb2Ygd2hlbiBhbnkgZm9ybSBpcyBjbGlja2VkIGluIEZvcm1MaXN0XG4gICAqIEBwYXJhbSBzZWxlY3RlZEZvcm0gc3RyaW5nXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKHNlbGVjdGVkRm9ybTogc3RyaW5nKSB7XG4gICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcblxuICAgIGNvbnN0IGFjdGl2ZUZvcm1Db25maWcgPSB0aGlzLmZvcm1zTGlzdC5maW5kKChmb3JtKSA9PiB7XG4gICAgICBpZiAoZm9ybS5rZXkgPT09IHNlbGVjdGVkRm9ybSkge1xuICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBmb3JtQ29uZmlnID0gYXdhaXQgdGhpcy5mZXRjaEZvcm1Db25maWcoXG4gICAgICBhY3RpdmVGb3JtQ29uZmlnLmZvcm1Db250ZW50LnVybFxuICAgICk7XG5cbiAgICBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLmNvbnZlcnRGb3JtQ29uZmlnKGZvcm1Db25maWcpO1xuXG4gICAgY29uc3QgYWN0aXZlRm9ybURhdGEgPSB0aGlzLmFsbEZvcm1zRGF0YVtmb3JtQ29uZmlnLmtleV0gPz8ge307XG5cbiAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcgPSB7XG4gICAgICAuLi5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgLi4uZm9ybUNvbmZpZ1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgNjAwKSB7XG4gICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoID49IDYwMCkge1xuICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Zvcm0gPSB0cnVlO1xuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRm9ybVZpZXcgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIGV4ZWN1dGluZyBhbiBBUEkgY2FsbCBmcm9tIHdpdGhpbiB0aGUgRm9ybVZpZXcgYW5kIGVtaXRzIChyZWFkIGFzIHBhc3NlcykgdGhlIHNhbWUgZXZlbnQgdG8gdGhlIGxpYnJhcnkgY29uc3VtZXIuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgaGFuZGxlT25DbGlja0FwaUNhbGwoZTogYW55KSB7XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdChlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtVmlldyAtIExpc3RlbnMgdG8gZXZlbnQgb2YgZ2V0dGluZyB0aGUgQWN0aXZlIEZvcm0ncyBEYXRhIHdoZW4gdGhlIEZvcm0gaXMgU2F2ZWQgYW5kIGVtaXRzIChyZWFkIGFzIHBhc3NlcykgdGhlIHNhbWUgZXZlbnQgdG8gdGhlIGxpYnJhcnkgY29uc3VtZXIuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgaGFuZGxlT25DbGlja1NhdmVGb3JtKGU6IGFueSkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcblxuICAgIHRoaXMuYWN0aXZlRm9ybURhdGEgPSB7fTtcblxuICAgIHRoaXMuZ2V0Rm9ybURhdGEuZW1pdCh7XG4gICAgICBbdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleV06IGVbXCJkYXRhXCJdXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybVZpZXcgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIHNob3dpbmcgdGhlIEZvcm1zIExpc3QgaW4gTW9iaWxlIFZpZXcuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgaGFuZGxlT25DbGlja1ZpZXdGb3JtcyhlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRm9ybUxpc3QgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIHN1Ym1pdHRpbmcgYWxsIHRoZSBmb3JtcyBhbmQgbW92aW5nIG91dCBvZiB0aGUgbGlicmFyeSBhbmQgYWxzbyBoYW5kbGVzIHRoZSB2YWxpZGF0aW9uIG9mIGFsbCB0aGUgZm9ybXMuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrU3VibWl0Rm9ybXMoZTogYW55KSB7XG4gICAgaWYgKHRoaXMudXNlckNvbmZpZy51c2VyRm9ybUZpZWxkc0NvbmZpZy52YWxpZGF0aW9uKSB7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckNvbmZpZykpKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0gbmV3IFZhbGlkYXRpb24oXG4gICAgICAgIHtcbiAgICAgICAgICBGT1JNU19MSVNUOiB0aGlzLmZvcm1zTGlzdCxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5mb3Jtc0RhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHZhbGlkYXRpb25zLnZhbGlkYXRlKFxuICAgICAgICAgIHRoaXMudXNlckNvbmZpZy51c2VyRm9ybUZpZWxkc0NvbmZpZy52YWxpZGF0aW9uXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMudXNlckNvbmZpZy51c2VyRm9ybUZpZWxkc0NvbmZpZy5zdGF0dXMgPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICB0aGlzLm9uQ2xpY2tTdWJtaXQuZW1pdChlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSk7XG4gICAgICAgICAgfSwgMzAwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1pc2NlbGxhbmVvdXMgTWV0aG9kc1xuICAgKi9cbiAgaGFuZGxlUmVzaXplKGZvcm1zTGlzdDogYW55W10pIHtcbiAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgNjAwKSB7XG4gICAgICBjb25zdCBpc1NpbmdsZUZvcm0gPSAoZm9ybXNMaXN0OiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gZm9ybXNMaXN0Lmxlbmd0aCA9PT0gMTtcbiAgICAgIH07XG4gICAgICBpZiAoIWlzU2luZ2xlRm9ybShmb3Jtc0xpc3QpKSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IG5nQ2xhc3M9XCJrd2lraWQtcmVuZGVyZXJcIj5cbiAgPGRpdlxuICAgIG5nQ2xhc3M9XCJrd2lraWQtbGF5b3V0LWNvbnRhaW5lclwiXG4gICAgKm5nSWY9XCIhbG9hZGluZ1wiXG4gID5cbiAgICA8ZGl2XG4gICAgICBuZ0NsYXNzPVwia3dpa2lkLXNlY3Rpb25zLWNvbnRhaW5lclwiXG4gICAgICAqbmdJZj1cInNob3dGb3JtU2VjdGlvbnNcIlxuICAgICAgY2xhc3M9XCJhY3RpdmVcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93Rm9ybVNlY3Rpb25zXCJcbiAgICAgIFtjbGFzcy5tb2JpbGVdPVwiaXNNb2JpbGVWaWV3XCJcbiAgICA+XG4gICAgICA8a3dpa2lkLWZvcm1zLWxpc3RcbiAgICAgICAgW3Nob3dGb3JtRmllbGRzXT1cInRoaXMuc2hvd0Zvcm1GaWVsZHNcIlxuICAgICAgICBbdXNlckNvbmZpZ109XCJ0aGlzLnVzZXJDb25maWdcIlxuICAgICAgICBbZm9ybXNMaXN0XT1cInRoaXMuZm9ybXNMaXN0XCJcbiAgICAgICAgW2Zvcm1zTGlzdENvbXBsZXRlZF09XCJ0aGlzLmZvcm1zTGlzdENvbXBsZXRlZFwiXG4gICAgICAgIFtpc01vYmlsZVZpZXddPVwidGhpcy5pc01vYmlsZVZpZXdcIlxuICAgICAgICAob25DbGlja1NldEFjdGl2ZUZvcm0pPVwidGhpcy5oYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybSgkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tTdWJtaXRGb3Jtcyk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tTdWJtaXRGb3JtcygkZXZlbnQpXCJcbiAgICAgID48L2t3aWtpZC1mb3Jtcy1saXN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIG5nQ2xhc3M9XCJrd2lraWQtZm9ybXMtY29udGFpbmVyXCJcbiAgICAgICpuZ0lmPVwidGhpcy5zaG93Rm9ybSAmJiB0aGlzLnNob3dGb3JtRmllbGRzXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd0Zvcm1GaWVsZHNcIlxuICAgICAgW2NsYXNzLm1vYmlsZV09XCJpc01vYmlsZVZpZXdcIlxuICAgICAgW0BwYW5lbEluT3V0XVxuICAgID5cbiAgICAgIDxrd2lraWQtZm9ybS12aWV3XG4gICAgICAgIFtmb3JtQ29uZmlnXT1cInRoaXMuYWN0aXZlRm9ybUNvbmZpZ1wiXG4gICAgICAgIFtmb3JtRGF0YV09XCJ0aGlzLmFjdGl2ZUZvcm1EYXRhXCJcbiAgICAgICAgW2FwaUNhbGxSZXNwb25zZV09XCJ0aGlzLmFwaUNhbGxSZXNwb25zZVwiXG4gICAgICAgIFtmb3Jtc0xpc3RdPVwidGhpcy5mb3Jtc0xpc3RcIlxuICAgICAgICBbYWxsRm9ybXNEYXRhXT1cInRoaXMuYWxsRm9ybXNEYXRhXCJcbiAgICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICAgIChvbkNsaWNrQXBpQ2FsbCk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tBcGlDYWxsKCRldmVudClcIlxuICAgICAgICAob25DbGlja1ZpZXdGb3Jtcyk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tWaWV3Rm9ybXMoJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrU2F2ZUZvcm0pPVwidGhpcy5oYW5kbGVPbkNsaWNrU2F2ZUZvcm0oJGV2ZW50KVwiXG4gICAgICA+PC9rd2lraWQtZm9ybS12aWV3PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdlxuICBuZ0NsYXNzPVwia3dpa2lkLWZvcm1zLXJlbmRlcmVyLWxvYWRlclwiXG4gICpuZ0lmPVwibG9hZGVyXCJcbj5cbiAgPHNwYW4gY2xhc3M9XCJsb2FkZXJcIj48L3NwYW4+XG48L2Rpdj5cbjx0dWktcHVzaFxuICBpZD1cImVycm9yLW5vdGlmaWNhdGlvblwiXG4gICp0dWlQdXNoPVwic2hvd0Vycm9yTm90aWZpY2F0aW9uXCJcbiAgaGVhZGluZz1cIlBsZWFzZSBjb21wbGV0ZSB0aGUgcmVxdWlyZWQgRm9ybXMhXCJcbiAgdHlwZT1cIkVycm9yXCJcbiAgKGNsb3NlKT1cInRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKVwiXG4+XG4gIDx0dWktc3ZnXG4gICAgc3JjPVwidHVpSWNvbkNhbmNlbFwiXG4gICAgc3R5bGU9XCJjb2xvcjogI2ZmZiAhaW1wb3J0YW50XCJcbiAgPlxuICA8L3R1aS1zdmc+XG48L3R1aS1wdXNoPlxuIl19
|