@wavemaker/app-ng-runtime 12.0.0-next.45191 → 12.0.0-next.45196

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 (97) hide show
  1. app-ng-runtime/build-task/bundles/index.umd.js +7 -7
  2. app-ng-runtime/build-task/esm2022/containers/accordion/accordion-pane/accordion-pane.build.mjs +2 -2
  3. app-ng-runtime/build-task/esm2022/containers/accordion/accordion.build.mjs +3 -3
  4. app-ng-runtime/build-task/esm2022/containers/wizard/wizard.build.mjs +2 -2
  5. app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +3 -3
  6. app-ng-runtime/build-task/esm2022/input/chips/chips.build.mjs +2 -2
  7. app-ng-runtime/build-task/esm2022/input/file-upload/file-upload.build.mjs +2 -2
  8. app-ng-runtime/build-task/fesm2022/index.mjs +7 -7
  9. app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
  10. app-ng-runtime/components/base/bundles/index.umd.js +0 -5
  11. app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +1 -6
  12. app-ng-runtime/components/base/fesm2022/index.mjs +0 -5
  13. app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
  14. app-ng-runtime/components/basic/default/audio/audio.component.d.ts +2 -0
  15. app-ng-runtime/components/basic/default/bundles/index.umd.js +18 -7
  16. app-ng-runtime/components/basic/default/esm2022/audio/audio.component.mjs +13 -5
  17. app-ng-runtime/components/basic/default/esm2022/video/video.component.mjs +7 -4
  18. app-ng-runtime/components/basic/default/fesm2022/index.mjs +18 -7
  19. app-ng-runtime/components/basic/default/fesm2022/index.mjs.map +1 -1
  20. app-ng-runtime/components/basic/default/video/video.component.d.ts +1 -0
  21. app-ng-runtime/components/basic/progress/bundles/index.umd.js +7 -3
  22. app-ng-runtime/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +8 -4
  23. app-ng-runtime/components/basic/progress/fesm2022/index.mjs +7 -3
  24. app-ng-runtime/components/basic/progress/fesm2022/index.mjs.map +1 -1
  25. app-ng-runtime/components/basic/progress/progress-bar/progress-bar.component.d.ts +1 -0
  26. app-ng-runtime/components/basic/search/bundles/index.umd.js +7 -2
  27. app-ng-runtime/components/basic/search/esm2022/search.component.mjs +8 -3
  28. app-ng-runtime/components/basic/search/fesm2022/index.mjs +7 -2
  29. app-ng-runtime/components/basic/search/fesm2022/index.mjs.map +1 -1
  30. app-ng-runtime/components/basic/search/search.component.d.ts +3 -2
  31. app-ng-runtime/components/chart/bundles/index.umd.js +2 -1
  32. app-ng-runtime/components/chart/esm2022/chart.utils.mjs +3 -2
  33. app-ng-runtime/components/chart/fesm2022/index.mjs +2 -1
  34. app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
  35. app-ng-runtime/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +1 -0
  36. app-ng-runtime/components/containers/accordion/bundles/index.umd.js +15 -9
  37. app-ng-runtime/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +13 -10
  38. app-ng-runtime/components/containers/accordion/esm2022/accordion.directive.mjs +4 -1
  39. app-ng-runtime/components/containers/accordion/fesm2022/index.mjs +15 -9
  40. app-ng-runtime/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  41. app-ng-runtime/components/containers/wizard/bundles/index.umd.js +6 -6
  42. app-ng-runtime/components/containers/wizard/esm2022/wizard.component.mjs +7 -7
  43. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs +6 -6
  44. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  45. app-ng-runtime/components/data/list/bundles/index.umd.js +20 -12
  46. app-ng-runtime/components/data/list/esm2022/list-item.directive.mjs +10 -1
  47. app-ng-runtime/components/data/list/esm2022/list.component.mjs +13 -13
  48. app-ng-runtime/components/data/list/fesm2022/index.mjs +21 -13
  49. app-ng-runtime/components/data/list/fesm2022/index.mjs.map +1 -1
  50. app-ng-runtime/components/input/chips/bundles/index.umd.js +24 -7
  51. app-ng-runtime/components/input/chips/esm2022/chips.component.mjs +25 -8
  52. app-ng-runtime/components/input/chips/fesm2022/index.mjs +24 -7
  53. app-ng-runtime/components/input/chips/fesm2022/index.mjs.map +1 -1
  54. app-ng-runtime/components/input/default/bundles/index.umd.js +21 -5
  55. app-ng-runtime/components/input/default/esm2022/base-form.component.mjs +3 -3
  56. app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +20 -4
  57. app-ng-runtime/components/input/default/fesm2022/index.mjs +21 -5
  58. app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
  59. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +3 -1
  60. app-ng-runtime/components/input/epoch/bundles/index.umd.js +22 -14
  61. app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +13 -6
  62. app-ng-runtime/components/input/epoch/esm2022/date/date.component.mjs +4 -4
  63. app-ng-runtime/components/input/epoch/esm2022/date/date.props.mjs +2 -1
  64. app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +4 -4
  65. app-ng-runtime/components/input/epoch/fesm2022/index.mjs +19 -11
  66. app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
  67. app-ng-runtime/components/input/file-upload/bundles/index.umd.js +80 -64
  68. app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +80 -65
  69. app-ng-runtime/components/input/file-upload/esm2022/file-upload.props.mjs +3 -2
  70. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +81 -65
  71. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  72. app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +7 -2
  73. app-ng-runtime/components/input/rating/bundles/index.umd.js +2 -2
  74. app-ng-runtime/components/input/rating/esm2022/rating.component.mjs +3 -3
  75. app-ng-runtime/components/input/rating/fesm2022/index.mjs +2 -2
  76. app-ng-runtime/components/input/rating/fesm2022/index.mjs.map +1 -1
  77. app-ng-runtime/components/navigation/breadcrumb/bundles/index.umd.js +6 -6
  78. app-ng-runtime/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +7 -7
  79. app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs +6 -6
  80. app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  81. app-ng-runtime/components/page/left-panel/bundles/index.umd.js +10 -3
  82. app-ng-runtime/components/page/left-panel/esm2022/left-panel.directive.mjs +11 -4
  83. app-ng-runtime/components/page/left-panel/fesm2022/index.mjs +10 -3
  84. app-ng-runtime/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  85. app-ng-runtime/components/page/left-panel/left-panel.directive.d.ts +2 -2
  86. app-ng-runtime/components/page/right-panel/bundles/index.umd.js +2 -2
  87. app-ng-runtime/components/page/right-panel/esm2022/right-panel.directive.mjs +3 -3
  88. app-ng-runtime/components/page/right-panel/fesm2022/index.mjs +2 -2
  89. app-ng-runtime/components/page/right-panel/fesm2022/index.mjs.map +1 -1
  90. app-ng-runtime/components/page/right-panel/right-panel.directive.d.ts +1 -1
  91. app-ng-runtime/package.json +1 -1
  92. app-ng-runtime/scripts/datatable/datatable.js +9 -5
  93. app-ng-runtime/variables/bundles/index.umd.js +34 -16
  94. app-ng-runtime/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +35 -17
  95. app-ng-runtime/variables/fesm2022/index.mjs +34 -16
  96. app-ng-runtime/variables/fesm2022/index.mjs.map +1 -1
  97. app-ng-runtime/variables/manager/variable/web-socket-variable.manager.d.ts +0 -4
