@magic-xpa/engine 4.1100.0-dev4110.19 → 4.1100.0-dev4110.191

Sign up to get free protection for your applications and to get access to all the features.
Files changed (515) hide show
  1. package/{esm2020 → esm2022}/index.mjs +188 -188
  2. package/{esm2020 → esm2022}/magic-xpa-engine.mjs +1 -1
  3. package/esm2022/src/AccessHelper.mjs +15 -0
  4. package/esm2022/src/ClientManager.mjs +399 -0
  5. package/esm2022/src/CommandsProcessorBase.mjs +56 -0
  6. package/esm2022/src/CommandsProcessorManager.mjs +26 -0
  7. package/esm2022/src/CommandsTable.mjs +162 -0
  8. package/esm2022/src/ConstInterface.mjs +516 -0
  9. package/{esm2020 → esm2022}/src/CurrentClientVersion.mjs +2 -2
  10. package/esm2022/src/FlowMonitorInterface.mjs +16 -0
  11. package/esm2022/src/GUIManager.mjs +62 -0
  12. package/esm2022/src/GlobalCommandsManager.mjs +34 -0
  13. package/esm2022/src/GuiEventsProcessor.mjs +154 -0
  14. package/{esm2020 → esm2022}/src/ICommandsTable.mjs +1 -1
  15. package/esm2022/src/ServerConfig.mjs +118 -0
  16. package/{esm2020 → esm2022}/src/bridge/IGuiEvent.mjs +19 -19
  17. package/{esm2020 → esm2022}/src/bridge/MagicBridge.mjs +40 -40
  18. package/esm2022/src/commands/ClientOriginatedCommandTaskTag.mjs +12 -0
  19. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs +8 -8
  20. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs +9 -9
  21. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs +9 -9
  22. package/{esm2020 → esm2022}/src/commands/ClientToServer/BrowserEscEventCommand.mjs +23 -23
  23. package/{esm2020 → esm2022}/src/commands/ClientToServer/ClientOriginatedCommand.mjs +14 -14
  24. package/esm2022/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +60 -0
  25. package/{esm2020 → esm2022}/src/commands/ClientToServer/ColumnSortEventCommand.mjs +26 -26
  26. package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +260 -0
  27. package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +67 -0
  28. package/{esm2020 → esm2022}/src/commands/ClientToServer/ComputeEventCommand.mjs +23 -23
  29. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +20 -20
  30. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +19 -19
  31. package/{esm2020 → esm2022}/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs +8 -8
  32. package/esm2022/src/commands/ClientToServer/DataViewOutputCommand.mjs +13 -0
  33. package/{esm2020 → esm2022}/src/commands/ClientToServer/DataviewCommand.mjs +44 -44
  34. package/esm2022/src/commands/ClientToServer/EvaluateCommand.mjs +37 -0
  35. package/esm2022/src/commands/ClientToServer/EventCommand.mjs +40 -0
  36. package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +67 -0
  37. package/esm2022/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +22 -0
  38. package/{esm2020 → esm2022}/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs +10 -10
  39. package/{esm2020 → esm2022}/src/commands/ClientToServer/ICommandTaskTag.mjs +1 -1
  40. package/{esm2020 → esm2022}/src/commands/ClientToServer/IndexChangeEventCommand.mjs +21 -21
  41. package/esm2022/src/commands/ClientToServer/IniputForceWriteCommand.mjs +23 -0
  42. package/{esm2020 → esm2022}/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +23 -23
  43. package/{esm2020 → esm2022}/src/commands/ClientToServer/QueryCommand.mjs +20 -20
  44. package/esm2022/src/commands/ClientToServer/RecomputeCommand.mjs +27 -0
  45. package/esm2022/src/commands/ClientToServer/RefreshEventCommand.mjs +27 -0
  46. package/esm2022/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +24 -0
  47. package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +40 -0
  48. package/{esm2020 → esm2022}/src/commands/ClientToServer/SelectProgramCommand.mjs +14 -14
  49. package/{esm2020 → esm2022}/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs +9 -9
  50. package/{esm2020 → esm2022}/src/commands/ClientToServer/SubformOpenEventCommand.mjs +21 -21
  51. package/esm2022/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +24 -0
  52. package/esm2022/src/commands/ClientToServer/TransactionCommand.mjs +30 -0
  53. package/{esm2020 → esm2022}/src/commands/ClientToServer/UnloadCommand.mjs +14 -14
  54. package/esm2022/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +18 -0
  55. package/esm2022/src/commands/DataViewCommandBase.mjs +8 -0
  56. package/{esm2020 → esm2022}/src/commands/IClientCommand.mjs +1 -1
  57. package/esm2022/src/commands/IClientTargetedCommand.mjs +13 -0
  58. package/{esm2020 → esm2022}/src/commands/IClientToServerCommandInfo.mjs +1 -1
  59. package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +65 -0
  60. package/{esm2020 → esm2022}/src/commands/ServerToClient/AddLocateCommand.mjs +21 -21
  61. package/esm2022/src/commands/ServerToClient/AddRangeCommand.mjs +62 -0
  62. package/esm2022/src/commands/ServerToClient/AddSortCommand.mjs +33 -0
  63. package/esm2022/src/commands/ServerToClient/ClientRefreshCommand.mjs +25 -0
  64. package/esm2022/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +24 -0
  65. package/esm2022/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +45 -0
  66. package/esm2022/src/commands/ServerToClient/OpenURLCommand.mjs +221 -0
  67. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetLocateCommand.mjs +14 -14
  68. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetRangeCommand.mjs +14 -14
  69. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetSortCommand.mjs +14 -14
  70. package/esm2022/src/commands/ServerToClient/ResultCommand.mjs +37 -0
  71. package/esm2022/src/commands/ServerToClient/VerifyCommand.mjs +83 -0
  72. package/esm2022/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +132 -0
  73. package/{esm2020 → esm2022}/src/communications/IConnectionStateManager.mjs +1 -1
  74. package/esm2022/src/communications/InteractiveCommunicationsFailureHandler.mjs +15 -0
  75. package/{esm2020 → esm2022}/src/data/DataSourceIdKey.mjs +2 -2
  76. package/esm2022/src/data/DataView.mjs +1613 -0
  77. package/{esm2020 → esm2022}/src/data/DataViewBase.mjs +3 -3
  78. package/esm2022/src/data/DataviewManager.mjs +28 -0
  79. package/esm2022/src/data/DataviewManagerBase.mjs +15 -0
  80. package/esm2022/src/data/DvCache.mjs +67 -0
  81. package/esm2022/src/data/Field.mjs +646 -0
  82. package/esm2022/src/data/FieldBase.mjs +15 -0
  83. package/esm2022/src/data/FieldsTable.mjs +103 -0
  84. package/{esm2020 → esm2022}/src/data/IRecordsTable.mjs +1 -1
  85. package/esm2022/src/data/Key.mjs +88 -0
  86. package/esm2022/src/data/Record.mjs +866 -0
  87. package/{esm2020 → esm2022}/src/data/RecordOutOfDataViewException.mjs +15 -15
  88. package/esm2022/src/data/RecordsTable.mjs +267 -0
  89. package/esm2022/src/data/TaskTransactionManager.mjs +103 -0
  90. package/esm2022/src/data/XMLBasedDcValuesBuilder.mjs +74 -0
  91. package/{esm2020 → esm2022}/src/enums.mjs +23 -23
  92. package/esm2022/src/env/EnvVariablesTable.mjs +340 -0
  93. package/esm2022/src/env/Environment.mjs +487 -0
  94. package/{esm2020 → esm2022}/src/env/ILanguageData.mjs +1 -1
  95. package/esm2022/src/env/LanguageData.mjs +226 -0
  96. package/esm2022/src/env/MirrorString.mjs +65 -0
  97. package/esm2022/src/event/ActionManager.mjs +91 -0
  98. package/esm2022/src/event/Event.mjs +1333 -0
  99. package/esm2022/src/event/EventHandler.mjs +766 -0
  100. package/esm2022/src/event/EventHandlerPosition.mjs +204 -0
  101. package/esm2022/src/event/EventsManager.mjs +2975 -0
  102. package/{esm2020 → esm2022}/src/event/IEventsManager.mjs +6 -6
  103. package/esm2022/src/event/RunTimeEvent.mjs +392 -0
  104. package/{esm2020 → esm2022}/src/event/RunTimeEventBase.mjs +3 -3
  105. package/esm2022/src/event/UserEventsTable.mjs +47 -0
  106. package/esm2022/src/exp/ExpTable.mjs +57 -0
  107. package/esm2022/src/exp/Expression.mjs +200 -0
  108. package/esm2022/src/exp/ExpressionDict.mjs +727 -0
  109. package/esm2022/src/exp/ExpressionEvaluator.mjs +4206 -0
  110. package/esm2022/src/exp/ExpressionLocalJpn.mjs +314 -0
  111. package/esm2022/src/exp/GlobalParamsTable.mjs +85 -0
  112. package/esm2022/src/exp/YesNoExp.mjs +36 -0
  113. package/esm2022/src/gui/CreatedFormVector.mjs +23 -0
  114. package/esm2022/src/gui/FormsTable.mjs +66 -0
  115. package/esm2022/src/gui/MgControl.mjs +363 -0
  116. package/esm2022/src/gui/MgForm.mjs +1181 -0
  117. package/esm2022/src/http/HttpManager.mjs +97 -0
  118. package/esm2022/src/http/client/HttpClientAsync.mjs +68 -0
  119. package/esm2022/src/http/client/HttpClientBase.mjs +132 -0
  120. package/esm2022/src/http/client/HttpClientEvents.mjs +39 -0
  121. package/esm2022/src/http/client/HttpClientSync.mjs +42 -0
  122. package/esm2022/src/http/client/HttpUtility.mjs +84 -0
  123. package/{esm2020 → esm2022}/src/http/client/ICommunicationsFailureHandler.mjs +1 -1
  124. package/esm2022/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -0
  125. package/esm2022/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -0
  126. package/esm2022/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -0
  127. package/esm2022/src/remote/RemoteCommandsProcessor.mjs +882 -0
  128. package/esm2022/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -0
  129. package/esm2022/src/remote/RemoteDataViewCommandBase.mjs +24 -0
  130. package/esm2022/src/remote/RemoteDataViewCommandFactory.mjs +61 -0
  131. package/{esm2020 → esm2022}/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +15 -15
  132. package/{esm2020 → esm2022}/src/remote/RemoteDataviewManager.mjs +17 -17
  133. package/{esm2020 → esm2022}/src/remote/RemoteInitDataViewCommand.mjs +10 -10
  134. package/esm2022/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +17 -0
  135. package/{esm2020 → esm2022}/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +12 -12
  136. package/esm2022/src/remote/ResetUserSortRemoteDataviewCommand.mjs +16 -0
  137. package/esm2022/src/remote/ServerError.mjs +40 -0
  138. package/esm2022/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +20 -0
  139. package/esm2022/src/rt/Argument.mjs +265 -0
  140. package/esm2022/src/rt/ArgumentsList.mjs +103 -0
  141. package/esm2022/src/rt/Boundary.mjs +152 -0
  142. package/esm2022/src/rt/CompMainPrgTable.mjs +63 -0
  143. package/{esm2020 → esm2022}/src/rt/DataviewHeaderBase.mjs +98 -96
  144. package/{esm2020 → esm2022}/src/rt/DataviewHeaderFactory.mjs +6 -6
  145. package/esm2022/src/rt/DataviewHeaders.mjs +53 -0
  146. package/esm2022/src/rt/DataviewHeadersSaxHandler.mjs +38 -0
  147. package/esm2022/src/rt/ExecutionStack.mjs +94 -0
  148. package/{esm2020 → esm2022}/src/rt/ExecutionStackEntry.mjs +17 -17
  149. package/esm2022/src/rt/HandlersTable.mjs +96 -0
  150. package/{esm2020 → esm2022}/src/rt/IDataSourceViewDefinition.mjs +1 -1
  151. package/{esm2020 → esm2022}/src/rt/IDataviewHeader.mjs +1 -1
  152. package/{esm2020 → esm2022}/src/rt/IResultValue.mjs +1 -1
  153. package/esm2022/src/rt/LastFocusedManager.mjs +65 -0
  154. package/esm2022/src/rt/Operation.mjs +735 -0
  155. package/esm2022/src/rt/OperationTable.mjs +67 -0
  156. package/esm2022/src/rt/Recompute.mjs +355 -0
  157. package/esm2022/src/rt/RecomputeTable.mjs +63 -0
  158. package/esm2022/src/rt/RemoteDataviewHeader.mjs +108 -0
  159. package/esm2022/src/rt/ResultValue.mjs +10 -0
  160. package/esm2022/src/rt/TableCache.mjs +177 -0
  161. package/esm2022/src/rt/TableCacheManager.mjs +67 -0
  162. package/esm2022/src/rt/Transaction.mjs +53 -0
  163. package/esm2022/src/security/UserDetails.mjs +71 -0
  164. package/{esm2020 → esm2022}/src/tasks/IMGDataCollection.mjs +1 -1
  165. package/esm2022/src/tasks/MGData.mjs +552 -0
  166. package/esm2022/src/tasks/MGDataCollection.mjs +252 -0
  167. package/esm2022/src/tasks/RCTimer.mjs +63 -0
  168. package/esm2022/src/tasks/RemoteTaskService.mjs +45 -0
  169. package/esm2022/src/tasks/Task.mjs +2497 -0
  170. package/esm2022/src/tasks/TaskBase.mjs +83 -0
  171. package/esm2022/src/tasks/TaskServiceBase.mjs +25 -0
  172. package/esm2022/src/tasks/TasksTable.mjs +80 -0
  173. package/esm2022/src/tasks/sort/Sort.mjs +5 -0
  174. package/esm2022/src/tasks/sort/SortCollection.mjs +67 -0
  175. package/esm2022/src/util/ConstUtils.mjs +14 -0
  176. package/esm2022/src/util/FlowMonitorQueue.mjs +451 -0
  177. package/esm2022/src/util/HeapSort.mjs +70 -0
  178. package/{esm2020 → esm2022}/src/util/IMirrorXML.mjs +1 -1
  179. package/{esm2020 → esm2022}/src/util/IServerConfig.mjs +1 -1
  180. package/{esm2020 → esm2022}/src/util/MgBlockingQueue.mjs +1 -1
  181. package/esm2022/src/util/MgPriorityBlockingQueue.mjs +74 -0
  182. package/esm2022/src/util/MgPriorityQueue.mjs +66 -0
  183. package/{esm2020 → esm2022}/src/util/ParamParseResult.mjs +7 -7
  184. package/esm2022/src/util/PrmMap.mjs +152 -0
  185. package/esm2022/src/util/ReturnResult.mjs +46 -0
  186. package/esm2022/src/util/ReturnResultBase.mjs +18 -0
  187. package/esm2022/src/util/Scrambler.mjs +89 -0
  188. package/esm2022/src/util/UniqueIDUtils.mjs +13 -0
  189. package/esm2022/src/util/cookie.service.mjs +92 -0
  190. package/{fesm2020 → fesm2022}/magic-xpa-engine.mjs +29713 -29693
  191. package/fesm2022/magic-xpa-engine.mjs.map +1 -0
  192. package/index.d.ts +187 -187
  193. package/package.json +8 -14
  194. package/src/AccessHelper.d.ts +20 -20
  195. package/src/ClientManager.d.ts +32 -32
  196. package/src/CommandsProcessorBase.d.ts +23 -23
  197. package/src/CommandsProcessorManager.d.ts +6 -6
  198. package/src/CommandsTable.d.ts +22 -22
  199. package/src/ConstInterface.d.ts +515 -515
  200. package/src/CurrentClientVersion.d.ts +1 -1
  201. package/src/FlowMonitorInterface.d.ts +15 -15
  202. package/src/GUIManager.d.ts +17 -17
  203. package/src/GlobalCommandsManager.d.ts +17 -17
  204. package/src/GuiEventsProcessor.d.ts +24 -24
  205. package/src/ICommandsTable.d.ts +9 -9
  206. package/src/ServerConfig.d.ts +34 -34
  207. package/src/bridge/IGuiEvent.d.ts +19 -19
  208. package/src/bridge/MagicBridge.d.ts +16 -16
  209. package/src/commands/ClientOriginatedCommandTaskTag.d.ts +8 -8
  210. package/src/commands/ClientToServer/AddUserLocateDataViewCommand.d.ts +4 -4
  211. package/src/commands/ClientToServer/AddUserRangeDataviewCommand.d.ts +6 -6
  212. package/src/commands/ClientToServer/AddUserSortDataViewCommand.d.ts +6 -6
  213. package/src/commands/ClientToServer/BrowserEscEventCommand.d.ts +8 -8
  214. package/src/commands/ClientToServer/ClientOriginatedCommand.d.ts +8 -8
  215. package/src/commands/ClientToServer/ClientOriginatedCommandSerializer.d.ts +6 -6
  216. package/src/commands/ClientToServer/ColumnSortEventCommand.d.ts +10 -10
  217. package/src/commands/ClientToServer/CommandFactory.d.ts +64 -64
  218. package/src/commands/ClientToServer/CommandSerializationHelper.d.ts +20 -20
  219. package/src/commands/ClientToServer/ComputeEventCommand.d.ts +8 -8
  220. package/src/commands/ClientToServer/ContextTerminationEventCommand.d.ts +7 -7
  221. package/src/commands/ClientToServer/ContextTimeoutResetCommand.d.ts +7 -7
  222. package/src/commands/ClientToServer/ControlItemsRefreshCommand.d.ts +6 -6
  223. package/src/commands/ClientToServer/DataViewOutputCommand.d.ts +9 -9
  224. package/src/commands/ClientToServer/DataviewCommand.d.ts +32 -32
  225. package/src/commands/ClientToServer/EvaluateCommand.d.ts +15 -15
  226. package/src/commands/ClientToServer/EventCommand.d.ts +15 -15
  227. package/src/commands/ClientToServer/ExecOperCommand.d.ts +23 -23
  228. package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +8 -8
  229. package/src/commands/ClientToServer/GlobalParamsQueryCommand.d.ts +5 -5
  230. package/src/commands/ClientToServer/ICommandTaskTag.d.ts +3 -3
  231. package/src/commands/ClientToServer/IndexChangeEventCommand.d.ts +8 -8
  232. package/src/commands/ClientToServer/IniputForceWriteCommand.d.ts +10 -10
  233. package/src/commands/ClientToServer/NonReversibleExitEventCommand.d.ts +8 -8
  234. package/src/commands/ClientToServer/QueryCommand.d.ts +8 -8
  235. package/src/commands/ClientToServer/RecomputeCommand.d.ts +11 -11
  236. package/src/commands/ClientToServer/RefreshEventCommand.d.ts +12 -12
  237. package/src/commands/ClientToServer/RefreshScreenEventCommand.d.ts +10 -10
  238. package/src/commands/ClientToServer/RollbackEventCommand.d.ts +14 -14
  239. package/src/commands/ClientToServer/SelectProgramCommand.d.ts +6 -6
  240. package/src/commands/ClientToServer/SetTransactionStateDataviewCommand.d.ts +5 -5
  241. package/src/commands/ClientToServer/SubformOpenEventCommand.d.ts +8 -8
  242. package/src/commands/ClientToServer/SubformRefreshEventCommand.d.ts +9 -9
  243. package/src/commands/ClientToServer/TransactionCommand.d.ts +12 -12
  244. package/src/commands/ClientToServer/UnloadCommand.d.ts +7 -7
  245. package/src/commands/ClientToServer/WriteMessageToServerLogCommand.d.ts +6 -6
  246. package/src/commands/DataViewCommandBase.d.ts +6 -6
  247. package/src/commands/IClientCommand.d.ts +2 -2
  248. package/src/commands/IClientTargetedCommand.d.ts +12 -12
  249. package/src/commands/IClientToServerCommandInfo.d.ts +3 -3
  250. package/src/commands/ServerToClient/AbortCommand.d.ts +11 -11
  251. package/src/commands/ServerToClient/AddLocateCommand.d.ts +6 -6
  252. package/src/commands/ServerToClient/AddRangeCommand.d.ts +10 -10
  253. package/src/commands/ServerToClient/AddSortCommand.d.ts +9 -9
  254. package/src/commands/ServerToClient/ClientRefreshCommand.d.ts +7 -7
  255. package/src/commands/ServerToClient/ClientTargetedCommandBase.d.ts +12 -12
  256. package/src/commands/ServerToClient/EnhancedVerifyCommand.d.ts +13 -13
  257. package/src/commands/ServerToClient/OpenURLCommand.d.ts +21 -21
  258. package/src/commands/ServerToClient/ResetLocateCommand.d.ts +6 -6
  259. package/src/commands/ServerToClient/ResetRangeCommand.d.ts +6 -6
  260. package/src/commands/ServerToClient/ResetSortCommand.d.ts +6 -6
  261. package/src/commands/ServerToClient/ResultCommand.d.ts +10 -10
  262. package/src/commands/ServerToClient/VerifyCommand.d.ts +17 -17
  263. package/src/commands/ServerToClient/XMLBasedCommandBuilder.d.ts +11 -11
  264. package/src/communications/IConnectionStateManager.d.ts +4 -4
  265. package/src/communications/InteractiveCommunicationsFailureHandler.d.ts +6 -6
  266. package/src/data/DataSourceIdKey.d.ts +2 -2
  267. package/src/data/DataView.d.ts +162 -162
  268. package/src/data/DataViewBase.d.ts +12 -12
  269. package/src/data/DataviewManager.d.ts +14 -14
  270. package/src/data/DataviewManagerBase.d.ts +11 -11
  271. package/src/data/DvCache.d.ts +15 -15
  272. package/src/data/Field.d.ts +103 -103
  273. package/src/data/FieldBase.d.ts +23 -23
  274. package/src/data/FieldsTable.d.ts +27 -27
  275. package/src/data/IRecordsTable.d.ts +7 -7
  276. package/src/data/Key.d.ts +15 -15
  277. package/src/data/Record.d.ts +156 -156
  278. package/src/data/RecordOutOfDataViewException.d.ts +10 -10
  279. package/src/data/RecordsTable.d.ts +38 -38
  280. package/src/data/TaskTransactionManager.d.ts +17 -17
  281. package/src/data/XMLBasedDcValuesBuilder.d.ts +11 -11
  282. package/src/enums.d.ts +21 -21
  283. package/src/env/EnvVariablesTable.d.ts +17 -17
  284. package/src/env/Environment.d.ts +118 -118
  285. package/src/env/ILanguageData.d.ts +3 -3
  286. package/src/env/LanguageData.d.ts +20 -20
  287. package/src/env/MirrorString.d.ts +15 -15
  288. package/src/event/ActionManager.d.ts +14 -14
  289. package/src/event/Event.d.ts +79 -79
  290. package/src/event/EventHandler.d.ts +66 -66
  291. package/src/event/EventHandlerPosition.d.ts +25 -25
  292. package/src/event/EventsManager.d.ts +204 -204
  293. package/src/event/IEventsManager.d.ts +77 -77
  294. package/src/event/RunTimeEvent.d.ts +123 -123
  295. package/src/event/RunTimeEventBase.d.ts +5 -5
  296. package/src/event/UserEventsTable.d.ts +11 -11
  297. package/src/exp/ExpTable.d.ts +11 -11
  298. package/src/exp/Expression.d.ts +37 -37
  299. package/src/exp/ExpressionDict.d.ts +12 -12
  300. package/src/exp/ExpressionEvaluator.d.ts +198 -198
  301. package/src/exp/ExpressionLocalJpn.d.ts +18 -18
  302. package/src/exp/GlobalParamsTable.d.ts +19 -19
  303. package/src/exp/YesNoExp.d.ts +9 -9
  304. package/src/gui/CreatedFormVector.d.ts +10 -10
  305. package/src/gui/FormsTable.d.ts +15 -15
  306. package/src/gui/MgControl.d.ts +60 -60
  307. package/src/gui/MgForm.d.ts +93 -93
  308. package/src/http/HttpManager.d.ts +25 -25
  309. package/src/http/client/HttpClientAsync.d.ts +16 -16
  310. package/src/http/client/HttpClientBase.d.ts +30 -30
  311. package/src/http/client/HttpClientEvents.d.ts +18 -18
  312. package/src/http/client/HttpClientSync.d.ts +17 -17
  313. package/src/http/client/HttpUtility.d.ts +10 -10
  314. package/src/http/client/ICommunicationsFailureHandler.d.ts +5 -5
  315. package/src/remote/AddUserLocateRemoteDataViewCommand.d.ts +8 -8
  316. package/src/remote/AddUserRangeRemoteDataViewCommand.d.ts +8 -8
  317. package/src/remote/AddUserSortRemoteDataViewCommand.d.ts +8 -8
  318. package/src/remote/RemoteCommandsProcessor.d.ts +51 -51
  319. package/src/remote/RemoteControlItemsRefreshCommand.d.ts +8 -8
  320. package/src/remote/RemoteDataViewCommandBase.d.ts +10 -10
  321. package/src/remote/RemoteDataViewCommandFactory.d.ts +6 -6
  322. package/src/remote/RemoteDataViewCommandUpdateNonModifiable.d.ts +8 -8
  323. package/src/remote/RemoteDataviewManager.d.ts +9 -9
  324. package/src/remote/RemoteInitDataViewCommand.d.ts +7 -7
  325. package/src/remote/ResetUserLocateRemoteDataviewCommand.d.ts +7 -7
  326. package/src/remote/ResetUserRangeRemoteDataviewCommand.d.ts +7 -7
  327. package/src/remote/ResetUserSortRemoteDataviewCommand.d.ts +7 -7
  328. package/src/remote/ServerError.d.ts +16 -16
  329. package/src/remote/SetTransactionStateRemoteDataViewCommand.d.ts +8 -8
  330. package/src/rt/Argument.d.ts +36 -36
  331. package/src/rt/ArgumentsList.d.ts +24 -24
  332. package/src/rt/Boundary.d.ts +27 -27
  333. package/src/rt/CompMainPrgTable.d.ts +10 -10
  334. package/src/rt/DataviewHeaderBase.d.ts +34 -34
  335. package/src/rt/DataviewHeaderFactory.d.ts +5 -5
  336. package/src/rt/DataviewHeaders.d.ts +12 -12
  337. package/src/rt/DataviewHeadersSaxHandler.d.ts +10 -10
  338. package/src/rt/ExecutionStack.d.ts +22 -22
  339. package/src/rt/ExecutionStackEntry.d.ts +7 -7
  340. package/src/rt/HandlersTable.d.ts +19 -19
  341. package/src/rt/IDataSourceViewDefinition.d.ts +6 -6
  342. package/src/rt/IDataviewHeader.d.ts +10 -10
  343. package/src/rt/IResultValue.d.ts +4 -4
  344. package/src/rt/LastFocusedManager.d.ts +23 -23
  345. package/src/rt/Operation.d.ts +97 -97
  346. package/src/rt/OperationTable.d.ts +15 -15
  347. package/src/rt/Recompute.d.ts +41 -41
  348. package/src/rt/RecomputeTable.d.ts +9 -9
  349. package/src/rt/RemoteDataviewHeader.d.ts +14 -14
  350. package/src/rt/ResultValue.d.ts +7 -7
  351. package/src/rt/TableCache.d.ts +29 -29
  352. package/src/rt/TableCacheManager.d.ts +10 -10
  353. package/src/rt/Transaction.d.ts +23 -23
  354. package/src/security/UserDetails.d.ts +16 -16
  355. package/src/tasks/IMGDataCollection.d.ts +26 -26
  356. package/src/tasks/MGData.d.ts +63 -63
  357. package/src/tasks/MGDataCollection.d.ts +42 -42
  358. package/src/tasks/RCTimer.d.ts +13 -13
  359. package/src/tasks/RemoteTaskService.d.ts +16 -16
  360. package/src/tasks/Task.d.ts +312 -312
  361. package/src/tasks/TaskBase.d.ts +123 -123
  362. package/src/tasks/TaskServiceBase.d.ts +16 -16
  363. package/src/tasks/TasksTable.d.ts +21 -21
  364. package/src/tasks/sort/Sort.d.ts +4 -4
  365. package/src/tasks/sort/SortCollection.d.ts +11 -11
  366. package/src/util/ConstUtils.d.ts +3 -3
  367. package/src/util/FlowMonitorQueue.d.ts +70 -70
  368. package/src/util/HeapSort.d.ts +6 -6
  369. package/src/util/IMirrorXML.d.ts +6 -6
  370. package/src/util/IServerConfig.d.ts +11 -11
  371. package/src/util/MgBlockingQueue.d.ts +5 -5
  372. package/src/util/MgPriorityBlockingQueue.d.ts +17 -17
  373. package/src/util/MgPriorityQueue.d.ts +13 -13
  374. package/src/util/ParamParseResult.d.ts +6 -6
  375. package/src/util/PrmMap.d.ts +28 -28
  376. package/src/util/ReturnResult.d.ts +18 -18
  377. package/src/util/ReturnResultBase.d.ts +11 -11
  378. package/src/util/Scrambler.d.ts +10 -10
  379. package/src/util/UniqueIDUtils.d.ts +4 -4
  380. package/src/util/cookie.service.d.ts +8 -8
  381. package/esm2020/src/AccessHelper.mjs +0 -9
  382. package/esm2020/src/ClientManager.mjs +0 -399
  383. package/esm2020/src/CommandsProcessorBase.mjs +0 -58
  384. package/esm2020/src/CommandsProcessorManager.mjs +0 -26
  385. package/esm2020/src/CommandsTable.mjs +0 -162
  386. package/esm2020/src/ConstInterface.mjs +0 -516
  387. package/esm2020/src/FlowMonitorInterface.mjs +0 -16
  388. package/esm2020/src/GUIManager.mjs +0 -62
  389. package/esm2020/src/GlobalCommandsManager.mjs +0 -34
  390. package/esm2020/src/GuiEventsProcessor.mjs +0 -154
  391. package/esm2020/src/ServerConfig.mjs +0 -117
  392. package/esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs +0 -11
  393. package/esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +0 -60
  394. package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +0 -260
  395. package/esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs +0 -69
  396. package/esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs +0 -13
  397. package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +0 -36
  398. package/esm2020/src/commands/ClientToServer/EventCommand.mjs +0 -40
  399. package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +0 -67
  400. package/esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +0 -22
  401. package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +0 -23
  402. package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +0 -27
  403. package/esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs +0 -27
  404. package/esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +0 -24
  405. package/esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs +0 -39
  406. package/esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +0 -24
  407. package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +0 -28
  408. package/esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +0 -18
  409. package/esm2020/src/commands/DataViewCommandBase.mjs +0 -10
  410. package/esm2020/src/commands/IClientTargetedCommand.mjs +0 -9
  411. package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +0 -65
  412. package/esm2020/src/commands/ServerToClient/AddRangeCommand.mjs +0 -62
  413. package/esm2020/src/commands/ServerToClient/AddSortCommand.mjs +0 -33
  414. package/esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs +0 -25
  415. package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +0 -27
  416. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +0 -45
  417. package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +0 -221
  418. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +0 -37
  419. package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +0 -83
  420. package/esm2020/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +0 -132
  421. package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +0 -17
  422. package/esm2020/src/data/DataView.mjs +0 -1610
  423. package/esm2020/src/data/DataviewManager.mjs +0 -28
  424. package/esm2020/src/data/DataviewManagerBase.mjs +0 -15
  425. package/esm2020/src/data/DvCache.mjs +0 -67
  426. package/esm2020/src/data/Field.mjs +0 -646
  427. package/esm2020/src/data/FieldBase.mjs +0 -18
  428. package/esm2020/src/data/FieldsTable.mjs +0 -103
  429. package/esm2020/src/data/Key.mjs +0 -88
  430. package/esm2020/src/data/Record.mjs +0 -846
  431. package/esm2020/src/data/RecordsTable.mjs +0 -267
  432. package/esm2020/src/data/TaskTransactionManager.mjs +0 -103
  433. package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +0 -74
  434. package/esm2020/src/env/EnvVariablesTable.mjs +0 -340
  435. package/esm2020/src/env/Environment.mjs +0 -489
  436. package/esm2020/src/env/LanguageData.mjs +0 -226
  437. package/esm2020/src/env/MirrorString.mjs +0 -65
  438. package/esm2020/src/event/ActionManager.mjs +0 -91
  439. package/esm2020/src/event/Event.mjs +0 -1333
  440. package/esm2020/src/event/EventHandler.mjs +0 -766
  441. package/esm2020/src/event/EventHandlerPosition.mjs +0 -204
  442. package/esm2020/src/event/EventsManager.mjs +0 -2975
  443. package/esm2020/src/event/RunTimeEvent.mjs +0 -392
  444. package/esm2020/src/event/UserEventsTable.mjs +0 -47
  445. package/esm2020/src/exp/ExpTable.mjs +0 -59
  446. package/esm2020/src/exp/Expression.mjs +0 -200
  447. package/esm2020/src/exp/ExpressionDict.mjs +0 -727
  448. package/esm2020/src/exp/ExpressionEvaluator.mjs +0 -4212
  449. package/esm2020/src/exp/ExpressionLocalJpn.mjs +0 -314
  450. package/esm2020/src/exp/GlobalParamsTable.mjs +0 -85
  451. package/esm2020/src/exp/YesNoExp.mjs +0 -36
  452. package/esm2020/src/gui/CreatedFormVector.mjs +0 -23
  453. package/esm2020/src/gui/FormsTable.mjs +0 -66
  454. package/esm2020/src/gui/MgControl.mjs +0 -353
  455. package/esm2020/src/gui/MgForm.mjs +0 -1181
  456. package/esm2020/src/http/HttpManager.mjs +0 -97
  457. package/esm2020/src/http/client/HttpClientAsync.mjs +0 -67
  458. package/esm2020/src/http/client/HttpClientBase.mjs +0 -132
  459. package/esm2020/src/http/client/HttpClientEvents.mjs +0 -39
  460. package/esm2020/src/http/client/HttpClientSync.mjs +0 -42
  461. package/esm2020/src/http/client/HttpUtility.mjs +0 -84
  462. package/esm2020/src/remote/AddUserLocateRemoteDataViewCommand.mjs +0 -18
  463. package/esm2020/src/remote/AddUserRangeRemoteDataViewCommand.mjs +0 -18
  464. package/esm2020/src/remote/AddUserSortRemoteDataViewCommand.mjs +0 -18
  465. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +0 -880
  466. package/esm2020/src/remote/RemoteControlItemsRefreshCommand.mjs +0 -25
  467. package/esm2020/src/remote/RemoteDataViewCommandBase.mjs +0 -24
  468. package/esm2020/src/remote/RemoteDataViewCommandFactory.mjs +0 -61
  469. package/esm2020/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +0 -17
  470. package/esm2020/src/remote/ResetUserSortRemoteDataviewCommand.mjs +0 -16
  471. package/esm2020/src/remote/ServerError.mjs +0 -40
  472. package/esm2020/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +0 -20
  473. package/esm2020/src/rt/Argument.mjs +0 -265
  474. package/esm2020/src/rt/ArgumentsList.mjs +0 -103
  475. package/esm2020/src/rt/Boundary.mjs +0 -152
  476. package/esm2020/src/rt/CompMainPrgTable.mjs +0 -65
  477. package/esm2020/src/rt/DataviewHeaders.mjs +0 -53
  478. package/esm2020/src/rt/DataviewHeadersSaxHandler.mjs +0 -38
  479. package/esm2020/src/rt/ExecutionStack.mjs +0 -94
  480. package/esm2020/src/rt/HandlersTable.mjs +0 -96
  481. package/esm2020/src/rt/LastFocusedManager.mjs +0 -67
  482. package/esm2020/src/rt/Operation.mjs +0 -735
  483. package/esm2020/src/rt/OperationTable.mjs +0 -67
  484. package/esm2020/src/rt/Recompute.mjs +0 -355
  485. package/esm2020/src/rt/RecomputeTable.mjs +0 -63
  486. package/esm2020/src/rt/RemoteDataviewHeader.mjs +0 -108
  487. package/esm2020/src/rt/ResultValue.mjs +0 -12
  488. package/esm2020/src/rt/TableCache.mjs +0 -177
  489. package/esm2020/src/rt/TableCacheManager.mjs +0 -67
  490. package/esm2020/src/rt/Transaction.mjs +0 -53
  491. package/esm2020/src/security/UserDetails.mjs +0 -71
  492. package/esm2020/src/tasks/MGData.mjs +0 -552
  493. package/esm2020/src/tasks/MGDataCollection.mjs +0 -252
  494. package/esm2020/src/tasks/RCTimer.mjs +0 -63
  495. package/esm2020/src/tasks/RemoteTaskService.mjs +0 -45
  496. package/esm2020/src/tasks/Task.mjs +0 -2495
  497. package/esm2020/src/tasks/TaskBase.mjs +0 -87
  498. package/esm2020/src/tasks/TaskServiceBase.mjs +0 -25
  499. package/esm2020/src/tasks/TasksTable.mjs +0 -80
  500. package/esm2020/src/tasks/sort/Sort.mjs +0 -7
  501. package/esm2020/src/tasks/sort/SortCollection.mjs +0 -67
  502. package/esm2020/src/util/ConstUtils.mjs +0 -14
  503. package/esm2020/src/util/FlowMonitorQueue.mjs +0 -453
  504. package/esm2020/src/util/HeapSort.mjs +0 -70
  505. package/esm2020/src/util/MgPriorityBlockingQueue.mjs +0 -74
  506. package/esm2020/src/util/MgPriorityQueue.mjs +0 -66
  507. package/esm2020/src/util/PrmMap.mjs +0 -151
  508. package/esm2020/src/util/ReturnResult.mjs +0 -46
  509. package/esm2020/src/util/ReturnResultBase.mjs +0 -18
  510. package/esm2020/src/util/Scrambler.mjs +0 -89
  511. package/esm2020/src/util/UniqueIDUtils.mjs +0 -12
  512. package/esm2020/src/util/cookie.service.mjs +0 -92
  513. package/fesm2015/magic-xpa-engine.mjs +0 -30835
  514. package/fesm2015/magic-xpa-engine.mjs.map +0 -1
  515. package/fesm2020/magic-xpa-engine.mjs.map +0 -1
