tuain-ng-forms-lib 15.1.17 → 15.2.1

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.
@@ -10,6 +10,9 @@ const HIDE = 'hide';
10
10
  const ENABLE = 'enable';
11
11
  const DISABLE = 'disable';
12
12
  const CLEAN = 'clean';
13
+ const alwaysVisible = 'ALWAYS';
14
+ const neverVisible = 'NONE';
15
+ const onStatesVisible = 'ONSTATES';
13
16
  export class FormStructureAndData {
14
17
  constructor() {
15
18
  this._stateChange = new Subject();
@@ -53,6 +56,7 @@ export class FormStructureAndData {
53
56
  }
54
57
  loadDefinition(definitionReceived) {
55
58
  this.state = '';
59
+ let allStates = [];
56
60
  this.cleanForm();
57
61
  if (!definitionReceived) {
58
62
  return;
@@ -60,6 +64,7 @@ export class FormStructureAndData {
60
64
  this.name = this.name ?? definitionReceived?.form?.formCode;
61
65
  this.title = (definitionReceived.form && definitionReceived.form.formTitle)
62
66
  ? definitionReceived.form.formTitle : '';
67
+ allStates = definitionReceived?.states?.map(sttInfo => sttInfo.name);
63
68
  this.setStateFlow(definitionReceived?.states, definitionReceived?.transitions, definitionReceived?.defaultState, definitionReceived?.stateDescriptions);
64
69
  this.immutableData = definitionReceived.immutableData;
65
70
  this.extraInfo = definitionReceived.extraInfo;
@@ -69,14 +74,17 @@ export class FormStructureAndData {
69
74
  }
70
75
  if (definitionReceived.actions) {
71
76
  const formActions = definitionReceived.actions.map(objDef => {
72
- let visibleStates = objDef.visibleStates;
73
- let enabledStates = objDef.enabledStates ?? objDef.editableStates;
74
- if (!visibleStates) {
75
- visibleStates = (objDef.actionModes || '').split(',')
76
- .map(state => state.trim())
77
- .filter(state => state.length > 0) || [];
78
- enabledStates = [...visibleStates];
77
+ let visibleStates = objDef.visibleStates
78
+ ?? (objDef.actionModes?.split(',')?.map(state => state.trim())?.filter(state => state))
79
+ ?? [];
80
+ let enabledStates = objDef.enabledStates ?? objDef.editableStates ?? [];
81
+ if (!Array.isArray(visibleStates) && typeof visibleStates === 'string') {
82
+ visibleStates = (visibleStates === neverVisible) ? [] : allStates;
79
83
  }
84
+ if (!Array.isArray(enabledStates) && typeof enabledStates === 'string') {
85
+ enabledStates = (enabledStates === neverVisible) ? [] : visibleStates;
86
+ }
87
+ enabledStates = enabledStates.filter(state => visibleStates.includes(state));
80
88
  return { ...objDef, visibleStates, enabledStates };
81
89
  });
82
90
  for (const actionReceived of formActions) {
@@ -90,14 +98,17 @@ export class FormStructureAndData {
90
98
  }
91
99
  if (definitionReceived.fields) {
92
100
  const formFields = definitionReceived.fields.map(objDef => {
93
- let visibleStates = objDef.visibleStates;
94
- let enabledStates = objDef.enabledStates ?? objDef.editableStates;
95
- if (!visibleStates) {
96
- visibleStates = (objDef.fieldModes || '').split(',')
97
- .map(state => state.trim())
98
- .filter(state => state.length > 0) || [];
99
- enabledStates = [...visibleStates];
101
+ let visibleStates = objDef.visibleStates
102
+ ?? (objDef.fieldModes?.split(',')?.map(state => state.trim())?.filter(state => state))
103
+ ?? [];
104
+ let enabledStates = objDef.enabledStates ?? objDef.editableStates ?? [];
105
+ if (!Array.isArray(visibleStates) && typeof visibleStates === 'string') {
106
+ visibleStates = (visibleStates === neverVisible) ? [] : allStates;
107
+ }
108
+ if (!Array.isArray(enabledStates) && typeof enabledStates === 'string') {
109
+ enabledStates = (enabledStates === neverVisible) ? [] : visibleStates;
100
110
  }
111
+ enabledStates = enabledStates.filter(state => visibleStates.includes(state));
101
112
  return { ...objDef, visibleStates, enabledStates };
102
113
  });
103
114
  for (const fieldReceived of formFields) {
@@ -111,14 +122,17 @@ export class FormStructureAndData {
111
122
  }
112
123
  if (definitionReceived.tables) {
113
124
  const tables = definitionReceived.tables.map(objDef => {
114
- let visibleStates = objDef.visibleStates;
115
- let enabledStates = objDef.enabledStates || objDef.editableStates;
116
- if (!visibleStates) {
117
- visibleStates = (objDef.tableModes || '').split(',')
118
- .map(state => state.trim())
119
- .filter(state => state.length > 0) || [];
120
- enabledStates = [...visibleStates];
125
+ let visibleStates = objDef.visibleStates
126
+ ?? (objDef.tableModes?.split(',')?.map(state => state.trim())?.filter(state => state))
127
+ ?? [];
128
+ let enabledStates = objDef.enabledStates ?? objDef.editableStates ?? [];
129
+ if (!Array.isArray(visibleStates) && typeof visibleStates === 'string') {
130
+ visibleStates = (visibleStates === neverVisible) ? [] : allStates;
131
+ }
132
+ if (!Array.isArray(enabledStates) && typeof enabledStates === 'string') {
133
+ enabledStates = (enabledStates === neverVisible) ? [] : visibleStates;
121
134
  }
135
+ enabledStates = enabledStates.filter(state => visibleStates.includes(state));
122
136
  return { ...objDef, visibleStates, enabledStates };
123
137
  });
124
138
  for (const tableReceived of tables) {
@@ -132,11 +146,11 @@ export class FormStructureAndData {
132
146
  }
133
147
  if (definitionReceived.sections) {
134
148
  const formSections = definitionReceived.sections.map(objDef => {
135
- let visibleStates = objDef.visibleStates;
136
- if (!visibleStates) {
137
- visibleStates = (objDef.sectionModes || '').split(',')
138
- .map(state => state.trim())
139
- .filter(state => state.length > 0) || [];
149
+ let visibleStates = objDef.visibleStates
150
+ ?? (objDef.sectionModes?.split(',')?.map(state => state.trim())?.filter(state => state))
151
+ ?? [];
152
+ if (!Array.isArray(visibleStates) && typeof visibleStates === 'string') {
153
+ visibleStates = (visibleStates === neverVisible) ? [] : allStates;
140
154
  }
141
155
  return { ...objDef, visibleStates };
142
156
  });
@@ -557,4 +571,4 @@ export class FormStructureAndData {
557
571
  */
558
572
  getformSubject() { return this.subject ?? ''; }
559
573
  }
560
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NsYXNzZXMvZm9ybXMvZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEMsT0FBTyxFQUFFLGVBQWUsRUFBZSxNQUFNLFNBQVMsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU5QyxPQUFPLEVBQVksTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHcEQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNwQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFDcEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUMxQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUF1Q3RCLE1BQU0sT0FBTyxvQkFBb0I7SUFxQi9CO1FBcEJpQixpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFHbkQsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ1QsWUFBTyxHQUFrQixJQUFJLENBQUM7UUFFOUIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUtoQixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hC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YyxLQUFhLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBRXhEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRm9ybUFjdGlvbiB9IGZyb20gJy4vYWN0aW9uJztcbmltcG9ydCB7IEZpZWxkRGVzY3JpcHRvciwgRmllbGRPcHRpb24gfSBmcm9tICcuL2ZpZWxkJztcbmltcG9ydCB7IFJlY29yZFRhYmxlIH0gZnJvbSAnLi90YWJsZS90YWJsZSc7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU2VjdGlvbiB9IGZyb20gJy4vc2VjdGlvbic7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU3ViU2VjdGlvbiB9IGZyb20gJy4vc3Vic2VjdGlvbic7XG5pbXBvcnQgeyBOT19FUlJPUiwgSEVBREVSIH0gZnJvbSAnLi9mb3JtLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBUYWJsZVJlY29yZERhdGEgfSBmcm9tICcuL3RhYmxlL3Jvdy1kYXRhJztcblxuY29uc3QgQUNUSVZFID0gJ2FjdGl2ZSc7XG5jb25zdCBTSE9XID0gJ3Nob3cnO1xuY29uc3QgSElERSA9ICdoaWRlJztcbmNvbnN0IEVOQUJMRSA9ICdlbmFibGUnO1xuY29uc3QgRElTQUJMRSA9ICdkaXNhYmxlJztcbmNvbnN0IENMRUFOID0gJ2NsZWFuJztcbmludGVyZmFjZSBUcmFuc2l0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgZGVzdGluYXRpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN0YXRlRmxvdyB7XG4gIGRlZmF1bHRTdGF0ZTogc3RyaW5nO1xuICBzdGF0ZXM6IHN0cmluZ1tdO1xuICBzdGF0ZURlc2NyaXB0aW9uczogc3RyaW5nW107XG4gIHRyYW5zaXRpb25zOiBUcmFuc2l0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRQYXlsb2FkIHtcbiAgZmllbGRDb2RlOiBzdHJpbmc7XG4gIGZpZWxkVmFsdWU6IGFueTtcbiAgZWRpdGFibGU6IGJvb2xlYW47XG4gIHZpc2libGU6IGJvb2xlYW47XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICBmaWVsZE9wdGlvbnM6IHN0cmluZyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZVBheWxvYWQge1xuICB0YWJsZUNvZGU6IHN0cmluZztcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgY3VycmVudFBhZ2U6IG51bWJlcjtcbiAgcmVxdWVzdGVkUGFnZTogbnVtYmVyO1xuICByZWNvcmRzUGVyUGFnZTogbnVtYmVyO1xuICBjdXJyZW50RmlsdGVyOiBhbnksXG4gIHNvcnRpbmdDb2x1bW46IHN0cmluZztcbiAgc29ydGluZ0RpcmVjdGlvbjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRm9ybVBheWxvYWQge1xuICBmaWVsZHM6IEZpZWxkUGF5bG9hZFtdLFxuICB0YWJsZXM6IFRhYmxlUGF5bG9hZFtdLFxufVxuXG5leHBvcnQgY2xhc3MgRm9ybVN0cnVjdHVyZUFuZERhdGEge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNoYW5nZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgZm9ybUNvbmZpZzogYW55O1xuICBzdGF0ZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmcgPSAnJztcbiAgdGl0bGU6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc3ViamVjdDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBzdGF0ZUZsb3c6IFN0YXRlRmxvdztcbiAgcHJvdGVjdGVkIGZpZWxkcyA9IHt9O1xuICBwcm90ZWN0ZWQgYWN0aW9ucyA9IHt9O1xuICBwcm90ZWN0ZWQgdGFibGVzID0ge307XG4gIHByb3RlY3RlZCBzZWN0aW9ucyA9IHt9O1xuICBwcm90ZWN0ZWQgZmllbGRBcnJheTogRmllbGREZXNjcmlwdG9yW107XG4gIHByb3RlY3RlZCBhY3Rpb25BcnJheTogRm9ybUFjdGlvbltdO1xuICBwcm90ZWN0ZWQgdGFibGVBcnJheTogUmVjb3JkVGFibGVbXTtcbiAgcHJvdGVjdGVkIHNlY3Rpb25BcnJheTogUmVjb3JkRm9ybVNlY3Rpb25bXTtcbiAgcHJpdmF0ZSBfaW1tdXRhYmxlRGF0YSA9IHt9O1xuICBwcml2YXRlIF9leHRyYUluZm8gPSB7fTtcbiAgcHJpdmF0ZSBfZXhjbHVzaXZlU2VjdGlvbnNCeUF0dHIgPSB7fTtcbiAgcHVibGljIGN1c3RvbUF0dHJpYnV0ZXM6IGFueSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3RhdGUgPSAnJztcbiAgICB0aGlzLmFjdGlvbkFycmF5ID0gW107XG4gICAgdGhpcy5maWVsZEFycmF5ID0gW107XG4gICAgdGhpcy50YWJsZUFycmF5ID0gW107XG4gICAgdGhpcy5zZWN0aW9uQXJyYXkgPSBbXTtcbiAgICB0aGlzLnN0YXRlRmxvdyA9IHtcbiAgICAgIGRlZmF1bHRTdGF0ZTogJycsXG4gICAgICBzdGF0ZXM6IFtdLFxuICAgICAgc3RhdGVEZXNjcmlwdGlvbnM6IFtdLFxuICAgICAgdHJhbnNpdGlvbnM6IFtdLFxuICAgIH07XG4gIH1cblxuICBzZXRDb25maWcoZm9ybUNvbmZpZykge1xuICAgIHRoaXMuZm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG4gIH1cblxuICBjbGVhbkZvcm0oKSB7XG4gICAgdGhpcy5hY3Rpb25BcnJheSA9IFtdO1xuICAgIHRoaXMuZmllbGRBcnJheSA9IFtdO1xuICAgIHRoaXMudGFibGVBcnJheSA9IFtdO1xuICAgIHRoaXMuc2VjdGlvbkFycmF5ID0gW107XG4gICAgdGhpcy5zdGF0ZUZsb3cgPSB7XG4gICAgICBkZWZhdWx0U3RhdGU6ICcnLFxuICAgICAgc3RhdGVzOiBbXSxcbiAgICAgIHN0YXRlRGVzY3JpcHRpb25zOiBbXSxcbiAgICAgIHRyYW5zaXRpb25zOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgbG9hZERlZmluaXRpb24oZGVmaW5pdGlvblJlY2VpdmVkKSB7XG4gICAgdGhpcy5zdGF0ZSA9ICcnO1xuICAgIHRoaXMuY2xlYW5Gb3JtKCk7XG4gICAgaWYgKCFkZWZpbml0aW9uUmVjZWl2ZWQpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5uYW1lID0gdGhpcy5uYW1lID8/IGRlZmluaXRpb25SZWNlaXZlZD8uZm9ybT8uZm9ybUNvZGU7XG4gICAgdGhpcy50aXRsZSA9IChkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybSAmJiBkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybS5mb3JtVGl0bGUpXG4gICAgICA/IGRlZmluaXRpb25SZWNlaXZlZC5mb3JtLmZvcm1UaXRsZSA6ICcnO1xuICAgIHRoaXMuc2V0U3RhdGVGbG93KGRlZmluaXRpb25SZWNlaXZlZD8uc3RhdGVzLCBkZWZpbml0aW9uUmVjZWl2ZWQ/LnRyYW5zaXRpb25zLFxuICAgICAgZGVmaW5pdGlvblJlY2VpdmVkPy5kZWZhdWx0U3RhdGUsIGRlZmluaXRpb25SZWNlaXZlZD8uc3RhdGVEZXNjcmlwdGlvbnMpO1xuICAgIHRoaXMuaW1tdXRhYmxlRGF0YSA9IGRlZmluaXRpb25SZWNlaXZlZC5pbW11dGFibGVEYXRhO1xuICAgIHRoaXMuZXh0cmFJbmZvID0gZGVmaW5pdGlvblJlY2VpdmVkLmV4dHJhSW5mbztcbiAgICB0aGlzLmN1c3RvbUF0dHJpYnV0ZXMgPSB7fTtcbiAgICBpZiAoZGVmaW5pdGlvblJlY2VpdmVkPy5jdXN0b21BdHRyaWJ1dGVzKSB7XG4gICAgICB0aGlzLnNldEN1c3RvbUF0dHJpYnV0ZXMoZGVmaW5pdGlvblJlY2VpdmVkPy5jdXN0b21BdHRyaWJ1dGVzKTtcbiAgICB9XG4gICAgaWYgKGRlZmluaXRpb25SZWNlaXZlZC5hY3Rpb25zKSB7XG4gICAgICBjb25zdCBmb3JtQWN0aW9ucyA9IGRlZmluaXRpb25SZWNlaXZlZC5hY3Rpb25zLm1hcChvYmpEZWYgPT4ge1xuICAgICAgICBsZXQgdmlzaWJsZVN0YXRlcyA9IG9iakRlZi52aXNpYmxlU3RhdGVzO1xuICAgICAgICBsZXQgZW5hYmxlZFN0YXRlcyA9IG9iakRlZi5lbmFibGVkU3RhdGVzID8/IG9iakRlZi5lZGl0YWJsZVN0YXRlcztcbiAgICAgICAgaWYgKCF2aXNpYmxlU3RhdGVzKSB7XG4gICAgICAgICAgdmlzaWJsZVN0YXRlcyA9IChvYmpEZWYuYWN0aW9uTW9kZXMgfHwgJycpLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoc3RhdGUgPT4gc3RhdGUudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5sZW5ndGggPiAwKSB8fCBbXTtcbiAgICAgICAgICBlbmFibGVkU3RhdGVzID0gWy4uLnZpc2libGVTdGF0ZXNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLm9iakRlZiwgdmlzaWJsZVN0YXRlcywgZW5hYmxlZFN0YXRlcyB9O1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGFjdGlvblJlY2VpdmVkIG9mIGZvcm1BY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbEFjdGlvbiA9IG5ldyBGb3JtQWN0aW9uKGFjdGlvblJlY2VpdmVkLCB0aGlzLmZvcm1Db25maWcpO1xuICAgICAgICBjb25zdCBnbG9iYWxBY3Rpb25Db2RlID0gZ2xvYmFsQWN0aW9uLmFjdGlvbkNvZGU7XG4gICAgICAgIGlmIChnbG9iYWxBY3Rpb25Db2RlKSB7XG4gICAgICAgICAgdGhpcy5hY3Rpb25BcnJheS5wdXNoKGdsb2JhbEFjdGlvbik7XG4gICAgICAgICAgdGhpcy5hY3Rpb25zW2dsb2JhbEFjdGlvbkNvZGVdID0gZ2xvYmFsQWN0aW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmluaXRpb25SZWNlaXZlZC5maWVsZHMpIHtcbiAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSBkZWZpbml0aW9uUmVjZWl2ZWQuZmllbGRzLm1hcChvYmpEZWYgPT4ge1xuICAgICAgICBsZXQgdmlzaWJsZVN0YXRlcyA9IG9iakRlZi52aXNpYmxlU3RhdGVzO1xuICAgICAgICBsZXQgZW5hYmxlZFN0YXRlcyA9IG9iakRlZi5lbmFibGVkU3RhdGVzID8/IG9iakRlZi5lZGl0YWJsZVN0YXRlcztcbiAgICAgICAgaWYgKCF2aXNpYmxlU3RhdGVzKSB7XG4gICAgICAgICAgdmlzaWJsZVN0YXRlcyA9IChvYmpEZWYuZmllbGRNb2RlcyB8fCAnJykuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApIHx8IFtdO1xuICAgICAgICAgIGVuYWJsZWRTdGF0ZXMgPSBbLi4udmlzaWJsZVN0YXRlc107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4ub2JqRGVmLCB2aXNpYmxlU3RhdGVzLCBlbmFibGVkU3RhdGVzIH07XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZmllbGRSZWNlaXZlZCBvZiBmb3JtRmllbGRzKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkVG9BZGQgPSBuZXcgRmllbGREZXNjcmlwdG9yKGZpZWxkUmVjZWl2ZWQsIHRoaXMuZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGZpZWxkQ29kZSA9IGZpZWxkVG9BZGQuY29kZTtcbiAgICAgICAgaWYgKGZpZWxkQ29kZSkge1xuICAgICAgICAgIHRoaXMuZmllbGRBcnJheS5wdXNoKGZpZWxkVG9BZGQpO1xuICAgICAgICAgIHRoaXMuZmllbGRzW2ZpZWxkQ29kZV0gPSBmaWVsZFRvQWRkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmluaXRpb25SZWNlaXZlZC50YWJsZXMpIHtcbiAgICAgIGNvbnN0IHRhYmxlcyA9IGRlZmluaXRpb25SZWNlaXZlZC50YWJsZXMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXM7XG4gICAgICAgIGxldCBlbmFibGVkU3RhdGVzID0gb2JqRGVmLmVuYWJsZWRTdGF0ZXMgfHwgb2JqRGVmLmVkaXRhYmxlU3RhdGVzO1xuICAgICAgICBpZiAoIXZpc2libGVTdGF0ZXMpIHtcbiAgICAgICAgICB2aXNpYmxlU3RhdGVzID0gKG9iakRlZi50YWJsZU1vZGVzIHx8ICcnKS5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKHN0YXRlID0+IHN0YXRlLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoc3RhdGUgPT4gc3RhdGUubGVuZ3RoID4gMCkgfHwgW107XG4gICAgICAgICAgZW5hYmxlZFN0YXRlcyA9IFsuLi52aXNpYmxlU3RhdGVzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5vYmpEZWYsIHZpc2libGVTdGF0ZXMsIGVuYWJsZWRTdGF0ZXMgfTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCB0YWJsZVJlY2VpdmVkIG9mIHRhYmxlcykge1xuICAgICAgICBjb25zdCB0YWJsZVRvQWRkID0gbmV3IFJlY29yZFRhYmxlKHRhYmxlUmVjZWl2ZWQsIHRoaXMuZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IHRhYmxlQ29kZSA9IHRhYmxlVG9BZGQudGFibGVDb2RlO1xuICAgICAgICBpZiAodGFibGVDb2RlKSB7XG4gICAgICAgICAgdGhpcy50YWJsZUFycmF5LnB1c2godGFibGVUb0FkZCk7XG4gICAgICAgICAgdGhpcy50YWJsZXNbdGFibGVDb2RlXSA9IHRhYmxlVG9BZGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmaW5pdGlvblJlY2VpdmVkLnNlY3Rpb25zKSB7XG4gICAgICBjb25zdCBmb3JtU2VjdGlvbnMgPSBkZWZpbml0aW9uUmVjZWl2ZWQuc2VjdGlvbnMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXM7XG4gICAgICAgIGlmICghdmlzaWJsZVN0YXRlcykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAob2JqRGVmLnNlY3Rpb25Nb2RlcyB8fCAnJykuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLm9iakRlZiwgdmlzaWJsZVN0YXRlcyB9O1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHNlY3Rpb25SZWNlaXZlZCBvZiBmb3JtU2VjdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvblRvQWRkID0gbmV3IFJlY29yZEZvcm1TZWN0aW9uKHNlY3Rpb25SZWNlaXZlZCwgdGhpcywgdGhpcy5mb3JtQ29uZmlnKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkNvZGUgPSBzZWN0aW9uVG9BZGQuc2VjdGlvbkNvZGU7XG4gICAgICAgIGlmIChzZWN0aW9uQ29kZSkge1xuICAgICAgICAgIHRoaXMuc2VjdGlvbkFycmF5LnB1c2goc2VjdGlvblRvQWRkKTtcbiAgICAgICAgICB0aGlzLnNlY3Rpb25zW3NlY3Rpb25Db2RlXSA9IHNlY3Rpb25Ub0FkZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEVzdGFkb3NcbiAgZ2V0IGRlZmF1bHRTdGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdGF0ZUZsb3cuZGVmYXVsdFN0YXRlOyB9XG4gIGdldCBzdGF0ZXMoKTogYW55W10geyByZXR1cm4gdGhpcy5zdGF0ZUZsb3cuc3RhdGVzOyB9XG4gIGdldCBzdGF0ZURlc2NyaXB0aW9ucygpOiBhbnlbXSB7IHJldHVybiB0aGlzLnN0YXRlRmxvdy5zdGF0ZURlc2NyaXB0aW9uczsgfVxuICBzdXBwb3J0U3RhdGUoc3RhdGU6IHN0cmluZyA9ICcnKTogYm9vbGVhbiB7IHJldHVybiAoISFzdGF0ZSAmJiB0aGlzLnN0YXRlRmxvdy5zdGF0ZXM/LmluY2x1ZGVzKHN0YXRlKSk7IH1cblxuICBnZXROZXh0U3RhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZUZsb3cudHJhbnNpdGlvbnMuZmlsdGVyKHRybnMgPT4gdHJucy5zb3VyY2UgPT09IHRoaXMuc3RhdGUpXG4gICAgICAubWFwKHRybnMgPT4gdHJucy5kZXN0aW5hdGlvbik7XG4gIH1cblxuICBjaGFuZ2VTdGF0ZShuZXdTdGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICBpZiAoIW5ld1N0YXRlIHx8ICF0aGlzLnN1cHBvcnRTdGF0ZShuZXdTdGF0ZSkgfHwgY3VycmVudFN0YXRlID09PSBuZXdTdGF0ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHJhbnNpdGlvblRvQ2hhbmdlID0gdGhpcy5zdGF0ZUZsb3cudHJhbnNpdGlvbnMuZmluZCh0cm5zID0+XG4gICAgICAgIHRybnMuc291cmNlID09PSB0aGlzLnN0YXRlICYmIHRybnMuZGVzdGluYXRpb24gPT09IG5ld1N0YXRlKTtcbiAgICAgIGlmICh0cmFuc2l0aW9uVG9DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9zdGF0ZUNoYW5nZS5uZXh0KHsgc3RhdGU6IHRoaXMuc3RhdGUgfSk7XG4gICAgcmV0dXJuICh0aGlzLnN0YXRlID09PSBuZXdTdGF0ZSk7XG4gIH1cblxuICBnZXQgc3RhdGVDaGFuZ2UoKSB7IHJldHVybiB0aGlzLl9zdGF0ZUNoYW5nZTsgfVxuXG4gIHNldFN0YXRlRmxvdyhzdGF0ZXM/LCB0cmFuc2l0aW9ucz8sIGRlZmF1bHRTdGF0ZT86IHN0cmluZywgc3RhdGVEZXNjcmlwdGlvbnMgPSBbXSk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVGbG93LnN0YXRlcyA9IHN0YXRlcztcbiAgICB0aGlzLnN0YXRlRmxvdy5zdGF0ZURlc2NyaXB0aW9ucyA9IHN0YXRlRGVzY3JpcHRpb25zO1xuICAgIHRoaXMuc3RhdGVGbG93LmRlZmF1bHRTdGF0ZSA9IGRlZmF1bHRTdGF0ZSB8fCB0aGlzLnN0YXRlRmxvdy5zdGF0ZXNbMF07XG4gICAgdGhpcy5zdGF0ZUZsb3cudHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9ucy5tYXAodHJhbnNpdGlvbiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdHJhbnNpdGlvbi5uYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gKHRoaXMuc3RhdGVGbG93LnN0YXRlcy5pbmNsdWRlcyh0cmFuc2l0aW9uLnNvdXJjZSkpID8gdHJhbnNpdGlvbi5zb3VyY2UgOiAnJztcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gKHRoaXMuc3RhdGVGbG93LnN0YXRlcy5pbmNsdWRlcyh0cmFuc2l0aW9uLmRlc3RpbmF0aW9uKSkgPyB0cmFuc2l0aW9uLmRlc3RpbmF0aW9uIDogJyc7XG4gICAgICByZXR1cm4geyBuYW1lLCBzb3VyY2UsIGRlc3RpbmF0aW9uIH07XG4gICAgfSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5uYW1lICYmIGl0ZW0uc291cmNlICYmIGl0ZW0uZGVzdGluYXRpb24pO1xuICB9XG5cbiAgLy8gaW1tdXRhYmxlIERhdGFcbiAgZ2V0SW1tdXRhYmxlRWxlbWVudChuYW1lOiBzdHJpbmcpOiBhbnkgeyByZXR1cm4gdGhpcy5faW1tdXRhYmxlRGF0YT8uW25hbWVdPy52YWx1ZSA/PyBudWxsOyB9XG4gIHNldCBpbW11dGFibGVEYXRhKGltbXV0YWJsZURhdGEpIHsgT2JqZWN0LmFzc2lnbih0aGlzLl9pbW11dGFibGVEYXRhLCBpbW11dGFibGVEYXRhKTsgfVxuICBnZXQgaW1tdXRhYmxlRGF0YSgpOiBhbnkgeyByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9pbW11dGFibGVEYXRhKSk7IH1cblxuICAvLyBleHRyYSBJbmZvXG4gIGdldEV4dHJhSW5mbyhuYW1lOiBzdHJpbmcpOiBhbnkgeyByZXR1cm4gdGhpcy5fZXh0cmFJbmZvPy5bbmFtZV0/LnZhbHVlID8/IG51bGw7IH1cbiAgc2V0IGV4dHJhSW5mbyhleHRyYUluZm8pIHsgT2JqZWN0LmFzc2lnbih0aGlzLl9leHRyYUluZm8sIGV4dHJhSW5mbyk7IH1cbiAgZ2V0IGV4dHJhSW5mbygpOiBhbnkgeyByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9leHRyYUluZm8pKTsgfVxuXG4gIC8vIEN1c3RvbSBBdHRyaWJ1dGVzXG4gIGdldEN1c3RvbUF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpOiBhbnkgeyByZXR1cm4gdGhpcy5jdXN0b21BdHRyaWJ1dGVzPy5bbmFtZV0gPz8gbnVsbDsgfVxuICBzZXRDdXN0b21BdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7IGlmIChuYW1lKSB7IHRoaXMuY3VzdG9tQXR0cmlidXRlc1tuYW1lXSA9IHZhbHVlOyB9IH1cbiAgc2V0Q3VzdG9tQXR0cmlidXRlcyhhdHRyaWJ1dGVzOiBhbnkpOiBGb3JtU3RydWN0dXJlQW5kRGF0YSB7XG4gICAgaWYgKGF0dHJpYnV0ZXMgJiYgdHlwZW9mIGF0dHJpYnV0ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0Q3VzdG9tQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEZpZWxkc1xuICBnZXQgZmllbGROYW1lcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmdldEZpZWxkTmFtZXMoKTsgfVxuICBnZXRGaWVsZHMoKTogRmllbGREZXNjcmlwdG9yW10geyByZXR1cm4gdGhpcy5maWVsZEFycmF5OyB9XG4gIGdldEZpZWxkTmFtZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5maWVsZEFycmF5Lm1hcChmaWVsZCA9PiBmaWVsZC5jb2RlKTsgfVxuICBnZXRGaWVsZChjb2RlOiBzdHJpbmcpOiBGaWVsZERlc2NyaXB0b3IgeyByZXR1cm4gKGNvZGUgJiYgdGhpcy5maWVsZHM/Lltjb2RlXSkgPyB0aGlzLmZpZWxkc1tjb2RlXSA6IG51bGw7IH1cbiAgZW5hYmxlRmllbGQoY29kZTogc3RyaW5nKTogdm9pZCB7IHRoaXMuZ2V0RmllbGQoY29kZSk/LmVuYWJsZSgpOyB9XG4gIGRpc2FibGVGaWVsZChjb2RlOiBzdHJpbmcpOiB2b2lkIHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uZGlzYWJsZSgpOyB9XG4gIGdldEZpZWxkVmFsdWUoY29kZTogc3RyaW5nKTogYW55IHsgcmV0dXJuIHRoaXMuZ2V0RmllbGQoY29kZSk/LnZhbHVlOyB9XG4gIGdldEZpZWxkT3B0aW9uVGV4dChjb2RlOiBzdHJpbmcpOiBhbnkgeyByZXR1cm4gdGhpcy5nZXRGaWVsZChjb2RlKT8ub3B0aW9uVGV4dDsgfVxuICBnZXRGaWVsZE9wdGlvbnMoY29kZTogc3RyaW5nKTogRmllbGRPcHRpb25bXSB8IG51bGwgeyByZXR1cm4gdGhpcy5nZXRGaWVsZChjb2RlKT8ub3B0aW9ucyA/PyBudWxsOyB9XG4gIHNldEZpZWxkVmFsdWUoY29kZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uc2V0VmFsdWUodmFsdWUpOyB9XG4gIHNldEZpZWxkRXJyb3IoY29kZTogc3RyaW5nLCBlcnJvckNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcgPSAnZXJyb3InKTogYW55IHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uc2V0RXJyb3IoZXJyb3JDb2RlLCBtZXNzYWdlLCB0eXBlKTsgfVxuICBzZXRGaWVsZEludHJpbnNpY0Vycm9yTWVzc2FnZShjb2RlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IGFueSB7IHRoaXMuZ2V0RmllbGQoY29kZSk/LnNldEludHJpbnNpY0Vycm9yTWVzc2FnZShtZXNzYWdlKTsgfVxuXG4gIHNldEZpZWxkUmVxdWlyZWQoaW5wdXRDb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCByZXF1aXJlZDogYm9vbGVhbik6IGFueSB7XG4gICAgY29uc3QgY29kZXMgPSB0aGlzLmdldEZpZWxkU2V0KG51bGwsIGlucHV0Q29kZXMgPz8gbnVsbCk7XG4gICAgZm9yIChjb25zdCBjb2RlIG9mIGNvZGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ2V0RmllbGQoY29kZSkgPz8gbnVsbDtcbiAgICAgICAgZmllbGQgJiYgKGZpZWxkLnJlcXVpcmVkID0gcmVxdWlyZWQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3IgbW9kaWZpY2FuZG8gY2FtcG8gJHtjb2RlfTogJHtlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEZpZWxkRXJyb3JNZXNzYWdlKGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogYW55IHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uc2V0RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOyB9XG5cbiAgc2V0RmllbGRPcHRpb25zKGNvZGU6IHN0cmluZywgb3B0aW9uc0FycmF5OiBhbnlbXSwgaWRBdHRyaWJ1dGU6IHN0cmluZywgbmFtZUF0dHJpYnV0ZTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ2V0RmllbGQoY29kZSk7XG4gICAgaWYgKGZpZWxkICYmIG9wdGlvbnNBcnJheSkge1xuICAgICAgY29uc3QgZmllbGRPcHRpb25zID0gb3B0aW9uc0FycmF5Lm1hcChpdGVtID0+ICh7XG4gICAgICAgIGZpZWxkT3B0aW9uSWQ6IGl0ZW1baWRBdHRyaWJ1dGVdLFxuICAgICAgICBmaWVsZE9wdGlvblZhbHVlOiBpdGVtW25hbWVBdHRyaWJ1dGVdXG4gICAgICB9KSk7XG4gICAgICBmaWVsZC5zZXRGaWVsZE9wdGlvbnMoZmllbGRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBnZXRGaWVsZFNldChmaWx0ZXIsIGlucHV0Q29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZyB8IG51bGwsIHN1YkNvZGU/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nW10ge1xuICAgIGxldCBjb2RlczogYW55W10gPSBbXTtcbiAgICBpZiAoaW5wdXRDb2Rlcykge1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dENvZGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb2RlcyA9IFtpbnB1dENvZGVzXTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpbnB1dENvZGVzKSAmJiBpbnB1dENvZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29kZXMgPSBpbnB1dENvZGVzID8/IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2VjQ29kZSAmJiAhc3ViQ29kZSkge1xuICAgICAgY29kZXMgPSB0aGlzLmdldFNlY3Rpb24oc2VjQ29kZSk/LmdldEZpZWxkTmFtZXMoKSA/PyBbXTtcbiAgICB9IGVsc2UgaWYgKHNlY0NvZGUgJiYgc3ViQ29kZSkge1xuICAgICAgY29kZXMgPSB0aGlzLmdldFN1YlNlY3Rpb24oc2VjQ29kZSwgc3ViQ29kZSk/LmdldEZpZWxkTmFtZXMoKSA/PyBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29kZXMgPSB0aGlzLmdldEZpZWxkTmFtZXMoKSA/PyBbXTtcbiAgICB9XG4gICAgcmV0dXJuIChmaWx0ZXIpID8gY29kZXMuZmlsdGVyKGZsZCA9PiBmaWx0ZXIodGhpcy5nZXRGaWVsZChmbGQpKSkgOiBjb2RlcztcbiAgfVxuXG4gIGFwcGx5T25GaWVsZHMocHJvY2Vzc0Z1bmMsIGlucHV0Q29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmICghcHJvY2Vzc0Z1bmMpIHsgcmV0dXJuIDA7IH1cbiAgICBjb25zdCBjb2RlcyA9IHRoaXMuZ2V0RmllbGRTZXQobnVsbCwgaW5wdXRDb2RlcyA/PyBudWxsLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgICBsZXQgcHJvY2Vzc2VkRmllbGRzID0gMDtcbiAgICBmb3IgKGNvbnN0IGNvZGUgb2YgY29kZXMpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZChjb2RlKTtcbiAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHByb2Nlc3NGdW5jKGZpZWxkKTtcbiAgICAgICAgICBwcm9jZXNzZWRGaWVsZHMgKz0gMTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvciBwcm9jZXNhbmRvIGZ1bmNpb24gZW4gY2FtcG8gJHtmaWVsZH06ICR7ZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzc2VkRmllbGRzO1xuICB9XG5cbiAgYXBwbHlQcm9jZXNzVG9BbGxGaWVsZHMocHJvY2Vzc0Z1bmMpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseU9uRmllbGRzKHByb2Nlc3NGdW5jKTtcbiAgfVxuXG4gIGVuYWJsZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlPbkZpZWxkcyhmbGQgPT4gZmxkPy5lbmFibGUoKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgc2hvd0ZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlPbkZpZWxkcyhmbGQgPT4gZmxkPy5zaG93KCksIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIGhpZGVGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZD8uaGlkZSgpLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBzaG93TGFiZWxGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZD8uc2hvd0xhYmxlbCgpLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBoaWRlTGFiZWxGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZD8uaGlkZUxhYmVsKCksIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIGRpc2FibGVGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZD8uZGlzYWJsZSgpLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBjbGVhbkZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlPbkZpZWxkcyhmbGQgPT4gZmxkPy5jbGVhbigpLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICB0YWdGaWVsZHNXaXRoRXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlPbkZpZWxkcyhmbGQgPT4gZmxkPy5zZXRFcnJvck1lc3NhZ2UobWVzc2FnZSksIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIGNsZWFuRXJyb3JGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcignJywgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgdGFnRW1wdHlSZXF1aXJlZEZpZWxkcyhtZXNzYWdlOiBzdHJpbmcsIGNvZGVzID0gbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcihtZXNzYWdlLCB0aGlzLmdldFJlcXVpcmVkRW1wdHlGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpKSA+IDA7XG4gIH1cblxuICBnZXRSZXF1aXJlZEZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFNldChmbGQgPT4gZmxkPy5yZXF1aXJlZCwgY29kZXMgPz8gbnVsbCwgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBnZXRSZXF1aXJlZEVtcHR5RmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nLCBvbmx5VmlzaWJsZT86IGJvb2xlYW4pOiBzdHJpbmdbXSB7XG4gICAgaWYgKG9ubHlWaXNpYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFNldChmbGQgPT4gZmxkPy5yZXF1aXJlZCAmJiBmbGQ/LnZpc2libGUgJiYgZmxkPy5lbXB0eSwgY29kZXMgPz8gbnVsbCwgc2VjQ29kZSwgc3ViQ29kZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiBmbGQ/LnJlcXVpcmVkICYmIGZsZD8uZW1wdHksIGNvZGVzID8/IG51bGwsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgZ2V0Q2hhbmdlZEZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFNldChmbGQgPT4gIWZsZD8ub3V0cHV0T25seSAmJiBmbGQ/Lmhhc0NoYW5nZWQsIGNvZGVzID8/IG51bGwsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcsIG9ubHlWaXNpYmxlPzogYm9vbGVhbik6IHN0cmluZ1tdIHtcbiAgICBpZiAob25seVZpc2libGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiAoZmxkPy5oYXNFcnJvcigpICYmIGZsZD8udmlzaWJsZSksIGNvZGVzID8/IG51bGwsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFNldChmbGQgPT4gZmxkPy5oYXNFcnJvcigpLCBjb2RlcyA/PyBudWxsLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIGdldEZpZWxkc1ZhbHVlcyhpbnB1dENvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBjb2RlcyA9IHRoaXMuZ2V0RmllbGRTZXQobnVsbCwgaW5wdXRDb2RlcyA/PyBudWxsLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgICBjb25zdCByZXN1bHRPYmplY3QgPSB7fTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29kZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBjb2RlID0gY29kZXNbaW5kZXhdO1xuICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgcmVzdWx0T2JqZWN0W2NvZGVdID0gdGhpcy5maWVsZHM/Lltjb2RlXT8uZ2V0VmFsdWUoKSA/PyBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0T2JqZWN0O1xuICB9XG5cbiAgLy8gQWNjaW9uZXNcbiAgZ2V0QWN0aW9ucygpOiBGb3JtQWN0aW9uW10geyByZXR1cm4gdGhpcy5hY3Rpb25BcnJheTsgfVxuICBnZXRBY3Rpb24oY29kZTogc3RyaW5nKTogRm9ybUFjdGlvbiB7IHJldHVybiAoY29kZSAmJiB0aGlzLmFjdGlvbnM/Lltjb2RlXSkgPyB0aGlzLmFjdGlvbnNbY29kZV0gOiBudWxsOyB9XG4gIHNob3dBY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25BY3Rpb25zKGNvZGVzLCBTSE9XKTsgfVxuICBoaWRlQWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uQWN0aW9ucyhjb2RlcywgSElERSk7IH1cbiAgZW5hYmxlQWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uQWN0aW9ucyhjb2RlcywgRU5BQkxFKTsgfVxuICBkaXNhYmxlQWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uQWN0aW9ucyhjb2RlcywgRElTQUJMRSk7IH1cbiAgZW5hYmxlQWN0aW9uKGNvZGU6IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5lbmFibGVBY3Rpb25zKGNvZGUpOyB9XG4gIGRpc2FibGVBY3Rpb24oY29kZTogc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmRpc2FibGVBY3Rpb25zKGNvZGUpOyB9XG4gIHNob3dBY3Rpb24oY29kZTogc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLnNob3dBY3Rpb25zKGNvZGUpOyB9XG4gIGhpZGVBY3Rpb24oY29kZTogc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmhpZGVBY3Rpb25zKGNvZGUpOyB9XG4gIGdldEhlYWRlckFjdGlvbnMoKSB7IHJldHVybiB0aGlzLmdldEFjdGlvbnNCeUF0dHJpYnV0ZSgnbG9jYXRpb24nLCBIRUFERVIpOyB9XG5cbiAgZ2V0QWN0aW9uc0J5QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWUpOiBGb3JtQWN0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmFjdGlvbkFycmF5LmZpbHRlcihhY3Rpb25JdGVtID0+IGFjdGlvbkl0ZW0ubWF0Y2hBdHRyaWJ1dGUobmFtZSwgdmFsdWUpKTtcbiAgfVxuXG4gIGV4ZWNPbkFjdGlvbnMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBhY3Rpb25Db2RlcyA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUgfHwgYWN0aW9uQ29kZXMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgIGFjdGlvbkNvZGVzLmZvckVhY2goY29kZSA9PiB7XG4gICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmdldEFjdGlvbihjb2RlKTtcbiAgICAgIGFjdGlvbj8uW2Z1bmN0aW9uTmFtZV0/LigpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVGFibGFzXG4gIGdldFRhYmxlcygpOiBSZWNvcmRUYWJsZVtdIHsgcmV0dXJuIHRoaXMudGFibGVBcnJheTsgfVxuICBnZXRUYWJsZShjb2RlOiBzdHJpbmcpOiBSZWNvcmRUYWJsZSB7IHJldHVybiAoY29kZSAmJiB0aGlzLnRhYmxlcz8uW2NvZGVdKSA/IHRoaXMudGFibGVzW2NvZGVdIDogbnVsbDsgfVxuICBnZXRUYWJsZVJlY29yZChjb2RlOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBUYWJsZVJlY29yZERhdGEgeyByZXR1cm4gdGhpcy5nZXRUYWJsZShjb2RlKT8uZ2V0VGFibGVSZWNvcmQoaWQpIH1cbiAgZW5hYmxlVGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25UYWJsZXMoY29kZXMsIEVOQUJMRSk7IH1cbiAgZGlzYWJsZVRhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uVGFibGVzKGNvZGVzLCBESVNBQkxFKTsgfVxuICBzaG93VGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25UYWJsZXMoY29kZXMsIFNIT1cpOyB9XG4gIGhpZGVUYWJsZXMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmV4ZWNPblRhYmxlcyhjb2RlcywgSElERSk7IH1cbiAgY2xlYW5UYWJsZXMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmV4ZWNPblRhYmxlcyhjb2RlcywgQ0xFQU4pOyB9XG4gIHNob3dUYWJsZShjb2RlOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuc2hvd1RhYmxlcyhjb2RlKTsgfVxuICBoaWRlVGFibGUoY29kZTogc3RyaW5nKSB7IHJldHVybiB0aGlzLmhpZGVUYWJsZXMoY29kZSk7IH1cbiAgY2xlYW5UYWJsZShjb2RlOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuZ2V0VGFibGUoY29kZSk/LmNsZWFuKCk7IH1cblxuICBleGVjT25UYWJsZXMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgZnVuY3Rpb25OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0YWJsZUNvZGVzID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSB8fCB0YWJsZUNvZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICB0YWJsZUNvZGVzLmZvckVhY2goY29kZSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgICB0YWJsZT8uW2Z1bmN0aW9uTmFtZV0/LigpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU2VjY2lvbmVzXG4gIGdldFNlY3Rpb25zKCk6IFJlY29yZEZvcm1TZWN0aW9uW10geyByZXR1cm4gdGhpcy5zZWN0aW9uQXJyYXk7IH1cbiAgZ2V0U2VjdGlvbnNUaXRsZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5nZXRTZWN0aW9ucygpPy5maWx0ZXIoc2VjID0+IHNlYz8udGl0bGUpLm1hcChzZWMgPT4gc2VjPy50aXRsZSA/PyAnJyk7IH1cbiAgbnVtU2VjdGlvbnMoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuc2VjdGlvbkFycmF5Lmxlbmd0aDsgfVxuICBnZXRTZWN0aW9uc0J5QXR0cmlidXRlKG5hbWUsIHZhbHVlKTogUmVjb3JkRm9ybVNlY3Rpb25bXSB7IHJldHVybiB0aGlzLnNlY3Rpb25BcnJheS5maWx0ZXIoaXRlbSA9PiBpdGVtLm1hdGNoQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7IH1cbiAgZ2V0IHNlY3Rpb25UaXRsZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5nZXRTZWN0aW9uc1RpdGxlcygpOyB9XG4gIGdldCB2aXNpYmxlU2VjdGlvbnMoKTogUmVjb3JkRm9ybVNlY3Rpb25bXSB7IHJldHVybiB0aGlzLnNlY3Rpb25BcnJheS5maWx0ZXIoc2VjID0+IHNlYy5hYnNvbHV0ZVZpc2libGUpOyB9XG4gIGdldFNlY3Rpb24oY29kZTogc3RyaW5nKTogUmVjb3JkRm9ybVNlY3Rpb24geyByZXR1cm4gKGNvZGUgJiYgdGhpcy5zZWN0aW9ucz8uW2NvZGVdKSA/IHRoaXMuc2VjdGlvbnNbY29kZV0gOiBudWxsOyB9XG4gIHNob3dTZWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgdGhpcy5leGVjT25TZWN0aW9ucyhjb2RlcywgU0hPVyk7IH1cbiAgaGlkZVNlY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyB0aGlzLmV4ZWNPblNlY3Rpb25zKGNvZGVzLCBISURFKTsgfVxuICBzaG93U2VjdGlvbihjb2RlOiBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuc2hvd1NlY3Rpb25zKGNvZGUpOyB9XG4gIGhpZGVTZWN0aW9uKGNvZGU6IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5oaWRlU2VjdGlvbnMoY29kZSk7IH1cbiAgYWN0aXZlU2VjdGlvbigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fZXhjbHVzaXZlU2VjdGlvbnNCeUF0dHJbQUNUSVZFXTsgfVxuICBnZXRTdWJTZWN0aW9uKGNvZGU6IHN0cmluZywgc3ViQ29kZSk6IFJlY29yZEZvcm1TdWJTZWN0aW9uIHsgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbihjb2RlKT8uZ2V0U3Vic2VjdGlvbihzdWJDb2RlKSA/PyBudWxsOyB9XG4gIHNob3dTdWJTZWN0aW9ucyhjb2RlOiBzdHJpbmcsIHN1YkNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25TdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2RlcywgU0hPVyk7IH1cbiAgc2hvd1N1YlNlY3Rpb24oY29kZTogc3RyaW5nLCBzdWJDb2RlOiBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuc2hvd1N1YlNlY3Rpb25zKGNvZGUsIHN1YkNvZGUpOyB9XG4gIGhpZGVTdWJTZWN0aW9uKGNvZGU6IHN0cmluZywgc3ViQ29kZTogc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmhpZGVTdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2RlKTsgfVxuICBoaWRlU3ViU2VjdGlvbnMoY29kZTogc3RyaW5nLCBzdWJDb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uU3ViU2VjdGlvbnMoY29kZSwgc3ViQ29kZXMsIEhJREUpOyB9XG4gIGdldFNlY3Rpb25BY3Rpb25zKGNvZGUpOiBGb3JtQWN0aW9uW10geyByZXR1cm4gdGhpcy5nZXRTZWN0aW9uKGNvZGUpPy5nZXRBY3Rpb25zKCkgPz8gbnVsbDsgfVxuICBnZXRTZWN0aW9uQWN0aW9uTmFtZXMoY29kZSk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbihjb2RlKT8uZ2V0QWN0aW9uTmFtZXMoKSA/PyBudWxsOyB9XG5cbiAgYWN0aXZhdGVTZWN0aW9uKGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChjb2RlID09PSB0aGlzLl9leGNsdXNpdmVTZWN0aW9uc0J5QXR0cltBQ1RJVkVdKSB7IHJldHVybjsgfVxuICAgIHRoaXMuZ2V0U2VjdGlvbih0aGlzLmFjdGl2ZVNlY3Rpb24oKSk/LmluYWN0aXZhdGUoKTtcbiAgICB0aGlzLmdldFNlY3Rpb24oY29kZSk/LmFjdGl2YXRlKCk7XG4gICAgdGhpcy5fZXhjbHVzaXZlU2VjdGlvbnNCeUF0dHJbQUNUSVZFXSA9IGNvZGU7XG4gIH1cblxuICBleGVjT25TZWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNlY3Rpb25Db2RlcyA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUgfHwgc2VjdGlvbkNvZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICBzZWN0aW9uQ29kZXMuZm9yRWFjaChjb2RlID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmdldFNlY3Rpb24oY29kZSk7XG4gICAgICBzZWN0aW9uPy5bZnVuY3Rpb25OYW1lXT8uKCk7XG4gICAgfSk7XG4gIH1cblxuICBleGVjT25TdWJTZWN0aW9ucyhjb2RlOiBzdHJpbmcsIHN1Yk5hbWVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGZ1bmN0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc3ViQ29kZXMgPSAoQXJyYXkuaXNBcnJheShzdWJOYW1lcykpID8gc3ViTmFtZXMgOiAoc3ViTmFtZXMgPyBbc3ViTmFtZXNdIDogW10pO1xuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmdldFNlY3Rpb24oY29kZSk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUgfHwgIXNlY3Rpb24gfHwgc3ViQ29kZXMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgIGZvciAoY29uc3Qgc3ViQ29kZSBvZiBzdWJDb2Rlcykge1xuICAgICAgY29uc3Qgc3ViU2VjdGlvbiA9IHRoaXMuZ2V0U3ViU2VjdGlvbihjb2RlLCBzdWJDb2RlKTtcbiAgICAgIHN1YlNlY3Rpb24/LltmdW5jdGlvbk5hbWVdPy4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kb3MgcHJvcGlvcyBkZSBnZXN0acOzbiBkZWwgZm9ybXVsYXJpb1xuICAgKi9cblxuICBjbGVhbkRhdGEoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmZpZWxkQXJyYXkpIHtcbiAgICAgIGZpZWxkLnNldFZhbHVlKGZpZWxkLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGFibGUgb2YgdGhpcy50YWJsZUFycmF5KSB7XG4gICAgICB0YWJsZS5jbGVhbigpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBheWxvYWQoKTogYW55IHtcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybVBheWxvYWQgPSB7IGZpZWxkczogW10sIHRhYmxlczogW10gfTtcbiAgICBmb3JtRGF0YS5maWVsZHMgPSB0aGlzLmdldEZpZWxkcygpLmZpbHRlcihmbGQgPT4gIWZsZD8ub3V0cHV0T25seSlcbiAgICAgIC5tYXAoZmxkID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRQYXlsb2FkOiBGaWVsZFBheWxvYWQgPSB7XG4gICAgICAgICAgZmllbGRDb2RlOiBmbGQ/LmNvZGUsXG4gICAgICAgICAgZmllbGRWYWx1ZTogZmxkPy52YWx1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogIWZsZD8uYWJzb2x1dGVEaXNhYmxlZCxcbiAgICAgICAgICB2aXNpYmxlOiBmbGQ/LmFic29sdXRlVmlzaWJsZSxcbiAgICAgICAgICByZXF1aXJlZDogZmxkPy5yZXF1aXJlZCxcbiAgICAgICAgICBmaWVsZE9wdGlvbnM6ICcnLFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWVsZFBheWxvYWQ7XG4gICAgICB9KTtcblxuICAgIGZvcm1EYXRhLnRhYmxlcyA9IHRoaXMuZ2V0VGFibGVzKCkubWFwKHRibCA9PiB7XG4gICAgICBjb25zdCB0YWJsZVBheWxvYWQ6IFRhYmxlUGF5bG9hZCA9IHtcbiAgICAgICAgdGFibGVDb2RlOiB0YmwudGFibGVDb2RlLFxuICAgICAgICB2aXNpYmxlOiB0YmwuYWJzb2x1dGVWaXNpYmxlLFxuICAgICAgICBjdXJyZW50UGFnZTogdGJsLmN1cnJlbnRQYWdlLFxuICAgICAgICByZXF1ZXN0ZWRQYWdlOiB0YmwucmVxdWVzdGVkUGFnZSxcbiAgICAgICAgcmVjb3Jkc1BlclBhZ2U6IHRibC5yZWNvcmRzUGVyUGFnZSxcbiAgICAgICAgY3VycmVudEZpbHRlcjogdGJsLmN1cnJlbnRGaWx0ZXIsXG4gICAgICAgIHNvcnRpbmdDb2x1bW46IHRibC5zb3J0aW5nLmNvbHVtbk5hbWUsXG4gICAgICAgIHNvcnRpbmdEaXJlY3Rpb246IHRibC5zb3J0aW5nLmRpcmVjdGlvbixcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGFibGVQYXlsb2FkXG4gICAgfSlcbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN1YmplY3RcbiAgICovXG4gIGdldCBmb3JtU3ViamVjdCgpIHsgcmV0dXJuIHRoaXMuc3ViamVjdDsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc3ViamVjdFxuICAgKi9cbiAgc2V0IGZvcm1TdWJqZWN0KHN1YmplY3QpIHsgdGhpcy5zdWJqZWN0ID0gc3ViamVjdDsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc3RhdGVzXG4gICAqL1xuICBnZXRTdGF0ZXMoKSB7IHJldHVybiB0aGlzLnN0YXRlczsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc3RhdGVcbiAgICovXG4gIGdldEN1cnJlbnRTdGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdGF0ZTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGl0bGVcbiAgICovXG4gIGdldFRpdGxlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnRpdGxlOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aXRsZVxuICAgKi9cbiAgc2V0VGl0bGUodGl0bGU6IHN0cmluZyk6IHZvaWQgeyB0aGlzLnRpdGxlID0gdGl0bGU7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN1cHBvcnRTdGF0ZVxuICAgKi9cbiAgc3VwcG9ydE1vZGUoc3RhdGU6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdXBwb3J0U3RhdGUoc3RhdGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBlbmFibGVGaWVsZHNcbiAgICovXG4gIGVuYWJsZUVkaXRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZGlzYWJsZUZpZWxkc1xuICAgKi9cbiAgZGlzYWJsZUVkaXRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlRmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0RmllbGRcbiAgICovXG4gIGdldEZpZWxkT2JqZWN0KGNvZGU6IHN0cmluZyk6IEZpZWxkRGVzY3JpcHRvciB8IG51bGwgeyByZXR1cm4gdGhpcy5nZXRGaWVsZChjb2RlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0QWN0aW9uXG4gICAqL1xuICBnZXRBY3Rpb25PYmplY3QoY29kZTogc3RyaW5nKTogRm9ybUFjdGlvbiB8IG51bGwgeyByZXR1cm4gdGhpcy5nZXRBY3Rpb24oY29kZSk7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGdldFRhYmxlXG4gICAqL1xuICBnZXRUYWJsZU9iamVjdChjb2RlOiBzdHJpbmcpOiBSZWNvcmRUYWJsZSB8IG51bGwgeyByZXR1cm4gdGhpcy5nZXRUYWJsZShjb2RlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0U2VjdGlvblxuICAgKi9cbiAgZ2V0U2VjdGlvbk9iamVjdChjb2RlOiBzdHJpbmcpOiBSZWNvcmRGb3JtU2VjdGlvbiB8IG51bGwgeyByZXR1cm4gdGhpcy5nZXRTZWN0aW9uKGNvZGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBjaGFuZ2VTdGF0ZVxuICAgKi9cbiAgY2hhbmdlRm9ybU1vZGUoc3RhdGU6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jaGFuZ2VTdGF0ZShzdGF0ZSk7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN1YmplY3RcbiAgICovXG4gIGdldEZvcm1TdWJqZWN0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN1YmplY3Q7IH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzdWJqZWN0XG4gICAqL1xuICBnZXRTdWJqZWN0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN1YmplY3QgPz8gJyc7IH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzdWJqZWN0XG4gICAqL1xuICBnZXRmb3JtU3ViamVjdCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdWJqZWN0ID8/ICcnOyB9XG5cbn1cbiJdfQ==
574
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NsYXNzZXMvZm9ybXMvZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEMsT0FBTyxFQUFFLGVBQWUsRUFBZSxNQUFNLFNBQVMsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU5QyxPQUFPLEVBQVksTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHcEQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNwQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFDcEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUMxQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUFFdEIsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztBQUM1QixNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUM7QUF1Q25DLE1BQU0sT0FBTyxvQkFBb0I7SUFxQi9CO1FBcEJpQixpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFHbkQsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ1QsWUFBTyxHQUFrQixJQUFJLENBQUM7UUFFOUIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixXQUFNLEdBQUcs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TyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoRjs7T0FFRztJQUNILGdCQUFnQixDQUFDLElBQVksSUFBOEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxRjs7T0FFRztJQUNILGNBQWMsQ0FBQyxLQUFhLElBQWEsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxRTs7T0FFRztJQUNILGNBQWMsS0FBYSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2pEOztPQUVHO0lBQ0gsVUFBVSxLQUFhLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25EOztPQUVHO0lBQ0gsY0FBYyxLQUFhLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBRXhEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRm9ybUFjdGlvbiB9IGZyb20gJy4vYWN0aW9uJztcbmltcG9ydCB7IEZpZWxkRGVzY3JpcHRvciwgRmllbGRPcHRpb24gfSBmcm9tICcuL2ZpZWxkJztcbmltcG9ydCB7IFJlY29yZFRhYmxlIH0gZnJvbSAnLi90YWJsZS90YWJsZSc7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU2VjdGlvbiB9IGZyb20gJy4vc2VjdGlvbic7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU3ViU2VjdGlvbiB9IGZyb20gJy4vc3Vic2VjdGlvbic7XG5pbXBvcnQgeyBOT19FUlJPUiwgSEVBREVSIH0gZnJvbSAnLi9mb3JtLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBUYWJsZVJlY29yZERhdGEgfSBmcm9tICcuL3RhYmxlL3Jvdy1kYXRhJztcblxuY29uc3QgQUNUSVZFID0gJ2FjdGl2ZSc7XG5jb25zdCBTSE9XID0gJ3Nob3cnO1xuY29uc3QgSElERSA9ICdoaWRlJztcbmNvbnN0IEVOQUJMRSA9ICdlbmFibGUnO1xuY29uc3QgRElTQUJMRSA9ICdkaXNhYmxlJztcbmNvbnN0IENMRUFOID0gJ2NsZWFuJztcblxuY29uc3QgYWx3YXlzVmlzaWJsZSA9ICdBTFdBWVMnO1xuY29uc3QgbmV2ZXJWaXNpYmxlID0gJ05PTkUnO1xuY29uc3Qgb25TdGF0ZXNWaXNpYmxlID0gJ09OU1RBVEVTJztcbmludGVyZmFjZSBUcmFuc2l0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgZGVzdGluYXRpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN0YXRlRmxvdyB7XG4gIGRlZmF1bHRTdGF0ZTogc3RyaW5nO1xuICBzdGF0ZXM6IHN0cmluZ1tdO1xuICBzdGF0ZURlc2NyaXB0aW9uczogc3RyaW5nW107XG4gIHRyYW5zaXRpb25zOiBUcmFuc2l0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRQYXlsb2FkIHtcbiAgZmllbGRDb2RlOiBzdHJpbmc7XG4gIGZpZWxkVmFsdWU6IGFueTtcbiAgZWRpdGFibGU6IGJvb2xlYW47XG4gIHZpc2libGU6IGJvb2xlYW47XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICBmaWVsZE9wdGlvbnM6IHN0cmluZyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZVBheWxvYWQge1xuICB0YWJsZUNvZGU6IHN0cmluZztcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgY3VycmVudFBhZ2U6IG51bWJlcjtcbiAgcmVxdWVzdGVkUGFnZTogbnVtYmVyO1xuICByZWNvcmRzUGVyUGFnZTogbnVtYmVyO1xuICBjdXJyZW50RmlsdGVyOiBhbnksXG4gIHNvcnRpbmdDb2x1bW46IHN0cmluZztcbiAgc29ydGluZ0RpcmVjdGlvbjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRm9ybVBheWxvYWQge1xuICBmaWVsZHM6IEZpZWxkUGF5bG9hZFtdLFxuICB0YWJsZXM6IFRhYmxlUGF5bG9hZFtdLFxufVxuXG5leHBvcnQgY2xhc3MgRm9ybVN0cnVjdHVyZUFuZERhdGEge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNoYW5nZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgZm9ybUNvbmZpZzogYW55O1xuICBzdGF0ZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmcgPSAnJztcbiAgdGl0bGU6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc3ViamVjdDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBzdGF0ZUZsb3c6IFN0YXRlRmxvdztcbiAgcHJvdGVjdGVkIGZpZWxkcyA9IHt9O1xuICBwcm90ZWN0ZWQgYWN0aW9ucyA9IHt9O1xuICBwcm90ZWN0ZWQgdGFibGVzID0ge307XG4gIHByb3RlY3RlZCBzZWN0aW9ucyA9IHt9O1xuICBwcm90ZWN0ZWQgZmllbGRBcnJheTogRmllbGREZXNjcmlwdG9yW107XG4gIHByb3RlY3RlZCBhY3Rpb25BcnJheTogRm9ybUFjdGlvbltdO1xuICBwcm90ZWN0ZWQgdGFibGVBcnJheTogUmVjb3JkVGFibGVbXTtcbiAgcHJvdGVjdGVkIHNlY3Rpb25BcnJheTogUmVjb3JkRm9ybVNlY3Rpb25bXTtcbiAgcHJpdmF0ZSBfaW1tdXRhYmxlRGF0YSA9IHt9O1xuICBwcml2YXRlIF9leHRyYUluZm8gPSB7fTtcbiAgcHJpdmF0ZSBfZXhjbHVzaXZlU2VjdGlvbnNCeUF0dHIgPSB7fTtcbiAgcHVibGljIGN1c3RvbUF0dHJpYnV0ZXM6IGFueSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3RhdGUgPSAnJztcbiAgICB0aGlzLmFjdGlvbkFycmF5ID0gW107XG4gICAgdGhpcy5maWVsZEFycmF5ID0gW107XG4gICAgdGhpcy50YWJsZUFycmF5ID0gW107XG4gICAgdGhpcy5zZWN0aW9uQXJyYXkgPSBbXTtcbiAgICB0aGlzLnN0YXRlRmxvdyA9IHtcbiAgICAgIGRlZmF1bHRTdGF0ZTogJycsXG4gICAgICBzdGF0ZXM6IFtdLFxuICAgICAgc3RhdGVEZXNjcmlwdGlvbnM6IFtdLFxuICAgICAgdHJhbnNpdGlvbnM6IFtdLFxuICAgIH07XG4gIH1cblxuICBzZXRDb25maWcoZm9ybUNvbmZpZykge1xuICAgIHRoaXMuZm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG4gIH1cblxuICBjbGVhbkZvcm0oKSB7XG4gICAgdGhpcy5hY3Rpb25BcnJheSA9IFtdO1xuICAgIHRoaXMuZmllbGRBcnJheSA9IFtdO1xuICAgIHRoaXMudGFibGVBcnJheSA9IFtdO1xuICAgIHRoaXMuc2VjdGlvbkFycmF5ID0gW107XG4gICAgdGhpcy5zdGF0ZUZsb3cgPSB7XG4gICAgICBkZWZhdWx0U3RhdGU6ICcnLFxuICAgICAgc3RhdGVzOiBbXSxcbiAgICAgIHN0YXRlRGVzY3JpcHRpb25zOiBbXSxcbiAgICAgIHRyYW5zaXRpb25zOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgbG9hZERlZmluaXRpb24oZGVmaW5pdGlvblJlY2VpdmVkKSB7XG4gICAgdGhpcy5zdGF0ZSA9ICcnO1xuICAgIGxldCBhbGxTdGF0ZXMgPSBbXTtcbiAgICB0aGlzLmNsZWFuRm9ybSgpO1xuICAgIGlmICghZGVmaW5pdGlvblJlY2VpdmVkKSB7IHJldHVybjsgfVxuICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZSA/PyBkZWZpbml0aW9uUmVjZWl2ZWQ/LmZvcm0/LmZvcm1Db2RlO1xuICAgIHRoaXMudGl0bGUgPSAoZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0gJiYgZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0uZm9ybVRpdGxlKVxuICAgICAgPyBkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybS5mb3JtVGl0bGUgOiAnJztcbiAgICBhbGxTdGF0ZXMgPSBkZWZpbml0aW9uUmVjZWl2ZWQ/LnN0YXRlcz8ubWFwKHN0dEluZm8gPT4gc3R0SW5mby5uYW1lKTtcbiAgICB0aGlzLnNldFN0YXRlRmxvdyhkZWZpbml0aW9uUmVjZWl2ZWQ/LnN0YXRlcywgZGVmaW5pdGlvblJlY2VpdmVkPy50cmFuc2l0aW9ucyxcbiAgICAgIGRlZmluaXRpb25SZWNlaXZlZD8uZGVmYXVsdFN0YXRlLCBkZWZpbml0aW9uUmVjZWl2ZWQ/LnN0YXRlRGVzY3JpcHRpb25zKTtcbiAgICB0aGlzLmltbXV0YWJsZURhdGEgPSBkZWZpbml0aW9uUmVjZWl2ZWQuaW1tdXRhYmxlRGF0YTtcbiAgICB0aGlzLmV4dHJhSW5mbyA9IGRlZmluaXRpb25SZWNlaXZlZC5leHRyYUluZm87XG4gICAgdGhpcy5jdXN0b21BdHRyaWJ1dGVzID0ge307XG4gICAgaWYgKGRlZmluaXRpb25SZWNlaXZlZD8uY3VzdG9tQXR0cmlidXRlcykge1xuICAgICAgdGhpcy5zZXRDdXN0b21BdHRyaWJ1dGVzKGRlZmluaXRpb25SZWNlaXZlZD8uY3VzdG9tQXR0cmlidXRlcyk7XG4gICAgfVxuICAgIGlmIChkZWZpbml0aW9uUmVjZWl2ZWQuYWN0aW9ucykge1xuICAgICAgY29uc3QgZm9ybUFjdGlvbnMgPSBkZWZpbml0aW9uUmVjZWl2ZWQuYWN0aW9ucy5tYXAob2JqRGVmID0+IHtcbiAgICAgICAgbGV0IHZpc2libGVTdGF0ZXMgPSBvYmpEZWYudmlzaWJsZVN0YXRlc1xuICAgICAgICAgID8/IChvYmpEZWYuYWN0aW9uTW9kZXM/LnNwbGl0KCcsJyk/Lm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpPy5maWx0ZXIoc3RhdGUgPT4gc3RhdGUpKVxuICAgICAgICAgID8/IFtdO1xuICAgICAgICBsZXQgZW5hYmxlZFN0YXRlcyA9IG9iakRlZi5lbmFibGVkU3RhdGVzID8/IG9iakRlZi5lZGl0YWJsZVN0YXRlcyA/PyBbXTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZpc2libGVTdGF0ZXMpICYmIHR5cGVvZiB2aXNpYmxlU3RhdGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAodmlzaWJsZVN0YXRlcyA9PT0gbmV2ZXJWaXNpYmxlKSA/IFtdIDogYWxsU3RhdGVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbmFibGVkU3RhdGVzKSAmJiB0eXBlb2YgZW5hYmxlZFN0YXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBlbmFibGVkU3RhdGVzID0gKGVuYWJsZWRTdGF0ZXMgPT09IG5ldmVyVmlzaWJsZSkgPyBbXSA6IHZpc2libGVTdGF0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgZW5hYmxlZFN0YXRlcyA9IGVuYWJsZWRTdGF0ZXMuZmlsdGVyKHN0YXRlID0+IHZpc2libGVTdGF0ZXMuaW5jbHVkZXMoc3RhdGUpKTtcbiAgICAgICAgcmV0dXJuIHsgLi4ub2JqRGVmLCB2aXNpYmxlU3RhdGVzLCBlbmFibGVkU3RhdGVzIH07XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uUmVjZWl2ZWQgb2YgZm9ybUFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFsQWN0aW9uID0gbmV3IEZvcm1BY3Rpb24oYWN0aW9uUmVjZWl2ZWQsIHRoaXMuZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGdsb2JhbEFjdGlvbkNvZGUgPSBnbG9iYWxBY3Rpb24uYWN0aW9uQ29kZTtcbiAgICAgICAgaWYgKGdsb2JhbEFjdGlvbkNvZGUpIHtcbiAgICAgICAgICB0aGlzLmFjdGlvbkFycmF5LnB1c2goZ2xvYmFsQWN0aW9uKTtcbiAgICAgICAgICB0aGlzLmFjdGlvbnNbZ2xvYmFsQWN0aW9uQ29kZV0gPSBnbG9iYWxBY3Rpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmaW5pdGlvblJlY2VpdmVkLmZpZWxkcykge1xuICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IGRlZmluaXRpb25SZWNlaXZlZC5maWVsZHMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXNcbiAgICAgICAgICA/PyAob2JqRGVmLmZpZWxkTW9kZXM/LnNwbGl0KCcsJyk/Lm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpPy5maWx0ZXIoc3RhdGUgPT4gc3RhdGUpKVxuICAgICAgICAgID8/IFtdO1xuICAgICAgICBsZXQgZW5hYmxlZFN0YXRlcyA9IG9iakRlZi5lbmFibGVkU3RhdGVzID8/IG9iakRlZi5lZGl0YWJsZVN0YXRlcyA/PyBbXTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZpc2libGVTdGF0ZXMpICYmIHR5cGVvZiB2aXNpYmxlU3RhdGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAodmlzaWJsZVN0YXRlcyA9PT0gbmV2ZXJWaXNpYmxlKSA/IFtdIDogYWxsU3RhdGVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbmFibGVkU3RhdGVzKSAmJiB0eXBlb2YgZW5hYmxlZFN0YXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBlbmFibGVkU3RhdGVzID0gKGVuYWJsZWRTdGF0ZXMgPT09IG5ldmVyVmlzaWJsZSkgPyBbXSA6IHZpc2libGVTdGF0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgZW5hYmxlZFN0YXRlcyA9IGVuYWJsZWRTdGF0ZXMuZmlsdGVyKHN0YXRlID0+IHZpc2libGVTdGF0ZXMuaW5jbHVkZXMoc3RhdGUpKTtcbiAgICAgICAgcmV0dXJuIHsgLi4ub2JqRGVmLCB2aXNpYmxlU3RhdGVzLCBlbmFibGVkU3RhdGVzIH07XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZmllbGRSZWNlaXZlZCBvZiBmb3JtRmllbGRzKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkVG9BZGQgPSBuZXcgRmllbGREZXNjcmlwdG9yKGZpZWxkUmVjZWl2ZWQsIHRoaXMuZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGZpZWxkQ29kZSA9IGZpZWxkVG9BZGQuY29kZTtcbiAgICAgICAgaWYgKGZpZWxkQ29kZSkge1xuICAgICAgICAgIHRoaXMuZmllbGRBcnJheS5wdXNoKGZpZWxkVG9BZGQpO1xuICAgICAgICAgIHRoaXMuZmllbGRzW2ZpZWxkQ29kZV0gPSBmaWVsZFRvQWRkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmluaXRpb25SZWNlaXZlZC50YWJsZXMpIHtcbiAgICAgIGNvbnN0IHRhYmxlcyA9IGRlZmluaXRpb25SZWNlaXZlZC50YWJsZXMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXNcbiAgICAgICAgICA/PyAob2JqRGVmLnRhYmxlTW9kZXM/LnNwbGl0KCcsJyk/Lm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpPy5maWx0ZXIoc3RhdGUgPT4gc3RhdGUpKVxuICAgICAgICAgID8/IFtdO1xuICAgICAgICBsZXQgZW5hYmxlZFN0YXRlcyA9IG9iakRlZi5lbmFibGVkU3RhdGVzID8/IG9iakRlZi5lZGl0YWJsZVN0YXRlcyA/PyBbXTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZpc2libGVTdGF0ZXMpICYmIHR5cGVvZiB2aXNpYmxlU3RhdGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAodmlzaWJsZVN0YXRlcyA9PT0gbmV2ZXJWaXNpYmxlKSA/IFtdIDogYWxsU3RhdGVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbmFibGVkU3RhdGVzKSAmJiB0eXBlb2YgZW5hYmxlZFN0YXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBlbmFibGVkU3RhdGVzID0gKGVuYWJsZWRTdGF0ZXMgPT09IG5ldmVyVmlzaWJsZSkgPyBbXSA6IHZpc2libGVTdGF0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgZW5hYmxlZFN0YXRlcyA9IGVuYWJsZWRTdGF0ZXMuZmlsdGVyKHN0YXRlID0+IHZpc2libGVTdGF0ZXMuaW5jbHVkZXMoc3RhdGUpKTtcbiAgICAgICAgcmV0dXJuIHsgLi4ub2JqRGVmLCB2aXNpYmxlU3RhdGVzLCBlbmFibGVkU3RhdGVzIH07XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVSZWNlaXZlZCBvZiB0YWJsZXMpIHtcbiAgICAgICAgY29uc3QgdGFibGVUb0FkZCA9IG5ldyBSZWNvcmRUYWJsZSh0YWJsZVJlY2VpdmVkLCB0aGlzLmZvcm1Db25maWcpO1xuICAgICAgICBjb25zdCB0YWJsZUNvZGUgPSB0YWJsZVRvQWRkLnRhYmxlQ29kZTtcbiAgICAgICAgaWYgKHRhYmxlQ29kZSkge1xuICAgICAgICAgIHRoaXMudGFibGVBcnJheS5wdXNoKHRhYmxlVG9BZGQpO1xuICAgICAgICAgIHRoaXMudGFibGVzW3RhYmxlQ29kZV0gPSB0YWJsZVRvQWRkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmluaXRpb25SZWNlaXZlZC5zZWN0aW9ucykge1xuICAgICAgY29uc3QgZm9ybVNlY3Rpb25zID0gZGVmaW5pdGlvblJlY2VpdmVkLnNlY3Rpb25zLm1hcChvYmpEZWYgPT4ge1xuICAgICAgICBsZXQgdmlzaWJsZVN0YXRlcyA9IG9iakRlZi52aXNpYmxlU3RhdGVzXG4gICAgICAgICAgPz8gKG9iakRlZi5zZWN0aW9uTW9kZXM/LnNwbGl0KCcsJyk/Lm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpPy5maWx0ZXIoc3RhdGUgPT4gc3RhdGUpKVxuICAgICAgICAgID8/IFtdO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmlzaWJsZVN0YXRlcykgJiYgdHlwZW9mIHZpc2libGVTdGF0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmlzaWJsZVN0YXRlcyA9ICh2aXNpYmxlU3RhdGVzID09PSBuZXZlclZpc2libGUpID8gW10gOiBhbGxTdGF0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4ub2JqRGVmLCB2aXNpYmxlU3RhdGVzIH07XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3Qgc2VjdGlvblJlY2VpdmVkIG9mIGZvcm1TZWN0aW9ucykge1xuICAgICAgICBjb25zdCBzZWN0aW9uVG9BZGQgPSBuZXcgUmVjb3JkRm9ybVNlY3Rpb24oc2VjdGlvblJlY2VpdmVkLCB0aGlzLCB0aGlzLmZvcm1Db25maWcpO1xuICAgICAgICBjb25zdCBzZWN0aW9uQ29kZSA9IHNlY3Rpb25Ub0FkZC5zZWN0aW9uQ29kZTtcbiAgICAgICAgaWYgKHNlY3Rpb25Db2RlKSB7XG4gICAgICAgICAgdGhpcy5zZWN0aW9uQXJyYXkucHVzaChzZWN0aW9uVG9BZGQpO1xuICAgICAgICAgIHRoaXMuc2VjdGlvbnNbc2VjdGlvbkNvZGVdID0gc2VjdGlvblRvQWRkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRXN0YWRvc1xuICBnZXQgZGVmYXVsdFN0YXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN0YXRlRmxvdy5kZWZhdWx0U3RhdGU7IH1cbiAgZ2V0IHN0YXRlcygpOiBhbnlbXSB7IHJldHVybiB0aGlzLnN0YXRlRmxvdy5zdGF0ZXM7IH1cbiAgZ2V0IHN0YXRlRGVzY3JpcHRpb25zKCk6IGFueVtdIHsgcmV0dXJuIHRoaXMuc3RhdGVGbG93LnN0YXRlRGVzY3JpcHRpb25zOyB9XG4gIHN1cHBvcnRTdGF0ZShzdGF0ZTogc3RyaW5nID0gJycpOiBib29sZWFuIHsgcmV0dXJuICghIXN0YXRlICYmIHRoaXMuc3RhdGVGbG93LnN0YXRlcz8uaW5jbHVkZXMoc3RhdGUpKTsgfVxuXG4gIGdldE5leHRTdGF0ZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlRmxvdy50cmFuc2l0aW9ucy5maWx0ZXIodHJucyA9PiB0cm5zLnNvdXJjZSA9PT0gdGhpcy5zdGF0ZSlcbiAgICAgIC5tYXAodHJucyA9PiB0cm5zLmRlc3RpbmF0aW9uKTtcbiAgfVxuXG4gIGNoYW5nZVN0YXRlKG5ld1N0YXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIGlmICghbmV3U3RhdGUgfHwgIXRoaXMuc3VwcG9ydFN0YXRlKG5ld1N0YXRlKSB8fCBjdXJyZW50U3RhdGUgPT09IG5ld1N0YXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdGF0ZSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uVG9DaGFuZ2UgPSB0aGlzLnN0YXRlRmxvdy50cmFuc2l0aW9ucy5maW5kKHRybnMgPT5cbiAgICAgICAgdHJucy5zb3VyY2UgPT09IHRoaXMuc3RhdGUgJiYgdHJucy5kZXN0aW5hdGlvbiA9PT0gbmV3U3RhdGUpO1xuICAgICAgaWYgKHRyYW5zaXRpb25Ub0NoYW5nZSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3N0YXRlQ2hhbmdlLm5leHQoeyBzdGF0ZTogdGhpcy5zdGF0ZSB9KTtcbiAgICByZXR1cm4gKHRoaXMuc3RhdGUgPT09IG5ld1N0YXRlKTtcbiAgfVxuXG4gIGdldCBzdGF0ZUNoYW5nZSgpIHsgcmV0dXJuIHRoaXMuX3N0YXRlQ2hhbmdlOyB9XG5cbiAgc2V0U3RhdGVGbG93KHN0YXRlcz8sIHRyYW5zaXRpb25zPywgZGVmYXVsdFN0YXRlPzogc3RyaW5nLCBzdGF0ZURlc2NyaXB0aW9ucyA9IFtdKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZUZsb3cuc3RhdGVzID0gc3RhdGVzO1xuICAgIHRoaXMuc3RhdGVGbG93LnN0YXRlRGVzY3JpcHRpb25zID0gc3RhdGVEZXNjcmlwdGlvbnM7XG4gICAgdGhpcy5zdGF0ZUZsb3cuZGVmYXVsdFN0YXRlID0gZGVmYXVsdFN0YXRlIHx8IHRoaXMuc3RhdGVGbG93LnN0YXRlc1swXTtcbiAgICB0aGlzLnN0YXRlRmxvdy50cmFuc2l0aW9ucyA9IHRyYW5zaXRpb25zLm1hcCh0cmFuc2l0aW9uID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0cmFuc2l0aW9uLm5hbWU7XG4gICAgICBjb25zdCBzb3VyY2UgPSAodGhpcy5zdGF0ZUZsb3cuc3RhdGVzLmluY2x1ZGVzKHRyYW5zaXRpb24uc291cmNlKSkgPyB0cmFuc2l0aW9uLnNvdXJjZSA6ICcnO1xuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSAodGhpcy5zdGF0ZUZsb3cuc3RhdGVzLmluY2x1ZGVzKHRyYW5zaXRpb24uZGVzdGluYXRpb24pKSA/IHRyYW5zaXRpb24uZGVzdGluYXRpb24gOiAnJztcbiAgICAgIHJldHVybiB7IG5hbWUsIHNvdXJjZSwgZGVzdGluYXRpb24gfTtcbiAgICB9KS5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgJiYgaXRlbS5zb3VyY2UgJiYgaXRlbS5kZXN0aW5hdGlvbik7XG4gIH1cblxuICAvLyBpbW11dGFibGUgRGF0YVxuICBnZXRJbW11dGFibGVFbGVtZW50KG5hbWU6IHN0cmluZyk6IGFueSB7IHJldHVybiB0aGlzLl9pbW11dGFibGVEYXRhPy5bbmFtZV0/LnZhbHVlID8/IG51bGw7IH1cbiAgc2V0IGltbXV0YWJsZURhdGEoaW1tdXRhYmxlRGF0YSkgeyBPYmplY3QuYXNzaWduKHRoaXMuX2ltbXV0YWJsZURhdGEsIGltbXV0YWJsZURhdGEpOyB9XG4gIGdldCBpbW11dGFibGVEYXRhKCk6IGFueSB7IHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX2ltbXV0YWJsZURhdGEpKTsgfVxuXG4gIC8vIGV4dHJhIEluZm9cbiAgZ2V0RXh0cmFJbmZvKG5hbWU6IHN0cmluZyk6IGFueSB7IHJldHVybiB0aGlzLl9leHRyYUluZm8/LltuYW1lXT8udmFsdWUgPz8gbnVsbDsgfVxuICBzZXQgZXh0cmFJbmZvKGV4dHJhSW5mbykgeyBPYmplY3QuYXNzaWduKHRoaXMuX2V4dHJhSW5mbywgZXh0cmFJbmZvKTsgfVxuICBnZXQgZXh0cmFJbmZvKCk6IGFueSB7IHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX2V4dHJhSW5mbykpOyB9XG5cbiAgLy8gQ3VzdG9tIEF0dHJpYnV0ZXNcbiAgZ2V0Q3VzdG9tQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IGFueSB7IHJldHVybiB0aGlzLmN1c3RvbUF0dHJpYnV0ZXM/LltuYW1lXSA/PyBudWxsOyB9XG4gIHNldEN1c3RvbUF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHsgaWYgKG5hbWUpIHsgdGhpcy5jdXN0b21BdHRyaWJ1dGVzW25hbWVdID0gdmFsdWU7IH0gfVxuICBzZXRDdXN0b21BdHRyaWJ1dGVzKGF0dHJpYnV0ZXM6IGFueSk6IEZvcm1TdHJ1Y3R1cmVBbmREYXRhIHtcbiAgICBpZiAoYXR0cmlidXRlcyAmJiB0eXBlb2YgYXR0cmlidXRlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpLmZvckVhY2goKFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgdGhpcy5zZXRDdXN0b21BdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gRmllbGRzXG4gIGdldCBmaWVsZE5hbWVzKCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMuZ2V0RmllbGROYW1lcygpOyB9XG4gIGdldEZpZWxkcygpOiBGaWVsZERlc2NyaXB0b3JbXSB7IHJldHVybiB0aGlzLmZpZWxkQXJyYXk7IH1cbiAgZ2V0RmllbGROYW1lcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmZpZWxkQXJyYXkubWFwKGZpZWxkID0+IGZpZWxkLmNvZGUpOyB9XG4gIGdldEZpZWxkKGNvZGU6IHN0cmluZyk6IEZpZWxkRGVzY3JpcHRvciB7IHJldHVybiAoY29kZSAmJiB0aGlzLmZpZWxkcz8uW2NvZGVdKSA/IHRoaXMuZmllbGRzW2NvZGVdIDogbnVsbDsgfVxuICBlbmFibGVGaWVsZChjb2RlOiBzdHJpbmcpOiB2b2lkIHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uZW5hYmxlKCk7IH1cbiAgZGlzYWJsZUZpZWxkKGNvZGU6IHN0cmluZyk6IHZvaWQgeyB0aGlzLmdldEZpZWxkKGNvZGUpPy5kaXNhYmxlKCk7IH1cbiAgZ2V0RmllbGRWYWx1ZShjb2RlOiBzdHJpbmcpOiBhbnkgeyByZXR1cm4gdGhpcy5nZXRGaWVsZChjb2RlKT8udmFsdWU7IH1cbiAgZ2V0RmllbGRPcHRpb25UZXh0KGNvZGU6IHN0cmluZyk6IGFueSB7IHJldHVybiB0aGlzLmdldEZpZWxkKGNvZGUpPy5vcHRpb25UZXh0OyB9XG4gIGdldEZpZWxkT3B0aW9ucyhjb2RlOiBzdHJpbmcpOiBGaWVsZE9wdGlvbltdIHwgbnVsbCB7IHJldHVybiB0aGlzLmdldEZpZWxkKGNvZGUpPy5vcHRpb25zID8/IG51bGw7IH1cbiAgc2V0RmllbGRWYWx1ZShjb2RlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkgeyB0aGlzLmdldEZpZWxkKGNvZGUpPy5zZXRWYWx1ZSh2YWx1ZSk7IH1cbiAgc2V0RmllbGRFcnJvcihjb2RlOiBzdHJpbmcsIGVycm9yQ29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyA9ICdlcnJvcicpOiBhbnkgeyB0aGlzLmdldEZpZWxkKGNvZGUpPy5zZXRFcnJvcihlcnJvckNvZGUsIG1lc3NhZ2UsIHR5cGUpOyB9XG4gIHNldEZpZWxkSW50cmluc2ljRXJyb3JNZXNzYWdlKGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogYW55IHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uc2V0SW50cmluc2ljRXJyb3JNZXNzYWdlKG1lc3NhZ2UpOyB9XG5cbiAgc2V0RmllbGRSZXF1aXJlZChpbnB1dENvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHJlcXVpcmVkOiBib29sZWFuKTogYW55IHtcbiAgICBjb25zdCBjb2RlcyA9IHRoaXMuZ2V0RmllbGRTZXQobnVsbCwgaW5wdXRDb2RlcyA/PyBudWxsKTtcbiAgICBmb3IgKGNvbnN0IGNvZGUgb2YgY29kZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZChjb2RlKSA/PyBudWxsO1xuICAgICAgICBmaWVsZCAmJiAoZmllbGQucmVxdWlyZWQgPSByZXF1aXJlZCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBFcnJvciBtb2RpZmljYW5kbyBjYW1wbyAke2NvZGV9OiAke2V9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0RmllbGRFcnJvck1lc3NhZ2UoY29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBhbnkgeyB0aGlzLmdldEZpZWxkKGNvZGUpPy5zZXRFcnJvck1lc3NhZ2UobWVzc2FnZSk7IH1cblxuICBzZXRGaWVsZE9wdGlvbnMoY29kZTogc3RyaW5nLCBvcHRpb25zQXJyYXk6IGFueVtdLCBpZEF0dHJpYnV0ZTogc3RyaW5nLCBuYW1lQXR0cmlidXRlOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZChjb2RlKTtcbiAgICBpZiAoZmllbGQgJiYgb3B0aW9uc0FycmF5KSB7XG4gICAgICBjb25zdCBmaWVsZE9wdGlvbnMgPSBvcHRpb25zQXJyYXkubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgZmllbGRPcHRpb25JZDogaXRlbVtpZEF0dHJpYnV0ZV0sXG4gICAgICAgIGZpZWxkT3B0aW9uVmFsdWU6IGl0ZW1bbmFtZUF0dHJpYnV0ZV1cbiAgICAgIH0pKTtcbiAgICAgIGZpZWxkLnNldEZpZWxkT3B0aW9ucyhmaWVsZE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkU2V0KGZpbHRlciwgaW5wdXRDb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nIHwgbnVsbCwgc3ViQ29kZT86IHN0cmluZyB8IG51bGwpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGNvZGVzOiBhbnlbXSA9IFtdO1xuICAgIGlmIChpbnB1dENvZGVzKSB7XG4gICAgICBpZiAodHlwZW9mIGlucHV0Q29kZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvZGVzID0gW2lucHV0Q29kZXNdO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlucHV0Q29kZXMpICYmIGlucHV0Q29kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb2RlcyA9IGlucHV0Q29kZXMgPz8gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWNDb2RlICYmICFzdWJDb2RlKSB7XG4gICAgICBjb2RlcyA9IHRoaXMuZ2V0U2VjdGlvbihzZWNDb2RlKT8uZ2V0RmllbGROYW1lcygpID8/IFtdO1xuICAgIH0gZWxzZSBpZiAoc2VjQ29kZSAmJiBzdWJDb2RlKSB7XG4gICAgICBjb2RlcyA9IHRoaXMuZ2V0U3ViU2VjdGlvbihzZWNDb2RlLCBzdWJDb2RlKT8uZ2V0RmllbGROYW1lcygpID8/IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlcyA9IHRoaXMuZ2V0RmllbGROYW1lcygpID8/IFtdO1xuICAgIH1cbiAgICByZXR1cm4gKGZpbHRlcikgPyBjb2Rlcy5maWx0ZXIoZmxkID0+IGZpbHRlcih0aGlzLmdldEZpZWxkKGZsZCkpKSA6IGNvZGVzO1xuICB9XG5cbiAgYXBwbHlPbkZpZWxkcyhwcm9jZXNzRnVuYywgaW5wdXRDb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKCFwcm9jZXNzRnVuYykgeyByZXR1cm4gMDsgfVxuICAgIGNvbnN0IGNvZGVzID0gdGhpcy5nZXRGaWVsZFNldChudWxsLCBpbnB1dENvZGVzID8/IG51bGwsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICAgIGxldCBwcm9jZXNzZWRGaWVsZHMgPSAwO1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBjb2Rlcykge1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkKGNvZGUpO1xuICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHJvY2Vzc0Z1bmMoZmllbGQpO1xuICAgICAgICAgIHByb2Nlc3NlZEZpZWxkcyArPSAxO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYEVycm9yIHByb2Nlc2FuZG8gZnVuY2lvbiBlbiBjYW1wbyAke2ZpZWxkfTogJHtlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9jZXNzZWRGaWVsZHM7XG4gIH1cblxuICBhcHBseVByb2Nlc3NUb0FsbEZpZWxkcyhwcm9jZXNzRnVuYykge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMocHJvY2Vzc0Z1bmMpO1xuICB9XG5cbiAgZW5hYmxlRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseU9uRmllbGRzKGZsZCA9PiBmbGQ/LmVuYWJsZSgpLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBzaG93RmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseU9uRmllbGRzKGZsZCA9PiBmbGQ/LnNob3coKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgaGlkZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlPbkZpZWxkcyhmbGQgPT4gZmxkPy5oaWRlKCksIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIHNob3dMYWJlbEZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlPbkZpZWxkcyhmbGQgPT4gZmxkPy5zaG93TGFibGVsKCksIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIGhpZGVMYWJlbEZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlPbkZpZWxkcyhmbGQgPT4gZmxkPy5oaWRlTGFiZWwoKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgZGlzYWJsZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlPbkZpZWxkcyhmbGQgPT4gZmxkPy5kaXNhYmxlKCksIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIGNsZWFuRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseU9uRmllbGRzKGZsZCA9PiBmbGQ/LmNsZWFuKCksIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIHRhZ0ZpZWxkc1dpdGhFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseU9uRmllbGRzKGZsZCA9PiBmbGQ/LnNldEVycm9yTWVzc2FnZShtZXNzYWdlKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgY2xlYW5FcnJvckZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFnRmllbGRzV2l0aEVycm9yKCcnLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICB0YWdFbXB0eVJlcXVpcmVkRmllbGRzKG1lc3NhZ2U6IHN0cmluZywgY29kZXMgPSBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFnRmllbGRzV2l0aEVycm9yKG1lc3NhZ2UsIHRoaXMuZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSkpID4gMDtcbiAgfVxuXG4gIGdldFJlcXVpcmVkRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiBmbGQ/LnJlcXVpcmVkLCBjb2RlcyA/PyBudWxsLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIGdldFJlcXVpcmVkRW1wdHlGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcsIG9ubHlWaXNpYmxlPzogYm9vbGVhbik6IHN0cmluZ1tdIHtcbiAgICBpZiAob25seVZpc2libGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiBmbGQ/LnJlcXVpcmVkICYmIGZsZD8udmlzaWJsZSAmJiBmbGQ/LmVtcHR5LCBjb2RlcyA/PyBudWxsLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRTZXQoZmxkID0+IGZsZD8ucmVxdWlyZWQgJiYgZmxkPy5lbXB0eSwgY29kZXMgPz8gbnVsbCwgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBnZXRDaGFuZ2VkRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiAhZmxkPy5vdXRwdXRPbmx5ICYmIGZsZD8uaGFzQ2hhbmdlZCwgY29kZXMgPz8gbnVsbCwgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBnZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3Vlcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZywgb25seVZpc2libGU/OiBib29sZWFuKTogc3RyaW5nW10ge1xuICAgIGlmIChvbmx5VmlzaWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRTZXQoZmxkID0+IChmbGQ/Lmhhc0Vycm9yKCkgJiYgZmxkPy52aXNpYmxlKSwgY29kZXMgPz8gbnVsbCwgc2VjQ29kZSwgc3ViQ29kZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkU2V0KGZsZCA9PiBmbGQ/Lmhhc0Vycm9yKCksIGNvZGVzID8/IG51bGwsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgZ2V0RmllbGRzVmFsdWVzKGlucHV0Q29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGNvZGVzID0gdGhpcy5nZXRGaWVsZFNldChudWxsLCBpbnB1dENvZGVzID8/IG51bGwsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICAgIGNvbnN0IHJlc3VsdE9iamVjdCA9IHt9O1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb2Rlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBjb2Rlc1tpbmRleF07XG4gICAgICBpZiAoY29kZSkge1xuICAgICAgICByZXN1bHRPYmplY3RbY29kZV0gPSB0aGlzLmZpZWxkcz8uW2NvZGVdPy5nZXRWYWx1ZSgpID8/IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRPYmplY3Q7XG4gIH1cblxuICAvLyBBY2Npb25lc1xuICBnZXRBY3Rpb25zKCk6IEZvcm1BY3Rpb25bXSB7IHJldHVybiB0aGlzLmFjdGlvbkFycmF5OyB9XG4gIGdldEFjdGlvbihjb2RlOiBzdHJpbmcpOiBGb3JtQWN0aW9uIHsgcmV0dXJuIChjb2RlICYmIHRoaXMuYWN0aW9ucz8uW2NvZGVdKSA/IHRoaXMuYWN0aW9uc1tjb2RlXSA6IG51bGw7IH1cbiAgc2hvd0FjdGlvbnMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmV4ZWNPbkFjdGlvbnMoY29kZXMsIFNIT1cpOyB9XG4gIGhpZGVBY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25BY3Rpb25zKGNvZGVzLCBISURFKTsgfVxuICBlbmFibGVBY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25BY3Rpb25zKGNvZGVzLCBFTkFCTEUpOyB9XG4gIGRpc2FibGVBY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25BY3Rpb25zKGNvZGVzLCBESVNBQkxFKTsgfVxuICBlbmFibGVBY3Rpb24oY29kZTogc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmVuYWJsZUFjdGlvbnMoY29kZSk7IH1cbiAgZGlzYWJsZUFjdGlvbihjb2RlOiBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZGlzYWJsZUFjdGlvbnMoY29kZSk7IH1cbiAgc2hvd0FjdGlvbihjb2RlOiBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuc2hvd0FjdGlvbnMoY29kZSk7IH1cbiAgaGlkZUFjdGlvbihjb2RlOiBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuaGlkZUFjdGlvbnMoY29kZSk7IH1cbiAgZ2V0SGVhZGVyQWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuZ2V0QWN0aW9uc0J5QXR0cmlidXRlKCdsb2NhdGlvbicsIEhFQURFUik7IH1cblxuICBnZXRBY3Rpb25zQnlBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZSk6IEZvcm1BY3Rpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uQXJyYXkuZmlsdGVyKGFjdGlvbkl0ZW0gPT4gYWN0aW9uSXRlbS5tYXRjaEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkpO1xuICB9XG5cbiAgZXhlY09uQWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGlvbkNvZGVzID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSB8fCBhY3Rpb25Db2Rlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgYWN0aW9uQ29kZXMuZm9yRWFjaChjb2RlID0+IHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZ2V0QWN0aW9uKGNvZGUpO1xuICAgICAgYWN0aW9uPy5bZnVuY3Rpb25OYW1lXT8uKCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBUYWJsYXNcbiAgZ2V0VGFibGVzKCk6IFJlY29yZFRhYmxlW10geyByZXR1cm4gdGhpcy50YWJsZUFycmF5OyB9XG4gIGdldFRhYmxlKGNvZGU6IHN0cmluZyk6IFJlY29yZFRhYmxlIHsgcmV0dXJuIChjb2RlICYmIHRoaXMudGFibGVzPy5bY29kZV0pID8gdGhpcy50YWJsZXNbY29kZV0gOiBudWxsOyB9XG4gIGdldFRhYmxlUmVjb3JkKGNvZGU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFRhYmxlUmVjb3JkRGF0YSB7IHJldHVybiB0aGlzLmdldFRhYmxlKGNvZGUpPy5nZXRUYWJsZVJlY29yZChpZCkgfVxuICBlbmFibGVUYWJsZXMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmV4ZWNPblRhYmxlcyhjb2RlcywgRU5BQkxFKTsgfVxuICBkaXNhYmxlVGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25UYWJsZXMoY29kZXMsIERJU0FCTEUpOyB9XG4gIHNob3dUYWJsZXMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmV4ZWNPblRhYmxlcyhjb2RlcywgU0hPVyk7IH1cbiAgaGlkZVRhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uVGFibGVzKGNvZGVzLCBISURFKTsgfVxuICBjbGVhblRhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uVGFibGVzKGNvZGVzLCBDTEVBTik7IH1cbiAgc2hvd1RhYmxlKGNvZGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5zaG93VGFibGVzKGNvZGUpOyB9XG4gIGhpZGVUYWJsZShjb2RlOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuaGlkZVRhYmxlcyhjb2RlKTsgfVxuICBjbGVhblRhYmxlKGNvZGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5nZXRUYWJsZShjb2RlKT8uY2xlYW4oKTsgfVxuXG4gIGV4ZWNPblRhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBmdW5jdGlvbk5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHRhYmxlQ29kZXMgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIGlmICghZnVuY3Rpb25OYW1lIHx8IHRhYmxlQ29kZXMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgIHRhYmxlQ29kZXMuZm9yRWFjaChjb2RlID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICAgIHRhYmxlPy5bZnVuY3Rpb25OYW1lXT8uKCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBTZWNjaW9uZXNcbiAgZ2V0U2VjdGlvbnMoKTogUmVjb3JkRm9ybVNlY3Rpb25bXSB7IHJldHVybiB0aGlzLnNlY3Rpb25BcnJheTsgfVxuICBnZXRTZWN0aW9uc1RpdGxlcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmdldFNlY3Rpb25zKCk/LmZpbHRlcihzZWMgPT4gc2VjPy50aXRsZSkubWFwKHNlYyA9PiBzZWM/LnRpdGxlID8/ICcnKTsgfVxuICBudW1TZWN0aW9ucygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5zZWN0aW9uQXJyYXkubGVuZ3RoOyB9XG4gIGdldFNlY3Rpb25zQnlBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOiBSZWNvcmRGb3JtU2VjdGlvbltdIHsgcmV0dXJuIHRoaXMuc2VjdGlvbkFycmF5LmZpbHRlcihpdGVtID0+IGl0ZW0ubWF0Y2hBdHRyaWJ1dGUobmFtZSwgdmFsdWUpKTsgfVxuICBnZXQgc2VjdGlvblRpdGxlcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmdldFNlY3Rpb25zVGl0bGVzKCk7IH1cbiAgZ2V0IHZpc2libGVTZWN0aW9ucygpOiBSZWNvcmRGb3JtU2VjdGlvbltdIHsgcmV0dXJuIHRoaXMuc2VjdGlvbkFycmF5LmZpbHRlcihzZWMgPT4gc2VjLmFic29sdXRlVmlzaWJsZSk7IH1cbiAgZ2V0U2VjdGlvbihjb2RlOiBzdHJpbmcpOiBSZWNvcmRGb3JtU2VjdGlvbiB7IHJldHVybiAoY29kZSAmJiB0aGlzLnNlY3Rpb25zPy5bY29kZV0pID8gdGhpcy5zZWN0aW9uc1tjb2RlXSA6IG51bGw7IH1cbiAgc2hvd1NlY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyB0aGlzLmV4ZWNPblNlY3Rpb25zKGNvZGVzLCBTSE9XKTsgfVxuICBoaWRlU2VjdGlvbnMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHRoaXMuZXhlY09uU2VjdGlvbnMoY29kZXMsIEhJREUpOyB9XG4gIHNob3dTZWN0aW9uKGNvZGU6IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5zaG93U2VjdGlvbnMoY29kZSk7IH1cbiAgaGlkZVNlY3Rpb24oY29kZTogc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmhpZGVTZWN0aW9ucyhjb2RlKTsgfVxuICBhY3RpdmVTZWN0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9leGNsdXNpdmVTZWN0aW9uc0J5QXR0cltBQ1RJVkVdOyB9XG4gIGdldFN1YlNlY3Rpb24oY29kZTogc3RyaW5nLCBzdWJDb2RlKTogUmVjb3JkRm9ybVN1YlNlY3Rpb24geyByZXR1cm4gdGhpcy5nZXRTZWN0aW9uKGNvZGUpPy5nZXRTdWJzZWN0aW9uKHN1YkNvZGUpID8/IG51bGw7IH1cbiAgc2hvd1N1YlNlY3Rpb25zKGNvZGU6IHN0cmluZywgc3ViQ29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmV4ZWNPblN1YlNlY3Rpb25zKGNvZGUsIHN1YkNvZGVzLCBTSE9XKTsgfVxuICBzaG93U3ViU2VjdGlvbihjb2RlOiBzdHJpbmcsIHN1YkNvZGU6IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5zaG93U3ViU2VjdGlvbnMoY29kZSwgc3ViQ29kZSk7IH1cbiAgaGlkZVN1YlNlY3Rpb24oY29kZTogc3RyaW5nLCBzdWJDb2RlOiBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuaGlkZVN1YlNlY3Rpb25zKGNvZGUsIHN1YkNvZGUpOyB9XG4gIGhpZGVTdWJTZWN0aW9ucyhjb2RlOiBzdHJpbmcsIHN1YkNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25TdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2RlcywgSElERSk7IH1cbiAgZ2V0U2VjdGlvbkFjdGlvbnMoY29kZSk6IEZvcm1BY3Rpb25bXSB7IHJldHVybiB0aGlzLmdldFNlY3Rpb24oY29kZSk/LmdldEFjdGlvbnMoKSA/PyBudWxsOyB9XG4gIGdldFNlY3Rpb25BY3Rpb25OYW1lcyhjb2RlKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5nZXRTZWN0aW9uKGNvZGUpPy5nZXRBY3Rpb25OYW1lcygpID8/IG51bGw7IH1cblxuICBhY3RpdmF0ZVNlY3Rpb24oY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGNvZGUgPT09IHRoaXMuX2V4Y2x1c2l2ZVNlY3Rpb25zQnlBdHRyW0FDVElWRV0pIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5nZXRTZWN0aW9uKHRoaXMuYWN0aXZlU2VjdGlvbigpKT8uaW5hY3RpdmF0ZSgpO1xuICAgIHRoaXMuZ2V0U2VjdGlvbihjb2RlKT8uYWN0aXZhdGUoKTtcbiAgICB0aGlzLl9leGNsdXNpdmVTZWN0aW9uc0J5QXR0cltBQ1RJVkVdID0gY29kZTtcbiAgfVxuXG4gIGV4ZWNPblNlY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGZ1bmN0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc2VjdGlvbkNvZGVzID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSB8fCBzZWN0aW9uQ29kZXMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgIHNlY3Rpb25Db2Rlcy5mb3JFYWNoKGNvZGUgPT4ge1xuICAgICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZ2V0U2VjdGlvbihjb2RlKTtcbiAgICAgIHNlY3Rpb24/LltmdW5jdGlvbk5hbWVdPy4oKTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4ZWNPblN1YlNlY3Rpb25zKGNvZGU6IHN0cmluZywgc3ViTmFtZXM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdWJDb2RlcyA9IChBcnJheS5pc0FycmF5KHN1Yk5hbWVzKSkgPyBzdWJOYW1lcyA6IChzdWJOYW1lcyA/IFtzdWJOYW1lc10gOiBbXSk7XG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZ2V0U2VjdGlvbihjb2RlKTtcbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSB8fCAhc2VjdGlvbiB8fCBzdWJDb2Rlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgZm9yIChjb25zdCBzdWJDb2RlIG9mIHN1YkNvZGVzKSB7XG4gICAgICBjb25zdCBzdWJTZWN0aW9uID0gdGhpcy5nZXRTdWJTZWN0aW9uKGNvZGUsIHN1YkNvZGUpO1xuICAgICAgc3ViU2VjdGlvbj8uW2Z1bmN0aW9uTmFtZV0/LigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvcyBwcm9waW9zIGRlIGdlc3Rpw7NuIGRlbCBmb3JtdWxhcmlvXG4gICAqL1xuXG4gIGNsZWFuRGF0YSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRBcnJheSkge1xuICAgICAgZmllbGQuc2V0VmFsdWUoZmllbGQuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB0YWJsZSBvZiB0aGlzLnRhYmxlQXJyYXkpIHtcbiAgICAgIHRhYmxlLmNsZWFuKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGF5bG9hZCgpOiBhbnkge1xuICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtUGF5bG9hZCA9IHsgZmllbGRzOiBbXSwgdGFibGVzOiBbXSB9O1xuICAgIGZvcm1EYXRhLmZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCkuZmlsdGVyKGZsZCA9PiAhZmxkPy5vdXRwdXRPbmx5KVxuICAgICAgLm1hcChmbGQgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZFBheWxvYWQ6IEZpZWxkUGF5bG9hZCA9IHtcbiAgICAgICAgICBmaWVsZENvZGU6IGZsZD8uY29kZSxcbiAgICAgICAgICBmaWVsZFZhbHVlOiBmbGQ/LnZhbHVlLFxuICAgICAgICAgIGVkaXRhYmxlOiAhZmxkPy5hYnNvbHV0ZURpc2FibGVkLFxuICAgICAgICAgIHZpc2libGU6IGZsZD8uYWJzb2x1dGVWaXNpYmxlLFxuICAgICAgICAgIHJlcXVpcmVkOiBmbGQ/LnJlcXVpcmVkLFxuICAgICAgICAgIGZpZWxkT3B0aW9uczogJycsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkUGF5bG9hZDtcbiAgICAgIH0pO1xuXG4gICAgZm9ybURhdGEudGFibGVzID0gdGhpcy5nZXRUYWJsZXMoKS5tYXAodGJsID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlUGF5bG9hZDogVGFibGVQYXlsb2FkID0ge1xuICAgICAgICB0YWJsZUNvZGU6IHRibC50YWJsZUNvZGUsXG4gICAgICAgIHZpc2libGU6IHRibC5hYnNvbHV0ZVZpc2libGUsXG4gICAgICAgIGN1cnJlbnRQYWdlOiB0YmwuY3VycmVudFBhZ2UsXG4gICAgICAgIHJlcXVlc3RlZFBhZ2U6IHRibC5yZXF1ZXN0ZWRQYWdlLFxuICAgICAgICByZWNvcmRzUGVyUGFnZTogdGJsLnJlY29yZHNQZXJQYWdlLFxuICAgICAgICBjdXJyZW50RmlsdGVyOiB0YmwuY3VycmVudEZpbHRlcixcbiAgICAgICAgc29ydGluZ0NvbHVtbjogdGJsLnNvcnRpbmcuY29sdW1uTmFtZSxcbiAgICAgICAgc29ydGluZ0RpcmVjdGlvbjogdGJsLnNvcnRpbmcuZGlyZWN0aW9uLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0YWJsZVBheWxvYWRcbiAgICB9KVxuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc3ViamVjdFxuICAgKi9cbiAgZ2V0IGZvcm1TdWJqZWN0KCkgeyByZXR1cm4gdGhpcy5zdWJqZWN0OyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzdWJqZWN0XG4gICAqL1xuICBzZXQgZm9ybVN1YmplY3Qoc3ViamVjdCkgeyB0aGlzLnN1YmplY3QgPSBzdWJqZWN0OyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzdGF0ZXNcbiAgICovXG4gIGdldFN0YXRlcygpIHsgcmV0dXJuIHRoaXMuc3RhdGVzOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzdGF0ZVxuICAgKi9cbiAgZ2V0Q3VycmVudFN0YXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN0YXRlOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aXRsZVxuICAgKi9cbiAgZ2V0VGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudGl0bGU7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRpdGxlXG4gICAqL1xuICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKTogdm9pZCB7IHRoaXMudGl0bGUgPSB0aXRsZTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc3VwcG9ydFN0YXRlXG4gICAqL1xuICBzdXBwb3J0TW9kZShzdGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnN1cHBvcnRTdGF0ZShzdGF0ZSk7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGVuYWJsZUZpZWxkc1xuICAgKi9cbiAgZW5hYmxlRWRpdEZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZUZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBkaXNhYmxlRmllbGRzXG4gICAqL1xuICBkaXNhYmxlRWRpdEZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRGaWVsZFxuICAgKi9cbiAgZ2V0RmllbGRPYmplY3QoY29kZTogc3RyaW5nKTogRmllbGREZXNjcmlwdG9yIHwgbnVsbCB7IHJldHVybiB0aGlzLmdldEZpZWxkKGNvZGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRBY3Rpb25cbiAgICovXG4gIGdldEFjdGlvbk9iamVjdChjb2RlOiBzdHJpbmcpOiBGb3JtQWN0aW9uIHwgbnVsbCB7IHJldHVybiB0aGlzLmdldEFjdGlvbihjb2RlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0VGFibGVcbiAgICovXG4gIGdldFRhYmxlT2JqZWN0KGNvZGU6IHN0cmluZyk6IFJlY29yZFRhYmxlIHwgbnVsbCB7IHJldHVybiB0aGlzLmdldFRhYmxlKGNvZGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRTZWN0aW9uXG4gICAqL1xuICBnZXRTZWN0aW9uT2JqZWN0KGNvZGU6IHN0cmluZyk6IFJlY29yZEZvcm1TZWN0aW9uIHwgbnVsbCB7IHJldHVybiB0aGlzLmdldFNlY3Rpb24oY29kZSk7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGNoYW5nZVN0YXRlXG4gICAqL1xuICBjaGFuZ2VGb3JtTW9kZShzdGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc3ViamVjdFxuICAgKi9cbiAgZ2V0Rm9ybVN1YmplY3QoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuc3ViamVjdDsgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN1YmplY3RcbiAgICovXG4gIGdldFN1YmplY3QoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuc3ViamVjdCA/PyAnJzsgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN1YmplY3RcbiAgICovXG4gIGdldGZvcm1TdWJqZWN0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN1YmplY3QgPz8gJyc7IH1cblxufVxuIl19
@@ -2156,6 +2156,9 @@ const HIDE = 'hide';
2156
2156
  const ENABLE = 'enable';
2157
2157
  const DISABLE = 'disable';
2158
2158
  const CLEAN = 'clean';
2159
+ const alwaysVisible = 'ALWAYS';
2160
+ const neverVisible = 'NONE';
2161
+ const onStatesVisible = 'ONSTATES';
2159
2162
  class FormStructureAndData {
2160
2163
  constructor() {
2161
2164
  this._stateChange = new Subject();
@@ -2198,8 +2201,9 @@ class FormStructureAndData {
2198
2201
  };
2199
2202
  }
2200
2203
  loadDefinition(definitionReceived) {
2201
- var _a, _b;
2204
+ var _a, _b, _c;
2202
2205
  this.state = '';
2206
+ let allStates = [];
2203
2207
  this.cleanForm();
2204
2208
  if (!definitionReceived) {
2205
2209
  return;
@@ -2207,6 +2211,7 @@ class FormStructureAndData {
2207
2211
  this.name = (_a = this.name) !== null && _a !== void 0 ? _a : (_b = definitionReceived === null || definitionReceived === void 0 ? void 0 : definitionReceived.form) === null || _b === void 0 ? void 0 : _b.formCode;
2208
2212
  this.title = (definitionReceived.form && definitionReceived.form.formTitle)
2209
2213
  ? definitionReceived.form.formTitle : '';
2214
+ allStates = (_c = definitionReceived === null || definitionReceived === void 0 ? void 0 : definitionReceived.states) === null || _c === void 0 ? void 0 : _c.map(sttInfo => sttInfo.name);
2210
2215
  this.setStateFlow(definitionReceived === null || definitionReceived === void 0 ? void 0 : definitionReceived.states, definitionReceived === null || definitionReceived === void 0 ? void 0 : definitionReceived.transitions, definitionReceived === null || definitionReceived === void 0 ? void 0 : definitionReceived.defaultState, definitionReceived === null || definitionReceived === void 0 ? void 0 : definitionReceived.stateDescriptions);
2211
2216
  this.immutableData = definitionReceived.immutableData;
2212
2217
  this.extraInfo = definitionReceived.extraInfo;
@@ -2216,15 +2221,16 @@ class FormStructureAndData {
2216
2221
  }
2217
2222
  if (definitionReceived.actions) {
2218
2223
  const formActions = definitionReceived.actions.map(objDef => {
2219
- var _a;
2220
- let visibleStates = objDef.visibleStates;
2221
- let enabledStates = (_a = objDef.enabledStates) !== null && _a !== void 0 ? _a : objDef.editableStates;
2222
- if (!visibleStates) {
2223
- visibleStates = (objDef.actionModes || '').split(',')
2224
- .map(state => state.trim())
2225
- .filter(state => state.length > 0) || [];
2226
- enabledStates = [...visibleStates];
2224
+ var _a, _b, _c, _d, _e, _f, _g;
2225
+ let visibleStates = (_e = (_a = objDef.visibleStates) !== null && _a !== void 0 ? _a : ((_d = (_c = (_b = objDef.actionModes) === null || _b === void 0 ? void 0 : _b.split(',')) === null || _c === void 0 ? void 0 : _c.map(state => state.trim())) === null || _d === void 0 ? void 0 : _d.filter(state => state))) !== null && _e !== void 0 ? _e : [];
2226
+ let enabledStates = (_g = (_f = objDef.enabledStates) !== null && _f !== void 0 ? _f : objDef.editableStates) !== null && _g !== void 0 ? _g : [];
2227
+ if (!Array.isArray(visibleStates) && typeof visibleStates === 'string') {
2228
+ visibleStates = (visibleStates === neverVisible) ? [] : allStates;
2229
+ }
2230
+ if (!Array.isArray(enabledStates) && typeof enabledStates === 'string') {
2231
+ enabledStates = (enabledStates === neverVisible) ? [] : visibleStates;
2227
2232
  }
2233
+ enabledStates = enabledStates.filter(state => visibleStates.includes(state));
2228
2234
  return Object.assign(Object.assign({}, objDef), { visibleStates, enabledStates });
2229
2235
  });
2230
2236
  for (const actionReceived of formActions) {
@@ -2238,15 +2244,16 @@ class FormStructureAndData {
2238
2244
  }
2239
2245
  if (definitionReceived.fields) {
2240
2246
  const formFields = definitionReceived.fields.map(objDef => {
2241
- var _a;
2242
- let visibleStates = objDef.visibleStates;
2243
- let enabledStates = (_a = objDef.enabledStates) !== null && _a !== void 0 ? _a : objDef.editableStates;
2244
- if (!visibleStates) {
2245
- visibleStates = (objDef.fieldModes || '').split(',')
2246
- .map(state => state.trim())
2247
- .filter(state => state.length > 0) || [];
2248
- enabledStates = [...visibleStates];
2247
+ var _a, _b, _c, _d, _e, _f, _g;
2248
+ let visibleStates = (_e = (_a = objDef.visibleStates) !== null && _a !== void 0 ? _a : ((_d = (_c = (_b = objDef.fieldModes) === null || _b === void 0 ? void 0 : _b.split(',')) === null || _c === void 0 ? void 0 : _c.map(state => state.trim())) === null || _d === void 0 ? void 0 : _d.filter(state => state))) !== null && _e !== void 0 ? _e : [];
2249
+ let enabledStates = (_g = (_f = objDef.enabledStates) !== null && _f !== void 0 ? _f : objDef.editableStates) !== null && _g !== void 0 ? _g : [];
2250
+ if (!Array.isArray(visibleStates) && typeof visibleStates === 'string') {
2251
+ visibleStates = (visibleStates === neverVisible) ? [] : allStates;
2252
+ }
2253
+ if (!Array.isArray(enabledStates) && typeof enabledStates === 'string') {
2254
+ enabledStates = (enabledStates === neverVisible) ? [] : visibleStates;
2249
2255
  }
2256
+ enabledStates = enabledStates.filter(state => visibleStates.includes(state));
2250
2257
  return Object.assign(Object.assign({}, objDef), { visibleStates, enabledStates });
2251
2258
  });
2252
2259
  for (const fieldReceived of formFields) {
@@ -2260,14 +2267,16 @@ class FormStructureAndData {
2260
2267
  }
2261
2268
  if (definitionReceived.tables) {
2262
2269
  const tables = definitionReceived.tables.map(objDef => {
2263
- let visibleStates = objDef.visibleStates;
2264
- let enabledStates = objDef.enabledStates || objDef.editableStates;
2265
- if (!visibleStates) {
2266
- visibleStates = (objDef.tableModes || '').split(',')
2267
- .map(state => state.trim())
2268
- .filter(state => state.length > 0) || [];
2269
- enabledStates = [...visibleStates];
2270
+ var _a, _b, _c, _d, _e, _f, _g;
2271
+ let visibleStates = (_e = (_a = objDef.visibleStates) !== null && _a !== void 0 ? _a : ((_d = (_c = (_b = objDef.tableModes) === null || _b === void 0 ? void 0 : _b.split(',')) === null || _c === void 0 ? void 0 : _c.map(state => state.trim())) === null || _d === void 0 ? void 0 : _d.filter(state => state))) !== null && _e !== void 0 ? _e : [];
2272
+ let enabledStates = (_g = (_f = objDef.enabledStates) !== null && _f !== void 0 ? _f : objDef.editableStates) !== null && _g !== void 0 ? _g : [];
2273
+ if (!Array.isArray(visibleStates) && typeof visibleStates === 'string') {
2274
+ visibleStates = (visibleStates === neverVisible) ? [] : allStates;
2275
+ }
2276
+ if (!Array.isArray(enabledStates) && typeof enabledStates === 'string') {
2277
+ enabledStates = (enabledStates === neverVisible) ? [] : visibleStates;
2270
2278
  }
2279
+ enabledStates = enabledStates.filter(state => visibleStates.includes(state));
2271
2280
  return Object.assign(Object.assign({}, objDef), { visibleStates, enabledStates });
2272
2281
  });
2273
2282
  for (const tableReceived of tables) {
@@ -2281,11 +2290,10 @@ class FormStructureAndData {
2281
2290
  }
2282
2291
  if (definitionReceived.sections) {
2283
2292
  const formSections = definitionReceived.sections.map(objDef => {
2284
- let visibleStates = objDef.visibleStates;
2285
- if (!visibleStates) {
2286
- visibleStates = (objDef.sectionModes || '').split(',')
2287
- .map(state => state.trim())
2288
- .filter(state => state.length > 0) || [];
2293
+ var _a, _b, _c, _d, _e;
2294
+ let visibleStates = (_e = (_a = objDef.visibleStates) !== null && _a !== void 0 ? _a : ((_d = (_c = (_b = objDef.sectionModes) === null || _b === void 0 ? void 0 : _b.split(',')) === null || _c === void 0 ? void 0 : _c.map(state => state.trim())) === null || _d === void 0 ? void 0 : _d.filter(state => state))) !== null && _e !== void 0 ? _e : [];
2295
+ if (!Array.isArray(visibleStates) && typeof visibleStates === 'string') {
2296
+ visibleStates = (visibleStates === neverVisible) ? [] : allStates;
2289
2297
  }
2290
2298
  return Object.assign(Object.assign({}, objDef), { visibleStates });
2291
2299
  });