@magic-xpa/gui 4.1200.0-dev4120.13 → 4.1200.0-dev4120.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.
Files changed (79) hide show
  1. package/fesm2022/magic-xpa-gui.mjs +5712 -249
  2. package/fesm2022/magic-xpa-gui.mjs.map +1 -1
  3. package/index.d.ts +3 -0
  4. package/package.json +2 -4
  5. package/src/GuiEnums.d.ts +3 -0
  6. package/src/gui/GuiMgControl.d.ts +1 -0
  7. package/src/management/gui/MgControlBase.d.ts +0 -1
  8. package/esm2022/index.mjs +0 -71
  9. package/esm2022/magic-xpa-gui.mjs +0 -2
  10. package/esm2022/src/Commands.mjs +0 -184
  11. package/esm2022/src/Events.mjs +0 -425
  12. package/esm2022/src/EventsProcessor.mjs +0 -67
  13. package/esm2022/src/FocusManager.mjs +0 -34
  14. package/esm2022/src/GuiConstants.mjs +0 -68
  15. package/esm2022/src/GuiEnums.mjs +0 -301
  16. package/esm2022/src/GuiEnvironment.mjs +0 -4
  17. package/esm2022/src/IFlowMonitorQueue.mjs +0 -2
  18. package/esm2022/src/Manager.mjs +0 -91
  19. package/esm2022/src/UIBridge.mjs +0 -33
  20. package/esm2022/src/env/IEnvironment.mjs +0 -2
  21. package/esm2022/src/gui/ControlBase.mjs +0 -3
  22. package/esm2022/src/gui/GuiMgControl.mjs +0 -123
  23. package/esm2022/src/gui/GuiMgForm.mjs +0 -4
  24. package/esm2022/src/gui/KeyboardItem.mjs +0 -135
  25. package/esm2022/src/gui/LastFocusedVal.mjs +0 -11
  26. package/esm2022/src/gui/MgValue.mjs +0 -16
  27. package/esm2022/src/gui/PropParentInterface.mjs +0 -2
  28. package/esm2022/src/gui/low/DialogHandler.mjs +0 -7
  29. package/esm2022/src/gui/low/GuiCommand.mjs +0 -68
  30. package/esm2022/src/gui/low/GuiCommandQueue.mjs +0 -35
  31. package/esm2022/src/gui/low/GuiInteractive.mjs +0 -178
  32. package/esm2022/src/gui/low/Style.mjs +0 -20
  33. package/esm2022/src/management/RuntimeContextBase.mjs +0 -42
  34. package/esm2022/src/management/data/BlobType.mjs +0 -281
  35. package/esm2022/src/management/data/DcValues.mjs +0 -214
  36. package/esm2022/src/management/data/DcValuesBuilderBase.mjs +0 -96
  37. package/esm2022/src/management/data/FieldDef.mjs +0 -331
  38. package/esm2022/src/management/data/FieldsTable.mjs +0 -54
  39. package/esm2022/src/management/data/GuiDataViewBase.mjs +0 -88
  40. package/esm2022/src/management/data/GuiFieldBase.mjs +0 -82
  41. package/esm2022/src/management/data/IRecord.mjs +0 -2
  42. package/esm2022/src/management/data/IReferencedObject.mjs +0 -2
  43. package/esm2022/src/management/data/NUM_TYPE.mjs +0 -1739
  44. package/esm2022/src/management/data/ObjectReferenceBase.mjs +0 -48
  45. package/esm2022/src/management/data/ObjectReferencesCollection.mjs +0 -27
  46. package/esm2022/src/management/data/RecordUtils.mjs +0 -361
  47. package/esm2022/src/management/data/VectorType.mjs +0 -612
  48. package/esm2022/src/management/data/VectorTypeBase.mjs +0 -88
  49. package/esm2022/src/management/events/IActionManager.mjs +0 -2
  50. package/esm2022/src/management/events/IGuiEventsManager.mjs +0 -2
  51. package/esm2022/src/management/exp/ExpressionInterface.mjs +0 -244
  52. package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +0 -305
  53. package/esm2022/src/management/gui/ControlTable.mjs +0 -118
  54. package/esm2022/src/management/gui/DisplayConvertor.mjs +0 -1649
  55. package/esm2022/src/management/gui/FieldValidator.mjs +0 -711
  56. package/esm2022/src/management/gui/GuiControlPropertyAdapter.mjs +0 -24
  57. package/esm2022/src/management/gui/GuiFormPropertyAdapter.mjs +0 -11
  58. package/esm2022/src/management/gui/HebrewDate.mjs +0 -278
  59. package/esm2022/src/management/gui/Helps.mjs +0 -237
  60. package/esm2022/src/management/gui/MgControlBase.mjs +0 -1869
  61. package/esm2022/src/management/gui/MgFormBase.mjs +0 -741
  62. package/esm2022/src/management/gui/PIC.mjs +0 -1185
  63. package/esm2022/src/management/gui/PropDefaults.mjs +0 -230
  64. package/esm2022/src/management/gui/PropInterface.mjs +0 -246
  65. package/esm2022/src/management/gui/PropTable.mjs +0 -221
  66. package/esm2022/src/management/gui/Property.mjs +0 -1362
  67. package/esm2022/src/management/gui/ValidationDetails.mjs +0 -248
  68. package/esm2022/src/management/gui/ValidationDetailsBase.mjs +0 -93
  69. package/esm2022/src/management/gui/WrongFormatException.mjs +0 -29
  70. package/esm2022/src/management/tasks/GuiDataCollection.mjs +0 -4
  71. package/esm2022/src/management/tasks/GuiTaskBase.mjs +0 -511
  72. package/esm2022/src/management/tasks/IMGDataTable.mjs +0 -2
  73. package/esm2022/src/management/tasks/ITask.mjs +0 -2
  74. package/esm2022/src/management/tasks/MgTimer.mjs +0 -21
  75. package/esm2022/src/management/tasks/TaskDefinitionId.mjs +0 -54
  76. package/esm2022/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +0 -41
  77. package/esm2022/src/util/MemoryUtil.mjs +0 -35
  78. package/esm2022/src/util/ObjectReference.mjs +0 -36
  79. package/esm2022/src/util/UsernamePasswordCredentials.mjs +0 -52
