@magic-xpa/gui 4.800.0-dev480.13 → 4.800.0-dev480.130
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/magic-xpa-gui.umd.js +1057 -7516
- package/bundles/magic-xpa-gui.umd.js.map +1 -1
- package/bundles/magic-xpa-gui.umd.min.js +1 -1
- package/bundles/magic-xpa-gui.umd.min.js.map +1 -1
- package/esm2015/index.js +1 -1
- package/esm2015/magic-xpa-gui.js +1 -4
- package/esm2015/src/Commands.js +7 -114
- package/esm2015/src/Events.js +1 -517
- package/esm2015/src/EventsProcessor.js +1 -51
- package/esm2015/src/FocusManager.js +1 -13
- package/esm2015/src/GuiConstants.js +2 -11
- package/esm2015/src/GuiEnums.js +127 -130
- package/esm2015/src/GuiEnvironment.js +1 -1
- package/esm2015/src/IFlowMonitorQueue.js +1 -1
- package/esm2015/src/Manager.js +10 -148
- package/esm2015/src/UIBridge.js +1 -6
- package/esm2015/src/env/IEnvironment.js +1 -1
- package/esm2015/src/gui/ControlBase.js +1 -1
- package/esm2015/src/gui/GuiMgControl.js +1 -94
- package/esm2015/src/gui/GuiMgForm.js +1 -1
- package/esm2015/src/gui/KeyboardItem.js +5 -46
- package/esm2015/src/gui/LastFocusedVal.js +1 -5
- package/esm2015/src/gui/MgValue.js +1 -1
- package/esm2015/src/gui/PropParentInterface.js +1 -1
- package/esm2015/src/gui/low/DialogHandler.js +1 -10
- package/esm2015/src/gui/low/GuiCommand.js +1 -12
- package/esm2015/src/gui/low/GuiCommandQueue.js +1 -66
- package/esm2015/src/gui/low/GuiInteractive.js +2 -465
- package/esm2015/src/gui/low/Style.js +1 -9
- package/esm2015/src/management/RuntimeContextBase.js +9 -14
- package/esm2015/src/management/data/BlobType.js +0 -0
- package/esm2015/src/management/data/DcValues.js +8 -67
- package/esm2015/src/management/data/DcValuesBuilderBase.js +2 -37
- package/esm2015/src/management/data/FieldDef.js +1 -95
- package/esm2015/src/management/data/FieldsTable.js +2 -28
- package/esm2015/src/management/data/GuiDataViewBase.js +33 -72
- package/esm2015/src/management/data/GuiFieldBase.js +4 -39
- package/esm2015/src/management/data/IRecord.js +1 -1
- package/esm2015/src/management/data/IReferencedObject.js +1 -8
- package/esm2015/src/management/data/NUM_TYPE.js +14 -485
- package/esm2015/src/management/data/ObjectReferenceBase.js +1 -3
- package/esm2015/src/management/data/ObjectReferencesCollection.js +1 -2
- package/esm2015/src/management/data/RecordUtils.js +6 -112
- package/esm2015/src/management/data/VectorType.js +17 -252
- package/esm2015/src/management/data/VectorTypeBase.js +1 -35
- package/esm2015/src/management/events/IActionManager.js +1 -1
- package/esm2015/src/management/events/IGuiEventsManager.js +1 -1
- package/esm2015/src/management/exp/ExpressionInterface.js +4 -3
- package/esm2015/src/management/exp/GuiExpressionEvaluator.js +38 -155
- package/esm2015/src/management/gui/ControlTable.js +18 -72
- package/esm2015/src/management/gui/DisplayConvertor.js +43 -493
- package/esm2015/src/management/gui/FieldValidator.js +58 -339
- package/esm2015/src/management/gui/GuiControlPropertyAdapter.js +1 -1
- package/esm2015/src/management/gui/GuiFormPropertyAdapter.js +1 -8
- package/esm2015/src/management/gui/HebrewDate.js +3 -140
- package/esm2015/src/management/gui/Helps.js +2 -48
- package/esm2015/src/management/gui/MgControlBase.js +160 -874
- package/esm2015/src/management/gui/MgFormBase.js +68 -407
- package/esm2015/src/management/gui/PIC.js +56 -285
- package/esm2015/src/management/gui/PropDefaults.js +13 -48
- package/esm2015/src/management/gui/PropInterface.js +3 -4
- package/esm2015/src/management/gui/PropTable.js +72 -183
- package/esm2015/src/management/gui/Property.js +40 -373
- package/esm2015/src/management/gui/ValidationDetails.js +10 -52
- package/esm2015/src/management/gui/ValidationDetailsBase.js +12 -45
- package/esm2015/src/management/gui/WrongFormatException.js +1 -15
- package/esm2015/src/management/tasks/GuiDataCollection.js +1 -1
- package/esm2015/src/management/tasks/GuiTaskBase.js +38 -383
- package/esm2015/src/management/tasks/IMGDataTable.js +1 -1
- package/esm2015/src/management/tasks/ITask.js +1 -1
- package/esm2015/src/management/tasks/MgTimer.js +1 -16
- package/esm2015/src/management/tasks/TaskDefinitionId.js +1 -18
- package/esm2015/src/management/tasks/TaskDefinitionIdTableSaxHandler.js +1 -13
- package/esm2015/src/util/AuthenticationDialogHandler.js +1 -4
- package/esm2015/src/util/MemoryUtil.js +1 -41
- package/esm2015/src/util/ObjectReference.js +1 -8
- package/esm2015/src/util/ProcessLauncher.js +3 -21
- package/esm2015/src/util/UsernamePasswordCredentials.js +1 -9
- package/fesm2015/magic-xpa-gui.js +859 -7051
- package/fesm2015/magic-xpa-gui.js.map +1 -1
- package/magic-xpa-gui.d.ts +0 -3
- package/package.json +2 -2
- package/src/Commands.d.ts +1 -0
- package/src/Events.d.ts +0 -2
- package/src/GuiEnums.d.ts +127 -129
- package/src/env/IEnvironment.d.ts +3 -0
- package/src/gui/GuiMgControl.d.ts +1 -0
- package/src/gui/PropParentInterface.d.ts +1 -1
- package/src/gui/low/Style.d.ts +0 -3
- package/src/management/data/GuiDataViewBase.d.ts +4 -4
- package/src/management/data/IRecord.d.ts +1 -1
- package/src/management/exp/ExpressionInterface.d.ts +3 -0
- package/src/management/exp/GuiExpressionEvaluator.d.ts +4 -6
- package/src/management/gui/ControlTable.d.ts +1 -1
- package/src/management/gui/DisplayConvertor.d.ts +1 -1
- package/src/management/gui/GuiControlPropertyAdapter.d.ts +1 -1
- package/src/management/gui/MgControlBase.d.ts +8 -7
- package/src/management/gui/MgFormBase.d.ts +6 -6
- package/src/management/gui/PIC.d.ts +1 -0
- package/src/management/gui/PropInterface.d.ts +3 -4
- package/src/management/gui/PropTable.d.ts +4 -5
- package/src/management/gui/Property.d.ts +1 -1
- package/src/management/tasks/GuiTaskBase.d.ts +8 -14
|
@@ -6,12 +6,9 @@ import { Events } from "../../Events";
|
|
|
6
6
|
import { PropInterface } from "./PropInterface";
|
|
7
7
|
import { GuiFormPropertyAdapter } from "./GuiFormPropertyAdapter";
|
|
8
8
|
import { GuiControlPropertyAdapter } from "./GuiControlPropertyAdapter";
|
|
9
|
-
/// <summary>
|
|
10
|
-
/// properties table
|
|
11
|
-
/// </summary>
|
|
12
9
|
export class PropTable {
|
|
13
10
|
constructor(parent_) {
|
|
14
|
-
this._hashTab = null;
|
|
11
|
+
this._hashTab = null;
|
|
15
12
|
this._props = null;
|
|
16
13
|
this._parent = null;
|
|
17
14
|
if (arguments.length === 0) {
|
|
@@ -28,75 +25,28 @@ export class PropTable {
|
|
|
28
25
|
this.constructor_0();
|
|
29
26
|
this._parent = parent_;
|
|
30
27
|
}
|
|
31
|
-
/// <summary>
|
|
32
|
-
/// parse the properties
|
|
33
|
-
/// </summary>
|
|
34
|
-
/// <param name = "parentObj">reference to parent object(GuiTaskBase)</param>
|
|
35
28
|
fillData(parentObj, parType, parser) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
});
|
|
29
|
+
while (this.initInnerObjects(parser.getNextTag(), parentObj, parType, parser)) {
|
|
30
|
+
}
|
|
40
31
|
}
|
|
41
|
-
/// <summary>
|
|
42
|
-
/// For recompute: Parse the existing properties and create references to them
|
|
43
|
-
/// </summary>
|
|
44
|
-
/// <param name = "task">reference to the parent GuiTaskBase</param>
|
|
45
32
|
fillDataByExists(task, parser) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
});
|
|
33
|
+
while (this.fillExistInnerObjects(parser.getNextTag(), task, parser)) {
|
|
34
|
+
}
|
|
50
35
|
}
|
|
51
|
-
/// <summary>
|
|
52
|
-
/// fill the inner objects of the class
|
|
53
|
-
/// </summary>
|
|
54
|
-
/// <param name = "foundTagName">name of tag, of object, which need be allocated</param>
|
|
55
|
-
/// <param name = "parentObj">reference to the parent object, need be added to every Property</param>
|
|
56
|
-
/// <returns> Manager.XmlParser.getCurrIndex(), the found object tag and ALL its subtags finish</returns>
|
|
57
36
|
initInnerObjects(foundTagName, parentObj, parType, parser) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return true;
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
/// <summary>
|
|
70
|
-
/// if the property doesn't exist in the table then add it, otherwise change it
|
|
71
|
-
/// </summary>
|
|
72
|
-
/// <param name = "prop">the property to add</param>
|
|
73
|
-
/// <param name = "checkExistence">if true then the property will be added if it is not already exists if false then no existence is checked and the property will not be
|
|
74
|
-
/// added to the hashtable (use it when many instances of the same property are allowed)
|
|
75
|
-
/// </param>
|
|
76
|
-
addPropWithCheckExistence(prop, checkExistence) {
|
|
77
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
78
|
-
if (checkExistence) {
|
|
79
|
-
let existingProp = this._hashTab.get_Item(prop.getID());
|
|
80
|
-
if (existingProp === null)
|
|
81
|
-
this.addPropWithKey(prop, prop.getID());
|
|
82
|
-
else {
|
|
83
|
-
yield existingProp.setValue(yield prop.getValue());
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else
|
|
87
|
-
this.addPropWithKey(prop, prop.getID());
|
|
88
|
-
});
|
|
37
|
+
if (foundTagName !== null && foundTagName === XMLConstants.MG_TAG_PROP) {
|
|
38
|
+
let property = new Property();
|
|
39
|
+
property.fillData(parentObj, parType, parser);
|
|
40
|
+
this.addProp(property);
|
|
41
|
+
}
|
|
42
|
+
else
|
|
43
|
+
return false;
|
|
44
|
+
return true;
|
|
89
45
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
/// </summary>
|
|
93
|
-
/// <param name = "prop"></param>
|
|
94
|
-
/// <param name = "key"></param>
|
|
95
|
-
addPropWithKey(prop, key) {
|
|
96
|
-
this._hashTab.set_Item(key, prop);
|
|
46
|
+
addProp(prop) {
|
|
47
|
+
this._hashTab.set_Item(prop.getID(), prop);
|
|
97
48
|
this._props.push(prop);
|
|
98
49
|
}
|
|
99
|
-
/// <param name = "id"></param>
|
|
100
50
|
delPropById(id) {
|
|
101
51
|
if (this._props === null)
|
|
102
52
|
return;
|
|
@@ -106,78 +56,66 @@ export class PropTable {
|
|
|
106
56
|
this._hashTab.Remove(id);
|
|
107
57
|
}
|
|
108
58
|
}
|
|
109
|
-
/// <summary>
|
|
110
|
-
/// For Recompute: Fill PropTable with reference to existing PropTable
|
|
111
|
-
/// </summary>
|
|
112
|
-
/// <param name = "task">reference to parent GuiTaskBase</param>
|
|
113
59
|
fillExistInnerObjects(nameOfFound, task, parser) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
60
|
+
let tokensVector = new List();
|
|
61
|
+
let endContext = -1;
|
|
62
|
+
if (nameOfFound == null)
|
|
63
|
+
return false;
|
|
64
|
+
if (nameOfFound === XMLConstants.MG_TAG_CONTROL)
|
|
65
|
+
endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex());
|
|
66
|
+
else if (nameOfFound === XMLConstants.MG_TAG_PROP)
|
|
67
|
+
endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
|
|
68
|
+
else if (nameOfFound === ('/' + XMLConstants.MG_TAG_CONTROL) ||
|
|
69
|
+
GuiFormPropertyAdapter.IsEndFormTag(nameOfFound)) {
|
|
70
|
+
parser.setCurrIndex2EndOfTag();
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
if (endContext !== -1 && endContext < parser.getXMLdata().length) {
|
|
74
|
+
let tag = parser.getXMLsubstring(endContext);
|
|
75
|
+
parser.add2CurrIndex(tag.indexOf(nameOfFound) + nameOfFound.length);
|
|
76
|
+
tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
|
|
77
|
+
if (nameOfFound === XMLConstants.MG_TAG_CONTROL) {
|
|
78
|
+
this._parent = task.getCtrl(NNumber.Parse(this.fillName(tokensVector)));
|
|
79
|
+
parser.setCurrIndex(++endContext);
|
|
80
|
+
return true;
|
|
127
81
|
}
|
|
128
|
-
if (
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
139
|
-
else if (nameOfFound === XMLConstants.MG_TAG_PROP) {
|
|
140
|
-
if (this._parent != null) {
|
|
141
|
-
let strPropId = this.fillName(tokensVector);
|
|
142
|
-
let propId = NNumber.Parse(strPropId);
|
|
143
|
-
let prop = null;
|
|
144
|
-
if (this._parent != null)
|
|
145
|
-
prop = yield this._parent.getProp(propId);
|
|
146
|
-
if (prop == null)
|
|
147
|
-
Events.WriteExceptionToLog(NString.Format("in PropTable.fillExistInnerObjects() no property with id={0}", strPropId));
|
|
148
|
-
else
|
|
149
|
-
yield this.addPropWithCheckExistence(prop, false);
|
|
150
|
-
parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
|
|
151
|
-
return true;
|
|
152
|
-
}
|
|
82
|
+
else if (nameOfFound === XMLConstants.MG_TAG_PROP) {
|
|
83
|
+
if (this._parent != null) {
|
|
84
|
+
let strPropId = this.fillName(tokensVector);
|
|
85
|
+
let propId = NNumber.Parse(strPropId);
|
|
86
|
+
let prop = null;
|
|
87
|
+
if (this._parent != null)
|
|
88
|
+
prop = this._parent.getProp(propId);
|
|
89
|
+
if (prop == null)
|
|
90
|
+
Events.WriteExceptionToLog(NString.Format("in PropTable.fillExistInnerObjects() no property with id={0}", strPropId));
|
|
153
91
|
else
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
else {
|
|
157
|
-
Events.WriteExceptionToLog(NString.Format("in PropTable.fillExistInnerObjects() illegal tag name: {0}", nameOfFound));
|
|
158
|
-
parser.setCurrIndex(++endContext);
|
|
92
|
+
this.addProp(prop);
|
|
93
|
+
parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
|
|
159
94
|
return true;
|
|
160
95
|
}
|
|
96
|
+
else
|
|
97
|
+
Events.WriteExceptionToLog("in PropTable.fillExistInnerObjects() missing control");
|
|
161
98
|
}
|
|
162
|
-
|
|
99
|
+
else {
|
|
100
|
+
Events.WriteExceptionToLog(NString.Format("in PropTable.fillExistInnerObjects() illegal tag name: {0}", nameOfFound));
|
|
163
101
|
parser.setCurrIndex(++endContext);
|
|
164
102
|
return true;
|
|
165
103
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
return true;
|
|
170
|
-
}
|
|
171
|
-
else if (nameOfFound === ('/' + XMLConstants.MG_TAG_FLD))
|
|
172
|
-
return false;
|
|
173
|
-
parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length); // exit of bounds
|
|
104
|
+
}
|
|
105
|
+
if (nameOfFound === XMLConstants.MG_TAG_CONTROL) {
|
|
106
|
+
parser.setCurrIndex(++endContext);
|
|
174
107
|
return true;
|
|
175
|
-
}
|
|
108
|
+
}
|
|
109
|
+
else if (GuiFormPropertyAdapter.IsFormTag(nameOfFound)) {
|
|
110
|
+
this._parent = task.getForm();
|
|
111
|
+
this._parent.fillName(nameOfFound);
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
else if (nameOfFound === ('/' + XMLConstants.MG_TAG_FLD))
|
|
115
|
+
return false;
|
|
116
|
+
parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
|
|
117
|
+
return true;
|
|
176
118
|
}
|
|
177
|
-
/// <summary>
|
|
178
|
-
/// Find the name of an existing Control, or of an existing Property
|
|
179
|
-
/// </summary>
|
|
180
|
-
/// <returns> Name of control</returns>
|
|
181
119
|
fillName(tokensVector) {
|
|
182
120
|
let attribute = null;
|
|
183
121
|
let valueStr;
|
|
@@ -190,56 +128,29 @@ export class PropTable {
|
|
|
190
128
|
Events.WriteExceptionToLog(NString.Format("Unrecognized attribute: '{0}'", attribute));
|
|
191
129
|
return null;
|
|
192
130
|
}
|
|
193
|
-
/// <summary>
|
|
194
|
-
/// get size of the vector props
|
|
195
|
-
/// </summary>
|
|
196
|
-
/// <returns> size of the props member</returns>
|
|
197
131
|
getSize() {
|
|
198
132
|
return this._props.length;
|
|
199
133
|
}
|
|
200
|
-
/// <summary>
|
|
201
|
-
/// get a Property by its index in the table
|
|
202
|
-
/// </summary>
|
|
203
|
-
/// <param name = "idx">the index of the property</param>
|
|
204
|
-
/// <returns> reference to the required Property</returns>
|
|
205
134
|
getProp(idx) {
|
|
206
135
|
if (idx < 0 || idx >= this._props.length)
|
|
207
136
|
return null;
|
|
208
137
|
return this._props.get_Item(idx);
|
|
209
138
|
}
|
|
210
|
-
/// <summary>
|
|
211
|
-
/// get a Property by its id
|
|
212
|
-
/// </summary>
|
|
213
|
-
/// <param name = "id">of the property</param>
|
|
214
139
|
getPropById(id) {
|
|
215
140
|
return this._hashTab.get_Item(id);
|
|
216
141
|
}
|
|
217
142
|
propExists(id) {
|
|
218
143
|
return this.getPropById(id) !== null;
|
|
219
144
|
}
|
|
220
|
-
/// <summary>
|
|
221
|
-
/// set a property value. in case the table doesn't contain such property, creates a new Property object and add it to the table.
|
|
222
|
-
/// </summary>
|
|
223
|
-
/// <param name = "propId">the id of the property</param>
|
|
224
|
-
/// <param name = "val">the value of the property</param>
|
|
225
|
-
/// <param name = "parent">a reference to the parent object</param>
|
|
226
|
-
/// <param name = "parentType">the type of the parent object</param>
|
|
227
145
|
setProp(propId, val, parent, parentType) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
prop.setOrgValue();
|
|
236
|
-
});
|
|
146
|
+
let prop = this.getPropById(propId);
|
|
147
|
+
if (prop === null) {
|
|
148
|
+
prop = new Property(propId, parent, parentType);
|
|
149
|
+
this.addProp(prop);
|
|
150
|
+
}
|
|
151
|
+
prop.setValue(val);
|
|
152
|
+
prop.setOrgValue();
|
|
237
153
|
}
|
|
238
|
-
/// <summary>
|
|
239
|
-
/// refresh display of the properties in the Table
|
|
240
|
-
/// </summary>
|
|
241
|
-
/// <param name = "forceRefresh">if true, refresh is forced regardless of the previous value</param>
|
|
242
|
-
/// <param name = "onlyRepeatableProps">if true, refreshes only repeatable tree properties</param>
|
|
243
154
|
RefreshDisplay(forceRefresh, onlyRepeatableProps) {
|
|
244
155
|
return __awaiter(this, void 0, void 0, function* () {
|
|
245
156
|
let allPropsRefreshed = true;
|
|
@@ -254,13 +165,8 @@ export class PropTable {
|
|
|
254
165
|
for (i = 0; i < this.getSize(); i++) {
|
|
255
166
|
prop = this.getProp(i);
|
|
256
167
|
try {
|
|
257
|
-
// if this property is not repeatable in tree or table, and onlyRepeatableProps turned on
|
|
258
|
-
// do not refresh this property
|
|
259
168
|
if (onlyRepeatableProps && !Property.isRepeatableInTable(prop.getID()))
|
|
260
169
|
continue;
|
|
261
|
-
// Refresh Visible prop only after refreshing the navigation props like X, Y.
|
|
262
|
-
// Otherwise, the control is shown on its default location first and
|
|
263
|
-
// then moved somewhere else. And this is clearly visible.
|
|
264
170
|
if (prop.getID() === PropInterface.PROP_TYPE_VISIBLE)
|
|
265
171
|
visibleProps.push(prop);
|
|
266
172
|
else
|
|
@@ -282,46 +188,29 @@ export class PropTable {
|
|
|
282
188
|
return allPropsRefreshed;
|
|
283
189
|
});
|
|
284
190
|
}
|
|
285
|
-
/// <summary>
|
|
286
|
-
/// update all properties array size
|
|
287
|
-
/// </summary>
|
|
288
|
-
/// <param name = "newSize"></param>
|
|
289
191
|
updatePrevValueArray(newSize) {
|
|
290
192
|
for (let i = 0; i < this._props.length; i = i + 1) {
|
|
291
193
|
let property = this._props.get_Item(i);
|
|
292
194
|
property.updatePrevValueArray(newSize);
|
|
293
195
|
}
|
|
294
196
|
}
|
|
295
|
-
/// <summary>
|
|
296
|
-
/// update all properties array size
|
|
297
|
-
/// </summary>
|
|
298
197
|
resetPrevValueArray() {
|
|
299
198
|
for (let i = 0; i < this._props.length; i = i + 1) {
|
|
300
199
|
let property = this._props.get_Item(i);
|
|
301
200
|
property.ResetPrevValueArray();
|
|
302
201
|
}
|
|
303
202
|
}
|
|
304
|
-
/// <summary>
|
|
305
|
-
/// Reset prev value at index.
|
|
306
|
-
/// </summary>
|
|
307
203
|
resetPrevValAt(index) {
|
|
308
204
|
for (let i = 0; i < this._props.length; i = i + 1) {
|
|
309
205
|
let property = this._props.get_Item(i);
|
|
310
206
|
property.resetPrevValAt(index);
|
|
311
207
|
}
|
|
312
208
|
}
|
|
313
|
-
/// <summary>
|
|
314
|
-
/// clear prevValue array of Label property if exists
|
|
315
|
-
/// </summary>
|
|
316
209
|
clearLabelPrevValueArray() {
|
|
317
210
|
let labelProperty = this.getPropById(45);
|
|
318
211
|
if (labelProperty !== null)
|
|
319
212
|
labelProperty.clearPrevValueArray();
|
|
320
213
|
}
|
|
321
|
-
/// <summary>
|
|
322
|
-
/// returns control
|
|
323
|
-
/// </summary>
|
|
324
|
-
/// <returns></returns>
|
|
325
214
|
getCtrlRef() {
|
|
326
215
|
return ((this._parent instanceof GuiControlPropertyAdapter) ? this._parent : null);
|
|
327
216
|
}
|
|
@@ -332,4 +221,4 @@ export class PropTable {
|
|
|
332
221
|
}
|
|
333
222
|
}
|
|
334
223
|
}
|
|
335
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvcFRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9tYW5hZ2VtZW50L2d1aS9Qcm9wVGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFekQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEUsYUFBYTtBQUNiLHNCQUFzQjtBQUN0QixjQUFjO0FBQ2QsTUFBTSxPQUFPLFNBQVM7SUFZcEIsWUFBWSxPQUE2QjtRQVZqQyxhQUFRLEdBQWdDLElBQUksQ0FBQyxDQUFDLGdDQUFnQztRQUM5RSxXQUFNLEdBQW1CLElBQUksQ0FBQztRQUM5QixZQUFPLEdBQXdCLElBQUksQ0FBQztRQVUxQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQVksQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksU0FBUyxDQUFtQixFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQTRCO1FBQ2hELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYTtJQUNiLDBCQUEwQjtJQUMxQixjQUFjO0lBQ2QsNkVBQTZFO0lBQ3ZFLFFBQVEsQ0FBQyxTQUE4QixFQUFFLE9BQWUsRUFBRSxNQUFpQjs7WUFDL0UsT0FBTyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRTthQUNwRjtRQUNILENBQUM7S0FBQTtJQUVELGFBQWE7SUFDYixnRkFBZ0Y7SUFDaEYsY0FBYztJQUNkLG9FQUFvRTtJQUM5RCxnQkFBZ0IsQ0FBQyxJQUFpQixFQUFFLE1BQWlCOztZQUN6RCxPQUFPLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUU7YUFDM0U7UUFDSCxDQUFDO0tBQUE7SUFFRCxhQUFhO0lBQ2IseUNBQXlDO0lBQ3pDLGNBQWM7SUFDZCx3RkFBd0Y7SUFDeEYscUdBQXFHO0lBQ3JHLHlHQUF5RztJQUMzRixnQkFBZ0IsQ0FBQyxZQUFvQixFQUFFLFNBQThCLEVBQUUsT0FBZSxFQUFFLE1BQWlCOztZQUNySCxJQUFJLFlBQVksS0FBSyxJQUFJLElBQUksWUFBWSxLQUFLLFlBQVksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3RFLElBQUksUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3hDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3REOztnQkFFQyxPQUFPLEtBQUssQ0FBQztZQUNmLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztLQUFBO0lBRUQsYUFBYTtJQUNiLGlGQUFpRjtJQUNqRixjQUFjO0lBQ2Qsb0RBQW9EO0lBQ3BELHlLQUF5SztJQUN6SywwRkFBMEY7SUFDMUYsWUFBWTtJQUNOLHlCQUF5QixDQUFDLElBQWMsRUFBRSxjQUF1Qjs7WUFDckUsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDNUUsSUFBSSxZQUFZLEtBQUssSUFBSTtvQkFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7cUJBQ3JDO29CQUNILE1BQU0sWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2lCQUNwRDthQUNGOztnQkFFQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDO0tBQUE7SUFFRCxhQUFhO0lBQ2IsNEJBQTRCO0lBQzVCLGNBQWM7SUFDZCxpQ0FBaUM7SUFDakMsZ0NBQWdDO0lBQ2hDLGNBQWMsQ0FBQyxJQUFjLEVBQUUsR0FBVztRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELCtCQUErQjtJQUMvQixXQUFXLENBQUMsRUFBVTtRQUNwQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSTtZQUN0QixPQUFPO1FBRVQsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksWUFBWSxLQUFLLElBQUksRUFBRTtZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUUxQjtJQUNILENBQUM7SUFFRCxhQUFhO0lBQ2Isd0VBQXdFO0lBQ3hFLGNBQWM7SUFDZCxnRUFBZ0U7SUFDbEQscUJBQXFCLENBQUMsV0FBbUIsRUFBRSxJQUFpQixFQUFFLE1BQWlCOztZQUUzRixJQUFJLFlBQVksR0FBaUIsSUFBSSxJQUFJLEVBQVUsQ0FBQztZQUNwRCxJQUFJLFVBQVUsR0FBVyxDQUFDLENBQUMsQ0FBQztZQUU1QixJQUFJLFdBQVcsSUFBSSxJQUFJO2dCQUNyQixPQUFPLEtBQUssQ0FBQztZQUVmLElBQUksV0FBVyxLQUFLLFlBQVksQ0FBQyxjQUFjO2dCQUM3QyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2lCQUNyRixJQUFJLFdBQVcsS0FBSyxZQUFZLENBQUMsV0FBVztnQkFDL0MsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztpQkFDcEYsSUFBSSxXQUFXLEtBQUssQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQztnQkFDMUQsc0JBQXNCLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNsRCxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxFQUFFO2dCQUNoRSwyQkFBMkI7Z0JBQzNCLElBQUksR0FBRyxHQUFXLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BFLFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNwRyxJQUFJLFdBQVcsS0FBSyxZQUFZLENBQUMsY0FBYyxFQUFFO29CQUMvQywyQkFBMkI7b0JBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4RSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7b0JBQ25ELE9BQU8sSUFBSSxDQUFDO2lCQUNiO3FCQUNJLElBQUksV0FBVyxLQUFLLFlBQVksQ0FBQyxXQUFXLEVBQUU7b0JBQ2pELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUU7d0JBQ3hCLElBQUksU0FBUyxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ3BELElBQUksTUFBTSxHQUFXLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQzlDLElBQUksSUFBSSxHQUFhLElBQUksQ0FBQzt3QkFFMUIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUk7NEJBQ3RCLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUU1QyxJQUFJLElBQUksSUFBSSxJQUFJOzRCQUNkLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLDhEQUE4RCxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7OzRCQUV0SCxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3BELE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQy9ELE9BQU8sSUFBSSxDQUFDO3FCQUNiOzt3QkFFQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsc0RBQXNELENBQUMsQ0FBQztpQkFDdEY7cUJBQ0k7b0JBQ0gsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsNERBQTRELEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDdEgsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNsQyxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO1lBRUQsSUFBSSxXQUFXLEtBQUssWUFBWSxDQUFDLGNBQWMsRUFBRTtnQkFDL0MsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNsQyxPQUFPLElBQUksQ0FBQzthQUNiO2lCQUNJLElBQUksc0JBQXNCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN0RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDQSxJQUFJLENBQUMsT0FBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFbEUsT0FBTyxJQUFJLENBQUM7YUFDYjtpQkFDSSxJQUFJLFdBQVcsS0FBSyxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO2dCQUN0RCxPQUFPLEtBQUssQ0FBQztZQUVmLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7WUFDakYsT0FBTyxJQUFJLENBQUM7UUFHZCxDQUFDO0tBQUE7SUFFRCxhQUFhO0lBQ2Isc0VBQXNFO0lBQ3RFLGNBQWM7SUFDZCx1Q0FBdUM7SUFDL0IsUUFBUSxDQUFDLFlBQTBCO1FBQ3pDLElBQUksU0FBUyxHQUFXLElBQUksQ0FBQztRQUM3QixJQUFJLFFBQWdCLENBQUM7UUFFckIsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUQsU0FBUyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXhDLElBQUksU0FBUyxLQUFLLFlBQVksQ0FBQyxjQUFjLElBQUksU0FBUyxLQUFLLFlBQVksQ0FBQyxVQUFVO2dCQUNwRixPQUFPLFFBQVEsQ0FBQztTQUNuQjtRQUNELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLCtCQUErQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDdkYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsYUFBYTtJQUNiLGtDQUFrQztJQUNsQyxjQUFjO0lBQ2QsZ0RBQWdEO0lBQ2hELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRCxhQUFhO0lBQ2IsOENBQThDO0lBQzlDLGNBQWM7SUFDZCx5REFBeUQ7SUFDekQsMERBQTBEO0lBQzFELE9BQU8sQ0FBQyxHQUFXO1FBQ2pCLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsYUFBYTtJQUNiLDhCQUE4QjtJQUM5QixjQUFjO0lBQ2QsOENBQThDO0lBQzlDLFdBQVcsQ0FBQyxFQUFVO1FBQ3BCLE9BQWlCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxVQUFVLENBQUMsRUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxhQUFhO0lBQ2IsbUlBQW1JO0lBQ25JLGNBQWM7SUFDZCx5REFBeUQ7SUFDekQseURBQXlEO0lBQ3pELG1FQUFtRTtJQUNuRSxvRUFBb0U7SUFDOUQsT0FBTyxDQUFDLE1BQWMsRUFBRSxHQUFXLEVBQUUsTUFBMkIsRUFBRSxVQUFrQjs7WUFFeEYsSUFBSSxJQUFJLEdBQWEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbEQ7WUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO0tBQUE7SUFFRCxhQUFhO0lBQ2Isb0RBQW9EO0lBQ3BELGNBQWM7SUFDZCxvR0FBb0c7SUFDcEcsa0dBQWtHO0lBQzVGLGNBQWMsQ0FBQyxZQUFxQixFQUFFLG1CQUE0Qjs7WUFFdEUsSUFBSSxpQkFBaUIsR0FBWSxJQUFJLENBQUM7WUFDdEMsSUFBSSxJQUFjLENBQUM7WUFDbkIsSUFBSSxDQUFDLEdBQVcsQ0FBQyxDQUFDO1lBQ2xCLElBQUksSUFBSSxHQUEyQixJQUFJLENBQUM7WUFDeEMsSUFBSSxZQUFZLEdBQW1CLElBQUksSUFBSSxFQUFFLENBQUM7WUFHOUMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxZQUFZLHlCQUF5QjtnQkFDM0UsSUFBSSxHQUErQixJQUFJLENBQUMsT0FBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRTdELElBQUksSUFBSSxJQUFJLElBQUk7Z0JBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUczQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbkMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUk7b0JBQ0YseUZBQXlGO29CQUN6RiwrQkFBK0I7b0JBQy9CLElBQUksbUJBQW1CLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNwRSxTQUFTO29CQUVYLDZFQUE2RTtvQkFDN0Usb0VBQW9FO29CQUNwRSwwREFBMEQ7b0JBQzFELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLGFBQWEsQ0FBQyxpQkFBaUI7d0JBQ2xELFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O3dCQUV4QixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQzNDO2dCQUNELE9BQU8sRUFBRSxFQUFFO29CQUNULElBQUksRUFBRSxZQUFZLG9CQUFvQixFQUFFO3dCQUN0QyxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQy9CLGlCQUFpQixHQUFHLEtBQUssQ0FBQztxQkFDM0I7O3dCQUVDLE1BQU8sRUFBRSxDQUFDO2lCQUViO2FBQ0Y7WUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFDNUM7Z0JBQ0UsSUFBSSxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDaEQ7WUFFRCxPQUFPLGlCQUFpQixDQUFDO1FBQzNCLENBQUM7S0FBQTtJQUVELGFBQWE7SUFDYixzQ0FBc0M7SUFDdEMsY0FBYztJQUNkLG9DQUFvQztJQUNwQyxvQkFBb0IsQ0FBQyxPQUFlO1FBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6RCxJQUFJLFFBQVEsR0FBYSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxRQUFRLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRUQsYUFBYTtJQUNiLG9DQUFvQztJQUNwQyxjQUFjO0lBQ2QsbUJBQW1CO1FBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6RCxJQUFJLFFBQVEsR0FBYSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxhQUFhO0lBQ2IsOEJBQThCO0lBQzlCLGNBQWM7SUFDZCxjQUFjLENBQUMsS0FBYTtRQUMxQixLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekQsSUFBSSxRQUFRLEdBQWEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxhQUFhO0lBQ2IscURBQXFEO0lBQ3JELGNBQWM7SUFDZCx3QkFBd0I7UUFDdEIsSUFBSSxhQUFhLEdBQWEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLGFBQWEsS0FBSyxJQUFJO1lBQ3hCLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxhQUFhO0lBQ2IscUJBQXFCO0lBQ3JCLGNBQWM7SUFDZCx1QkFBdUI7SUFDdkIsVUFBVTtRQUNSLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLFlBQVkseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQTRCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUNwRCxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkQsSUFBSSxJQUFJLEdBQWEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIYXNodGFibGUsIExpc3QsIE5OdW1iZXIsIE5TdHJpbmcsIEFwcGxpY2F0aW9uRXhjZXB0aW9ufSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSBcIi4vUHJvcGVydHlcIjtcclxuaW1wb3J0IHtQcm9wUGFyZW50SW50ZXJmYWNlfSBmcm9tIFwiLi4vLi4vZ3VpL1Byb3BQYXJlbnRJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtYbWxQYXJzZXIsIFhNTENvbnN0YW50c30gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtHdWlUYXNrQmFzZX0gZnJvbSBcIi4uL3Rhc2tzL0d1aVRhc2tCYXNlXCI7XHJcbmltcG9ydCB7RXZlbnRzfSBmcm9tIFwiLi4vLi4vRXZlbnRzXCI7XHJcbmltcG9ydCB7UHJvcEludGVyZmFjZX0gZnJvbSBcIi4vUHJvcEludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBHdWlGb3JtUHJvcGVydHlBZGFwdGVyIH0gZnJvbSBcIi4vR3VpRm9ybVByb3BlcnR5QWRhcHRlclwiO1xyXG5pbXBvcnQgeyBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyIH0gZnJvbSBcIi4vR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlclwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBwcm9wZXJ0aWVzIHRhYmxlXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBQcm9wVGFibGUge1xyXG5cclxuICBwcml2YXRlIF9oYXNoVGFiOiBIYXNodGFibGU8bnVtYmVyLCBQcm9wZXJ0eT4gPSBudWxsOyAvLyBmb3IgZmFzdCBhY2Nlc3MgdG8gcHJvcGVydGllc1xyXG4gIHByaXZhdGUgX3Byb3BzOiBMaXN0PFByb3BlcnR5PiA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfcGFyZW50OiBQcm9wUGFyZW50SW50ZXJmYWNlID0gbnVsbDtcclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKHBhcmVudF86IFByb3BQYXJlbnRJbnRlcmZhY2UpO1xyXG4gIGNvbnN0cnVjdG9yKHBhcmVudF8/OiBQcm9wUGFyZW50SW50ZXJmYWNlKSB7XHJcblxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0b3JfMShwYXJlbnRfKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Byb3BzID0gbmV3IExpc3Q8UHJvcGVydHk+KCk7XHJcbiAgICB0aGlzLl9oYXNoVGFiID0gbmV3IEhhc2h0YWJsZTxudW1iZXIsIFByb3BlcnR5PigyMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEocGFyZW50XzogUHJvcFBhcmVudEludGVyZmFjZSk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnRfO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlIHRoZSBwcm9wZXJ0aWVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudE9ialwiPnJlZmVyZW5jZSB0byBwYXJlbnQgb2JqZWN0KEd1aVRhc2tCYXNlKTwvcGFyYW0+XHJcbiAgYXN5bmMgZmlsbERhdGEocGFyZW50T2JqOiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJUeXBlOiBzdHJpbmcsIHBhcnNlcjogWG1sUGFyc2VyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB3aGlsZSAoYXdhaXQgdGhpcy5pbml0SW5uZXJPYmplY3RzKHBhcnNlci5nZXROZXh0VGFnKCksIHBhcmVudE9iaiwgcGFyVHlwZSwgcGFyc2VyKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZvciByZWNvbXB1dGU6IFBhcnNlIHRoZSBleGlzdGluZyBwcm9wZXJ0aWVzIGFuZCBjcmVhdGUgcmVmZXJlbmNlcyB0byB0aGVtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj5yZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBHdWlUYXNrQmFzZTwvcGFyYW0+XHJcbiAgYXN5bmMgZmlsbERhdGFCeUV4aXN0cyh0YXNrOiBHdWlUYXNrQmFzZSwgcGFyc2VyOiBYbWxQYXJzZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHdoaWxlIChhd2FpdCB0aGlzLmZpbGxFeGlzdElubmVyT2JqZWN0cyhwYXJzZXIuZ2V0TmV4dFRhZygpLCB0YXNrLCBwYXJzZXIpKSB7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZmlsbCB0aGUgaW5uZXIgb2JqZWN0cyBvZiB0aGUgY2xhc3NcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm91bmRUYWdOYW1lXCI+bmFtZSBvZiB0YWcsIG9mIG9iamVjdCwgd2hpY2ggbmVlZCBiZSBhbGxvY2F0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyZW50T2JqXCI+cmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgb2JqZWN0LCBuZWVkIGJlIGFkZGVkIHRvIGV2ZXJ5IFByb3BlcnR5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IE1hbmFnZXIuWG1sUGFyc2VyLmdldEN1cnJJbmRleCgpLCB0aGUgZm91bmQgb2JqZWN0IHRhZyBhbmQgQUxMIGl0cyBzdWJ0YWdzIGZpbmlzaDwvcmV0dXJucz5cclxuICBwcml2YXRlIGFzeW5jIGluaXRJbm5lck9iamVjdHMoZm91bmRUYWdOYW1lOiBzdHJpbmcsIHBhcmVudE9iajogUHJvcFBhcmVudEludGVyZmFjZSwgcGFyVHlwZTogc3RyaW5nLCBwYXJzZXI6IFhtbFBhcnNlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKGZvdW5kVGFnTmFtZSAhPT0gbnVsbCAmJiBmb3VuZFRhZ05hbWUgPT09IFhNTENvbnN0YW50cy5NR19UQUdfUFJPUCkge1xyXG4gICAgICBsZXQgcHJvcGVydHk6IFByb3BlcnR5ID0gbmV3IFByb3BlcnR5KCk7XHJcbiAgICAgIHByb3BlcnR5LmZpbGxEYXRhKHBhcmVudE9iaiwgcGFyVHlwZSwgcGFyc2VyKTtcclxuICAgICAgYXdhaXQgdGhpcy5hZGRQcm9wV2l0aENoZWNrRXhpc3RlbmNlKHByb3BlcnR5LCB0cnVlKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaWYgdGhlIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHRhYmxlIHRoZW4gYWRkIGl0LCBvdGhlcndpc2UgY2hhbmdlIGl0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BcIj50aGUgcHJvcGVydHkgdG8gYWRkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNoZWNrRXhpc3RlbmNlXCI+aWYgdHJ1ZSB0aGVuIHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGFkZGVkIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGV4aXN0cyBpZiBmYWxzZSB0aGVuIG5vIGV4aXN0ZW5jZSBpcyBjaGVja2VkIGFuZCB0aGUgcHJvcGVydHkgd2lsbCBub3QgYmVcclxuICAvLy8gICBhZGRlZCB0byB0aGUgaGFzaHRhYmxlICh1c2UgaXQgd2hlbiBtYW55IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBwcm9wZXJ0eSBhcmUgYWxsb3dlZClcclxuICAvLy8gPC9wYXJhbT5cclxuICBhc3luYyBhZGRQcm9wV2l0aENoZWNrRXhpc3RlbmNlKHByb3A6IFByb3BlcnR5LCBjaGVja0V4aXN0ZW5jZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGNoZWNrRXhpc3RlbmNlKSB7XHJcbiAgICAgIGxldCBleGlzdGluZ1Byb3A6IFByb3BlcnR5ID0gPFByb3BlcnR5PnRoaXMuX2hhc2hUYWIuZ2V0X0l0ZW0ocHJvcC5nZXRJRCgpKTtcclxuICAgICAgaWYgKGV4aXN0aW5nUHJvcCA9PT0gbnVsbClcclxuICAgICAgICB0aGlzLmFkZFByb3BXaXRoS2V5KHByb3AsIHByb3AuZ2V0SUQoKSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGF3YWl0IGV4aXN0aW5nUHJvcC5zZXRWYWx1ZShhd2FpdCBwcm9wLmdldFZhbHVlKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuYWRkUHJvcFdpdGhLZXkocHJvcCwgcHJvcC5nZXRJRCgpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZGRpbmcgcHJvcGVydHkgYnkga2V5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwia2V5XCI+PC9wYXJhbT5cclxuICBhZGRQcm9wV2l0aEtleShwcm9wOiBQcm9wZXJ0eSwga2V5OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hhc2hUYWIuc2V0X0l0ZW0oa2V5LCBwcm9wKTtcclxuICAgIHRoaXMuX3Byb3BzLnB1c2gocHJvcCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkXCI+PC9wYXJhbT5cclxuICBkZWxQcm9wQnlJZChpZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcHJvcHMgPT09IG51bGwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgZXhpc3RpbmdQcm9wOiBQcm9wZXJ0eSA9IDxQcm9wZXJ0eT50aGlzLl9oYXNoVGFiLmdldF9JdGVtKGlkKTtcclxuICAgIGlmIChleGlzdGluZ1Byb3AgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fcHJvcHMuUmVtb3ZlKGV4aXN0aW5nUHJvcCk7XHJcbiAgICAgIHRoaXMuX2hhc2hUYWIuUmVtb3ZlKGlkKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRm9yIFJlY29tcHV0ZTogRmlsbCBQcm9wVGFibGUgd2l0aCByZWZlcmVuY2UgdG8gZXhpc3RpbmcgUHJvcFRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj5yZWZlcmVuY2UgdG8gcGFyZW50IEd1aVRhc2tCYXNlPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGZpbGxFeGlzdElubmVyT2JqZWN0cyhuYW1lT2ZGb3VuZDogc3RyaW5nLCB0YXNrOiBHdWlUYXNrQmFzZSwgcGFyc2VyOiBYbWxQYXJzZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuXHJcbiAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBuZXcgTGlzdDxzdHJpbmc+KCk7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gLTE7XHJcblxyXG4gICAgaWYgKG5hbWVPZkZvdW5kID09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZU9mRm91bmQgPT09IFhNTENvbnN0YW50cy5NR19UQUdfQ09OVFJPTClcclxuICAgICAgZW5kQ29udGV4dCA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgZWxzZSBpZiAobmFtZU9mRm91bmQgPT09IFhNTENvbnN0YW50cy5NR19UQUdfUFJPUClcclxuICAgICAgZW5kQ29udGV4dCA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX1RFUk0sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBlbHNlIGlmIChuYW1lT2ZGb3VuZCA9PT0gKCcvJyArIFhNTENvbnN0YW50cy5NR19UQUdfQ09OVFJPTCkgfHxcclxuICAgICAgR3VpRm9ybVByb3BlcnR5QWRhcHRlci5Jc0VuZEZvcm1UYWcobmFtZU9mRm91bmQpKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKG5hbWVPZkZvdW5kKSArIG5hbWVPZkZvdW5kLmxlbmd0aCk7XHJcbiAgICAgIHRva2Vuc1ZlY3RvciA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuICAgICAgaWYgKG5hbWVPZkZvdW5kID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0NPTlRST0wpIHtcclxuICAgICAgICAvLyBkaXRpZHggb2YgRXhpc3RzIENvbnRyb2xcclxuICAgICAgICB0aGlzLl9wYXJlbnQgPSB0YXNrLmdldEN0cmwoTk51bWJlci5QYXJzZSh0aGlzLmZpbGxOYW1lKHRva2Vuc1ZlY3RvcikpKTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KCsrZW5kQ29udGV4dCk7IC8vIHRvIGRlbGV0ZSBcIj5cIlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKG5hbWVPZkZvdW5kID09PSBYTUxDb25zdGFudHMuTUdfVEFHX1BST1ApIHtcclxuICAgICAgICBpZiAodGhpcy5fcGFyZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgIGxldCBzdHJQcm9wSWQ6IHN0cmluZyA9IHRoaXMuZmlsbE5hbWUodG9rZW5zVmVjdG9yKTtcclxuICAgICAgICAgIGxldCBwcm9wSWQ6IG51bWJlciA9IE5OdW1iZXIuUGFyc2Uoc3RyUHJvcElkKTtcclxuICAgICAgICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX3BhcmVudCAhPSBudWxsKVxyXG4gICAgICAgICAgICBwcm9wID0gYXdhaXQgdGhpcy5fcGFyZW50LmdldFByb3AocHJvcElkKTtcclxuXHJcbiAgICAgICAgICBpZiAocHJvcCA9PSBudWxsKVxyXG4gICAgICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdChcImluIFByb3BUYWJsZS5maWxsRXhpc3RJbm5lck9iamVjdHMoKSBubyBwcm9wZXJ0eSB3aXRoIGlkPXswfVwiLCBzdHJQcm9wSWQpKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRQcm9wV2l0aENoZWNrRXhpc3RlbmNlKHByb3AsIGZhbHNlKTtcclxuICAgICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKFwiaW4gUHJvcFRhYmxlLmZpbGxFeGlzdElubmVyT2JqZWN0cygpIG1pc3NpbmcgY29udHJvbFwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdChcImluIFByb3BUYWJsZS5maWxsRXhpc3RJbm5lck9iamVjdHMoKSBpbGxlZ2FsIHRhZyBuYW1lOiB7MH1cIiwgbmFtZU9mRm91bmQpKTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KCsrZW5kQ29udGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmFtZU9mRm91bmQgPT09IFhNTENvbnN0YW50cy5NR19UQUdfQ09OVFJPTCkge1xyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KCsrZW5kQ29udGV4dCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoR3VpRm9ybVByb3BlcnR5QWRhcHRlci5Jc0Zvcm1UYWcobmFtZU9mRm91bmQpKSB7XHJcbiAgICAgIHRoaXMuX3BhcmVudCA9IHRhc2suZ2V0Rm9ybSgpO1xyXG4gICAgICAoPEd1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXI+PGFueT50aGlzLl9wYXJlbnQpLmZpbGxOYW1lKG5hbWVPZkZvdW5kKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobmFtZU9mRm91bmQgPT09ICgnLycgKyBYTUxDb25zdGFudHMuTUdfVEFHX0ZMRCkpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyBYTUxDb25zdGFudHMuVEFHX1RFUk0ubGVuZ3RoKTsgLy8gZXhpdCBvZiBib3VuZHNcclxuICAgIHJldHVybiB0cnVlO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRmluZCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBDb250cm9sLCBvciBvZiBhbiBleGlzdGluZyBQcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBOYW1lIG9mIGNvbnRyb2w8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBmaWxsTmFtZSh0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPik6IHN0cmluZyB7XHJcbiAgICBsZXQgYXR0cmlidXRlOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgbGV0IHZhbHVlU3RyOiBzdHJpbmc7XHJcblxyXG4gICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHRva2Vuc1ZlY3Rvci5sZW5ndGg7IGogPSBqICsgMikge1xyXG4gICAgICBhdHRyaWJ1dGUgPSB0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaik7XHJcbiAgICAgIHZhbHVlU3RyID0gdG9rZW5zVmVjdG9yLmdldF9JdGVtKGogKyAxKTtcclxuXHJcbiAgICAgIGlmIChhdHRyaWJ1dGUgPT09IFhNTENvbnN0YW50cy5NR19BVFRSX0RJVElEWCB8fCBhdHRyaWJ1dGUgPT09IFhNTENvbnN0YW50cy5NR19BVFRSX0lEKVxyXG4gICAgICAgIHJldHVybiB2YWx1ZVN0cjtcclxuICAgIH1cclxuICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKE5TdHJpbmcuRm9ybWF0KFwiVW5yZWNvZ25pemVkIGF0dHJpYnV0ZTogJ3swfSdcIiwgYXR0cmlidXRlKSk7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgc2l6ZSBvZiB0aGUgdmVjdG9yIHByb3BzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHNpemUgb2YgdGhlIHByb3BzIG1lbWJlcjwvcmV0dXJucz5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvcHMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhIFByb3BlcnR5IGJ5IGl0cyBpbmRleCBpbiB0aGUgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+dGhlIGluZGV4IG9mIHRoZSBwcm9wZXJ0eTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiByZWZlcmVuY2UgdG8gdGhlIHJlcXVpcmVkIFByb3BlcnR5PC9yZXR1cm5zPlxyXG4gIGdldFByb3AoaWR4OiBudW1iZXIpOiBQcm9wZXJ0eSB7XHJcbiAgICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gdGhpcy5fcHJvcHMubGVuZ3RoKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLl9wcm9wcy5nZXRfSXRlbShpZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhIFByb3BlcnR5IGJ5IGl0cyBpZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZFwiPm9mIHRoZSBwcm9wZXJ0eTwvcGFyYW0+XHJcbiAgZ2V0UHJvcEJ5SWQoaWQ6IG51bWJlcik6IFByb3BlcnR5IHtcclxuICAgIHJldHVybiA8UHJvcGVydHk+dGhpcy5faGFzaFRhYi5nZXRfSXRlbShpZCk7XHJcbiAgfVxyXG5cclxuICBwcm9wRXhpc3RzKGlkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BCeUlkKGlkKSAhPT0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYSBwcm9wZXJ0eSB2YWx1ZS4gaW4gY2FzZSB0aGUgdGFibGUgZG9lc24ndCBjb250YWluIHN1Y2ggcHJvcGVydHksIGNyZWF0ZXMgYSBuZXcgUHJvcGVydHkgb2JqZWN0IGFuZCBhZGQgaXQgdG8gdGhlIHRhYmxlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj50aGUgaWQgb2YgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPnRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyZW50XCI+YSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBvYmplY3Q8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyZW50VHlwZVwiPnRoZSB0eXBlIG9mIHRoZSBwYXJlbnQgb2JqZWN0PC9wYXJhbT5cclxuICBhc3luYyBzZXRQcm9wKHByb3BJZDogbnVtYmVyLCB2YWw6IHN0cmluZywgcGFyZW50OiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJlbnRUeXBlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBsZXQgcHJvcDogUHJvcGVydHkgPSB0aGlzLmdldFByb3BCeUlkKHByb3BJZCk7XHJcbiAgICBpZiAocHJvcCA9PT0gbnVsbCkge1xyXG4gICAgICBwcm9wID0gbmV3IFByb3BlcnR5KHByb3BJZCwgcGFyZW50LCBwYXJlbnRUeXBlKTtcclxuICAgICAgYXdhaXQgdGhpcy5hZGRQcm9wV2l0aENoZWNrRXhpc3RlbmNlKHByb3AsIHRydWUpO1xyXG4gICAgfVxyXG4gICAgcHJvcC5zZXRWYWx1ZSh2YWwpO1xyXG4gICAgcHJvcC5zZXRPcmdWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlZnJlc2ggZGlzcGxheSBvZiB0aGUgcHJvcGVydGllcyBpbiB0aGUgVGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm9yY2VSZWZyZXNoXCI+aWYgdHJ1ZSwgcmVmcmVzaCBpcyBmb3JjZWQgcmVnYXJkbGVzcyBvZiB0aGUgcHJldmlvdXMgdmFsdWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib25seVJlcGVhdGFibGVQcm9wc1wiPmlmIHRydWUsIHJlZnJlc2hlcyBvbmx5IHJlcGVhdGFibGUgdHJlZSBwcm9wZXJ0aWVzPC9wYXJhbT5cclxuICBhc3luYyBSZWZyZXNoRGlzcGxheShmb3JjZVJlZnJlc2g6IGJvb2xlYW4sIG9ubHlSZXBlYXRhYmxlUHJvcHM6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuXHJcbiAgICBsZXQgYWxsUHJvcHNSZWZyZXNoZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5O1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZm9ybTogR3VpRm9ybVByb3BlcnR5QWRhcHRlciA9IG51bGw7XHJcbiAgICBsZXQgdmlzaWJsZVByb3BzOiBMaXN0PFByb3BlcnR5PiA9IG5ldyBMaXN0KCk7XHJcblxyXG5cclxuICAgIGlmICh0aGlzLl9wYXJlbnQgIT0gbnVsbCAmJiB0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyKVxyXG4gICAgICBmb3JtID0gKDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPnRoaXMuX3BhcmVudCkuZ2V0Rm9ybSgpO1xyXG5cclxuICAgIGlmIChmb3JtICE9IG51bGwpXHJcbiAgICAgIGZvcm0uY2hlY2tBbmRDcmVhdGVSb3coZm9ybS5EaXNwbGF5TGluZSk7XHJcblxyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdldFNpemUoKTsgaSsrKSB7XHJcbiAgICAgIHByb3AgPSB0aGlzLmdldFByb3AoaSk7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gaWYgdGhpcyBwcm9wZXJ0eSBpcyBub3QgcmVwZWF0YWJsZSBpbiB0cmVlIG9yIHRhYmxlLCBhbmQgb25seVJlcGVhdGFibGVQcm9wcyB0dXJuZWQgb25cclxuICAgICAgICAvLyBkbyBub3QgcmVmcmVzaCB0aGlzIHByb3BlcnR5XHJcbiAgICAgICAgaWYgKG9ubHlSZXBlYXRhYmxlUHJvcHMgJiYgIVByb3BlcnR5LmlzUmVwZWF0YWJsZUluVGFibGUocHJvcC5nZXRJRCgpKSlcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAvLyBSZWZyZXNoIFZpc2libGUgcHJvcCBvbmx5IGFmdGVyIHJlZnJlc2hpbmcgdGhlIG5hdmlnYXRpb24gcHJvcHMgbGlrZSBYLCBZLlxyXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdGhlIGNvbnRyb2wgaXMgc2hvd24gb24gaXRzIGRlZmF1bHQgbG9jYXRpb24gZmlyc3QgYW5kXHJcbiAgICAgICAgLy8gdGhlbiBtb3ZlZCBzb21ld2hlcmUgZWxzZS4gQW5kIHRoaXMgaXMgY2xlYXJseSB2aXNpYmxlLlxyXG4gICAgICAgIGlmIChwcm9wLmdldElEKCkgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEUpXHJcbiAgICAgICAgICB2aXNpYmxlUHJvcHMucHVzaChwcm9wKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBhd2FpdCBwcm9wLlJlZnJlc2hEaXNwbGF5KGZvcmNlUmVmcmVzaCk7XHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgQXBwbGljYXRpb25FeGNlcHRpb24pIHtcclxuICAgICAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKGV4KTtcclxuICAgICAgICAgIGFsbFByb3BzUmVmcmVzaGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRocm93ICBleDtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpc2libGVQcm9wcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgbGV0IHZpc2libGVQcm9wID0gdmlzaWJsZVByb3BzW2ldO1xyXG4gICAgICBhd2FpdCB2aXNpYmxlUHJvcC5SZWZyZXNoRGlzcGxheShmb3JjZVJlZnJlc2gpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhbGxQcm9wc1JlZnJlc2hlZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB1cGRhdGUgYWxsIHByb3BlcnRpZXMgYXJyYXkgc2l6ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdTaXplXCI+PC9wYXJhbT5cclxuICB1cGRhdGVQcmV2VmFsdWVBcnJheShuZXdTaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9wcm9wcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICBsZXQgcHJvcGVydHk6IFByb3BlcnR5ID0gdGhpcy5fcHJvcHMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgIHByb3BlcnR5LnVwZGF0ZVByZXZWYWx1ZUFycmF5KG5ld1NpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyB1cGRhdGUgYWxsIHByb3BlcnRpZXMgYXJyYXkgc2l6ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVzZXRQcmV2VmFsdWVBcnJheSgpOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9wcm9wcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICBsZXQgcHJvcGVydHk6IFByb3BlcnR5ID0gdGhpcy5fcHJvcHMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgIHByb3BlcnR5LlJlc2V0UHJldlZhbHVlQXJyYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVzZXQgcHJldiB2YWx1ZSBhdCBpbmRleC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlc2V0UHJldlZhbEF0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9wcm9wcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICBsZXQgcHJvcGVydHk6IFByb3BlcnR5ID0gdGhpcy5fcHJvcHMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgIHByb3BlcnR5LnJlc2V0UHJldlZhbEF0KGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY2xlYXIgcHJldlZhbHVlIGFycmF5IG9mIExhYmVsIHByb3BlcnR5IGlmIGV4aXN0c1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY2xlYXJMYWJlbFByZXZWYWx1ZUFycmF5KCk6IHZvaWQge1xyXG4gICAgbGV0IGxhYmVsUHJvcGVydHk6IFByb3BlcnR5ID0gdGhpcy5nZXRQcm9wQnlJZCg0NSk7XHJcbiAgICBpZiAobGFiZWxQcm9wZXJ0eSAhPT0gbnVsbClcclxuICAgICAgbGFiZWxQcm9wZXJ0eS5jbGVhclByZXZWYWx1ZUFycmF5KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldEN0cmxSZWYoKTogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciB7XHJcbiAgICByZXR1cm4gKCh0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyKSA/IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPnRoaXMuX3BhcmVudCA6IG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEluc2VydFByZXZWYWx1ZUFycmF5KGlkeDogbnVtYmVyLCBjb3VudDogbnVtYmVyKSB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fcHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHByb3A6IFByb3BlcnR5ID0gdGhpcy5fcHJvcHNbaV07XHJcbiAgICAgIHByb3AuSW5zZXJ0UHJldlZhbHVlQXJyYXkoaWR4LCBjb3VudCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvcFRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9tYW5hZ2VtZW50L2d1aS9Qcm9wVGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFekQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFLeEUsTUFBTSxPQUFPLFNBQVM7SUFZcEIsWUFBWSxPQUE2QjtRQVZqQyxhQUFRLEdBQWdDLElBQUksQ0FBQztRQUM3QyxXQUFNLEdBQW1CLElBQUksQ0FBQztRQUM5QixZQUFPLEdBQXdCLElBQUksQ0FBQztRQVUxQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQVksQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksU0FBUyxDQUFtQixFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sYUFBYSxD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ImltcG9ydCB7SGFzaHRhYmxlLCBMaXN0LCBOTnVtYmVyLCBOU3RyaW5nLCBBcHBsaWNhdGlvbkV4Y2VwdGlvbn0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7UHJvcGVydHl9IGZyb20gXCIuL1Byb3BlcnR5XCI7XHJcbmltcG9ydCB7UHJvcFBhcmVudEludGVyZmFjZX0gZnJvbSBcIi4uLy4uL2d1aS9Qcm9wUGFyZW50SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7WG1sUGFyc2VyLCBYTUxDb25zdGFudHN9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7R3VpVGFza0Jhc2V9IGZyb20gXCIuLi90YXNrcy9HdWlUYXNrQmFzZVwiO1xyXG5pbXBvcnQge0V2ZW50c30gZnJvbSBcIi4uLy4uL0V2ZW50c1wiO1xyXG5pbXBvcnQge1Byb3BJbnRlcmZhY2V9IGZyb20gXCIuL1Byb3BJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgR3VpRm9ybVByb3BlcnR5QWRhcHRlciB9IGZyb20gXCIuL0d1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXJcIjtcclxuaW1wb3J0IHsgR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciB9IGZyb20gXCIuL0d1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXJcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgcHJvcGVydGllcyB0YWJsZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgUHJvcFRhYmxlIHtcclxuXHJcbiAgcHJpdmF0ZSBfaGFzaFRhYjogSGFzaHRhYmxlPG51bWJlciwgUHJvcGVydHk+ID0gbnVsbDsgLy8gZm9yIGZhc3QgYWNjZXNzIHRvIHByb3BlcnRpZXNcclxuICBwcml2YXRlIF9wcm9wczogTGlzdDxQcm9wZXJ0eT4gPSBudWxsO1xyXG4gIHByaXZhdGUgX3BhcmVudDogUHJvcFBhcmVudEludGVyZmFjZSA9IG51bGw7XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKTtcclxuICBjb25zdHJ1Y3RvcihwYXJlbnRfOiBQcm9wUGFyZW50SW50ZXJmYWNlKTtcclxuICBjb25zdHJ1Y3RvcihwYXJlbnRfPzogUHJvcFBhcmVudEludGVyZmFjZSkge1xyXG5cclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzEocGFyZW50Xyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcm9wcyA9IG5ldyBMaXN0PFByb3BlcnR5PigpO1xyXG4gICAgdGhpcy5faGFzaFRhYiA9IG5ldyBIYXNodGFibGU8bnVtYmVyLCBQcm9wZXJ0eT4oMjApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKHBhcmVudF86IFByb3BQYXJlbnRJbnRlcmZhY2UpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgdGhpcy5fcGFyZW50ID0gcGFyZW50XztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBwYXJzZSB0aGUgcHJvcGVydGllc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwYXJlbnRPYmpcIj5yZWZlcmVuY2UgdG8gcGFyZW50IG9iamVjdChHdWlUYXNrQmFzZSk8L3BhcmFtPlxyXG4gIGZpbGxEYXRhKHBhcmVudE9iajogUHJvcFBhcmVudEludGVyZmFjZSwgcGFyVHlwZTogc3RyaW5nLCBwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgd2hpbGUgKHRoaXMuaW5pdElubmVyT2JqZWN0cyhwYXJzZXIuZ2V0TmV4dFRhZygpLCBwYXJlbnRPYmosIHBhclR5cGUsIHBhcnNlcikpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGb3IgcmVjb21wdXRlOiBQYXJzZSB0aGUgZXhpc3RpbmcgcHJvcGVydGllcyBhbmQgY3JlYXRlIHJlZmVyZW5jZXMgdG8gdGhlbVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrXCI+cmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgR3VpVGFza0Jhc2U8L3BhcmFtPlxyXG4gIGZpbGxEYXRhQnlFeGlzdHModGFzazogR3VpVGFza0Jhc2UsIHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICB3aGlsZSAodGhpcy5maWxsRXhpc3RJbm5lck9iamVjdHMocGFyc2VyLmdldE5leHRUYWcoKSwgdGFzaywgcGFyc2VyKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZpbGwgdGhlIGlubmVyIG9iamVjdHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvdW5kVGFnTmFtZVwiPm5hbWUgb2YgdGFnLCBvZiBvYmplY3QsIHdoaWNoIG5lZWQgYmUgYWxsb2NhdGVkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudE9ialwiPnJlZmVyZW5jZSB0byB0aGUgcGFyZW50IG9iamVjdCwgbmVlZCBiZSBhZGRlZCB0byBldmVyeSBQcm9wZXJ0eTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBNYW5hZ2VyLlhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSwgdGhlIGZvdW5kIG9iamVjdCB0YWcgYW5kIEFMTCBpdHMgc3VidGFncyBmaW5pc2g8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBpbml0SW5uZXJPYmplY3RzKGZvdW5kVGFnTmFtZTogc3RyaW5nLCBwYXJlbnRPYmo6IFByb3BQYXJlbnRJbnRlcmZhY2UsIHBhclR5cGU6IHN0cmluZywgcGFyc2VyOiBYbWxQYXJzZXIpOiBib29sZWFuIHtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgIT09IG51bGwgJiYgZm91bmRUYWdOYW1lID09PSBYTUxDb25zdGFudHMuTUdfVEFHX1BST1ApIHtcclxuICAgICAgbGV0IHByb3BlcnR5OiBQcm9wZXJ0eSA9IG5ldyBQcm9wZXJ0eSgpO1xyXG4gICAgICBwcm9wZXJ0eS5maWxsRGF0YShwYXJlbnRPYmosIHBhclR5cGUsIHBhcnNlcik7XHJcbiAgICAgIHRoaXMuYWRkUHJvcChwcm9wZXJ0eSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZGluZyBwcm9wZXJ0eSBieSBrZXlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicHJvcFwiPjwvcGFyYW0+XHJcbiAgYWRkUHJvcChwcm9wOiBQcm9wZXJ0eSk6IHZvaWQge1xyXG4gICAgdGhpcy5faGFzaFRhYi5zZXRfSXRlbShwcm9wLmdldElEKCksIHByb3ApO1xyXG4gICAgdGhpcy5fcHJvcHMucHVzaChwcm9wKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj48L3BhcmFtPlxyXG4gIGRlbFByb3BCeUlkKGlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9wcm9wcyA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGxldCBleGlzdGluZ1Byb3A6IFByb3BlcnR5ID0gPFByb3BlcnR5PnRoaXMuX2hhc2hUYWIuZ2V0X0l0ZW0oaWQpO1xyXG4gICAgaWYgKGV4aXN0aW5nUHJvcCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9wcm9wcy5SZW1vdmUoZXhpc3RpbmdQcm9wKTtcclxuICAgICAgdGhpcy5faGFzaFRhYi5SZW1vdmUoaWQpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGb3IgUmVjb21wdXRlOiBGaWxsIFByb3BUYWJsZSB3aXRoIHJlZmVyZW5jZSB0byBleGlzdGluZyBQcm9wVGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPnJlZmVyZW5jZSB0byBwYXJlbnQgR3VpVGFza0Jhc2U8L3BhcmFtPlxyXG4gIHByaXZhdGUgZmlsbEV4aXN0SW5uZXJPYmplY3RzKG5hbWVPZkZvdW5kOiBzdHJpbmcsIHRhc2s6IEd1aVRhc2tCYXNlLCBwYXJzZXI6IFhtbFBhcnNlcik6IGJvb2xlYW4ge1xyXG5cclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IG5ldyBMaXN0PHN0cmluZz4oKTtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSAtMTtcclxuXHJcbiAgICBpZiAobmFtZU9mRm91bmQgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChuYW1lT2ZGb3VuZCA9PT0gWE1MQ29uc3RhbnRzLk1HX1RBR19DT05UUk9MKVxyXG4gICAgICBlbmRDb250ZXh0ID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBlbHNlIGlmIChuYW1lT2ZGb3VuZCA9PT0gWE1MQ29uc3RhbnRzLk1HX1RBR19QUk9QKVxyXG4gICAgICBlbmRDb250ZXh0ID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGVsc2UgaWYgKG5hbWVPZkZvdW5kID09PSAoJy8nICsgWE1MQ29uc3RhbnRzLk1HX1RBR19DT05UUk9MKSB8fFxyXG4gICAgICBHdWlGb3JtUHJvcGVydHlBZGFwdGVyLklzRW5kRm9ybVRhZyhuYW1lT2ZGb3VuZCkpIHtcclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVuZENvbnRleHQgIT09IC0xICYmIGVuZENvbnRleHQgPCBwYXJzZXIuZ2V0WE1MZGF0YSgpLmxlbmd0aCkge1xyXG4gICAgICAvLyBsYXN0IHBvc2l0aW9uIG9mIGl0cyB0YWdcclxuICAgICAgbGV0IHRhZzogc3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnLmluZGV4T2YobmFtZU9mRm91bmQpICsgbmFtZU9mRm91bmQubGVuZ3RoKTtcclxuICAgICAgdG9rZW5zVmVjdG9yID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgICBpZiAobmFtZU9mRm91bmQgPT09IFhNTENvbnN0YW50cy5NR19UQUdfQ09OVFJPTCkge1xyXG4gICAgICAgIC8vIGRpdGlkeCBvZiBFeGlzdHMgQ29udHJvbFxyXG4gICAgICAgIHRoaXMuX3BhcmVudCA9IHRhc2suZ2V0Q3RybChOTnVtYmVyLlBhcnNlKHRoaXMuZmlsbE5hbWUodG9rZW5zVmVjdG9yKSkpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoKytlbmRDb250ZXh0KTsgLy8gdG8gZGVsZXRlIFwiPlwiXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobmFtZU9mRm91bmQgPT09IFhNTENvbnN0YW50cy5NR19UQUdfUFJPUCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgbGV0IHN0clByb3BJZDogc3RyaW5nID0gdGhpcy5maWxsTmFtZSh0b2tlbnNWZWN0b3IpO1xyXG4gICAgICAgICAgbGV0IHByb3BJZDogbnVtYmVyID0gTk51bWJlci5QYXJzZShzdHJQcm9wSWQpO1xyXG4gICAgICAgICAgbGV0IHByb3A6IFByb3BlcnR5ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5fcGFyZW50ICE9IG51bGwpXHJcbiAgICAgICAgICAgIHByb3AgPSB0aGlzLl9wYXJlbnQuZ2V0UHJvcChwcm9wSWQpO1xyXG5cclxuICAgICAgICAgIGlmIChwcm9wID09IG51bGwpXHJcbiAgICAgICAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKE5TdHJpbmcuRm9ybWF0KFwiaW4gUHJvcFRhYmxlLmZpbGxFeGlzdElubmVyT2JqZWN0cygpIG5vIHByb3BlcnR5IHdpdGggaWQ9ezB9XCIsIHN0clByb3BJZCkpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmFkZFByb3AocHJvcCk7XHJcbiAgICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyBYTUxDb25zdGFudHMuVEFHX1RFUk0ubGVuZ3RoKTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhcImluIFByb3BUYWJsZS5maWxsRXhpc3RJbm5lck9iamVjdHMoKSBtaXNzaW5nIGNvbnRyb2xcIik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJpbiBQcm9wVGFibGUuZmlsbEV4aXN0SW5uZXJPYmplY3RzKCkgaWxsZWdhbCB0YWcgbmFtZTogezB9XCIsIG5hbWVPZkZvdW5kKSk7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleCgrK2VuZENvbnRleHQpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5hbWVPZkZvdW5kID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0NPTlRST0wpIHtcclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleCgrK2VuZENvbnRleHQpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKEd1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXIuSXNGb3JtVGFnKG5hbWVPZkZvdW5kKSkge1xyXG4gICAgICB0aGlzLl9wYXJlbnQgPSB0YXNrLmdldEZvcm0oKTtcclxuICAgICAgKDxHdWlGb3JtUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50KS5maWxsTmFtZShuYW1lT2ZGb3VuZCk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5hbWVPZkZvdW5kID09PSAoJy8nICsgWE1MQ29uc3RhbnRzLk1HX1RBR19GTEQpKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgWE1MQ29uc3RhbnRzLlRBR19URVJNLmxlbmd0aCk7IC8vIGV4aXQgb2YgYm91bmRzXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZpbmQgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgQ29udHJvbCwgb3Igb2YgYW4gZXhpc3RpbmcgUHJvcGVydHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gTmFtZSBvZiBjb250cm9sPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZmlsbE5hbWUodG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gbnVsbDtcclxuICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nO1xyXG5cclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqID0gaiArIDIpIHtcclxuICAgICAgYXR0cmlidXRlID0gdG9rZW5zVmVjdG9yLmdldF9JdGVtKGopO1xyXG4gICAgICB2YWx1ZVN0ciA9IHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSk7XHJcblxyXG4gICAgICBpZiAoYXR0cmlidXRlID09PSBYTUxDb25zdGFudHMuTUdfQVRUUl9ESVRJRFggfHwgYXR0cmlidXRlID09PSBYTUxDb25zdGFudHMuTUdfQVRUUl9JRClcclxuICAgICAgICByZXR1cm4gdmFsdWVTdHI7XHJcbiAgICB9XHJcbiAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdChcIlVucmVjb2duaXplZCBhdHRyaWJ1dGU6ICd7MH0nXCIsIGF0dHJpYnV0ZSkpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHNpemUgb2YgdGhlIHZlY3RvciBwcm9wc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBzaXplIG9mIHRoZSBwcm9wcyBtZW1iZXI8L3JldHVybnM+XHJcbiAgZ2V0U2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb3BzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYSBQcm9wZXJ0eSBieSBpdHMgaW5kZXggaW4gdGhlIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnRoZSBpbmRleCBvZiB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gcmVmZXJlbmNlIHRvIHRoZSByZXF1aXJlZCBQcm9wZXJ0eTwvcmV0dXJucz5cclxuICBnZXRQcm9wKGlkeDogbnVtYmVyKTogUHJvcGVydHkge1xyXG4gICAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHRoaXMuX3Byb3BzLmxlbmd0aClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvcHMuZ2V0X0l0ZW0oaWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYSBQcm9wZXJ0eSBieSBpdHMgaWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj5vZiB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIGdldFByb3BCeUlkKGlkOiBudW1iZXIpOiBQcm9wZXJ0eSB7XHJcbiAgICByZXR1cm4gPFByb3BlcnR5PnRoaXMuX2hhc2hUYWIuZ2V0X0l0ZW0oaWQpO1xyXG4gIH1cclxuXHJcbiAgcHJvcEV4aXN0cyhpZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wQnlJZChpZCkgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGEgcHJvcGVydHkgdmFsdWUuIGluIGNhc2UgdGhlIHRhYmxlIGRvZXNuJ3QgY29udGFpbiBzdWNoIHByb3BlcnR5LCBjcmVhdGVzIGEgbmV3IFByb3BlcnR5IG9iamVjdCBhbmQgYWRkIGl0IHRvIHRoZSB0YWJsZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicHJvcElkXCI+dGhlIGlkIG9mIHRoZSBwcm9wZXJ0eTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj50aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudFwiPmEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgb2JqZWN0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudFR5cGVcIj50aGUgdHlwZSBvZiB0aGUgcGFyZW50IG9iamVjdDwvcGFyYW0+XHJcbiAgc2V0UHJvcChwcm9wSWQ6IG51bWJlciwgdmFsOiBzdHJpbmcsIHBhcmVudDogUHJvcFBhcmVudEludGVyZmFjZSwgcGFyZW50VHlwZTogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5ID0gdGhpcy5nZXRQcm9wQnlJZChwcm9wSWQpO1xyXG4gICAgaWYgKHByb3AgPT09IG51bGwpIHtcclxuICAgICAgcHJvcCA9IG5ldyBQcm9wZXJ0eShwcm9wSWQsIHBhcmVudCwgcGFyZW50VHlwZSk7XHJcbiAgICAgIHRoaXMuYWRkUHJvcChwcm9wKTtcclxuICAgIH1cclxuICAgIHByb3Auc2V0VmFsdWUodmFsKTtcclxuICAgIHByb3Auc2V0T3JnVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZWZyZXNoIGRpc3BsYXkgb2YgdGhlIHByb3BlcnRpZXMgaW4gdGhlIFRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvcmNlUmVmcmVzaFwiPmlmIHRydWUsIHJlZnJlc2ggaXMgZm9yY2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIHByZXZpb3VzIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9ubHlSZXBlYXRhYmxlUHJvcHNcIj5pZiB0cnVlLCByZWZyZXNoZXMgb25seSByZXBlYXRhYmxlIHRyZWUgcHJvcGVydGllczwvcGFyYW0+XHJcbiAgYXN5bmMgUmVmcmVzaERpc3BsYXkoZm9yY2VSZWZyZXNoOiBib29sZWFuLCBvbmx5UmVwZWF0YWJsZVByb3BzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcblxyXG4gICAgbGV0IGFsbFByb3BzUmVmcmVzaGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eTtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGZvcm06IEd1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXIgPSBudWxsO1xyXG4gICAgbGV0IHZpc2libGVQcm9wczogTGlzdDxQcm9wZXJ0eT4gPSBuZXcgTGlzdCgpO1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy5fcGFyZW50ICE9IG51bGwgJiYgdGhpcy5fcGFyZW50IGluc3RhbmNlb2YgR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcilcclxuICAgICAgZm9ybSA9ICg8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj50aGlzLl9wYXJlbnQpLmdldEZvcm0oKTtcclxuXHJcbiAgICBpZiAoZm9ybSAhPSBudWxsKVxyXG4gICAgICBmb3JtLmNoZWNrQW5kQ3JlYXRlUm93KGZvcm0uRGlzcGxheUxpbmUpO1xyXG5cclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5nZXRTaXplKCk7IGkrKykge1xyXG4gICAgICBwcm9wID0gdGhpcy5nZXRQcm9wKGkpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIGlmIHRoaXMgcHJvcGVydHkgaXMgbm90IHJlcGVhdGFibGUgaW4gdHJlZSBvciB0YWJsZSwgYW5kIG9ubHlSZXBlYXRhYmxlUHJvcHMgdHVybmVkIG9uXHJcbiAgICAgICAgLy8gZG8gbm90IHJlZnJlc2ggdGhpcyBwcm9wZXJ0eVxyXG4gICAgICAgIGlmIChvbmx5UmVwZWF0YWJsZVByb3BzICYmICFQcm9wZXJ0eS5pc1JlcGVhdGFibGVJblRhYmxlKHByb3AuZ2V0SUQoKSkpXHJcbiAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgLy8gUmVmcmVzaCBWaXNpYmxlIHByb3Agb25seSBhZnRlciByZWZyZXNoaW5nIHRoZSBuYXZpZ2F0aW9uIHByb3BzIGxpa2UgWCwgWS5cclxuICAgICAgICAvLyBPdGhlcndpc2UsIHRoZSBjb250cm9sIGlzIHNob3duIG9uIGl0cyBkZWZhdWx0IGxvY2F0aW9uIGZpcnN0IGFuZFxyXG4gICAgICAgIC8vIHRoZW4gbW92ZWQgc29tZXdoZXJlIGVsc2UuIEFuZCB0aGlzIGlzIGNsZWFybHkgdmlzaWJsZS5cclxuICAgICAgICBpZiAocHJvcC5nZXRJRCgpID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFKVxyXG4gICAgICAgICAgdmlzaWJsZVByb3BzLnB1c2gocHJvcCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgYXdhaXQgcHJvcC5SZWZyZXNoRGlzcGxheShmb3JjZVJlZnJlc2gpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChleCkge1xyXG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIEFwcGxpY2F0aW9uRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhleCk7XHJcbiAgICAgICAgICBhbGxQcm9wc1JlZnJlc2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aHJvdyAgZXg7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aXNpYmxlUHJvcHMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgIGxldCB2aXNpYmxlUHJvcCA9IHZpc2libGVQcm9wc1tpXTtcclxuICAgICAgYXdhaXQgdmlzaWJsZVByb3AuUmVmcmVzaERpc3BsYXkoZm9yY2VSZWZyZXNoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYWxsUHJvcHNSZWZyZXNoZWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdXBkYXRlIGFsbCBwcm9wZXJ0aWVzIGFycmF5IHNpemVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3U2l6ZVwiPjwvcGFyYW0+XHJcbiAgdXBkYXRlUHJldlZhbHVlQXJyYXkobmV3U2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fcHJvcHMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IHByb3BlcnR5OiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BzLmdldF9JdGVtKGkpO1xyXG4gICAgICBwcm9wZXJ0eS51cGRhdGVQcmV2VmFsdWVBcnJheShuZXdTaXplKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gdXBkYXRlIGFsbCBwcm9wZXJ0aWVzIGFycmF5IHNpemVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlc2V0UHJldlZhbHVlQXJyYXkoKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fcHJvcHMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IHByb3BlcnR5OiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BzLmdldF9JdGVtKGkpO1xyXG4gICAgICBwcm9wZXJ0eS5SZXNldFByZXZWYWx1ZUFycmF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJlc2V0IHByZXYgdmFsdWUgYXQgaW5kZXguXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICByZXNldFByZXZWYWxBdChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fcHJvcHMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IHByb3BlcnR5OiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BzLmdldF9JdGVtKGkpO1xyXG4gICAgICBwcm9wZXJ0eS5yZXNldFByZXZWYWxBdChpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNsZWFyIHByZXZWYWx1ZSBhcnJheSBvZiBMYWJlbCBwcm9wZXJ0eSBpZiBleGlzdHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNsZWFyTGFiZWxQcmV2VmFsdWVBcnJheSgpOiB2b2lkIHtcclxuICAgIGxldCBsYWJlbFByb3BlcnR5OiBQcm9wZXJ0eSA9IHRoaXMuZ2V0UHJvcEJ5SWQoNDUpO1xyXG4gICAgaWYgKGxhYmVsUHJvcGVydHkgIT09IG51bGwpXHJcbiAgICAgIGxhYmVsUHJvcGVydHkuY2xlYXJQcmV2VmFsdWVBcnJheSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRDdHJsUmVmKCk6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIge1xyXG4gICAgcmV0dXJuICgodGhpcy5fcGFyZW50IGluc3RhbmNlb2YgR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcikgPyA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj50aGlzLl9wYXJlbnQgOiBudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBJbnNlcnRQcmV2VmFsdWVBcnJheShpZHg6IG51bWJlciwgY291bnQ6IG51bWJlcikge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3Byb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BzW2ldO1xyXG4gICAgICBwcm9wLkluc2VydFByZXZWYWx1ZUFycmF5KGlkeCwgY291bnQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|