@magic-xpa/gui 4.800.0-dev480.21 → 4.800.0-dev480.210

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 (105) hide show
  1. package/bundles/magic-xpa-gui.umd.js +1050 -7528
  2. package/bundles/magic-xpa-gui.umd.js.map +1 -1
  3. package/bundles/magic-xpa-gui.umd.min.js +1 -1
  4. package/bundles/magic-xpa-gui.umd.min.js.map +1 -1
  5. package/esm2015/index.js +1 -1
  6. package/esm2015/magic-xpa-gui.js +1 -4
  7. package/esm2015/src/Commands.js +11 -114
  8. package/esm2015/src/Events.js +1 -517
  9. package/esm2015/src/EventsProcessor.js +1 -51
  10. package/esm2015/src/FocusManager.js +1 -13
  11. package/esm2015/src/GuiConstants.js +2 -11
  12. package/esm2015/src/GuiEnums.js +126 -130
  13. package/esm2015/src/GuiEnvironment.js +1 -1
  14. package/esm2015/src/IFlowMonitorQueue.js +1 -1
  15. package/esm2015/src/Manager.js +10 -148
  16. package/esm2015/src/UIBridge.js +1 -6
  17. package/esm2015/src/env/IEnvironment.js +1 -1
  18. package/esm2015/src/gui/ControlBase.js +1 -1
  19. package/esm2015/src/gui/GuiMgControl.js +1 -94
  20. package/esm2015/src/gui/GuiMgForm.js +1 -1
  21. package/esm2015/src/gui/KeyboardItem.js +5 -46
  22. package/esm2015/src/gui/LastFocusedVal.js +1 -5
  23. package/esm2015/src/gui/MgValue.js +1 -1
  24. package/esm2015/src/gui/PropParentInterface.js +1 -1
  25. package/esm2015/src/gui/low/DialogHandler.js +1 -10
  26. package/esm2015/src/gui/low/GuiCommand.js +1 -12
  27. package/esm2015/src/gui/low/GuiCommandQueue.js +1 -66
  28. package/esm2015/src/gui/low/GuiInteractive.js +8 -465
  29. package/esm2015/src/gui/low/Style.js +1 -9
  30. package/esm2015/src/management/RuntimeContextBase.js +11 -14
  31. package/esm2015/src/management/data/BlobType.js +0 -0
  32. package/esm2015/src/management/data/DcValues.js +8 -67
  33. package/esm2015/src/management/data/DcValuesBuilderBase.js +2 -37
  34. package/esm2015/src/management/data/FieldDef.js +1 -95
  35. package/esm2015/src/management/data/FieldsTable.js +2 -28
  36. package/esm2015/src/management/data/GuiDataViewBase.js +33 -72
  37. package/esm2015/src/management/data/GuiFieldBase.js +4 -39
  38. package/esm2015/src/management/data/IRecord.js +1 -1
  39. package/esm2015/src/management/data/IReferencedObject.js +1 -8
  40. package/esm2015/src/management/data/NUM_TYPE.js +14 -485
  41. package/esm2015/src/management/data/ObjectReferenceBase.js +1 -3
  42. package/esm2015/src/management/data/ObjectReferencesCollection.js +1 -2
  43. package/esm2015/src/management/data/RecordUtils.js +6 -112
  44. package/esm2015/src/management/data/VectorType.js +17 -252
  45. package/esm2015/src/management/data/VectorTypeBase.js +1 -35
  46. package/esm2015/src/management/events/IActionManager.js +1 -1
  47. package/esm2015/src/management/events/IGuiEventsManager.js +1 -1
  48. package/esm2015/src/management/exp/ExpressionInterface.js +5 -3
  49. package/esm2015/src/management/exp/GuiExpressionEvaluator.js +38 -155
  50. package/esm2015/src/management/gui/ControlTable.js +18 -72
  51. package/esm2015/src/management/gui/DisplayConvertor.js +43 -493
  52. package/esm2015/src/management/gui/FieldValidator.js +58 -339
  53. package/esm2015/src/management/gui/GuiControlPropertyAdapter.js +1 -1
  54. package/esm2015/src/management/gui/GuiFormPropertyAdapter.js +1 -8
  55. package/esm2015/src/management/gui/HebrewDate.js +3 -140
  56. package/esm2015/src/management/gui/Helps.js +2 -48
  57. package/esm2015/src/management/gui/MgControlBase.js +143 -876
  58. package/esm2015/src/management/gui/MgFormBase.js +68 -407
  59. package/esm2015/src/management/gui/PIC.js +58 -285
  60. package/esm2015/src/management/gui/PropDefaults.js +13 -48
  61. package/esm2015/src/management/gui/PropInterface.js +2 -4
  62. package/esm2015/src/management/gui/PropTable.js +72 -183
  63. package/esm2015/src/management/gui/Property.js +35 -372
  64. package/esm2015/src/management/gui/ValidationDetails.js +10 -52
  65. package/esm2015/src/management/gui/ValidationDetailsBase.js +12 -45
  66. package/esm2015/src/management/gui/WrongFormatException.js +1 -15
  67. package/esm2015/src/management/tasks/GuiDataCollection.js +1 -1
  68. package/esm2015/src/management/tasks/GuiTaskBase.js +38 -383
  69. package/esm2015/src/management/tasks/IMGDataTable.js +1 -1
  70. package/esm2015/src/management/tasks/ITask.js +1 -1
  71. package/esm2015/src/management/tasks/MgTimer.js +1 -16
  72. package/esm2015/src/management/tasks/TaskDefinitionId.js +8 -18
  73. package/esm2015/src/management/tasks/TaskDefinitionIdTableSaxHandler.js +1 -13
  74. package/esm2015/src/util/AuthenticationDialogHandler.js +1 -4
  75. package/esm2015/src/util/MemoryUtil.js +1 -41
  76. package/esm2015/src/util/ObjectReference.js +1 -8
  77. package/esm2015/src/util/ProcessLauncher.js +3 -21
  78. package/esm2015/src/util/UsernamePasswordCredentials.js +1 -9
  79. package/fesm2015/magic-xpa-gui.js +857 -7052
  80. package/fesm2015/magic-xpa-gui.js.map +1 -1
  81. package/magic-xpa-gui.d.ts +0 -3
  82. package/package.json +2 -2
  83. package/src/Commands.d.ts +2 -0
  84. package/src/Events.d.ts +0 -2
  85. package/src/GuiEnums.d.ts +125 -128
  86. package/src/env/IEnvironment.d.ts +3 -0
  87. package/src/gui/PropParentInterface.d.ts +1 -1
  88. package/src/gui/low/GuiInteractive.d.ts +3 -1
  89. package/src/gui/low/Style.d.ts +0 -3
  90. package/src/management/RuntimeContextBase.d.ts +2 -0
  91. package/src/management/data/GuiDataViewBase.d.ts +4 -4
  92. package/src/management/data/IRecord.d.ts +1 -1
  93. package/src/management/exp/ExpressionInterface.d.ts +4 -0
  94. package/src/management/exp/GuiExpressionEvaluator.d.ts +4 -6
  95. package/src/management/gui/ControlTable.d.ts +1 -1
  96. package/src/management/gui/DisplayConvertor.d.ts +1 -1
  97. package/src/management/gui/GuiControlPropertyAdapter.d.ts +1 -1
  98. package/src/management/gui/MgControlBase.d.ts +7 -7
  99. package/src/management/gui/MgFormBase.d.ts +6 -6
  100. package/src/management/gui/PIC.d.ts +1 -0
  101. package/src/management/gui/PropInterface.d.ts +2 -4
  102. package/src/management/gui/PropTable.d.ts +4 -5
  103. package/src/management/gui/Property.d.ts +1 -1
  104. package/src/management/tasks/GuiTaskBase.d.ts +8 -14
  105. package/src/management/tasks/TaskDefinitionId.d.ts +1 -0
@@ -1,7 +1,4 @@
1
1
  import { __awaiter } from "tslib";
2
- /// <summary>
3
- /// MgGui.dll's manager - assembly level properties and methods.
4
- /// </summary>
5
2
  import { NString, StackFrame } from "@magic-xpa/mscorelib";
6
3
  import { UtilImeJpn, UtilStrByteMode } from "@magic-xpa/utils";
7
4
  import { GuiMgControl } from "./gui/GuiMgControl";
@@ -12,46 +9,23 @@ import { GuiMgForm } from "./gui/GuiMgForm";
12
9
  import { PropInterface } from "./management/gui/PropInterface";
13
10
  import { GuiEnvironment } from "./GuiEnvironment";