@@ -1,511 +0,0 @@
1
- import { NNumber, NotImplementedException, NString, RefParam } from "@magic-xpa/mscorelib";
2
- import { Constants, Logger_LogLevels, XMLConstants, XmlParser } from "@magic-xpa/utils";
3
- import { PropTable } from "../gui/PropTable";
4
- import { Property } from "../gui/Property";
5
- import { PropInterface } from "../gui/PropInterface";
6
- import { Commands } from "../../Commands";
7
- import { Events } from "../../Events";
8
- import { GuiConstants } from "../../GuiConstants";
9
- import { GuiDataCollection } from "./GuiDataCollection";
10
- import { CommandType, HtmlProperties } from "../../GuiEnums";
11
- export class GuiTaskBase {
12
- static MAIN_PRG_PARENT_ID = 32768;
13
- _flowMonitor = null;
14
- _keyboardMappingState = 0xFFFF0000;
15
- _refreshType = "T";
16
- _lastParkedCtrl = null;
17
- _brkLevel = null;
18
- _brkLevelIndex = -1;
19
- _mainLevel = null;
20
- _level = "\0";
21
- _enteredRecLevel = false;
22
- _currParkedFld = null;
23
- isInRecompute = false;
24
- CurrentEditingControl = null;
25
- shouldResumeSubformLayout = true;
26
- ApplicationGuid = null;
27
- ProgramIsn = 0;
28
- TaskIsn = 0;
29
- ContextID = 0;
30
- IsSubForm = false;
31
- _ctlIdx = 0;
32
- _compIdx = 0;
33
- _isPrg = false;
34
- _isMainPrg = false;
35
- IsInteractive = false;
36
- _taskTag = null;
37
- _openWin = false;
38
- _allowEvents = false;
39
- Form = null;
40
- _propTab = null;
41
- _helpTab = null;
42
- _nullArithmetic;
43
- IconFileName = null;
44
- IsParallel = false;
45
- DataView = null;
46
- ActionManager = null;
47
- StudioParentTask = null;
48
- routerPath = null;
49
- routeParams = null;
50
- inDefaultRouterOutlet = false;
51
- Init() {
52
- this.DataView.Init();
53
- }
54
- get RouterPath() {
55
- return this.routerPath;
56
- }
57
- get RouterParams() {
58
- return this.routeParams;
59
- }
60
- get InDefaultRouterOutlet() {
61
- return this.inDefaultRouterOutlet;
62
- }
63
- IsSubtask = false;
64
- DataViewWasRetrieved = false;
65
- TaskPrefixExecuted = false;
66
- get IsBlockingBatch() {
67
- return !this._isMainPrg && this.isOpenWin() && !this._allowEvents && !this.IsInteractive;
68
- }
69
- constructor() {
70
- this._nullArithmetic = Constants.NULL_ARITH_USE_DEF;
71
- this._propTab = new PropTable(this);
72
- }
73
- getTaskTag() {
74
- return this._taskTag;
75
- }
76
- getCtlIdx() {
77
- return this._ctlIdx;
78
- }
79
- isMainProg() {
80
- return this._isMainPrg;
81
- }
82
- getTopMostForm() {
83
- let form = null;
84
- if (this.Form !== null)
85
- form = this.Form.getTopMostForm();
86
- return form;
87
- }
88
- getCtrl(ctrlIdx) {
89
- return this.Form.getCtrl(ctrlIdx);
90
- }
91
- setMode(val) {
92
- if (this.getMode() !== val) {
93
- this.setProp(PropInterface.PROP_TYPE_TASK_MODE, val);
94
- if (this._flowMonitor !== null)
95
- this._flowMonitor.addTaskCngMode(val, this.GetTaskDetails());
96
- }
97
- }
98
- getMode() {
99
- let taskMode = Constants.TASK_MODE_MODIFY;
100
- let prop = this._propTab.getPropById(PropInterface.PROP_TYPE_TASK_MODE);
101
- if (prop !== null) {
102
- taskMode = prop.GetComputedValue();
103
- }
104
- return taskMode;
105
- }
106
- SetInRecompute(inRecompute) {
107
- this.isInRecompute = inRecompute;
108
- }
109
- IsInRecompute() {
110
- return this.isInRecompute;
111
- }
112
- resetRefreshType() {
113
- this._refreshType = Constants.TASK_REFRESH_NONE;
114
- }
115
- getRefreshType() {
116
- return this._refreshType;
117
- }
118
- SetRefreshType(refreshType) {
119
- switch (refreshType) {
120
- case Constants.TASK_REFRESH_FORM:
121
- case Constants.TASK_REFRESH_TABLE:
122
- case Constants.TASK_REFRESH_CURR_REC:
123
- this._refreshType = refreshType;
124
- break;
125
- default:
126
- break;
127
- }
128
- }
129
- GetRouterParams() {
130
- return this.routeParams;
131
- }
132
- getLastParkedCtrl() {
133
- return this._lastParkedCtrl;
134
- }
135
- isOpenWin() {
136
- return this._openWin;
137
- }
138
- async checkProp(propId, defaultRetVal) {
139
- let prop = this.getProp(propId);
140
- if (prop !== null)
141
- return await prop.getValueBoolean();
142
- return defaultRetVal;
143
- }
144
- getClickedControl() {
145
- let clickedCtrl = Events.GetRuntimeContext(null).CurrentClickedCtrl;
146
- if (clickedCtrl !== null && clickedCtrl.getForm().getTask() !== this)
147
- clickedCtrl = null;
148
- return clickedCtrl;
149
- }
150
- getKeyboardMappingState() {
151
- return this._keyboardMappingState;
152
- }
153
- isStateEnabled(state) {
154
- return (state & this._keyboardMappingState) > 0;
155
- }
156
- setKeyboardMappingState(state, on) {
157
- this._keyboardMappingState = on
158
- ? GuiTaskBase.mkInt(GuiTaskBase.hiShrt(this._keyboardMappingState) & ~state, GuiTaskBase.loShrt(this._keyboardMappingState) | state)
159
- : GuiTaskBase.mkInt(GuiTaskBase.hiShrt(this._keyboardMappingState) | state, GuiTaskBase.loShrt(this._keyboardMappingState) & ~state);
160
- }
161
- static hiShrt(n) {
162
- return (n & 0xffff0000) >> 16;
163
- }
164
- static loShrt(n) {
165
- return n & 0x0000ffff;
166
- }
167
- static mkInt(n1, n2) {
168
- return n1 << 16 | n2;
169
- }
170
- getHelpItem(idx) {
171
- if (this._helpTab !== null)
172
- return this._helpTab.getHelp(idx);
173
- }
174
- setProp(propId, val) {
175
- this._propTab.setProp(propId, val, this, "T");
176
- }
177
- setBrkLevel(cBrkLevel, NewBrkLevelIndex) {
178
- this._brkLevel = cBrkLevel;
179
- this._brkLevelIndex = NewBrkLevelIndex;
180
- this.setMainLevel(cBrkLevel);
181
- }
182
- getBrkLevel() {
183
- return this._brkLevel;
184
- }
185
- getBrkLevelIndex() {
186
- return this._brkLevelIndex;
187
- }
188
- setMainLevel(cBrkLevel) {
189
- if (cBrkLevel !== null && cBrkLevel.length > 0) {
190
- let level = cBrkLevel.charAt(0);
191
- if (level === Constants.TASK_LEVEL_NONE || level === Constants.TASK_LEVEL_TASK ||
192
- level === Constants.TASK_LEVEL_RECORD)
193
- this._mainLevel = cBrkLevel;
194
- }
195
- }
196
- getMainLevel() {
197
- return this._mainLevel;
198
- }
199
- setLevel(cLevel) {
200
- this._level = cLevel;
201
- if (this._level === Constants.TASK_LEVEL_RECORD)
202
- this._enteredRecLevel = true;
203
- }
204
- getLevel() {
205
- return this._level;
206
- }
207
- setDataSynced(synced) {
208
- }
209
- getNullArithmetic() {
210
- return this._nullArithmetic;
211
- }
212
- setLastParkedCtrl(ctrl) {
213
- this._lastParkedCtrl = ctrl;
214
- this._currParkedFld = ((this._lastParkedCtrl !== null)
215
- ? this._lastParkedCtrl.getField()
216
- : null);
217
- this.CurrentEditingControl = ctrl;
218
- }
219
- getCurrField() {
220
- return this._currParkedFld;
221
- }
222
- setCurrField(currField) {
223
- this._currParkedFld = currField;
224
- }
225
- getCurrFieldIdx() {
226
- if (this._currParkedFld !== null)
227
- return this._currParkedFld.getId();
228
- return -1;
229
- }
230
- getFieldByValueStr(valueStr, parent, vee) {
231
- if (arguments.length === 1)
232
- return this.getFieldByValueStr_0(valueStr);
233
- else
234
- return this.getFieldByValueStr_1(valueStr, parent, vee);
235
- }
236
- getFieldByValueStr_0(valueStr) {
237
- let parent;
238
- let vee;
239
- let refParent = new RefParam(parent);
240
- let refVee = new RefParam(vee);
241
- return this.getFieldByValueStr_1(valueStr, refParent, refVee);
242
- }
243
- getFieldByValueStr_1(valueStr, parent, vee) {
244
- parent.value = vee.value = 0;
245
- let tempField = null;
246
- let comma = valueStr.indexOf(",");
247
- if (comma > 0) {
248
- let parentId = NNumber.Parse(valueStr.substr(0, comma));
249
- let fldIdx = NNumber.Parse(valueStr.substr(comma + 1));
250
- tempField = ((parentId !== 0)
251
- ? this.getFieldDef(parentId, fldIdx)
252
- : this.getFieldDef(fldIdx));
253
- parent.value = parentId;
254
- vee.value = fldIdx;
255
- }
256
- return tempField;
257
- }
258
- getMainProgFieldByValueStr(valueStr) {
259
- let fldIdx = NNumber.Parse(valueStr) - 1;
260
- return this.getFieldDef(fldIdx);
261
- }
262
- getFieldDef(fldIdOrParent, fldIdx) {
263
- if (arguments.length === 1)
264
- return this.getField_0(fldIdOrParent);
265
- else
266
- return this.getField_1(fldIdOrParent, fldIdx);
267
- }
268
- getField_0(fldId) {
269
- return this.DataView.getField(fldId);
270
- }
271
- async InitForm() {
272
- if (this.Form !== null && this.isOpenWin()) {
273
- this.Form.InInitForm = true;
274
- await this.Form.init();
275
- this.SetRefreshType(Constants.TASK_REFRESH_FORM);
276
- await this.RefreshDisplay();
277
- Commands.beginInvoke();
278
- this.Form.InInitForm = false;
279
- }
280
- }
281
- ResumeSubformLayout() {
282
- if (this.Form !== null) {
283
- let subFormCtrl = this.Form.getSubFormCtrl();
284
- if (subFormCtrl !== null && this.shouldResumeSubformLayout) {
285
- Commands.addOperationWithLine(CommandType.SET_PROPERTY, subFormCtrl, 0, HtmlProperties.Visible, subFormCtrl.isVisible());
286
- this.shouldResumeSubformLayout = false;
287
- }
288
- }
289
- }
290
- GetLastParkedCtrlName(depth) {
291
- let ancestor = this.GetTaskAncestor(depth);
292
- if (ancestor === null || ancestor._lastParkedCtrl === null)
293
- return "";
294
- return ancestor._lastParkedCtrl.Name;
295
- }
296
- getForm() {
297
- return this.Form;
298
- }
299
- SetForm(value) {
300
- this.Form = value;
301
- return value;
302
- }
303
- checkIfExistProp(propId) {
304
- let exist = false;
305
- if (this._propTab !== null) {
306
- let prop = this._propTab.getPropById(propId);
307
- exist = (prop !== null);
308
- }
309
- return exist;
310
- }
311
- getProp(propId) {
312
- let prop = null;
313
- if (this._propTab !== null) {
314
- prop = this._propTab.getPropById(propId);
315
- if (prop === null) {
316
- prop = Property.getDefaultProp(propId, GuiConstants.PARENT_TYPE_TASK, this);
317
- if (prop !== null) {
318
- prop.StudioValue = prop.getOrgValue();
319
- this._propTab.addProp(prop);
320
- }
321
- }
322
- }
323
- return prop;
324
- }
325
- GetComputedProperty(propId) {
326
- let prop = null;
327
- if (this._propTab !== null)
328
- prop = this._propTab.getPropById(propId);
329
- return prop;
330
- }
331
- getCompIdx() {
332
- return this._compIdx;
333
- }
334
- IsFirstRefreshOfProps() {
335
- throw new NotImplementedException();
336
- }
337
- async EvaluateExpression(expId, resType, length, contentTypeUnicode, resCellType, alwaysEvaluate, wasEvaluated) {
338
- let result = null;
339
- wasEvaluated.value = false;
340
- if (alwaysEvaluate || this.DataViewWasRetrieved) {
341
- result = await this.CalculateExpression(expId, resType, length);
342
- wasEvaluated.value = true;
343
- }
344
- return result;
345
- }
346
- GetExpressionStorage(expId) {
347
- return this.GetExpressionStorage(expId);
348
- }
349
- async CalculateExpression(expId, resType, length) {
350
- return Promise.resolve("");
351
- }
352
- isStarted() {
353
- return true;
354
- }
355
- isAborting() {
356
- return false;
357
- }
358
- getField_1(parent, fldIdx) {
359
- switch (parent) {
360
- case 0:
361
- return this.getFieldDef(fldIdx);
362
- case GuiTaskBase.MAIN_PRG_PARENT_ID:
363
- let compMainProg = GuiDataCollection.MGDataTable.GetMainProgByCtlIdx(this.ContextID, this._ctlIdx);
364
- return compMainProg.getFieldDef(fldIdx);
365
- default:
366
- parent--;
367
- if (this.StudioParentTask != null)
368
- return this.StudioParentTask.getFieldDef(parent, fldIdx);
369
- return null;
370
- }
371
- }
372
- fillAttributes(parser) {
373
- let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex());
374
- if (endContext !== -1 && endContext < parser.getXMLdata().length) {
375
- let tag = parser.getXMLsubstring(endContext);
376
- parser.add2CurrIndex(tag.indexOf(XMLConstants.MG_TAG_TASK) + XMLConstants.MG_TAG_TASK.length);
377
- let tokens = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
378
- for (let j = 0; j < tokens.length; j = j + 2) {
379
- let attribute = tokens.get_Item(j);
380
- let valueStr = tokens.get_Item(j + 1);
381
- if (!this.setAttribute(attribute, valueStr) && Events.ShouldLog(Logger_LogLevels.Development))
382
- Events.WriteDevToLog(NString.Format("In TaskBase.fillAttributes(): Unprocessed(!) attribute: '{0}' = '{1}'", attribute, valueStr));
383
- }
384
- parser.setCurrIndex(parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1);
385
- }
386
- }
387
- setAttribute(attribute, valueStr) {
388
- let isTagProcessed = true;
389
- switch (attribute) {
390
- case XMLConstants.MG_ATTR_APPL_GUID:
391
- this.ApplicationGuid = valueStr;
392
- break;
393
- case XMLConstants.MG_ATTR_PROGRAM_ISN:
394
- this.ProgramIsn = NNumber.Parse(valueStr);
395
- break;
396
- case XMLConstants.MG_ATTR_TASK_ISN:
397
- this.TaskIsn = NNumber.Parse(valueStr);
398
- break;
399
- case XMLConstants.MG_ATTR_TOOLKIT_PARENT_TASK:
400
- if (NNumber.Parse(valueStr) !== 0)
401
- this.StudioParentTask = GuiDataCollection.MGDataTable.GetTaskByID(valueStr);
402
- this.IsSubtask = true;
403
- break;
404
- case XMLConstants.MG_ATTR_TASKID:
405
- this.setTaskId(valueStr);
406
- if (Events.ShouldLog(Logger_LogLevels.Development))
407
- Events.WriteDevToLog("TASK: " + this._taskTag);
408
- break;
409
- case XMLConstants.MG_ATTR_CTL_IDX:
410
- this.setCtlAndCompIdx(valueStr);
411
- break;
412
- case XMLConstants.MG_ATTR_MAINPRG:
413
- this.setMainPrg(valueStr);
414
- break;
415
- case XMLConstants.MG_ATTR_NULL_ARITHMETIC:
416
- this.setNullArithmetic(valueStr);
417
- break;
418
- case XMLConstants.MG_ATTR_INTERACTIVE:
419
- this.setIsInteracive(valueStr);
420
- break;
421
- case XMLConstants.MG_ATTR_OPEN_WIN:
422
- this.setOpenWin(valueStr);
423
- break;
424
- case XMLConstants.MG_ATTR_ALLOW_EVENTS:
425
- this.SetAllowEvents(valueStr);
426
- break;
427
- case XMLConstants.MG_ATTR_ISPRG:
428
- this.setIsPrg(valueStr);
429
- break;
430
- case XMLConstants.MG_ATTR_ICON_FILE_NAME:
431
- this.IconFileName = valueStr;
432
- break;
433
- case XMLConstants.MG_ATTR_PARALLEL:
434
- this.IsParallel = XmlParser.getBoolean(valueStr);
435
- break;
436
- case XMLConstants.MG_ATTR_ROUTER_PATH:
437
- if (valueStr.trim() != "")
438
- this.routerPath = valueStr;
439
- break;
440
- case XMLConstants.MG_ATTR_IN_DEFAULT_ROUTER_OUTLET:
441
- this.inDefaultRouterOutlet = XmlParser.getBoolean(valueStr);
442
- break;
443
- default:
444
- isTagProcessed = false;
445
- break;
446
- }
447
- return isTagProcessed;
448
- }
449
- FormInitData(parentForm) {
450
- let alreadySetParentForm = false;
451
- let refAlreadySetParentForm = new RefParam(alreadySetParentForm);
452
- if (this.Form === null)
453
- this.Form = this.ConstructMgForm(refAlreadySetParentForm);
454
- if (!alreadySetParentForm)
455
- this.Form.ParentForm = parentForm;
456
- if (Events.ShouldLog(Logger_LogLevels.Development))
457
- Events.WriteDevToLog("form");
458
- this.Form.fillData(this);
459
- return this.Form;
460
- }
461
- setTaskId(valueStr) {
462
- this._taskTag = valueStr;
463
- }
464
- setCtlAndCompIdx(valueStr) {
465
- let i = valueStr.indexOf(",");
466
- if (i > -1) {
467
- this._ctlIdx = NNumber.Parse(valueStr.substr(0, i));
468
- this._compIdx = NNumber.Parse(valueStr.substr(i + 1));
469
- }
470
- }
471
- GetAncestorTaskContainingForm() {
472
- let parentTask = this.GetTaskAncestor(1);
473
- while (parentTask !== null && parentTask.getForm() === null) {
474
- parentTask = parentTask.GetTaskAncestor(1);
475
- }
476
- return parentTask;
477
- }
478
- setMainPrg(valueStr) {
479
- this._isMainPrg = XmlParser.getBoolean(valueStr);
480
- }
481
- setNullArithmetic(valueStr) {
482
- this._nullArithmetic = valueStr.charAt(0);
483
- }
484
- setIsInteracive(valueStr) {
485
- this.IsInteractive = XmlParser.getBoolean(valueStr);
486
- }
487
- setOpenWin(valueStr) {
488
- this._openWin = XmlParser.getBoolean(valueStr);
489
- }
490
- SetOpenWin(valuebool) {
491
- this._openWin = valuebool;
492
- }
493
- SetAllowEvents(valueStr) {
494
- this._allowEvents = XmlParser.getBoolean(valueStr);
495
- }
496
- setIsPrg(valueStr) {
497
- this._isPrg = XmlParser.getBoolean(valueStr);
498
- }
499
- ShouldEvaluatePropertyLocally(propId) {
500
- return false;
501
- }
502
- WriteToMessagePane(msg) {
503
- if (msg != null)
504
- console.log(msg);
505
- }
506
- WriteToMessagePanebyMsgId(msgId) {
507
- let msg = Events.GetMessageString(msgId);
508
- this.WriteToMessagePane(msg);
509
- }
510
- }
511
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpVGFza0Jhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvdGFza3MvR3VpVGFza0Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFPLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDL0YsT0FBTyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBb0IsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBT3hHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUkzQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzdELE1BQU0sT0FBZ0IsV0FBVztJQUNyQixNQUFNLENBQUMsa0JBQWtCLEdBQVcsS0FBSyxDQUFDO0lBQ3BELFlBQVksR0FBc0IsSUFBSSxDQUFDO0lBQy9CLHFCQUFxQixHQUFXLFVBQVUsQ0FBQztJQUNuRCxZQUFZLEdBQVcsR0FBRyxDQUFDO0lBQzNCLGVBQWUsR0FBa0IsSUFBSSxDQUFDO0lBQzlCLFNBQVMsR0FBVyxJQUFJLENBQUM7SUFDekIsY0FBYyxHQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzVCLFVBQVUs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cHRpb24sIE5TdHJpbmcsIFJlZlBhcmFtfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtDb25zdGFudHMsIExvZ2dlcl9Mb2dMZXZlbHMsIFN0b3JhZ2VBdHRyaWJ1dGUsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge0lUYXNrfSBmcm9tIFwiLi9JVGFza1wiO1xyXG5pbXBvcnQge1Byb3BQYXJlbnRJbnRlcmZhY2V9IGZyb20gXCIuLi8uLi9ndWkvUHJvcFBhcmVudEludGVyZmFjZVwiO1xyXG5pbXBvcnQge0lGbG93TW9uaXRvclF1ZXVlfSBmcm9tIFwiLi4vLi4vSUZsb3dNb25pdG9yUXVldWVcIjtcclxuaW1wb3J0IHtNZ0NvbnRyb2xCYXNlfSBmcm9tIFwiLi4vZ3VpL01nQ29udHJvbEJhc2VcIjtcclxuaW1wb3J0IHtHdWlGaWVsZEJhc2V9IGZyb20gXCIuLi9kYXRhL0d1aUZpZWxkQmFzZVwiO1xyXG5pbXBvcnQge01nRm9ybUJhc2V9IGZyb20gXCIuLi9ndWkvTWdGb3JtQmFzZVwiO1xyXG5pbXBvcnQge1Byb3BUYWJsZX0gZnJvbSBcIi4uL2d1aS9Qcm9wVGFibGVcIjtcclxuaW1wb3J0IHtIZWxwcywgTWFnaWNIZWxwfSBmcm9tIFwiLi4vZ3VpL0hlbHBzXCI7XHJcbmltcG9ydCB7R3VpRGF0YVZpZXdCYXNlfSBmcm9tIFwiLi4vZGF0YS9HdWlEYXRhVmlld0Jhc2VcIjtcclxuaW1wb3J0IHtJQWN0aW9uTWFuYWdlcn0gZnJvbSBcIi4uL2V2ZW50cy9JQWN0aW9uTWFuYWdlclwiO1xyXG5pbXBvcnQge1Byb3BlcnR5fSBmcm9tIFwiLi4vZ3VpL1Byb3BlcnR5XCI7XHJcbmltcG9ydCB7UHJvcEludGVyZmFjZX0gZnJvbSBcIi4uL2d1aS9Qcm9wSW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7RmllbGREZWZ9IGZyb20gXCIuLi9kYXRhL0ZpZWxkRGVmXCI7XHJcbmltcG9ydCB7Q29tbWFuZHN9IGZyb20gXCIuLi8uLi9Db21tYW5kc1wiO1xyXG5pbXBvcnQge0V2ZW50c30gZnJvbSBcIi4uLy4uL0V2ZW50c1wiO1xyXG5pbXBvcnQge0d1aUNvbnN0YW50c30gZnJvbSBcIi4uLy4uL0d1aUNvbnN0YW50c1wiO1xyXG5pbXBvcnQge0d1aURhdGFDb2xsZWN0aW9ufSBmcm9tIFwiLi9HdWlEYXRhQ29sbGVjdGlvblwiO1xyXG5pbXBvcnQgeyBDb21tYW5kVHlwZSwgSHRtbFByb3BlcnRpZXMgfSBmcm9tIFwiLi4vLi4vR3VpRW51bXNcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vIHRhc2sgcHJvcGVydGllcyAoKyBmZXcgYWNjZXNzIG1ldGhvZHMpIHJlcXVpcmVkIGFuZCByZWxldmFudCBmb3IgdGhlIEdVSSBuYW1lc3BhY2UuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHdWlUYXNrQmFzZSBpbXBsZW1lbnRzIElUYXNrLCBQcm9wUGFyZW50SW50ZXJmYWNlIHtcclxuICBwcm90ZWN0ZWQgc3RhdGljIE1BSU5fUFJHX1BBUkVOVF9JRDogbnVtYmVyID0gMzI3Njg7XHJcbiAgX2Zsb3dNb25pdG9yOiBJRmxvd01vbml0b3JRdWV1ZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfa2V5Ym9hcmRNYXBwaW5nU3RhdGU6IG51bWJlciA9IDB4RkZGRjAwMDA7XHJcbiAgX3JlZnJlc2hUeXBlOiBzdHJpbmcgPSBcIlRcIjtcclxuICBfbGFzdFBhcmtlZEN0cmw6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG4gIHByaXZhdGUgX2Jya0xldmVsOiBzdHJpbmcgPSBudWxsOyAvLyB0aGUgcnVudGltZSBsZXZlbCAoUmVjb3JkICBTdWZmaXgsIEd1aVRhc2tCYXNlIFByZWZpeCwgZXRjLilcclxuICBwcml2YXRlIF9icmtMZXZlbEluZGV4OiBudW1iZXIgPSAtMTtcclxuICBwcml2YXRlIF9tYWluTGV2ZWw6IHN0cmluZyA9IG51bGw7IC8vIHRoZSBydW50aW1lIG1haW5sZXZlbFxyXG4gIHByaXZhdGUgX2xldmVsOiBzdHJpbmcgPSBcIlxcMFwiOyAvLyAnQycgPSBpbiBjb250cm9sLCAnUicgPSBpbiByZWNvcmQgKG91dCBvZiBjb250cm9sKSwgJ1QnID0gaW4gdGFzayAob3V0IG9mIHJlY29yZClcclxuICBfZW50ZXJlZFJlY0xldmVsOiBib29sZWFuID0gZmFsc2U7IC8vIFRSVUUgb25seSBpZiB0aGUgdGFzayB3YXMgZXZlciBtb3ZlZCB0byByZWNvcmQgbGV2ZWwuXHJcbiAgX2N1cnJQYXJrZWRGbGQ6IEd1aUZpZWxkQmFzZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBpc0luUmVjb21wdXRlID0gZmFsc2U7XHJcbiAgLy8gVGhpcyBmbGFnIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgZWRpdGluZyBjb250cm9sLlxyXG4gIC8vIEl0IGlzIHJlc2V0IHRvIG51bGwgd2hlbiB3ZSBhcmUgaW4gYmV0d2VlbiBzZXR0aW5nIHRoZSBmb2N1cyBhbmQgb25jZSB3ZSBzZXQgdGhlIGZvY3VzIHRvIGNvbnRyb2wgdGhlbiB3ZSBzZXQgdGhpcyBmbGFnIHRvIGN1cnJlbnQgZm9jdXNlZCBjb250cm9sLlxyXG4gIEN1cnJlbnRFZGl0aW5nQ29udHJvbDogTWdDb250cm9sQmFzZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzaG91bGRSZXN1bWVTdWJmb3JtTGF5b3V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBBcHBsaWNhdGlvbkd1aWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgUHJvZ3JhbUlzbjogbnVtYmVyID0gMDtcclxuICBUYXNrSXNuOiBudW1iZXIgPSAwO1xyXG4gIENvbnRleHRJRDogbnVtYmVyID0gMDtcclxuICBJc1N1YkZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBfY3RsSWR4OiBudW1iZXIgPSAwO1xyXG4gIF9jb21wSWR4OiBudW1iZXIgPSAwO1xyXG4gIF9pc1ByZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIF9pc01haW5Qcmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc0ludGVyYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgX3Rhc2tUYWc6IHN0cmluZyA9IG51bGw7XHJcbiAgX29wZW5XaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9hbGxvd0V2ZW50czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEZvcm06IE1nRm9ybUJhc2UgPSBudWxsO1xyXG4gIF9wcm9wVGFiOiBQcm9wVGFibGUgPSBudWxsO1xyXG4gIF9oZWxwVGFiOiBIZWxwcyA9IG51bGw7XHJcbiAgX251bGxBcml0aG1ldGljOiBzdHJpbmc7XHJcbiAgSWNvbkZpbGVOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBJc1BhcmFsbGVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgRGF0YVZpZXc6IEd1aURhdGFWaWV3QmFzZSA9IG51bGw7XHJcbiAgQWN0aW9uTWFuYWdlcjogSUFjdGlvbk1hbmFnZXIgPSBudWxsO1xyXG4gIFN0dWRpb1BhcmVudFRhc2s6IEd1aVRhc2tCYXNlID0gbnVsbDsgLy8gcGFyZW50IHRhc2sgb2YgdGhlIHN1YnRhc2sgYnkgdG9vbGtpdCB0cmVlLlxyXG5cclxuICBwcml2YXRlIHJvdXRlclBhdGg6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHJvdXRlUGFyYW1zOiBMaXN0PGFueT4gPSBudWxsO1xyXG4gIHByaXZhdGUgaW5EZWZhdWx0Um91dGVyT3V0bGV0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5EYXRhVmlldy5Jbml0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgUm91dGVyUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucm91dGVyUGF0aDtcclxuICB9XHJcblxyXG4gIGdldCBSb3V0ZXJQYXJhbXMoKTogTGlzdDxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnJvdXRlUGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IEluRGVmYXVsdFJvdXRlck91dGxldCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmluRGVmYXVsdFJvdXRlck91dGxldDtcclxuICB9XHJcblxyXG4gIElzU3VidGFzazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIERhdGFWaWV3V2FzUmV0cmlldmVkOiBib29sZWFuID0gZmFsc2U7IC8vIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIHZpZXcgd2FzIHJldHJpZXZlZCwgaS5lLiBpdCBpcyBwb3NzaWJsZSB0byBldmFsdWF0ZSBleHByZXNzaW9uc1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGluZGljYXRlcyB3aGV0aGVyIHRoZSB0YXNrIHByZWZpeCB3YXMgcGVyZm9ybWVkIGZvciB0aGlzIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFRhc2tQcmVmaXhFeGVjdXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybnMgdHJ1ZSBpZiB0aGlzIHRhc2sgc2hvdWxkIGJsb2NrIGFjdGl2YXRpb24gb2YgaXRzIGFjc2VzdG9yc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0IElzQmxvY2tpbmdCYXRjaCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5faXNNYWluUHJnICYmIHRoaXMuaXNPcGVuV2luKCkgJiYgIXRoaXMuX2FsbG93RXZlbnRzICYmICF0aGlzLklzSW50ZXJhY3RpdmU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuX251bGxBcml0aG1ldGljID0gQ29uc3RhbnRzLk5VTExfQVJJVEhfVVNFX0RFRjtcclxuICAgIHRoaXMuX3Byb3BUYWIgPSBuZXcgUHJvcFRhYmxlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0YXNrIGlkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRUYXNrVGFnKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFza1RhZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIGN0bCBpZHhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEN0bElkeCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N0bElkeDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhpcyB0YXNrIGlzIGEgbWFpbiBwcm9ncmFtIG9mIGFuIGludGVybmFsIG9yIGV4dGVybmFsIGNvbXBvbmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNNYWluUHJvZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc01haW5Qcmc7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSB0b3Btb3N0IG1nZm9ybSBvZiB0aGUgc3ViZm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRUb3BNb3N0Rm9ybSgpOiBNZ0Zvcm1CYXNlIHtcclxuICAgIGxldCBmb3JtOiBNZ0Zvcm1CYXNlID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5Gb3JtICE9PSBudWxsKVxyXG4gICAgICBmb3JtID0gdGhpcy5Gb3JtLmdldFRvcE1vc3RGb3JtKCk7XHJcbiAgICAvLyBlbHNlXHJcbiAgICAvLyBBc3NlcnQgc2hvdWxkIG5vdCBiZSBoZXJlIGJlY2F1c2Ugd2UgaGF2ZSBkaWZmZXJlbnQgY29uZGl0aW9ucyBmb3IgUkMgJiBPTC5cclxuICAgIC8vIE90aGVyIHRoZW4gTWFpbiBQcm9ncmFtLCB0YXNrJ3MgZm9ybSBzaG91bGQgbm90IGJlIG51bGwuXHJcbiAgICAvLyBEZWJ1Zy5Bc3NlcnQoaXNNYWluUHJvZygpKTtcclxuXHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSByZXF1ZXN0ZWQgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Q3RybChjdHJsSWR4OiBudW1iZXIpOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLkZvcm0uZ2V0Q3RybChjdHJsSWR4KTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldHMgdGhlIGN1cnJlbnQgdGFzayBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj5uZXcgdGFzayBtb2RlPC9wYXJhbT5cclxuICBzZXRNb2RlKHZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5nZXRNb2RlKCkgIT09IHZhbCkge1xyXG4gICAgICB0aGlzLnNldFByb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19NT0RFLCB2YWwpO1xyXG4gICAgICBpZiAodGhpcy5fZmxvd01vbml0b3IgIT09IG51bGwpXHJcbiAgICAgICAgdGhpcy5fZmxvd01vbml0b3IuYWRkVGFza0NuZ01vZGUodmFsLCB0aGlzLkdldFRhc2tEZXRhaWxzKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIHRhc2sgbW9kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TW9kZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRhc2tNb2RlOiBzdHJpbmcgPSBDb25zdGFudHMuVEFTS19NT0RFX01PRElGWTtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19NT0RFKTtcclxuICAgIGlmIChwcm9wICE9PSBudWxsKSB7XHJcbiAgICAgIHRhc2tNb2RlID0gcHJvcC5HZXRDb21wdXRlZFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFza01vZGU7XHJcbiAgfVxyXG5cclxuICBTZXRJblJlY29tcHV0ZShpblJlY29tcHV0ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0luUmVjb21wdXRlID0gaW5SZWNvbXB1dGU7XHJcbiAgfVxyXG5cclxuICBJc0luUmVjb21wdXRlKCkgOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzSW5SZWNvbXB1dGU7XHJcbiAgfVxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXNldCByZWZyZXNoIHR5cGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlc2V0UmVmcmVzaFR5cGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZWZyZXNoVHlwZSA9IENvbnN0YW50cy5UQVNLX1JFRlJFU0hfTk9ORTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgcmVmcmVzaCB0eXBlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFJlZnJlc2hUeXBlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVmcmVzaFR5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSByZWZyZXNoIHR5cGUgZm9yIHRoZSBuZXh0IFJlZnJlc2hEaXNwbGF5KCkgY2FsbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZWZyZXNoVHlwZVwiPnRoZSBuZXcgcmVmcmVzaCB0eXBlPC9wYXJhbT5cclxuICBTZXRSZWZyZXNoVHlwZShyZWZyZXNoVHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHJlZnJlc2hUeXBlKSB7XHJcbiAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfUkVGUkVTSF9GT1JNOlxyXG4gICAgICBjYXNlIENvbnN0YW50cy5UQVNLX1JFRlJFU0hfVEFCTEU6XHJcbiAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfUkVGUkVTSF9DVVJSX1JFQzpcclxuICAgICAgICB0aGlzLl9yZWZyZXNoVHlwZSA9IHJlZnJlc2hUeXBlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEdldFJvdXRlclBhcmFtcygpOiBMaXN0PGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucm91dGVQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGxhc3QgcGFya2VkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldExhc3RQYXJrZWRDdHJsKCk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhc3RQYXJrZWRDdHJsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBnZXQgdGhlIG9wZW4gd2luZG93XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc09wZW5XaW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3BlbldpbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpZiB0aGUgcHJvcGVydHkgZXhpc3RzIHJldHVybnMgaXRzIGJvb2xlYW4gdmFsdWUgb3RoZXJ3aXNlIHJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicHJvcElkXCI+aWQgb2YgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlZmF1bHRSZXRWYWxcIj50aGUgdmFsdWUgdG8gcmV0dXJuIGluIGNhc2UgdGhlIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0PC9wYXJhbT5cclxuICBhc3luYyBjaGVja1Byb3AocHJvcElkOiBudW1iZXIsIGRlZmF1bHRSZXRWYWw6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IHRoaXMuZ2V0UHJvcChwcm9wSWQpO1xyXG4gICAgaWYgKHByb3AgIT09IG51bGwpXHJcbiAgICAgIHJldHVybiBhd2FpdCBwcm9wLmdldFZhbHVlQm9vbGVhbigpO1xyXG4gICAgcmV0dXJuIGRlZmF1bHRSZXRWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgY2xpY2tlZCBjb250cm9sIG9uIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRDbGlja2VkQ29udHJvbCgpOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIGxldCBjbGlja2VkQ3RybDogTWdDb250cm9sQmFzZSA9IEV2ZW50cy5HZXRSdW50aW1lQ29udGV4dChudWxsKS5DdXJyZW50Q2xpY2tlZEN0cmw7XHJcblxyXG4gICAgaWYgKGNsaWNrZWRDdHJsICE9PSBudWxsICYmIGNsaWNrZWRDdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkgIT09IHRoaXMpXHJcbiAgICAgIGNsaWNrZWRDdHJsID0gbnVsbDtcclxuXHJcbiAgICByZXR1cm4gY2xpY2tlZEN0cmw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHJldHVybnM+IGtleWJvYXJkTWFwcGluZ1N0YXRlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBnZXRLZXlib2FyZE1hcHBpbmdTdGF0ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2tleWJvYXJkTWFwcGluZ1N0YXRlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiBzdGF0ZSBlbmFibGVkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzU3RhdGVFbmFibGVkKHN0YXRlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoc3RhdGUgJiB0aGlzLl9rZXlib2FyZE1hcHBpbmdTdGF0ZSkgPiAwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldHMgdGhlIHN0YXRlIG9uL29mZlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvblwiPjwvcGFyYW0+XHJcbiAgc2V0S2V5Ym9hcmRNYXBwaW5nU3RhdGUoc3RhdGU6IG51bWJlciwgb246IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2tleWJvYXJkTWFwcGluZ1N0YXRlID0gb25cclxuICAgICAgPyBHdWlUYXNrQmFzZS5ta0ludChHdWlUYXNrQmFzZS5oaVNocnQodGhpcy5fa2V5Ym9hcmRNYXBwaW5nU3RhdGUpICYgfnN0YXRlLCBHdWlUYXNrQmFzZS5sb1NocnQodGhpcy5fa2V5Ym9hcmRNYXBwaW5nU3RhdGUpIHwgc3RhdGUpXHJcbiAgICAgIDogR3VpVGFza0Jhc2UubWtJbnQoR3VpVGFza0Jhc2UuaGlTaHJ0KHRoaXMuX2tleWJvYXJkTWFwcGluZ1N0YXRlKSB8IHN0YXRlLCBHdWlUYXNrQmFzZS5sb1NocnQodGhpcy5fa2V5Ym9hcmRNYXBwaW5nU3RhdGUpICYgfnN0YXRlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBoaWdoZXIgaGFsZiBvZiB0aGUgaW50ZWdlcjwvcmV0dXJucz5cclxuICBzdGF0aWMgaGlTaHJ0KG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKG4gJiAweGZmZmYwMDAwKSA+PiAxNjtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBsb3cgaGFsZiBvZiB0aGUgaW50ZWdlcjwvcmV0dXJucz5cclxuICBzdGF0aWMgbG9TaHJ0KG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gbiAmIDB4MDAwMGZmZmY7XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm4xXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm4yXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHVuaXRlcyBsb3cgaGFsdmVzIG9mIDIgaW50ZWdlcnMgLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBta0ludChuMTogbnVtYmVyLCBuMjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBuMSA8PCAxNiB8IG4yO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGVscEl0ZW0oaWR4OiBudW1iZXIpOiBNYWdpY0hlbHAge1xyXG4gICAgaWYgKHRoaXMuX2hlbHBUYWIgIT09IG51bGwpXHJcbiAgICAgIHJldHVybiB0aGlzLl9oZWxwVGFiLmdldEhlbHAoaWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYSBwcm9wZXJ0eSBvZiB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj50aGUgaWQgb2YgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPnRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIHNldFByb3AocHJvcElkOiBudW1iZXIsIHZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcm9wVGFiLnNldFByb3AocHJvcElkLCB2YWwsIHRoaXMsIFwiVFwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHJ1bnRpbWUgbGV2ZWwgb2YgdGhlIHRhc2sgKFJlY29yZCBTdWZmaXgsIEd1aVRhc2tCYXNlIFByZWZpeCwgZXRjLilcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEJya0xldmVsKGNCcmtMZXZlbDogc3RyaW5nLCBOZXdCcmtMZXZlbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Jya0xldmVsID0gY0Jya0xldmVsO1xyXG4gICAgdGhpcy5fYnJrTGV2ZWxJbmRleCA9IE5ld0Jya0xldmVsSW5kZXg7XHJcblxyXG4gICAgdGhpcy5zZXRNYWluTGV2ZWwoY0Jya0xldmVsKTsgLy8gVXBkYXRlIHRoZSBNYWluTGV2ZWwgYWNjb3JkaW5nIHRvIHRoZSBuZXcgTGV2ZWxcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBydW50aW1lIGxldmVsIG9mIHRoZSB0YXNrIChSZWNvcmQgU3VmZml4LCBHdWlUYXNrQmFzZSBQcmVmaXgsIGV0Yy4pXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRCcmtMZXZlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jya0xldmVsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgaWQgb2YgdGhlIGN1cnJlbnQgZXhlY3V0aW5nIGhhbmRsZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGludCBpZCBvZiB0aGUgY3VycmVudCBleGVjdXRpbmcgaGFuZGxlcjwvcmV0dXJucz5cclxuICBnZXRCcmtMZXZlbEluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnJrTGV2ZWxJbmRleDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHJ1bnRpbWUgbWFpbmxldmVsIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRNYWluTGV2ZWwoY0Jya0xldmVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChjQnJrTGV2ZWwgIT09IG51bGwgJiYgY0Jya0xldmVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGxldmVsOiBzdHJpbmcgPSBjQnJrTGV2ZWwuY2hhckF0KDApO1xyXG4gICAgICAvKiB0aGVuIE1BSU5MRVZFTCBpcyB1cGRhdGVkIG9ubHkgaWYgdGhlIGFjdHVhbCBMZXZlbCBpcyBhIFRBU0sgb3IgUkVDT1JEICggb3Igbm9uZSApIGxldmVsICovXHJcbiAgICAgIGlmIChsZXZlbCA9PT0gQ29uc3RhbnRzLlRBU0tfTEVWRUxfTk9ORSB8fCBsZXZlbCA9PT0gQ29uc3RhbnRzLlRBU0tfTEVWRUxfVEFTSyB8fFxyXG4gICAgICAgIGxldmVsID09PSBDb25zdGFudHMuVEFTS19MRVZFTF9SRUNPUkQpXHJcbiAgICAgICAgdGhpcy5fbWFpbkxldmVsID0gY0Jya0xldmVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgcnVudGltZSBtYWlubGV2ZWwgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldE1haW5MZXZlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX21haW5MZXZlbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGxldmVsIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNMZXZlbFwiPidDJyA9IGluIGNvbnRyb2wsICdSJyA9IGluIHJlY29yZCAob3V0IG9mIGNvbnRyb2wpLCAnVCcgPSBpbiB0YXNrIChvdXQgb2YgcmVjb3JkKSAgICAgIC8vLyA8L3BhcmFtPlxyXG4gIHNldExldmVsKGNMZXZlbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sZXZlbCA9IGNMZXZlbDtcclxuXHJcbiAgICBpZiAodGhpcy5fbGV2ZWwgPT09IENvbnN0YW50cy5UQVNLX0xFVkVMX1JFQ09SRClcclxuICAgICAgdGhpcy5fZW50ZXJlZFJlY0xldmVsID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIGxldmVsIG9mIHRoZSB0YXNrOiAnQycgPSBpbiBjb250cm9sLCAnUicgPSBpbiByZWNvcmQgKG91dCBvZiBjb250cm9sKSwgJ1QnID0gaW4gdGFzayAob3V0IG9mIHJlY29yZClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldExldmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBEYXRhU3luY2VkIHByb3BlcnR5IG9mIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldERhdGFTeW5jZWQoc3luY2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBzY2hlbWUgZm9yIG51bGwgYXJpdGhtZXRpY1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TnVsbEFyaXRobWV0aWMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9udWxsQXJpdGhtZXRpYztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGxhc3QgcGFya2VkIGNvbnRyb2wgaW4gdGhpcyB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj5sYXN0IGZvY3VzZWQgY29udHJvbDwvcGFyYW0+XHJcbiAgc2V0TGFzdFBhcmtlZEN0cmwoY3RybDogTWdDb250cm9sQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fbGFzdFBhcmtlZEN0cmwgPSBjdHJsO1xyXG4gICAgdGhpcy5fY3VyclBhcmtlZEZsZCA9ICgodGhpcy5fbGFzdFBhcmtlZEN0cmwgIT09IG51bGwpXHJcbiAgICAgID8gdGhpcy5fbGFzdFBhcmtlZEN0cmwuZ2V0RmllbGQoKVxyXG4gICAgICA6IG51bGwpO1xyXG4gICAgdGhpcy5DdXJyZW50RWRpdGluZ0NvbnRyb2wgPSBjdHJsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBjdXJyZW50IGZpZWxkIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRDdXJyRmllbGQoKTogR3VpRmllbGRCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyUGFya2VkRmxkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBjdXJyZW50IGZpZWxkIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRDdXJyRmllbGQoY3VyckZpZWxkOiBHdWlGaWVsZEJhc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX2N1cnJQYXJrZWRGbGQgPSBjdXJyRmllbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpZWxkIG9mIHRoZSBjdXJyZW50IHBhcmtlZCBjb250cm9sIG9yIC0xIGlmIHRoZXJlIGlzIG5vIHN1Y2ggZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEN1cnJGaWVsZElkeCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJQYXJrZWRGbGQgIT09IG51bGwpXHJcbiAgICAgIHJldHVybiB0aGlzLl9jdXJyUGFya2VkRmxkLmdldElkKCk7XHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZEJ5VmFsdWVTdHIodmFsdWVTdHI6IHN0cmluZyk6IEZpZWxkRGVmO1xyXG4gIGdldEZpZWxkQnlWYWx1ZVN0cih2YWx1ZVN0cjogc3RyaW5nLCBwYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4sIHZlZTogUmVmUGFyYW08bnVtYmVyPik6IEZpZWxkRGVmO1xyXG4gIGdldEZpZWxkQnlWYWx1ZVN0cih2YWx1ZVN0cjogc3RyaW5nLCBwYXJlbnQ/OiBSZWZQYXJhbTxudW1iZXI+LCB2ZWU/OiBSZWZQYXJhbTxudW1iZXI+KTogRmllbGREZWYge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXHJcbiAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkQnlWYWx1ZVN0cl8wKHZhbHVlU3RyKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRCeVZhbHVlU3RyXzEodmFsdWVTdHIsIHBhcmVudCwgdmVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmllbGRCeVZhbHVlU3RyXzAodmFsdWVTdHI6IHN0cmluZyk6IEZpZWxkRGVmIHtcclxuICAgIGxldCBwYXJlbnQ6IG51bWJlcjtcclxuICAgIGxldCB2ZWU6IG51bWJlcjtcclxuICAgIGxldCByZWZQYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0ocGFyZW50KTtcclxuICAgIGxldCByZWZWZWU6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0odmVlKTtcclxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkQnlWYWx1ZVN0cl8xKHZhbHVlU3RyLCByZWZQYXJlbnQsIHJlZlZlZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCB0aGUgZmllbGQgYnkgJ3ZhbHVlU3RyJ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRGaWVsZEJ5VmFsdWVTdHJfMSh2YWx1ZVN0cjogc3RyaW5nLCBwYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4sIHZlZTogUmVmUGFyYW08bnVtYmVyPik6IEZpZWxkRGVmIHtcclxuICAgIHBhcmVudC52YWx1ZSA9IHZlZS52YWx1ZSA9IDA7XHJcbiAgICBsZXQgdGVtcEZpZWxkOiBGaWVsZERlZiA9IG51bGw7XHJcbiAgICBsZXQgY29tbWE6IG51bWJlciA9IHZhbHVlU3RyLmluZGV4T2YoXCIsXCIpO1xyXG4gICAgaWYgKGNvbW1hID4gMCkge1xyXG4gICAgICBsZXQgcGFyZW50SWQ6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UodmFsdWVTdHIuc3Vic3RyKDAsIGNvbW1hKSk7XHJcbiAgICAgIGxldCBmbGRJZHg6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UodmFsdWVTdHIuc3Vic3RyKGNvbW1hICsgMSkpO1xyXG4gICAgICB0ZW1wRmllbGQgPSAoKHBhcmVudElkICE9PSAwKVxyXG4gICAgICAgID8gdGhpcy5nZXRGaWVsZERlZihwYXJlbnRJZCwgZmxkSWR4KVxyXG4gICAgICAgIDogdGhpcy5nZXRGaWVsZERlZihmbGRJZHgpKTtcclxuICAgICAgcGFyZW50LnZhbHVlID0gcGFyZW50SWQ7XHJcbiAgICAgIHZlZS52YWx1ZSA9IGZsZElkeDtcclxuICAgIH1cclxuICAgIHJldHVybiB0ZW1wRmllbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCB0aGUgZmllbGQgZnJvbSBhIDEtYmFzZWQgbWFpbiBwcm9nIGFyZ3VtZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRNYWluUHJvZ0ZpZWxkQnlWYWx1ZVN0cih2YWx1ZVN0cjogc3RyaW5nKTogRmllbGREZWYge1xyXG4gICAgLy8gc3RyaW5nIGlzIDEtYmFzZWQgLSBuZWVkIHRvIHN1YnRyYWN0IDEgdG8gZ2V0IHRvIDAtYmFzZWQgdmFsdWVcclxuICAgIGxldCBmbGRJZHg6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UodmFsdWVTdHIpIC0gMTtcclxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkRGVmKGZsZElkeCk7XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZERlZihmbGRJZDogbnVtYmVyKTogRmllbGREZWY7XHJcbiAgZ2V0RmllbGREZWYocGFyZW50OiBudW1iZXIsIGZsZElkeDogbnVtYmVyKTogRmllbGREZWY7XHJcbiAgZ2V0RmllbGREZWYoZmxkSWRPclBhcmVudDogbnVtYmVyLCBmbGRJZHg/OiBudW1iZXIpOiBGaWVsZERlZiB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSlcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRfMChmbGRJZE9yUGFyZW50KTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRfMShmbGRJZE9yUGFyZW50LCBmbGRJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhIGZpZWxkIGJ5IGl0cyBpZHhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmxkSWRcIj5pZCBvZiB0aGUgZmllbGQgPC9wYXJhbT5cclxuICBwcml2YXRlIGdldEZpZWxkXzAoZmxkSWQ6IG51bWJlcik6IEZpZWxkRGVmIHtcclxuICAgIHJldHVybiB0aGlzLkRhdGFWaWV3LmdldEZpZWxkKGZsZElkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5pdGlhbGl6ZSB0aGUgY3VycmVudCB0YXNrJ3MgZm9ybS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIEluaXRGb3JtKCkge1xyXG4gICAgaWYgKHRoaXMuRm9ybSAhPT0gbnVsbCAmJiB0aGlzLmlzT3BlbldpbigpKSB7XHJcbiAgICAgIHRoaXMuRm9ybS5JbkluaXRGb3JtID0gdHJ1ZTtcclxuICAgICAgYXdhaXQgdGhpcy5Gb3JtLmluaXQoKTtcclxuXHJcblxyXG4gICAgICB0aGlzLlNldFJlZnJlc2hUeXBlKENvbnN0YW50cy5UQVNLX1JFRlJFU0hfRk9STSk7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLlJlZnJlc2hEaXNwbGF5KCk7XHJcblxyXG4gICAgICBDb21tYW5kcy5iZWdpbkludm9rZSgpO1xyXG4gICAgICB0aGlzLkZvcm0uSW5Jbml0Rm9ybSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXN1bWUgc3ViZm9ybSBsYXlvdXRcclxuICAvLy8gPC9zdW1tYXJ5XHJcbiAgUmVzdW1lU3ViZm9ybUxheW91dCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZvcm0gIT09IG51bGwpIHtcclxuICAgICAgbGV0IHN1YkZvcm1DdHJsOiBNZ0NvbnRyb2xCYXNlID0gPE1nQ29udHJvbEJhc2U+dGhpcy5Gb3JtLmdldFN1YkZvcm1DdHJsKCk7XHJcbiAgICAgIGlmIChzdWJGb3JtQ3RybCAhPT0gbnVsbCAmJiB0aGlzLnNob3VsZFJlc3VtZVN1YmZvcm1MYXlvdXQpIHtcclxuICAgICAgICAvLyByZWZyZXNoIHRoZSB2aXNpYmxlIHByb3BlcnR5XHJcbiAgICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCBzdWJGb3JtQ3RybCwgMCxcclxuICAgICAgICAgICBIdG1sUHJvcGVydGllcy5WaXNpYmxlICwgc3ViRm9ybUN0cmwuaXNWaXNpYmxlKCkpO1xyXG5cclxuICAgICAgICB0aGlzLnNob3VsZFJlc3VtZVN1YmZvcm1MYXlvdXQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wgd2hpY2ggd2FzIGxhc3QgcGFya2VkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlcHRoXCI+dGhlIGdlbmVyYXRpb248L3BhcmFtPlxyXG4gIEdldExhc3RQYXJrZWRDdHJsTmFtZShkZXB0aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBhbmNlc3RvcjogR3VpVGFza0Jhc2UgPSA8R3VpVGFza0Jhc2U+dGhpcy5HZXRUYXNrQW5jZXN0b3IoZGVwdGgpO1xyXG4gICAgaWYgKGFuY2VzdG9yID09PSBudWxsIHx8IGFuY2VzdG9yLl9sYXN0UGFya2VkQ3RybCA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICByZXR1cm4gYW5jZXN0b3IuX2xhc3RQYXJrZWRDdHJsLk5hbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBmb3JtIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IEZvcm0gaXMgdGhlIGZvcm0gb2YgdGhlIHRhc2s8L3JldHVybnM+XHJcbiAgZ2V0Rm9ybSgpOiBNZ0Zvcm1CYXNlIHtcclxuICAgIHJldHVybiB0aGlzLkZvcm07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNldCB0YXNrJ3MgZm9ybS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gRm9ybSBpcyB0aGUgZm9ybSBvZiB0aGUgdGFzazwvcmV0dXJucz5cclxuICBTZXRGb3JtKHZhbHVlOiBNZ0Zvcm1CYXNlKTogTWdGb3JtQmFzZSB7XHJcbiAgICB0aGlzLkZvcm0gPSB2YWx1ZTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZFeGlzdFByb3AocHJvcElkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCBleGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLl9wcm9wVGFiICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQocHJvcElkKTtcclxuICAgICAgZXhpc3QgPSAocHJvcCAhPT0gbnVsbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXhpc3Q7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGEgdGFzayBwcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5JZCBvZiB0aGUgcmVxdWVzdGVkIHByb3BlcnR5XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgZ2V0UHJvcChwcm9wSWQ6IG51bWJlcik6IFByb3BlcnR5IHtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIgIT09IG51bGwpIHtcclxuICAgICAgcHJvcCA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQocHJvcElkKTtcclxuXHJcbiAgICAgIC8vIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0IHRoZW4gY3JlYXRlIGEgbmV3IHByb3BlcnR5IGFuZCBnaXZlIGl0IHRoZSBkZWZhdWx0IHZhbHVlXHJcbiAgICAgIC8vIGluIGFkZGl0aW9uIGFkZCB0aGlzIHByb3BlcnR5IHRvIHRoZSBwcm9wZXJ0aWVzIHRhYmxlXHJcbiAgICAgIGlmIChwcm9wID09PSBudWxsKSB7XHJcbiAgICAgICAgcHJvcCA9IFByb3BlcnR5LmdldERlZmF1bHRQcm9wKHByb3BJZCwgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX1RBU0ssIHRoaXMpO1xyXG4gICAgICAgIGlmIChwcm9wICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBwcm9wLlN0dWRpb1ZhbHVlID0gcHJvcC5nZXRPcmdWYWx1ZSgpO1xyXG4gICAgICAgICAgdGhpcy5fcHJvcFRhYi5hZGRQcm9wKHByb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3A7XHJcbiAgfVxyXG5cclxuICBHZXRDb21wdXRlZFByb3BlcnR5KHByb3BJZDogbnVtYmVyKTogUHJvcGVydHkge1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5ID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5fcHJvcFRhYiAhPT0gbnVsbClcclxuICAgICAgcHJvcCA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQocHJvcElkKTtcclxuICAgIHJldHVybiBwcm9wO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgY29tcG9uZW50IGlkeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Q29tcElkeCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbXBJZHg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgdGhpcyBpcyBmaXJzdCByZWZyZXNoXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIElzRmlyc3RSZWZyZXNoT2ZQcm9wcygpOiBib29sZWFuIHtcclxuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBFdmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIElELlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhwSWRcIj5FeHAgSUQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1R5cGVcIj5leHBlY3RlZCByZXR1cm4gdHlwZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGVuZ3RoXCI+RXhwZWN0ZWQgbGVuIC0gaXMgbm90IHVzZWQsIGl0IG11c3QgYmUgaGVyZSBiZWNhdXNlIG9mIGNvbXB1dGFiaWxpdHkgd2l0aCBSaWNoIENsaWVudDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udGVudFR5cGVVbmljb2RlXCI+c2hvdWxkIHRoZSByZXN1bHQgYmUgdW5pY29kZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzQ2VsbFR5cGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImFsd2F5c0V2YWx1YXRlXCI+Zm9yIGZvcm0gcHJvcGVydGllcyBhbmQgc29tZSBjb250cm9sIHByb3BlcnRpZXMgd2UgYWx3YXlzIGV2YWx1YXRlIGV4cHJlc3Npb25zPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ3YXNFdmFsdWF0ZWRcIj5pbmRpY2F0ZXMgd2hldGhlciB0aGUgZXhwcmVzc2lvbiB3YXMgZXZhbHVhdGVkPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+ZXZhbHVhdGVkIHZhbHVlPC9yZXR1cm5zPlxyXG4gIGFzeW5jIEV2YWx1YXRlRXhwcmVzc2lvbihleHBJZDogbnVtYmVyLCByZXNUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCBsZW5ndGg6IG51bWJlciwgY29udGVudFR5cGVVbmljb2RlOiBib29sZWFuLCByZXNDZWxsVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgYWx3YXlzRXZhbHVhdGU6IGJvb2xlYW4sIHdhc0V2YWx1YXRlZDogUmVmUGFyYW08Ym9vbGVhbj4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcclxuICAgIHdhc0V2YWx1YXRlZC52YWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChhbHdheXNFdmFsdWF0ZSB8fCB0aGlzLkRhdGFWaWV3V2FzUmV0cmlldmVkKSB7XHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuQ2FsY3VsYXRlRXhwcmVzc2lvbihleHBJZCwgcmVzVHlwZSwgbGVuZ3RoKTtcclxuICAgICAgd2FzRXZhbHVhdGVkLnZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBHZXRFeHByZXNzaW9uU3RvcmFnZShleHBJZDogbnVtYmVyKTogU3RvcmFnZUF0dHJpYnV0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5HZXRFeHByZXNzaW9uU3RvcmFnZShleHBJZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENhbGN1bGF0ZSBleHByZXNpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImV4cElkXCI+VGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1R5cGVcIj5UaGUgZXhwZWN0ZWQgcmVzdWx0IHR5cGUuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZW5ndGhcIj5UaGUgZXhwZWN0ZWQgbGVuZ3RoIG9mIHRoZSByZXN1bHQuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250ZW50VHlwZVVuaWNvZGVcIj5EZW5vdGVzIHdoZXRoZXIgdGhlIHJlc3VsdCBpcyBleHBlY3RlZCB0byBiZSBhIHVuaWNvZGUgc3RyaW5nLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzQ2VsbFR5cGVcIj5Ob3QgdXNlZC48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYXN5bmMgQ2FsY3VsYXRlRXhwcmVzc2lvbihleHBJZDogbnVtYmVyLCByZXNUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCBsZW5ndGg6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPntcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNyZWF0ZXMgYSBtZ2Zvcm0gb2JqZWN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGFic3RyYWN0IENvbnN0cnVjdE1nRm9ybShhbHJlYWR5U2V0UGFyZW50Rm9ybTogUmVmUGFyYW08Ym9vbGVhbj4pOiBNZ0Zvcm1CYXNlIDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiB0aGUgdGFzayBpcyBzdGFydGVkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc1N0YXJ0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0ZWxscyB3aGV0aGVyIHRoZSB0YXNrIGlzIGFib3J0aW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc0Fib3J0aW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgYW5jZXN0b3Igb2YgdGhlIEd1aVRhc2tCYXNlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImdlbmVyYXRpb25cIj5vZiB0aGUgYW5jZXN0b3IgdGFzazwvcGFyYW0+XHJcbiAgYWJzdHJhY3QgR2V0VGFza0FuY2VzdG9yKGdlbmVyYXRpb246IG51bWJlcik6IElUYXNrO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCB0aGUgY29udGV4dCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGFic3RyYWN0IEdldENvbnRleHRUYXNrKCk6IElUYXNrO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybnMgdGFzayBkZXB0aFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBhYnN0cmFjdCBHZXRUYXNrRGVwdGgoKTogbnVtYmVyO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlZnJlc2ggdGhlIGRpc3BsYXksIHBhaW50IHRoZSBjb250cm9scyBhbmQgdGhlaXIgcHJvcGVydGllcyBhZ2FpbiA8L3N1bW1hcnk+XHJcbiAgYWJzdHJhY3QgUmVmcmVzaERpc3BsYXkoKTogdm9pZCA7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gZ2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkLiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmllbGREZWZcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc051bGxcIj48L3BhcmFtPlxyXG4gIC8vIFRPRE8gc2FkaGFuIHJlbW92ZSB1bnVzZWRcclxuICAvLyBhYnN0cmFjdCBhc3luYyBnZXRGaWVsZFZhbHVlKGZpZWxkRGVmOiBGaWVsZERlZiwgdmFsdWU6IFJlZlBhcmFtPHN0cmluZz4sIGlzTnVsbDogUmVmUGFyYW08Ym9vbGVhbj4pOiBQcm9taXNlPHZvaWQ+IDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBnZXQgdGhlIGRpc3BsYXkgdmFsdWUgb2YgYSBmaWVsZC4gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZpZWxkRGVmXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNOdWxsXCI+PC9wYXJhbT5cclxuICBhYnN0cmFjdCBnZXRGaWVsZERpc3BsYXlWYWx1ZShmaWVsZERlZjogRmllbGREZWYsIHZhbHVlOiBSZWZQYXJhbTxzdHJpbmc+LCBpc051bGw6IFJlZlBhcmFtPGJvb2xlYW4+KTogdm9pZCA7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gdXBkYXRlcyB0aGUgZmllbGQncyB2YWx1ZSBhbmQgc3RhcnRzIHJlY29tcHV0ZS4gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZpZWxkRGVmXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNOdWxsXCI+PC9wYXJhbT5cclxuICBhYnN0cmFjdCBVcGRhdGVGaWVsZFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUoZmllbGREZWY6IEZpZWxkRGVmLCB2YWx1ZTogc3RyaW5nLCBpc051bGw6IGJvb2xlYW4pOiB2b2lkIDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldCBhIGZpZWxkIGZyb20gdGhlIHRhc2sudHJhdmVsIGJ5IHBhcmVudHMgKGkuZS4gTk9UIGJ5IHRyaWdnZXJpbmcgdGFza3MpLjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudFwiPmdlbmVyYXRpb24gbnVtYmVyICgwIGlzIGN1cnJlbnQgdGFzayk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmxkSWR4XCI+dGhlIGZpZWxkIGluZGV4IHdpdGhpbiBpdHMgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgaWQgb2YgdGhlIGZpZWxkIGRlc2NyaWJlZCBieSBwYXJlbnQgKyBpZHg8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRGaWVsZF8xKHBhcmVudDogbnVtYmVyLCBmbGRJZHg6IG51bWJlcik6IEZpZWxkRGVmIHtcclxuXHJcbiAgICBzd2l0Y2ggKHBhcmVudCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGREZWYoZmxkSWR4KTtcclxuXHJcbiAgICAgIGNhc2UgR3VpVGFza0Jhc2UuTUFJTl9QUkdfUEFSRU5UX0lEOlxyXG4gICAgICAgIC8vIGZpbmQgdGhlIG1haW4gcHJvZ3JhbSB1c2luZyB0aGUgY29tcG9uZW50IGlkIChjdGwgaWR4KVxyXG4gICAgICAgIGxldCBjb21wTWFpblByb2c6IEd1aVRhc2tCYXNlID0gPEd1aVRhc2tCYXNlPiBHdWlEYXRhQ29sbGVjdGlvbi5NR0RhdGFUYWJsZS5HZXRNYWluUHJvZ0J5Q3RsSWR4KHRoaXMuQ29udGV4dElELCB0aGlzLl9jdGxJZHgpO1xyXG4gICAgICAgIHJldHVybiBjb21wTWFpblByb2cuZ2V0RmllbGREZWYoZmxkSWR4KTtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcGFyZW50LS07XHJcbiAgICAgICAgaWYgKHRoaXMuU3R1ZGlvUGFyZW50VGFzayAhPSBudWxsKVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuU3R1ZGlvUGFyZW50VGFzay5nZXRGaWVsZERlZihwYXJlbnQsIGZsZElkeCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSB0YXNrIGF0dHJpYnV0ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGZpbGxBdHRyaWJ1dGVzKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihYTUxDb25zdGFudHMuTUdfVEFHX1RBU0spICsgWE1MQ29uc3RhbnRzLk1HX1RBR19UQVNLLmxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcblxyXG4gICAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgdG9rZW5zLmxlbmd0aDsgaiA9IGogKyAyKSB7XHJcbiAgICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gdG9rZW5zLmdldF9JdGVtKGopO1xyXG4gICAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gdG9rZW5zLmdldF9JdGVtKGogKyAxKTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWVTdHIpICYmIEV2ZW50cy5TaG91bGRMb2coTG9nZ2VyX0xvZ0xldmVscy5EZXZlbG9wbWVudCkpXHJcbiAgICAgICAgICBFdmVudHMuV3JpdGVEZXZUb0xvZyhOU3RyaW5nLkZvcm1hdChcIkluIFRhc2tCYXNlLmZpbGxBdHRyaWJ1dGVzKCk6IFVucHJvY2Vzc2VkKCEpIGF0dHJpYnV0ZTogJ3swfScgPSAnezF9J1wiLCBhdHRyaWJ1dGUsIHZhbHVlU3RyKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTsgLy8gdG8gZGVsZXRlIFwiPlwiIHRvb1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgdGFzayBhdHRyaWJ1dGVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlOiBzdHJpbmcsIHZhbHVlU3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1RhZ1Byb2Nlc3NlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9BUFBMX0dVSUQ6XHJcbiAgICAgICAgdGhpcy5BcHBsaWNhdGlvbkd1aWQgPSB2YWx1ZVN0cjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfUFJPR1JBTV9JU046XHJcbiAgICAgICAgdGhpcy5Qcm9ncmFtSXNuID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1RBU0tfSVNOOlxyXG4gICAgICAgIHRoaXMuVGFza0lzbiA9IE5OdW1iZXIuUGFyc2UodmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9UT09MS0lUX1BBUkVOVF9UQVNLOlxyXG4gICAgICAgIGlmIChOTnVtYmVyLlBhcnNlKHZhbHVlU3RyKSAhPT0gMClcclxuICAgICAgICAgIHRoaXMuU3R1ZGlvUGFyZW50VGFzayA9IDxHdWlUYXNrQmFzZT5HdWlEYXRhQ29sbGVjdGlvbi5NR0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh2YWx1ZVN0cik7XHJcblxyXG4gICAgICAgIHRoaXMuSXNTdWJ0YXNrID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVEFTS0lEOlxyXG4gICAgICAgIHRoaXMuc2V0VGFza0lkKHZhbHVlU3RyKTtcclxuICAgICAgICBpZiAoRXZlbnRzLlNob3VsZExvZyhMb2dnZXJfTG9nTGV2ZWxzLkRldmVsb3BtZW50KSlcclxuICAgICAgICAgIEV2ZW50cy5Xcml0ZURldlRvTG9nKFwiVEFTSzogXCIgKyB0aGlzLl90YXNrVGFnKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfQ1RMX0lEWDpcclxuICAgICAgICB0aGlzLnNldEN0bEFuZENvbXBJZHgodmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9NQUlOUFJHOlxyXG4gICAgICAgIHRoaXMuc2V0TWFpblByZyh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX05VTExfQVJJVEhNRVRJQzpcclxuICAgICAgICB0aGlzLnNldE51bGxBcml0aG1ldGljKHZhbHVlU3RyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfSU5URVJBQ1RJVkU6XHJcbiAgICAgICAgdGhpcy5zZXRJc0ludGVyYWNpdmUodmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9PUEVOX1dJTjpcclxuICAgICAgICB0aGlzLnNldE9wZW5XaW4odmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9BTExPV19FVkVOVFM6XHJcbiAgICAgICAgdGhpcy5TZXRBbGxvd0V2ZW50cyh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0lTUFJHOlxyXG4gICAgICAgIHRoaXMuc2V0SXNQcmcodmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9JQ09OX0ZJTEVfTkFNRTpcclxuICAgICAgICB0aGlzLkljb25GaWxlTmFtZSA9IHZhbHVlU3RyO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfUEFSQUxMRUw6XHJcbiAgICAgICAgdGhpcy5Jc1BhcmFsbGVsID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9ST1VURVJfUEFUSDpcclxuICAgICAgICBpZiAodmFsdWVTdHIudHJpbSgpICE9IFwiXCIpXHJcbiAgICAgICAgICB0aGlzLnJvdXRlclBhdGggPSB2YWx1ZVN0cjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfSU5fREVGQVVMVF9ST1VURVJfT1VUTEVUOlxyXG4gICAgICAgIHRoaXMuaW5EZWZhdWx0Um91dGVyT3V0bGV0ID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBpc1RhZ1Byb2Nlc3NlZCA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc1RhZ1Byb2Nlc3NlZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5pdCBkYXRhIGZvciBmb3JtIGFuZCByZXR1cm4gdGhlIGZvcm1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvdW5kVGFnTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicGFyZW50Rm9ybVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBGb3JtSW5pdERhdGEocGFyZW50Rm9ybTogTWdGb3JtQmFzZSk6IE1nRm9ybUJhc2Uge1xyXG4gICAgbGV0IGFscmVhZHlTZXRQYXJlbnRGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgcmVmQWxyZWFkeVNldFBhcmVudEZvcm06IFJlZlBhcmFtPGJvb2xlYW4+ID0gbmV3IFJlZlBhcmFtKGFscmVhZHlTZXRQYXJlbnRGb3JtKTtcclxuXHJcbiAgICBpZiAodGhpcy5Gb3JtID09PSBudWxsKVxyXG4gICAgICB0aGlzLkZvcm0gPSB0aGlzLkNvbnN0cnVjdE1nRm9ybShyZWZBbHJlYWR5U2V0UGFyZW50Rm9ybSk7XHJcblxyXG4gICAgaWYgKCFhbHJlYWR5U2V0UGFyZW50Rm9ybSlcclxuICAgICAgdGhpcy5Gb3JtLlBhcmVudEZvcm0gPSBwYXJlbnRGb3JtO1xyXG5cclxuICAgIGlmIChFdmVudHMuU2hvdWxkTG9nKExvZ2dlcl9Mb2dMZXZlbHMuRGV2ZWxvcG1lbnQpKVxyXG4gICAgICBFdmVudHMuV3JpdGVEZXZUb0xvZyhcImZvcm1cIik7XHJcblxyXG4gICAgdGhpcy5Gb3JtLmZpbGxEYXRhKHRoaXMpO1xyXG4gICAgcmV0dXJuIHRoaXMuRm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGFzayBpZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0VGFza0lkKHZhbHVlU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Rhc2tUYWcgPSB2YWx1ZVN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgY3RsSWR4ICYgY29tcElkeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzZXRDdGxBbmRDb21wSWR4KHZhbHVlU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXIgPSB2YWx1ZVN0ci5pbmRleE9mKFwiLFwiKTtcclxuICAgIGlmIChpID4gLTEpIHtcclxuICAgICAgdGhpcy5fY3RsSWR4ID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0ci5zdWJzdHIoMCwgaSkpO1xyXG4gICAgICB0aGlzLl9jb21wSWR4ID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0ci5zdWJzdHIoaSArIDEpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0IGFuY2VzdG9yIHRhc2sgY29udGFpbmluZyBmb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+R3VpVGFza0Jhc2U8L3JldHVybnM+XHJcbiAgR2V0QW5jZXN0b3JUYXNrQ29udGFpbmluZ0Zvcm0oKTogR3VpVGFza0Jhc2Uge1xyXG4gICAgbGV0IHBhcmVudFRhc2s6IEd1aVRhc2tCYXNlID0gPEd1aVRhc2tCYXNlPnRoaXMuR2V0VGFza0FuY2VzdG9yKDEpO1xyXG4gICAgd2hpbGUgKHBhcmVudFRhc2sgIT09IG51bGwgJiYgcGFyZW50VGFzay5nZXRGb3JtKCkgPT09IG51bGwpIHtcclxuICAgICAgcGFyZW50VGFzayA9IDxHdWlUYXNrQmFzZT5wYXJlbnRUYXNrLkdldFRhc2tBbmNlc3RvcigxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGFyZW50VGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2V0IGlzTWFpblByZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgc2V0TWFpblByZyh2YWx1ZVN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pc01haW5QcmcgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldCBudWxsQXJpdGhtZXRpY1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgc2V0TnVsbEFyaXRobWV0aWModmFsdWVTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fbnVsbEFyaXRobWV0aWMgPSB2YWx1ZVN0ci5jaGFyQXQoMCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldCBpc0ludGVyYWN0aXZlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzZXRJc0ludGVyYWNpdmUodmFsdWVTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5Jc0ludGVyYWN0aXZlID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgb3BlbldpblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgc2V0T3Blbldpbih2YWx1ZVN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vcGVuV2luID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgb3BlbldpblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj48L3BhcmFtPlxyXG4gIFNldE9wZW5XaW4odmFsdWVib29sOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vcGVuV2luID0gdmFsdWVib29sO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgQWxsb3dFdmVudHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlU3RyXCI+PC9wYXJhbT5cclxuICBTZXRBbGxvd0V2ZW50cyh2YWx1ZVN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hbGxvd0V2ZW50cyA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2V0IGlzUHJnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzZXRJc1ByZyh2YWx1ZVN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pc1ByZyA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICB9XHJcblxyXG4gIFNob3VsZEV2YWx1YXRlUHJvcGVydHlMb2NhbGx5KHByb3BJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBHZXRUYXNrRGV0YWlscygpOiBzdHJpbmc7XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFNldHMgdGhlIG1lc3NhZ2Ugb24gdGhlIG1lc3NhZ2UgcGFuZSBvZiBzdGF0dXMgYmFyLjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtc2dcIj5tZXNzYWdlIHRvIGJlIHNob3duPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzb3VuZEJlZXBcIj50byBiZWVwIG9yIG5vdDwvcGFyYW0+XHJcbiAgV3JpdGVUb01lc3NhZ2VQYW5lKG1zZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBTdG9yeSAxNDkzMTYgOiBzZW5kIG1lc3NhZ2UgdG8gY29uc29sZVxyXG4gICAgaWYgKG1zZyAhPSBudWxsKVxyXG4gICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB3cml0ZSBhIG1lc3NhZ2UgdG8gc3RhdHVzIGJhclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtc2dJZFwiPmlkIG9mIG1lc3NhZ2UgdG8gYmUgd3JpdHRlbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic291bmRCZWVwXCI+PC9wYXJhbT5cclxuICBXcml0ZVRvTWVzc2FnZVBhbmVieU1zZ0lkKG1zZ0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBtc2c6IHN0cmluZyA9IEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKG1zZ0lkKTtcclxuICAgIHRoaXMuV3JpdGVUb01lc3NhZ2VQYW5lKG1zZyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSU1HRGF0YVRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9tYW5hZ2VtZW50L3Rhc2tzL0lNR0RhdGFUYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJVGFza30gZnJvbSBcIi4vSVRhc2tcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1HRGF0YVRhYmxlIHtcclxuICBjdXJyTWdkSUQ6IG51bWJlcjtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnNlYXJjaGVzIGFsbCB0aGUgTUdEYXRhIG9iamVjdHMgdGlsbCBpdCBmaW5kcyB0aGUgdGFzayB3aXRoIHRoZSBnaXZlbiBpZDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkXCI+dGhlIGlkIG9mIHRoZSByZXF1ZXN0ZWQgdGFzazwvcGFyYW0+XHJcbiAgR2V0VGFza0J5SUQoaWQ6IHN0cmluZyk6IElUYXNrO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+cmV0dXJucyBtYWluIHByb2dyYW0gZm9yIGdpdmVuIGN0bCBpbmRleDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250ZXh0SURcIj5hY3RpdmUvdGFyZ2V0IGNvbnRleHQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN0bElkeFwiPmN0bCBpbmRleDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRNYWluUHJvZ0J5Q3RsSWR4KGNvbnRleHRJRDogbnVtYmVyLCBjdGxJZHg6IG51bWJlcik6IElUYXNrO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBpZCBvZiBhIHRhc2sgYWNjb3JkaW5nIHRvIGl0cyBvcmlnaW5hbCBpZFxyXG4gIC8vLyAgIGl0IHdpbGwgdXN1YWxseSByZXR1cm4gdGhlIHNhbWUgaWQgYXMgc2VudCB0byBpdCwgYnV0IGZvciBzdWJmb3JtIGFmdGVyIGVycm9yIGFuZCByZXRyeSBpdCB3aWxsXHJcbiAgLy8vICAgY29udmVydCB0aGUgb3JpZ2luYWwgaWQgdG8gdGhlIGN1cnJlbnQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tJZFwiPi0gb3JpZ2luYWwgdGFzayBpZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgY3VycmVudCB0YXNraWQgZm9yIHRoaXMgdGFzazwvcmV0dXJucz5cclxuICBnZXRUYXNrSWRCeUlkKHRhc2tJZDogc3RyaW5nKTogc3RyaW5nO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHNpemUgb2YgTUdEYXRhIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHNpemUgb2YgdGFibGU8L3JldHVybnM+XHJcbiAgZ2V0U2l6ZSgpOiBudW1iZXI7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzdGFydCB0aGUgdGFza3MgaXRlcmF0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXJ0VGFza3NJdGVyYXRpb24oKTogdm9pZDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgbmV4dCB0YXNrIHVzaW5nIHRoZSB0YXNrcyBpdGVyYXRvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TmV4dFRhc2soKTogSVRhc2s7XHJcbn1cclxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvdGFza3MvSVRhc2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8c3VtbWFyeT5cclxuLy8vIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgYnkgdGhlIEdVSSBuYW1lc3BhY2UgZnJvbSB0aGUgR3VpVGFza0Jhc2UgY2xhc3MuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRhc2sge1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIGNvbXBvbmVudCBpZHhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldENvbXBJZHgoKTogbnVtYmVyO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRhc2sgaWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFRhc2tUYWcoKTogc3RyaW5nO1xyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgc2NoZW1lIGZvciBudWxsIGFyaXRobWV0aWNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldE51bGxBcml0aG1ldGljKCk6IHN0cmluZztcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgdGFzayBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRNb2RlKCk6IHN0cmluZztcclxufVxyXG4iXX0=