@magic-xpa/gui 4.1100.0-dev4110.27 → 4.1100.0-dev4110.271

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 (195) hide show
  1. package/README.md +7 -7
  2. package/{esm2020 → esm2022}/index.mjs +71 -71
  3. package/{esm2020 → esm2022}/magic-xpa-gui.mjs +1 -1
  4. package/esm2022/src/Commands.mjs +184 -0
  5. package/esm2022/src/Events.mjs +425 -0
  6. package/{esm2020 → esm2022}/src/EventsProcessor.mjs +66 -66
  7. package/{esm2020 → esm2022}/src/FocusManager.mjs +33 -33
  8. package/esm2022/src/GuiConstants.mjs +68 -0
  9. package/{esm2020 → esm2022}/src/GuiEnums.mjs +301 -300
  10. package/esm2022/src/GuiEnvironment.mjs +4 -0
  11. package/{esm2020 → esm2022}/src/IFlowMonitorQueue.mjs +1 -1
  12. package/esm2022/src/Manager.mjs +91 -0
  13. package/esm2022/src/UIBridge.mjs +33 -0
  14. package/{esm2020 → esm2022}/src/env/IEnvironment.mjs +1 -1
  15. package/{esm2020 → esm2022}/src/gui/ControlBase.mjs +2 -2
  16. package/esm2022/src/gui/GuiMgControl.mjs +123 -0
  17. package/{esm2020 → esm2022}/src/gui/GuiMgForm.mjs +3 -3
  18. package/esm2022/src/gui/KeyboardItem.mjs +135 -0
  19. package/esm2022/src/gui/LastFocusedVal.mjs +11 -0
  20. package/esm2022/src/gui/MgValue.mjs +16 -0
  21. package/{esm2020 → esm2022}/src/gui/PropParentInterface.mjs +1 -1
  22. package/{esm2020 → esm2022}/src/gui/low/DialogHandler.mjs +6 -6
  23. package/esm2022/src/gui/low/GuiCommand.mjs +68 -0
  24. package/esm2022/src/gui/low/GuiCommandQueue.mjs +35 -0
  25. package/esm2022/src/gui/low/GuiInteractive.mjs +178 -0
  26. package/esm2022/src/gui/low/Style.mjs +20 -0
  27. package/esm2022/src/management/RuntimeContextBase.mjs +42 -0
  28. package/esm2022/src/management/data/BlobType.mjs +281 -0
  29. package/esm2022/src/management/data/DcValues.mjs +214 -0
  30. package/{esm2020 → esm2022}/src/management/data/DcValuesBuilderBase.mjs +95 -95
  31. package/esm2022/src/management/data/FieldDef.mjs +331 -0
  32. package/{esm2020 → esm2022}/src/management/data/FieldsTable.mjs +54 -54
  33. package/esm2022/src/management/data/GuiDataViewBase.mjs +88 -0
  34. package/esm2022/src/management/data/GuiFieldBase.mjs +82 -0
  35. package/{esm2020 → esm2022}/src/management/data/IRecord.mjs +1 -1
  36. package/{esm2020 → esm2022}/src/management/data/IReferencedObject.mjs +1 -1
  37. package/esm2022/src/management/data/NUM_TYPE.mjs +1739 -0
  38. package/esm2022/src/management/data/ObjectReferenceBase.mjs +48 -0
  39. package/esm2022/src/management/data/ObjectReferencesCollection.mjs +27 -0
  40. package/{esm2020 → esm2022}/src/management/data/RecordUtils.mjs +360 -360
  41. package/esm2022/src/management/data/VectorType.mjs +612 -0
  42. package/esm2022/src/management/data/VectorTypeBase.mjs +88 -0
  43. package/{esm2020 → esm2022}/src/management/events/IActionManager.mjs +1 -1
  44. package/{esm2020 → esm2022}/src/management/events/IGuiEventsManager.mjs +1 -1
  45. package/esm2022/src/management/exp/ExpressionInterface.mjs +244 -0
  46. package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +305 -0
  47. package/esm2022/src/management/gui/ControlTable.mjs +118 -0
  48. package/esm2022/src/management/gui/DisplayConvertor.mjs +1649 -0
  49. package/esm2022/src/management/gui/FieldValidator.mjs +711 -0
  50. package/esm2022/src/management/gui/GuiControlPropertyAdapter.mjs +24 -0
  51. package/{esm2020 → esm2022}/src/management/gui/GuiFormPropertyAdapter.mjs +10 -10
  52. package/esm2022/src/management/gui/HebrewDate.mjs +278 -0
  53. package/esm2022/src/management/gui/Helps.mjs +237 -0
  54. package/esm2022/src/management/gui/MgControlBase.mjs +1869 -0
  55. package/esm2022/src/management/gui/MgFormBase.mjs +741 -0
  56. package/esm2022/src/management/gui/PIC.mjs +1185 -0
  57. package/{esm2020 → esm2022}/src/management/gui/PropDefaults.mjs +229 -229
  58. package/{esm2020 → esm2022}/src/management/gui/PropInterface.mjs +246 -245
  59. package/esm2022/src/management/gui/PropTable.mjs +221 -0
  60. package/esm2022/src/management/gui/Property.mjs +1362 -0
  61. package/esm2022/src/management/gui/ValidationDetails.mjs +251 -0
  62. package/{esm2020 → esm2022}/src/management/gui/ValidationDetailsBase.mjs +93 -93
  63. package/{esm2020 → esm2022}/src/management/gui/WrongFormatException.mjs +29 -29
  64. package/esm2022/src/management/tasks/GuiDataCollection.mjs +4 -0
  65. package/esm2022/src/management/tasks/GuiTaskBase.mjs +511 -0
  66. package/{esm2020 → esm2022}/src/management/tasks/IMGDataTable.mjs +1 -1
  67. package/{esm2020 → esm2022}/src/management/tasks/ITask.mjs +1 -1
  68. package/esm2022/src/management/tasks/MgTimer.mjs +21 -0
  69. package/esm2022/src/management/tasks/TaskDefinitionId.mjs +54 -0
  70. package/{esm2020 → esm2022}/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -41
  71. package/{esm2020 → esm2022}/src/util/MemoryUtil.mjs +34 -34
  72. package/esm2022/src/util/ObjectReference.mjs +36 -0
  73. package/esm2022/src/util/UsernamePasswordCredentials.mjs +52 -0
  74. package/{fesm2020 → fesm2022}/magic-xpa-gui.mjs +16090 -16075
  75. package/fesm2022/magic-xpa-gui.mjs.map +1 -0
  76. package/index.d.ts +70 -70
  77. package/package.json +6 -12
  78. package/src/Commands.d.ts +40 -39
  79. package/src/Events.d.ts +157 -155
  80. package/src/EventsProcessor.d.ts +13 -13
  81. package/src/FocusManager.d.ts +8 -8
  82. package/src/GuiConstants.d.ts +65 -65
  83. package/src/GuiEnums.d.ts +283 -282
  84. package/src/GuiEnvironment.d.ts +4 -4
  85. package/src/IFlowMonitorQueue.d.ts +3 -3
  86. package/src/Manager.d.ts +26 -26
  87. package/src/UIBridge.d.ts +16 -16
  88. package/src/env/IEnvironment.d.ts +31 -31
  89. package/src/gui/ControlBase.d.ts +4 -4
  90. package/src/gui/GuiMgControl.d.ts +38 -38
  91. package/src/gui/GuiMgForm.d.ts +3 -3
  92. package/src/gui/KeyboardItem.d.ts +18 -18
  93. package/src/gui/LastFocusedVal.d.ts +7 -7
  94. package/src/gui/MgValue.d.ts +15 -15
  95. package/src/gui/PropParentInterface.d.ts +13 -13
  96. package/src/gui/low/DialogHandler.d.ts +4 -4
  97. package/src/gui/low/GuiCommand.d.ts +37 -37
  98. package/src/gui/low/GuiCommandQueue.d.ts +13 -13
  99. package/src/gui/low/GuiInteractive.d.ts +55 -53
  100. package/src/gui/low/Style.d.ts +19 -19
  101. package/src/management/RuntimeContextBase.d.ts +23 -23
  102. package/src/management/data/BlobType.d.ts +29 -29
  103. package/src/management/data/DcValues.d.ts +33 -33
  104. package/src/management/data/DcValuesBuilderBase.d.ts +17 -17
  105. package/src/management/data/FieldDef.d.ts +53 -53
  106. package/src/management/data/FieldsTable.d.ts +16 -16
  107. package/src/management/data/GuiDataViewBase.d.ts +27 -27
  108. package/src/management/data/GuiFieldBase.d.ts +17 -17
  109. package/src/management/data/IRecord.d.ts +12 -12
  110. package/src/management/data/IReferencedObject.d.ts +5 -5
  111. package/src/management/data/NUM_TYPE.d.ts +103 -103
  112. package/src/management/data/ObjectReferenceBase.d.ts +16 -16
  113. package/src/management/data/ObjectReferencesCollection.d.ts +10 -10
  114. package/src/management/data/RecordUtils.d.ts +21 -21
  115. package/src/management/data/VectorType.d.ts +52 -52
  116. package/src/management/data/VectorTypeBase.d.ts +8 -8
  117. package/src/management/events/IActionManager.d.ts +7 -7
  118. package/src/management/events/IGuiEventsManager.d.ts +20 -20
  119. package/src/management/exp/ExpressionInterface.d.ts +242 -242
  120. package/src/management/exp/GuiExpressionEvaluator.d.ts +47 -47
  121. package/src/management/gui/ControlTable.d.ts +28 -28
  122. package/src/management/gui/DisplayConvertor.d.ts +103 -103
  123. package/src/management/gui/FieldValidator.d.ts +35 -35
  124. package/src/management/gui/GuiControlPropertyAdapter.d.ts +40 -40
  125. package/src/management/gui/GuiFormPropertyAdapter.d.ts +17 -17
  126. package/src/management/gui/HebrewDate.d.ts +46 -46
  127. package/src/management/gui/Helps.d.ts +51 -51
  128. package/src/management/gui/MgControlBase.d.ts +225 -223
  129. package/src/management/gui/MgFormBase.d.ts +160 -160
  130. package/src/management/gui/PIC.d.ts +108 -108
  131. package/src/management/gui/PropDefaults.d.ts +7 -7
  132. package/src/management/gui/PropInterface.d.ts +244 -243
  133. package/src/management/gui/PropTable.d.ts +33 -33
  134. package/src/management/gui/Property.d.ts +121 -121
  135. package/src/management/gui/ValidationDetails.d.ts +52 -52
  136. package/src/management/gui/ValidationDetailsBase.d.ts +14 -14
  137. package/src/management/gui/WrongFormatException.d.ts +9 -9
  138. package/src/management/tasks/GuiDataCollection.d.ts +4 -4
  139. package/src/management/tasks/GuiTaskBase.d.ts +150 -150
  140. package/src/management/tasks/IMGDataTable.d.ts +10 -10
  141. package/src/management/tasks/ITask.d.ts +6 -6
  142. package/src/management/tasks/MgTimer.d.ts +8 -8
  143. package/src/management/tasks/TaskDefinitionId.d.ts +16 -16
  144. package/src/management/tasks/TaskDefinitionIdTableSaxHandler.d.ts +7 -7
  145. package/src/util/MemoryUtil.d.ts +6 -6
  146. package/src/util/ObjectReference.d.ts +9 -9
  147. package/src/util/UsernamePasswordCredentials.d.ts +18 -18
  148. package/esm2020/src/Commands.mjs +0 -177
  149. package/esm2020/src/Events.mjs +0 -420
  150. package/esm2020/src/GuiConstants.mjs +0 -68
  151. package/esm2020/src/GuiEnvironment.mjs +0 -4
  152. package/esm2020/src/Manager.mjs +0 -91
  153. package/esm2020/src/UIBridge.mjs +0 -32
  154. package/esm2020/src/gui/GuiMgControl.mjs +0 -125
  155. package/esm2020/src/gui/KeyboardItem.mjs +0 -135
  156. package/esm2020/src/gui/LastFocusedVal.mjs +0 -11
  157. package/esm2020/src/gui/MgValue.mjs +0 -16
  158. package/esm2020/src/gui/low/GuiCommand.mjs +0 -66
  159. package/esm2020/src/gui/low/GuiCommandQueue.mjs +0 -35
  160. package/esm2020/src/gui/low/GuiInteractive.mjs +0 -165
  161. package/esm2020/src/gui/low/Style.mjs +0 -20
  162. package/esm2020/src/management/RuntimeContextBase.mjs +0 -43
  163. package/esm2020/src/management/data/BlobType.mjs +0 -281
  164. package/esm2020/src/management/data/DcValues.mjs +0 -214
  165. package/esm2020/src/management/data/FieldDef.mjs +0 -331
  166. package/esm2020/src/management/data/GuiDataViewBase.mjs +0 -90
  167. package/esm2020/src/management/data/GuiFieldBase.mjs +0 -82
  168. package/esm2020/src/management/data/NUM_TYPE.mjs +0 -1741
  169. package/esm2020/src/management/data/ObjectReferenceBase.mjs +0 -48
  170. package/esm2020/src/management/data/ObjectReferencesCollection.mjs +0 -29
  171. package/esm2020/src/management/data/VectorType.mjs +0 -612
  172. package/esm2020/src/management/data/VectorTypeBase.mjs +0 -88
  173. package/esm2020/src/management/exp/ExpressionInterface.mjs +0 -244
  174. package/esm2020/src/management/exp/GuiExpressionEvaluator.mjs +0 -307
  175. package/esm2020/src/management/gui/ControlTable.mjs +0 -118
  176. package/esm2020/src/management/gui/DisplayConvertor.mjs +0 -1679
  177. package/esm2020/src/management/gui/FieldValidator.mjs +0 -711
  178. package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +0 -22
  179. package/esm2020/src/management/gui/HebrewDate.mjs +0 -278
  180. package/esm2020/src/management/gui/Helps.mjs +0 -237
  181. package/esm2020/src/management/gui/MgControlBase.mjs +0 -1858
  182. package/esm2020/src/management/gui/MgFormBase.mjs +0 -738
  183. package/esm2020/src/management/gui/PIC.mjs +0 -1185
  184. package/esm2020/src/management/gui/PropTable.mjs +0 -221
  185. package/esm2020/src/management/gui/Property.mjs +0 -1356
  186. package/esm2020/src/management/gui/ValidationDetails.mjs +0 -248
  187. package/esm2020/src/management/tasks/GuiDataCollection.mjs +0 -4
  188. package/esm2020/src/management/tasks/GuiTaskBase.mjs +0 -510
  189. package/esm2020/src/management/tasks/MgTimer.mjs +0 -21
  190. package/esm2020/src/management/tasks/TaskDefinitionId.mjs +0 -54
  191. package/esm2020/src/util/ObjectReference.mjs +0 -36
  192. package/esm2020/src/util/UsernamePasswordCredentials.mjs +0 -52
  193. package/fesm2015/magic-xpa-gui.mjs +0 -16364
  194. package/fesm2015/magic-xpa-gui.mjs.map +0 -1
  195. package/fesm2020/magic-xpa-gui.mjs.map +0 -1