14
11
  export class Manager {
15
- /// <summary>(public)
16
- /// Set the context ID for a current thread
17
- /// </summary>
18
- /// <param name="contextID"></param>
19
12
  static SetCurrentContextID(contextID) {
20
13
  Manager._currentContextID = contextID;
21
14
  }
22
- /// <summary>
23
- /// Get the context ID for a current thread
24
- /// </summary>
25
- /// <returns>current thread's contextID</returns>
26
15
  static GetCurrentContextID() {
27
16
  return Manager._currentContextID;
28
17
  }
29
- /// <summary>
30
- /// get object that is used for execution and interrupting delay command.
31
- /// </summary>
32
- /// <returns></returns>
33
18
  static GetDelayWait() {
34
19
  return Manager._delayWait;
35
20
  }
36
- /// <summary>
37
- /// check if dot net control can be focused
38
- /// </summary>
39
- /// <param name = "guiMgControl"></param>
40
- /// <returns></returns>
41
21
  static CanFocus(guiMgControl) {
42
22
  return false;
43
23
  }
44
24
  static Init(startupImageFileName) {
45
25
  return;
46
26
  }
47
- /// <summary>
48
- /// close the task
49
- /// </summary>
50
- /// <param name = "form"> </param>
51
- /// <param name="mainPrgTask"></param>
52
27
  static Abort(form, mainPrgTask) {
53
28
  if (form.getSubFormCtrl() === null && form.Opened) {
54
- // if the closing form is 'opened as a modal' then decrement the modal count on its frame window.
55
29
  if (form.isDialog()) {
56
30
  this.IsOverlayOpen = false;
57
31
  let topMostFrameForm = form.getTopMostFrameForm();
@@ -62,26 +36,12 @@ export class Manager {
62
36
  Commands.beginInvoke();
63
37
  }
64
38
  }
65
- /// <summary>
66
- /// returns the current value of the control
67
- /// </summary>
68
- /// <param name = "ctrl">control to get value </param>
69
- /// <returns> value of the control </returns>
70
39
  static GetCtrlVal(ctrl) {
71
- // QCR #745117: Make sure that if the contents of a control were changed
72
- // then the changes are applied before examining its value.
73
40
  return Commands.getValue(ctrl, ctrl.getDisplayLine(true));
74
41
  }
75
- /// <summary>
76
- /// Set read only for controls
77
- /// </summary>
78
- /// <param name = "ctrl">the control to change its property </param>
79
- /// <param name = "isReadOnly">boolean </param>
80
42
  static SetReadOnlyControl(ctrl, isReadOnly) {
81
43
  return __awaiter(this, void 0, void 0, function* () {
82
- if (ctrl.isTextControl() || ctrl.IsRepeatable) // Defect 131802: Set ReadOnly for Rich Text control in Table Header and defect 131704: in general for Rich Text.
83
- {
84
- // JPN: IME support (enable IME in query mode)
44
+ if (ctrl.isTextControl() || ctrl.IsRepeatable) {
85
45
  if (UtilStrByteMode.isLocaleDefLangDBCS()) {
86
46
  if (yield ctrl.getForm().getTask().checkProp(PropInterface.PROP_TYPE_ALLOW_LOCATE_IN_QUERY, false))
87
47
  return;
@@ -91,13 +51,9 @@ export class Manager {
91
51
  }
92
52
  });
93
53
  }
94
- /// <summary> Open the form. </summary>
95
- /// <param name="mgForm">form to be opened.</param>
96
54
  static OpenForm(mgForm) {
97
- // non interactive can choose not to open the window.
98
55
  if (!mgForm.Opened && (mgForm.getTask().IsInteractive || mgForm.getTask().isOpenWin())) {
99
56
  if (!mgForm.isSubForm()) {
100
- // if the form is to be opened as a modal, then increment the modal count on its frame window.
101
57
  if (mgForm.isDialog()) {
102
58
  this.IsOverlayOpen = true;
103
59
  let topMostFrameForm = mgForm.getTopMostFrameForm();
@@ -105,21 +61,10 @@ export class Manager {
105
61
  topMostFrameForm.UpdateModalFormsCount(mgForm, true);
106
62
  }
107
63
  }
108
- // if (!mgForm.isSubForm()) {
109
- // let formName: string = mgForm.UniqueName;
110
- // UIBridge.getInstance().OpenForm(formName);
111
- // }
112
- // else {
113
- // let inputControls = mgForm.GetListOfInputControls();
114
- // //
115
- // // JSBridge.Instance.OpenSubForm(this.getSubFormCtrl().getName(), ParentForm.getTask().getTaskTag(), getProp(PropInterface.PROP_TYPE_FORM_NAME).getValue(), _task.getTaskTag(), inputControls);
116
- // // }
117
- // }
118
64
  mgForm.Opened = true;
119
65
  Commands.beginInvoke();
120
66
  }
121
67
  }
122
- /// <summary> Performs first refresh for the table control </summary>
123
68
  static DoFirstRefreshTable(mgForm) {
124
69
  return __awaiter(this, void 0, void 0, function* () {
125
70
  if (mgForm !== null && !mgForm.ignoreFirstRefreshTable) {
@@ -128,20 +73,12 @@ export class Manager {
128
73
  }
129
74
  });
130
75
  }
131
- /// <summary>
132
- /// retrieve the location of the caret, within the currently selected text
133
- /// </summary>
134
- /// <param name = "ctrl">the control which is assumed to contain the selected text </param>
135
76
  static CaretPosGet(ctrl) {
136
77
  let caretPos = 0;
137
78
  if (ctrl.isTextControl())
138
79
  caretPos = Commands.caretPosGet(ctrl, ctrl.getDisplayLine(true));
139
80
  return caretPos;
140
81
  }
141
- /// <summary>
142
- /// Clear the status bar depending on the control specific status message or form specific status message
143
- /// </summary>
144
- /// <param name="task">task</param>
145
82
  static ClearStatusBar(task) {
146
83
  let currentParkedControl = task.getLastParkedCtrl();
147
84
  if (currentParkedControl !== null && !NString.IsNullOrEmpty(currentParkedControl.PromptHelp))
@@ -149,18 +86,9 @@ export class Manager {
149
86
  else
150
87
  Manager.CleanMessagePane(task);
151
88
  }
152
- /// <summary>
153
- /// clean the status bar
154
- /// </summary>
155
- /// <param name = "task"></param>
156
89
  static CleanMessagePane(task) {
157
90
  task.WriteToMessagePane(Manager.GetCurrentRuntimeContext().DefaultStatusMsg, false);
158
91
  }
159
- /// <summary>
160
- /// Message string to be displayed on status bar or in Message box
161
- /// </summary>
162
- /// <param name = "msg"> input message string </param>
163
- /// <returns> output message string </returns>
164
92
  static GetMessage(msg) {
165
93
  if (msg === null)
166
94
  msg = "";
@@ -174,80 +102,43 @@ export class Manager {
174
102
  }
175
103
  return msg;
176
104
  }
177
- /// <summary>
178
- /// Used to put the text on a text control
179
- /// </summary>
180
- /// <param name = "ctrl"> </param>
181
- /// <param name = "text"> </param>
182
105
  static SetEditText(ctrl, text) {
183
106
  Commands.setEditText(ctrl, ctrl.getDisplayLine(true), text);
184
107
  }
185
- /// <summary>
186
- /// Insert text to a text control at a given position
187
- /// </summary>
188
- /// <param name="ctrl"></param>
189
- /// <param name="startPosition"></param>
190
- /// <param name="textToInsert"></param>
191
108
  static InsertEditText(ctrl, startPosition, textToInsert) {
192
109
  Commands.insertEditText(ctrl, ctrl.getDisplayLine(true), startPosition, textToInsert);
193
110
  }
194
- /// <summary>
195
- /// return TooltipTimeout
196
- /// </summary>
197
- /// <returns> returns TooltipTimeout</returns>
198
111
  static GetTooltipTimeout() {
199
112
  return GuiEnvironment.Environment.GetTooltipTimeout();
200
113
  }
201
- /// <summary>
202
- /// return SpecialEditLeftAlign
203
- /// </summary>
204
- /// <returns></returns>
205
114
  static GetSpecialEditLeftAlign() {
206
115
  return GuiEnvironment.Environment.GetSpecialEditLeftAlign();
207
116
  }
208
- /// <summary>
209
- /// Returns default date format depending on date mode and date separator.
210
- /// </summary>
211
- /// <returns> String default date format</returns>
212
117
  static GetDefaultDateFormat() {
213
118
  let dateFormat = "";
214
119
  let dateSeperator = GuiEnvironment.Environment.GetDate();
215
- // Arrange date format according to the date mode.
216
120
  switch (GuiEnvironment.Environment.GetDateMode(0)) {
217
- case 'S': // Scandinavian
121
+ case 'S':
218
122
  dateFormat = "YYYY" + dateSeperator + "MM" + dateSeperator + "DD";
219
123
  break;
220
- case 'B': // Buddhist
221
- case 'E': // European
124
+ case 'B':
125
+ case 'E':
222
126
  dateFormat = "DD" + dateSeperator + "MM" + dateSeperator + "YYYY";
223
127
  break;
224
- case 'A': // American
128
+ case 'A':
225
129
  dateFormat = "MM" + dateSeperator + "DD" + dateSeperator + "YYYY";
226
130
  break;
227
131
  }
228
132
  return dateFormat;
229
133
  }
230
- /// <summary>
231
- /// Return default time format using time separator.
232
- /// </summary>
233
- /// <returns></returns>
234
134
  static GetDefaultTimeFormat() {
235
135
  let timeSeperator = GuiEnvironment.Environment.GetTime();
236
136
  let timeFormat = "HH" + timeSeperator + "MM" + timeSeperator + "SS";
237
137
  return timeFormat;
238
138
  }
239
- /// <summary>
240
- /// Gets the runtime context belongs to the current thread.
241
- /// </summary>
242
- /// <returns>RuntimeContextBase</returns>
243
139
  static GetCurrentRuntimeContext() {
244
140
  return Events.GetRuntimeContext(Manager.GetCurrentContextID());
245
141
  }
246
- /// <summary>
247
- /// Gets the contextID using the GuiMgForm.
248
- /// </summary>
249
- /// <param name="mgObject">Magic Object - GuiMgForm/GuiMgControl/Logical control</param>
250
- /// <returns>contextID</returns>
251
142
  static GetContextID(mgObject) {
252
143
  let guiMgForm = null;
253
144
  if (mgObject instanceof GuiMgControl)
@@ -256,45 +147,23 @@ export class Manager {
256
147
  guiMgForm = mgObject;
257
148
  return Events.GetContextID(guiMgForm);
258
149
  }
259
- /// <summary>
260
- /// Shows windows help.
261
- /// </summary>
262
- /// <param name="filePath">path of the help file.</param>
263
- /// <param name="helpCmd">help command.</param>
264
- /// <param name="helpKey">search key word.</param>
265
150
  static ShowWindowHelp(filePath, helpCmd, helpKey) {
266
151
  }
267
- /// <summary>
268
- /// return SpecialValNewPolicy
269
- /// </summary>
270
- /// <returns></returns>
271
152
  static GetSpecialValNewPolicy() {
272
153
  return GuiEnvironment.Environment.GetSpecialValNewPolicy();
273
154
  }
274
155
  }
275
156
  Manager.IsOverlayOpen = false;
276
- Manager._delayWait = new Object(); // this object is used for execution and interrupting delay command
277
- Manager._clipboardData = ""; // Data to be written to the clipboard.
278
- // This will hold the contextID for a current thread.
279
- // Thread static is a separate for each thread (i.e.: value of a static field is unique for each thread).
280
- // http://msdn.microsoft.com/en-us/library/system.threadstaticattribute.aspx
157
+ Manager._delayWait = new Object();
158
+ Manager._clipboardData = "";
281
159
  Manager._currentContextID = '\0';
282
- Manager.DefaultProtocol = null; // default protocol (http/https) and server name to be used for any relative url
160
+ Manager.DefaultProtocol = null;
283
161
  Manager.DefaultServerName = null;
284
- Manager.UtilImeJpn = (UtilStrByteMode.isLocaleDefLangJPN() ? new UtilImeJpn() : null); // JPN: IME support
162
+ Manager.UtilImeJpn = (UtilStrByteMode.isLocaleDefLangJPN() ? new UtilImeJpn() : null);
285
163
  Manager.EventsManager = null;
286
- /// <summary>
287
- /// helper class for setting/resetting the current context ID.
288
- /// We require this class specifically for Modal windows. When we open a modal window then
289
- /// it waits in GuiThread. Mean while GuiThread can receive the events of other context and
290
- /// after processing these events, we should reset the contextID of the Modal windows because
291
- /// it will be used for logging the events when we close the modal window.
292
- /// </summary>
293
164
  export class ContextIDGuard {
294
165
  constructor(contextID) {
295
166
  this._prevContextID = '\0';
296
- // For debugging purpose only.
297
- // It will hold the file name from which the object of ContextIDGuard is created.
298
167
  this._fileName = null;
299
168
  if (arguments.length === 0) {
300
169
  this.constructor_0();
@@ -310,19 +179,12 @@ export class ContextIDGuard {
310
179
  this.SetCurrent(contextID);
311
180
  this.SaveFilename();
312
181
  }
313
- /// <summary>
314
- /// sets the context ID to 'guard'.
315
- /// </summary>
316
- /// <param name="contextID">new context ID to 'guard'.</param>
317
182
  SetCurrent(contextID) {
318
183
  if (contextID !== this._prevContextID) {
319
184
  this._prevContextID = contextID;
320
185
  Manager.SetCurrentContextID(contextID);
321
186
  }
322
187
  }
323
- /// <summary>
324
- /// Get the file name from which the ContextIDGuard is being created.
325
- /// </summary>
326
188
  SaveFilename() {
327
189
  let stackFrame = new StackFrame(1, true);
328
190
  this._fileName = stackFrame.GetFileName();
@@ -332,4 +194,4 @@ export class ContextIDGuard {
332
194
  Manager.SetCurrentContextID(this._prevContextID);
333
195
  }
334
196
  }
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsYUFBYTtBQUNiLGdFQUFnRTtBQUNoRSxjQUFjO0FBQ2QsT0FBTyxFQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQWMsVUFBVSxFQUFFLGVBQWUsRUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRXRGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUdoRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBQyxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHaEQsTUFBTSxPQUFPLE9BQU87SUFlbEIscUJBQXFCO0lBQ3JCLDJDQUEyQztJQUMzQyxjQUFjO0lBQ2Qsb0NBQW9DO0lBQ3BDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFpQjtRQUMxQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxhQUFhO0lBQ2IsMkNBQTJDO0lBQzNDLGNBQWM7SUFDZCxpREFBaUQ7SUFDakQsTUFBTSxDQUFDLG1CQUFtQjtRQUN4QixPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUNuQyxDQUFDO0lBRUQsYUFBYTtJQUNiLDJFQUEyRTtJQUMzRSxjQUFjO0lBQ2QsdUJBQXVCO0lBQ3ZCLE1BQU0sQ0FBQyxZQUFZ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bUIsRUFBRTtZQUN2RCxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8c3VtbWFyeT5cclxuLy8vIE1nR3VpLmRsbCdzIG1hbmFnZXIgLSBhc3NlbWJseSBsZXZlbCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5pbXBvcnQge05TdHJpbmcsIFN0YWNrRnJhbWV9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge0hlbHBDb21tYW5kLCBVdGlsSW1lSnBuLCBVdGlsU3RyQnl0ZU1vZGUsIFdpbmRvd1R5cGV9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7SUd1aUV2ZW50c01hbmFnZXJ9IGZyb20gXCIuL21hbmFnZW1lbnQvZXZlbnRzL0lHdWlFdmVudHNNYW5hZ2VyXCI7XHJcbmltcG9ydCB7R3VpTWdDb250cm9sfSBmcm9tIFwiLi9ndWkvR3VpTWdDb250cm9sXCI7XHJcbmltcG9ydCB7R3VpVGFza0Jhc2V9IGZyb20gXCIuL21hbmFnZW1lbnQvdGFza3MvR3VpVGFza0Jhc2VcIjtcclxuaW1wb3J0IHtNZ0NvbnRyb2xCYXNlfSBmcm9tIFwiLi9tYW5hZ2VtZW50L2d1aS9NZ0NvbnRyb2xCYXNlXCI7XHJcbmltcG9ydCB7Q29tbWFuZHN9IGZyb20gXCIuL0NvbW1hbmRzXCI7XHJcbmltcG9ydCB7TWdGb3JtQmFzZX0gZnJvbSBcIi4vbWFuYWdlbWVudC9ndWkvTWdGb3JtQmFzZVwiO1xyXG5pbXBvcnQge0NvbW1hbmRUeXBlLCBIdG1sUHJvcGVydGllc30gZnJvbSBcIi4vR3VpRW51bXNcIjtcclxuaW1wb3J0IHtFdmVudHN9IGZyb20gXCIuL0V2ZW50c1wiO1xyXG5pbXBvcnQge1J1bnRpbWVDb250ZXh0QmFzZX0gZnJvbSBcIi4vbWFuYWdlbWVudC9SdW50aW1lQ29udGV4dEJhc2VcIjtcclxuaW1wb3J0IHtHdWlNZ0Zvcm19IGZyb20gXCIuL2d1aS9HdWlNZ0Zvcm1cIjtcclxuaW1wb3J0IHtQcm9wSW50ZXJmYWNlfSBmcm9tIFwiLi9tYW5hZ2VtZW50L2d1aS9Qcm9wSW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7R3VpRW52aXJvbm1lbnR9IGZyb20gXCIuL0d1aUVudmlyb25tZW50XCI7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIE1hbmFnZXIge1xyXG4gIHN0YXRpYyBJc092ZXJsYXlPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlbGF5V2FpdDogT2JqZWN0ID0gbmV3IE9iamVjdCgpOyAvLyB0aGlzIG9iamVjdCBpcyB1c2VkIGZvciBleGVjdXRpb24gYW5kIGludGVycnVwdGluZyBkZWxheSBjb21tYW5kXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2NsaXBib2FyZERhdGE6IHN0cmluZyA9IFwiXCI7IC8vIERhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgY2xpcGJvYXJkLlxyXG5cclxuICAvLyBUaGlzIHdpbGwgaG9sZCB0aGUgY29udGV4dElEIGZvciBhIGN1cnJlbnQgdGhyZWFkLlxyXG4gIC8vIFRocmVhZCBzdGF0aWMgaXMgYSBzZXBhcmF0ZSBmb3IgZWFjaCB0aHJlYWQgKGkuZS46IHZhbHVlIG9mIGEgc3RhdGljIGZpZWxkIGlzIHVuaXF1ZSBmb3IgZWFjaCB0aHJlYWQpLlxyXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9zeXN0ZW0udGhyZWFkc3RhdGljYXR0cmlidXRlLmFzcHhcclxuICBwcml2YXRlIHN0YXRpYyBfY3VycmVudENvbnRleHRJRDogc3RyaW5nID0gJ1xcMCc7XHJcblxyXG4gIHN0YXRpYyBEZWZhdWx0UHJvdG9jb2w6IHN0cmluZyA9IG51bGw7IC8vIGRlZmF1bHQgcHJvdG9jb2wgKGh0dHAvaHR0cHMpIGFuZCBzZXJ2ZXIgbmFtZSB0byBiZSB1c2VkIGZvciBhbnkgcmVsYXRpdmUgdXJsXHJcbiAgc3RhdGljIERlZmF1bHRTZXJ2ZXJOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIHN0YXRpYyBVdGlsSW1lSnBuOiBVdGlsSW1lSnBuID0gKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSA/IG5ldyBVdGlsSW1lSnBuKCkgOiBudWxsKTsgLy8gSlBOOiBJTUUgc3VwcG9ydFxyXG4gIHN0YXRpYyBFdmVudHNNYW5hZ2VyOiBJR3VpRXZlbnRzTWFuYWdlciA9IG51bGw7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHVibGljKVxyXG4gIC8vLyBTZXQgdGhlIGNvbnRleHQgSUQgZm9yIGEgY3VycmVudCB0aHJlYWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRleHRJRFwiPjwvcGFyYW0+XHJcbiAgc3RhdGljIFNldEN1cnJlbnRDb250ZXh0SUQoY29udGV4dElEOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIE1hbmFnZXIuX2N1cnJlbnRDb250ZXh0SUQgPSBjb250ZXh0SUQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldCB0aGUgY29udGV4dCBJRCBmb3IgYSBjdXJyZW50IHRocmVhZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPmN1cnJlbnQgdGhyZWFkJ3MgY29udGV4dElEPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRDdXJyZW50Q29udGV4dElEKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gTWFuYWdlci5fY3VycmVudENvbnRleHRJRDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgb2JqZWN0IHRoYXQgaXMgdXNlZCBmb3IgZXhlY3V0aW9uIGFuZCBpbnRlcnJ1cHRpbmcgZGVsYXkgY29tbWFuZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIEdldERlbGF5V2FpdCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIE1hbmFnZXIuX2RlbGF5V2FpdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjaGVjayBpZiBkb3QgbmV0IGNvbnRyb2wgY2FuIGJlIGZvY3VzZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZ3VpTWdDb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBDYW5Gb2N1cyhndWlNZ0NvbnRyb2w6IEd1aU1nQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHN0YXRpYyBJbml0KHN0YXJ0dXBJbWFnZUZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICBjbG9zZSB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb3JtXCI+IDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWFpblByZ1Rhc2tcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBBYm9ydChmb3JtOiBNZ0Zvcm1CYXNlLCBtYWluUHJnVGFzazogR3VpVGFza0Jhc2UpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoZm9ybS5nZXRTdWJGb3JtQ3RybCgpID09PSBudWxsICYmIGZvcm0uT3BlbmVkKSB7XHJcbiAgICAgIC8vIGlmIHRoZSBjbG9zaW5nIGZvcm0gaXMgJ29wZW5lZCBhcyBhIG1vZGFsJyB0aGVuIGRlY3JlbWVudCB0aGUgbW9kYWwgY291bnQgb24gaXRzIGZyYW1lIHdpbmRvdy5cclxuICAgICAgaWYgKGZvcm0uaXNEaWFsb2coKSkge1xyXG4gICAgICAgIHRoaXMuSXNPdmVybGF5T3BlbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgdG9wTW9zdEZyYW1lRm9ybTogTWdGb3JtQmFzZSA9IGZvcm0uZ2V0VG9wTW9zdEZyYW1lRm9ybSgpO1xyXG4gICAgICAgIGlmICh0b3BNb3N0RnJhbWVGb3JtICE9PSBudWxsKVxyXG4gICAgICAgICAgdG9wTW9zdEZyYW1lRm9ybS5VcGRhdGVNb2RhbEZvcm1zQ291bnQoZm9ybSwgZmFsc2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBDb21tYW5kcy5hZGRDbG9zZUZvcm0oZm9ybSwgXCIwXCIsIGZvcm0uZ2V0VGFzaygpLmdldFRhc2tUYWcoKSk7XHJcblxyXG4gICAgICBDb21tYW5kcy5iZWdpbkludm9rZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPmNvbnRyb2wgdG8gZ2V0IHZhbHVlIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB2YWx1ZSBvZiB0aGUgY29udHJvbCA8L3JldHVybnM+XHJcbiAgc3RhdGljIEdldEN0cmxWYWwoY3RybDogTWdDb250cm9sQmFzZSk6IHN0cmluZyB7XHJcbiAgICAvLyBRQ1IgIzc0NTExNzogTWFrZSBzdXJlIHRoYXQgaWYgdGhlIGNvbnRlbnRzIG9mIGEgY29udHJvbCB3ZXJlIGNoYW5nZWRcclxuICAgIC8vIHRoZW4gdGhlIGNoYW5nZXMgYXJlIGFwcGxpZWQgYmVmb3JlIGV4YW1pbmluZyBpdHMgdmFsdWUuXHJcbiAgICByZXR1cm4gQ29tbWFuZHMuZ2V0VmFsdWUoY3RybCwgY3RybC5nZXREaXNwbGF5TGluZSh0cnVlKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0IHJlYWQgb25seSBmb3IgY29udHJvbHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPnRoZSBjb250cm9sIHRvIGNoYW5nZSBpdHMgcHJvcGVydHkgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlzUmVhZE9ubHlcIj5ib29sZWFuIDwvcGFyYW0+XHJcbiAgc3RhdGljIGFzeW5jIFNldFJlYWRPbmx5Q29udHJvbChjdHJsOiBNZ0NvbnRyb2xCYXNlLCBpc1JlYWRPbmx5OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoY3RybC5pc1RleHRDb250cm9sKCkgfHwgY3RybC5Jc1JlcGVhdGFibGUpIC8vIERlZmVjdCAxMzE4MDI6IFNldCBSZWFkT25seSBmb3IgUmljaCBUZXh0IGNvbnRyb2wgaW4gVGFibGUgSGVhZGVyIGFuZCBkZWZlY3QgMTMxNzA0OiBpbiBnZW5lcmFsIGZvciBSaWNoIFRleHQuXHJcbiAgICB7XHJcbiAgICAgIC8vIEpQTjogSU1FIHN1cHBvcnQgKGVuYWJsZSBJTUUgaW4gcXVlcnkgbW9kZSlcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgICBpZiAoYXdhaXQgY3RybC5nZXRGb3JtKCkuZ2V0VGFzaygpLmNoZWNrUHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19MT0NBVEVfSU5fUVVFUlksIGZhbHNlKSlcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBDb21tYW5kcy5hZGRPcGVyYXRpb25XaXRoTGluZShDb21tYW5kVHlwZS5TRVRfUFJPUEVSVFksIGN0cmwsIGN0cmwuZ2V0RGlzcGxheUxpbmUoZmFsc2UpLCBIdG1sUHJvcGVydGllcy5SZWFkT25seSwgaXNSZWFkT25seSk7XHJcblxyXG4gICAgICBDb21tYW5kcy5iZWdpbkludm9rZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gT3BlbiB0aGUgZm9ybS4gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1nRm9ybVwiPmZvcm0gdG8gYmUgb3BlbmVkLjwvcGFyYW0+XHJcbiAgc3RhdGljIE9wZW5Gb3JtKG1nRm9ybTogTWdGb3JtQmFzZSk6IHZvaWQge1xyXG4gICAgLy8gbm9uIGludGVyYWN0aXZlIGNhbiBjaG9vc2Ugbm90IHRvIG9wZW4gdGhlIHdpbmRvdy5cclxuICAgIGlmICghbWdGb3JtLk9wZW5lZCAmJiAobWdGb3JtLmdldFRhc2soKS5Jc0ludGVyYWN0aXZlIHx8IG1nRm9ybS5nZXRUYXNrKCkuaXNPcGVuV2luKCkpKSB7XHJcbiAgICAgIGlmICghbWdGb3JtLmlzU3ViRm9ybSgpKSB7XHJcbiAgICAgICAgLy8gaWYgdGhlIGZvcm0gaXMgdG8gYmUgb3BlbmVkIGFzIGEgbW9kYWwsIHRoZW4gaW5jcmVtZW50IHRoZSBtb2RhbCBjb3VudCBvbiBpdHMgZnJhbWUgd2luZG93LlxyXG4gICAgICAgIGlmIChtZ0Zvcm0uaXNEaWFsb2coKSkge1xyXG4gICAgICAgICAgdGhpcy5Jc092ZXJsYXlPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICBsZXQgdG9wTW9zdEZyYW1lRm9ybTogTWdGb3JtQmFzZSA9IG1nRm9ybS5nZXRUb3BNb3N0RnJhbWVGb3JtKCk7XHJcbiAgICAgICAgICBpZiAodG9wTW9zdEZyYW1lRm9ybSAhPT0gbnVsbClcclxuICAgICAgICAgICAgdG9wTW9zdEZyYW1lRm9ybS5VcGRhdGVNb2RhbEZvcm1zQ291bnQobWdGb3JtLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmICghbWdGb3JtLmlzU3ViRm9ybSgpKSB7XHJcbiAgICAgIC8vICAgbGV0IGZvcm1OYW1lOiBzdHJpbmcgPSBtZ0Zvcm0uVW5pcXVlTmFtZTtcclxuICAgICAgLy8gICBVSUJyaWRnZS5nZXRJbnN0YW5jZSgpLk9wZW5Gb3JtKGZvcm1OYW1lKTtcclxuXHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gZWxzZSB7XHJcbiAgICAgIC8vICAgbGV0IGlucHV0Q29udHJvbHMgPSBtZ0Zvcm0uR2V0TGlzdE9mSW5wdXRDb250cm9scygpO1xyXG4gICAgICAvLyAvL1xyXG4gICAgICAvLyAvLyAgIEpTQnJpZGdlLkluc3RhbmNlLk9wZW5TdWJGb3JtKHRoaXMuZ2V0U3ViRm9ybUN0cmwoKS5nZXROYW1lKCksIFBhcmVudEZvcm0uZ2V0VGFzaygpLmdldFRhc2tUYWcoKSwgZ2V0UHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNX05BTUUpLmdldFZhbHVlKCksIF90YXNrLmdldFRhc2tUYWcoKSwgaW5wdXRDb250cm9scyk7XHJcbiAgICAgIC8vIC8vIH1cclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgbWdGb3JtLk9wZW5lZCA9IHRydWU7XHJcblxyXG4gICAgICBDb21tYW5kcy5iZWdpbkludm9rZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBQZXJmb3JtcyBmaXJzdCByZWZyZXNoIGZvciB0aGUgdGFibGUgY29udHJvbCA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGFzeW5jIERvRmlyc3RSZWZyZXNoVGFibGUobWdGb3JtOiBNZ0Zvcm1CYXNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAobWdGb3JtICE9PSBudWxsICYmICFtZ0Zvcm0uaWdub3JlRmlyc3RSZWZyZXNoVGFibGUpIHtcclxuICAgICAgbWdGb3JtLmlnbm9yZUZpcnN0UmVmcmVzaFRhYmxlID0gdHJ1ZTtcclxuICAgICAgYXdhaXQgbWdGb3JtLmZpcnN0VGFibGVSZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0cmlldmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYXJldCwgd2l0aGluIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGV4dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsXCI+dGhlIGNvbnRyb2wgd2hpY2ggaXMgYXNzdW1lZCB0byBjb250YWluIHRoZSBzZWxlY3RlZCB0ZXh0IDwvcGFyYW0+XHJcbiAgc3RhdGljIENhcmV0UG9zR2V0KGN0cmw6IE1nQ29udHJvbEJhc2UpOiBudW1iZXIge1xyXG4gICAgbGV0IGNhcmV0UG9zOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmIChjdHJsLmlzVGV4dENvbnRyb2woKSlcclxuICAgICAgY2FyZXRQb3MgPSBDb21tYW5kcy5jYXJldFBvc0dldChjdHJsLCBjdHJsLmdldERpc3BsYXlMaW5lKHRydWUpKTtcclxuXHJcbiAgICByZXR1cm4gY2FyZXRQb3M7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENsZWFyIHRoZSBzdGF0dXMgYmFyIGRlcGVuZGluZyBvbiB0aGUgY29udHJvbCBzcGVjaWZpYyBzdGF0dXMgbWVzc2FnZSBvciBmb3JtIHNwZWNpZmljIHN0YXR1cyBtZXNzYWdlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0YXNrXCI+dGFzazwvcGFyYW0+XHJcbiAgc3RhdGljIENsZWFyU3RhdHVzQmFyKHRhc2s6IEd1aVRhc2tCYXNlKTogdm9pZCB7XHJcbiAgICBsZXQgY3VycmVudFBhcmtlZENvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSB0YXNrLmdldExhc3RQYXJrZWRDdHJsKCk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRQYXJrZWRDb250cm9sICE9PSBudWxsICYmICFOU3RyaW5nLklzTnVsbE9yRW1wdHkoY3VycmVudFBhcmtlZENvbnRyb2wuUHJvbXB0SGVscCkpXHJcbiAgICAgIHRhc2suV3JpdGVUb01lc3NhZ2VQYW5lKGN1cnJlbnRQYXJrZWRDb250cm9sLlByb21wdEhlbHAsIGZhbHNlKTtcclxuICAgIGVsc2VcclxuICAgICAgTWFuYWdlci5DbGVhbk1lc3NhZ2VQYW5lKHRhc2spO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNsZWFuIHRoZSBzdGF0dXMgYmFyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBDbGVhbk1lc3NhZ2VQYW5lKHRhc2s6IEd1aVRhc2tCYXNlKTogdm9pZCB7XHJcbiAgICB0YXNrLldyaXRlVG9NZXNzYWdlUGFuZShNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkRlZmF1bHRTdGF0dXNNc2csIGZhbHNlKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWVzc2FnZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkIG9uIHN0YXR1cyBiYXIgb3IgaW4gTWVzc2FnZSBib3hcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibXNnXCI+IGlucHV0IG1lc3NhZ2Ugc3RyaW5nIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBvdXRwdXQgbWVzc2FnZSBzdHJpbmcgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRNZXNzYWdlKG1zZzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChtc2cgPT09IG51bGwpXHJcbiAgICAgIG1zZyA9IFwiXCI7XHJcbiAgICBlbHNlIGlmIChtc2cubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgaWR4T2ZDYXJyaWFnZTogbnVtYmVyID0gbXNnLmluZGV4T2YoXCJcXHJcIik7XHJcbiAgICAgIGlmIChpZHhPZkNhcnJpYWdlICE9PSAtMSlcclxuICAgICAgICBtc2cgPSBtc2cuc3Vic3RyKDAsIGlkeE9mQ2FycmlhZ2UpO1xyXG5cclxuICAgICAgbGV0IGlkeE9mTmV3TGluZTogbnVtYmVyID0gbXNnLmluZGV4T2YoXCJcXG5cIik7XHJcbiAgICAgIGlmIChpZHhPZk5ld0xpbmUgIT09IC0xKVxyXG4gICAgICAgIG1zZyA9IG1zZy5zdWJzdHIoMCwgaWR4T2ZOZXdMaW5lKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbXNnO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFVzZWQgdG8gcHV0IHRoZSB0ZXh0IG9uIGEgdGV4dCBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj4gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRleHRcIj4gPC9wYXJhbT5cclxuICBzdGF0aWMgU2V0RWRpdFRleHQoY3RybDogTWdDb250cm9sQmFzZSwgdGV4dDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBDb21tYW5kcy5zZXRFZGl0VGV4dChjdHJsLCBjdHJsLmdldERpc3BsYXlMaW5lKHRydWUpLCB0ZXh0KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gSW5zZXJ0IHRleHQgdG8gYSB0ZXh0IGNvbnRyb2wgYXQgYSBnaXZlbiBwb3NpdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RhcnRQb3NpdGlvblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGV4dFRvSW5zZXJ0XCI+PC9wYXJhbT5cclxuICBzdGF0aWMgSW5zZXJ0RWRpdFRleHQoY3RybDogTWdDb250cm9sQmFzZSwgc3RhcnRQb3NpdGlvbjogbnVtYmVyLCB0ZXh0VG9JbnNlcnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgQ29tbWFuZHMuaW5zZXJ0RWRpdFRleHQoY3RybCwgY3RybC5nZXREaXNwbGF5TGluZSh0cnVlKSwgc3RhcnRQb3NpdGlvbiwgdGV4dFRvSW5zZXJ0KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gVG9vbHRpcFRpbWVvdXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gcmV0dXJucyBUb29sdGlwVGltZW91dDwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0VG9vbHRpcFRpbWVvdXQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUb29sdGlwVGltZW91dCgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gU3BlY2lhbEVkaXRMZWZ0QWxpZ25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIEdldFNwZWNpYWxFZGl0TGVmdEFsaWduKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNwZWNpYWxFZGl0TGVmdEFsaWduKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmV0dXJucyBkZWZhdWx0IGRhdGUgZm9ybWF0IGRlcGVuZGluZyBvbiBkYXRlIG1vZGUgYW5kIGRhdGUgc2VwYXJhdG9yLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBTdHJpbmcgZGVmYXVsdCBkYXRlIGZvcm1hdDwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0RGVmYXVsdERhdGVGb3JtYXQoKTogc3RyaW5nIHtcclxuICAgIGxldCBkYXRlRm9ybWF0OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IGRhdGVTZXBlcmF0b3I6IHN0cmluZyA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERhdGUoKTtcclxuXHJcbiAgICAvLyBBcnJhbmdlIGRhdGUgZm9ybWF0IGFjY29yZGluZyB0byB0aGUgZGF0ZSBtb2RlLlxyXG4gICAgc3dpdGNoIChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlTW9kZSgwKSkge1xyXG4gICAgICBjYXNlICdTJzogLy8gU2NhbmRpbmF2aWFuXHJcbiAgICAgICAgZGF0ZUZvcm1hdCA9IFwiWVlZWVwiICsgZGF0ZVNlcGVyYXRvciArIFwiTU1cIiArIGRhdGVTZXBlcmF0b3IgKyBcIkREXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdCJzogLy8gQnVkZGhpc3RcclxuXHJcbiAgICAgIGNhc2UgJ0UnOiAvLyBFdXJvcGVhblxyXG4gICAgICAgIGRhdGVGb3JtYXQgPSBcIkREXCIgKyBkYXRlU2VwZXJhdG9yICsgXCJNTVwiICsgZGF0ZVNlcGVyYXRvciArIFwiWVlZWVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnQSc6IC8vIEFtZXJpY2FuXHJcbiAgICAgICAgZGF0ZUZvcm1hdCA9IFwiTU1cIiArIGRhdGVTZXBlcmF0b3IgKyBcIkREXCIgKyBkYXRlU2VwZXJhdG9yICsgXCJZWVlZXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0ZUZvcm1hdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZXR1cm4gZGVmYXVsdCB0aW1lIGZvcm1hdCB1c2luZyB0aW1lIHNlcGFyYXRvci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIEdldERlZmF1bHRUaW1lRm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGltZVNlcGVyYXRvcjogc3RyaW5nID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VGltZSgpO1xyXG4gICAgbGV0IHRpbWVGb3JtYXQ6IHN0cmluZyA9IFwiSEhcIiArIHRpbWVTZXBlcmF0b3IgKyBcIk1NXCIgKyB0aW1lU2VwZXJhdG9yICsgXCJTU1wiO1xyXG4gICAgcmV0dXJuIHRpbWVGb3JtYXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldHMgdGhlIHJ1bnRpbWUgY29udGV4dCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IHRocmVhZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz5SdW50aW1lQ29udGV4dEJhc2U8L3JldHVybnM+XHJcbiAgc3RhdGljIEdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpOiBSdW50aW1lQ29udGV4dEJhc2Uge1xyXG4gICAgcmV0dXJuIEV2ZW50cy5HZXRSdW50aW1lQ29udGV4dChNYW5hZ2VyLkdldEN1cnJlbnRDb250ZXh0SUQoKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldHMgdGhlIGNvbnRleHRJRCB1c2luZyB0aGUgR3VpTWdGb3JtLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWdPYmplY3RcIj5NYWdpYyBPYmplY3QgLSBHdWlNZ0Zvcm0vR3VpTWdDb250cm9sL0xvZ2ljYWwgY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPmNvbnRleHRJRDwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0Q29udGV4dElEKG1nT2JqZWN0OiBhbnkpOiBudW1iZXIge1xyXG4gICAgbGV0IGd1aU1nRm9ybTogR3VpTWdGb3JtID0gbnVsbDtcclxuXHJcbiAgICBpZiAobWdPYmplY3QgaW5zdGFuY2VvZiBHdWlNZ0NvbnRyb2wpXHJcbiAgICAgIGd1aU1nRm9ybSA9ICg8R3VpTWdDb250cm9sPm1nT2JqZWN0KS5HdWlNZ0Zvcm07XHJcbiAgICBlbHNlIGlmIChtZ09iamVjdCBpbnN0YW5jZW9mIEd1aU1nRm9ybSlcclxuICAgICAgZ3VpTWdGb3JtID0gPEd1aU1nRm9ybT5tZ09iamVjdDtcclxuXHJcbiAgICByZXR1cm4gRXZlbnRzLkdldENvbnRleHRJRChndWlNZ0Zvcm0pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTaG93cyB3aW5kb3dzIGhlbHAuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmaWxlUGF0aFwiPnBhdGggb2YgdGhlIGhlbHAgZmlsZS48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImhlbHBDbWRcIj5oZWxwIGNvbW1hbmQuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJoZWxwS2V5XCI+c2VhcmNoIGtleSB3b3JkLjwvcGFyYW0+XHJcbiAgc3RhdGljIFNob3dXaW5kb3dIZWxwKGZpbGVQYXRoOiBzdHJpbmcsIGhlbHBDbWQ6IEhlbHBDb21tYW5kLCBoZWxwS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJuIFNwZWNpYWxWYWxOZXdQb2xpY3lcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIHN0YXRpYyBHZXRTcGVjaWFsVmFsTmV3UG9saWN5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNwZWNpYWxWYWxOZXdQb2xpY3koKTtcclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vIGhlbHBlciBjbGFzcyBmb3Igc2V0dGluZy9yZXNldHRpbmcgdGhlIGN1cnJlbnQgY29udGV4dCBJRC5cclxuLy8vIFdlIHJlcXVpcmUgdGhpcyBjbGFzcyBzcGVjaWZpY2FsbHkgZm9yIE1vZGFsIHdpbmRvd3MuIFdoZW4gd2Ugb3BlbiBhIG1vZGFsIHdpbmRvdyB0aGVuXHJcbi8vLyBpdCB3YWl0cyBpbiBHdWlUaHJlYWQuIE1lYW4gd2hpbGUgR3VpVGhyZWFkIGNhbiByZWNlaXZlIHRoZSBldmVudHMgb2Ygb3RoZXIgY29udGV4dCBhbmRcclxuLy8vIGFmdGVyIHByb2Nlc3NpbmcgdGhlc2UgZXZlbnRzLCB3ZSBzaG91bGQgcmVzZXQgdGhlIGNvbnRleHRJRCBvZiB0aGUgTW9kYWwgd2luZG93cyBiZWNhdXNlXHJcbi8vLyBpdCB3aWxsIGJlIHVzZWQgZm9yIGxvZ2dpbmcgdGhlIGV2ZW50cyB3aGVuIHdlIGNsb3NlIHRoZSBtb2RhbCB3aW5kb3cuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBDb250ZXh0SURHdWFyZCB7XHJcbiAgcHJpdmF0ZSBfcHJldkNvbnRleHRJRDogc3RyaW5nID0gJ1xcMCc7XHJcblxyXG4gIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5LlxyXG4gIC8vIEl0IHdpbGwgaG9sZCB0aGUgZmlsZSBuYW1lIGZyb20gd2hpY2ggdGhlIG9iamVjdCBvZiBDb250ZXh0SURHdWFyZCBpcyBjcmVhdGVkLlxyXG4gIHByaXZhdGUgX2ZpbGVOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHRJRDogc3RyaW5nKTtcclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0SUQ/OiBzdHJpbmcpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzEoY29udGV4dElEKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ByZXZDb250ZXh0SUQgPSBNYW5hZ2VyLkdldEN1cnJlbnRDb250ZXh0SUQoKTtcclxuICAgIHRoaXMuU2F2ZUZpbGVuYW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEoY29udGV4dElEOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuU2V0Q3VycmVudChjb250ZXh0SUQpO1xyXG4gICAgdGhpcy5TYXZlRmlsZW5hbWUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2V0cyB0aGUgY29udGV4dCBJRCB0byAnZ3VhcmQnLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udGV4dElEXCI+bmV3IGNvbnRleHQgSUQgdG8gJ2d1YXJkJy48L3BhcmFtPlxyXG4gIFNldEN1cnJlbnQoY29udGV4dElEOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChjb250ZXh0SUQgIT09IHRoaXMuX3ByZXZDb250ZXh0SUQpIHtcclxuICAgICAgdGhpcy5fcHJldkNvbnRleHRJRCA9IGNvbnRleHRJRDtcclxuICAgICAgTWFuYWdlci5TZXRDdXJyZW50Q29udGV4dElEKGNvbnRleHRJRCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldCB0aGUgZmlsZSBuYW1lIGZyb20gd2hpY2ggdGhlIENvbnRleHRJREd1YXJkIGlzIGJlaW5nIGNyZWF0ZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIFNhdmVGaWxlbmFtZSgpOiB2b2lkIHtcclxuICAgIGxldCBzdGFja0ZyYW1lOiBTdGFja0ZyYW1lID0gbmV3IFN0YWNrRnJhbWUoMSwgdHJ1ZSk7XHJcbiAgICB0aGlzLl9maWxlTmFtZSA9IHN0YWNrRnJhbWUuR2V0RmlsZU5hbWUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBEaXNwb3NlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3ByZXZDb250ZXh0SUQgIT09IE1hbmFnZXIuR2V0Q3VycmVudENvbnRleHRJRCgpKVxyXG4gICAgICBNYW5hZ2VyLlNldEN1cnJlbnRDb250ZXh0SUQodGhpcy5fcHJldkNvbnRleHRJRCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQWMsVUFBVSxFQUFFLGVBQWUsRUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRXRGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUdoRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBQyxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHaEQsTUFBTSxPQUFPLE9BQU87SUFtQmxCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFpQjtRQUMxQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO0lBQ3hDLENBQUM7SUFNRCxNQUFNLENBQUMsbUJBQW1CO1FBQ3hCLE9BQU8sT0FBTyxDQUFDLGlCQUFpQixDQUFDO0lBQ25DLENBQUM7SUFNRCxNQUFNLENBQUMsWUFBWTtRQUNqQixPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDNUIsQ0FBQztJQU9ELE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBMEI7UUFDeEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBR0QsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBNEI7UUFDdEMsT0FBTztJQUNULENBQUM7SUFRRCxNQUFNLENB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QUFXLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUMsbUJBQW1CLEVBQUU7WUFDdkQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHN1bW1hcnk+XHJcbi8vLyBNZ0d1aS5kbGwncyBtYW5hZ2VyIC0gYXNzZW1ibHkgbGV2ZWwgcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cclxuLy8vIDwvc3VtbWFyeT5cclxuaW1wb3J0IHtOU3RyaW5nLCBTdGFja0ZyYW1lfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtIZWxwQ29tbWFuZCwgVXRpbEltZUpwbiwgVXRpbFN0ckJ5dGVNb2RlLCBXaW5kb3dUeXBlfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge0lHdWlFdmVudHNNYW5hZ2VyfSBmcm9tIFwiLi9tYW5hZ2VtZW50L2V2ZW50cy9JR3VpRXZlbnRzTWFuYWdlclwiO1xyXG5pbXBvcnQge0d1aU1nQ29udHJvbH0gZnJvbSBcIi4vZ3VpL0d1aU1nQ29udHJvbFwiO1xyXG5pbXBvcnQge0d1aVRhc2tCYXNlfSBmcm9tIFwiLi9tYW5hZ2VtZW50L3Rhc2tzL0d1aVRhc2tCYXNlXCI7XHJcbmltcG9ydCB7TWdDb250cm9sQmFzZX0gZnJvbSBcIi4vbWFuYWdlbWVudC9ndWkvTWdDb250cm9sQmFzZVwiO1xyXG5pbXBvcnQge0NvbW1hbmRzfSBmcm9tIFwiLi9Db21tYW5kc1wiO1xyXG5pbXBvcnQge01nRm9ybUJhc2V9IGZyb20gXCIuL21hbmFnZW1lbnQvZ3VpL01nRm9ybUJhc2VcIjtcclxuaW1wb3J0IHtDb21tYW5kVHlwZSwgSHRtbFByb3BlcnRpZXN9IGZyb20gXCIuL0d1aUVudW1zXCI7XHJcbmltcG9ydCB7RXZlbnRzfSBmcm9tIFwiLi9FdmVudHNcIjtcclxuaW1wb3J0IHtSdW50aW1lQ29udGV4dEJhc2V9IGZyb20gXCIuL21hbmFnZW1lbnQvUnVudGltZUNvbnRleHRCYXNlXCI7XHJcbmltcG9ydCB7R3VpTWdGb3JtfSBmcm9tIFwiLi9ndWkvR3VpTWdGb3JtXCI7XHJcbmltcG9ydCB7UHJvcEludGVyZmFjZX0gZnJvbSBcIi4vbWFuYWdlbWVudC9ndWkvUHJvcEludGVyZmFjZVwiO1xyXG5pbXBvcnQge0d1aUVudmlyb25tZW50fSBmcm9tIFwiLi9HdWlFbnZpcm9ubWVudFwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBNYW5hZ2VyIHtcclxuICBzdGF0aWMgSXNPdmVybGF5T3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc3RhdGljIF9kZWxheVdhaXQ6IE9iamVjdCA9IG5ldyBPYmplY3QoKTsgLy8gdGhpcyBvYmplY3QgaXMgdXNlZCBmb3IgZXhlY3V0aW9uIGFuZCBpbnRlcnJ1cHRpbmcgZGVsYXkgY29tbWFuZFxyXG4gIHByaXZhdGUgc3RhdGljIF9jbGlwYm9hcmREYXRhOiBzdHJpbmcgPSBcIlwiOyAvLyBEYXRhIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNsaXBib2FyZC5cclxuXHJcbiAgLy8gVGhpcyB3aWxsIGhvbGQgdGhlIGNvbnRleHRJRCBmb3IgYSBjdXJyZW50IHRocmVhZC5cclxuICAvLyBUaHJlYWQgc3RhdGljIGlzIGEgc2VwYXJhdGUgZm9yIGVhY2ggdGhyZWFkIChpLmUuOiB2YWx1ZSBvZiBhIHN0YXRpYyBmaWVsZCBpcyB1bmlxdWUgZm9yIGVhY2ggdGhyZWFkKS5cclxuICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvc3lzdGVtLnRocmVhZHN0YXRpY2F0dHJpYnV0ZS5hc3B4XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2N1cnJlbnRDb250ZXh0SUQ6IHN0cmluZyA9ICdcXDAnO1xyXG5cclxuICBzdGF0aWMgRGVmYXVsdFByb3RvY29sOiBzdHJpbmcgPSBudWxsOyAvLyBkZWZhdWx0IHByb3RvY29sIChodHRwL2h0dHBzKSBhbmQgc2VydmVyIG5hbWUgdG8gYmUgdXNlZCBmb3IgYW55IHJlbGF0aXZlIHVybFxyXG4gIHN0YXRpYyBEZWZhdWx0U2VydmVyTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICBzdGF0aWMgVXRpbEltZUpwbjogVXRpbEltZUpwbiA9IChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkgPyBuZXcgVXRpbEltZUpwbigpIDogbnVsbCk7IC8vIEpQTjogSU1FIHN1cHBvcnRcclxuICBzdGF0aWMgRXZlbnRzTWFuYWdlcjogSUd1aUV2ZW50c01hbmFnZXIgPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+KHB1YmxpYylcclxuICAvLy8gU2V0IHRoZSBjb250ZXh0IElEIGZvciBhIGN1cnJlbnQgdGhyZWFkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250ZXh0SURcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBTZXRDdXJyZW50Q29udGV4dElEKGNvbnRleHRJRDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBNYW5hZ2VyLl9jdXJyZW50Q29udGV4dElEID0gY29udGV4dElEO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgdGhlIGNvbnRleHQgSUQgZm9yIGEgY3VycmVudCB0aHJlYWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz5jdXJyZW50IHRocmVhZCdzIGNvbnRleHRJRDwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0Q3VycmVudENvbnRleHRJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE1hbmFnZXIuX2N1cnJlbnRDb250ZXh0SUQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IG9iamVjdCB0aGF0IGlzIHVzZWQgZm9yIGV4ZWN1dGlvbiBhbmQgaW50ZXJydXB0aW5nIGRlbGF5IGNvbW1hbmQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXREZWxheVdhaXQoKTogYW55IHtcclxuICAgIHJldHVybiBNYW5hZ2VyLl9kZWxheVdhaXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hlY2sgaWYgZG90IG5ldCBjb250cm9sIGNhbiBiZSBmb2N1c2VkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImd1aU1nQ29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgQ2FuRm9jdXMoZ3VpTWdDb250cm9sOiBHdWlNZ0NvbnRyb2wpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBzdGF0aWMgSW5pdChzdGFydHVwSW1hZ2VGaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgY2xvc2UgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm9ybVwiPiA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1haW5QcmdUYXNrXCI+PC9wYXJhbT5cclxuICBzdGF0aWMgQWJvcnQoZm9ybTogTWdGb3JtQmFzZSwgbWFpblByZ1Rhc2s6IEd1aVRhc2tCYXNlKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKGZvcm0uZ2V0U3ViRm9ybUN0cmwoKSA9PT0gbnVsbCAmJiBmb3JtLk9wZW5lZCkge1xyXG4gICAgICAvLyBpZiB0aGUgY2xvc2luZyBmb3JtIGlzICdvcGVuZWQgYXMgYSBtb2RhbCcgdGhlbiBkZWNyZW1lbnQgdGhlIG1vZGFsIGNvdW50IG9uIGl0cyBmcmFtZSB3aW5kb3cuXHJcbiAgICAgIGlmIChmb3JtLmlzRGlhbG9nKCkpIHtcclxuICAgICAgICB0aGlzLklzT3ZlcmxheU9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IHRvcE1vc3RGcmFtZUZvcm06IE1nRm9ybUJhc2UgPSBmb3JtLmdldFRvcE1vc3RGcmFtZUZvcm0oKTtcclxuICAgICAgICBpZiAodG9wTW9zdEZyYW1lRm9ybSAhPT0gbnVsbClcclxuICAgICAgICAgIHRvcE1vc3RGcmFtZUZvcm0uVXBkYXRlTW9kYWxGb3Jtc0NvdW50KGZvcm0sIGZhbHNlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgQ29tbWFuZHMuYWRkQ2xvc2VGb3JtKGZvcm0sIFwiMFwiLCBmb3JtLmdldFRhc2soKS5nZXRUYXNrVGFnKCkpO1xyXG5cclxuICAgICAgQ29tbWFuZHMuYmVnaW5JbnZva2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj5jb250cm9sIHRvIGdldCB2YWx1ZSA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdmFsdWUgb2YgdGhlIGNvbnRyb2wgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRDdHJsVmFsKGN0cmw6IE1nQ29udHJvbEJhc2UpOiBzdHJpbmcge1xyXG4gICAgLy8gUUNSICM3NDUxMTc6IE1ha2Ugc3VyZSB0aGF0IGlmIHRoZSBjb250ZW50cyBvZiBhIGNvbnRyb2wgd2VyZSBjaGFuZ2VkXHJcbiAgICAvLyB0aGVuIHRoZSBjaGFuZ2VzIGFyZSBhcHBsaWVkIGJlZm9yZSBleGFtaW5pbmcgaXRzIHZhbHVlLlxyXG4gICAgcmV0dXJuIENvbW1hbmRzLmdldFZhbHVlKGN0cmwsIGN0cmwuZ2V0RGlzcGxheUxpbmUodHJ1ZSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldCByZWFkIG9ubHkgZm9yIGNvbnRyb2xzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj50aGUgY29udHJvbCB0byBjaGFuZ2UgaXRzIHByb3BlcnR5IDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpc1JlYWRPbmx5XCI+Ym9vbGVhbiA8L3BhcmFtPlxyXG4gIHN0YXRpYyBhc3luYyBTZXRSZWFkT25seUNvbnRyb2woY3RybDogTWdDb250cm9sQmFzZSwgaXNSZWFkT25seTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGN0cmwuaXNUZXh0Q29udHJvbCgpIHx8IGN0cmwuSXNSZXBlYXRhYmxlKSAvLyBEZWZlY3QgMTMxODAyOiBTZXQgUmVhZE9ubHkgZm9yIFJpY2ggVGV4dCBjb250cm9sIGluIFRhYmxlIEhlYWRlciBhbmQgZGVmZWN0IDEzMTcwNDogaW4gZ2VuZXJhbCBmb3IgUmljaCBUZXh0LlxyXG4gICAge1xyXG4gICAgICAvLyBKUE46IElNRSBzdXBwb3J0IChlbmFibGUgSU1FIGluIHF1ZXJ5IG1vZGUpXHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSB7XHJcbiAgICAgICAgaWYgKGF3YWl0IGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKS5jaGVja1Byb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfTE9DQVRFX0lOX1FVRVJZLCBmYWxzZSkpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCBjdHJsLCBjdHJsLmdldERpc3BsYXlMaW5lKGZhbHNlKSwgSHRtbFByb3BlcnRpZXMuUmVhZE9ubHksIGlzUmVhZE9ubHkpO1xyXG5cclxuICAgICAgQ29tbWFuZHMuYmVnaW5JbnZva2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+IE9wZW4gdGhlIGZvcm0uIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZ0Zvcm1cIj5mb3JtIHRvIGJlIG9wZW5lZC48L3BhcmFtPlxyXG4gIHN0YXRpYyBPcGVuRm9ybShtZ0Zvcm06IE1nRm9ybUJhc2UpOiB2b2lkIHtcclxuICAgIC8vIG5vbiBpbnRlcmFjdGl2ZSBjYW4gY2hvb3NlIG5vdCB0byBvcGVuIHRoZSB3aW5kb3cuXHJcbiAgICBpZiAoIW1nRm9ybS5PcGVuZWQgJiYgKG1nRm9ybS5nZXRUYXNrKCkuSXNJbnRlcmFjdGl2ZSB8fCBtZ0Zvcm0uZ2V0VGFzaygpLmlzT3BlbldpbigpKSkge1xyXG4gICAgICBpZiAoIW1nRm9ybS5pc1N1YkZvcm0oKSkge1xyXG4gICAgICAgIC8vIGlmIHRoZSBmb3JtIGlzIHRvIGJlIG9wZW5lZCBhcyBhIG1vZGFsLCB0aGVuIGluY3JlbWVudCB0aGUgbW9kYWwgY291bnQgb24gaXRzIGZyYW1lIHdpbmRvdy5cclxuICAgICAgICBpZiAobWdGb3JtLmlzRGlhbG9nKCkpIHtcclxuICAgICAgICAgIHRoaXMuSXNPdmVybGF5T3BlbiA9IHRydWU7XHJcblxyXG4gICAgICAgICAgbGV0IHRvcE1vc3RGcmFtZUZvcm06IE1nRm9ybUJhc2UgPSBtZ0Zvcm0uZ2V0VG9wTW9zdEZyYW1lRm9ybSgpO1xyXG4gICAgICAgICAgaWYgKHRvcE1vc3RGcmFtZUZvcm0gIT09IG51bGwpXHJcbiAgICAgICAgICAgIHRvcE1vc3RGcmFtZUZvcm0uVXBkYXRlTW9kYWxGb3Jtc0NvdW50KG1nRm9ybSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICAvLyBpZiAoIW1nRm9ybS5pc1N1YkZvcm0oKSkge1xyXG4gICAgICAvLyAgIGxldCBmb3JtTmFtZTogc3RyaW5nID0gbWdGb3JtLlVuaXF1ZU5hbWU7XHJcbiAgICAgIC8vICAgVUlCcmlkZ2UuZ2V0SW5zdGFuY2UoKS5PcGVuRm9ybShmb3JtTmFtZSk7XHJcblxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAvLyAgIGxldCBpbnB1dENvbnRyb2xzID0gbWdGb3JtLkdldExpc3RPZklucHV0Q29udHJvbHMoKTtcclxuICAgICAgLy8gLy9cclxuICAgICAgLy8gLy8gICBKU0JyaWRnZS5JbnN0YW5jZS5PcGVuU3ViRm9ybSh0aGlzLmdldFN1YkZvcm1DdHJsKCkuZ2V0TmFtZSgpLCBQYXJlbnRGb3JtLmdldFRhc2soKS5nZXRUYXNrVGFnKCksIGdldFByb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STV9OQU1FKS5nZXRWYWx1ZSgpLCBfdGFzay5nZXRUYXNrVGFnKCksIGlucHV0Q29udHJvbHMpO1xyXG4gICAgICAvLyAvLyB9XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIG1nRm9ybS5PcGVuZWQgPSB0cnVlO1xyXG5cclxuICAgICAgQ29tbWFuZHMuYmVnaW5JbnZva2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gUGVyZm9ybXMgZmlyc3QgcmVmcmVzaCBmb3IgdGhlIHRhYmxlIGNvbnRyb2wgPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBhc3luYyBEb0ZpcnN0UmVmcmVzaFRhYmxlKG1nRm9ybTogTWdGb3JtQmFzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKG1nRm9ybSAhPT0gbnVsbCAmJiAhbWdGb3JtLmlnbm9yZUZpcnN0UmVmcmVzaFRhYmxlKSB7XHJcbiAgICAgIG1nRm9ybS5pZ25vcmVGaXJzdFJlZnJlc2hUYWJsZSA9IHRydWU7XHJcbiAgICAgIGF3YWl0IG1nRm9ybS5maXJzdFRhYmxlUmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHJpZXZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FyZXQsIHdpdGhpbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRleHRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPnRoZSBjb250cm9sIHdoaWNoIGlzIGFzc3VtZWQgdG8gY29udGFpbiB0aGUgc2VsZWN0ZWQgdGV4dCA8L3BhcmFtPlxyXG4gIHN0YXRpYyBDYXJldFBvc0dldChjdHJsOiBNZ0NvbnRyb2xCYXNlKTogbnVtYmVyIHtcclxuICAgIGxldCBjYXJldFBvczogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAoY3RybC5pc1RleHRDb250cm9sKCkpXHJcbiAgICAgIGNhcmV0UG9zID0gQ29tbWFuZHMuY2FyZXRQb3NHZXQoY3RybCwgY3RybC5nZXREaXNwbGF5TGluZSh0cnVlKSk7XHJcblxyXG4gICAgcmV0dXJuIGNhcmV0UG9zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDbGVhciB0aGUgc3RhdHVzIGJhciBkZXBlbmRpbmcgb24gdGhlIGNvbnRyb2wgc3BlY2lmaWMgc3RhdHVzIG1lc3NhZ2Ugb3IgZm9ybSBzcGVjaWZpYyBzdGF0dXMgbWVzc2FnZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGFza1wiPnRhc2s8L3BhcmFtPlxyXG4gIHN0YXRpYyBDbGVhclN0YXR1c0Jhcih0YXNrOiBHdWlUYXNrQmFzZSk6IHZvaWQge1xyXG4gICAgbGV0IGN1cnJlbnRQYXJrZWRDb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gdGFzay5nZXRMYXN0UGFya2VkQ3RybCgpO1xyXG5cclxuICAgIGlmIChjdXJyZW50UGFya2VkQ29udHJvbCAhPT0gbnVsbCAmJiAhTlN0cmluZy5Jc051bGxPckVtcHR5KGN1cnJlbnRQYXJrZWRDb250cm9sLlByb21wdEhlbHApKVxyXG4gICAgICB0YXNrLldyaXRlVG9NZXNzYWdlUGFuZShjdXJyZW50UGFya2VkQ29udHJvbC5Qcm9tcHRIZWxwLCBmYWxzZSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIE1hbmFnZXIuQ2xlYW5NZXNzYWdlUGFuZSh0YXNrKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjbGVhbiB0aGUgc3RhdHVzIGJhclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrXCI+PC9wYXJhbT5cclxuICBzdGF0aWMgQ2xlYW5NZXNzYWdlUGFuZSh0YXNrOiBHdWlUYXNrQmFzZSk6IHZvaWQge1xyXG4gICAgdGFzay5Xcml0ZVRvTWVzc2FnZVBhbmUoTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5EZWZhdWx0U3RhdHVzTXNnLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE1lc3NhZ2Ugc3RyaW5nIHRvIGJlIGRpc3BsYXllZCBvbiBzdGF0dXMgYmFyIG9yIGluIE1lc3NhZ2UgYm94XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1zZ1wiPiBpbnB1dCBtZXNzYWdlIHN0cmluZyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gb3V0cHV0IG1lc3NhZ2Ugc3RyaW5nIDwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0TWVzc2FnZShtc2c6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAobXNnID09PSBudWxsKVxyXG4gICAgICBtc2cgPSBcIlwiO1xyXG4gICAgZWxzZSBpZiAobXNnLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGlkeE9mQ2FycmlhZ2U6IG51bWJlciA9IG1zZy5pbmRleE9mKFwiXFxyXCIpO1xyXG4gICAgICBpZiAoaWR4T2ZDYXJyaWFnZSAhPT0gLTEpXHJcbiAgICAgICAgbXNnID0gbXNnLnN1YnN0cigwLCBpZHhPZkNhcnJpYWdlKTtcclxuXHJcbiAgICAgIGxldCBpZHhPZk5ld0xpbmU6IG51bWJlciA9IG1zZy5pbmRleE9mKFwiXFxuXCIpO1xyXG4gICAgICBpZiAoaWR4T2ZOZXdMaW5lICE9PSAtMSlcclxuICAgICAgICBtc2cgPSBtc2cuc3Vic3RyKDAsIGlkeE9mTmV3TGluZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1zZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBVc2VkIHRvIHB1dCB0aGUgdGV4dCBvbiBhIHRleHQgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsXCI+IDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0ZXh0XCI+IDwvcGFyYW0+XHJcbiAgc3RhdGljIFNldEVkaXRUZXh0KGN0cmw6IE1nQ29udHJvbEJhc2UsIHRleHQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgQ29tbWFuZHMuc2V0RWRpdFRleHQoY3RybCwgY3RybC5nZXREaXNwbGF5TGluZSh0cnVlKSwgdGV4dCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEluc2VydCB0ZXh0IHRvIGEgdGV4dCBjb250cm9sIGF0IGEgZ2l2ZW4gcG9zaXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN0cmxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0YXJ0UG9zaXRpb25cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRleHRUb0luc2VydFwiPjwvcGFyYW0+XHJcbiAgc3RhdGljIEluc2VydEVkaXRUZXh0KGN0cmw6IE1nQ29udHJvbEJhc2UsIHN0YXJ0UG9zaXRpb246IG51bWJlciwgdGV4dFRvSW5zZXJ0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIENvbW1hbmRzLmluc2VydEVkaXRUZXh0KGN0cmwsIGN0cmwuZ2V0RGlzcGxheUxpbmUodHJ1ZSksIHN0YXJ0UG9zaXRpb24sIHRleHRUb0luc2VydCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIFRvb2x0aXBUaW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHJldHVybnMgVG9vbHRpcFRpbWVvdXQ8L3JldHVybnM+XHJcbiAgc3RhdGljIEdldFRvb2x0aXBUaW1lb3V0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VG9vbHRpcFRpbWVvdXQoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJuIFNwZWNpYWxFZGl0TGVmdEFsaWduXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRTcGVjaWFsRWRpdExlZnRBbGlnbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTcGVjaWFsRWRpdExlZnRBbGlnbigpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybnMgZGVmYXVsdCBkYXRlIGZvcm1hdCBkZXBlbmRpbmcgb24gZGF0ZSBtb2RlIGFuZCBkYXRlIHNlcGFyYXRvci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gU3RyaW5nIGRlZmF1bHQgZGF0ZSBmb3JtYXQ8L3JldHVybnM+XHJcbiAgc3RhdGljIEdldERlZmF1bHREYXRlRm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICBsZXQgZGF0ZUZvcm1hdDogc3RyaW5nID0gXCJcIjtcclxuICAgIGxldCBkYXRlU2VwZXJhdG9yOiBzdHJpbmcgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlKCk7XHJcblxyXG4gICAgLy8gQXJyYW5nZSBkYXRlIGZvcm1hdCBhY2NvcmRpbmcgdG8gdGhlIGRhdGUgbW9kZS5cclxuICAgIHN3aXRjaCAoR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUoMCkpIHtcclxuICAgICAgY2FzZSAnUyc6IC8vIFNjYW5kaW5hdmlhblxyXG4gICAgICAgIGRhdGVGb3JtYXQgPSBcIllZWVlcIiArIGRhdGVTZXBlcmF0b3IgKyBcIk1NXCIgKyBkYXRlU2VwZXJhdG9yICsgXCJERFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnQic6IC8vIEJ1ZGRoaXN0XHJcblxyXG4gICAgICBjYXNlICdFJzogLy8gRXVyb3BlYW5cclxuICAgICAgICBkYXRlRm9ybWF0ID0gXCJERFwiICsgZGF0ZVNlcGVyYXRvciArIFwiTU1cIiArIGRhdGVTZXBlcmF0b3IgKyBcIllZWVlcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ0EnOiAvLyBBbWVyaWNhblxyXG4gICAgICAgIGRhdGVGb3JtYXQgPSBcIk1NXCIgKyBkYXRlU2VwZXJhdG9yICsgXCJERFwiICsgZGF0ZVNlcGVyYXRvciArIFwiWVlZWVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGVGb3JtYXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmV0dXJuIGRlZmF1bHQgdGltZSBmb3JtYXQgdXNpbmcgdGltZSBzZXBhcmF0b3IuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXREZWZhdWx0VGltZUZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRpbWVTZXBlcmF0b3I6IHN0cmluZyA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRpbWUoKTtcclxuICAgIGxldCB0aW1lRm9ybWF0OiBzdHJpbmcgPSBcIkhIXCIgKyB0aW1lU2VwZXJhdG9yICsgXCJNTVwiICsgdGltZVNlcGVyYXRvciArIFwiU1NcIjtcclxuICAgIHJldHVybiB0aW1lRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXRzIHRoZSBydW50aW1lIGNvbnRleHQgYmVsb25ncyB0byB0aGUgY3VycmVudCB0aHJlYWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+UnVudGltZUNvbnRleHRCYXNlPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRDdXJyZW50UnVudGltZUNvbnRleHQoKTogUnVudGltZUNvbnRleHRCYXNlIHtcclxuICAgIHJldHVybiBFdmVudHMuR2V0UnVudGltZUNvbnRleHQoTWFuYWdlci5HZXRDdXJyZW50Q29udGV4dElEKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXRzIHRoZSBjb250ZXh0SUQgdXNpbmcgdGhlIEd1aU1nRm9ybS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1nT2JqZWN0XCI+TWFnaWMgT2JqZWN0IC0gR3VpTWdGb3JtL0d1aU1nQ29udHJvbC9Mb2dpY2FsIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5jb250ZXh0SUQ8L3JldHVybnM+XHJcbiAgc3RhdGljIEdldENvbnRleHRJRChtZ09iamVjdDogYW55KTogbnVtYmVyIHtcclxuICAgIGxldCBndWlNZ0Zvcm06IEd1aU1nRm9ybSA9IG51bGw7XHJcblxyXG4gICAgaWYgKG1nT2JqZWN0IGluc3RhbmNlb2YgR3VpTWdDb250cm9sKVxyXG4gICAgICBndWlNZ0Zvcm0gPSAoPEd1aU1nQ29udHJvbD5tZ09iamVjdCkuR3VpTWdGb3JtO1xyXG4gICAgZWxzZSBpZiAobWdPYmplY3QgaW5zdGFuY2VvZiBHdWlNZ0Zvcm0pXHJcbiAgICAgIGd1aU1nRm9ybSA9IDxHdWlNZ0Zvcm0+bWdPYmplY3Q7XHJcblxyXG4gICAgcmV0dXJuIEV2ZW50cy5HZXRDb250ZXh0SUQoZ3VpTWdGb3JtKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2hvd3Mgd2luZG93cyBoZWxwLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmlsZVBhdGhcIj5wYXRoIG9mIHRoZSBoZWxwIGZpbGUuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJoZWxwQ21kXCI+aGVscCBjb21tYW5kLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaGVscEtleVwiPnNlYXJjaCBrZXkgd29yZC48L3BhcmFtPlxyXG4gIHN0YXRpYyBTaG93V2luZG93SGVscChmaWxlUGF0aDogc3RyaW5nLCBoZWxwQ21kOiBIZWxwQ29tbWFuZCwgaGVscEtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiBTcGVjaWFsVmFsTmV3UG9saWN5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBzdGF0aWMgR2V0U3BlY2lhbFZhbE5ld1BvbGljeSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTcGVjaWFsVmFsTmV3UG9saWN5KCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyBoZWxwZXIgY2xhc3MgZm9yIHNldHRpbmcvcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNvbnRleHQgSUQuXHJcbi8vLyBXZSByZXF1aXJlIHRoaXMgY2xhc3Mgc3BlY2lmaWNhbGx5IGZvciBNb2RhbCB3aW5kb3dzLiBXaGVuIHdlIG9wZW4gYSBtb2RhbCB3aW5kb3cgdGhlblxyXG4vLy8gaXQgd2FpdHMgaW4gR3VpVGhyZWFkLiBNZWFuIHdoaWxlIEd1aVRocmVhZCBjYW4gcmVjZWl2ZSB0aGUgZXZlbnRzIG9mIG90aGVyIGNvbnRleHQgYW5kXHJcbi8vLyBhZnRlciBwcm9jZXNzaW5nIHRoZXNlIGV2ZW50cywgd2Ugc2hvdWxkIHJlc2V0IHRoZSBjb250ZXh0SUQgb2YgdGhlIE1vZGFsIHdpbmRvd3MgYmVjYXVzZVxyXG4vLy8gaXQgd2lsbCBiZSB1c2VkIGZvciBsb2dnaW5nIHRoZSBldmVudHMgd2hlbiB3ZSBjbG9zZSB0aGUgbW9kYWwgd2luZG93LlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgQ29udGV4dElER3VhcmQge1xyXG4gIHByaXZhdGUgX3ByZXZDb250ZXh0SUQ6IHN0cmluZyA9ICdcXDAnO1xyXG5cclxuICAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seS5cclxuICAvLyBJdCB3aWxsIGhvbGQgdGhlIGZpbGUgbmFtZSBmcm9tIHdoaWNoIHRoZSBvYmplY3Qgb2YgQ29udGV4dElER3VhcmQgaXMgY3JlYXRlZC5cclxuICBwcml2YXRlIF9maWxlTmFtZTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKTtcclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0SUQ6IHN0cmluZyk7XHJcbiAgY29uc3RydWN0b3IoY29udGV4dElEPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKGNvbnRleHRJRCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcmV2Q29udGV4dElEID0gTWFuYWdlci5HZXRDdXJyZW50Q29udGV4dElEKCk7XHJcbiAgICB0aGlzLlNhdmVGaWxlbmFtZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKGNvbnRleHRJRDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLlNldEN1cnJlbnQoY29udGV4dElEKTtcclxuICAgIHRoaXMuU2F2ZUZpbGVuYW1lKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldHMgdGhlIGNvbnRleHQgSUQgdG8gJ2d1YXJkJy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRleHRJRFwiPm5ldyBjb250ZXh0IElEIHRvICdndWFyZCcuPC9wYXJhbT5cclxuICBTZXRDdXJyZW50KGNvbnRleHRJRDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoY29udGV4dElEICE9PSB0aGlzLl9wcmV2Q29udGV4dElEKSB7XHJcbiAgICAgIHRoaXMuX3ByZXZDb250ZXh0SUQgPSBjb250ZXh0SUQ7XHJcbiAgICAgIE1hbmFnZXIuU2V0Q3VycmVudENvbnRleHRJRChjb250ZXh0SUQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgdGhlIGZpbGUgbmFtZSBmcm9tIHdoaWNoIHRoZSBDb250ZXh0SURHdWFyZCBpcyBiZWluZyBjcmVhdGVkLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBTYXZlRmlsZW5hbWUoKTogdm9pZCB7XHJcbiAgICBsZXQgc3RhY2tGcmFtZTogU3RhY2tGcmFtZSA9IG5ldyBTdGFja0ZyYW1lKDEsIHRydWUpO1xyXG4gICAgdGhpcy5fZmlsZU5hbWUgPSBzdGFja0ZyYW1lLkdldEZpbGVOYW1lKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRGlzcG9zZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9wcmV2Q29udGV4dElEICE9PSBNYW5hZ2VyLkdldEN1cnJlbnRDb250ZXh0SUQoKSlcclxuICAgICAgTWFuYWdlci5TZXRDdXJyZW50Q29udGV4dElEKHRoaXMuX3ByZXZDb250ZXh0SUQpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,15 +1,11 @@
1
- // @dynamic
2
1
  export class UIBridge {
3
2
  constructor() {
4
- // define callbacks
5
3
  this.getInteractiveCallback = null;
6
4
  this.executeCommandsCallback = null;
7
- // do something construct...
8
5
  }
9
6
  static getInstance() {
10
7
  if (!UIBridge.instance) {
11
8
  UIBridge.instance = new UIBridge();
12
- // ... any one time initialization goes here ...
13
9
  }
14
10
  return UIBridge.instance;
15
11
  }
@@ -29,9 +25,8 @@ export class UIBridge {
29
25
  registerExecuteCommandsCallback(executeCommandsCallback) {
30
26
  this.executeCommandsCallback = executeCommandsCallback;
31
27
  }
32
- // used to save stub data
33
28
  saveData(data) {
34
29
  console.log(data);
35
30
  }
36
31
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVUlCcmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL1VJQnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLFdBQVc7QUFDVCxNQUFNLE9BQU8sUUFBUTtJQVFuQjtRQU5BLG1CQUFtQjtRQUNuQiwyQkFBc0IsR0FBMkIsSUFBSSxDQUFDO1FBQ3RELDRCQUF1QixHQUE0QixJQUFJLENBQUM7UUFLdEQsNEJBQTRCO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVztRQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUN0QixRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDbkMsZ0RBQWdEO1NBQ2pEO1FBQ0QsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFHTSx5QkFBeUIsQ0FBQyxPQUFzQjtRQUNyRCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVNLGVBQWUsQ0FBQyxRQUFzQjtRQUMzQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtZQUM1RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7U0FFeEM7SUFDSCxDQUFDO0lBR00sMkJBQTJCLENBQUMscUJBQTRDO1FBQzdFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxxQkFBcUIsQ0FBQztJQUN0RCxDQUFDO0lBRU0sK0JBQStCLENBQUMsdUJBQWdEO1FBQ3JGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztJQUN6RCxDQUFDO0lBRUQseUJBQXlCO0lBQ2xCLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtHdWlDb21tYW5kfSBmcm9tIFwiLi9ndWkvbG93L0d1aUNvbW1hbmRcIjtcclxuaW1wb3J0IHtHdWlJbnRlcmFjdGl2ZX0gZnJvbSBcIi4vZ3VpL2xvdy9HdWlJbnRlcmFjdGl2ZVwiO1xyXG5cclxuXHJcbmV4cG9ydCBkZWNsYXJlIHR5cGUgRXhlY3V0ZUNvbW1hbmRzQ2FsbGJhY2sgPSAoY29tbWFuZHM6IEd1aUNvbW1hbmRbXSkgPT4gdm9pZDtcclxuZXhwb3J0IGRlY2xhcmUgdHlwZSBHZXRJbnRyYWN0aXZlQ2FsbGJhY2sgPSAoY29tbWFuZDogR3VpSW50ZXJhY3RpdmUpID0+IHN0cmluZztcclxuXHJcbi8vIEBkeW5hbWljXHJcbiAgZXhwb3J0IGNsYXNzIFVJQnJpZGdlIHtcclxuXHJcbiAgICAvLyBkZWZpbmUgY2FsbGJhY2tzXHJcbiAgICBnZXRJbnRlcmFjdGl2ZUNhbGxiYWNrIDogR2V0SW50cmFjdGl2ZUNhbGxiYWNrID0gbnVsbDtcclxuICAgIGV4ZWN1dGVDb21tYW5kc0NhbGxiYWNrOiBFeGVjdXRlQ29tbWFuZHNDYWxsYmFjayA9IG51bGw7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFVJQnJpZGdlO1xyXG5cclxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgIC8vIGRvIHNvbWV0aGluZyBjb25zdHJ1Y3QuLi5cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7XHJcbiAgICAgIGlmICghVUlCcmlkZ2UuaW5zdGFuY2UpIHtcclxuICAgICAgICBVSUJyaWRnZS5pbnN0YW5jZSA9IG5ldyBVSUJyaWRnZSgpO1xyXG4gICAgICAgIC8vIC4uLiBhbnkgb25lIHRpbWUgaW5pdGlhbGl6YXRpb24gZ29lcyBoZXJlIC4uLlxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBVSUJyaWRnZS5pbnN0YW5jZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIEV4ZWN1dGVJbnRlcmFjdGl2ZUNvbW1hbmQoY29tbWFuZDpHdWlJbnRlcmFjdGl2ZSk6IHN0cmluZyB7XHJcbiAgICAgIGlmICh0aGlzLmdldEludGVyYWN0aXZlQ2FsbGJhY2sgIT0gbnVsbClcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRJbnRlcmFjdGl2ZUNhbGxiYWNrKCBjb21tYW5kKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4ZWN1dGVDb21tYW5kcyhjb21tYW5kczogR3VpQ29tbWFuZFtdKTogdm9pZCB7XHJcbiAgICAgIGlmICh0aGlzLmV4ZWN1dGVDb21tYW5kc0NhbGxiYWNrICE9IG51bGwgJiYgY29tbWFuZHMgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZUNvbW1hbmRzQ2FsbGJhY2soY29tbWFuZHMpO1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJJbnRlcmFjdGl2ZUNhbGxiYWNrKGdldEludHJhY3RpdmVDYWxsYmFjazogR2V0SW50cmFjdGl2ZUNhbGxiYWNrKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuZ2V0SW50ZXJhY3RpdmVDYWxsYmFjayA9IGdldEludHJhY3RpdmVDYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJFeGVjdXRlQ29tbWFuZHNDYWxsYmFjayhleGVjdXRlQ29tbWFuZHNDYWxsYmFjazogRXhlY3V0ZUNvbW1hbmRzQ2FsbGJhY2spOiB2b2lkIHtcclxuICAgICAgdGhpcy5leGVjdXRlQ29tbWFuZHNDYWxsYmFjayA9IGV4ZWN1dGVDb21tYW5kc0NhbGxiYWNrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHVzZWQgdG8gc2F2ZSBzdHViIGRhdGFcclxuICAgIHB1YmxpYyBzYXZlRGF0YShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG4iXX0=
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVUlCcmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL1VJQnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFFLE1BQU0sT0FBTyxRQUFRO0lBUW5CO1FBTEEsMkJBQXNCLEdBQTJCLElBQUksQ0FBQztRQUN0RCw0QkFBdUIsR0FBNEIsSUFBSSxDQUFDO0lBTXhELENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVztRQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUN0QixRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7U0FFcEM7UUFDRCxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUdNLHlCQUF5QixDQUFDLE9BQXNCO1FBQ3JELElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUk7WUFDckMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0MsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU0sZUFBZSxDQUFDLFFBQXNCO1FBQzNDLElBQUksSUFBSSxDQUFDLHVCQUF1QixJQUFJLElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQzVELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUV4QztJQUNILENBQUM7SUFHTSwyQkFBMkIsQ0FBQyxxQkFBNEM7UUFDN0UsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFDO0lBQ3RELENBQUM7SUFFTSwrQkFBK0IsQ0FBQyx1QkFBZ0Q7UUFDckYsSUFBSSxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0lBQ3pELENBQUM7SUFHTSxRQUFRLENBQUMsSUFBWTtRQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7R3VpQ29tbWFuZH0gZnJvbSBcIi4vZ3VpL2xvdy9HdWlDb21tYW5kXCI7XHJcbmltcG9ydCB7R3VpSW50ZXJhY3RpdmV9IGZyb20gXCIuL2d1aS9sb3cvR3VpSW50ZXJhY3RpdmVcIjtcclxuXHJcblxyXG5leHBvcnQgZGVjbGFyZSB0eXBlIEV4ZWN1dGVDb21tYW5kc0NhbGxiYWNrID0gKGNvbW1hbmRzOiBHdWlDb21tYW5kW10pID0+IHZvaWQ7XHJcbmV4cG9ydCBkZWNsYXJlIHR5cGUgR2V0SW50cmFjdGl2ZUNhbGxiYWNrID0gKGNvbW1hbmQ6IEd1aUludGVyYWN0aXZlKSA9PiBzdHJpbmc7XHJcblxyXG4vLyBAZHluYW1pY1xyXG4gIGV4cG9ydCBjbGFzcyBVSUJyaWRnZSB7XHJcblxyXG4gICAgLy8gZGVmaW5lIGNhbGxiYWNrc1xyXG4gICAgZ2V0SW50ZXJhY3RpdmVDYWxsYmFjayA6IEdldEludHJhY3RpdmVDYWxsYmFjayA9IG51bGw7XHJcbiAgICBleGVjdXRlQ29tbWFuZHNDYWxsYmFjazogRXhlY3V0ZUNvbW1hbmRzQ2FsbGJhY2sgPSBudWxsO1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBVSUJyaWRnZTtcclxuXHJcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAvLyBkbyBzb21ldGhpbmcgY29uc3RydWN0Li4uXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldEluc3RhbmNlKCkge1xyXG4gICAgICBpZiAoIVVJQnJpZGdlLmluc3RhbmNlKSB7XHJcbiAgICAgICAgVUlCcmlkZ2UuaW5zdGFuY2UgPSBuZXcgVUlCcmlkZ2UoKTtcclxuICAgICAgICAvLyAuLi4gYW55IG9uZSB0aW1lIGluaXRpYWxpemF0aW9uIGdvZXMgaGVyZSAuLi5cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gVUlCcmlkZ2UuaW5zdGFuY2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBFeGVjdXRlSW50ZXJhY3RpdmVDb21tYW5kKGNvbW1hbmQ6R3VpSW50ZXJhY3RpdmUpOiBzdHJpbmcge1xyXG4gICAgICBpZiAodGhpcy5nZXRJbnRlcmFjdGl2ZUNhbGxiYWNrICE9IG51bGwpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW50ZXJhY3RpdmVDYWxsYmFjayggY29tbWFuZCk7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBleGVjdXRlQ29tbWFuZHMoY29tbWFuZHM6IEd1aUNvbW1hbmRbXSk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy5leGVjdXRlQ29tbWFuZHNDYWxsYmFjayAhPSBudWxsICYmIGNvbW1hbmRzICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLmV4ZWN1dGVDb21tYW5kc0NhbGxiYWNrKGNvbW1hbmRzKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVySW50ZXJhY3RpdmVDYWxsYmFjayhnZXRJbnRyYWN0aXZlQ2FsbGJhY2s6IEdldEludHJhY3RpdmVDYWxsYmFjayk6IHZvaWQge1xyXG4gICAgICB0aGlzLmdldEludGVyYWN0aXZlQ2FsbGJhY2sgPSBnZXRJbnRyYWN0aXZlQ2FsbGJhY2s7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyRXhlY3V0ZUNvbW1hbmRzQ2FsbGJhY2soZXhlY3V0ZUNvbW1hbmRzQ2FsbGJhY2s6IEV4ZWN1dGVDb21tYW5kc0NhbGxiYWNrKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuZXhlY3V0ZUNvbW1hbmRzQ2FsbGJhY2sgPSBleGVjdXRlQ29tbWFuZHNDYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvLyB1c2VkIHRvIHNhdmUgc3R1YiBkYXRhXHJcbiAgICBwdWJsaWMgc2F2ZURhdGEoZGF0YTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuIl19
@@ -1 +1 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9lbnYvSUVudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbmNvZGluZyB9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSB0aGUgR1VJIG5hbWVzcGFjZSBmcm9tIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGludGVyZmFjZSBJRW52aXJvbm1lbnQge1xyXG5cclxuICBMYW5ndWFnZTogc3RyaW5nO1xyXG5cclxuICBTcGVjaWFsTnVtcGFkUGx1c0NoYXI6IGJvb2xlYW47XHJcblxyXG4gIFNwZWNpYWxPbGRab3JkZXI6IGJvb2xlYW47XHJcblxyXG4gIFNwZWNpYWxSZXN0b3JlTWF4aW1pemVkRm9ybTogYm9vbGVhbjtcclxuXHJcbiAgU3BlY2lhbElnbm9yZUJHaW5Nb2RpZnk6IGJvb2xlYW47XHJcblxyXG4gIElnbm9yZVJlcGxhY2VEZWNpbWFsU2VwYXJhdG9yOiBib29sZWFuO1xyXG5cclxuICAvLyBpbnN0cnVjdCBob3cgdG8gcmVmZXIgYSBmb3J3YXJkIHNsYXNoIC0gZWl0aGVyIGFzIGEgcmVsYXRpdmUgd2ViIHVybCwgb3IgYXMgYSBmaWxlIGluIHRoZSBmaWxlIHN5c3RlbS5cclxuICBGb3J3YXJkU2xhc2hVc2FnZTogc3RyaW5nO1xyXG5cclxuICBHZXREYXRlTW9kZShjb21wSWR4OiBudW1iZXIpOiBzdHJpbmc7XHJcblxyXG4gIEdldENlbnR1cnkoY29tcElkeDogbnVtYmVyKTogbnVtYmVyO1xyXG5cclxuICBHZXREYXRlKCk6IHN0cmluZztcclxuXHJcbiAgR2V0VGltZSgpOiBzdHJpbmc7XHJcblxyXG4gIEdldERlY2ltYWwoKTogc3RyaW5nO1xyXG5cclxuICBDYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvcigpOiBib29sZWFuO1xyXG5cclxuICBHZXRUaG91c2FuZHMoKTogc3RyaW5nO1xyXG5cclxuICBHZXREZWZhdWx0Q29sb3IoKTogbnVtYmVyO1xyXG5cclxuICBHZXREZWZhdWx0Rm9jdXNDb2xvcigpOiBudW1iZXI7XHJcblxyXG4gIEdldFRvb2x0aXBUaW1lb3V0KCk6IG51bWJlcjtcclxuXHJcbiAgR2V0U3BlY2lhbEVkaXRMZWZ0QWxpZ24oKTogYm9vbGVhbjtcclxuXHJcbiAgR2V0R1VJRCgpOiBzdHJpbmc7XHJcblxyXG4gIEdldENvbnRyb2xzUGVyc2lzdGVuY3lQYXRoKCk6IHN0cmluZztcclxuXHJcbiAgR2V0SW1lQXV0b09mZigpOiBib29sZWFuO1xyXG5cclxuICBHZXRMb2NhbEFzNDAwU2V0KCk6IGJvb2xlYW47XHJcblxyXG4gIEdldExvY2FsRmxhZyhmOiBzdHJpbmcpOiBib29sZWFuO1xyXG5cclxuICBHZXRTaWduaWZpY2FudE51bVNpemUoKTogbnVtYmVyO1xyXG5cclxuICBHZXREZWJ1Z0xldmVsKCk6IG51bWJlcjtcclxuXHJcbiAgR2V0RW5jb2RpbmcoKTogRW5jb2Rpbmc7XHJcblxyXG4gIEdldERyb3BVc2VyRm9ybWF0cygpOiBzdHJpbmc7XHJcblxyXG4gIEdldFNwZWNpYWxFbmdMb2dvbigpOiBib29sZWFuO1xyXG5cclxuICBHZXRTcGVjaWFsSWdub3JlQnV0dG9uRm9ybWF0KCk6IGJvb2xlYW47XHJcblxyXG4gIEdldFNwZWNpYWxTd2ZDb250cm9sTmFtZVByb3BlcnR5KCk6IGJvb2xlYW47XHJcblxyXG4gIEdldFNwZWNpYWxMb2dJbnRlcm5hbEV4Y2VwdGlvbnMoKTogYm9vbGVhbjtcclxuXHJcbiAgR2V0U3BlY2lhbFRleHRTaXplRmFjdG9yaW5nKCk6IGJvb2xlYW47XHJcblxyXG4gIEdldFNwZWNpYWxGbGF0RWRpdE9uQ2xhc3NpY1RoZW1lKCk6IGJvb2xlYW47XHJcblxyXG4gIEdldFNwZWNpYWxEaXNhYmxlTW91c2VXaGVlbCgpOiBib29sZWFuO1xyXG5cclxuICBnZXRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQoKTogbnVtYmVyO1xyXG5cclxuICBnZXRDb250ZXh0SW5hY3Rpdml0eVdhcm5pbmdUaW1lKCk6IG51bWJlcjtcclxuXHJcbiAgZ2V0SWRsZVRpbWUoY29tcElkeDogbnVtYmVyKTogbnVtYmVyO1xyXG5cclxuICBHZXRTcGVjaWFsVmFsTmV3UG9saWN5KCk6IGJvb2xlYW47XHJcbiAgR2V0U3BlY2lhbENhbmNlbE9uQ3JlYXRlKCk6IGJvb2xlYW47XHJcbn1cclxuIl19
1
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9lbnYvSUVudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbmNvZGluZyB9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSB0aGUgR1VJIG5hbWVzcGFjZSBmcm9tIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGludGVyZmFjZSBJRW52aXJvbm1lbnQge1xyXG5cclxuICBMYW5ndWFnZTogc3RyaW5nO1xyXG5cclxuICBTcGVjaWFsTnVtcGFkUGx1c0NoYXI6IGJvb2xlYW47XHJcblxyXG4gIFNwZWNpYWxPbGRab3JkZXI6IGJvb2xlYW47XHJcblxyXG4gIFNwZWNpYWxSZXN0b3JlTWF4aW1pemVkRm9ybTogYm9vbGVhbjtcclxuXHJcbiAgU3BlY2lhbElnbm9yZUJHaW5Nb2RpZnk6IGJvb2xlYW47XHJcblxyXG4gIElnbm9yZVJlcGxhY2VEZWNpbWFsU2VwYXJhdG9yOiBib29sZWFuO1xyXG5cclxuICAvLyBpbnN0cnVjdCBob3cgdG8gcmVmZXIgYSBmb3J3YXJkIHNsYXNoIC0gZWl0aGVyIGFzIGEgcmVsYXRpdmUgd2ViIHVybCwgb3IgYXMgYSBmaWxlIGluIHRoZSBmaWxlIHN5c3RlbS5cclxuICBGb3J3YXJkU2xhc2hVc2FnZTogc3RyaW5nO1xyXG5cclxuICBHZXREYXRlTW9kZShjb21wSWR4OiBudW1iZXIpOiBzdHJpbmc7XHJcblxyXG4gIEdldENlbnR1cnkoY29tcElkeDogbnVtYmVyKTogbnVtYmVyO1xyXG5cclxuICBHZXREYXRlKCk6IHN0cmluZztcclxuXHJcbiAgR2V0VGltZSgpOiBzdHJpbmc7XHJcblxyXG4gIEdldERlY2ltYWwoKTogc3RyaW5nO1xyXG5cclxuICBDYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvcigpOiBib29sZWFuO1xyXG5cclxuICBHZXRUaG91c2FuZHMoKTogc3RyaW5nO1xyXG5cclxuICBHZXREZWZhdWx0Q29sb3IoKTogbnVtYmVyO1xyXG5cclxuICBHZXREZWZhdWx0Rm9jdXNDb2xvcigpOiBudW1iZXI7XHJcblxyXG4gIEdldFRvb2x0aXBUaW1lb3V0KCk6IG51bWJlcjtcclxuXHJcbiAgR2V0U3BlY2lhbEVkaXRMZWZ0QWxpZ24oKTogYm9vbGVhbjtcclxuXHJcbiAgR2V0R1VJRCgpOiBzdHJpbmc7XHJcblxyXG4gIEdldENvbnRyb2xzUGVyc2lzdGVuY3lQYXRoKCk6IHN0cmluZztcclxuXHJcbiAgR2V0SW1lQXV0b09mZigpOiBib29sZWFuO1xyXG5cclxuICBHZXRMb2NhbEFzNDAwU2V0KCk6IGJvb2xlYW47XHJcblxyXG4gIHNldERlY2ltYWxTZXBhcmF0b3IodmFsdWU6IHN0cmluZykgOiB2b2lkO1xyXG5cclxuICBzZXRUaG91c2FuZHNTZXBhcmF0b3IodmFsdWU6IHN0cmluZykgOiB2b2lkO1xyXG5cclxuICBHZXRMb2NhbEZsYWcoZjogc3RyaW5nKTogYm9vbGVhbjtcclxuXHJcbiAgR2V0U2lnbmlmaWNhbnROdW1TaXplKCk6IG51bWJlcjtcclxuXHJcbiAgR2V0RGVidWdMZXZlbCgpOiBudW1iZXI7XHJcblxyXG4gIEdldEVuY29kaW5nKCk6IEVuY29kaW5nO1xyXG5cclxuICBHZXREcm9wVXNlckZvcm1hdHMoKTogc3RyaW5nO1xyXG5cclxuICBHZXRTcGVjaWFsRW5nTG9nb24oKTogYm9vbGVhbjtcclxuXHJcbiAgR2V0U3BlY2lhbElnbm9yZUJ1dHRvbkZvcm1hdCgpOiBib29sZWFuO1xyXG5cclxuICBHZXRTcGVjaWFsU3dmQ29udHJvbE5hbWVQcm9wZXJ0eSgpOiBib29sZWFuO1xyXG5cclxuICBHZXRTcGVjaWFsTG9nSW50ZXJuYWxFeGNlcHRpb25zKCk6IGJvb2xlYW47XHJcblxyXG4gIEdldFNwZWNpYWxUZXh0U2l6ZUZhY3RvcmluZygpOiBib29sZWFuO1xyXG5cclxuICBHZXRTcGVjaWFsRmxhdEVkaXRPbkNsYXNzaWNUaGVtZSgpOiBib29sZWFuO1xyXG5cclxuICBHZXRTcGVjaWFsRGlzYWJsZU1vdXNlV2hlZWwoKTogYm9vbGVhbjtcclxuXHJcbiAgZ2V0Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0KCk6IG51bWJlcjtcclxuXHJcbiAgZ2V0Q2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0KCk6IG51bWJlcjtcclxuXHJcbiAgZ2V0Q29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZSgpOiBudW1iZXI7XHJcblxyXG4gIGdldElkbGVUaW1lKGNvbXBJZHg6IG51bWJlcik6IG51bWJlcjtcclxuXHJcbiAgR2V0U3BlY2lhbFZhbE5ld1BvbGljeSgpOiBib29sZWFuO1xyXG4gIEdldFNwZWNpYWxDYW5jZWxPbkNyZWF0ZSgpOiBib29sZWFuO1xyXG59XHJcbiJdfQ==
@@ -1,3 +1,3 @@
1
1
  export class ControlBase {
2
2
  }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbEJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL2d1aS9Db250cm9sQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQWlCLFdBQVc7Q0FLakMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYWJzdHJhY3QgY2xhc3MgIENvbnRyb2xCYXNlIHtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0IFVuaXF1ZU5hbWUoKTogc3RyaW5nO1xyXG5cclxuICBhYnN0cmFjdCBnZXQgVGFza1RhZygpOiBzdHJpbmc7XHJcbn1cclxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbEJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL2d1aS9Db250cm9sQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQWlCLFdBQVc7Q0FLakMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYWJzdHJhY3QgY2xhc3MgIENvbnRyb2xCYXNlIHtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0IFVuaXF1ZU5hbWUoKTogc3RyaW5nO1xyXG5cclxuICBhYnN0cmFjdCBnZXQgVGFza1RhZygpOiBzdHJpbmc7XHJcbn1cclxuIl19