@magic-xpa/engine 4.1200.0-dev4120.19 → 4.1200.0-dev4120.191

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/fesm2022/magic-xpa-engine.mjs +11347 -1307
  2. package/fesm2022/magic-xpa-engine.mjs.map +1 -1
  3. package/index.d.ts +4 -0
  4. package/package.json +5 -7
  5. package/src/ClientManager.d.ts +2 -0
  6. package/src/CommandsProcessorBase.d.ts +2 -1
  7. package/src/CommandsProcessorManager.d.ts +2 -1
  8. package/src/ConstInterface.d.ts +7 -0
  9. package/src/bridge/MagicBridge.d.ts +2 -0
  10. package/src/commands/ClientToServer/CachedFileQueryCommand.d.ts +9 -0
  11. package/src/commands/ClientToServer/CommandFactory.d.ts +4 -2
  12. package/src/commands/ClientToServer/ControlItemsRefreshCommand.d.ts +1 -0
  13. package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +1 -0
  14. package/src/event/EventHandler.d.ts +5 -0
  15. package/src/event/EventsManager.d.ts +4 -0
  16. package/src/exp/ExpressionEvaluator.d.ts +5 -0
  17. package/src/http/HttpManager.d.ts +2 -1
  18. package/src/http/client/HttpClientAsync.d.ts +2 -2
  19. package/src/http/client/HttpClientBase.d.ts +3 -3
  20. package/src/http/client/HttpClientSync.d.ts +2 -2
  21. package/src/remote/RemoteCommandsProcessor.d.ts +9 -2
  22. package/src/remote/RemoteControlItemsRefreshCommand.d.ts +1 -0
  23. package/src/rt/Operation.d.ts +3 -1
  24. package/src/util/ParamParseResult.d.ts +3 -3
  25. package/esm2022/index.mjs +0 -188
  26. package/esm2022/magic-xpa-engine.mjs +0 -2
  27. package/esm2022/src/AccessHelper.mjs +0 -15
  28. package/esm2022/src/ClientManager.mjs +0 -420
  29. package/esm2022/src/CommandsProcessorBase.mjs +0 -56
  30. package/esm2022/src/CommandsProcessorManager.mjs +0 -26
  31. package/esm2022/src/CommandsTable.mjs +0 -162
  32. package/esm2022/src/ConstInterface.mjs +0 -517
  33. package/esm2022/src/CurrentClientVersion.mjs +0 -2
  34. package/esm2022/src/FlowMonitorInterface.mjs +0 -16
  35. package/esm2022/src/GUIManager.mjs +0 -62
  36. package/esm2022/src/GlobalCommandsManager.mjs +0 -34
  37. package/esm2022/src/GuiEventsProcessor.mjs +0 -156
  38. package/esm2022/src/ICommandsTable.mjs +0 -2
  39. package/esm2022/src/ServerConfig.mjs +0 -122
  40. package/esm2022/src/bridge/IGuiEvent.mjs +0 -20
  41. package/esm2022/src/bridge/MagicBridge.mjs +0 -41
  42. package/esm2022/src/commands/ClientOriginatedCommandTaskTag.mjs +0 -12
  43. package/esm2022/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs +0 -9
  44. package/esm2022/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs +0 -9
  45. package/esm2022/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs +0 -9
  46. package/esm2022/src/commands/ClientToServer/BrowserEscEventCommand.mjs +0 -26
  47. package/esm2022/src/commands/ClientToServer/ClientOriginatedCommand.mjs +0 -15
  48. package/esm2022/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +0 -60
  49. package/esm2022/src/commands/ClientToServer/ColumnSortEventCommand.mjs +0 -29
  50. package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +0 -261
  51. package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +0 -67
  52. package/esm2022/src/commands/ClientToServer/ComputeEventCommand.mjs +0 -26
  53. package/esm2022/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +0 -24
  54. package/esm2022/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +0 -23
  55. package/esm2022/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs +0 -8
  56. package/esm2022/src/commands/ClientToServer/DataViewOutputCommand.mjs +0 -13
  57. package/esm2022/src/commands/ClientToServer/DataviewCommand.mjs +0 -44
  58. package/esm2022/src/commands/ClientToServer/EvaluateCommand.mjs +0 -40
  59. package/esm2022/src/commands/ClientToServer/EventCommand.mjs +0 -43
  60. package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +0 -70
  61. package/esm2022/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +0 -25
  62. package/esm2022/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs +0 -11
  63. package/esm2022/src/commands/ClientToServer/ICommandTaskTag.mjs +0 -2
  64. package/esm2022/src/commands/ClientToServer/IndexChangeEventCommand.mjs +0 -24
  65. package/esm2022/src/commands/ClientToServer/IniputForceWriteCommand.mjs +0 -26
  66. package/esm2022/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +0 -26
  67. package/esm2022/src/commands/ClientToServer/QueryCommand.mjs +0 -21
  68. package/esm2022/src/commands/ClientToServer/RecomputeCommand.mjs +0 -30
  69. package/esm2022/src/commands/ClientToServer/RefreshEventCommand.mjs +0 -30
  70. package/esm2022/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +0 -27
  71. package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +0 -43
  72. package/esm2022/src/commands/ClientToServer/SelectProgramCommand.mjs +0 -19
  73. package/esm2022/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs +0 -9
  74. package/esm2022/src/commands/ClientToServer/SubformOpenEventCommand.mjs +0 -24
  75. package/esm2022/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +0 -27
  76. package/esm2022/src/commands/ClientToServer/TransactionCommand.mjs +0 -34
  77. package/esm2022/src/commands/ClientToServer/UnloadCommand.mjs +0 -18
  78. package/esm2022/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +0 -18
  79. package/esm2022/src/commands/DataViewCommandBase.mjs +0 -8
  80. package/esm2022/src/commands/IClientCommand.mjs +0 -2
  81. package/esm2022/src/commands/IClientTargetedCommand.mjs +0 -13
  82. package/esm2022/src/commands/IClientToServerCommandInfo.mjs +0 -2
  83. package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +0 -65
  84. package/esm2022/src/commands/ServerToClient/AddLocateCommand.mjs +0 -22
  85. package/esm2022/src/commands/ServerToClient/AddRangeCommand.mjs +0 -62
  86. package/esm2022/src/commands/ServerToClient/AddSortCommand.mjs +0 -33
  87. package/esm2022/src/commands/ServerToClient/ClientRefreshCommand.mjs +0 -25
  88. package/esm2022/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +0 -24
  89. package/esm2022/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +0 -45
  90. package/esm2022/src/commands/ServerToClient/OpenURLCommand.mjs +0 -221
  91. package/esm2022/src/commands/ServerToClient/ResetLocateCommand.mjs +0 -15
  92. package/esm2022/src/commands/ServerToClient/ResetRangeCommand.mjs +0 -15
  93. package/esm2022/src/commands/ServerToClient/ResetSortCommand.mjs +0 -15
  94. package/esm2022/src/commands/ServerToClient/ResultCommand.mjs +0 -37
  95. package/esm2022/src/commands/ServerToClient/VerifyCommand.mjs +0 -83
  96. package/esm2022/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +0 -132
  97. package/esm2022/src/communications/IConnectionStateManager.mjs +0 -2
  98. package/esm2022/src/communications/InteractiveCommunicationsFailureHandler.mjs +0 -15
  99. package/esm2022/src/data/DataSourceIdKey.mjs +0 -3
  100. package/esm2022/src/data/DataView.mjs +0 -1613
  101. package/esm2022/src/data/DataViewBase.mjs +0 -4
  102. package/esm2022/src/data/DataviewManager.mjs +0 -28
  103. package/esm2022/src/data/DataviewManagerBase.mjs +0 -15
  104. package/esm2022/src/data/DvCache.mjs +0 -67
  105. package/esm2022/src/data/Field.mjs +0 -646
  106. package/esm2022/src/data/FieldBase.mjs +0 -15
  107. package/esm2022/src/data/FieldsTable.mjs +0 -103
  108. package/esm2022/src/data/IRecordsTable.mjs +0 -2
  109. package/esm2022/src/data/Key.mjs +0 -88
  110. package/esm2022/src/data/Record.mjs +0 -880
  111. package/esm2022/src/data/RecordOutOfDataViewException.mjs +0 -16
  112. package/esm2022/src/data/RecordsTable.mjs +0 -267
  113. package/esm2022/src/data/TaskTransactionManager.mjs +0 -107
  114. package/esm2022/src/data/XMLBasedDcValuesBuilder.mjs +0 -74
  115. package/esm2022/src/enums.mjs +0 -24
  116. package/esm2022/src/env/EnvVariablesTable.mjs +0 -340
  117. package/esm2022/src/env/Environment.mjs +0 -487
  118. package/esm2022/src/env/ILanguageData.mjs +0 -2
  119. package/esm2022/src/env/LanguageData.mjs +0 -227
  120. package/esm2022/src/env/MirrorString.mjs +0 -67
  121. package/esm2022/src/event/ActionManager.mjs +0 -91
  122. package/esm2022/src/event/Event.mjs +0 -1333
  123. package/esm2022/src/event/EventHandler.mjs +0 -766
  124. package/esm2022/src/event/EventHandlerPosition.mjs +0 -204
  125. package/esm2022/src/event/EventsManager.mjs +0 -2988
  126. package/esm2022/src/event/IEventsManager.mjs +0 -7
  127. package/esm2022/src/event/RunTimeEvent.mjs +0 -399
  128. package/esm2022/src/event/RunTimeEventBase.mjs +0 -4
  129. package/esm2022/src/event/UserEventsTable.mjs +0 -47
  130. package/esm2022/src/exp/ExpTable.mjs +0 -57
  131. package/esm2022/src/exp/Expression.mjs +0 -200
  132. package/esm2022/src/exp/ExpressionDict.mjs +0 -727
  133. package/esm2022/src/exp/ExpressionEvaluator.mjs +0 -4206
  134. package/esm2022/src/exp/ExpressionLocalJpn.mjs +0 -314
  135. package/esm2022/src/exp/GlobalParamsTable.mjs +0 -85
  136. package/esm2022/src/exp/YesNoExp.mjs +0 -36
  137. package/esm2022/src/gui/CreatedFormVector.mjs +0 -23
  138. package/esm2022/src/gui/FormsTable.mjs +0 -66
  139. package/esm2022/src/gui/MgControl.mjs +0 -363
  140. package/esm2022/src/gui/MgForm.mjs +0 -1224
  141. package/esm2022/src/http/HttpManager.mjs +0 -97
  142. package/esm2022/src/http/client/HttpClientAsync.mjs +0 -68
  143. package/esm2022/src/http/client/HttpClientBase.mjs +0 -132
  144. package/esm2022/src/http/client/HttpClientEvents.mjs +0 -39
  145. package/esm2022/src/http/client/HttpClientSync.mjs +0 -42
  146. package/esm2022/src/http/client/HttpUtility.mjs +0 -84
  147. package/esm2022/src/http/client/ICommunicationsFailureHandler.mjs +0 -2
  148. package/esm2022/src/remote/AddUserLocateRemoteDataViewCommand.mjs +0 -18
  149. package/esm2022/src/remote/AddUserRangeRemoteDataViewCommand.mjs +0 -18
  150. package/esm2022/src/remote/AddUserSortRemoteDataViewCommand.mjs +0 -18
  151. package/esm2022/src/remote/RemoteCommandsProcessor.mjs +0 -883
  152. package/esm2022/src/remote/RemoteControlItemsRefreshCommand.mjs +0 -25
  153. package/esm2022/src/remote/RemoteDataViewCommandBase.mjs +0 -24
  154. package/esm2022/src/remote/RemoteDataViewCommandFactory.mjs +0 -61
  155. package/esm2022/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +0 -16
  156. package/esm2022/src/remote/RemoteDataviewManager.mjs +0 -17
  157. package/esm2022/src/remote/RemoteInitDataViewCommand.mjs +0 -11
  158. package/esm2022/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +0 -17
  159. package/esm2022/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +0 -13
  160. package/esm2022/src/remote/ResetUserSortRemoteDataviewCommand.mjs +0 -16
  161. package/esm2022/src/remote/ServerError.mjs +0 -40
  162. package/esm2022/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +0 -20
  163. package/esm2022/src/rt/Argument.mjs +0 -265
  164. package/esm2022/src/rt/ArgumentsList.mjs +0 -103
  165. package/esm2022/src/rt/Boundary.mjs +0 -152
  166. package/esm2022/src/rt/CompMainPrgTable.mjs +0 -63
  167. package/esm2022/src/rt/DataviewHeaderBase.mjs +0 -98
  168. package/esm2022/src/rt/DataviewHeaderFactory.mjs +0 -7
  169. package/esm2022/src/rt/DataviewHeaders.mjs +0 -53
  170. package/esm2022/src/rt/DataviewHeadersSaxHandler.mjs +0 -38
  171. package/esm2022/src/rt/ExecutionStack.mjs +0 -94
  172. package/esm2022/src/rt/ExecutionStackEntry.mjs +0 -17
  173. package/esm2022/src/rt/HandlersTable.mjs +0 -96
  174. package/esm2022/src/rt/IDataSourceViewDefinition.mjs +0 -2
  175. package/esm2022/src/rt/IDataviewHeader.mjs +0 -2
  176. package/esm2022/src/rt/IResultValue.mjs +0 -2
  177. package/esm2022/src/rt/LastFocusedManager.mjs +0 -65
  178. package/esm2022/src/rt/Operation.mjs +0 -735
  179. package/esm2022/src/rt/OperationTable.mjs +0 -67
  180. package/esm2022/src/rt/Recompute.mjs +0 -355
  181. package/esm2022/src/rt/RecomputeTable.mjs +0 -63
  182. package/esm2022/src/rt/RemoteDataviewHeader.mjs +0 -108
  183. package/esm2022/src/rt/ResultValue.mjs +0 -10
  184. package/esm2022/src/rt/TableCache.mjs +0 -177
  185. package/esm2022/src/rt/TableCacheManager.mjs +0 -67
  186. package/esm2022/src/rt/Transaction.mjs +0 -53
  187. package/esm2022/src/security/UserDetails.mjs +0 -71
  188. package/esm2022/src/tasks/IMGDataCollection.mjs +0 -2
  189. package/esm2022/src/tasks/MGData.mjs +0 -552
  190. package/esm2022/src/tasks/MGDataCollection.mjs +0 -252
  191. package/esm2022/src/tasks/RCTimer.mjs +0 -63
  192. package/esm2022/src/tasks/RemoteTaskService.mjs +0 -45
  193. package/esm2022/src/tasks/Task.mjs +0 -2499
  194. package/esm2022/src/tasks/TaskBase.mjs +0 -83
  195. package/esm2022/src/tasks/TaskServiceBase.mjs +0 -25
  196. package/esm2022/src/tasks/TasksTable.mjs +0 -80
  197. package/esm2022/src/tasks/sort/Sort.mjs +0 -5
  198. package/esm2022/src/tasks/sort/SortCollection.mjs +0 -67
  199. package/esm2022/src/util/ConstUtils.mjs +0 -14
  200. package/esm2022/src/util/FlowMonitorQueue.mjs +0 -451
  201. package/esm2022/src/util/HeapSort.mjs +0 -70
  202. package/esm2022/src/util/IMirrorXML.mjs +0 -2
  203. package/esm2022/src/util/IServerConfig.mjs +0 -2
  204. package/esm2022/src/util/MgBlockingQueue.mjs +0 -2
  205. package/esm2022/src/util/MgPriorityBlockingQueue.mjs +0 -74
  206. package/esm2022/src/util/MgPriorityQueue.mjs +0 -66
  207. package/esm2022/src/util/ParamParseResult.mjs +0 -8
  208. package/esm2022/src/util/PrmMap.mjs +0 -153
  209. package/esm2022/src/util/ReturnResult.mjs +0 -46
  210. package/esm2022/src/util/ReturnResultBase.mjs +0 -18
  211. package/esm2022/src/util/Scrambler.mjs +0 -89
  212. package/esm2022/src/util/UniqueIDUtils.mjs +0 -13
  213. package/esm2022/src/util/cookie.service.mjs +0 -92