@@ -1,177 +0,0 @@
1
- import { List } from '@magic-xpa/mscorelib';
2
- import { GuiInteractive } from './gui/low/GuiInteractive';
3
- import { GuiMgControl } from './gui/GuiMgControl';
4
- import { CommandType } from './GuiEnums';
5
- import { GuiCommandQueue } from './gui/low/GuiCommandQueue';
6
- import { GuiCommand } from './gui/low/GuiCommand';
7
- export class Commands {
8
- static SetResolveCallback(resolveCallback) {
9
- this.resolveCallback = resolveCallback;
10
- }
11
- static ResolvePromise(result) {
12
- this.resolveCallback(result);
13
- }
14
- static async messageBox(title, msg, style) {
15
- let guiInteractive = new GuiInteractive();
16
- let returnValue;
17
- await new Promise((resolve) => {
18
- this.SetResolveCallback(resolve);
19
- guiInteractive.messageBox(title, msg, style);
20
- }).then((res) => { returnValue = res; });
21
- return returnValue;
22
- }
23
- static setTitle(topMostForm, title) {
24
- let guiInteractive = new GuiInteractive();
25
- guiInteractive.setTitle(topMostForm, title);
26
- }
27
- static setGetSuggestedValueOfChoiceControlOnTagData(ctrl, line, retSuggestedValue) {
28
- let guiInteractive = new GuiInteractive();
29
- guiInteractive.setGetSuggestedValueOfChoiceControlOnTagData(ctrl, line, retSuggestedValue);
30
- }
31
- static getValue(obj, line) {
32
- let guiInteractive = new GuiInteractive();
33
- return guiInteractive.getValue(obj, line);
34
- }
35
- static getTopIndex(tablecontrol) {
36
- let guiInteractive = new GuiInteractive();
37
- return guiInteractive.getTopIndex(tablecontrol);
38
- }
39
- static getIsRowEditing(tablecontrol, rowIndex, isLineMode) {
40
- let guiInteractive = new GuiInteractive();
41
- return guiInteractive.getIsRowEditing(tablecontrol, rowIndex, isLineMode);
42
- }
43
- static setEditText(control, line, text) {
44
- let guiInteractive = new GuiInteractive();
45
- return guiInteractive.setEditText(control, line, text);
46
- }
47
- static insertEditText(control, line, startPosition, textToInsert) {
48
- let guiInteractive = new GuiInteractive();
49
- return guiInteractive.insertEditText(control, line, startPosition, textToInsert);
50
- }
51
- static caretPosGet(control, line) {
52
- let guiInteractive = new GuiInteractive();
53
- return guiInteractive.caretPosGet(control, line);
54
- }
55
- static addRefreshPage(navigateToRootRoute, initialUrl) {
56
- let guiInteractive = new GuiInteractive();
57
- guiInteractive.RefreshPage(navigateToRootRoute, initialUrl);
58
- }
59
- static getRowsInPage(control) {
60
- let guiInteractive = new GuiInteractive();
61
- let rowsInPage = guiInteractive.getRowsInPage(control);
62
- return (rowsInPage === 0 ? 1 : rowsInPage);
63
- }
64
- static getMaxRowsInPaginatedTable(control) {
65
- let guiInteractive = new GuiInteractive();
66
- let maxRows = guiInteractive.getMaxRowsInPaginatedTable(control);
67
- return (maxRows);
68
- }
69
- static getLastRoute() {
70
- let guiInteractive = new GuiInteractive();
71
- return guiInteractive.getLastRoute();
72
- }
73
- static addBoolWithLine(commandType, obj, line, bool) {
74
- let guiCommand = new GuiCommand(obj, commandType);
75
- guiCommand.Bool1 = bool;
76
- guiCommand.line = line;
77
- GuiCommandQueue.getInstance().addCommand(guiCommand);
78
- }
79
- static addNoParameters(commandType, obj) {
80
- let guiCommand = new GuiCommand(obj, commandType);
81
- GuiCommandQueue.getInstance().addCommand(guiCommand);
82
- }
83
- static addWithNumber(commandType, obj, num) {
84
- let guiCommand = new GuiCommand(obj, commandType);
85
- guiCommand.number = num;
86
- GuiCommandQueue.getInstance().addCommand(guiCommand);
87
- }
88
- static addValueWithLine(commandType, obj, line, value) {
89
- let guiCommand = new GuiCommand(obj, commandType);
90
- guiCommand.value = value;
91
- guiCommand.line = line;
92
- if (commandType === CommandType.SET_VALUE) {
93
- if (obj instanceof GuiMgControl && obj.isChoiceControl()) {
94
- if (value < 0)
95
- if (obj.isComboBox())
96
- guiCommand.value = undefined;
97
- else
98
- guiCommand.value = '';
99
- }
100
- }
101
- GuiCommandQueue.getInstance().addCommand(guiCommand);
102
- }
103
- static addOperationWithLine(commandType, obj, line, operation, value) {
104
- let guiCommand = new GuiCommand(obj, commandType);
105
- guiCommand.obj1 = value;
106
- guiCommand.line = line;
107
- guiCommand.Operation = operation;
108
- GuiCommandQueue.getInstance().addCommand(guiCommand);
109
- }
110
- static addOpensubform(commandType, obj, calledTaskTag, subformControlName, formName, inputControls, routerPath, routerParams, inDefaultRouterOutlet) {
111
- let guiCommand = new GuiCommand(obj, commandType);
112
- guiCommand.str = calledTaskTag;
113
- guiCommand.obj1 = subformControlName;
114
- guiCommand.userDropFormat = formName;
115
- guiCommand.fileName = inputControls;
116
- guiCommand.Bool1 = inDefaultRouterOutlet;
117
- guiCommand.contextID = routerPath;
118
- guiCommand.params = routerParams;
119
- GuiCommandQueue.getInstance().addCommand(guiCommand);
120
- }
121
- static addClosesubform(commandType, obj, calledTaskTag, subformControlName, formName) {
122
- let guiCommand = new GuiCommand(obj, commandType);
123
- guiCommand.str = calledTaskTag;
124
- guiCommand.obj1 = subformControlName;
125
- guiCommand.userDropFormat = formName;
126
- GuiCommandQueue.getInstance().addCommand(guiCommand);
127
- }
128
- static addOpenForm(obj, formName, handlerTaskTag, calledTaskTag, inputControls, isDialog) {
129
- let guiCommand = new GuiCommand(obj, CommandType.OPEN_FORM);
130
- guiCommand.TaskTag = handlerTaskTag;
131
- guiCommand.str = formName;
132
- guiCommand.stringList = new List();
133
- guiCommand.stringList.push(calledTaskTag);
134
- guiCommand.stringList.push(inputControls);
135
- guiCommand.Bool1 = isDialog;
136
- GuiCommandQueue.getInstance().addCommand(guiCommand);
137
- }
138
- static addCloseForm(obj, handlerTaskTag, calledTaskTag) {
139
- let guiCommand = new GuiCommand(obj, CommandType.CLOSE_FORM);
140
- guiCommand.TaskTag = handlerTaskTag;
141
- guiCommand.str = calledTaskTag;
142
- GuiCommandQueue.getInstance().addCommand(guiCommand);
143
- }
144
- static addCallJS(form, formName, name, args) {
145
- let guiInteractive = new GuiInteractive();
146
- return guiInteractive.ExecuteCallJS(form, formName, name, args);
147
- }
148
- static addIsLoggedIn(setBool) {
149
- let guiCommand = new GuiCommand(null, CommandType.SET_IS_LOGGED_IN);
150
- guiCommand.Bool1 = setBool;
151
- GuiCommandQueue.getInstance().addCommand(guiCommand);
152
- }
153
- static addShowSpinner(show) {
154
- let guiCommand = new GuiCommand(null, CommandType.SHOW_SPINNER);
155
- guiCommand.Bool1 = show;
156
- GuiCommandQueue.getInstance().addCommand(guiCommand);
157
- }
158
- static addGlobalCommand(commandType) {
159
- let guiCommand = new GuiCommand(null, commandType);
160
- GuiCommandQueue.getInstance().addCommand(guiCommand);
161
- }
162
- static addShowHTMLError(commandType, error) {
163
- let guiCommand = new GuiCommand(null, commandType);
164
- guiCommand.str = error;
165
- GuiCommandQueue.getInstance().addCommand(guiCommand);
166
- }
167
- static beginInvoke() {
168
- GuiCommandQueue.getInstance().beginInvoke();
169
- }
170
- static invoke() {
171
- GuiCommandQueue.getInstance().invoke();
172
- }
173
- constructor() {
174
- }
175
- }
176
- Commands.resolveCallback = null;
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL0NvbW1hbmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUUxQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQVVoRCxNQUFNLE9BQU8sUUFBUTtJQVFuQixNQUFNLENBQUMsa0JBQWtCLENBQUMsZUFBZTtRQUN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBS0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFjO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQVNELE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsS0FBYTtRQUMvRCxJQUFJLGNBQWMsR0FBbUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMxRCxJQUFJLFdBQW1CLENBQUM7UUFFeEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFL0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBVyxFQUFDLEVBQUUsR0FBQyxX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QUFDLENBQUM7SUFDdkQsQ0FBQztJQUdELE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBYTtRQUNqQyxJQUFJLFVBQVUsR0FBZSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUdELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUF3QjtRQUM5QyxJQUFJLFVBQVUsR0FBZSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDL0QsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBR0QsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQXdCLEVBQUUsS0FBYTtRQUM3RCxJQUFJLFVBQVUsR0FBZSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDL0QsVUFBVSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDdkIsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBS0QsTUFBTSxDQUFDLFdBQVc7UUFDaEIsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFLRCxNQUFNLENBQUMsTUFBTTtRQUNYLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7SUFDQSxDQUFDOztBQXpTZSx3QkFBZSxHQUFHLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge0d1aU1nRm9ybX0gZnJvbSAnLi9ndWkvR3VpTWdGb3JtJztcclxuaW1wb3J0IHtHdWlJbnRlcmFjdGl2ZX0gZnJvbSAnLi9ndWkvbG93L0d1aUludGVyYWN0aXZlJztcclxuaW1wb3J0IHtHdWlNZ0NvbnRyb2x9IGZyb20gJy4vZ3VpL0d1aU1nQ29udHJvbCc7XHJcbmltcG9ydCB7Q29tbWFuZFR5cGV9IGZyb20gJy4vR3VpRW51bXMnO1xyXG5pbXBvcnQge0d1aUNvbW1hbmRRdWV1ZX0gZnJvbSAnLi9ndWkvbG93L0d1aUNvbW1hbmRRdWV1ZSc7XHJcbmltcG9ydCB7R3VpQ29tbWFuZH0gZnJvbSAnLi9ndWkvbG93L0d1aUNvbW1hbmQnO1xyXG5cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgQ29tbWFuZHMgdG8gdGhlIEdVSSB0aHJlYWQuXHJcbi8vLyAgIFRoZXJl4oCZcmUgdHdvIHR5cGVzIG9mIGNvbW1hbmRzIChncm91cGVkIGluICNyZWdpb25zKTpcclxuLy8vICAgICAgMS5cdENvbW1hbmRzIHRoYXQgYXJlIGV4ZWN1dGVkIGltbWVkaWF0ZWx5LlxyXG4vLy8gICAgICAyLlx0Q29tbWFuZHMgdGhhdCBhcmUgcXVldWVkIChvdmVybG9hZGVkIG1ldGhvZHMg4oCYYWRkQXN5bmPigJkpIGFuZCB0aGVuIGV4ZWN1dGVkLFxyXG4vLy8gICAgICAgICBlaXRoZXIgc3luY2hyb25vdXNseSAobWV0aG9kIOKAmGludm9rZeKAmSkgb3IgYXN5bmNocm9ub3VzbHkgKG1ldGhvZCDigJhiZWdpbkludm9rZeKAmSkuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBDb21tYW5kcyB7XHJcblxyXG5cclxuICBwcml2YXRlIHN0YXRpYyAgcmVzb2x2ZUNhbGxiYWNrID0gbnVsbDsgLy8gY2FsbGJhY2sgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNhdmUgdGhlIGNhbGxiYWNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgU2V0UmVzb2x2ZUNhbGxiYWNrKHJlc29sdmVDYWxsYmFjaykge1xyXG4gICAgdGhpcy5yZXNvbHZlQ2FsbGJhY2sgPSByZXNvbHZlQ2FsbGJhY2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJlc29sdmUgcHJvbWlzZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIFJlc29sdmVQcm9taXNlKHJlc3VsdDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnJlc29sdmVDYWxsYmFjayhyZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFN5bmMgY2FsbCB0byBkaXNwbGF5IG1lc3NhZ2UgYm94XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRpdGxlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1zZ1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHlsZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgYXN5bmMgbWVzc2FnZUJveCh0aXRsZTogc3RyaW5nLCBtc2c6IHN0cmluZywgc3R5bGU6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICBsZXQgcmV0dXJuVmFsdWU6IG51bWJlcjtcclxuXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICB0aGlzLlNldFJlc29sdmVDYWxsYmFjayhyZXNvbHZlKTtcclxuICAgICAgZ3VpSW50ZXJhY3RpdmUubWVzc2FnZUJveCh0aXRsZSwgbXNnLCBzdHlsZSk7XHJcbiAgICAgLy8gc2F2ZSB0aGUgcmVzb2x2ZSBjYWxsYmFjayBvbiBFdmVudHNNYW5hZ2VyLCBzbyB0aGF0IGl0IGNhbiBiZSByZXNvbHZlZCBvbiBjbG9zaW5nIG1vZGFsIHdpbmRvd1xyXG4gICAgfSkudGhlbigocmVzOiBudW1iZXIpPT57cmV0dXJuVmFsdWUgPSByZXM7fSk7XHJcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRpdGxlIHRvIGJyb3dzZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidG9wTW9zdEZvcm1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGl0bGVcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBzZXRUaXRsZSh0b3BNb3N0Rm9ybTogR3VpTWdGb3JtLCB0aXRsZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICBndWlJbnRlcmFjdGl2ZS5zZXRUaXRsZSh0b3BNb3N0Rm9ybSwgdGl0bGUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFN5bmMgY2FsbC4gVGhpcyBtZXRob2RlIGlzIHNldCBUUlVFXFxGQUxTRSB0aGF0IEd1aVV0aWxlc1xcR2V0VmFsdWUoKSBtZXRob2Qgd2lsbCBiZSB1c2VcclxuICAvLy8gICB0aGlzIGZhbGcgc2F5IGlmIHRvIHJldHVybiB0aGUgOiAodHJ1ZSkgc3VnZ2VzdGVkIHZhbHVlIG9yIChmYWxzZSl0aGUgcmVhbCB2YWx1ZVxyXG4gIC8vLyAgIHRoaXMgbWV0aG9kIGlzIHVzZSBmb3IgTUdfQUNUX0NUUkxfTU9ESUZZXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmV0U3VnZ2VzdGVkVmFsdWVcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBzZXRHZXRTdWdnZXN0ZWRWYWx1ZU9mQ2hvaWNlQ29udHJvbE9uVGFnRGF0YShjdHJsOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwgcmV0U3VnZ2VzdGVkVmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGxldCBndWlJbnRlcmFjdGl2ZTogR3VpSW50ZXJhY3RpdmUgPSBuZXcgR3VpSW50ZXJhY3RpdmUoKTtcclxuICAgIGd1aUludGVyYWN0aXZlLnNldEdldFN1Z2dlc3RlZFZhbHVlT2ZDaG9pY2VDb250cm9sT25UYWdEYXRhKGN0cmwsIGxpbmUsIHJldFN1Z2dlc3RlZFZhbHVlKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU3luYyBjYWxsIHRvIGdldCB2YWx1ZSBvZiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvYmpcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWdWYWx1ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsaW5lXCI+PC9wYXJhbT5cclxuICBzdGF0aWMgZ2V0VmFsdWUob2JqOiBhbnksIGxpbmU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICByZXR1cm4gZ3VpSW50ZXJhY3RpdmUuZ2V0VmFsdWUob2JqLCBsaW5lKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU3luYyBjYWxsIHRvIGdldCB0YWJsZSB0b3AgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFibGVjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRUb3BJbmRleCh0YWJsZWNvbnRyb2w6IEd1aU1nQ29udHJvbCk6IG51bWJlciB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICByZXR1cm4gZ3VpSW50ZXJhY3RpdmUuZ2V0VG9wSW5kZXgodGFibGVjb250cm9sKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU3luYyBjYWxsIHRvIGdldCBpcyByb3cgZWRpdGluZyBvbiByb3cgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFibGVjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRJc1Jvd0VkaXRpbmcodGFibGVjb250cm9sOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGlzTGluZU1vZGU6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGxldCBndWlJbnRlcmFjdGl2ZTogR3VpSW50ZXJhY3RpdmUgPSBuZXcgR3VpSW50ZXJhY3RpdmUoKTtcclxuICAgIHJldHVybiBndWlJbnRlcmFjdGl2ZS5nZXRJc1Jvd0VkaXRpbmcodGFibGVjb250cm9sLCByb3dJbmRleCwgaXNMaW5lTW9kZSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTeW5jIGNhbGwgdG8gc2V0IHRoZSB0ZXh0IHRvIHRoZSB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxpbmVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGV4dFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgc2V0RWRpdFRleHQoY29udHJvbDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIsIHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGd1aUludGVyYWN0aXZlOiBHdWlJbnRlcmFjdGl2ZSA9IG5ldyBHdWlJbnRlcmFjdGl2ZSgpO1xyXG4gICAgcmV0dXJuIGd1aUludGVyYWN0aXZlLnNldEVkaXRUZXh0KGNvbnRyb2wsIGxpbmUsIHRleHQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEluc2VydCB0ZXh0IHRvIGEgdGV4dCBjb250cm9sIGF0IGEgZ2l2ZW4gcG9zaXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXJ0UG9zaXRpb25cIj53aGVyZSB0byBhZGQgdGhlIHRleHQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGV4dFRvSW5zZXJ0XCI+dGhlIHRleHQgdG8gYWRkPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBpbnNlcnRFZGl0VGV4dChjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwgc3RhcnRQb3NpdGlvbjogbnVtYmVyLCB0ZXh0VG9JbnNlcnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGd1aUludGVyYWN0aXZlOiBHdWlJbnRlcmFjdGl2ZSA9IG5ldyBHdWlJbnRlcmFjdGl2ZSgpO1xyXG4gICAgcmV0dXJuIGd1aUludGVyYWN0aXZlLmluc2VydEVkaXRUZXh0KGNvbnRyb2wsIGxpbmUsIHN0YXJ0UG9zaXRpb24sIHRleHRUb0luc2VydCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFN5bmMgY2FsbCB0byBnZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBjYXJldCBvbiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxpbmVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWdWYWx1ZVwiPjwvcGFyYW0+XHJcbiAgc3RhdGljIGNhcmV0UG9zR2V0KGNvbnRyb2w6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBndWlJbnRlcmFjdGl2ZTogR3VpSW50ZXJhY3RpdmUgPSBuZXcgR3VpSW50ZXJhY3RpdmUoKTtcclxuICAgIHJldHVybiBndWlJbnRlcmFjdGl2ZS5jYXJldFBvc0dldChjb250cm9sLCBsaW5lKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhZGRSZWZyZXNoUGFnZShuYXZpZ2F0ZVRvUm9vdFJvdXRlIDogYm9vbGVhbiwgaW5pdGlhbFVybDogc3RyaW5nKSB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcblxyXG4gICAgZ3VpSW50ZXJhY3RpdmUuUmVmcmVzaFBhZ2UobmF2aWdhdGVUb1Jvb3RSb3V0ZSwgaW5pdGlhbFVybCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU3luYyBjYWxsIHRvIGdldCBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgZ2V0Um93c0luUGFnZShjb250cm9sOiBHdWlNZ0NvbnRyb2wpOiBudW1iZXIge1xyXG4gICAgbGV0IGd1aUludGVyYWN0aXZlOiBHdWlJbnRlcmFjdGl2ZSA9IG5ldyBHdWlJbnRlcmFjdGl2ZSgpO1xyXG4gICAgbGV0IHJvd3NJblBhZ2UgPSBndWlJbnRlcmFjdGl2ZS5nZXRSb3dzSW5QYWdlKGNvbnRyb2wpO1xyXG4gICAgcmV0dXJuIChyb3dzSW5QYWdlID09PSAwID8gMSA6IHJvd3NJblBhZ2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgbWF4IG5vIG9mIHJvd3MgaW4gcGFnaW5hdGVkIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIGdldE1heFJvd3NJblBhZ2luYXRlZFRhYmxlKGNvbnRyb2w6IEd1aU1nQ29udHJvbCk6IG51bWJlciB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICBsZXQgbWF4Um93cyA9IGd1aUludGVyYWN0aXZlLmdldE1heFJvd3NJblBhZ2luYXRlZFRhYmxlKGNvbnRyb2wpO1xyXG4gICAgcmV0dXJuIChtYXhSb3dzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0IHRoZSBsYXN0IHJvdXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgZ2V0TGFzdFJvdXRlKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICByZXR1cm4gZ3VpSW50ZXJhY3RpdmUuZ2V0TGFzdFJvdXRlKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYWRkQm9vbFdpdGhMaW5lKGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgb2JqOiBhbnksIGxpbmU6IG51bWJlciwgYm9vbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IGd1aUNvbW1hbmQ6IEd1aUNvbW1hbmQgPSBuZXcgR3VpQ29tbWFuZChvYmosIGNvbW1hbmRUeXBlKTtcclxuICAgIGd1aUNvbW1hbmQuQm9vbDEgPSBib29sO1xyXG4gICAgZ3VpQ29tbWFuZC5saW5lID0gbGluZTtcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmFkZENvbW1hbmQoZ3VpQ29tbWFuZCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYWRkTm9QYXJhbWV0ZXJzKGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgb2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQob2JqLCBjb21tYW5kVHlwZSk7XHJcbiAgICBHdWlDb21tYW5kUXVldWUuZ2V0SW5zdGFuY2UoKS5hZGRDb21tYW5kKGd1aUNvbW1hbmQpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFkZFdpdGhOdW1iZXIoY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLCBvYmo6IGFueSwgbnVtOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQob2JqLCBjb21tYW5kVHlwZSk7XHJcbiAgICBndWlDb21tYW5kLm51bWJlciA9IG51bTtcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmFkZENvbW1hbmQoZ3VpQ29tbWFuZCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYWRkVmFsdWVXaXRoTGluZShjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUsIG9iajogYW55LCBsaW5lOiBudW1iZXIsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQob2JqLCBjb21tYW5kVHlwZSk7XHJcbiAgICBndWlDb21tYW5kLnZhbHVlID0gdmFsdWU7XHJcbiAgICBndWlDb21tYW5kLmxpbmUgPSBsaW5lO1xyXG4gICAgaWYgKGNvbW1hbmRUeXBlID09PSBDb21tYW5kVHlwZS5TRVRfVkFMVUUpXHJcbiAgICB7XHJcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiAgR3VpTWdDb250cm9sICYmIG9iai5pc0Nob2ljZUNvbnRyb2woKSlcclxuICAgICAge1xyXG4gICAgICAgIGlmKHZhbHVlIDwgMClcclxuICAgICAgICAgICAgLy9UT0RPOiBIYW5kbGluZyBkb25lIGZvciBidWcgIyAzMjA4MyBmb3IgY29tYm9ib3ggb25seS4gVG8gYmUgZG9uZSBmb3IgYWxsIHR5cGVzIG9mIGNob2ljZSBjb250cm9sc1xyXG4gICAgICAgICAgaWYgKG9iai5pc0NvbWJvQm94KCkpXHJcbiAgICAgICAgICAgIGd1aUNvbW1hbmQudmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGd1aUNvbW1hbmQudmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgR3VpQ29tbWFuZFF1ZXVlLmdldEluc3RhbmNlKCkuYWRkQ29tbWFuZChndWlDb21tYW5kKTtcclxuICB9XHJcblxyXG5cclxuICBzdGF0aWMgYWRkT3BlcmF0aW9uV2l0aExpbmUoY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLCBvYmo6IGFueSwgbGluZTogbnVtYmVyLCBvcGVyYXRpb246IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IGd1aUNvbW1hbmQ6IEd1aUNvbW1hbmQgPSBuZXcgR3VpQ29tbWFuZChvYmosIGNvbW1hbmRUeXBlKTtcclxuICAgIGd1aUNvbW1hbmQub2JqMSA9IHZhbHVlO1xyXG4gICAgZ3VpQ29tbWFuZC5saW5lID0gbGluZTtcclxuICAgIGd1aUNvbW1hbmQuT3BlcmF0aW9uID0gb3BlcmF0aW9uO1xyXG4gICAgR3VpQ29tbWFuZFF1ZXVlLmdldEluc3RhbmNlKCkuYWRkQ29tbWFuZChndWlDb21tYW5kKTtcclxuICB9XHJcblxyXG5cclxuICBzdGF0aWMgYWRkT3BlbnN1YmZvcm0oY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLCBvYmo6IE9iamVjdCwgY2FsbGVkVGFza1RhZzogc3RyaW5nLCBzdWJmb3JtQ29udHJvbE5hbWU6IHN0cmluZywgZm9ybU5hbWU6IHN0cmluZywgaW5wdXRDb250cm9sczogc3RyaW5nLCByb3V0ZXJQYXRoOiBzdHJpbmcsIHJvdXRlclBhcmFtczogTGlzdDxhbnk+LCBpbkRlZmF1bHRSb3V0ZXJPdXRsZXQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQob2JqLCBjb21tYW5kVHlwZSk7XHJcbiAgICBndWlDb21tYW5kLnN0ciA9IGNhbGxlZFRhc2tUYWc7XHJcbiAgICBndWlDb21tYW5kLm9iajEgPSBzdWJmb3JtQ29udHJvbE5hbWU7XHJcbiAgICBndWlDb21tYW5kLnVzZXJEcm9wRm9ybWF0ID0gZm9ybU5hbWU7XHJcbiAgICBndWlDb21tYW5kLmZpbGVOYW1lID0gaW5wdXRDb250cm9scztcclxuICAgIGd1aUNvbW1hbmQuQm9vbDEgPSBpbkRlZmF1bHRSb3V0ZXJPdXRsZXQ7XHJcbiAgICBndWlDb21tYW5kLmNvbnRleHRJRCA9IHJvdXRlclBhdGg7XHJcbiAgICBndWlDb21tYW5kLnBhcmFtcyA9IHJvdXRlclBhcmFtcztcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmFkZENvbW1hbmQoZ3VpQ29tbWFuZCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYWRkQ2xvc2VzdWJmb3JtKGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgb2JqOiBPYmplY3QsIGNhbGxlZFRhc2tUYWc6IHN0cmluZywgc3ViZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIGZvcm1OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQob2JqLCBjb21tYW5kVHlwZSk7XHJcbiAgICBndWlDb21tYW5kLnN0ciA9IGNhbGxlZFRhc2tUYWc7XHJcbiAgICBndWlDb21tYW5kLm9iajEgPSBzdWJmb3JtQ29udHJvbE5hbWU7XHJcbiAgICBndWlDb21tYW5kLnVzZXJEcm9wRm9ybWF0ID0gZm9ybU5hbWU7XHJcbiAgICBHdWlDb21tYW5kUXVldWUuZ2V0SW5zdGFuY2UoKS5hZGRDb21tYW5kKGd1aUNvbW1hbmQpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFkZE9wZW5Gb3JtKG9iajogT2JqZWN0LCBmb3JtTmFtZTogc3RyaW5nLCBoYW5kbGVyVGFza1RhZzogc3RyaW5nLCBjYWxsZWRUYXNrVGFnOiBzdHJpbmcsIGlucHV0Q29udHJvbHM6IHN0cmluZywgaXNEaWFsb2c6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQob2JqLCBDb21tYW5kVHlwZS5PUEVOX0ZPUk0pO1xyXG4gICAgZ3VpQ29tbWFuZC5UYXNrVGFnID0gaGFuZGxlclRhc2tUYWc7XHJcbiAgICBndWlDb21tYW5kLnN0ciA9IGZvcm1OYW1lO1xyXG4gICAgZ3VpQ29tbWFuZC5zdHJpbmdMaXN0ID0gbmV3IExpc3Q8c3RyaW5nPigpO1xyXG4gICAgZ3VpQ29tbWFuZC5zdHJpbmdMaXN0LnB1c2goY2FsbGVkVGFza1RhZyk7XHJcbiAgICBndWlDb21tYW5kLnN0cmluZ0xpc3QucHVzaChpbnB1dENvbnRyb2xzKTtcclxuICAgIGd1aUNvbW1hbmQuQm9vbDEgPSBpc0RpYWxvZztcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmFkZENvbW1hbmQoZ3VpQ29tbWFuZCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYWRkQ2xvc2VGb3JtKG9iajogT2JqZWN0LCBoYW5kbGVyVGFza1RhZzogc3RyaW5nLCBjYWxsZWRUYXNrVGFnOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQob2JqLCBDb21tYW5kVHlwZS5DTE9TRV9GT1JNKTtcclxuICAgIGd1aUNvbW1hbmQuVGFza1RhZyA9IGhhbmRsZXJUYXNrVGFnO1xyXG4gICAgZ3VpQ29tbWFuZC5zdHIgPSBjYWxsZWRUYXNrVGFnO1xyXG4gICAgR3VpQ29tbWFuZFF1ZXVlLmdldEluc3RhbmNlKCkuYWRkQ29tbWFuZChndWlDb21tYW5kKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhZGRDYWxsSlMoZm9ybSA6IGFueSwgZm9ybU5hbWU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBhcmdzOiBBcnJheTxhbnk+KTogc3RyaW5nIHtcclxuICAgIGxldCBndWlJbnRlcmFjdGl2ZTogR3VpSW50ZXJhY3RpdmUgPSBuZXcgR3VpSW50ZXJhY3RpdmUoKTtcclxuICAgIHJldHVybiBndWlJbnRlcmFjdGl2ZS5FeGVjdXRlQ2FsbEpTKGZvcm0gLCBmb3JtTmFtZSwgIG5hbWUsIGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFkZElzTG9nZ2VkSW4oc2V0Qm9vbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IGd1aUNvbW1hbmQ6IEd1aUNvbW1hbmQgPSBuZXcgR3VpQ29tbWFuZChudWxsLCBDb21tYW5kVHlwZS5TRVRfSVNfTE9HR0VEX0lOKTtcclxuICAgIGd1aUNvbW1hbmQuQm9vbDEgPSBzZXRCb29sO1xyXG4gICAgR3VpQ29tbWFuZFF1ZXVlLmdldEluc3RhbmNlKCkuYWRkQ29tbWFuZChndWlDb21tYW5kKTtcclxuICB9XHJcblxyXG4gIC8vIGFkZHMgYSBjb21tYW5kIHRvIHNob3cgb3IgaGlkZSB0aGUgc3Bpbm5lclxyXG4gIHN0YXRpYyBhZGRTaG93U3Bpbm5lcihzaG93OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpQ29tbWFuZDogR3VpQ29tbWFuZCA9IG5ldyBHdWlDb21tYW5kKG51bGwsIENvbW1hbmRUeXBlLlNIT1dfU1BJTk5FUik7XHJcbiAgICBndWlDb21tYW5kLkJvb2wxID0gc2hvdztcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmFkZENvbW1hbmQoZ3VpQ29tbWFuZCk7XHJcbiAgfVxyXG5cclxuICAvLyBhZGRzIGEgY29tbWFuZCB3aGljaCBpcyBub3QgcmVsYXRlZCB0byBhIHNwZWNpZmljIHRhc2tcclxuICBzdGF0aWMgYWRkR2xvYmFsQ29tbWFuZChjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUpOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQobnVsbCwgY29tbWFuZFR5cGUpO1xyXG4gICAgR3VpQ29tbWFuZFF1ZXVlLmdldEluc3RhbmNlKCkuYWRkQ29tbWFuZChndWlDb21tYW5kKTtcclxuICB9XHJcblxyXG4gIC8vIGFkZHMgYSBjb21tYW5kIHRvIGRpc3BsYXkgdGhlIEhUTUwgZXJyb3IgcmVjZWl2ZWQgZnJvbSB0aGUgcmVxdWVzZXJcclxuICBzdGF0aWMgYWRkU2hvd0hUTUxFcnJvcihjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUsIGVycm9yOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQobnVsbCwgY29tbWFuZFR5cGUpO1xyXG4gICAgZ3VpQ29tbWFuZC5zdHIgPSBlcnJvcjtcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmFkZENvbW1hbmQoZ3VpQ29tbWFuZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBhbGwgcGVuZGluZyBjb21tYW5kcywgYXN5bmNocm9ub3VzbHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBiZWdpbkludm9rZSgpOiB2b2lkIHtcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmJlZ2luSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBhbGwgcGVuZGluZyBjb21tYW5kcywgc3luY2hyb25vdXNseVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGludm9rZSgpOiB2b2lkIHtcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG59XHJcbiJdfQ==