@@ -53,9 +53,10 @@ export class WebSocketVariableManager extends BaseVariableManager {
53
53
  */
54
54
  getURL(variable) {
55
55
  const prefabName = variable.getPrefabName();
56
- const opInfo = prefabName ? get(metadataService.getByOperationId(variable.operationId, prefabName), 'wmServiceOperationInfo') : get(metadataService.getByOperationId(variable.operationId), 'wmServiceOperationInfo');
56
+ const opInfo = prefabName ?
57
+ get(metadataService.getByOperationId(variable.operationId, prefabName), 'wmServiceOperationInfo') :
58
+ get(metadataService.getByOperationId(variable.operationId), 'wmServiceOperationInfo');
57
59
  const inputFields = variable.dataBinding;
58
- let config;
59
60
  // add sample values to the params (url and path)
60
61
  forEach(opInfo.parameters, function (param) {
61
62
  param.sampleValue = inputFields[param.name];
@@ -65,7 +66,7 @@ export class WebSocketVariableManager extends BaseVariableManager {
65
66
  skipCloakHeaders: true
66
67
  });
67
68
  // call common method to prepare config for the service operation info.
68
- config = ServiceVariableUtils.constructRequestParams(variable, opInfo, inputFields);
69
+ const config = ServiceVariableUtils.constructRequestParams(variable, opInfo, inputFields);
69
70
  /* if error found, return */
70
71
  if (config.error && config.error.message) {
71
72
  this._onSocketError(variable, { data: config.error.message });
@@ -83,10 +84,10 @@ export class WebSocketVariableManager extends BaseVariableManager {
83
84
  * @private
84
85
  */
85
86
  _onSocketMessage(variable, evt) {
86
- let data = get(evt, 'data'), value, dataLength, dataLimit, shouldAddToLast, insertIdx;
87
+ let data = get(evt, 'data'), dataLength, dataLimit, shouldAddToLast, insertIdx;
87
88
  data = getValidJSON(data) || xmlToJson(data) || data;
88
89
  // EVENT: ON_MESSAGE
89
- value = initiateCallback(VARIABLE_CONSTANTS.EVENT.MESSAGE_RECEIVE, variable, data, evt);
90
+ const value = initiateCallback(VARIABLE_CONSTANTS.EVENT.MESSAGE_RECEIVE, variable, data, evt);
90
91
  data = isDefined(value) ? value : data;
91
92
  if (this.shouldAppendData(variable)) {
92
93
  variable.dataSet = variable.dataSet || [];
@@ -153,11 +154,16 @@ export class WebSocketVariableManager extends BaseVariableManager {
153
154
  variable._socketConnected = true;
154
155
  // EVENT: ON_OPEN
155
156
  initiateCallback(VARIABLE_CONSTANTS.EVENT.OPEN, variable, get(evt, 'data'), evt);
157
+ // Send initial request body if it exists and connectOnPageLoad is true
158
+ if (variable.startUpdate) {
159
+ const requestBody = get(variable, 'dataBinding.RequestBody');
160
+ if (requestBody) {
161
+ setTimeout(() => {
162
+ this.send(variable, requestBody);
163
+ }, 0); // Using setTimeout to ensure connection is fully established
164
+ }
165
+ }
156
166
  }
157
- /**
158
- * clears the socket variable against the variable in a scope
159
- * @param variable
160
- */
161
167
  freeSocket(variable) {
162
168
  this.scope_var_socket_map.set(variable, undefined);
163
169
  }
@@ -199,7 +205,6 @@ export class WebSocketVariableManager extends BaseVariableManager {
199
205
  if (_socket) {
200
206
  return _socket;
201
207
  }
202
- // Trigger error if unsecured webSocket is used in secured domain, ignore in mobile device
203
208
  if (!CONSTANTS.hasCordova && isInsecureContentRequest(url)) {
204
209
  triggerFn(this._onSocketError.bind(this, variable));
205
210
  return;
@@ -220,12 +225,11 @@ export class WebSocketVariableManager extends BaseVariableManager {
220
225
  */
221
226
  open(variable, success, error) {
222
227
  const shouldOpen = this._onBeforeSocketOpen(variable);
223
- let socket;
224
228
  if (shouldOpen === false) {
225
229
  triggerFn(error);
226
230
  return;
227
231
  }
228
- socket = this.getSocket(variable);
232
+ const socket = this.getSocket(variable);
229
233
  triggerFn(success);
230
234
  return socket;
231
235
  }
@@ -233,7 +237,8 @@ export class WebSocketVariableManager extends BaseVariableManager {
233
237
  * closes an existing socket connection on variable
234
238
  */
235
239
  close(variable) {
236
- const shouldClose = this._onBeforeSocketClose(variable), socket = this.getSocket(variable);
240
+ const shouldClose = this._onBeforeSocketClose(variable);
241
+ const socket = this.getSocket(variable);
237
242
  if (shouldClose === false) {
238
243
  return;
239
244
  }
@@ -247,15 +252,28 @@ export class WebSocketVariableManager extends BaseVariableManager {
247
252
  */
248
253
  send(variable, message) {
249
254
  const socket = this.getSocket(variable);
250
- let response;
255
+ if (!socket) {
256
+ console.error('WebSocket connection not established');
257
+ return;
258
+ }
251
259
  message = message || get(variable, 'dataBinding.RequestBody');
252
- response = this._onBeforeSend(variable, message);
260
+ if (!message) {
261
+ console.warn('No message to send');
262
+ return;
263
+ }
264
+ const response = this._onBeforeSend(variable, message);
253
265
  if (response === false) {
254
266
  return;
255
267
  }
256
268
  message = isDefined(response) ? response : message;
257
269
  message = isObject(message) ? JSON.stringify(message) : message;
258
- socket.send(message, 0);
270
+ try {
271
+ socket.send(message, 0);
272
+ }
273
+ catch (error) {
274
+ console.error('Error sending message:', error);
275
+ this._onSocketError(variable, { data: error.message });
276
+ }
259
277
  }
260
278
  }
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXNvY2tldC12YXJpYWJsZS5tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFyaWFibGVzL3NyYy9tYW5hZ2VyL3ZhcmlhYmxlL3dlYi1zb2NrZXQtdmFyaWFibGUubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNsRixPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUV2QyxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsbUJBQW1CO0lBQWpFOztRQUVJLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakMsYUFBUSxHQUFHO1lBQ1AsU0FBUyxFQUFFLFNBQVM7WUFDcEIsc0JBQXNCLEVBQUUsb0JBQW9CO1lBQzVDLFlBQVksRUFBRSxXQUFXO1NBQzVCLENBQUM7UUFDRix5QkFBb0IsR0FBRztZQUNuQixTQUFTLEVBQUUsU0FBUztZQUNwQixTQUFTLEVBQUUsU0FBUztZQUNwQixRQUFRLEVBQUUsUUFBUTtTQUNyQixDQUFDO0lBa1FOLENBQUM7SUFoUUc7Ozs7T0FJRztJQUNLLGdCQUFnQixDQUFDLFFBQVE7UUFDN0IsUUFBUSxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUM7UUFDNUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7SUFDOUYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBQyxRQUFRO1FBQzdCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsS0FBSyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO0lBQzdGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFlBQVksQ0FBQyxRQUFRO1FBQ3pCLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLE1BQU0sQ0FBQyxRQUFRO1FBQ25CLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3ROLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDekMsSUFBSSxNQUFNLENBQUM7UUFFWCxpREFBaUQ7UUFDakQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLO1lBQ3RDLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUNILHdHQUF3RztRQUN4RyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNiLGdCQUFnQixFQUFFLElBQUk7U0FDekIsQ0FBQyxDQUFDO1FBRUgsdUVBQXVFO1FBQ3ZFLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BGLDRCQUE0QjtRQUM1QixJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUM7WUFDNUQsT0FBTztRQUNYLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUc7UUFDbEMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDO1FBQ3RGLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNyRCxvQkFBb0I7UUFDcEIsS0FBSyxHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RixJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDMUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3JDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsSUFBSSxTQUFTLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDbEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDN0IsQ0FBQztxQkFBTSxDQUFDO29CQUNKLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLENBQUM7WUFDTCxDQUFDO1lBQ0QsU0FBUyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNKLFFBQVEsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTztRQUNuQyx3QkFBd0I7UUFDeEIsT0FBTyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssb0JBQW9CLENBQUMsUUFBUSxFQUFFLEdBQUk7UUFDdkMseUJBQXlCO1FBQ3pCLE9BQU8sZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxHQUFJO1FBQ3RDLHdCQUF3QjtRQUN4QixPQUFPLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLGFBQWEsQ0FBQyxRQUFRLEVBQUUsR0FBRztRQUMvQixRQUFRLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLGlCQUFpQjtRQUNqQixnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRDs7O09BR0c7SUFDSyxVQUFVLENBQUMsUUFBUTtRQUN2QixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHO1FBQ2hDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQixrQkFBa0I7UUFDbEIsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHO1FBQ2hDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQixrQkFBa0I7UUFDbEIsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSw4QkFBOEIsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNJLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFNBQVMsQ0FBQyxRQUFRO1FBQ3RCLE1BQU0sR0FBRyxHQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxPQUFPLENBQUM7UUFDbkIsQ0FBQztRQUVELDBGQUEwRjtRQUMxRixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsSUFBSSx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pELFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNwRCxPQUFPO1FBQ1gsQ0FBQztRQUNELE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakQsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDM0IsT0FBTyxPQUFPLENBQUM7SUFDdkIsQ0FBQztJQUVHOzs7O09BSUc7SUFDSSxJQUFJLENBQUMsUUFBMkIsRUFBRSxPQUFRLEVBQUUsS0FBTTtRQUNyRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN2QixTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsT0FBTztRQUNYLENBQUM7UUFDRCxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkIsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFFBQTJCO1FBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFDbkQsTUFBTSxHQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsSUFBSSxXQUFXLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNYLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksSUFBSSxDQUFDLFFBQTJCLEVBQUUsT0FBZ0I7UUFDckQsTUFBTSxNQUFNLEdBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxJQUFJLFFBQVEsQ0FBQztRQUViLE9BQU8sR0FBRyxPQUFPLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQzlELFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUNELE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ25ELE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAkV2ViU29ja2V0IH0gZnJvbSAnYW5ndWxhcjItd2Vic29ja2V0L2FuZ3VsYXIyLXdlYnNvY2tldCc7XG5cbmltcG9ydCB7IGdldFZhbGlkSlNPTiwgaXNEZWZpbmVkLCBpc0luc2VjdXJlQ29udGVudFJlcXVlc3QsIGlzT2JqZWN0LCB0cmlnZ2VyRm4sIHhtbFRvSnNvbiB9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgQmFzZVZhcmlhYmxlTWFuYWdlciB9IGZyb20gJy4vYmFzZS12YXJpYWJsZS5tYW5hZ2VyJztcbmltcG9ydCB7IFdlYlNvY2tldFZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vbW9kZWwvdmFyaWFibGUvd2ViLXNvY2tldC12YXJpYWJsZSc7XG5pbXBvcnQgeyBpbml0aWF0ZUNhbGxiYWNrLCBtZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlsL3ZhcmlhYmxlL3ZhcmlhYmxlcy51dGlscyc7XG5pbXBvcnQgeyBDT05TVEFOVFMsIFZBUklBQkxFX0NPTlNUQU5UUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92YXJpYWJsZXMuY29uc3RhbnRzJztcbmltcG9ydCB7IFNlcnZpY2VWYXJpYWJsZVV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC92YXJpYWJsZS9zZXJ2aWNlLXZhcmlhYmxlLnV0aWxzJztcbmltcG9ydCB7Zm9yRWFjaCwgZ2V0fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRWYXJpYWJsZU1hbmFnZXIgZXh0ZW5kcyBCYXNlVmFyaWFibGVNYW5hZ2VyIHtcblxuICAgIHNjb3BlX3Zhcl9zb2NrZXRfbWFwID0gbmV3IE1hcCgpO1xuICAgIFBST1BFUlRZID0ge1xuICAgICAgICAnU0VSVklDRSc6ICdzZXJ2aWNlJyxcbiAgICAgICAgJ0RBVEFfVVBEQVRFX1NUUkFURUdZJzogJ2RhdGFVcGRhdGVTdHJhdGVneScsXG4gICAgICAgICdEQVRBX0xJTUlUJzogJ2RhdGFMaW1pdCdcbiAgICB9O1xuICAgIERBVEFfVVBEQVRFX1NUUkFURUdZID0ge1xuICAgICAgICAnUkVGUkVTSCc6ICdyZWZyZXNoJyxcbiAgICAgICAgJ1BSRVBFTkQnOiAncHJlcGVuZCcsXG4gICAgICAgICdBUFBFTkQnOiAnYXBwZW5kJ1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRoZSBzdGF0ZSBvZiBwcm9wZXJ0eSB0byBkZWNpZGUgd2VhdGhlciB0byBhcHBlbmQgbmV3IG1lc3NhZ2VzIHRvIGRhdGFTZXQgb3Igbm90XG4gICAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAgICogQHJldHVybnMgYm9vbGVhblxuICAgICAqL1xuICAgIHByaXZhdGUgc2hvdWxkQXBwZW5kRGF0YSh2YXJpYWJsZSkge1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlIHx8IHRoaXM7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZVt0aGlzLlBST1BFUlRZLkRBVEFfVVBEQVRFX1NUUkFURUdZXSAhPT0gdGhpcy5EQVRBX1VQREFURV9TVFJBVEVHWS5SRUZSRVNIO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdGhlIHN0YXRlIG9mIHByb3BlcnR5IHRvIGRlY2lkZSB3ZWF0aGVyIHRvIEFQUEVORCBvciBQUkVQRU5EIG5ldyBtZXNzYWdlcyB0byBkYXRhU2V0XG4gICAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAgICogQHJldHVybnMgYm9vbGVhblxuICAgICAqL1xuICAgIHByaXZhdGUgc2hvdWxkQXBwZW5kTGFzdCh2YXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gdmFyaWFibGVbdGhpcy5QUk9QRVJUWS5EQVRBX1VQREFURV9TVFJBVEVHWV0gPT09IHRoaXMuREFUQV9VUERBVEVfU1RSQVRFR1kuQVBQRU5EO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdXBwZXIgbGltaXQgb24gbnVtYmVyIG9mIHJlY29yZHMgdG8gYmUgaW4gZGF0YVNldFxuICAgICAqIHRoaXMgaXMgYXBwbGljYWJsZSBvbmx5IHdoZW4gYXBwZW5kRGF0YSBpcyB0cnVlXG4gICAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAgICogQHJldHVybnMge2RhdGFMaW1pdH1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldERhdGFMaW1pdCh2YXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gdmFyaWFibGUuZGF0YUxpbWl0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdldCB1cmwgZnJvbSB3bVNlcnZpY2VPcGVyYXRpb25JbmZvXG4gICAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRVUkwodmFyaWFibGUpIHtcbiAgICAgICAgY29uc3QgcHJlZmFiTmFtZSA9IHZhcmlhYmxlLmdldFByZWZhYk5hbWUoKTtcbiAgICAgICAgY29uc3Qgb3BJbmZvID0gcHJlZmFiTmFtZSA/IGdldChtZXRhZGF0YVNlcnZpY2UuZ2V0QnlPcGVyYXRpb25JZCh2YXJpYWJsZS5vcGVyYXRpb25JZCwgcHJlZmFiTmFtZSksICd3bVNlcnZpY2VPcGVyYXRpb25JbmZvJykgOiBnZXQobWV0YWRhdGFTZXJ2aWNlLmdldEJ5T3BlcmF0aW9uSWQodmFyaWFibGUub3BlcmF0aW9uSWQpLCAnd21TZXJ2aWNlT3BlcmF0aW9uSW5mbycpO1xuICAgICAgICBjb25zdCBpbnB1dEZpZWxkcyA9IHZhcmlhYmxlLmRhdGFCaW5kaW5nO1xuICAgICAgICBsZXQgY29uZmlnO1xuXG4gICAgICAgIC8vIGFkZCBzYW1wbGUgdmFsdWVzIHRvIHRoZSBwYXJhbXMgKHVybCBhbmQgcGF0aClcbiAgICAgICAgZm9yRWFjaChvcEluZm8ucGFyYW1ldGVycywgZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICBwYXJhbS5zYW1wbGVWYWx1ZSA9IGlucHV0RmllbGRzW3BhcmFtLm5hbWVdO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYWx0aG91Z2gsIG5vIGhlYWRlciBwYXJhbXMgd2lsbCBiZSBwcmVzZW50LCBrZWVwaW5nICdza2lwQ2xvYWtIZWFkZXJzJyBmbGFnIGlmIHN1cHBvcnQgcHJvdmlkZWQgbGF0ZXJcbiAgICAgICAgJC5leHRlbmQob3BJbmZvLCB7XG4gICAgICAgICAgICBza2lwQ2xvYWtIZWFkZXJzOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGNhbGwgY29tbW9uIG1ldGhvZCB0byBwcmVwYXJlIGNvbmZpZyBmb3IgdGhlIHNlcnZpY2Ugb3BlcmF0aW9uIGluZm8uXG4gICAgICAgIGNvbmZpZyA9IFNlcnZpY2VWYXJpYWJsZVV0aWxzLmNvbnN0cnVjdFJlcXVlc3RQYXJhbXModmFyaWFibGUsIG9wSW5mbywgaW5wdXRGaWVsZHMpO1xuICAgICAgICAvKiBpZiBlcnJvciBmb3VuZCwgcmV0dXJuICovXG4gICAgICAgIGlmIChjb25maWcuZXJyb3IgJiYgY29uZmlnLmVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX29uU29ja2V0RXJyb3IodmFyaWFibGUsIHtkYXRhOiBjb25maWcuZXJyb3IubWVzc2FnZX0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25maWcudXJsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGhhbmRsZXIgZm9yIG9uTWVzc2FnZSBldmVudCBvbiBhIHNvY2tldCBjb25uZWN0aW9uIGZvciBhIHZhcmlhYmxlXG4gICAgICogdGhlIGRhdGEgcmV0dXJuZWQgaXMgY29udmVydGVkIHRvIEpTT04gZnJvbSBzdHJpbmcveG1sIGFuZCBhc3NpZ25lZCB0byBkYXRhU2V0IG9mIHZhcmlhYmxlXG4gICAgICogSWYgbm90IGFibGUgdG8gZG8gc28sIG1lc3NhZ2UgaXMgc2ltcGx5IGFzc2lnbmVkIHRvIHRoZSBkYXRhU2V0IG9mIHZhcmlhYmxlXG4gICAgICogSWYgYXBwZW5kRGF0YSBwcm9wZXJ0eSBpcyBzZXQsIHRoZSBtZXNzYWdlIGlzIGFwcGVuZGVkIHRvIHRoZSBkYXRhU2V0LCBlbHNlIGl0IHJlcGxhY2VzIHRoZSBleGlzdGluZyB2YWx1ZSBvZiBkYXRhU2V0XG4gICAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25Tb2NrZXRNZXNzYWdlKHZhcmlhYmxlLCBldnQpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBnZXQoZXZ0LCAnZGF0YScpLCB2YWx1ZSwgZGF0YUxlbmd0aCwgZGF0YUxpbWl0LCBzaG91bGRBZGRUb0xhc3QsIGluc2VydElkeDtcbiAgICAgICAgZGF0YSA9IGdldFZhbGlkSlNPTihkYXRhKSB8fCB4bWxUb0pzb24oZGF0YSkgfHwgZGF0YTtcbiAgICAgICAgLy8gRVZFTlQ6IE9OX01FU1NBR0VcbiAgICAgICAgdmFsdWUgPSBpbml0aWF0ZUNhbGxiYWNrKFZBUklBQkxFX0NPTlNUQU5UUy5FVkVOVC5NRVNTQUdFX1JFQ0VJVkUsIHZhcmlhYmxlLCBkYXRhLCBldnQpO1xuICAgICAgICBkYXRhID0gaXNEZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogZGF0YTtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkQXBwZW5kRGF0YSh2YXJpYWJsZSkpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlLmRhdGFTZXQgPSB2YXJpYWJsZS5kYXRhU2V0IHx8IFtdO1xuICAgICAgICAgICAgZGF0YUxlbmd0aCA9IHZhcmlhYmxlLmRhdGFTZXQubGVuZ3RoO1xuICAgICAgICAgICAgZGF0YUxpbWl0ID0gdGhpcy5nZXREYXRhTGltaXQodmFyaWFibGUpO1xuICAgICAgICAgICAgc2hvdWxkQWRkVG9MYXN0ID0gdGhpcy5zaG91bGRBcHBlbmRMYXN0KHZhcmlhYmxlKTtcbiAgICAgICAgICAgIGlmIChkYXRhTGltaXQgJiYgKGRhdGFMZW5ndGggPj0gZGF0YUxpbWl0KSkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRBZGRUb0xhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuZGF0YVNldC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLmRhdGFTZXQucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5zZXJ0SWR4ID0gc2hvdWxkQWRkVG9MYXN0ID8gZGF0YUxlbmd0aCA6IDA7XG4gICAgICAgICAgICB2YXJpYWJsZS5kYXRhU2V0LnNwbGljZShpbnNlcnRJZHgsIDAsIGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyaWFibGUuZGF0YVNldCA9IGlzRGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjYWxscyB0aGUgT05fQkVGT1JFX1NFTkQgY2FsbGJhY2sgb24gdGhlIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX29uQmVmb3JlU2VuZCh2YXJpYWJsZSwgbWVzc2FnZSkge1xuICAgICAgICAvLyBFVkVOVDogT05fQkVGT1JFX1NFTkRcbiAgICAgICAgcmV0dXJuIGluaXRpYXRlQ2FsbGJhY2soVkFSSUFCTEVfQ09OU1RBTlRTLkVWRU5ULkJFRk9SRV9TRU5ELCB2YXJpYWJsZSwgbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsbHMgdGhlIE9OX0JFRk9SRV9DTE9TRSBjYWxsYmFjayBhc3NpZ25lZCB0byB0aGUgdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9vbkJlZm9yZVNvY2tldENsb3NlKHZhcmlhYmxlLCBldnQ/KSB7XG4gICAgICAgIC8vIEVWRU5UOiBPTl9CRUZPUkVfQ0xPU0VcbiAgICAgICAgcmV0dXJuIGluaXRpYXRlQ2FsbGJhY2soVkFSSUFCTEVfQ09OU1RBTlRTLkVWRU5ULkJFRk9SRV9DTE9TRSwgdmFyaWFibGUsIGdldChldnQsICdkYXRhJyksIGV2dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsbHMgdGhlIE9OX0JFRk9SRV9PUEVOIGNhbGxiYWNrIGFzc2lnbmVkXG4gICAgICogY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBjb25uZWN0aW9uIGlzIG9wZW5cbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9vbkJlZm9yZVNvY2tldE9wZW4odmFyaWFibGUsIGV2dD8pIHtcbiAgICAgICAgLy8gRVZFTlQ6IE9OX0JFRk9SRV9PUEVOXG4gICAgICAgIHJldHVybiBpbml0aWF0ZUNhbGxiYWNrKFZBUklBQkxFX0NPTlNUQU5UUy5FVkVOVC5CRUZPUkVfT1BFTiwgdmFyaWFibGUsIGdldChldnQsICdkYXRhJyksIGV2dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsbHMgdGhlIE9OX09QRU4gZXZlbnQgb24gdGhlIHZhcmlhYmxlXG4gICAgICogdGhpcyBpcyBjYWxsZWQgb25jZSB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBieSB0aGUgdmFyaWFibGUgd2l0aCB0aGUgdGFyZ2V0IFdlYlNvY2tldCBzZXJ2aWNlXG4gICAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25Tb2NrZXRPcGVuKHZhcmlhYmxlLCBldnQpIHtcbiAgICAgICAgdmFyaWFibGUuX3NvY2tldENvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgIC8vIEVWRU5UOiBPTl9PUEVOXG4gICAgICAgIGluaXRpYXRlQ2FsbGJhY2soVkFSSUFCTEVfQ09OU1RBTlRTLkVWRU5ULk9QRU4sIHZhcmlhYmxlLCBnZXQoZXZ0LCAnZGF0YScpLCBldnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNsZWFycyB0aGUgc29ja2V0IHZhcmlhYmxlIGFnYWluc3QgdGhlIHZhcmlhYmxlIGluIGEgc2NvcGVcbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGZyZWVTb2NrZXQodmFyaWFibGUpIHtcbiAgICAgICAgdGhpcy5zY29wZV92YXJfc29ja2V0X21hcC5zZXQodmFyaWFibGUsIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsbHMgdGhlIE9OX0NMT1NFIGV2ZW50IG9uIHRoZSB2YXJpYWJsZVxuICAgICAqIHRoaXMgaXMgY2FsbGVkIG9uIGNsb3NlIG9mIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gb24gYSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX29uU29ja2V0Q2xvc2UodmFyaWFibGUsIGV2dCkge1xuICAgICAgICB2YXJpYWJsZS5fc29ja2V0Q29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZnJlZVNvY2tldCh2YXJpYWJsZSk7XG4gICAgICAgIC8vIEVWRU5UOiBPTl9DTE9TRVxuICAgICAgICBpbml0aWF0ZUNhbGxiYWNrKFZBUklBQkxFX0NPTlNUQU5UUy5FVkVOVC5DTE9TRSwgdmFyaWFibGUsIGdldChldnQsICdkYXRhJyksIGV2dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsbHMgdGhlIE9OX0VSUk9SIGV2ZW50IG9uIHRoZSB2YXJpYWJsZVxuICAgICAqIHRoaXMgaXMgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjb25uZWN0aW5nIHRvIHRoZSBzb2NrZXQgc2VydmljZVxuICAgICAqIEBwYXJhbSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX29uU29ja2V0RXJyb3IodmFyaWFibGUsIGV2dCkge1xuICAgICAgICB2YXJpYWJsZS5fc29ja2V0Q29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZnJlZVNvY2tldCh2YXJpYWJsZSk7XG4gICAgICAgIC8vIEVWRU5UOiBPTl9FUlJPUlxuICAgICAgICBpbml0aWF0ZUNhbGxiYWNrKFZBUklBQkxFX0NPTlNUQU5UUy5FVkVOVC5FUlJPUiwgdmFyaWFibGUsIGdldChldnQsICdkYXRhJykgfHwgJ0Vycm9yIHdoaWxlIGNvbm5lY3Rpbmcgd2l0aCAnICsgdmFyaWFibGUuc2VydmljZSwgZXZ0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIGFuIGV4aXN0aW5nIHNvY2tldCBjb25uZWN0aW9uIG9uIHRoZSB2YXJpYWJsZVxuICAgICAqIGlmIG5vdCBwcmVzZW50LCBtYWtlIHRoZSBjb25uZWN0aW9uIGFuZCByZXR1cm4gaXRcbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNvY2tldCh2YXJpYWJsZSkge1xuICAgICAgICBjb25zdCB1cmwgICAgID0gdGhpcy5nZXRVUkwodmFyaWFibGUpO1xuICAgICAgICBsZXQgX3NvY2tldCA9IHRoaXMuc2NvcGVfdmFyX3NvY2tldF9tYXAuZ2V0KHZhcmlhYmxlKTtcbiAgICAgICAgaWYgKF9zb2NrZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBfc29ja2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJpZ2dlciBlcnJvciBpZiB1bnNlY3VyZWQgd2ViU29ja2V0IGlzIHVzZWQgaW4gc2VjdXJlZCBkb21haW4sIGlnbm9yZSBpbiBtb2JpbGUgZGV2aWNlXG4gICAgICAgIGlmICghQ09OU1RBTlRTLmhhc0NvcmRvdmEgJiYgaXNJbnNlY3VyZUNvbnRlbnRSZXF1ZXN0KHVybCkpIHtcbiAgICAgICAgICAgIHRyaWdnZXJGbih0aGlzLl9vblNvY2tldEVycm9yLmJpbmQodGhpcywgdmFyaWFibGUpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfc29ja2V0ID0gbmV3ICRXZWJTb2NrZXQodXJsKTtcbiAgICAgICAgX3NvY2tldC5vbk9wZW4odGhpcy5fb25Tb2NrZXRPcGVuLmJpbmQodGhpcywgdmFyaWFibGUpKTtcbiAgICAgICAgX3NvY2tldC5vbkVycm9yKHRoaXMuX29uU29ja2V0RXJyb3IuYmluZCh0aGlzLCB2YXJpYWJsZSkpO1xuICAgICAgICBfc29ja2V0Lm9uTWVzc2FnZSh0aGlzLl9vblNvY2tldE1lc3NhZ2UuYmluZCh0aGlzLCB2YXJpYWJsZSkpO1xuICAgICAgICBfc29ja2V0Lm9uQ2xvc2UodGhpcy5fb25Tb2NrZXRDbG9zZS5iaW5kKHRoaXMsIHZhcmlhYmxlKSk7XG5cbiAgICAgICAgdGhpcy5zY29wZV92YXJfc29ja2V0X21hcC5zZXQodmFyaWFibGUsIF9zb2NrZXQpO1xuICAgICAgICB2YXJpYWJsZS5fc29ja2V0ID0gX3NvY2tldDtcbiAgICAgICAgcmV0dXJuIF9zb2NrZXQ7XG59XG5cbiAgICAvKipcbiAgICAgKiBvcGVucyBhIHNvY2tldCBjb25uZWN0aW9uIG9uIHRoZSB2YXJpYWJsZS5cbiAgICAgKiBVUkwgJiBvdGhlciBtZXRhIGRhdGEgaXMgZmV0Y2hlZCBmcm9tIHdtU2VydmljZU9wZXJhdGlvbkluZm9cbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBwdWJsaWMgb3Blbih2YXJpYWJsZTogV2ViU29ja2V0VmFyaWFibGUsIHN1Y2Nlc3M/LCBlcnJvcj8pIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkT3BlbiA9IHRoaXMuX29uQmVmb3JlU29ja2V0T3Blbih2YXJpYWJsZSk7XG4gICAgICAgIGxldCBzb2NrZXQ7XG4gICAgICAgIGlmIChzaG91bGRPcGVuID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdHJpZ2dlckZuKGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzb2NrZXQgPSB0aGlzLmdldFNvY2tldCh2YXJpYWJsZSk7XG4gICAgICAgIHRyaWdnZXJGbihzdWNjZXNzKTtcbiAgICAgICAgcmV0dXJuIHNvY2tldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjbG9zZXMgYW4gZXhpc3Rpbmcgc29ja2V0IGNvbm5lY3Rpb24gb24gdmFyaWFibGVcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UodmFyaWFibGU6IFdlYlNvY2tldFZhcmlhYmxlKSB7XG4gICAgICAgIGNvbnN0IHNob3VsZENsb3NlID0gdGhpcy5fb25CZWZvcmVTb2NrZXRDbG9zZSh2YXJpYWJsZSksXG4gICAgICAgICAgICBzb2NrZXQgICAgICA9IHRoaXMuZ2V0U29ja2V0KHZhcmlhYmxlKTtcbiAgICAgICAgaWYgKHNob3VsZENsb3NlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNvY2tldC5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNlbmRzIGEgbWVzc2FnZSB0byB0aGUgZXhpc3Rpbmcgc29ja2V0IGNvbm5lY3Rpb24gb24gdGhlIHZhcmlhYmxlXG4gICAgICogSWYgc29ja2V0IGNvbm5lY3Rpb24gbm90IG9wZW4geWV0LCBvcGVuIGEgY29ubmVjdGlvbnMgYW5kIHRoZW4gc2VuZFxuICAgICAqIGlmIG1lc3NhZ2UgcHJvdmlkZSwgaXQgaXMgc2VudCwgZWxzZSB0aGUgb25lIHByZXNlbnQgaW4gUmVxdWVzdEJvZHkgcGFyYW0gaXMgc2VudFxuICAgICAqIEBwYXJhbSBtZXNzYWdlXG4gICAgICovXG4gICAgcHVibGljIHNlbmQodmFyaWFibGU6IFdlYlNvY2tldFZhcmlhYmxlLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvY2tldCAgICAgID0gdGhpcy5nZXRTb2NrZXQodmFyaWFibGUpO1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG5cbiAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgZ2V0KHZhcmlhYmxlLCAnZGF0YUJpbmRpbmcuUmVxdWVzdEJvZHknKTtcbiAgICAgICAgcmVzcG9uc2UgPSB0aGlzLl9vbkJlZm9yZVNlbmQodmFyaWFibGUsIG1lc3NhZ2UpO1xuICAgICAgICBpZiAocmVzcG9uc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZSA9IGlzRGVmaW5lZChyZXNwb25zZSkgPyByZXNwb25zZSA6IG1lc3NhZ2U7XG4gICAgICAgIG1lc3NhZ2UgPSBpc09iamVjdChtZXNzYWdlKSA/IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpIDogbWVzc2FnZTtcbiAgICAgICAgc29ja2V0LnNlbmQobWVzc2FnZSwgMCk7XG4gICAgfVxufVxuIl19
279
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXNvY2tldC12YXJpYWJsZS5tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFyaWFibGVzL3NyYy9tYW5hZ2VyL3ZhcmlhYmxlL3dlYi1zb2NrZXQtdmFyaWFibGUubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsbUJBQW1CO0lBQWpFOztRQUNJLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakMsYUFBUSxHQUFHO1lBQ1AsU0FBUyxFQUFFLFNBQVM7WUFDcEIsc0JBQXNCLEVBQUUsb0JBQW9CO1lBQzVDLFlBQVksRUFBRSxXQUFXO1NBQzVCLENBQUM7UUFDRix5QkFBb0IsR0FBRztZQUNuQixTQUFTLEVBQUUsU0FBUztZQUNwQixTQUFTLEVBQUUsU0FBUztZQUNwQixRQUFRLEVBQUUsUUFBUTtTQUNyQixDQUFDO0lBc1JOLENBQUM7SUFwUkc7Ozs7T0FJRztJQUNLLGdCQUFnQixDQUFDLFFBQVE7UUFDN0IsUUFBUSxH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QUFDO1lBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAkV2ViU29ja2V0IH0gZnJvbSAnYW5ndWxhcjItd2Vic29ja2V0L2FuZ3VsYXIyLXdlYnNvY2tldCc7XG5pbXBvcnQgeyBnZXRWYWxpZEpTT04sIGlzRGVmaW5lZCwgaXNJbnNlY3VyZUNvbnRlbnRSZXF1ZXN0LCBpc09iamVjdCwgdHJpZ2dlckZuLCB4bWxUb0pzb24gfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBCYXNlVmFyaWFibGVNYW5hZ2VyIH0gZnJvbSAnLi9iYXNlLXZhcmlhYmxlLm1hbmFnZXInO1xuaW1wb3J0IHsgV2ViU29ja2V0VmFyaWFibGUgfSBmcm9tICcuLi8uLi9tb2RlbC92YXJpYWJsZS93ZWItc29ja2V0LXZhcmlhYmxlJztcbmltcG9ydCB7IGluaXRpYXRlQ2FsbGJhY2ssIG1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWwvdmFyaWFibGUvdmFyaWFibGVzLnV0aWxzJztcbmltcG9ydCB7IENPTlNUQU5UUywgVkFSSUFCTEVfQ09OU1RBTlRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3ZhcmlhYmxlcy5jb25zdGFudHMnO1xuaW1wb3J0IHsgU2VydmljZVZhcmlhYmxlVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL3ZhcmlhYmxlL3NlcnZpY2UtdmFyaWFibGUudXRpbHMnO1xuaW1wb3J0IHsgZm9yRWFjaCwgZ2V0IH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0VmFyaWFibGVNYW5hZ2VyIGV4dGVuZHMgQmFzZVZhcmlhYmxlTWFuYWdlciB7XG4gICAgc2NvcGVfdmFyX3NvY2tldF9tYXAgPSBuZXcgTWFwKCk7XG4gICAgUFJPUEVSVFkgPSB7XG4gICAgICAgICdTRVJWSUNFJzogJ3NlcnZpY2UnLFxuICAgICAgICAnREFUQV9VUERBVEVfU1RSQVRFR1knOiAnZGF0YVVwZGF0ZVN0cmF0ZWd5JyxcbiAgICAgICAgJ0RBVEFfTElNSVQnOiAnZGF0YUxpbWl0J1xuICAgIH07XG4gICAgREFUQV9VUERBVEVfU1RSQVRFR1kgPSB7XG4gICAgICAgICdSRUZSRVNIJzogJ3JlZnJlc2gnLFxuICAgICAgICAnUFJFUEVORCc6ICdwcmVwZW5kJyxcbiAgICAgICAgJ0FQUEVORCc6ICdhcHBlbmQnXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdGhlIHN0YXRlIG9mIHByb3BlcnR5IHRvIGRlY2lkZSB3ZWF0aGVyIHRvIGFwcGVuZCBuZXcgbWVzc2FnZXMgdG8gZGF0YVNldCBvciBub3RcbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzaG91bGRBcHBlbmREYXRhKHZhcmlhYmxlKSB7XG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGUgfHwgdGhpcztcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlW3RoaXMuUFJPUEVSVFkuREFUQV9VUERBVEVfU1RSQVRFR1ldICE9PSB0aGlzLkRBVEFfVVBEQVRFX1NUUkFURUdZLlJFRlJFU0g7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0aGUgc3RhdGUgb2YgcHJvcGVydHkgdG8gZGVjaWRlIHdlYXRoZXIgdG8gQVBQRU5EIG9yIFBSRVBFTkQgbmV3IG1lc3NhZ2VzIHRvIGRhdGFTZXRcbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzaG91bGRBcHBlbmRMYXN0KHZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZVt0aGlzLlBST1BFUlRZLkRBVEFfVVBEQVRFX1NUUkFURUdZXSA9PT0gdGhpcy5EQVRBX1VQREFURV9TVFJBVEVHWS5BUFBFTkQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB1cHBlciBsaW1pdCBvbiBudW1iZXIgb2YgcmVjb3JkcyB0byBiZSBpbiBkYXRhU2V0XG4gICAgICogdGhpcyBpcyBhcHBsaWNhYmxlIG9ubHkgd2hlbiBhcHBlbmREYXRhIGlzIHRydWVcbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKiBAcmV0dXJucyB7ZGF0YUxpbWl0fVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RGF0YUxpbWl0KHZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZS5kYXRhTGltaXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IHVybCBmcm9tIHdtU2VydmljZU9wZXJhdGlvbkluZm9cbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFVSTCh2YXJpYWJsZSkge1xuICAgICAgICBjb25zdCBwcmVmYWJOYW1lID0gdmFyaWFibGUuZ2V0UHJlZmFiTmFtZSgpO1xuICAgICAgICBjb25zdCBvcEluZm8gPSBwcmVmYWJOYW1lID8gXG4gICAgICAgICAgICBnZXQobWV0YWRhdGFTZXJ2aWNlLmdldEJ5T3BlcmF0aW9uSWQodmFyaWFibGUub3BlcmF0aW9uSWQsIHByZWZhYk5hbWUpLCAnd21TZXJ2aWNlT3BlcmF0aW9uSW5mbycpIDogXG4gICAgICAgICAgICBnZXQobWV0YWRhdGFTZXJ2aWNlLmdldEJ5T3BlcmF0aW9uSWQodmFyaWFibGUub3BlcmF0aW9uSWQpLCAnd21TZXJ2aWNlT3BlcmF0aW9uSW5mbycpO1xuICAgICAgICBjb25zdCBpbnB1dEZpZWxkcyA9IHZhcmlhYmxlLmRhdGFCaW5kaW5nO1xuICAgICAgICBcbiAgICAgICAgLy8gYWRkIHNhbXBsZSB2YWx1ZXMgdG8gdGhlIHBhcmFtcyAodXJsIGFuZCBwYXRoKVxuICAgICAgICBmb3JFYWNoKG9wSW5mby5wYXJhbWV0ZXJzLCBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgICAgIHBhcmFtLnNhbXBsZVZhbHVlID0gaW5wdXRGaWVsZHNbcGFyYW0ubmFtZV07XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbHRob3VnaCwgbm8gaGVhZGVyIHBhcmFtcyB3aWxsIGJlIHByZXNlbnQsIGtlZXBpbmcgJ3NraXBDbG9ha0hlYWRlcnMnIGZsYWcgaWYgc3VwcG9ydCBwcm92aWRlZCBsYXRlclxuICAgICAgICAkLmV4dGVuZChvcEluZm8sIHtcbiAgICAgICAgICAgIHNraXBDbG9ha0hlYWRlcnM6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY2FsbCBjb21tb24gbWV0aG9kIHRvIHByZXBhcmUgY29uZmlnIGZvciB0aGUgc2VydmljZSBvcGVyYXRpb24gaW5mby5cbiAgICAgICAgY29uc3QgY29uZmlnID0gU2VydmljZVZhcmlhYmxlVXRpbHMuY29uc3RydWN0UmVxdWVzdFBhcmFtcyh2YXJpYWJsZSwgb3BJbmZvLCBpbnB1dEZpZWxkcyk7XG4gICAgICAgIC8qIGlmIGVycm9yIGZvdW5kLCByZXR1cm4gKi9cbiAgICAgICAgaWYgKGNvbmZpZy5lcnJvciAmJiBjb25maWcuZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgdGhpcy5fb25Tb2NrZXRFcnJvcih2YXJpYWJsZSwge2RhdGE6IGNvbmZpZy5lcnJvci5tZXNzYWdlfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpZy51cmw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaGFuZGxlciBmb3Igb25NZXNzYWdlIGV2ZW50IG9uIGEgc29ja2V0IGNvbm5lY3Rpb24gZm9yIGEgdmFyaWFibGVcbiAgICAgKiB0aGUgZGF0YSByZXR1cm5lZCBpcyBjb252ZXJ0ZWQgdG8gSlNPTiBmcm9tIHN0cmluZy94bWwgYW5kIGFzc2lnbmVkIHRvIGRhdGFTZXQgb2YgdmFyaWFibGVcbiAgICAgKiBJZiBub3QgYWJsZSB0byBkbyBzbywgbWVzc2FnZSBpcyBzaW1wbHkgYXNzaWduZWQgdG8gdGhlIGRhdGFTZXQgb2YgdmFyaWFibGVcbiAgICAgKiBJZiBhcHBlbmREYXRhIHByb3BlcnR5IGlzIHNldCwgdGhlIG1lc3NhZ2UgaXMgYXBwZW5kZWQgdG8gdGhlIGRhdGFTZXQsIGVsc2UgaXQgcmVwbGFjZXMgdGhlIGV4aXN0aW5nIHZhbHVlIG9mIGRhdGFTZXRcbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9vblNvY2tldE1lc3NhZ2UodmFyaWFibGUsIGV2dCkge1xuICAgICAgICBsZXQgZGF0YSA9IGdldChldnQsICdkYXRhJyksIGRhdGFMZW5ndGgsIGRhdGFMaW1pdCwgc2hvdWxkQWRkVG9MYXN0LCBpbnNlcnRJZHg7XG4gICAgICAgIGRhdGEgPSBnZXRWYWxpZEpTT04oZGF0YSkgfHwgeG1sVG9Kc29uKGRhdGEpIHx8IGRhdGE7XG4gICAgICAgIC8vIEVWRU5UOiBPTl9NRVNTQUdFXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5pdGlhdGVDYWxsYmFjayhWQVJJQUJMRV9DT05TVEFOVFMuRVZFTlQuTUVTU0FHRV9SRUNFSVZFLCB2YXJpYWJsZSwgZGF0YSwgZXZ0KTtcbiAgICAgICAgZGF0YSA9IGlzRGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IGRhdGE7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZEFwcGVuZERhdGEodmFyaWFibGUpKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS5kYXRhU2V0ID0gdmFyaWFibGUuZGF0YVNldCB8fCBbXTtcbiAgICAgICAgICAgIGRhdGFMZW5ndGggPSB2YXJpYWJsZS5kYXRhU2V0Lmxlbmd0aDtcbiAgICAgICAgICAgIGRhdGFMaW1pdCA9IHRoaXMuZ2V0RGF0YUxpbWl0KHZhcmlhYmxlKTtcbiAgICAgICAgICAgIHNob3VsZEFkZFRvTGFzdCA9IHRoaXMuc2hvdWxkQXBwZW5kTGFzdCh2YXJpYWJsZSk7XG4gICAgICAgICAgICBpZiAoZGF0YUxpbWl0ICYmIChkYXRhTGVuZ3RoID49IGRhdGFMaW1pdCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQWRkVG9MYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLmRhdGFTZXQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5kYXRhU2V0LnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluc2VydElkeCA9IHNob3VsZEFkZFRvTGFzdCA/IGRhdGFMZW5ndGggOiAwO1xuICAgICAgICAgICAgdmFyaWFibGUuZGF0YVNldC5zcGxpY2UoaW5zZXJ0SWR4LCAwLCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhcmlhYmxlLmRhdGFTZXQgPSBpc0RlZmluZWQodmFsdWUpID8gdmFsdWUgOiBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsbHMgdGhlIE9OX0JFRk9SRV9TRU5EIGNhbGxiYWNrIG9uIHRoZSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSBtZXNzYWdlXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9vbkJlZm9yZVNlbmQodmFyaWFibGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgLy8gRVZFTlQ6IE9OX0JFRk9SRV9TRU5EXG4gICAgICAgIHJldHVybiBpbml0aWF0ZUNhbGxiYWNrKFZBUklBQkxFX0NPTlNUQU5UUy5FVkVOVC5CRUZPUkVfU0VORCwgdmFyaWFibGUsIG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNhbGxzIHRoZSBPTl9CRUZPUkVfQ0xPU0UgY2FsbGJhY2sgYXNzaWduZWQgdG8gdGhlIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25CZWZvcmVTb2NrZXRDbG9zZSh2YXJpYWJsZSwgZXZ0Pykge1xuICAgICAgICAvLyBFVkVOVDogT05fQkVGT1JFX0NMT1NFXG4gICAgICAgIHJldHVybiBpbml0aWF0ZUNhbGxiYWNrKFZBUklBQkxFX0NPTlNUQU5UUy5FVkVOVC5CRUZPUkVfQ0xPU0UsIHZhcmlhYmxlLCBnZXQoZXZ0LCAnZGF0YScpLCBldnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNhbGxzIHRoZSBPTl9CRUZPUkVfT1BFTiBjYWxsYmFjayBhc3NpZ25lZFxuICAgICAqIGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25CZWZvcmVTb2NrZXRPcGVuKHZhcmlhYmxlLCBldnQ/KSB7XG4gICAgICAgIC8vIEVWRU5UOiBPTl9CRUZPUkVfT1BFTlxuICAgICAgICByZXR1cm4gaW5pdGlhdGVDYWxsYmFjayhWQVJJQUJMRV9DT05TVEFOVFMuRVZFTlQuQkVGT1JFX09QRU4sIHZhcmlhYmxlLCBnZXQoZXZ0LCAnZGF0YScpLCBldnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNhbGxzIHRoZSBPTl9PUEVOIGV2ZW50IG9uIHRoZSB2YXJpYWJsZVxuICAgICAqIHRoaXMgaXMgY2FsbGVkIG9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYnkgdGhlIHZhcmlhYmxlIHdpdGggdGhlIHRhcmdldCBXZWJTb2NrZXQgc2VydmljZVxuICAgICAqIEBwYXJhbSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX29uU29ja2V0T3Blbih2YXJpYWJsZSwgZXZ0KSB7XG4gICAgICAgIHZhcmlhYmxlLl9zb2NrZXRDb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAvLyBFVkVOVDogT05fT1BFTlxuICAgICAgICBpbml0aWF0ZUNhbGxiYWNrKFZBUklBQkxFX0NPTlNUQU5UUy5FVkVOVC5PUEVOLCB2YXJpYWJsZSwgZ2V0KGV2dCwgJ2RhdGEnKSwgZXZ0KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNlbmQgaW5pdGlhbCByZXF1ZXN0IGJvZHkgaWYgaXQgZXhpc3RzIGFuZCBjb25uZWN0T25QYWdlTG9hZCBpcyB0cnVlXG4gICAgICAgIGlmICh2YXJpYWJsZS5zdGFydFVwZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSBnZXQodmFyaWFibGUsICdkYXRhQmluZGluZy5SZXF1ZXN0Qm9keScpO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5KSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZCh2YXJpYWJsZSwgcmVxdWVzdEJvZHkpO1xuICAgICAgICAgICAgICAgIH0sIDApOyAgLy8gVXNpbmcgc2V0VGltZW91dCB0byBlbnN1cmUgY29ubmVjdGlvbiBpcyBmdWxseSBlc3RhYmxpc2hlZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmcmVlU29ja2V0KHZhcmlhYmxlKSB7XG4gICAgICAgIHRoaXMuc2NvcGVfdmFyX3NvY2tldF9tYXAuc2V0KHZhcmlhYmxlLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNhbGxzIHRoZSBPTl9DTE9TRSBldmVudCBvbiB0aGUgdmFyaWFibGVcbiAgICAgKiB0aGlzIGlzIGNhbGxlZCBvbiBjbG9zZSBvZiBhbiBleGlzdGluZyBjb25uZWN0aW9uIG9uIGEgdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9vblNvY2tldENsb3NlKHZhcmlhYmxlLCBldnQpIHtcbiAgICAgICAgdmFyaWFibGUuX3NvY2tldENvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZyZWVTb2NrZXQodmFyaWFibGUpO1xuICAgICAgICAvLyBFVkVOVDogT05fQ0xPU0VcbiAgICAgICAgaW5pdGlhdGVDYWxsYmFjayhWQVJJQUJMRV9DT05TVEFOVFMuRVZFTlQuQ0xPU0UsIHZhcmlhYmxlLCBnZXQoZXZ0LCAnZGF0YScpLCBldnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNhbGxzIHRoZSBPTl9FUlJPUiBldmVudCBvbiB0aGUgdmFyaWFibGVcbiAgICAgKiB0aGlzIGlzIGNhbGxlZCBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgY29ubmVjdGluZyB0byB0aGUgc29ja2V0IHNlcnZpY2VcbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9vblNvY2tldEVycm9yKHZhcmlhYmxlLCBldnQpIHtcbiAgICAgICAgdmFyaWFibGUuX3NvY2tldENvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZyZWVTb2NrZXQodmFyaWFibGUpO1xuICAgICAgICAvLyBFVkVOVDogT05fRVJST1JcbiAgICAgICAgaW5pdGlhdGVDYWxsYmFjayhWQVJJQUJMRV9DT05TVEFOVFMuRVZFTlQuRVJST1IsIHZhcmlhYmxlLCBnZXQoZXZ0LCAnZGF0YScpIHx8ICdFcnJvciB3aGlsZSBjb25uZWN0aW5nIHdpdGggJyArIHZhcmlhYmxlLnNlcnZpY2UsIGV2dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyBhbiBleGlzdGluZyBzb2NrZXQgY29ubmVjdGlvbiBvbiB0aGUgdmFyaWFibGVcbiAgICAgKiBpZiBub3QgcHJlc2VudCwgbWFrZSB0aGUgY29ubmVjdGlvbiBhbmQgcmV0dXJuIGl0XG4gICAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRTb2NrZXQodmFyaWFibGUpIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVUkwodmFyaWFibGUpO1xuICAgICAgICBsZXQgX3NvY2tldCA9IHRoaXMuc2NvcGVfdmFyX3NvY2tldF9tYXAuZ2V0KHZhcmlhYmxlKTtcbiAgICAgICAgaWYgKF9zb2NrZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBfc29ja2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFDT05TVEFOVFMuaGFzQ29yZG92YSAmJiBpc0luc2VjdXJlQ29udGVudFJlcXVlc3QodXJsKSkge1xuICAgICAgICAgICAgdHJpZ2dlckZuKHRoaXMuX29uU29ja2V0RXJyb3IuYmluZCh0aGlzLCB2YXJpYWJsZSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF9zb2NrZXQgPSBuZXcgJFdlYlNvY2tldCh1cmwpO1xuICAgICAgICBfc29ja2V0Lm9uT3Blbih0aGlzLl9vblNvY2tldE9wZW4uYmluZCh0aGlzLCB2YXJpYWJsZSkpO1xuICAgICAgICBfc29ja2V0Lm9uRXJyb3IodGhpcy5fb25Tb2NrZXRFcnJvci5iaW5kKHRoaXMsIHZhcmlhYmxlKSk7XG4gICAgICAgIF9zb2NrZXQub25NZXNzYWdlKHRoaXMuX29uU29ja2V0TWVzc2FnZS5iaW5kKHRoaXMsIHZhcmlhYmxlKSk7XG4gICAgICAgIF9zb2NrZXQub25DbG9zZSh0aGlzLl9vblNvY2tldENsb3NlLmJpbmQodGhpcywgdmFyaWFibGUpKTtcblxuICAgICAgICB0aGlzLnNjb3BlX3Zhcl9zb2NrZXRfbWFwLnNldCh2YXJpYWJsZSwgX3NvY2tldCk7XG4gICAgICAgIHZhcmlhYmxlLl9zb2NrZXQgPSBfc29ja2V0O1xuICAgICAgICByZXR1cm4gX3NvY2tldDtcbn1cblxuICAgIC8qKlxuICAgICAqIG9wZW5zIGEgc29ja2V0IGNvbm5lY3Rpb24gb24gdGhlIHZhcmlhYmxlLlxuICAgICAqIFVSTCAmIG90aGVyIG1ldGEgZGF0YSBpcyBmZXRjaGVkIGZyb20gd21TZXJ2aWNlT3BlcmF0aW9uSW5mb1xuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKHZhcmlhYmxlOiBXZWJTb2NrZXRWYXJpYWJsZSwgc3VjY2Vzcz8sIGVycm9yPykge1xuICAgICAgICBjb25zdCBzaG91bGRPcGVuID0gdGhpcy5fb25CZWZvcmVTb2NrZXRPcGVuKHZhcmlhYmxlKTtcbiAgICAgICAgaWYgKHNob3VsZE9wZW4gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0cmlnZ2VyRm4oZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvY2tldCA9IHRoaXMuZ2V0U29ja2V0KHZhcmlhYmxlKTtcbiAgICAgICAgdHJpZ2dlckZuKHN1Y2Nlc3MpO1xuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNsb3NlcyBhbiBleGlzdGluZyBzb2NrZXQgY29ubmVjdGlvbiBvbiB2YXJpYWJsZVxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSh2YXJpYWJsZTogV2ViU29ja2V0VmFyaWFibGUpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkQ2xvc2UgPSB0aGlzLl9vbkJlZm9yZVNvY2tldENsb3NlKHZhcmlhYmxlKTtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gdGhpcy5nZXRTb2NrZXQodmFyaWFibGUpO1xuICAgICAgICBpZiAoc2hvdWxkQ2xvc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc29ja2V0LmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBleGlzdGluZyBzb2NrZXQgY29ubmVjdGlvbiBvbiB0aGUgdmFyaWFibGVcbiAgICAgKiBJZiBzb2NrZXQgY29ubmVjdGlvbiBub3Qgb3BlbiB5ZXQsIG9wZW4gYSBjb25uZWN0aW9ucyBhbmQgdGhlbiBzZW5kXG4gICAgICogaWYgbWVzc2FnZSBwcm92aWRlLCBpdCBpcyBzZW50LCBlbHNlIHRoZSBvbmUgcHJlc2VudCBpbiBSZXF1ZXN0Qm9keSBwYXJhbSBpcyBzZW50XG4gICAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VuZCh2YXJpYWJsZTogV2ViU29ja2V0VmFyaWFibGUsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gdGhpcy5nZXRTb2NrZXQodmFyaWFibGUpO1xuXG4gICAgICAgIGlmICghc29ja2V0KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdXZWJTb2NrZXQgY29ubmVjdGlvbiBub3QgZXN0YWJsaXNoZWQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IGdldCh2YXJpYWJsZSwgJ2RhdGFCaW5kaW5nLlJlcXVlc3RCb2R5Jyk7XG4gICAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBtZXNzYWdlIHRvIHNlbmQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5fb25CZWZvcmVTZW5kKHZhcmlhYmxlLCBtZXNzYWdlKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2UgPSBpc0RlZmluZWQocmVzcG9uc2UpID8gcmVzcG9uc2UgOiBtZXNzYWdlO1xuICAgICAgICBtZXNzYWdlID0gaXNPYmplY3QobWVzc2FnZSkgPyBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSA6IG1lc3NhZ2U7XG4gICAgICAgIFxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc29ja2V0LnNlbmQobWVzc2FnZSwgMCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2U6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fb25Tb2NrZXRFcnJvcih2YXJpYWJsZSwgeyBkYXRhOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==
@@ -2532,9 +2532,10 @@ class WebSocketVariableManager extends BaseVariableManager {
2532
2532
  */
2533
2533
  getURL(variable) {
2534
2534
  const prefabName = variable.getPrefabName();
2535
- const opInfo = prefabName ? get(metadataService.getByOperationId(variable.operationId, prefabName), 'wmServiceOperationInfo') : get(metadataService.getByOperationId(variable.operationId), 'wmServiceOperationInfo');
2535
+ const opInfo = prefabName ?
2536
+ get(metadataService.getByOperationId(variable.operationId, prefabName), 'wmServiceOperationInfo') :
2537
+ get(metadataService.getByOperationId(variable.operationId), 'wmServiceOperationInfo');
2536
2538
  const inputFields = variable.dataBinding;
2537
- let config;
2538
2539
  // add sample values to the params (url and path)
2539
2540
  forEach(opInfo.parameters, function (param) {
2540
2541
  param.sampleValue = inputFields[param.name];
@@ -2544,7 +2545,7 @@ class WebSocketVariableManager extends BaseVariableManager {
2544
2545
  skipCloakHeaders: true
2545
2546
  });
2546
2547
  // call common method to prepare config for the service operation info.
2547
- config = ServiceVariableUtils.constructRequestParams(variable, opInfo, inputFields);
2548
+ const config = ServiceVariableUtils.constructRequestParams(variable, opInfo, inputFields);
2548
2549
  /* if error found, return */
2549
2550
  if (config.error && config.error.message) {
2550
2551
  this._onSocketError(variable, { data: config.error.message });
@@ -2562,10 +2563,10 @@ class WebSocketVariableManager extends BaseVariableManager {
2562
2563
  * @private
2563
2564
  */
2564
2565
  _onSocketMessage(variable, evt) {
2565
- let data = get(evt, 'data'), value, dataLength, dataLimit, shouldAddToLast, insertIdx;
2566
+ let data = get(evt, 'data'), dataLength, dataLimit, shouldAddToLast, insertIdx;
2566
2567
  data = getValidJSON(data) || xmlToJson(data) || data;
2567
2568
  // EVENT: ON_MESSAGE
2568
- value = initiateCallback(VARIABLE_CONSTANTS.EVENT.MESSAGE_RECEIVE, variable, data, evt);
2569
+ const value = initiateCallback(VARIABLE_CONSTANTS.EVENT.MESSAGE_RECEIVE, variable, data, evt);
2569
2570
  data = isDefined(value) ? value : data;
2570
2571
  if (this.shouldAppendData(variable)) {
2571
2572
  variable.dataSet = variable.dataSet || [];
@@ -2632,11 +2633,16 @@ class WebSocketVariableManager extends BaseVariableManager {
2632
2633
  variable._socketConnected = true;
2633
2634
  // EVENT: ON_OPEN
2634
2635
  initiateCallback(VARIABLE_CONSTANTS.EVENT.OPEN, variable, get(evt, 'data'), evt);
2636
+ // Send initial request body if it exists and connectOnPageLoad is true
2637
+ if (variable.startUpdate) {
2638
+ const requestBody = get(variable, 'dataBinding.RequestBody');
2639
+ if (requestBody) {
2640
+ setTimeout(() => {
2641
+ this.send(variable, requestBody);
2642
+ }, 0); // Using setTimeout to ensure connection is fully established
2643
+ }
2644
+ }
2635
2645
  }
2636
- /**
2637
- * clears the socket variable against the variable in a scope
2638
- * @param variable
2639
- */
2640
2646
  freeSocket(variable) {
2641
2647
  this.scope_var_socket_map.set(variable, undefined);
2642
2648
  }
@@ -2678,7 +2684,6 @@ class WebSocketVariableManager extends BaseVariableManager {
2678
2684
  if (_socket) {
2679
2685
  return _socket;
2680
2686
  }
2681
- // Trigger error if unsecured webSocket is used in secured domain, ignore in mobile device
2682
2687
  if (!CONSTANTS.hasCordova && isInsecureContentRequest(url)) {
2683
2688
  triggerFn(this._onSocketError.bind(this, variable));
2684
2689
  return;
@@ -2699,12 +2704,11 @@ class WebSocketVariableManager extends BaseVariableManager {
2699
2704
  */
2700
2705
  open(variable, success, error) {
2701
2706
  const shouldOpen = this._onBeforeSocketOpen(variable);
2702
- let socket;
2703
2707
  if (shouldOpen === false) {
2704
2708
  triggerFn(error);
2705
2709
  return;
2706
2710
  }
2707
- socket = this.getSocket(variable);
2711
+ const socket = this.getSocket(variable);
2708
2712
  triggerFn(success);
2709
2713
  return socket;
2710
2714
  }
@@ -2712,7 +2716,8 @@ class WebSocketVariableManager extends BaseVariableManager {
2712
2716
  * closes an existing socket connection on variable
2713
2717
  */
2714
2718
  close(variable) {
2715
- const shouldClose = this._onBeforeSocketClose(variable), socket = this.getSocket(variable);
2719
+ const shouldClose = this._onBeforeSocketClose(variable);
2720
+ const socket = this.getSocket(variable);
2716
2721
  if (shouldClose === false) {
2717
2722
  return;
2718
2723
  }
@@ -2726,15 +2731,28 @@ class WebSocketVariableManager extends BaseVariableManager {
2726
2731
  */
2727
2732
  send(variable, message) {
2728
2733
  const socket = this.getSocket(variable);
2729
- let response;
2734
+ if (!socket) {
2735
+ console.error('WebSocket connection not established');
2736
+ return;
2737
+ }
2730
2738
  message = message || get(variable, 'dataBinding.RequestBody');
2731
- response = this._onBeforeSend(variable, message);
2739
+ if (!message) {
2740
+ console.warn('No message to send');
2741
+ return;
2742
+ }
2743
+ const response = this._onBeforeSend(variable, message);
2732
2744
  if (response === false) {
2733
2745
  return;
2734
2746
  }
2735
2747
  message = isDefined(response) ? response : message;
2736
2748
  message = isObject$1(message) ? JSON.stringify(message) : message;
2737
- socket.send(message, 0);
2749
+ try {
2750
+ socket.send(message, 0);
2751
+ }
2752
+ catch (error) {
2753
+ console.error('Error sending message:', error);
2754
+ this._onSocketError(variable, { data: error.message });
2755
+ }
2738
2756
  }
2739
2757
  }
2740
2758