@@ -1,487 +0,0 @@
1
- import { DisplayConvertor } from '@magic-xpa/gui';
2
- import { Debug, Encoding, Hashtable, NString } from '@magic-xpa/mscorelib';
3
- import { Constants, Logger, OSEnvironment, UtilDateJpn, UtilStrByteMode, XMLConstants, XmlParser } from '@magic-xpa/utils';
4
- import { CommandsProcessorManager } from '../CommandsProcessorManager';
5
- import { ConstInterface } from '../ConstInterface';
6
- import { ServerConfig } from '../ServerConfig';
7
- import { AccessHelper } from '../AccessHelper';
8
- export class Environment {
9
- _environments = new Hashtable();
10
- _contextInactivityTimeout = 0;
11
- _clientContextInactivityTimeout = 0;
12
- _contextInactivityWarningTime = 0;
13
- _toolitipTimeout = 0;
14
- _contextUnloadTimeout = 0;
15
- _canReplaceDecimalSeparator = false;
16
- _codePage = 0;
17
- _dateSeparator = '\0';
18
- _decimalSeparator = '\0';
19
- _thousandsSeparator = '\0';
20
- _timeSeparator = '\0';
21
- _guid = null;
22
- _imeAutoOff = false;
23
- _language = '\0';
24
- _localAs400Set = false;
25
- _localExtraGengo = null;
26
- _localFlags = null;
27
- _lowHigh = true;
28
- _owner = null;
29
- _debugMode = 0;
30
- _significantNumSize = 0;
31
- _specialAnsiExpression = false;
32
- _specialImmediatehandlerEnd = false;
33
- _specialShowStatusBarPanes = false;
34
- _specialRouteToRootProgOnContextRecreation = false;
35
- _specialCancelOnCreate = false;
36
- _system = null;
37
- _terminal = 0;
38
- _forwardSlash = Constants.ForwardSlashWebUsage;
39
- _dropUserFormats = null;
40
- _webclientReinitSession = "N";
41
- _specialValNewPolicy = false;
42
- static Instance = new Environment();
43
- get Language() {
44
- return this._language;
45
- }
46
- IgnoreReplaceDecimalSeparator = false;
47
- get SpecialRestoreMaximizedForm() {
48
- return false;
49
- }
50
- set ForwardSlashUsage(value) {
51
- this._forwardSlash = value;
52
- }
53
- get ForwardSlashUsage() {
54
- return this._forwardSlash;
55
- }
56
- fillData(tokensVectorOrParser) {
57
- if (arguments[0] instanceof XmlParser) {
58
- this.fillData_0(tokensVectorOrParser);
59
- return;
60
- }
61
- this.fillData_1(tokensVectorOrParser);
62
- }
63
- fillData_0(parser) {
64
- let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
65
- if (endContext !== -1 && endContext < parser.getXMLdata().length) {
66
- let tag = parser.getXMLsubstring(endContext);
67
- parser.add2CurrIndex(tag.indexOf(ConstInterface.MG_TAG_ENV) + ConstInterface.MG_TAG_ENV.length);
68
- let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
69
- this.fillData(tokensVector);
70
- parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
71
- }
72
- else
73
- Logger.Instance.WriteExceptionToLogWithMsg("in Environment.FillData() out of string bounds");
74
- }
75
- fillData_1(tokensVector) {
76
- let attribute;
77
- let valueStr;
78
- let hashKey;
79
- let env;
80
- env = new EnvironmentDetails();
81
- for (let j = 0; j < tokensVector.length; j += 2) {
82
- attribute = (tokensVector.get_Item(j));
83
- valueStr = (tokensVector.get_Item(j + 1));
84
- valueStr = XmlParser.unescape(valueStr);
85
- switch (attribute) {
86
- case ConstInterface.MG_ATTR_THOUSANDS:
87
- this._thousandsSeparator = valueStr[0];
88
- break;
89
- case ConstInterface.MG_ATTR_DECIMAL_SEPARATOR:
90
- this._decimalSeparator = valueStr[0];
91
- break;
92
- case ConstInterface.MG_ATTR_WEBCLIENT_REINIT_SESSION:
93
- this._webclientReinitSession = valueStr[0];
94
- break;
95
- case ConstInterface.MG_ATTR_DATE:
96
- this._dateSeparator = valueStr[0];
97
- DisplayConvertor.Instance.setDateChar(this._dateSeparator.charCodeAt(0));
98
- break;
99
- case ConstInterface.MG_ATTR_TIME:
100
- this._timeSeparator = valueStr[0];
101
- break;
102
- case ConstInterface.MG_ATTR_OWNER:
103
- this._owner = valueStr;
104
- break;
105
- case ConstInterface.MG_ATTR_SIGNIFICANT_NUM_SIZE:
106
- this._significantNumSize = XmlParser.getInt(valueStr);
107
- break;
108
- case ConstInterface.MG_ATTR_DEBUG_MODE:
109
- this._debugMode = XmlParser.getInt(valueStr);
110
- break;
111
- case ConstInterface.MG_ATTR_POINT_TRANSLATION:
112
- this._canReplaceDecimalSeparator = XmlParser.getBoolean(valueStr);
113
- break;
114
- case ConstInterface.MG_ATTR_SPECIAL_EXITCTRL:
115
- break;
116
- case ConstInterface.MG_ATTR_LOWHIGH:
117
- this._lowHigh = XmlParser.getBoolean(valueStr);
118
- break;
119
- case ConstInterface.MG_ATTR_ACCESS_TEST:
120
- break;
121
- case ConstInterface.MG_ATTR_SPECIAL_TEXT_SIZE_FACTORING:
122
- break;
123
- case ConstInterface.MG_ATTR_SPECIAL_FLAT_EDIT_ON_CLASSIC_THEME:
124
- break;
125
- case ConstInterface.MG_ATTR_ENCODING:
126
- if (valueStr !== " ") {
127
- this._codePage = XmlParser.getInt(valueStr);
128
- UtilStrByteMode.Encoding = this.GetEncoding();
129
- }
130
- break;
131
- case ConstInterface.MG_ATTR_SYSTEM:
132
- this._system = XmlParser.unescape(valueStr);
133
- break;
134
- case ConstInterface.MG_ATTR_COMPONENT:
135
- env.CompIdx = XmlParser.getInt(valueStr);
136
- break;
137
- case ConstInterface.MG_ATTR_DATEMODE:
138
- env.DateMode = valueStr[0];
139
- break;
140
- case ConstInterface.MG_ATTR_CENTURY:
141
- env.Century = XmlParser.getInt(valueStr);
142
- break;
143
- case ConstInterface.MG_ATTR_IDLETIME:
144
- env.IdleTime = XmlParser.getInt(valueStr);
145
- if (env.IdleTime === 0)
146
- env.IdleTime = 1;
147
- break;
148
- case ConstInterface.MG_ATTR_UPD_IN_QUERY:
149
- env.UpdateInQueryMode = XmlParser.getBoolean(valueStr);
150
- break;
151
- case ConstInterface.MG_ATTR_CRE_IN_MODIFY:
152
- env.CreateInModifyMode = XmlParser.getBoolean(valueStr);
153
- break;
154
- case ConstInterface.MG_ATTR_DEFAULT_COLOR:
155
- break;
156
- case ConstInterface.MG_ATTR_DEFAULT_FOCUS_COLOR:
157
- break;
158
- case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_TIMEOUT:
159
- this._contextInactivityTimeout = XmlParser.getInt(valueStr);
160
- break;
161
- case ConstInterface.MG_ATTR_CLIENT_CONTEXT_INACTIVITY_TIMEOUT:
162
- this._clientContextInactivityTimeout = XmlParser.getInt(valueStr);
163
- break;
164
- case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_WARNING_TIME:
165
- this._contextInactivityWarningTime = XmlParser.getInt(valueStr);
166
- break;
167
- case ConstInterface.MG_ATTR_TOOLTIP_TIMEOUT:
168
- this._toolitipTimeout = XmlParser.getInt(valueStr);
169
- break;
170
- case ConstInterface.MG_ATTR_CONTEXT_UNLOAD_TIMEOUT:
171
- this._contextUnloadTimeout = XmlParser.getInt(valueStr);
172
- break;
173
- case ConstInterface.MG_ATTR_IME_AUTO_OFF:
174
- this._imeAutoOff = XmlParser.getBoolean(valueStr);
175
- break;
176
- case ConstInterface.MG_ATTR_LOCAL_AS400SET:
177
- this._localAs400Set = XmlParser.getBoolean(valueStr);
178
- break;
179
- case ConstInterface.MG_ATTR_LOCAL_EXTRA_GENGO:
180
- this._localExtraGengo = valueStr;
181
- UtilDateJpn.getInstance().addExtraGengo(this._localExtraGengo);
182
- break;
183
- case ConstInterface.MG_ATTR_LOCAL_FLAGS:
184
- this._localFlags = valueStr;
185
- break;
186
- case ConstInterface.MG_ATTR_SPECIAL_IMMEDIATE_HANDLER_END:
187
- this._specialImmediatehandlerEnd = XmlParser.getBoolean(valueStr);
188
- break;
189
- case ConstInterface.MG_ATTR_SPEACIAL_ANSI_EXP:
190
- this._specialAnsiExpression = XmlParser.getBoolean(valueStr);
191
- break;
192
- case ConstInterface.MG_ATTR_SPECIAL_SHOW_STATUSBAR_PANES:
193
- this._specialShowStatusBarPanes = XmlParser.getBoolean(valueStr);
194
- break;
195
- case ConstInterface.MG_ATTR_SPECIAL_ROUTE_TO_ROOT_PROG_ON_CONTEXT_RECREATION:
196
- this._specialRouteToRootProgOnContextRecreation = XmlParser.getBoolean(valueStr);
197
- break;
198
- case ConstInterface.MG_ATTR_SPECIAL_SPECIAL_EDIT_LEFT_ALIGN:
199
- break;
200
- case ConstInterface.MG_ATTR_SPEACIAL_SWF_CONTROL_NAME:
201
- break;
202
- case ConstInterface.MG_ATTR_LANGUAGE:
203
- this._language = valueStr[0];
204
- break;
205
- case ConstInterface.MG_ATTR_USERID:
206
- break;
207
- case ConstInterface.MG_TAG_USERNAME:
208
- ServerConfig.Instance.setUsername(valueStr);
209
- break;
210
- case ConstInterface.MG_ATTR_TERMINAL:
211
- this._terminal = XmlParser.getInt(valueStr);
212
- break;
213
- case ConstInterface.MG_ATTR_USERINFO:
214
- break;
215
- case ConstInterface.MG_ATTR_GUID:
216
- this._guid = valueStr;
217
- break;
218
- case ConstInterface.MG_ATTR_CONTROLS_PERSISTENCY_PATH:
219
- break;
220
- case ConstInterface.MG_ATTR_PROJDIR:
221
- env.ProjDir = valueStr;
222
- break;
223
- case ConstInterface.MG_ATTR_DROP_USERFORMATS:
224
- this._dropUserFormats = valueStr;
225
- break;
226
- case ConstInterface.MG_ATTR_SPECIAL_VAL_NEW_POLICY:
227
- this._specialValNewPolicy = XmlParser.getBoolean(valueStr);
228
- break;
229
- case ConstInterface.MG_ATTR_SPECIAL_CANCEL_ON_CREATE:
230
- this._specialCancelOnCreate = XmlParser.getBoolean(valueStr);
231
- break;
232
- case ConstInterface.MG_ATTR_SPECIAL_LEGACY_TRIM_RANGE:
233
- case ConstInterface.MG_ATTR_SPECIAL_LEGACY_EMPTY_RANGE:
234
- case ConstInterface.MG_ATTR_DEFAULT_DISABLED_COLOR:
235
- case ConstInterface.MG_ATTR_SPECIAL_ANSI_BLOB_CHECK_NULL:
236
- case ConstInterface.MG_ATTR_SPECIAL_TABLE_REDUCE_TITLE_HEIGHT:
237
- case ConstInterface.MG_ATTR_SPECIAL_DOTNET_ALLOW_ZERO_DATE:
238
- case ConstInterface.MG_ATTR_SPECIAL_REUSE_TABLE_EDITOR:
239
- break;
240
- default:
241
- Logger.Instance.WriteExceptionToLogWithMsg("in Environment.fillData(): unknown attribute: " + attribute);
242
- break;
243
- }
244
- }
245
- hashKey = env.CompIdx;
246
- this._environments.set_Item(hashKey, env);
247
- }
248
- async fillFromUrl(tagName, parser) {
249
- let XMLdata = parser.getXMLdata();
250
- let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
251
- if (endContext !== -1 && endContext < XMLdata.length) {
252
- let tagAndAttributes = parser.getXMLsubstring(endContext);
253
- parser.add2CurrIndex(tagAndAttributes.indexOf(tagName) + tagName.length);
254
- let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
255
- Debug.Assert(tokensVector.get_Item(0) === XMLConstants.MG_ATTR_VALUE);
256
- let cachedFileUrl = (tokensVector.get_Item(1));
257
- if (cachedFileUrl.trim() === "")
258
- Logger.Instance.WriteErrorToLog(NString.Format("Empty cached file URL: '{0}'", tagAndAttributes.trim()));
259
- else {
260
- let Content = await CommandsProcessorManager.GetContent(cachedFileUrl, true);
261
- try {
262
- switch (tagName) {
263
- case ConstInterface.MG_TAG_KBDMAP_URL:
264
- break;
265
- case ConstInterface.MG_TAG_ENV_PARAM_URL:
266
- let innerXmlParser = new XmlParser(Content);
267
- while (AccessHelper.envParamsTable.mirrorFromXML(innerXmlParser.getNextTag(), innerXmlParser)) {
268
- }
269
- break;
270
- }
271
- }
272
- catch (ex) {
273
- switch (tagName) {
274
- case ConstInterface.MG_TAG_KBDMAP_URL:
275
- Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("Keyboard Mapping: '{0}'{1}{2}", cachedFileUrl, OSEnvironment.EolSeq, ex.Message));
276
- break;
277
- case ConstInterface.MG_TAG_ENV_PARAM_URL:
278
- Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("Env Params Table: '{0}'{1}{2}", cachedFileUrl, OSEnvironment.EolSeq, ex.Message));
279
- }
280
- }
281
- }
282
- endContext = XMLdata.indexOf(XMLConstants.TAG_OPEN, endContext);
283
- if (endContext !== -1)
284
- parser.setCurrIndex(endContext);
285
- }
286
- }
287
- getEnvDet(compIdx) {
288
- let environmentDetails = this._environments.get_Item(compIdx);
289
- if (environmentDetails === null)
290
- Logger.Instance.WriteExceptionToLogWithMsg("in Environment.getEnvDet() there is no env");
291
- return environmentDetails;
292
- }
293
- GetDateMode(compIdx) {
294
- return this.getEnvDet(compIdx).DateMode;
295
- }
296
- GetThousands() {
297
- return this._thousandsSeparator;
298
- }
299
- GetDecimal() {
300
- return this._decimalSeparator;
301
- }
302
- setDecimalSeparator(value) {
303
- this._decimalSeparator = value;
304
- }
305
- setThousandsSeparator(value) {
306
- this._thousandsSeparator = value;
307
- }
308
- setDateSeparator(value) {
309
- this._dateSeparator = value;
310
- }
311
- setTimeSeparator(value) {
312
- this._timeSeparator = value;
313
- }
314
- GetDate() {
315
- return this._dateSeparator;
316
- }
317
- getIdleTime(compIdx) {
318
- return this.getEnvDet(compIdx).IdleTime;
319
- }
320
- getOwner() {
321
- return this._owner;
322
- }
323
- GetTime() {
324
- return this._timeSeparator;
325
- }
326
- GetCentury(compIdx) {
327
- return this.getEnvDet(compIdx).Century;
328
- }
329
- allowUpdateInQueryMode(compIdx) {
330
- return this.getEnvDet(compIdx).allowUpdateInQueryMode();
331
- }
332
- allowCreateInModifyMode(compIdx) {
333
- return this.getEnvDet(compIdx).allowCreateInModifyMode();
334
- }
335
- GetSignificantNumSize() {
336
- return this._significantNumSize;
337
- }
338
- setSignificantNumSize(newSize) {
339
- this._significantNumSize = newSize;
340
- }
341
- getCodePage() {
342
- return this._codePage;
343
- }
344
- GetEncoding() {
345
- let encoding;
346
- try {
347
- encoding = Encoding.GetEncoding(this._codePage);
348
- }
349
- catch (exception) {
350
- encoding = null;
351
- }
352
- return encoding;
353
- }
354
- getSystem() {
355
- return this._system;
356
- }
357
- GetDebugLevel() {
358
- return this._debugMode;
359
- }
360
- CanReplaceDecimalSeparator() {
361
- return !this.IgnoreReplaceDecimalSeparator && this._canReplaceDecimalSeparator;
362
- }
363
- getClientContextInactivityTimeout() {
364
- return this._clientContextInactivityTimeout;
365
- }
366
- getContextInactivityTimeout() {
367
- return this._contextInactivityTimeout;
368
- }
369
- getContextInactivityWarningTime() {
370
- return this._contextInactivityWarningTime;
371
- }
372
- getContextUnloadTimeout() {
373
- return this._contextUnloadTimeout;
374
- }
375
- GetTooltipTimeout() {
376
- return this._toolitipTimeout;
377
- }
378
- getLowHigh() {
379
- return this._lowHigh;
380
- }
381
- GetImeAutoOff() {
382
- return this._imeAutoOff;
383
- }
384
- GetLocalAs400Set() {
385
- return this._localAs400Set;
386
- }
387
- getLocalExtraGengo() {
388
- return this._localExtraGengo;
389
- }
390
- GetLocalFlag(f) {
391
- return this._localFlags !== null && this._localFlags.indexOf(f) >= 0;
392
- }
393
- getSpecialImmediateHandlerEnd() {
394
- return this._specialImmediatehandlerEnd;
395
- }
396
- getSpecialAnsiExpression() {
397
- return this._specialAnsiExpression;
398
- }
399
- getSpecialShowStatusBarPanes() {
400
- return this._specialShowStatusBarPanes;
401
- }
402
- getTerminal() {
403
- return this._terminal;
404
- }
405
- getWebClientReinitSession() {
406
- return this._webclientReinitSession;
407
- }
408
- setWebClientReinitSession(session) {
409
- this._webclientReinitSession = session;
410
- }
411
- getSpecialRouteToRootProgOnContextRecreation() {
412
- return this._specialRouteToRootProgOnContextRecreation;
413
- }
414
- GetGUID() {
415
- return this._guid;
416
- }
417
- getProjDir(compIdx) {
418
- return this.getEnvDet(compIdx).ProjDir;
419
- }
420
- GetSpecialLogInternalExceptions() {
421
- return true;
422
- }
423
- setOwner(val) {
424
- this._owner = val;
425
- }
426
- setDateMode(compIdx, val) {
427
- this.getEnvDet(compIdx).DateMode = val;
428
- }
429
- setCentury(compIdx, val) {
430
- this.getEnvDet(compIdx).Century = val;
431
- }
432
- setIdleTime(compIdx, val) {
433
- this.getEnvDet(compIdx).IdleTime = val;
434
- }
435
- setAllowUpdateInQueryMode(compIdx, val) {
436
- this.getEnvDet(compIdx).UpdateInQueryMode = val;
437
- }
438
- setAllowCreateInModifyMode(compIdx, val) {
439
- this.getEnvDet(compIdx).CreateInModifyMode = val;
440
- }
441
- setContextInactivityTimeout(val) {
442
- this._contextInactivityTimeout = val;
443
- }
444
- setContextInactivityWarningTime(val) {
445
- this._contextInactivityWarningTime = val;
446
- }
447
- setContextUnloadTimeout(val) {
448
- this._contextUnloadTimeout = val;
449
- }
450
- setTerminal(val) {
451
- this._terminal = val;
452
- }
453
- GetDropUserFormats() {
454
- return this._dropUserFormats;
455
- }
456
- GetSpecialValNewPolicy() {
457
- return this._specialValNewPolicy;
458
- }
459
- GetSpecialCancelOnCreate() {
460
- return this._specialCancelOnCreate;
461
- }
462
- }
463
- export class EnvironmentDetails {
464
- _createInModifyMode = false;
465
- _updateInQueryMode = false;
466
- CompIdx = 0;
467
- DateMode = '\0';
468
- Century = 0;
469
- IdleTime = 0;
470
- set UpdateInQueryMode(value) {
471
- this._updateInQueryMode = value;
472
- }
473
- set CreateInModifyMode(value) {
474
- this._createInModifyMode = value;
475
- }
476
- ProjDir = null;
477
- constructor() {
478
- this.CompIdx = 0;
479
- }
480
- allowUpdateInQueryMode() {
481
- return this._updateInQueryMode;
482
- }
483
- allowCreateInModifyMode() {
484
- return this._createInModifyMode;
485
- }
486
- }
487
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2Vudi9FbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQVEsT0FBTyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDL0UsT0FBTyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sYUFBYSxFQUNiLFdBQVcsRUFDWCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBSzdDLE1BQU0sT0FBTyxXQUFXO0lBQ2QsYUFBYSxHQUEwQyxJQUFJLFNBQVMsRUFBOEIsQ0FBQztJQUNuRyx5QkFBeUIsR0FBVyxDQUFDLENBQUM7SUFDdEMsK0JBQStCLEdBQVcsQ0FBQyxDQUFDO0lBQzVDLDZCQUE2QixHQUFXLENBQUMsQ0FBQztJQUMxQyxnQkFBZ0IsR0FBVyxDQUFDLENBQUM7SUFDN0IscUJBQXFCLEdBQVcsQ0FBQyxDQUFDO0lBQ2xDLDJCQUEyQixHQUFZLEtBQUssQ0FBQztJQUM3QyxTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQ3RCLGNBQWMsR0FBVyxJQUFJLENBQUM7SUFDOUIsaUJBQWlCLEdBQVcsSUFBSSxDQUFDO0lBQ2pDLG1CQUFtQixHQUFXLElBQUksQ0FBQztJQUNuQyxjQUFjLEdBQVcsSUFBSSxDQUFD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Q0FBQyxHQUFXO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7SUFNRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQU1ELHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3JDLENBQUM7O0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDckMsa0JBQWtCLEdBQVksS0FBSyxDQUFDO0lBRTVDLE9BQU8sR0FBVyxDQUFDLENBQUM7SUFDcEIsUUFBUSxHQUFXLElBQUksQ0FBQztJQUN4QixPQUFPLEdBQVcsQ0FBQyxDQUFDO0lBQ3BCLFFBQVEsR0FBVyxDQUFDLENBQUM7SUFFckIsSUFBSSxpQkFBaUIsQ0FBQyxLQUFjO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksa0JBQWtCLENBQUMsS0FBYztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxPQUFPLEdBQVcsSUFBSSxDQUFDO0lBS3ZCO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUtELHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBS0QsdUJBQXVCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlzcGxheUNvbnZlcnRvciwgSUVudmlyb25tZW50fSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcbmltcG9ydCB7RGVidWcsIEVuY29kaW5nLCBIYXNodGFibGUsIExpc3QsIE5TdHJpbmd9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtcclxuICBDb25zdGFudHMsXHJcbiAgTG9nZ2VyLFxyXG4gIE9TRW52aXJvbm1lbnQsXHJcbiAgVXRpbERhdGVKcG4sXHJcbiAgVXRpbFN0ckJ5dGVNb2RlLFxyXG4gIFhNTENvbnN0YW50cyxcclxuICBYbWxQYXJzZXJcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXJ9IGZyb20gJy4uL0NvbW1hbmRzUHJvY2Vzc29yTWFuYWdlcic7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gJy4uL0NvbnN0SW50ZXJmYWNlJztcclxuaW1wb3J0IHtTZXJ2ZXJDb25maWd9IGZyb20gJy4uL1NlcnZlckNvbmZpZyc7XHJcbmltcG9ydCB7QWNjZXNzSGVscGVyfSBmcm9tICcuLi9BY2Nlc3NIZWxwZXInO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBUaGlzIGNsYXNzIGhvbGRzIHNvbWUgb2YgdGhlIE1hZ2ljIGVudmlyb25tZW50IHBhcmFtZXRlcnMgd2hpY2ggdGhlIGNsaWVudCBuZWVkc1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnQgaW1wbGVtZW50cyBJRW52aXJvbm1lbnQge1xyXG4gIHByaXZhdGUgX2Vudmlyb25tZW50czogSGFzaHRhYmxlPG51bWJlciwgRW52aXJvbm1lbnREZXRhaWxzPiA9IG5ldyBIYXNodGFibGU8bnVtYmVyLCBFbnZpcm9ubWVudERldGFpbHM+KCk7XHJcbiAgcHJpdmF0ZSBfY29udGV4dEluYWN0aXZpdHlUaW1lb3V0OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2NsaWVudENvbnRleHRJbmFjdGl2aXR5VGltZW91dDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9jb250ZXh0SW5hY3Rpdml0eVdhcm5pbmdUaW1lOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3Rvb2xpdGlwVGltZW91dDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9jb250ZXh0VW5sb2FkVGltZW91dDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9jYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NvZGVQYWdlOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2RhdGVTZXBhcmF0b3I6IHN0cmluZyA9ICdcXDAnOyAvLyBkYXRlIHNlcGFyYXRvclxyXG4gIHByaXZhdGUgX2RlY2ltYWxTZXBhcmF0b3I6IHN0cmluZyA9ICdcXDAnOyAvLyBkZWNpbWFsIHNlcGFyYXRvclxyXG4gIHByaXZhdGUgX3Rob3VzYW5kc1NlcGFyYXRvcjogc3RyaW5nID0gJ1xcMCc7IC8vIHRob3VzYW5kcyBzZXBhcmF0b3JcclxuICBwcml2YXRlIF90aW1lU2VwYXJhdG9yOiBzdHJpbmcgPSAnXFwwJzsgLy8gdGltZSBzZXBhcmF0b3JcclxuXHJcbiAgcHJpdmF0ZSBfZ3VpZDogc3RyaW5nID0gbnVsbDsgLy8gZ3VpZCBvZiB0aGUgYXBwbGljYXRpb25cclxuICBwcml2YXRlIF9pbWVBdXRvT2ZmOiBib29sZWFuID0gZmFsc2U7IC8vIEpQTjogSU1FIHN1cHBvcnRcclxuICBwcml2YXRlIF9sYW5ndWFnZTogc3RyaW5nID0gJ1xcMCc7XHJcbiAgcHJpdmF0ZSBfbG9jYWxBczQwMFNldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2xvY2FsRXh0cmFHZW5nbzogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9sb2NhbEZsYWdzOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xvd0hpZ2g6IGJvb2xlYW4gPSB0cnVlOyAvLyB3aGF0IGlzIHRoZSBvcmRlciBvZiBieXRlcyBpbiBleHByZXNzaW9ucyAoTE9XX0hJR0ggb3IgSElHSF9MT1cpXHJcbiAgcHJpdmF0ZSBfb3duZXI6IHN0cmluZyA9IG51bGw7IC8vIG93bmVyXHJcbiAgcHJpdmF0ZSBfZGVidWdNb2RlOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3NpZ25pZmljYW50TnVtU2l6ZTogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9zcGVjaWFsQW5zaUV4cHJlc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zcGVjaWFsSW1tZWRpYXRlaGFuZGxlckVuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NwZWNpYWxTaG93U3RhdHVzQmFyUGFuZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zcGVjaWFsUm91dGVUb1Jvb3RQcm9nT25Db250ZXh0UmVjcmVhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgcHJpdmF0ZSBfc3BlY2lhbENhbmNlbE9uQ3JlYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3lzdGVtOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX3Rlcm1pbmFsOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2ZvcndhcmRTbGFzaDogc3RyaW5nID0gQ29uc3RhbnRzLkZvcndhcmRTbGFzaFdlYlVzYWdlOyAvLyByZWZlciB0byBhIGZvcndhcmQgc2xhc2ggYXMgYSByZWxhdGl2ZSB3ZWIgdXJsLlxyXG4gIHByaXZhdGUgX2Ryb3BVc2VyRm9ybWF0czogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfd2ViY2xpZW50UmVpbml0U2Vzc2lvbjogc3RyaW5nID0gXCJOXCI7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbFZhbE5ld1BvbGljeTogYm9vbGVhbiA9IGZhbHNlOyAvLz8/XHJcblxyXG4gIHN0YXRpYyBJbnN0YW5jZTogRW52aXJvbm1lbnQgPSBuZXcgRW52aXJvbm1lbnQoKTtcclxuXHJcbiAgZ2V0IExhbmd1YWdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgSWdub3JlUmVwbGFjZURlY2ltYWxTZXBhcmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIGdldCBTcGVjaWFsUmVzdG9yZU1heGltaXplZEZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5pbnN0cnVjdHMgaG93IHRvIHJlZmVyIGEgZm9yd2FyZCBzbGFzaCAtIGVpdGhlciBhcyBhIHJlbGF0aXZlIHdlYiB1cmwsIG9yIGFzIGEgZmlsZSBpbiB0aGUgZmlsZSBzeXN0ZW0uLjwvc3VtbWFyeT5cclxuICBzZXQgRm9yd2FyZFNsYXNoVXNhZ2UodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZm9yd2FyZFNsYXNoID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgRm9yd2FyZFNsYXNoVXNhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3J3YXJkU2xhc2g7XHJcbiAgfVxyXG5cclxuICBmaWxsRGF0YShwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQ7XHJcbiAgZmlsbERhdGEodG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4pOiB2b2lkO1xyXG4gIGZpbGxEYXRhKHRva2Vuc1ZlY3Rvck9yUGFyc2VyPzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoYXJndW1lbnRzWzBdIGluc3RhbmNlb2YgWG1sUGFyc2VyKSB7XHJcbiAgICAgIHRoaXMuZmlsbERhdGFfMCh0b2tlbnNWZWN0b3JPclBhcnNlcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZmlsbERhdGFfMSh0b2tlbnNWZWN0b3JPclBhcnNlcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTmVlZCBwYXJ0IGlucHV0IFN0cmluZyB0byByZWxldmFudCBmb3IgdGhlIGNsYXNzIGRhdGEuIGVuZCA8ZW52IC4uLj4gdGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZmlsbERhdGFfMChwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX1RFUk0sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBTdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfRU5WKSArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlYubGVuZ3RoKTtcclxuICAgICAgbGV0IHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgICB0aGlzLmZpbGxEYXRhKHRva2Vuc1ZlY3Rvcik7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpO1xyXG4gICAgfSBlbHNlIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIEVudmlyb25tZW50LkZpbGxEYXRhKCkgb3V0IG9mIHN0cmluZyBib3VuZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWFrZSBpbml0aWFsaXphdGlvbiBvZiBwcml2YXRlIGVsZW1lbnRzIGJ5IGZvdW5kIHRva2Vuc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0b2tlbnNWZWN0b3JcIj5mb3VuZCB0b2tlbnMsIHdoaWNoIGNvbnNpc3QgYXR0cmlidXRlL3ZhbHVlIG9mIGV2ZXJ5IGZvdW5kIGVsZW1lbnQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgZmlsbERhdGFfMSh0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPik6IHZvaWQge1xyXG4gICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nO1xyXG4gICAgbGV0IHZhbHVlU3RyOiBzdHJpbmc7XHJcbiAgICBsZXQgaGFzaEtleTogbnVtYmVyO1xyXG4gICAgbGV0IGVudjogRW52aXJvbm1lbnREZXRhaWxzO1xyXG4gICAgZW52ID0gbmV3IEVudmlyb25tZW50RGV0YWlscygpO1xyXG5cclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgYXR0cmlidXRlID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIHZhbHVlU3RyID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG4gICAgICB2YWx1ZVN0ciA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RIT1VTQU5EUzpcclxuICAgICAgICAgIHRoaXMuX3Rob3VzYW5kc1NlcGFyYXRvciA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFQ0lNQUxfU0VQQVJBVE9SOlxyXG4gICAgICAgICAgdGhpcy5fZGVjaW1hbFNlcGFyYXRvciA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1dFQkNMSUVOVF9SRUlOSVRfU0VTU0lPTjpcclxuICAgICAgICAgIHRoaXMuX3dlYmNsaWVudFJlaW5pdFNlc3Npb24gPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFOlxyXG4gICAgICAgICAgdGhpcy5fZGF0ZVNlcGFyYXRvciA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5zZXREYXRlQ2hhcih0aGlzLl9kYXRlU2VwYXJhdG9yLmNoYXJDb2RlQXQoMCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RJTUU6XHJcbiAgICAgICAgICB0aGlzLl90aW1lU2VwYXJhdG9yID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfT1dORVI6XHJcbiAgICAgICAgICB0aGlzLl9vd25lciA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NJR05JRklDQU5UX05VTV9TSVpFOlxyXG4gICAgICAgICAgdGhpcy5fc2lnbmlmaWNhbnROdW1TaXplID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREVCVUdfTU9ERTpcclxuICAgICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BPSU5UX1RSQU5TTEFUSU9OOlxyXG4gICAgICAgICAgdGhpcy5fY2FuUmVwbGFjZURlY2ltYWxTZXBhcmF0b3IgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9FWElUQ1RSTDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MT1dISUdIOlxyXG4gICAgICAgICAgdGhpcy5fbG93SGlnaCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9BQ0NFU1NfVEVTVDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1RFWFRfU0laRV9GQUNUT1JJTkc6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9GTEFUX0VESVRfT05fQ0xBU1NJQ19USEVNRTpcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU5DT0RJTkc6XHJcbiAgICAgICAgICBpZiAodmFsdWVTdHIgIT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvZGVQYWdlID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICAgIFV0aWxTdHJCeXRlTW9kZS5FbmNvZGluZyA9IHRoaXMuR2V0RW5jb2RpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TWVNURU06XHJcbiAgICAgICAgICB0aGlzLl9zeXN0ZW0gPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTVBPTkVOVDpcclxuICAgICAgICAgIGVudi5Db21wSWR4ID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREFURU1PREU6XHJcbiAgICAgICAgICBlbnYuRGF0ZU1vZGUgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DRU5UVVJZOlxyXG4gICAgICAgICAgZW52LkNlbnR1cnkgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JRExFVElNRTpcclxuICAgICAgICAgIGVudi5JZGxlVGltZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgLy8gaGFuZGxlIHRoZSBkZWZhdWx0IGlkbGUgdGltZSB2YWx1ZVxyXG4gICAgICAgICAgaWYgKGVudi5JZGxlVGltZSA9PT0gMClcclxuICAgICAgICAgICAgZW52LklkbGVUaW1lID0gMTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VUERfSU5fUVVFUlk6XHJcbiAgICAgICAgICBlbnYuVXBkYXRlSW5RdWVyeU1vZGUgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ1JFX0lOX01PRElGWTpcclxuICAgICAgICAgIGVudi5DcmVhdGVJbk1vZGlmeU1vZGUgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREVGQVVMVF9DT0xPUjpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERUZBVUxUX0ZPQ1VTX0NPTE9SOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRFWFRfSU5BQ1RJVklUWV9USU1FT1VUOlxyXG4gICAgICAgICAgdGhpcy5fY29udGV4dEluYWN0aXZpdHlUaW1lb3V0ID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0xJRU5UX0NPTlRFWFRfSU5BQ1RJVklUWV9USU1FT1VUOlxyXG4gICAgICAgICAgdGhpcy5fY2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0ID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9JTkFDVElWSVRZX1dBUk5JTkdfVElNRTpcclxuICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWUgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9UT09MVElQX1RJTUVPVVQ6XHJcbiAgICAgICAgICB0aGlzLl90b29saXRpcFRpbWVvdXQgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX1VOTE9BRF9USU1FT1VUOlxyXG4gICAgICAgICAgdGhpcy5fY29udGV4dFVubG9hZFRpbWVvdXQgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JTUVfQVVUT19PRkY6XHJcbiAgICAgICAgICB0aGlzLl9pbWVBdXRvT2ZmID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xPQ0FMX0FTNDAwU0VUOlxyXG4gICAgICAgICAgdGhpcy5fbG9jYWxBczQwMFNldCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MT0NBTF9FWFRSQV9HRU5HTzpcclxuICAgICAgICAgIHRoaXMuX2xvY2FsRXh0cmFHZW5nbyA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5hZGRFeHRyYUdlbmdvKHRoaXMuX2xvY2FsRXh0cmFHZW5nbyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTE9DQUxfRkxBR1M6XHJcbiAgICAgICAgICB0aGlzLl9sb2NhbEZsYWdzID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9JTU1FRElBVEVfSEFORExFUl9FTkQ6XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsSW1tZWRpYXRlaGFuZGxlckVuZCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVBQ0lBTF9BTlNJX0VYUDpcclxuICAgICAgICAgIHRoaXMuX3NwZWNpYWxBbnNpRXhwcmVzc2lvbiA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1NIT1dfU1RBVFVTQkFSX1BBTkVTOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbFNob3dTdGF0dXNCYXJQYW5lcyA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1JPVVRFX1RPX1JPT1RfUFJPR19PTl9DT05URVhUX1JFQ1JFQVRJT046XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsUm91dGVUb1Jvb3RQcm9nT25Db250ZXh0UmVjcmVhdGlvbiA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1NQRUNJQUxfRURJVF9MRUZUX0FMSUdOOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUFDSUFMX1NXRl9DT05UUk9MX05BTUU6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTEFOR1VBR0U6XHJcbiAgICAgICAgICB0aGlzLl9sYW5ndWFnZSA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1VTRVJJRDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1VTRVJOQU1FOlxyXG4gICAgICAgICAgU2VydmVyQ29uZmlnLkluc3RhbmNlLnNldFVzZXJuYW1lKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9URVJNSU5BTDpcclxuICAgICAgICAgIHRoaXMuX3Rlcm1pbmFsID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVNFUklORk86XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfR1VJRDpcclxuICAgICAgICAgIHRoaXMuX2d1aWQgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05UUk9MU19QRVJTSVNURU5DWV9QQVRIOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BST0pESVI6XHJcbiAgICAgICAgICBlbnYuUHJvakRpciA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RST1BfVVNFUkZPUk1BVFM6XHJcbiAgICAgICAgICB0aGlzLl9kcm9wVXNlckZvcm1hdHMgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1ZBTF9ORVdfUE9MSUNZOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbFZhbE5ld1BvbGljeSA9ICBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9DQU5DRUxfT05fQ1JFQVRFOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbENhbmNlbE9uQ3JlYXRlID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfTEVHQUNZX1RSSU1fUkFOR0U6XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfTEVHQUNZX0VNUFRZX1JBTkdFOlxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERUZBVUxUX0RJU0FCTEVEX0NPTE9SOlxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0FOU0lfQkxPQl9DSEVDS19OVUxMOlxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1RBQkxFX1JFRFVDRV9USVRMRV9IRUlHSFQ6XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfRE9UTkVUX0FMTE9XX1pFUk9fREFURTpcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9SRVVTRV9UQUJMRV9FRElUT1I6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gRW52aXJvbm1lbnQuZmlsbERhdGEoKTogdW5rbm93biBhdHRyaWJ1dGU6IFwiICsgYXR0cmlidXRlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBoYXNoS2V5ID0gZW52LkNvbXBJZHg7XHJcbiAgICB0aGlzLl9lbnZpcm9ubWVudHMuc2V0X0l0ZW0oaGFzaEtleSwgZW52KTtcclxuXHJcblxyXG4gICAgLy8gVE9ETzogc29tZWhvdyBhZGRBc3luYyB0aHJvd3Mgc29tZSBleGNlcHRpb24gZm9yIFNFVF9FTlZfVE9PTFRJUF9USU1FT1VULiBFdmFsdWF0ZSBhbmQgZml4IGl0LCBpZiBwb3NzaWJsZVxyXG4gICAgLy8gaWYgKHRoaXMuX3Rvb2xpdGlwVGltZW91dCA+IDApXHJcbiAgICAvLyAgIENvbW1hbmRzLmFkZEFzeW5jKENvbW1hbmRUeXBlLlNFVF9FTlZfVE9PTFRJUF9USU1FT1VULCA8T2JqZWN0Pm51bGwsIDxPYmplY3Q+dGhpcy5fdG9vbGl0aXBUaW1lb3V0KTtcclxuXHJcblxyXG5cclxuICAgIC8vIGlmICh0aGlzLl9sYW5ndWFnZSAhPT0gJyAnKVxyXG4gICAgLy8gICBDb21tYW5kcy5hZGRBc3luYyhDb21tYW5kVHlwZS5TRVRfRU5WX0xBTUdVQUdFLCBudWxsLCAwLCB0aGlzLl9sYW5ndWFnZS5jaGFyQ29kZUF0KDApKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmaWxsIHRoZSBmaWxlIG1hcHBpbmcgd2hlbiBwYXNzZWQgdGhyb3VnaCB0aGUgY2FjaGU6IHBsYWNlZCBpbnRvIHRoZSBjYWNoZSBieSB0aGUgcnVudGltZS1lbmdpbmUsIHBhc3NlZFxyXG4gIC8vLyAgIGFzICc8ZmlsZXVybCB2YWwgPSBcIi8uLi5cIidcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiVEFHX1VSTFwiPjwvcGFyYW0+XHJcbiAgYXN5bmMgZmlsbEZyb21VcmwodGFnTmFtZTogc3RyaW5nLCBwYXJzZXI6IFhtbFBhcnNlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IFhNTGRhdGE6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxkYXRhKCk7XHJcblxyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX1RFUk0sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IFhNTGRhdGEubGVuZ3RoKSB7XHJcblxyXG4gICAgICAvLyBmaW5kIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnQW5kQXR0cmlidXRlczogc3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnQW5kQXR0cmlidXRlcy5pbmRleE9mKHRhZ05hbWUpICsgdGFnTmFtZS5sZW5ndGgpO1xyXG5cclxuICAgICAgbGV0IHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgICBEZWJ1Zy5Bc3NlcnQodG9rZW5zVmVjdG9yLmdldF9JdGVtKDApID09PSBYTUxDb25zdGFudHMuTUdfQVRUUl9WQUxVRSk7XHJcblxyXG4gICAgICBsZXQgY2FjaGVkRmlsZVVybDogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbSgxKSk7XHJcbiAgICAgIGlmIChjYWNoZWRGaWxlVXJsLnRyaW0oKSA9PT0gXCJcIilcclxuICAgICAgLy8gbWlnaHQgaGFwcGVuIGluIGNhc2UgdGhlIHhwYSBzZXJ2ZXIgZmFpbGVkIHRvIHdyaXRlIHRvIGl0cyBjYWNoZSBmb2xkZXJcclxuICAgICAgLy8gKGUuZy4gdGhlIGNhY2hlIGZvbGRlciBpcyBpbnZhbGlkLCBkdWUgdG8gYSBjb25maWd1cmF0aW9uIG1pc3Rha2UsXHJcbiAgICAgIC8vIGluIHdoaWNoIGNhc2UgdGhlIGN1cnJlbnQgZXJyb3IgbWVzc2FnZSB3aWxsIGJlIG1hdGNoZWQgd2l0aCBhbiBlcnJvciBpbiB0aGUgeHBhIHNlcnZlcidzIGxvZyBmaWxlIChHZW5lcmFsRXJyb3JMb2c9KSkuXHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXJyb3JUb0xvZyhOU3RyaW5nLkZvcm1hdChcIkVtcHR5IGNhY2hlZCBmaWxlIFVSTDogJ3swfSdcIiwgdGFnQW5kQXR0cmlidXRlcy50cmltKCkpKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IENvbnRlbnQ6IHN0cmluZyA9IGF3YWl0IENvbW1hbmRzUHJvY2Vzc29yTWFuYWdlci5HZXRDb250ZW50KGNhY2hlZEZpbGVVcmwsIHRydWUpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfS0JETUFQX1VSTDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRU5WX1BBUkFNX1VSTDpcclxuICAgICAgICAgICAgICBsZXQgaW5uZXJYbWxQYXJzZXI6IFhtbFBhcnNlciA9IG5ldyBYbWxQYXJzZXIoQ29udGVudCk7XHJcbiAgICAgICAgICAgICAgd2hpbGUgKEFjY2Vzc0hlbHBlci5lbnZQYXJhbXNUYWJsZS5taXJyb3JGcm9tWE1MKGlubmVyWG1sUGFyc2VyLmdldE5leHRUYWcoKSwgaW5uZXJYbWxQYXJzZXIpKSB7XHJcblxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfS0JETUFQX1VSTDpcclxuICAgICAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coTlN0cmluZy5Gb3JtYXQoXCJLZXlib2FyZCBNYXBwaW5nOiAnezB9J3sxfXsyfVwiLCBjYWNoZWRGaWxlVXJsLCBPU0Vudmlyb25tZW50LkVvbFNlcSwgZXguTWVzc2FnZSkpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlZfUEFSQU1fVVJMOlxyXG4gICAgICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhOU3RyaW5nLkZvcm1hdChcIkVudiBQYXJhbXMgVGFibGU6ICd7MH0nezF9ezJ9XCIsIGNhY2hlZEZpbGVVcmwsIE9TRW52aXJvbm1lbnQuRW9sU2VxLCBleC5NZXNzYWdlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICBlbmRDb250ZXh0ID0gWE1MZGF0YS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfT1BFTiwgZW5kQ29udGV4dCk7XHJcbiAgICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSlcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBFbnZpcm9ubWVudERldGFpbHMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBjb21wSWR4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj5vZiB0aGUgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgRW52aXJvbm1lbnREZXRhaWxzPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0RW52RGV0KGNvbXBJZHg6IG51bWJlcik6IEVudmlyb25tZW50RGV0YWlscyB7XHJcbiAgICBsZXQgZW52aXJvbm1lbnREZXRhaWxzOiBFbnZpcm9ubWVudERldGFpbHMgPSA8RW52aXJvbm1lbnREZXRhaWxzPnRoaXMuX2Vudmlyb25tZW50cy5nZXRfSXRlbShjb21wSWR4KTtcclxuXHJcbiAgICBpZiAoZW52aXJvbm1lbnREZXRhaWxzID09PSBudWxsKVxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBFbnZpcm9ubWVudC5nZXRFbnZEZXQoKSB0aGVyZSBpcyBubyBlbnZcIik7XHJcbiAgICByZXR1cm4gZW52aXJvbm1lbnREZXRhaWxzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgZGF0ZSBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj5vZiB0aGUgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBEYXRlTW9kZTwvcmV0dXJucz5cclxuICBHZXREYXRlTW9kZShjb21wSWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLkRhdGVNb2RlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgVGhvdXNhbmRzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IFRob3VzYW5kczwvcmV0dXJucz5cclxuICBHZXRUaG91c2FuZHMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90aG91c2FuZHNTZXBhcmF0b3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBEZWNpbWFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IERlY2ltYWw8L3JldHVybnM+XHJcbiAgR2V0RGVjaW1hbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlY2ltYWxTZXBhcmF0b3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyB0aGUgRGVjaW1hbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0RGVjaW1hbFNlcGFyYXRvcih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZWNpbWFsU2VwYXJhdG9yID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyB0aGUgRGVjaW1hbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0VGhvdXNhbmRzU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Rob3VzYW5kc1NlcGFyYXRvciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0ZVNlcGFyYXRvcih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kYXRlU2VwYXJhdG9yID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXRUaW1lU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RpbWVTZXBhcmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIERhdGUgU2VwYXJhdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IERhdGUgU2VwYXJhdG9yPC9yZXR1cm5zPlxyXG4gIEdldERhdGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlU2VwYXJhdG9yO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgSWRsZVRpbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPm9mIHRoZSB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IElkbGVUaW1lPC9yZXR1cm5zPlxyXG4gIGdldElkbGVUaW1lKGNvbXBJZHg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuSWRsZVRpbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBvd25lclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBvd25lcjwvcmV0dXJucz5cclxuICBnZXRPd25lcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX293bmVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgdGltZSBzZXBhcmF0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGltZSBzZXBlcmF0b3I8L3JldHVybnM+XHJcbiAgR2V0VGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVTZXBhcmF0b3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBjZW50dXJ5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj5vZiB0aGUgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPmNlbnR1cnk8L3JldHVybnM+XHJcbiAgR2V0Q2VudHVyeShjb21wSWR4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLkNlbnR1cnk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIFRSVUUgaWYgdXBkYXRlIGlzIGFsbG93ZWQgaW4gcXVlcnkgbW9kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21wSWR4XCI+b2YgdGhlIHRhc2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gVXBkYXRlSW5RdWVyeU1vZGU8L3JldHVybnM+XHJcbiAgYWxsb3dVcGRhdGVJblF1ZXJ5TW9kZShjb21wSWR4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldEVudkRldChjb21wSWR4KS5hbGxvd1VwZGF0ZUluUXVlcnlNb2RlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIFRSVUUgaWYgY3JlYXRlIGlzIGFsbG93ZWQgaW4gbW9kaWZ5IG1vZGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPm9mIHRoZSB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGFsbG93Q3JlYXRlSW5Nb2RpZnlNb2RlPC9yZXR1cm5zPlxyXG4gIGFsbG93Q3JlYXRlSW5Nb2RpZnlNb2RlKGNvbXBJZHg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLmFsbG93Q3JlYXRlSW5Nb2RpZnlNb2RlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBzaWduaWZpY2FudCBudW0gc2l6ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc2lnbmlmaWNhbnQgbnVtIHNpemU8L3JldHVybnM+XHJcbiAgR2V0U2lnbmlmaWNhbnROdW1TaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2lnbmlmaWNhbnROdW1TaXplO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgc2lnbmlmaWNhbnQgbnVtIHNpemVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc2V0U2lnbmlmaWNhbnROdW1TaXplKG5ld1NpemU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fc2lnbmlmaWNhbnROdW1TaXplID0gbmV3U2l6ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIGNvZGUgcGFnZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgY29kZSBwYWdlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBnZXRDb2RlUGFnZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvZGVQYWdlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBjaGFyc2V0IG9mIHRoZSBjdXJyZW50IGRvY3VtZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRFbmNvZGluZygpOiBFbmNvZGluZyB7XHJcbiAgICBsZXQgZW5jb2Rpbmc6IEVuY29kaW5nO1xyXG4gICAgdHJ5IHtcclxuICAgICAgZW5jb2RpbmcgPSBFbmNvZGluZy5HZXRFbmNvZGluZyh0aGlzLl9jb2RlUGFnZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXhjZXB0aW9uKSB7XHJcbiAgICAgIGVuY29kaW5nID0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBlbmNvZGluZztcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBzeXN0ZW0gbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3lzdGVtIG5hbWVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldFN5c3RlbSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N5c3RlbTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBkZWJ1ZyBsZXZlbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiAwIG5vIGRlYnVnIDEgZGVidWcgMiBkZWJ1ZyBhbmQgZGF0YSB0cmFuc2ZlcnMgaW4gaGV4ICggbm90IGluIGJhc2U2NClcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIEdldERlYnVnTGV2ZWwoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWJ1Z01vZGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBpZiAnLicgc2hvdWxkIGJlIGNoYW5nZWQgdG8gdGhlIGRlY2ltYWwgc2VwYXJhdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBDYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5JZ25vcmVSZXBsYWNlRGVjaW1hbFNlcGFyYXRvciAmJiB0aGlzLl9jYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIENsaWVudENvbnRleHRJbmFjdGl2aXR5VGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgQ2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0PC9yZXR1cm5zPlxyXG4gIGdldENsaWVudENvbnRleHRJbmFjdGl2aXR5VGltZW91dCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudENvbnRleHRJbmFjdGl2aXR5VGltZW91dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIENvbnRleHRJbmFjdGl2aXR5VGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgQ29udGV4dEluYWN0aXZpdHlUaW1lb3V0PC9yZXR1cm5zPlxyXG4gIGdldENvbnRleHRJbmFjdGl2aXR5VGltZW91dCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHRJbmFjdGl2aXR5VGltZW91dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIENvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWVvdXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIENvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWVvdXQ8L3JldHVybnM+XHJcbiAgZ2V0Q29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBDb250ZXh0VW5sb2FkVGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Q29udGV4dFVubG9hZFRpbWVvdXQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jb250ZXh0VW5sb2FkVGltZW91dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHRvb2x0aXAgdGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgdG9vbHRpcFRpbWVvdXQ8L3JldHVybnM+XHJcbiAgR2V0VG9vbHRpcFRpbWVvdXQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90b29saXRpcFRpbWVvdXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBUUlVFIGlmIHRoZSBieXRlcyBzZXF1ZW5jZSBmb3IgbnVtYmVycyBpbiBleHByZXNzaW9ucyBpcyBmcm9tIGxvdyB0byBoaWdoXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRMb3dIaWdoKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvd0hpZ2g7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0cnVlIGlmIElNRUF1dG9PZmYgPSBZXHJcbiAgLy8vICAgKEpQTjogSU1FIHN1cHBvcnQpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRJbWVBdXRvT2ZmKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ltZUF1dG9PZmY7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgQXM0MDBTZXQgZmxhZyA9IFlcclxuICAvLy8gICAoREJDUyBTdXBwb3J0KVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgR2V0TG9jYWxBczQwMFNldCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9sb2NhbEFzNDAwU2V0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkZ1bmN0aW9uIHJldHVybmluZyBhZGRpdGlvbmFsIEdlbmdvIHZhbHVlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TG9jYWxFeHRyYUdlbmdvKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxFeHRyYUdlbmdvO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgZmxhZyBmIGlzIGluIHRoZSBsb2NhbCBmbGFncy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEdldExvY2FsRmxhZyhmOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9sb2NhbEZsYWdzICE9PSBudWxsICYmIHRoaXMuX2xvY2FsRmxhZ3MuaW5kZXhPZihmKSA+PSAwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIFNwZWNpYWxJbW1lZGlhdGVIYW5kbGVyRW5kIGZsYWcgPSBZPC9yZXR1cm5zPlxyXG4gIGdldFNwZWNpYWxJbW1lZGlhdGVIYW5kbGVyRW5kKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxJbW1lZGlhdGVoYW5kbGVyRW5kO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIFNwZWNpYWxBbnNpRXhwcmVzc2lvbiBmbGFnID0gWTwvcmV0dXJucz5cclxuICBnZXRTcGVjaWFsQW5zaUV4cHJlc3Npb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2lhbEFuc2lFeHByZXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3BlY2lhbFNob3dTdGF0dXNCYXJQYW5lcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsU2hvd1N0YXR1c0JhclBhbmVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZ1bmN0aW9uIHJldHVybnMgdGhlIHRlcm1pbmFsIG51bWJlci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz50ZXJtaW5hbCBudW1iZXIuPC9yZXR1cm5zPlxyXG4gIGdldFRlcm1pbmFsKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVybWluYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnVuY3Rpb24gcmV0dXJucyB3ZWIgY2xpZW50IHJlLWluaXQgc2Vzc2lvbi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz50ZXJtaW5hbCBudW1iZXIuPC9yZXR1cm5zPlxyXG4gIGdldFdlYkNsaWVudFJlaW5pdFNlc3Npb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl93ZWJjbGllbnRSZWluaXRTZXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0V2ViQ2xpZW50UmVpbml0U2Vzc2lvbiggc2Vzc2lvbiA6IHN0cmluZykge1xyXG4gICAgIHRoaXMuX3dlYmNsaWVudFJlaW5pdFNlc3Npb24gPSBzZXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZ1bmN0aW9uIHJldHVybnMgd2ViIGNsaWVudCByZS1pbml0IHNlc3Npb24uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dGVybWluYWwgbnVtYmVyLjwvcmV0dXJucz5cclxuICBnZXRTcGVjaWFsUm91dGVUb1Jvb3RQcm9nT25Db250ZXh0UmVjcmVhdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsUm91dGVUb1Jvb3RQcm9nT25Db250ZXh0UmVjcmVhdGlvbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXRzIGd1aSBJZCBvZiB0aGUgYXBwbGljYXRpb248L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRHVUlEKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ3VpZDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBwcm9qZWN0J3MgZGlyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb21wSWR4XCI+Y29tcG9uZW50IGluZGV4LjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRQcm9qRGlyKGNvbXBJZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuUHJvakRpcjtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybnMgdmFsdWUgb2YgU3BlY2lhbExvZ0ludGVybmFsRXhjZXB0aW9ucy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0U3BlY2lhbExvZ0ludGVybmFsRXhjZXB0aW9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldCB0aGUgb3duZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRPd25lcih2YWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fb3duZXIgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0IHRoZSBkYXRlIG1vZGUgaW4gdGhlIGNvbXBvbmVudCdzIGVudmlyb25tZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXREYXRlTW9kZShjb21wSWR4OiBudW1iZXIsIHZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEVudkRldChjb21wSWR4KS5EYXRlTW9kZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgdGhlIGNlbnR1cnkgaW4gdGhlIGNvbXBvbmVudCdzIGVudmlyb25tZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRDZW50dXJ5KGNvbXBJZHg6IG51bWJlciwgdmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLkNlbnR1cnkgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0IHRoZSBpZGxlIHRpbWUgaW4gdGhlIGNvbXBvbmVudCdzIGVudmlyb25tZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRJZGxlVGltZShjb21wSWR4OiBudW1iZXIsIHZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEVudkRldChjb21wSWR4KS5JZGxlVGltZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgdGhlIGFsbG93LXVwZGF0ZS1pbi1xdXJ5LW1vZGUgZmxhZyBpbiB0aGUgY29tcG9uZW50J3MgZW52aXJvbm1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHNldEFsbG93VXBkYXRlSW5RdWVyeU1vZGUoY29tcElkeDogbnVtYmVyLCB2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLlVwZGF0ZUluUXVlcnlNb2RlID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldCB0aGUgYWxsb3ctY3JlYXRlLWluLW1vZGlmeS1tb2RlIGZsYWcgaW4gdGhlIGNvbXBvbmVudCdzIGVudmlyb25tZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRBbGxvd0NyZWF0ZUluTW9kaWZ5TW9kZShjb21wSWR4OiBudW1iZXIsIHZhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuQ3JlYXRlSW5Nb2RpZnlNb2RlID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgY29udGV4dCB0aW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0KHZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQgPSB2YWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgY29udGV4dCBpbmFjdGl2aXR5IHdhcm5pbmcgdGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHNldENvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWUodmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWUgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBjb250ZXh0IHVubG9hZCB0aW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0Q29udGV4dFVubG9hZFRpbWVvdXQodmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbnRleHRVbmxvYWRUaW1lb3V0ID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgdGVybWluYWwgbnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0VGVybWluYWwodmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Rlcm1pbmFsID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgR2V0IHRoZSBVc2VyRm9ybWF0cyBmb3IgRHJhZyAmIERyb3AgT3BlcmF0aW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXREcm9wVXNlckZvcm1hdHMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kcm9wVXNlckZvcm1hdHM7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIF9zcGVjaWFsVmFsTmV3UG9saWN5IGZsYWcgPSBZPC9yZXR1cm5zPlxyXG4gIEdldFNwZWNpYWxWYWxOZXdQb2xpY3koKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2lhbFZhbE5ld1BvbGljeTtcclxuICB9XHJcblxyXG4gIEdldFNwZWNpYWxDYW5jZWxPbkNyZWF0ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsQ2FuY2VsT25DcmVhdGU7XHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFRoaXMgY2xhc3MgaG9sZHMgZGV0YWlscyBmb3Igc2luZ2xlIEVudmlyb25tZW50IChwZXIgQ29tcG9uZW50KVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnREZXRhaWxzIHtcclxuICBwcml2YXRlIF9jcmVhdGVJbk1vZGlmeU1vZGU6IGJvb2xlYW4gPSBmYWxzZTsgLy8gYWxsb3cgY3JlYXRlIGluIG1vZGlmeSBtb2RlID9cclxuICBwcml2YXRlIF91cGRhdGVJblF1ZXJ5TW9kZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBhbGxvdyB1cGRhdGUgaW4gcXVlcnkgbW9kZSA/XHJcblxyXG4gIENvbXBJZHg6IG51bWJlciA9IDA7XHJcbiAgRGF0ZU1vZGU6IHN0cmluZyA9ICdcXDAnO1xyXG4gIENlbnR1cnk6IG51bWJlciA9IDA7XHJcbiAgSWRsZVRpbWU6IG51bWJlciA9IDA7XHJcblxyXG4gIHNldCBVcGRhdGVJblF1ZXJ5TW9kZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fdXBkYXRlSW5RdWVyeU1vZGUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCBDcmVhdGVJbk1vZGlmeU1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2NyZWF0ZUluTW9kaWZ5TW9kZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgUHJvakRpcjogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbnN0cnVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuQ29tcElkeCA9IDA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIFRSVUUgaWYgdXBkYXRlIGlzIGFsbG93ZWQgaW4gcXVlcnkgbW9kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYWxsb3dVcGRhdGVJblF1ZXJ5TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl91cGRhdGVJblF1ZXJ5TW9kZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gVFJVRSBpZiB1cGRhdGUgaXMgYWxsb3dlZCBpbiBxdWVyeSBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhbGxvd0NyZWF0ZUluTW9kaWZ5TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVJbk1vZGlmeU1vZGU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUxhbmd1YWdlRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZW52L0lMYW5ndWFnZURhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSUxhbmd1YWdlRGF0YSB7XHJcbiAgZ2V0Q29uc3RNZXNzYWdlKG1zZ0lkOiBzdHJpbmcpOiBzdHJpbmc7XHJcbn1cclxuIl19