@@ -0,0 +1,399 @@
1
+ import { ApplicationException, DateTime, NString, RefParam } from '@magic-xpa/mscorelib';
2
+ import { DateTimeUtils, InternalInterface, Logger, Misc, OSEnvironment, StorageAttribute, XMLConstants } from '@magic-xpa/utils';
3
+ import { Commands, CommandType, DisplayConvertor, Events, GuiDataCollection, GuiEnvironment, Manager, PIC, PropInterface, RuntimeContextBase, Styles } from '@magic-xpa/gui';
4
+ import { EventsManager } from './event/EventsManager';
5
+ import { GuiEventsProcessor } from './GuiEventsProcessor';
6
+ import { Environment } from './env/Environment';
7
+ import { LanguageData } from './env/LanguageData';
8
+ import { TasksTable } from './tasks/TasksTable';
9
+ import { Task } from './tasks/Task';
10
+ import { MGDataCollection } from './tasks/MGDataCollection';
11
+ import { UniqueIDUtils } from './util/UniqueIDUtils';
12
+ import { HttpManager } from './http/HttpManager';
13
+ import { CommandsTable } from './CommandsTable';
14
+ import { RemoteCommandsProcessor } from './remote/RemoteCommandsProcessor';
15
+ import { CommandsProcessorBase_SendingInstruction } from './CommandsProcessorBase';
16
+ import { CommandsProcessorManager } from './CommandsProcessorManager';
17
+ import { MGData } from './tasks/MGData';
18
+ import { ServerError } from './remote/ServerError';
19
+ import { HttpClientEvents } from './http/client/HttpClientEvents';
20
+ import { CommandFactory } from './commands/ClientToServer/CommandFactory';
21
+ import { CurrentClientVersion } from './CurrentClientVersion';
22
+ import { LastFocusedManager } from './rt/LastFocusedManager';
23
+ import { EnvParamsTable } from './env/EnvVariablesTable';
24
+ import { GlobalParams } from './exp/GlobalParamsTable';
25
+ import { OpenURLCommand } from './commands/ServerToClient/OpenURLCommand';
26
+ import { ServerConfig } from './ServerConfig';
27
+ import { AccessHelper } from './AccessHelper';
28
+ import { GUIManager } from "./GUIManager";
29
+ export class ClientManager {
30
+ static _instance = null;
31
+ _globalUniqueSessionId = null;
32
+ _buttonIsClicked = false;
33
+ static _executionPropertiesFileName = "./assets/server-config.json";
34
+ static get Instance() {
35
+ if (ClientManager._instance === null)
36
+ ClientManager._instance = new ClientManager();
37
+ return ClientManager._instance;
38
+ }
39
+ AddEvent(guiEvent) {
40
+ let task = MGDataCollection.Instance.GetTaskByID(guiEvent.TaskID);
41
+ let lineIdx = +guiEvent.Line;
42
+ let dvRowIdx = 0;
43
+ if (task != null) {
44
+ let control = null;
45
+ if (guiEvent.ControlName !== null)
46
+ control = task.getForm().GetCtrl(guiEvent.ControlName);
47
+ if (control != null) {
48
+ let dv = task.DataView;
49
+ if (control.IsTableChild) {
50
+ lineIdx -= dv.RecordsBeforeCurrentView;
51
+ }
52
+ switch (guiEvent.EventType) {
53
+ case "columnSort":
54
+ if (control.isColumnSortable()) {
55
+ Events.OnColumnClick(control, guiEvent.Line, guiEvent.ControlName);
56
+ }
57
+ break;
58
+ case "mousedown":
59
+ if (control.isButton()) {
60
+ this._buttonIsClicked = true;
61
+ }
62
+ else if (!control.isSubform())
63
+ Events.GetRuntimeContext(Manager.GetCurrentContextID()).LastClickedCtrlName = control.getName();
64
+ break;
65
+ case "click":
66
+ if (control.isButton() || (control.ConnectedControl && guiEvent.fromButton)) {
67
+ Events.OnSelection("", control, lineIdx, true);
68
+ Events.GetRuntimeContext(Manager.GetCurrentContextID()).LastClickedCtrlName = control.getName();
69
+ this._buttonIsClicked = false;
70
+ }
71
+ else {
72
+ Events.OnFocus(control, lineIdx, true, false);
73
+ let produceClick = control.isButton() || control.isTextControl() || control.isLabel() || control.isTabControl() || control.isTableControl() || control.isComboBox() || control.isImageControl();
74
+ Events.OnMouseDown(control.getForm(), control, null, true, lineIdx, false, produceClick);
75
+ }
76
+ break;
77
+ case "focus":
78
+ if (this._buttonIsClicked)
79
+ return;
80
+ Events.OnFocus(control, lineIdx, true, false);
81
+ break;
82
+ case "dblclick":
83
+ Events.OnDblClick(control, lineIdx);
84
+ break;
85
+ case "selectionchanged":
86
+ Events.OnSelection(guiEvent.Value, control, lineIdx, true);
87
+ break;
88
+ case "keydown":
89
+ Events.OnKeyDown(task.getForm(), control, guiEvent.modifiers, guiEvent.keyCode, 0, 0, '', false, '', true);
90
+ break;
91
+ case "setexternalvalue":
92
+ EventsManager.Instance.AddExternalValueEvent(control, guiEvent.externalValue, guiEvent.param);
93
+ break;
94
+ default:
95
+ break;
96
+ }
97
+ }
98
+ else {
99
+ switch (guiEvent.EventType) {
100
+ case "focusOnNonMagicControl":
101
+ control = LastFocusedManager.getLastFocusedControl();
102
+ if (control !== null) {
103
+ Events.OnFocusOnNonMagicControl(control);
104
+ }
105
+ break;
106
+ case "click":
107
+ if (guiEvent.ControlName === "magicRow") {
108
+ dvRowIdx = guiEvent.Line - task.DataView.RecordsBeforeCurrentView;
109
+ EventsManager.Instance.addGuiTriggeredEventWithTaskAndCodeAndLine(task, InternalInterface.MG_ACT_REC_PREFIX, dvRowIdx);
110
+ }
111
+ break;
112
+ case "navigateInTable":
113
+ if (guiEvent.ControlName === "magicRow")
114
+ this.handleNavigateInRowEvent(task, guiEvent.Value);
115
+ break;
116
+ case "close":
117
+ if (task.IsRoute())
118
+ EventsManager.Instance.AddRouterClosedEvent(task);
119
+ else
120
+ Events.CloseFormEvent(task.getForm());
121
+ break;
122
+ case "dispose":
123
+ MGDataCollection.Instance.deleteMGDataTree(task.getMgdID());
124
+ break;
125
+ case "resize":
126
+ Events.TableResizeEvent(task.getForm().getTableCtrl(), guiEvent.PageSize);
127
+ case "getRows":
128
+ dvRowIdx = lineIdx - task.DataView.RecordsBeforeCurrentView;
129
+ let lastFocusedVal = { guiMgControl: task.getForm().getTableCtrl(), Line: dvRowIdx, Val: "" };
130
+ Events.OnGetRowsData(task.getForm().getTableCtrl(), dvRowIdx, true, lastFocusedVal);
131
+ break;
132
+ case "RouterNavigate":
133
+ EventsManager.Instance.AddRouteEvent(task, InternalInterface.MG_ACT_WEBCLIENT_ROUTE, guiEvent.RouterPath, guiEvent.RouterOutletName, guiEvent.RouterParams);
134
+ break;
135
+ case "setexternalvalue":
136
+ Logger.Instance.WriteErrorToLog(NString.Format("Unable to find {0}: Trying to set value for a non-existing control.", guiEvent.ControlName));
137
+ break;
138
+ default:
139
+ break;
140
+ }
141
+ }
142
+ }
143
+ else
144
+ switch (guiEvent.EventType) {
145
+ case "confirmationClosed":
146
+ this.ConfirmationClosed(guiEvent.keyCode);
147
+ break;
148
+ }
149
+ }
150
+ handleNavigateInRowEvent(task, evt) {
151
+ let internalEvt = InternalInterface.MG_ACT_NONE;
152
+ evt = evt.toLowerCase();
153
+ switch (evt) {
154
+ case "begin-page":
155
+ internalEvt = InternalInterface.MG_ACT_TBL_BEGPAGE;
156
+ break;
157
+ case "previous-page":
158
+ internalEvt = InternalInterface.MG_ACT_TBL_PRVPAGE;
159
+ break;
160
+ case "end-page":
161
+ internalEvt = InternalInterface.MG_ACT_TBL_ENDPAGE;
162
+ break;
163
+ case "next-page":
164
+ internalEvt = InternalInterface.MG_ACT_TBL_NXTPAGE;
165
+ break;
166
+ case "previous-line":
167
+ internalEvt = InternalInterface.MG_ACT_TBL_PRVLINE;
168
+ break;
169
+ case "next-line":
170
+ internalEvt = InternalInterface.MG_ACT_TBL_NXTLINE;
171
+ break;
172
+ case "begin-table":
173
+ internalEvt = InternalInterface.MG_ACT_TBL_BEGTBL;
174
+ break;
175
+ case "end-table":
176
+ internalEvt = InternalInterface.MG_ACT_TBL_ENDTBL;
177
+ break;
178
+ }
179
+ if (internalEvt != InternalInterface.MG_ACT_NONE)
180
+ EventsManager.Instance.addGuiTriggeredEventWithTaskAndCode(task, internalEvt);
181
+ }
182
+ ConfirmationClosed(res) {
183
+ Commands.ResolvePromise(res);
184
+ }
185
+ async WorkThreadExecution() {
186
+ if (Logger.Instance.ShouldLog()) {
187
+ Logger.Instance.WriteToLog("", true);
188
+ Logger.Instance.WriteToLog("Started on " + DateTimeUtils.ToString(DateTime.Now, XMLConstants.ERROR_LOG_DATE_FORMAT, Logger.Instance), true);
189
+ this.WriteExecutionPropertiesToLog();
190
+ }
191
+ try {
192
+ if (await CommandsProcessorManager.StartSession()) {
193
+ let mgDataTab = MGDataCollection.Instance;
194
+ let startupMgData = mgDataTab.StartupMgData;
195
+ mgDataTab.currMgdID = startupMgData.GetId();
196
+ let nonInteractiveTask = null;
197
+ if (!startupMgData.IsAborting)
198
+ nonInteractiveTask = await Task.StartProgram(false, false);
199
+ if (nonInteractiveTask === null)
200
+ await EventsManager.Instance.EventsLoop(startupMgData);
201
+ else
202
+ await EventsManager.Instance.NonInteractiveEventsLoop(startupMgData, nonInteractiveTask);
203
+ EventsManager.Instance.setEndOfWork(true);
204
+ }
205
+ }
206
+ catch (ex) {
207
+ if (ex instanceof ApplicationException) {
208
+ let isNoResultError = false;
209
+ if (ex instanceof ServerError && ex.GetCode() === ServerError.INF_NO_RESULT)
210
+ isNoResultError = true;
211
+ if (!isNoResultError)
212
+ await EventsManager.Instance.ProcessAbortingError(ex);
213
+ EventsManager.Instance.setEndOfWork(true);
214
+ }
215
+ else
216
+ throw ex;
217
+ }
218
+ finally {
219
+ await EventsManager.Instance.CheckAndShowSpinner(false);
220
+ Commands.addGlobalCommand(CommandType.EXIT_MAGIC);
221
+ Commands.beginInvoke();
222
+ }
223
+ }
224
+ WriteExecutionPropertiesToLog() {
225
+ if (Logger.Instance.ShouldLogServerRelatedMessages()) {
226
+ Logger.Instance.WriteToLog("-----------------------------------------------------------------------------", true);
227
+ Logger.Instance.WriteToLog("Execution Properties:", true);
228
+ let propsString = JSON.stringify(ServerConfig.Instance);
229
+ Logger.Instance.WriteToLog(propsString, true);
230
+ Logger.Instance.WriteToLog("-----------------------------------------------------------------------------", true);
231
+ }
232
+ }
233
+ constructor() {
234
+ RuntimeContextBase.Instance.Init(RemoteCommandsProcessor.RC_NO_CONTEXT_ID);
235
+ LastFocusedManager.Instance.Init(MGDataCollection.Instance);
236
+ LastFocusedManager.Instance.LastActionTime = Misc.getSystemMilliseconds();
237
+ RemoteCommandsProcessor.ShouldScrambleAndUnscrambleMessages = true;
238
+ this._globalUniqueSessionId = UniqueIDUtils.GetUniqueMachineID() + "_";
239
+ this.RegisterDelegates();
240
+ }
241
+ InitGuiManager() {
242
+ Manager.EventsManager = EventsManager.Instance;
243
+ Manager.DefaultServerName = ServerConfig.Instance.getServer();
244
+ Manager.DefaultProtocol = ServerConfig.Instance.getProtocol();
245
+ GuiEnvironment.Environment = Environment.Instance;
246
+ GuiDataCollection.MGDataTable = MGDataCollection.Instance;
247
+ RuntimeContextBase.noContextId = RemoteCommandsProcessor.RC_NO_CONTEXT_ID;
248
+ }
249
+ InitCircularReferencesBypasses() {
250
+ TasksTable.createNewtask = Task.CreateTask;
251
+ OpenURLCommand.createNewCommandsTable = CommandsTable.createCommandsTable;
252
+ AccessHelper.eventsManager = EventsManager.Instance;
253
+ AccessHelper.mgDataTable = MGDataCollection.Instance;
254
+ AccessHelper.envParamsTable = EnvParamsTable.Instance;
255
+ AccessHelper.globalParams = GlobalParams.Instance;
256
+ AccessHelper.languageData = LanguageData.Instance;
257
+ AccessHelper.environment = Environment.Instance;
258
+ }
259
+ static Main(httpClient) {
260
+ ClientManager.StartExecution(httpClient);
261
+ Logger.Instance.Flush();
262
+ }
263
+ static async StopExecution() {
264
+ try {
265
+ HttpManager.GetInstance().IsAbortingMagicEngine = true;
266
+ MGDataCollection.Instance.StartupMgData.getFirstTask().ClosingFormUI = true;
267
+ await MGDataCollection.Instance.StartupMgData.getFirstTask().endTask(true, false, false);
268
+ }
269
+ catch (ex3) {
270
+ if (ex3 instanceof ApplicationException) {
271
+ Logger.Instance.WriteExceptionToLog(ex3);
272
+ }
273
+ else
274
+ throw ex3;
275
+ }
276
+ }
277
+ static async StartExecution(httpClient) {
278
+ HttpManager.setNativeHttpClient(httpClient);
279
+ let loaded = await ClientManager.Instance.LoadExecutionProps();
280
+ if (loaded) {
281
+ new GuiEventsProcessor();
282
+ ClientManager.Instance.InitGuiManager();
283
+ ClientManager.Instance.InitCircularReferencesBypasses();
284
+ let versionString = CurrentClientVersion === '0.0.0.0' ? "Development mode" : "Version : " + CurrentClientVersion;
285
+ console.log("Magic Web Client. " + versionString);
286
+ HttpManager.GetInstance().HttpCommunicationTimeoutMS = ServerConfig.Instance.GetFirstHttpRequestTimeout();
287
+ EventsManager.Instance.Init();
288
+ Logger.Instance.Initialize(RemoteCommandsProcessor.GetInstance().parseLogLevel(ServerConfig.Instance.getInternalLogLevel()), false);
289
+ let mgd = new MGData(new CommandsTable(), new CommandsTable(), 0, null, false);
290
+ await MGDataCollection.Instance.addMGData(mgd, 0, true);
291
+ await ClientManager.Instance.WorkThreadExecution();
292
+ if (Logger.Instance.ShouldLog()) {
293
+ Logger.Instance.WriteToLog(OSEnvironment.EolSeq + "Ended on " + DateTimeUtils.ToString(DateTime.Now, XMLConstants.ERROR_LOG_DATE_FORMAT, Logger.Instance) + OSEnvironment.EolSeq + OSEnvironment.EolSeq, false);
294
+ }
295
+ }
296
+ else {
297
+ await GUIManager.Instance.MessageBox("Error", "Failed to load server configuration file (" + this._executionPropertiesFileName + ")", Styles.MSGBOX_ICON_ERROR | Styles.MSGBOX_BUTTON_OK);
298
+ }
299
+ }
300
+ async LoadExecutionProps() {
301
+ let response = "";
302
+ let succeeded = true;
303
+ try {
304
+ let isError = new RefParam(false);
305
+ response = await HttpManager.GetInstance().GetContent(ClientManager._executionPropertiesFileName, null, false, isError);
306
+ ServerConfig.Instance.Init(JSON.parse(response));
307
+ }
308
+ catch (ex) {
309
+ succeeded = false;
310
+ }
311
+ return succeeded;
312
+ }
313
+ GetGlobalUniqueSessionID() {
314
+ return this._globalUniqueSessionId;
315
+ }
316
+ static GetControlPictureMask(taskId, controlName) {
317
+ let pic = null;
318
+ let task = MGDataCollection.Instance.GetTaskByID(taskId);
319
+ let control = null;
320
+ if (controlName !== null && task != null) {
321
+ control = task.getForm().GetCtrl(controlName);
322
+ pic = control.getPIC();
323
+ }
324
+ return pic;
325
+ }
326
+ static GetFormattedValue(taskId, controlName, value, rowId) {
327
+ let pic = null;
328
+ let task = MGDataCollection.Instance.GetTaskByID(taskId);
329
+ let control = null;
330
+ let newValue = value;
331
+ if (controlName !== null && task !== null)
332
+ control = task.getForm().GetCtrl(controlName);
333
+ if (control != null && control.DataType == StorageAttribute.NUMERIC) {
334
+ if (control.isRepeatable() && control.getProp(PropInterface.PROP_TYPE_FORMAT).isExpression()) {
335
+ let picval = control.getProp(PropInterface.PROP_TYPE_FORMAT).getPrevValue(+rowId);
336
+ pic = new PIC(picval, StorageAttribute.NUMERIC, control.getForm().getTask().getCompIdx());
337
+ }
338
+ else
339
+ pic = control.getPIC();
340
+ let dispValue = String(value);
341
+ let newPic = pic.getUnformattedNumericPic();
342
+ let num = DisplayConvertor.Instance.toNum(dispValue, newPic, 0);
343
+ newValue = DisplayConvertor.Instance.fromNum(num, pic);
344
+ }
345
+ return newValue;
346
+ }
347
+ static GetRangedValue(taskId, controlName, value) {
348
+ let task = MGDataCollection.Instance.GetTaskByID(taskId);
349
+ let control = null;
350
+ if (controlName !== null) {
351
+ control = task.getForm().GetCtrl(controlName);
352
+ return control.getRangedValue(value);
353
+ }
354
+ return null;
355
+ }
356
+ static ValidateControlValue(taskId, controlName, value) {
357
+ let task = MGDataCollection.Instance.GetTaskByID(taskId);
358
+ let control = null;
359
+ if (controlName !== null) {
360
+ control = task.getForm().GetCtrl(controlName);
361
+ return control.validate(value);
362
+ }
363
+ return null;
364
+ }
365
+ static GetFldRanges(taskId, controlName) {
366
+ let task = MGDataCollection.Instance.GetTaskByID(taskId);
367
+ let control = null;
368
+ if (controlName !== null) {
369
+ control = task.getForm().GetCtrl(controlName);
370
+ return control.getRanges();
371
+ }
372
+ return null;
373
+ }
374
+ static TransCacheExists() {
375
+ let clientTransCacheExists = AccessHelper.mgDataTable.getCurrMGData().clientTransactionCacheExists();
376
+ let serverTransactionCacheExists = AccessHelper.mgDataTable.getCurrMGData().serverTransactionCacheExists();
377
+ return clientTransCacheExists || serverTransactionCacheExists;
378
+ }
379
+ RegisterDelegates() {
380
+ HttpClientEvents.GetExecutionProperty_Event = ServerConfig.Instance.GetExecutionProperty.bind(ServerConfig.Instance);
381
+ HttpClientEvents.GetRuntimeCtxID_Event = this.GetRuntimeCtxID.bind(this);
382
+ HttpClientEvents.GetGlobalUniqueSessionID_Event = this.GetGlobalUniqueSessionID.bind(this);
383
+ HttpClientEvents.ShouldDisplayGenericError_Event = ServerConfig.Instance.ShouldDisplayGenericError.bind(ServerConfig.Instance);
384
+ }
385
+ GetRuntimeCtxID() {
386
+ return RuntimeContextBase.Instance.ContextID;
387
+ }
388
+ static TerminateContextUsingFetchAPI() {
389
+ if (RemoteCommandsProcessor.IsSessionReInitializing)
390
+ return;
391
+ HttpManager.GetInstance().IsAbortingMagicEngine = true;
392
+ MGDataCollection.Instance.getCurrMGData().CmdsToServer.Clear();
393
+ let contextTerminationEventCommand = CommandFactory.
394
+ CreateContextTerminationEventCommand(MGDataCollection.Instance.StartupMgData.getFirstTask().getTaskTag());
395
+ MGDataCollection.Instance.getCurrMGData().CmdsToServer.Add(contextTerminationEventCommand);
396
+ RemoteCommandsProcessor.GetInstance().Execute(CommandsProcessorBase_SendingInstruction.ONLY_COMMANDS);
397
+ }
398
+ }
399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpZW50TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvQ2xpZW50TWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RixPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sSUFBSSxFQUNKLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNiLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFFBQVEsRUFDUixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsY0FBYyxFQUVkLE9BQU8sRUFFUCxHQUFHLEVBQUUsYUFBYSxFQUNsQixrQkFBa0IsRUFDbEIsTUFBTSxFQUNQLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRzlDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDbEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0s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LHlCQUF5QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakksQ0FBQztJQU1ELGVBQWU7UUFDYixPQUFPLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDL0MsQ0FBQztJQUtELE1BQU0sQ0FBQyw2QkFBNkI7UUFJbEMsSUFBSSx1QkFBdUIsQ0FBQyx1QkFBdUI7WUFDakQsT0FBTztRQUNULFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFHdkQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUvRCxJQUFJLDhCQUE4QixHQUFtQyxjQUFjO1lBQ25GLG9DQUFvQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUUxRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBaUIsOEJBQThCLENBQUMsQ0FBQztRQUczRyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBwbGljYXRpb25FeGNlcHRpb24sIERhdGVUaW1lLCBOU3RyaW5nLCBSZWZQYXJhbX0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5cclxuaW1wb3J0IHtcclxuICBEYXRlVGltZVV0aWxzLFxyXG4gIEludGVybmFsSW50ZXJmYWNlLFxyXG4gIExvZ2dlcixcclxuICBNaXNjLFxyXG4gIE9TRW52aXJvbm1lbnQsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBYTUxDb25zdGFudHNcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtcclxuICBDb21tYW5kcyxcclxuICBDb21tYW5kVHlwZSxcclxuICBEaXNwbGF5Q29udmVydG9yLFxyXG4gIEV2ZW50cyxcclxuICBHdWlEYXRhQ29sbGVjdGlvbixcclxuICBHdWlFbnZpcm9ubWVudCxcclxuICBMYXN0Rm9jdXNlZFZhbCxcclxuICBNYW5hZ2VyLFxyXG4gIE1nQ29udHJvbEJhc2UsXHJcbiAgUElDLCBQcm9wSW50ZXJmYWNlLFxyXG4gIFJ1bnRpbWVDb250ZXh0QmFzZSxcclxuICBTdHlsZXNcclxufSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcbmltcG9ydCB7RXZlbnRzTWFuYWdlcn0gZnJvbSAnLi9ldmVudC9FdmVudHNNYW5hZ2VyJztcclxuaW1wb3J0IHtHdWlFdmVudHNQcm9jZXNzb3J9IGZyb20gJy4vR3VpRXZlbnRzUHJvY2Vzc29yJztcclxuaW1wb3J0IHtFbnZpcm9ubWVudH0gZnJvbSAnLi9lbnYvRW52aXJvbm1lbnQnO1xyXG5pbXBvcnQge0xhbmd1YWdlRGF0YX0gZnJvbSAnLi9lbnYvTGFuZ3VhZ2VEYXRhJztcclxuaW1wb3J0IHtUYXNrc1RhYmxlfSBmcm9tICcuL3Rhc2tzL1Rhc2tzVGFibGUnO1xyXG5pbXBvcnQge01nQ29udHJvbH0gZnJvbSAnLi9ndWkvTWdDb250cm9sJztcclxuaW1wb3J0IHtJQ2xpZW50Q29tbWFuZH0gZnJvbSAnLi9jb21tYW5kcy9JQ2xpZW50Q29tbWFuZCc7XHJcbmltcG9ydCB7VGFza30gZnJvbSAnLi90YXNrcy9UYXNrJztcclxuaW1wb3J0IHtNR0RhdGFDb2xsZWN0aW9ufSBmcm9tICcuL3Rhc2tzL01HRGF0YUNvbGxlY3Rpb24nO1xyXG5pbXBvcnQge1VuaXF1ZUlEVXRpbHN9IGZyb20gJy4vdXRpbC9VbmlxdWVJRFV0aWxzJztcclxuaW1wb3J0IHtIdHRwTWFuYWdlcn0gZnJvbSAnLi9odHRwL0h0dHBNYW5hZ2VyJztcclxuaW1wb3J0IHtDb21tYW5kc1RhYmxlfSBmcm9tICcuL0NvbW1hbmRzVGFibGUnO1xyXG5pbXBvcnQge1JlbW90ZUNvbW1hbmRzUHJvY2Vzc29yfSBmcm9tICcuL3JlbW90ZS9SZW1vdGVDb21tYW5kc1Byb2Nlc3Nvcic7XHJcbmltcG9ydCB7Q29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbn0gZnJvbSAnLi9Db21tYW5kc1Byb2Nlc3NvckJhc2UnO1xyXG5pbXBvcnQge0NvbW1hbmRzUHJvY2Vzc29yTWFuYWdlcn0gZnJvbSAnLi9Db21tYW5kc1Byb2Nlc3Nvck1hbmFnZXInO1xyXG5pbXBvcnQge01HRGF0YX0gZnJvbSAnLi90YXNrcy9NR0RhdGEnO1xyXG5pbXBvcnQge1NlcnZlckVycm9yfSBmcm9tICcuL3JlbW90ZS9TZXJ2ZXJFcnJvcic7XHJcbmltcG9ydCB7SHR0cENsaWVudEV2ZW50c30gZnJvbSAnLi9odHRwL2NsaWVudC9IdHRwQ2xpZW50RXZlbnRzJztcclxuaW1wb3J0IHtJR3VpRXZlbnR9IGZyb20gJy4vYnJpZGdlL0lHdWlFdmVudCc7XHJcbmltcG9ydCB7Q29tbWFuZEZhY3Rvcnl9IGZyb20gJy4vY29tbWFuZHMvQ2xpZW50VG9TZXJ2ZXIvQ29tbWFuZEZhY3RvcnknO1xyXG5pbXBvcnQge0N1cnJlbnRDbGllbnRWZXJzaW9ufSBmcm9tICcuL0N1cnJlbnRDbGllbnRWZXJzaW9uJztcclxuaW1wb3J0IHtEYXRhVmlld30gZnJvbSAnLi9kYXRhL0RhdGFWaWV3JztcclxuaW1wb3J0IHtMYXN0Rm9jdXNlZE1hbmFnZXJ9IGZyb20gJy4vcnQvTGFzdEZvY3VzZWRNYW5hZ2VyJztcclxuaW1wb3J0IHtFbnZQYXJhbXNUYWJsZX0gZnJvbSAnLi9lbnYvRW52VmFyaWFibGVzVGFibGUnO1xyXG5pbXBvcnQge0dsb2JhbFBhcmFtc30gZnJvbSAnLi9leHAvR2xvYmFsUGFyYW1zVGFibGUnO1xyXG5pbXBvcnQge09wZW5VUkxDb21tYW5kfSBmcm9tICcuL2NvbW1hbmRzL1NlcnZlclRvQ2xpZW50L09wZW5VUkxDb21tYW5kJztcclxuaW1wb3J0IHtTZXJ2ZXJDb25maWd9IGZyb20gJy4vU2VydmVyQ29uZmlnJztcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gJy4vQWNjZXNzSGVscGVyJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7Q29udGV4dFRlcm1pbmF0aW9uRXZlbnRDb21tYW5kfSBmcm9tICcuL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0NvbnRleHRUZXJtaW5hdGlvbkV2ZW50Q29tbWFuZCc7XHJcbmltcG9ydCB7R1VJTWFuYWdlcn0gZnJvbSBcIi4vR1VJTWFuYWdlclwiO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIENsaWVudE1hbmFnZXIge1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IENsaWVudE1hbmFnZXIgPSBudWxsO1xyXG4gIHByaXZhdGUgX2dsb2JhbFVuaXF1ZVNlc3Npb25JZDogc3RyaW5nID0gbnVsbDtcclxuLy8gIHByaXZhdGUgX2xhc3RGYWlsZWRGb2N1c2VkQ29udHJvbDogTWdDb250cm9sQmFzZSA9IG51bGw7IC8vIGNvbnRyb2wgd2hlcmUgbGFzdCBwYXJraW5nIHdhcyBhdHRlbXB0ZWQgYnV0IHdlIGRpZCBub3QgcGFyayBvbiBpdFxyXG4gIHByaXZhdGUgX2J1dHRvbklzQ2xpY2tlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2V4ZWN1dGlvblByb3BlcnRpZXNGaWxlTmFtZTogc3RyaW5nID0gXCIuL2Fzc2V0cy9zZXJ2ZXItY29uZmlnLmpzb25cIjsgLy8gcGF0aCBvZiB0aGUgZXhlY3V0aW9uIHByb3BlcnRpZXMgZmlsZSBmcm9tIGFzc2V0cyBmb2xkZXJcclxuXHJcbiAgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBDbGllbnRNYW5hZ2VyIHtcclxuICAgIGlmIChDbGllbnRNYW5hZ2VyLl9pbnN0YW5jZSA9PT0gbnVsbClcclxuICAgICAgQ2xpZW50TWFuYWdlci5faW5zdGFuY2UgPSBuZXcgQ2xpZW50TWFuYWdlcigpO1xyXG5cclxuICAgIHJldHVybiBDbGllbnRNYW5hZ2VyLl9pbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBBZGRFdmVudChndWlFdmVudDogSUd1aUV2ZW50KTogdm9pZCB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IDxUYXNrPk1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuR2V0VGFza0J5SUQoZ3VpRXZlbnQuVGFza0lEKTtcclxuICAgIGxldCBsaW5lSWR4OiBudW1iZXIgPSArZ3VpRXZlbnQuTGluZTtcclxuICAgIGxldCBkdlJvd0lkeDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodGFzayAhPSBudWxsKSB7XHJcbiAgICAgIGxldCBjb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuXHJcbiAgICAgIGlmIChndWlFdmVudC5Db250cm9sTmFtZSAhPT0gbnVsbClcclxuICAgICAgICBjb250cm9sID0gdGFzay5nZXRGb3JtKCkuR2V0Q3RybChndWlFdmVudC5Db250cm9sTmFtZSk7XHJcblxyXG4gICAgICBpZiAoY29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGR2OiBEYXRhVmlldyA9IDxEYXRhVmlldz50YXNrLkRhdGFWaWV3O1xyXG4gICAgICAgIGlmIChjb250cm9sLklzVGFibGVDaGlsZCkge1xyXG4gICAgICAgICAgbGluZUlkeCAtPSBkdi5SZWNvcmRzQmVmb3JlQ3VycmVudFZpZXc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN3aXRjaCAoZ3VpRXZlbnQuRXZlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgICAgY2FzZSBcImNvbHVtblNvcnRcIjpcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wuaXNDb2x1bW5Tb3J0YWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgRXZlbnRzLk9uQ29sdW1uQ2xpY2soY29udHJvbCwgZ3VpRXZlbnQuTGluZSwgZ3VpRXZlbnQuQ29udHJvbE5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIm1vdXNlZG93blwiOlxyXG4gICAgICAgICAgICAvLyBEZWZlY3QgMTUyMjg4ICYgRGVmZWN0IDE1MjI2ODogUHJvYmxlbTogV2hlbiBidXR0b24gaXMgY2xpY2tlZCwgd2UgZ2V0IGZvY3VzIGV2ZW50IGZpcnN0IGFuZCBpZiBtZXNzYWdlQm94IGlzIG9wZW5lZCBoZXJlIGxpa2UgdmVyaWZ5LCBldGMuXHJcbiAgICAgICAgICAgIC8vIHdlIGRvIG5vdCByZWNlaXZlIGNsaWNrIGV2ZW50LiBIZW5jZSBldmVudHMgYXJlIG5vdCBwcm9jZXNzZWQuIFNvbHV0aW9uOiBXZSBkbyBuZWVkIGNsaWNrIGhhbmRsaW5nIGZvciBidXR0b24gYXMgaXQgaXMgY2FsbGVkIHdoZW4gd2UgcGFya1xyXG4gICAgICAgICAgICAvLyBvbiBidXR0b24gYW5kIHByZXNzIHNwYWNlIGtleS4gV2UgbmVlZCBmb2N1cyBldmVudCBoYW5kbGluZyBmb3IgZXhlY3V0aW5nIENQICYgQ1Mgd2hlbiBwYXJrZWQgb24gYnV0dG9uIGJ5IHRhYiBrZXkuIFNvIHdlIG5lZWQgdG8gbWFuYWdlXHJcbiAgICAgICAgICAgIC8vIGhvdyBjbGljayBpcyBoYW5kbGVkLiBXZSBkbyBub3QgbmVlZCBmb2N1cyBldmVudCBoYW5kbGluZyB3aGVuIHdlIGNsaWNrIG9uIGJ1dHRvbiwgc28gb24gbW91c2Vkb3duLCBzZXQgYSBmbGFnIHdoaWNoIHdpbGwgYmUgdXNlZCBpbiBmb2N1c1xyXG4gICAgICAgICAgICAvLyBldmVudCBoYW5kbGluZyB0byBza2lwIGl0cyBoYW5kbGluZy4gVGhlbiB3ZSB3aWxsIHJlY2VpdmUgY2xpY2sgZXZlbnQgd2hlcmUgdGhpcyB3aWxsIGJlIGFjdHVhbGx5IGhhbmRsZWQgYW5kIGhlbmNlIHdvcmsuXHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLmlzQnV0dG9uKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9idXR0b25Jc0NsaWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFjb250cm9sLmlzU3ViZm9ybSgpKVxyXG4gICAgICAgICAgICAgIEV2ZW50cy5HZXRSdW50aW1lQ29udGV4dChNYW5hZ2VyLkdldEN1cnJlbnRDb250ZXh0SUQoKSkuTGFzdENsaWNrZWRDdHJsTmFtZSA9IGNvbnRyb2wuZ2V0TmFtZSgpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFwiY2xpY2tcIjpcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wuaXNCdXR0b24oKSB8fCAoY29udHJvbC5Db25uZWN0ZWRDb250cm9sICYmIGd1aUV2ZW50LmZyb21CdXR0b24pKXtcclxuICAgICAgICAgICAgICBFdmVudHMuT25TZWxlY3Rpb24oXCJcIiwgY29udHJvbCwgbGluZUlkeCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgRXZlbnRzLkdldFJ1bnRpbWVDb250ZXh0KE1hbmFnZXIuR2V0Q3VycmVudENvbnRleHRJRCgpKS5MYXN0Q2xpY2tlZEN0cmxOYW1lID0gY29udHJvbC5nZXROYW1lKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fYnV0dG9uSXNDbGlja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc29ydGluZyBzaG91bGQgYmUgaGFuZGxlZCBvbmx5IG9uIGNvbHVtbiBjbGljayBhbmQgbm90IG9uIHJvd0RhdGFcclxuICAgICAgICAgICAgLy8gZWxzZSBpZiAoY29udHJvbC5UeXBlID09PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT0xVTU4pIHtcclxuICAgICAgICAgICAgLy8gICBFdmVudHMuT25Db2x1bW5DbGljayhjb250cm9sLCBndWlFdmVudC5MaW5lLCBndWlFdmVudC5Db250cm9sTmFtZSk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgRXZlbnRzLk9uRm9jdXMoY29udHJvbCwgbGluZUlkeCwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgIGxldCBwcm9kdWNlQ2xpY2s6IGJvb2xlYW4gPSBjb250cm9sLmlzQnV0dG9uKCkgfHwgY29udHJvbC5pc1RleHRDb250cm9sKCkgfHwgY29udHJvbC5pc0xhYmVsKCkgfHwgY29udHJvbC5pc1RhYkNvbnRyb2woKSB8fCBjb250cm9sLmlzVGFibGVDb250cm9sKCkgfHwgY29udHJvbC5pc0NvbWJvQm94KCkgfHwgY29udHJvbC5pc0ltYWdlQ29udHJvbCgpO1xyXG4gICAgICAgICAgICAgIEV2ZW50cy5Pbk1vdXNlRG93bihjb250cm9sLmdldEZvcm0oKSwgY29udHJvbCwgbnVsbCwgdHJ1ZSwgbGluZUlkeCwgZmFsc2UsIHByb2R1Y2VDbGljayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiZm9jdXNcIjpcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9idXR0b25Jc0NsaWNrZWQpXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgLy8gLy8gSWYgd2UgYXR0ZW1wdCB0byBwYXJrIG9uIGNvbnRyb2wgd2hlcmUgd2UgZG8gbm90IHdhbnQgdG8gYWxsb3cgdG8gcGFyayBsaWtlIGlmIGNvbnRyb2wgaGFzIGV4cHJlc3Npb24gb3IgcGFyZW50IHRhc2sgZmllbGQsIGRvIG5vdCBhbGxvdyB0byBmb2N1cyBvbiBpdC5cclxuICAgICAgICAgICAgLy8gLy8gU2V0IEZvY3VzIGJhY2sgdG8gbGFzdEZvY3VzZWRDb250cm9sLiBXZSBuZWVkIF9sYXN0RmFpbGVkRm9jdXNlZENvbnRyb2wgYXMgd2UgZ2V0IGZvY3VzIGV2ZW50IG9uIGEgY29udHJvbCB0d2ljZS4gU28gdG8gYXZvaWQgdG8gc2hvdyBlcnJvciBtdWx0aXBsZSB0aW1lcyxcclxuICAgICAgICAgICAgLy8gLy8gbWFpbnRhaW4gX2xhc3RGYWlsZWRGb2N1c2VkQ29udHJvbC5cclxuICAgICAgICAgICAgLy8gaWYgKGNvbnRyb2wgIT09IHRoaXMuX2xhc3RGYWlsZWRGb2N1c2VkQ29udHJvbCAmJiBjb250cm9sLkhhc0V4cE9yUGFyZW50VGFza0ZpZWxkKCkpIHtcclxuICAgICAgICAgICAgLy8gICAvLyBTaG93IGVycm9yIG9ubHkgZm9yIGNvbnRyb2xzIGhhdmluZyBEYXRhIHByb3BlcnR5IGFuZCBwYXJrYWJsZVxyXG4gICAgICAgICAgICAvLyAgIGlmKGNvbnRyb2wuaXNMaXN0Qm94KCkgfHwgY29udHJvbC5pc0NoZWNrQm94KCkgfHwgY29udHJvbC5pc0NvbWJvQm94KCkgfHwgY29udHJvbC5pc1RleHRDb250cm9sKCkgfHwgY29udHJvbC5pc1JhZGlvKCkgfHwgY29udHJvbC5pc1RhYkNvbnRyb2woKSkge1xyXG4gICAgICAgICAgICAvLyAgICAgQ29tbWFuZHMubWVzc2FnZUJveChudWxsLCBcIkVycm9yXCIsIFwiQ29udHJvbCBlaXRoZXIgaGFzIGV4cHJlc3Npb24gb3IgaGFzIHBhcmVudCB0YXNrIHZhcmlhYmxlIGF0dGFjaGVkIHRvIGl0LiBGYWlsZWQgdG8gcGFyayBvbiBjb250cm9sIHdpdGggbmFtZTogXCIgKyBjb250cm9sLk5hbWUsIFN0eWxlcy5NU0dCT1hfSUNPTl9FUlJPUiB8IFN0eWxlcy5NU0dCT1hfQlVUVE9OX09LKTtcclxuICAgICAgICAgICAgLy8gICAgIC8vIERlZmVjdCAxNTI3Mjg6IFVzZSBsYXN0IGZvY3VzZWQgdGFzayBpbnN0ZWFkIGNvbnRyb2wgdGFzayBhcyBjb250cm9sIGNhbiBiZSBmcm9tIHN1YmZvcm0uXHJcbiAgICAgICAgICAgIC8vICAgICBGb2N1c01hbmFnZXIuU2V0Rm9jdXMoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldExhc3RGb2N1c2VkVGFzaygpLCBMYXN0Rm9jdXNlZE1hbmFnZXIuZ2V0TGFzdEZvY3VzZWRDb250cm9sKCksIDAsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgTGFzdEZvY3VzZWRNYW5hZ2VyLmdldExhc3RGb2N1c2VkQ29udHJvbCgpID09PSBudWxsID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuX2xhc3RGYWlsZWRGb2N1c2VkQ29udHJvbCA9IGNvbnRyb2w7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIC8vIHRoaXMuX2xhc3RGYWlsZWRGb2N1c2VkQ29udHJvbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBFdmVudHMuT25Gb2N1cyhjb250cm9sLCBsaW5lSWR4LCB0cnVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJkYmxjbGlja1wiOlxyXG4gICAgICAgICAgICBFdmVudHMuT25EYmxDbGljayhjb250cm9sLCBsaW5lSWR4KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBcInNlbGVjdGlvbmNoYW5nZWRcIjpcclxuICAgICAgICAgICAgRXZlbnRzLk9uU2VsZWN0aW9uKGd1aUV2ZW50LlZhbHVlLCBjb250cm9sLCBsaW5lSWR4LCB0cnVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwia2V5ZG93blwiOlxyXG4gICAgICAgICAgICBFdmVudHMuT25LZXlEb3duKCB0YXNrLmdldEZvcm0oKSwgY29udHJvbCwgZ3VpRXZlbnQubW9kaWZpZXJzLCBndWlFdmVudC5rZXlDb2RlLCAwLDAsICcnLGZhbHNlLCcnLHRydWUgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwic2V0ZXh0ZXJuYWx2YWx1ZVwiOlxyXG4gICAgICAgICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLkFkZEV4dGVybmFsVmFsdWVFdmVudCgoPE1nQ29udHJvbD5jb250cm9sKSwgZ3VpRXZlbnQuZXh0ZXJuYWxWYWx1ZSwgZ3VpRXZlbnQucGFyYW0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwidW5oYW5kbGVkIGV2ZW50OiBcXFwiXCIgKyBndWlFdmVudC5FdmVudFR5cGUgKyBcIlxcXCJcIik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzd2l0Y2ggKGd1aUV2ZW50LkV2ZW50VHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBcImZvY3VzT25Ob25NYWdpY0NvbnRyb2xcIjpcclxuICAgICAgICAgICAgY29udHJvbCA9IExhc3RGb2N1c2VkTWFuYWdlci5nZXRMYXN0Rm9jdXNlZENvbnRyb2woKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICBFdmVudHMuT25Gb2N1c09uTm9uTWFnaWNDb250cm9sKGNvbnRyb2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImNsaWNrXCI6XHJcbiAgICAgICAgICAgIGlmKGd1aUV2ZW50LkNvbnRyb2xOYW1lID09PSBcIm1hZ2ljUm93XCIpIHtcclxuICAgICAgICAgICAgICBkdlJvd0lkeCA9IGd1aUV2ZW50LkxpbmUgLSAoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLlJlY29yZHNCZWZvcmVDdXJyZW50VmlldztcclxuICAgICAgICAgICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLmFkZEd1aVRyaWdnZXJlZEV2ZW50V2l0aFRhc2tBbmRDb2RlQW5kTGluZSh0YXNrLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1BSRUZJWCwgZHZSb3dJZHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIm5hdmlnYXRlSW5UYWJsZVwiOlxyXG4gICAgICAgICAgICBpZiAoZ3VpRXZlbnQuQ29udHJvbE5hbWUgPT09IFwibWFnaWNSb3dcIilcclxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU5hdmlnYXRlSW5Sb3dFdmVudCh0YXNrLCBndWlFdmVudC5WYWx1ZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImNsb3NlXCI6XHJcbiAgICAgICAgICAgIGlmICh0YXNrLklzUm91dGUoKSlcclxuICAgICAgICAgICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLkFkZFJvdXRlckNsb3NlZEV2ZW50KHRhc2spO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgRXZlbnRzLkNsb3NlRm9ybUV2ZW50KHRhc2suZ2V0Rm9ybSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiZGlzcG9zZVwiOlxyXG4gICAgICAgICAgICBNR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlLmRlbGV0ZU1HRGF0YVRyZWUodGFzay5nZXRNZ2RJRCgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwicmVzaXplXCI6XHJcbiAgICAgICAgICAgIEV2ZW50cy5UYWJsZVJlc2l6ZUV2ZW50KHRhc2suZ2V0Rm9ybSgpLmdldFRhYmxlQ3RybCgpLCBndWlFdmVudC5QYWdlU2l6ZSk7XHJcbiAgICAgICAgICAvL2Nhc2UgJ2JyZWFrJyBpcyBtaXNzaW5nIGZvciAncmVzaXplJyB3aXRoIGludGVudGlvbiB0byBleGVjdXRlIGdldFJvd3Mgd2l0aCB0aGUgZGVzaXJlZCBkYXRhdmlldyByb3cgaW5kZXguXHJcbiAgICAgICAgICBjYXNlIFwiZ2V0Um93c1wiOlxyXG4gICAgICAgICAgICBkdlJvd0lkeCA9IGxpbmVJZHggLSAoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLlJlY29yZHNCZWZvcmVDdXJyZW50VmlldztcclxuICAgICAgICAgICAgbGV0IGxhc3RGb2N1c2VkVmFsOiBMYXN0Rm9jdXNlZFZhbCA9IHtndWlNZ0NvbnRyb2w6IHRhc2suZ2V0Rm9ybSgpLmdldFRhYmxlQ3RybCgpLCBMaW5lOiBkdlJvd0lkeCwgVmFsOiBcIlwifTtcclxuICAgICAgICAgICAgRXZlbnRzLk9uR2V0Um93c0RhdGEodGFzay5nZXRGb3JtKCkuZ2V0VGFibGVDdHJsKCksIGR2Um93SWR4LCB0cnVlLCBsYXN0Rm9jdXNlZFZhbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIlJvdXRlck5hdmlnYXRlXCI6XHJcbiAgICAgICAgICAgIEV2ZW50c01hbmFnZXIuSW5zdGFuY2UuQWRkUm91dGVFdmVudCh0YXNrLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfV0VCQ0xJRU5UX1JPVVRFLCBndWlFdmVudC5Sb3V0ZXJQYXRoLCBndWlFdmVudC5Sb3V0ZXJPdXRsZXROYW1lLFxyXG4gICAgICAgICAgICAgIGd1aUV2ZW50LlJvdXRlclBhcmFtcyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcInNldGV4dGVybmFsdmFsdWVcIjpcclxuICAgICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXJyb3JUb0xvZyhOU3RyaW5nLkZvcm1hdChcIlVuYWJsZSB0byBmaW5kIHswfTogVHJ5aW5nIHRvIHNldCB2YWx1ZSBmb3IgYSBub24tZXhpc3RpbmcgY29udHJvbC5cIiwgZ3VpRXZlbnQuQ29udHJvbE5hbWUpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyggXCJ1bmhhbmRsZWQgZXZlbnQ6IFxcXCJcIiArIGd1aUV2ZW50LkV2ZW50VHlwZSArIFwiXFxcIlwiKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIC8vdGFzayA9PSBudWxsXHJcbiAgICAgIHN3aXRjaCAoZ3VpRXZlbnQuRXZlbnRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBcImNvbmZpcm1hdGlvbkNsb3NlZFwiOlxyXG4gICAgICAgICAgdGhpcy5Db25maXJtYXRpb25DbG9zZWQoZ3VpRXZlbnQua2V5Q29kZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0ZUluUm93RXZlbnQodGFzazogVGFzaywgZXZ0OiBzdHJpbmcpIHtcclxuICAgIGxldCBpbnRlcm5hbEV2dCA9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9OT05FO1xyXG4gICAgZXZ0ID0gZXZ0LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgc3dpdGNoIChldnQpIHtcclxuICAgICAgY2FzZSBcImJlZ2luLXBhZ2VcIjpcclxuICAgICAgICBpbnRlcm5hbEV2dCA9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfQkVHUEFHRTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJwcmV2aW91cy1wYWdlXCI6XHJcbiAgICAgICAgaW50ZXJuYWxFdnQgPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX1BSVlBBR0U7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiZW5kLXBhZ2VcIjpcclxuICAgICAgICBpbnRlcm5hbEV2dCA9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfRU5EUEFHRTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJuZXh0LXBhZ2VcIjpcclxuICAgICAgICBpbnRlcm5hbEV2dCA9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfTlhUUEFHRTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJwcmV2aW91cy1saW5lXCI6XHJcbiAgICAgICAgaW50ZXJuYWxFdnQgPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX1BSVkxJTkU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwibmV4dC1saW5lXCI6XHJcbiAgICAgICAgaW50ZXJuYWxFdnQgPSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX05YVExJTkU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiYmVnaW4tdGFibGVcIjpcclxuICAgICAgICBpbnRlcm5hbEV2dCA9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfQkVHVEJMO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBcImVuZC10YWJsZVwiOlxyXG4gICAgICAgIGludGVybmFsRXZ0ID0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9FTkRUQkw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGludGVybmFsRXZ0ICE9IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9OT05FKVxyXG4gICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLmFkZEd1aVRyaWdnZXJlZEV2ZW50V2l0aFRhc2tBbmRDb2RlKHRhc2ssIGludGVybmFsRXZ0KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmFpc2UgY2FsbGJhY2sgb24gY2xvc2luZyBjb25maXJtYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIENvbmZpcm1hdGlvbkNsb3NlZChyZXM6IG51bWJlcik6IHZvaWRcclxuICB7XHJcbiAgICBDb21tYW5kcy5SZXNvbHZlUHJvbWlzZShyZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyB0aGUgd29yayB0aHJlYWQncyBlbnRyeSBtZXRob2RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIFdvcmtUaHJlYWRFeGVjdXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoTG9nZ2VyLkluc3RhbmNlLlNob3VsZExvZygpKSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVRvTG9nKFwiXCIsIHRydWUpO1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVUb0xvZyhcIlN0YXJ0ZWQgb24gXCIgKyBEYXRlVGltZVV0aWxzLlRvU3RyaW5nKERhdGVUaW1lLk5vdywgWE1MQ29uc3RhbnRzLkVSUk9SX0xPR19EQVRFX0ZPUk1BVCwgTG9nZ2VyLkluc3RhbmNlKSwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuV3JpdGVFeGVjdXRpb25Qcm9wZXJ0aWVzVG9Mb2coKTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoYXdhaXQgQ29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyLlN0YXJ0U2Vzc2lvbigpKSB7XHJcbiAgICAgICAgbGV0IG1nRGF0YVRhYjogTUdEYXRhQ29sbGVjdGlvbiA9IE1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2U7XHJcbiAgICAgICAgbGV0IHN0YXJ0dXBNZ0RhdGE6IE1HRGF0YSA9IG1nRGF0YVRhYi5TdGFydHVwTWdEYXRhO1xyXG4gICAgICAgIG1nRGF0YVRhYi5jdXJyTWdkSUQgPSBzdGFydHVwTWdEYXRhLkdldElkKCk7XHJcblxyXG4gICAgICAgIGxldCBub25JbnRlcmFjdGl2ZVRhc2s6IFRhc2sgPSBudWxsO1xyXG4gICAgICAgIGlmICghc3RhcnR1cE1nRGF0YS5Jc0Fib3J0aW5nKVxyXG4gICAgICAgICAgbm9uSW50ZXJhY3RpdmVUYXNrID0gYXdhaXQgVGFzay5TdGFydFByb2dyYW0oZmFsc2UsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgaWYgKG5vbkludGVyYWN0aXZlVGFzayA9PT0gbnVsbClcclxuICAgICAgICAgIGF3YWl0IEV2ZW50c01hbmFnZXIuSW5zdGFuY2UuRXZlbnRzTG9vcChzdGFydHVwTWdEYXRhKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBhd2FpdCBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLk5vbkludGVyYWN0aXZlRXZlbnRzTG9vcChzdGFydHVwTWdEYXRhLCBub25JbnRlcmFjdGl2ZVRhc2spO1xyXG5cclxuICAgICAgICAvLyBzZXQgdGhlIFwiZW5kIG9mIHdvcmtcIiBmbGFnIG9ubHkgZm9yIHRoZSBtYWluIHdpbmRvd1xyXG4gICAgICAgIEV2ZW50c01hbmFnZXIuSW5zdGFuY2Uuc2V0RW5kT2ZXb3JrKHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgQXBwbGljYXRpb25FeGNlcHRpb24pIHtcclxuICAgICAgICBsZXQgaXNOb1Jlc3VsdEVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgU2VydmVyRXJyb3IgJiYgKDxTZXJ2ZXJFcnJvcj5leCkuR2V0Q29kZSgpID09PSBTZXJ2ZXJFcnJvci5JTkZfTk9fUkVTVUxUKVxyXG4gICAgICAgICAgaXNOb1Jlc3VsdEVycm9yID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKCFpc05vUmVzdWx0RXJyb3IpXHJcbiAgICAgICAgICBhd2FpdCBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLlByb2Nlc3NBYm9ydGluZ0Vycm9yKGV4KTtcclxuXHJcbiAgICAgICAgRXZlbnRzTWFuYWdlci5JbnN0YW5jZS5zZXRFbmRPZldvcmsodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRocm93IGV4O1xyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgIGF3YWl0IEV2ZW50c01hbmFnZXIuSW5zdGFuY2UuQ2hlY2tBbmRTaG93U3Bpbm5lcihmYWxzZSk7XHJcblxyXG4gICAgICBDb21tYW5kcy5hZGRHbG9iYWxDb21tYW5kKENvbW1hbmRUeXBlLkVYSVRfTUFHSUMpO1xyXG4gICAgICBDb21tYW5kcy5iZWdpbkludm9rZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBXcml0ZSBFeGVjdXRpb24gcHJvcGVydGllcyB0byBsb2cuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBXcml0ZUV4ZWN1dGlvblByb3BlcnRpZXNUb0xvZygpOiB2b2lkIHtcclxuICAgIGlmIChMb2dnZXIuSW5zdGFuY2UuU2hvdWxkTG9nU2VydmVyUmVsYXRlZE1lc3NhZ2VzKCkpIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlVG9Mb2coXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwiLCB0cnVlKTtcclxuICAgICAgLy8gV3JpdGUgaGVhZGluZ1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVUb0xvZyhcIkV4ZWN1dGlvbiBQcm9wZXJ0aWVzOlwiLCB0cnVlKTtcclxuXHJcbiAgICAgIGxldCBwcm9wc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KFNlcnZlckNvbmZpZy5JbnN0YW5jZSk7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVRvTG9nKHByb3BzU3RyaW5nLCB0cnVlKTtcclxuXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVRvTG9nKFwiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cIiwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBSdW50aW1lQ29udGV4dEJhc2UuSW5zdGFuY2UuSW5pdChSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvci5SQ19OT19DT05URVhUX0lEKTtcclxuICAgIExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5Jbml0KE1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UpO1xyXG4gICAgTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLkxhc3RBY3Rpb25UaW1lID0gTWlzYy5nZXRTeXN0ZW1NaWxsaXNlY29uZHMoKTtcclxuXHJcblxyXG4gICAgUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuU2hvdWxkU2NyYW1ibGVBbmRVbnNjcmFtYmxlTWVzc2FnZXMgPSB0cnVlO1xyXG5cclxuXHJcbiAgICAvLyBUT0RPOiBIb3cgdG8gZ2V0IFByb2Nlc3MuR2V0Q3VycmVudFByb2Nlc3MoKS5JZD9cclxuICAgIHRoaXMuX2dsb2JhbFVuaXF1ZVNlc3Npb25JZCA9IFVuaXF1ZUlEVXRpbHMuR2V0VW5pcXVlTWFjaGluZUlEKCkgKyBcIl9cIjsgLy8gKyBQcm9jZXNzLkdldEN1cnJlbnRQcm9jZXNzKCkuSWQ7XHJcblxyXG4gICAgdGhpcy5SZWdpc3RlckRlbGVnYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBJbml0aWFsaXplIHRoZSBkYXRhIG5lZWRlZCBieSB0aGUgZ3VpIGxpYnJhcnlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gQ2xpZW50TWFuYWdlciBpbnN0YW5jZTwvcmV0dXJucz5cclxuICBwcml2YXRlIEluaXRHdWlNYW5hZ2VyKCk6IHZvaWQge1xyXG4gICAgTWFuYWdlci5FdmVudHNNYW5hZ2VyID0gRXZlbnRzTWFuYWdlci5JbnN0YW5jZTtcclxuICAgIE1hbmFnZXIuRGVmYXVsdFNlcnZlck5hbWUgPSBTZXJ2ZXJDb25maWcuSW5zdGFuY2UuZ2V0U2VydmVyKCk7XHJcbiAgICBNYW5hZ2VyLkRlZmF1bHRQcm90b2NvbCA9IFNlcnZlckNvbmZpZy5JbnN0YW5jZS5nZXRQcm90b2NvbCgpO1xyXG4gICAgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5JbnN0YW5jZTtcclxuICAgIEd1aURhdGFDb2xsZWN0aW9uLk1HRGF0YVRhYmxlID0gTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZTtcclxuICAgIFJ1bnRpbWVDb250ZXh0QmFzZS5ub0NvbnRleHRJZCA9IFJlbW90ZUNvbW1hbmRzUHJvY2Vzc29yLlJDX05PX0NPTlRFWFRfSUQ7XHJcbiAgfVxyXG5cclxuICAvLy8gSW5pdGlhbGl6ZSBnbG9iYWwgZGF0YSBpbiBvYmplY3RzIHVzZWQgdG8gb3ZlcmNvbWUgdGhlIGNpcmN1bGFyIHJlZmVyZW5jZXMgaXNzdWVcclxuICBwcml2YXRlIEluaXRDaXJjdWxhclJlZmVyZW5jZXNCeXBhc3NlcygpIHtcclxuICAgIFRhc2tzVGFibGUuY3JlYXRlTmV3dGFzayA9IFRhc2suQ3JlYXRlVGFzaztcclxuICAgIE9wZW5VUkxDb21tYW5kLmNyZWF0ZU5ld0NvbW1hbmRzVGFibGUgPSBDb21tYW5kc1RhYmxlLmNyZWF0ZUNvbW1hbmRzVGFibGU7XHJcblxyXG4gICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIgPSBFdmVudHNNYW5hZ2VyLkluc3RhbmNlO1xyXG4gICAgQWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlID0gTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZTtcclxuICAgIEFjY2Vzc0hlbHBlci5lbnZQYXJhbXNUYWJsZSA9IEVudlBhcmFtc1RhYmxlLkluc3RhbmNlO1xyXG4gICAgQWNjZXNzSGVscGVyLmdsb2JhbFBhcmFtcyA9IEdsb2JhbFBhcmFtcy5JbnN0YW5jZTtcclxuICAgIEFjY2Vzc0hlbHBlci5sYW5ndWFnZURhdGEgPSBMYW5ndWFnZURhdGEuSW5zdGFuY2U7XHJcbiAgICBBY2Nlc3NIZWxwZXIuZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5JbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gRW50cnkgcG9pbnQgdG8gdGhlIFdlYiBDbGllbnQgPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImFyZ3NcIj5hcnJheSBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzPC9wYXJhbT5cclxuICBzdGF0aWMgTWFpbihodHRwQ2xpZW50OiBIdHRwQ2xpZW50KTogdm9pZCB7XHJcbiAgICAvLyBUT0RPIDogQ2hlY2sgaG93IHRvIGxvYWQgZnJvbSBTdHVkaW8gaS5lLiBGN1xyXG4gICAgLy8gaWYgKGFyZ3MubGVuZ3RoICE9PSAwICYmIE5TdHJpbmcuU3RhcnRzV2l0aChhcmdzWzBdLCBcIi9zcGF3bmFoZWFkXCIpKSB7XHJcbiAgICAvLyAgIENsaWVudE1hbmFnZXIuX3N0YXJ0ZWRGcm9tU3R1ZGlvID0gdHJ1ZTtcclxuICAgIC8vICAgU3R1ZGlvTGF1bmNoZXIuSW5pdChhcmdzKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2VcclxuICAgIENsaWVudE1hbmFnZXIuU3RhcnRFeGVjdXRpb24oaHR0cENsaWVudCk7XHJcblxyXG4gICAgTG9nZ2VyLkluc3RhbmNlLkZsdXNoKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFRlcm1pbmF0ZSB0aGUgY2xpZW50IGFuZCB0ZXJtaW5hdGUgdGhlIGNvbnRleHQgPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBhc3luYyBTdG9wRXhlY3V0aW9uKCk6IFByb21pc2UgPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIEh0dHBNYW5hZ2VyLkdldEluc3RhbmNlKCkuSXNBYm9ydGluZ01hZ2ljRW5naW5lID0gdHJ1ZTtcclxuICAgICAgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5TdGFydHVwTWdEYXRhLmdldEZpcnN0VGFzaygpLkNsb3NpbmdGb3JtVUkgPSB0cnVlO1xyXG5cclxuICAgICAgYXdhaXQgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5TdGFydHVwTWdEYXRhLmdldEZpcnN0VGFzaygpLmVuZFRhc2sodHJ1ZSwgZmFsc2UsXHJcbiAgICAgICAgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4Mykge1xyXG4gICAgICBpZiAoZXgzIGluc3RhbmNlb2YgQXBwbGljYXRpb25FeGNlcHRpb24pIHtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZyhleDMpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aHJvdyBleDM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgU3RhcnRFeGVjdXRpb24oaHR0cENsaWVudDpIdHRwQ2xpZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBIdHRwTWFuYWdlci5zZXROYXRpdmVIdHRwQ2xpZW50KGh0dHBDbGllbnQpO1xyXG4gICAgbGV0IGxvYWRlZDogYm9vbGVhbiA9IGF3YWl0IENsaWVudE1hbmFnZXIuSW5zdGFuY2UuTG9hZEV4ZWN1dGlvblByb3BzKCk7XHJcblxyXG4gICAgaWYgKGxvYWRlZCkge1xyXG4gICAgICBuZXcgR3VpRXZlbnRzUHJvY2Vzc29yKCk7XHJcbiAgICAgIENsaWVudE1hbmFnZXIuSW5zdGFuY2UuSW5pdEd1aU1hbmFnZXIoKTtcclxuICAgICAgQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5Jbml0Q2lyY3VsYXJSZWZlcmVuY2VzQnlwYXNzZXMoKTtcclxuICAgICAgbGV0IHZlcnNpb25TdHJpbmcgPSBDdXJyZW50Q2xpZW50VmVyc2lvbiA9PT0gICcwLjAuMC4wJyA/IFwiRGV2ZWxvcG1lbnQgbW9kZVwiIDogXCJWZXJzaW9uIDogXCIgKyBDdXJyZW50Q2xpZW50VmVyc2lvbiA7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcIk1hZ2ljIFdlYiBDbGllbnQuIFwiICsgdmVyc2lvblN0cmluZyk7XHJcblxyXG4gICAgICBIdHRwTWFuYWdlci5HZXRJbnN0YW5jZSgpLkh0dHBDb21tdW5pY2F0aW9uVGltZW91dE1TID0gU2VydmVyQ29uZmlnLkluc3RhbmNlLkdldEZpcnN0SHR0cFJlcXVlc3RUaW1lb3V0KCk7XHJcblxyXG4gICAgICBFdmVudHNNYW5hZ2VyLkluc3RhbmNlLkluaXQoKTtcclxuXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Jbml0aWFsaXplKFJlbW90ZUNvbW1hbmRzUHJvY2Vzc29yLkdldEluc3RhbmNlKCkucGFyc2VMb2dMZXZlbChTZXJ2ZXJDb25maWcuSW5zdGFuY2UuZ2V0SW50ZXJuYWxMb2dMZXZlbCgpKSxmYWxzZSk7XHJcblxyXG4gICAgICBsZXQgbWdkOiBNR0RhdGEgPSBuZXcgTUdEYXRhKFxyXG4gICAgICAgIG5ldyBDb21tYW5kc1RhYmxlKCksXHJcbiAgICAgICAgbmV3IENvbW1hbmRzVGFibGUoKSxcclxuICAgICAgICAwLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgIGF3YWl0IE1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuYWRkTUdEYXRhKG1nZCwgMCwgdHJ1ZSk7XHJcblxyXG4gICAgICBhd2FpdCBDbGllbnRNYW5hZ2VyLkluc3RhbmNlLldvcmtUaHJlYWRFeGVjdXRpb24oKTtcclxuXHJcbiAgICAgIGlmIChMb2dnZXIuSW5zdGFuY2UuU2hvdWxkTG9nKCkpIHtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVUb0xvZyhPU0Vudmlyb25tZW50LkVvbFNlcSArIFwiRW5kZWQgb24gXCIgKyBEYXRlVGltZVV0aWxzLlRvU3RyaW5nKERhdGVUaW1lLk5vdywgWE1MQ29uc3RhbnRzLkVSUk9SX0xPR19EQVRFX0ZPUk1BVCwgTG9nZ2VyLkluc3RhbmNlKSArIE9TRW52aXJvbm1lbnQuRW9sU2VxICsgT1NFbnZpcm9ubWVudC5Fb2xTZXEsIGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAge1xyXG4gICAgICBhd2FpdCBHVUlNYW5hZ2VyLkluc3RhbmNlLk1lc3NhZ2VCb3goXCJFcnJvclwiLCBcIkZhaWxlZCB0byBsb2FkIHNlcnZlciBjb25maWd1cmF0aW9uIGZpbGUgKFwiICsgdGhpcy5fZXhlY3V0aW9uUHJvcGVydGllc0ZpbGVOYW1lICsgXCIpXCIsIFN0eWxlcy5NU0dCT1hfSUNPTl9FUlJPUiB8IFN0eWxlcy5NU0dCT1hfQlVUVE9OX09LKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gTG9hZHMgdGhlIGV4ZWN1dGlvbiBwcm9wZXJ0aWVzIGZpbGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmVyLFxyXG4gIC8vLyBhcHBsaWNhdGlvbiBhbmQgcHJvZ3JhbSB0byBleGVjdXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyBMb2FkRXhlY3V0aW9uUHJvcHMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAvLyByZXR1cm4gdHJ1ZSwgaWYgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cclxuICAgIGxldCByZXNwb25zZTogc3RyaW5nID0gXCJcIjtcclxuICAgIGxldCBzdWNjZWVkZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGlzRXJyb3IgY2Fubm90IGJlIHRydWUgaGVyZSwgYmVjYXVzZSBpdCBpcyByZXR1cm5lZCBieSBydW50aW1lIGVuZ2luZSBhbmQgdG8gcmVhZCBleGVjdXRpb24gcHJvcGVydGllcywgd2UgZG8gbm90IHJlYWNoIHRoZSBlbmdpbmUuXHJcbiAgICAgIGxldCBpc0Vycm9yOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbShmYWxzZSk7XHJcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgSHR0cE1hbmFnZXIuR2V0SW5zdGFuY2UoKS5HZXRDb250ZW50KENsaWVudE1hbmFnZXIuX2V4ZWN1dGlvblByb3BlcnRpZXNGaWxlTmFtZSwgbnVsbCwgZmFsc2UsIGlzRXJyb3IpO1xyXG4gICAgICBTZXJ2ZXJDb25maWcuSW5zdGFuY2UuSW5pdChKU09OLnBhcnNlKHJlc3BvbnNlKSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgc3VjY2VlZGVkID0gZmFsc2U7XHJcbiAgICAgIC8vIFRPRE86IHNob3VsZCB3ZSB3cml0ZSB0aGUgZXJyb3IgbWVzc2FnZSB0byBsb2c/XHJcbiAgICAgIC8vIFRPRE86IHNob3VsZCB3ZSBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb24gdGhlIGJyb3dzZXI/XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN1Y2NlZWRlZDtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pmdsb2JhbCB1bmlxdWUgSUQgb2YgdGhlIHNlc3Npb24gPSAnbWFjaGluZSB1bmlxdWUgSUQnICsgJ3Byb2Nlc3MgSUQnPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0R2xvYmFsVW5pcXVlU2Vzc2lvbklEKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2xvYmFsVW5pcXVlU2Vzc2lvbklkO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgY29udHJvbCdzIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljICBHZXRDb250cm9sUGljdHVyZU1hc2sodGFza0lkOiBzdHJpbmcsIGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBQSUNcclxuICB7XHJcbiAgICBsZXQgcGljOiBQSUMgPSBudWxsO1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSA8VGFzaz5NR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlLkdldFRhc2tCeUlEKHRhc2tJZCk7XHJcblxyXG4gICAgbGV0IGNvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG5cclxuICAgIGlmIChjb250cm9sTmFtZSAhPT0gbnVsbCAmJiB0YXNrICE9IG51bGwpIHtcclxuICAgICAgICBjb250cm9sID0gdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSk7XHJcbiAgICAgICAgcGljID0gY29udHJvbC5nZXRQSUMoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGljO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBmb3JtYXR0ZWQgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljICBHZXRGb3JtYXR0ZWRWYWx1ZSh0YXNrSWQ6IHN0cmluZywgY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgcm93SWQ/OiBzdHJpbmcpOiBzdHJpbmdcclxuICB7XHJcbiAgICBsZXQgcGljOiBQSUMgPSBudWxsO1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSA8VGFzaz5NR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlLkdldFRhc2tCeUlEKHRhc2tJZCk7XHJcblxyXG4gICAgbGV0IGNvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG4gICAgbGV0IG5ld1ZhbHVlOiBhbnkgPSB2YWx1ZTtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWUgIT09IG51bGwgICYmIHRhc2sgIT09IG51bGwpXHJcbiAgICAgIGNvbnRyb2wgPSB0YXNrLmdldEZvcm0oKS5HZXRDdHJsKGNvbnRyb2xOYW1lKTtcclxuICAgIGlmIChjb250cm9sICE9IG51bGwgJiYgY29udHJvbC5EYXRhVHlwZSA9PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpIHtcclxuICAgICAgaWYgKGNvbnRyb2wuaXNSZXBlYXRhYmxlKCkgJiYgIGNvbnRyb2wuZ2V0UHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQpLmlzRXhwcmVzc2lvbigpKVxyXG4gICAgICB7XHJcbiAgICAgICAgICBsZXQgcGljdmFsID0gY29udHJvbC5nZXRQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPUk1BVCkuZ2V0UHJldlZhbHVlKCtyb3dJZCk7XHJcbiAgICAgICAgICBwaWMgPSBuZXcgUElDIChwaWN2YWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQywgIGNvbnRyb2wuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRDb21wSWR4KCkpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHBpYyA9IGNvbnRyb2wuZ2V0UElDKCk7XHJcblxyXG4gICAgICBsZXQgZGlzcFZhbHVlID0gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgbGV0ICBuZXdQaWMgPSBwaWMuZ2V0VW5mb3JtYXR0ZWROdW1lcmljUGljKCk7XHJcblxyXG4gICAgICBsZXQgbnVtID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS50b051bShkaXNwVmFsdWUsIG5ld1BpYywgMCk7XHJcbiAgICAgIG5ld1ZhbHVlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5mcm9tTnVtKG51bSwgcGljKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgcmFuZ2VkIHZhbHVlIGZvciBpbnB1dCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljICBHZXRSYW5nZWRWYWx1ZSh0YXNrSWQ6IHN0cmluZywgY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZ1xyXG4gIHtcclxuICAgIGxldCB0YXNrOiBUYXNrID0gPFRhc2s+TUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5HZXRUYXNrQnlJRCh0YXNrSWQpO1xyXG5cclxuICAgIGxldCBjb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGNvbnRyb2wgPSAgdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSk7XHJcbiAgICAgIHJldHVybiBjb250cm9sLmdldFJhbmdlZFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHZhbGlkYXRlIHVzZXIgaW5wdXQgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyAgVmFsaWRhdGVDb250cm9sVmFsdWUodGFza0lkOiBzdHJpbmcsIGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBzdHJpbmdcclxuICB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IDxUYXNrPk1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuR2V0VGFza0J5SUQodGFza0lkKTtcclxuXHJcbiAgICBsZXQgY29udHJvbDogTWdDb250cm9sID0gbnVsbDtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGNvbnRyb2wgPSAgdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSkgYXMgTWdDb250cm9sO1xyXG4gICAgICByZXR1cm4gY29udHJvbC52YWxpZGF0ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgZmxkIHJhbmdlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIEdldEZsZFJhbmdlcyh0YXNrSWQ6IHN0cmluZywgY29udHJvbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IDxUYXNrPk1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuR2V0VGFza0J5SUQodGFza0lkKTtcclxuXHJcbiAgICBsZXQgY29udHJvbDogTWdDb250cm9sID0gbnVsbDtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWUgIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGNvbnRyb2wgPSAgdGFzay5nZXRGb3JtKCkuR2V0Q3RybChjb250cm9sTmFtZSkgYXMgTWdDb250cm9sO1xyXG4gICAgICByZXR1cm4gY29udHJvbC5nZXRSYW5nZXMoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybnMgd2hldGhlciBjbGllbnQvc2VydmVyIGNhY2hlIGV4aXN0c1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIFRyYW5zQ2FjaGVFeGlzdHMoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgY2xpZW50VHJhbnNDYWNoZUV4aXN0czogYm9vbGVhbiA9IEFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5nZXRDdXJyTUdEYXRhKCkuY2xpZW50VHJhbnNhY3Rpb25DYWNoZUV4aXN0cygpO1xyXG4gICAgbGV0IHNlcnZlclRyYW5zYWN0aW9uQ2FjaGVFeGlzdHM6IGJvb2xlYW4gPSBBY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuZ2V0Q3Vyck1HRGF0YSgpLnNlcnZlclRyYW5zYWN0aW9uQ2FjaGVFeGlzdHMoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50VHJhbnNDYWNoZUV4aXN0cyB8fCBzZXJ2ZXJUcmFuc2FjdGlvbkNhY2hlRXhpc3RzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTdWJzY3JpYmUgZm9yIGV2ZW50cyBkZWZpbmVkIGF0IEh0dHBDbGllbnRFdmVudHMgYW5kXHJcbiAgLy8vIGF0dGFjaCBhcHByb3ByaWF0ZSBldmVudCBoYW5kbGVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBSZWdpc3RlckRlbGVnYXRlcygpOiB2b2lkIHtcclxuICAgIEh0dHBDbGllbnRFdmVudHMuR2V0RXhlY3V0aW9uUHJvcGVydHlfRXZlbnQgPSBTZXJ2ZXJDb25maWcuSW5zdGFuY2UuR2V0RXhlY3V0aW9uUHJvcGVydHkuYmluZChTZXJ2ZXJDb25maWcuSW5zdGFuY2UpO1xyXG4gICAgSHR0cENsaWVudEV2ZW50cy5HZXRSdW50aW1lQ3R4SURfRXZlbnQgPSB0aGlzLkdldFJ1bnRpbWVDdHhJRC5iaW5kKHRoaXMpO1xyXG4gICAgSHR0cENsaWVudEV2ZW50cy5HZXRHbG9iYWxVbmlxdWVTZXNzaW9uSURfRXZlbnQgPSB0aGlzLkdldEdsb2JhbFVuaXF1ZVNlc3Npb25JRC5iaW5kKHRoaXMpO1xyXG4gICAgSHR0cENsaWVudEV2ZW50cy5TaG91bGREaXNwbGF5R2VuZXJpY0Vycm9yX0V2ZW50ID0gU2VydmVyQ29uZmlnLkluc3RhbmNlLlNob3VsZERpc3BsYXlHZW5lcmljRXJyb3IuYmluZChTZXJ2ZXJDb25maWcuSW5zdGFuY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXRyaWV2ZXMgcnVudGltZSBjb250ZXh0IElEXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFJ1bnRpbWVDdHhJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5Db250ZXh0SUQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNlbmQgYSByZXF1ZXN0IHRvIHNlcnZlciB0byB0ZXJtaW5hdGUgdGhlIGNvbnRleHQgdXNpbmcgZmV0Y2ggQVBJIHdpdGgga2VlcC1hbGl2ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIFRlcm1pbmF0ZUNvbnRleHRVc2luZ0ZldGNoQVBJKCk6IHZvaWQge1xyXG5cclxuICAgIC8vIElmIFNlc3Npb24gaXMgcmUtaW5pdGlhbGl6aW5nIG1lYW5zIHRoZSBjb250ZXh0IGlzIG5vdCBmb3VuZCBhdCBzZXJ2ZXIuXHJcbiAgICAvLyB0aGVuIHRoZXJlIGlzIG5vIHBvaW50IGluIHRlcm1pbmF0aW5nIGNvbnRleHQuXHJcbiAgICBpZiAoUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuSXNTZXNzaW9uUmVJbml0aWFsaXppbmcpXHJcbiAgICAgIHJldHVybjtcclxuICAgIEh0dHBNYW5hZ2VyLkdldEluc3RhbmNlKCkuSXNBYm9ydGluZ01hZ2ljRW5naW5lID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBEdWUgdG8gcGF5bG9hZCBsaW1pdCBvZiBmZXRjaCBBUEksIHNlbmQgb25seSB0aGUgY29udGV4dCB0ZXJtaW5hdGlvbiBjb21tYW5kIHRvIHNlcnZlclxyXG4gICAgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5nZXRDdXJyTUdEYXRhKCkuQ21kc1RvU2VydmVyLkNsZWFyKCk7XHJcblxyXG4gICAgbGV0IGNvbnRleHRUZXJtaW5hdGlvbkV2ZW50Q29tbWFuZDogQ29udGV4dFRlcm1pbmF0aW9uRXZlbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuXHJcbiAgICBDcmVhdGVDb250ZXh0VGVybWluYXRpb25FdmVudENvbW1hbmQoTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5TdGFydHVwTWdEYXRhLmdldEZpcnN0VGFzaygpLmdldFRhc2tUYWcoKSk7XHJcblxyXG4gICAgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5nZXRDdXJyTUdEYXRhKCkuQ21kc1RvU2VydmVyLkFkZCg8SUNsaWVudENvbW1hbmQ+Y29udGV4dFRlcm1pbmF0aW9uRXZlbnRDb21tYW5kKTtcclxuXHJcbiAgICAvLyByZXNwb25zZSBuZWVkIG5vdCB0byBiZSBoYW5kbGVkIGFzIHRoZSBicm93c2VyIHVubG9hZCBjYW5ub3QgYmUgc3RvcHBlZCwgc28gbm8gbmVlZCB0byB3YWl0XHJcbiAgICBSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvci5HZXRJbnN0YW5jZSgpLkV4ZWN1dGUoQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbi5PTkxZX0NPTU1BTkRTKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,56 @@
1
+ import { XMLConstants } from '@magic-xpa/utils';
2
+ import { Scrambler } from './util/Scrambler';
3
+ import { isNullOrUndefined } from '@magic-xpa/mscorelib';
4
+ export var CommandsProcessorBase_SessionStage;
5
+ (function (CommandsProcessorBase_SessionStage) {
6
+ CommandsProcessorBase_SessionStage[CommandsProcessorBase_SessionStage["HANDSHAKE"] = 1] = "HANDSHAKE";
7
+ CommandsProcessorBase_SessionStage[CommandsProcessorBase_SessionStage["INITIAL"] = 2] = "INITIAL";
8
+ CommandsProcessorBase_SessionStage[CommandsProcessorBase_SessionStage["NORMAL"] = 3] = "NORMAL";
9
+ })(CommandsProcessorBase_SessionStage || (CommandsProcessorBase_SessionStage = {}));
10
+ export var CommandsProcessorBase_SendingInstruction;
11
+ (function (CommandsProcessorBase_SendingInstruction) {
12
+ CommandsProcessorBase_SendingInstruction[CommandsProcessorBase_SendingInstruction["NO_TASKS_OR_COMMANDS"] = 0] = "NO_TASKS_OR_COMMANDS";
13
+ CommandsProcessorBase_SendingInstruction[CommandsProcessorBase_SendingInstruction["ONLY_COMMANDS"] = 1] = "ONLY_COMMANDS";
14
+ CommandsProcessorBase_SendingInstruction[CommandsProcessorBase_SendingInstruction["TASKS_AND_COMMANDS"] = 2] = "TASKS_AND_COMMANDS";
15
+ })(CommandsProcessorBase_SendingInstruction || (CommandsProcessorBase_SendingInstruction = {}));
16
+ export class CommandsProcessorBase {
17
+ _sessionCounter = 0;
18
+ GetSessionCounter() {
19
+ return this._sessionCounter;
20
+ }
21
+ async StartSession() {
22
+ return Promise.resolve(true);
23
+ }
24
+ async Execute(sendingInstruction, sessionStage, res) {
25
+ if (isNullOrUndefined(sessionStage)) {
26
+ await this.Execute_0(sendingInstruction);
27
+ return;
28
+ }
29
+ await this.Execute_1(sendingInstruction, sessionStage, res);
30
+ }
31
+ async Execute_0(sendingInstruction) {
32
+ await this.Execute_1(sendingInstruction, CommandsProcessorBase_SessionStage.NORMAL, null);
33
+ }
34
+ async Execute_1(sendingInstruction, sessionStage, res) {
35
+ return Promise.resolve();
36
+ }
37
+ async GetContent(requestedURL, useCache) {
38
+ return Promise.resolve('');
39
+ }
40
+ static UnScramble(respBuf) {
41
+ let openTagLocation = respBuf.indexOf(XMLConstants.MG_TAG_OPEN);
42
+ let core;
43
+ if (openTagLocation !== -1) {
44
+ let start = openTagLocation + XMLConstants.MG_TAG_OPEN.length;
45
+ let openTag = respBuf.substr(0, start);
46
+ let finish = respBuf.lastIndexOf(XMLConstants.TAG_OPEN);
47
+ let closeTag = respBuf.substr(finish);
48
+ core = openTag + Scrambler.UnScramble(respBuf, start, finish - 1) + closeTag;
49
+ }
50
+ else {
51
+ core = Scrambler.UnScramble(respBuf, 0, respBuf.length - 1);
52
+ }
53
+ return core;
54
+ }
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZHNQcm9jZXNzb3JCYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9Db21tYW5kc1Byb2Nlc3NvckJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUd6RCxNQUFNLENBQU4sSUFBWSxrQ0FLWDtBQUxELFdBQVksa0NBQWtDO0lBRTVDLHFHQUFhLENBQUE7SUFDYixpR0FBTyxDQUFBO0lBQ1AsK0ZBQU0sQ0FBQTtBQUNSLENBQUMsRUFMVyxrQ0FBa0MsS0FBbEMsa0NBQWtDLFFBSzdDO0FBR0QsTUFBTSxDQUFOLElBQVksd0NBSVg7QUFKRCxXQUFZLHdDQUF3QztJQUNsRCx1SUFBb0IsQ0FBQTtJQUNwQix5SEFBYSxDQUFBO0lBQ2IsbUlBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQUpXLHdDQUF3QyxLQUF4Qyx3Q0FBd0MsUUFJbkQ7QUFHRCxNQUFNLE9BQWdCLHFCQUFxQjtJQUN6QyxlQUFlLEdBQVcsQ0FBQyxDQUFDO0lBRTVCLGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBTUQsS0FBSyxDQUFDLFlBQVk7UUFDaEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFRRCxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUE0RCxFQUFFLFlBQWlELEVBQUUsR0FBa0I7UUFDL0ksSUFBSSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBSU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxrQkFBNEQ7UUFDbEYsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLGtDQUFrQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBTUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxrQkFBNEQsRUFBRSxZQUFnRCxFQUFFLEdBQWlCO1FBQy9JLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFLRCxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQW9CLEVBQUUsUUFBaUI7UUFDdEQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFPRCxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQWU7UUFDL0IsSUFBSSxlQUFlLEdBQVcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEUsSUFBSSxJQUFZLENBQUM7UUFFakIsSUFBSSxlQUFlLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLEtBQUssR0FBVyxlQUFlLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDdEUsSUFBSSxPQUFPLEdBQVcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFL0MsSUFBSSxNQUFNLEdBQVcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEUsSUFBSSxRQUFRLEdBQVcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU5QyxJQUFJLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQy9FLENBQUM7YUFDSSxDQUFDO1lBRUosSUFBSSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFhNTENvbnN0YW50cyB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBJUmVzdWx0VmFsdWUgfSBmcm9tICcuL3J0L0lSZXN1bHRWYWx1ZSc7XHJcbmltcG9ydCB7IFNjcmFtYmxlciB9IGZyb20gJy4vdXRpbC9TY3JhbWJsZXInO1xyXG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuXHJcbi8vIFRoZSBzdGFnZSBpbiB0aGUgc2Vzc2lvbiB0aGlzIGV4ZWN1dGlvbiBiZWxvbmdzIHRvXHJcbmV4cG9ydCBlbnVtIENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZXNzaW9uU3RhZ2Vcclxue1xyXG4gIEhBTkRTSEFLRSA9IDEsXHJcbiAgSU5JVElBTCxcclxuICBOT1JNQUxcclxufVxyXG5cclxuLy8gaW5zdHJ1Y3Rpb24gd2hhdCB0byBzZW5kIGR1cmluZyBleGVjdXRpb25cclxuZXhwb3J0IGVudW0gQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbiB7XHJcbiAgTk9fVEFTS1NfT1JfQ09NTUFORFMsXHJcbiAgT05MWV9DT01NQU5EUyxcclxuICBUQVNLU19BTkRfQ09NTUFORFNcclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PiB0aGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgYW5kIGhhbmRsaW5nIHRoZSBzZXJ2ZXIgbWVzc2FnZXM8L3N1bW1hcnk+XHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21tYW5kc1Byb2Nlc3NvckJhc2Uge1xyXG4gIF9zZXNzaW9uQ291bnRlcjogbnVtYmVyID0gMDsgLy8gdGhlIHNlc3Npb24gY291bnRlciB0aGF0IHNob3VsZCBiZSB1c2VkIG9uIHRoZSBuZXh0IGFjY2VzcyB0byB0aGUgc2VydmVyLlxyXG5cclxuICBHZXRTZXNzaW9uQ291bnRlcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25Db3VudGVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzdGFydCB0aGUgc2Vzc2lvbiAtIGUuZy4gZXhjaGFuZ2UgaGFuZHNoYWtlIHJlcXVlc3RzIHdpdGggdGhlIFNlcnZlciwgaWYgY29ubmVjdGVkLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPnRydWUgb25seSBpZiB0aGUgQ2xpZW50IHNob3VsZCBjb250aW51ZSB0byBzdGFydCB0aGUgYWN0dWFsIHJlcXVlc3RlZCBwcm9ncmFtLjwvcmV0dXJucz5cclxuICBhc3luYyBTdGFydFNlc3Npb24oKTogUHJvbWlzZTxib29sZWFuPntcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+YnVpbGQgdGhlIHhtbCByZXF1ZXN0OyBzZW5kIGl0IHRvIHRoZSBydW50aW1lLWVuZ2luZTsgcmVjZWl2ZSBhIHJlc3BvbnNlPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNlbmRpbmdJbnN0cnVjdGlvblwiPmluc3RydWN0aW9uIHdoYXQgdG8gc2VuZCBkdXJpbmcgZXhlY3V0aW9uIC0gTk9fVEFTS1NfT1JfQ09NTUFORFMgLyBPTkxZX0NPTU1BTkRTIC8gVEFTS1NfQU5EX0NPTU1BTkRTLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2Vzc2lvblN0YWdlXCI+SEFORFNIQUtFIC8gSU5JVElBTCAvIE5PUk1BTC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1wiPnJlc3VsdCBvdCBiZSAgcmVhZCBhZnRlciBwYXJzaW5nIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuPC9wYXJhbT5cclxuICBhc3luYyBFeGVjdXRlKHNlbmRpbmdJbnN0cnVjdGlvbjogQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbik6IFByb21pc2U8dm9pZD47XHJcbiAgYXN5bmMgRXhlY3V0ZShzZW5kaW5nSW5zdHJ1Y3Rpb246IENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb24sIHNlc3Npb25TdGFnZTogQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1Nlc3Npb25TdGFnZSwgcmVzOiBJUmVzdWx0VmFsdWUpOiBQcm9taXNlPHZvaWQ+O1xyXG4gIGFzeW5jIEV4ZWN1dGUoc2VuZGluZ0luc3RydWN0aW9uOiBDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2VuZGluZ0luc3RydWN0aW9uLCBzZXNzaW9uU3RhZ2U/OiBDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2Vzc2lvblN0YWdlLCByZXM/OiBJUmVzdWx0VmFsdWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChzZXNzaW9uU3RhZ2UpKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuRXhlY3V0ZV8wKHNlbmRpbmdJbnN0cnVjdGlvbik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuRXhlY3V0ZV8xKHNlbmRpbmdJbnN0cnVjdGlvbiwgc2Vzc2lvblN0YWdlLCByZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmJ1aWxkIHRoZSB4bWwgcmVxdWVzdDsgc2VuZCBpdCB0byB0aGUgcnVudGltZS1lbmdpbmU8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2VuZGluZ0luc3RydWN0aW9uXCI+aW5zdHJ1Y3Rpb24gd2hhdCB0byBzZW5kIGR1cmluZyBleGVjdXRpb24gLSBOT19UQVNLU19PUl9DT01NQU5EUyAvIE9OTFlfQ09NTUFORFMgLyBUQVNLU19BTkRfQ09NTUFORFMuPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIEV4ZWN1dGVfMChzZW5kaW5nSW5zdHJ1Y3Rpb246IENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuRXhlY3V0ZV8xKHNlbmRpbmdJbnN0cnVjdGlvbiwgQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1Nlc3Npb25TdGFnZS5OT1JNQUwsIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmJ1aWxkIHRoZSB4bWwgcmVxdWVzdDsgc2VuZCBpdCB0byB0aGUgcnVudGltZS1lbmdpbmU7IHJlY2VpdmUgYSByZXNwb25zZTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzZW5kaW5nSW5zdHJ1Y3Rpb25cIj5pbnN0cnVjdGlvbiB3aGF0IHRvIHNlbmQgZHVyaW5nIGV4ZWN1dGlvbiAtIE5PX1RBU0tTX09SX0NPTU1BTkRTIC8gT05MWV9DT01NQU5EUyAvIFRBU0tTX0FORF9DT01NQU5EUy48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNlc3Npb25TdGFnZVwiPkhBTkRTSEFLRSAvIElOSVRJQUwgLyBOT1JNQUwuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNcIj5yZXN1bHQgb3QgYmUgIHJlYWQgYWZ0ZXIgcGFyc2luZyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLjwvcGFyYW0+XHJcbiAgYXN5bmMgRXhlY3V0ZV8xKHNlbmRpbmdJbnN0cnVjdGlvbjogQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbiwgc2Vzc2lvblN0YWdlOiBDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2Vzc2lvblN0YWdlLCByZXM6IElSZXN1bHRWYWx1ZSk6IFByb21pc2U8dm9pZD57XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEludm9rZSB0aGUgcmVxdWVzdCBVUkwgJiByZXR1cm4gdGhlIHJlc3BvbnNlLjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXF1ZXN0ZWRVUkxcIj5VUkwgdG8gYmUgYWNjZXNzZWQuPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+cmVzcG9uc2UgKGZyb20gdGhlIHNlcnZlcikuPC9yZXR1cm5zPlxyXG4gIGFzeW5jIEdldENvbnRlbnQocmVxdWVzdGVkVVJMOiBzdHJpbmcsIHVzZUNhY2hlOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+e1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgnJyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+c2VuZCBNb25pdG9yIG1lc3NhZ2luZyB0byB0aGUgc2VydmVyPC9zdW1tYXJ5PlxyXG4gIGFic3RyYWN0IFNlbmRNb25pdG9yT25seSgpOiB2b2lkIDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiB1bnNjcmFtYmxlIHNlcnZlcnMgcmVzcG9uc2U8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPnVuc2NyYW1ibGVkIGNvbnRlbnQ8L3JldHVybnM+XHJcbiAgc3RhdGljIFVuU2NyYW1ibGUocmVzcEJ1Zjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBvcGVuVGFnTG9jYXRpb246IG51bWJlciA9IHJlc3BCdWYuaW5kZXhPZihYTUxDb25zdGFudHMuTUdfVEFHX09QRU4pO1xyXG4gICAgbGV0IGNvcmU6IHN0cmluZztcclxuXHJcbiAgICBpZiAob3BlblRhZ0xvY2F0aW9uICE9PSAtMSkge1xyXG4gICAgICBsZXQgc3RhcnQ6IG51bWJlciA9IG9wZW5UYWdMb2NhdGlvbiArIFhNTENvbnN0YW50cy5NR19UQUdfT1BFTi5sZW5ndGg7XHJcbiAgICAgIGxldCBvcGVuVGFnOiBzdHJpbmcgPSByZXNwQnVmLnN1YnN0cigwLCBzdGFydCk7XHJcblxyXG4gICAgICBsZXQgZmluaXNoOiBudW1iZXIgPSByZXNwQnVmLmxhc3RJbmRleE9mKFhNTENvbnN0YW50cy5UQUdfT1BFTik7XHJcbiAgICAgIGxldCBjbG9zZVRhZzogc3RyaW5nID0gcmVzcEJ1Zi5zdWJzdHIoZmluaXNoKTtcclxuXHJcbiAgICAgIGNvcmUgPSBvcGVuVGFnICsgU2NyYW1ibGVyLlVuU2NyYW1ibGUocmVzcEJ1Ziwgc3RhcnQsIGZpbmlzaCAtIDEpICsgY2xvc2VUYWc7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gV2UgZ290IGEgc2NyYW1ibGVkIGVycm9yIG1lc3NhZ2UsIHRoZXJlIGlzIG5vIG9wZW4gdGFnXHJcbiAgICAgIGNvcmUgPSBTY3JhbWJsZXIuVW5TY3JhbWJsZShyZXNwQnVmLCAwLCByZXNwQnVmLmxlbmd0aCAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvcmU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,26 @@
1
+ import { Logger, StrUtil } from "@magic-xpa/utils";
2
+ import { RemoteCommandsProcessor } from "./remote/RemoteCommandsProcessor";
3
+ import { HttpManager } from "./http/HttpManager";
4
+ import { InteractiveCommunicationsFailureHandler } from "./communications/InteractiveCommunicationsFailureHandler";
5
+ export class CommandsProcessorManager {
6
+ static GetCommandsProcessor() {
7
+ return RemoteCommandsProcessor.GetInstance();
8
+ }
9
+ static async GetContent(requestedURL, useCache) {
10
+ let ret = await (CommandsProcessorManager.GetCommandsProcessor().GetContent(requestedURL, useCache));
11
+ return ret;
12
+ }
13
+ static async StartSession() {
14
+ let succeeded = false;
15
+ try {
16
+ HttpManager.GetInstance().SetCommunicationsFailureHandler(new InteractiveCommunicationsFailureHandler());
17
+ succeeded = await RemoteCommandsProcessor.GetInstance().StartSession();
18
+ }
19
+ catch (ex) {
20
+ Logger.Instance.WriteServerToLog("Failed connecting to the server: " + StrUtil.getConsoleErorString(ex.Message));
21
+ throw ex;
22
+ }
23
+ return succeeded;
24
+ }
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9Db21tYW5kc1Byb2Nlc3Nvck1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFDLHVDQUF1QyxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFHakgsTUFBTSxPQUFPLHdCQUF3QjtJQUtuQyxNQUFNLENBQUMsb0JBQW9CO1FBQ3pCLE9BQU8sdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQU9ELE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQW9CLEVBQUUsUUFBaUI7UUFDN0QsSUFBSSxHQUFHLEdBQVcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLG9CQUFvQixFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzdHLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQU1BLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWTtRQUN4QixJQUFJLFNBQVMsR0FBWSxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLCtCQUErQixDQUFDLElBQUksdUNBQXVDLEVBQUUsQ0FBQyxDQUFDO1lBR3pHLFNBQVMsR0FBRyxNQUFNLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pFLENBQUM7UUFDRCxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxtQ0FBbUMsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDakgsTUFBTSxFQUFFLENBQUM7UUFDWCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nZ2VyLCBTdHJVdGlsIH0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtDb21tYW5kc1Byb2Nlc3NvckJhc2V9IGZyb20gXCIuL0NvbW1hbmRzUHJvY2Vzc29yQmFzZVwiO1xyXG5pbXBvcnQge1JlbW90ZUNvbW1hbmRzUHJvY2Vzc29yfSBmcm9tIFwiLi9yZW1vdGUvUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtIdHRwTWFuYWdlcn0gZnJvbSBcIi4vaHR0cC9IdHRwTWFuYWdlclwiO1xyXG5pbXBvcnQge0ludGVyYWN0aXZlQ29tbXVuaWNhdGlvbnNGYWlsdXJlSGFuZGxlcn0gZnJvbSBcIi4vY29tbXVuaWNhdGlvbnMvSW50ZXJhY3RpdmVDb21tdW5pY2F0aW9uc0ZhaWx1cmVIYW5kbGVyXCI7XHJcblxyXG4vLyBUT0RPOiBDb25zaWRlciByZW1vdmluZyB0aGlzIGNsYXNzIGFuZCB1c2luZyBSZW1vdGVDb21tYW5kc1Byb2Nlc3NvciBkaXJlY3RseS5cclxuZXhwb3J0IGNsYXNzIENvbW1hbmRzUHJvY2Vzc29yTWFuYWdlciB7XHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIGNvbW1hbmRzIHByb2Nlc3NvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0Q29tbWFuZHNQcm9jZXNzb3IoKTogQ29tbWFuZHNQcm9jZXNzb3JCYXNlIHtcclxuICAgIHJldHVybiBSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvci5HZXRJbnN0YW5jZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIFVSTCBjb250ZW50IGFjY29yZGluZyB0byB0aGUgYWN0aXZlIGNvbW1hbmRzIHByb2Nlc3NvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVxdWVzdGVkVVJMXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBhc3luYyBHZXRDb250ZW50KHJlcXVlc3RlZFVSTDogc3RyaW5nLCB1c2VDYWNoZTogYm9vbGVhbik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBsZXQgcmV0OiBzdHJpbmcgPSBhd2FpdCAoQ29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyLkdldENvbW1hbmRzUHJvY2Vzc29yKCkuR2V0Q29udGVudChyZXF1ZXN0ZWRVUkwsIHVzZUNhY2hlKSk7XHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTdGFydCBzZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gICBzdGF0aWMgYXN5bmMgU3RhcnRTZXNzaW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHN1Y2NlZWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgSHR0cE1hbmFnZXIuR2V0SW5zdGFuY2UoKS5TZXRDb21tdW5pY2F0aW9uc0ZhaWx1cmVIYW5kbGVyKG5ldyBJbnRlcmFjdGl2ZUNvbW11bmljYXRpb25zRmFpbHVyZUhhbmRsZXIoKSk7XHJcblxyXG4gICAgICAvLyBhY2Nlc3MgdGhlIFNlcnZlclxyXG4gICAgICBzdWNjZWVkZWQgPSBhd2FpdCBSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvci5HZXRJbnN0YW5jZSgpLlN0YXJ0U2Vzc2lvbigpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4KSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVNlcnZlclRvTG9nKFwiRmFpbGVkIGNvbm5lY3RpbmcgdG8gdGhlIHNlcnZlcjogXCIgKyBTdHJVdGlsLmdldENvbnNvbGVFcm9yU3RyaW5nKGV4Lk1lc3NhZ2UpKTtcclxuICAgICAgdGhyb3cgZXg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN1Y2NlZWRlZDtcclxuICB9XHJcbn1cclxuIl19