velocious 1.0.563 → 1.0.565

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 (219) hide show
  1. package/README.md +3 -1
  2. package/build/background-jobs/cron-expression.js +12 -13
  3. package/build/background-jobs/main.js +6 -6
  4. package/build/background-jobs/runner-graceful-shutdown.js +2 -3
  5. package/build/background-jobs/scheduler.js +3 -3
  6. package/build/background-jobs/worker.js +8 -9
  7. package/build/beacon/client.js +3 -4
  8. package/build/database/drivers/sqlite/web-persistence.js +2 -5
  9. package/build/database/pool/async-tracked-multi-connection.js +65 -15
  10. package/build/database/pool/base.js +23 -7
  11. package/build/database/query/index.js +21 -22
  12. package/build/database/query/model-class-query.js +5 -6
  13. package/build/database/record/acts-as-list.js +37 -10
  14. package/build/database/record/attachments/normalize-input.js +9 -10
  15. package/build/database/record/attachments/store.js +2 -2
  16. package/build/database/record/auditing.js +7 -8
  17. package/build/database/record/index.js +4 -5
  18. package/build/environment-handlers/node/cli/commands/generate/base-models.js +4 -12
  19. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +1 -2
  20. package/build/frontend-model-controller.js +49 -56
  21. package/build/frontend-models/base.js +17 -19
  22. package/build/frontend-models/outgoing-event-buffer.js +3 -4
  23. package/build/frontend-models/query.js +40 -44
  24. package/build/frontend-models/resource-definition.js +7 -8
  25. package/build/frontend-models/transport-serialization.js +10 -12
  26. package/build/frontend-models/websocket-channel.js +12 -13
  27. package/build/http-server/client/websocket-session.js +4 -5
  28. package/build/http-server/client-delivery-queue.js +7 -8
  29. package/build/http-server/websocket-event-log-store.js +4 -6
  30. package/build/plugins/sqljs-wasm-route.js +3 -5
  31. package/build/src/background-jobs/cron-expression.d.ts +0 -12
  32. package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
  33. package/build/src/background-jobs/cron-expression.js +13 -13
  34. package/build/src/background-jobs/main.d.ts.map +1 -1
  35. package/build/src/background-jobs/main.js +7 -7
  36. package/build/src/background-jobs/runner-graceful-shutdown.d.ts +0 -6
  37. package/build/src/background-jobs/runner-graceful-shutdown.d.ts.map +1 -1
  38. package/build/src/background-jobs/runner-graceful-shutdown.js +3 -3
  39. package/build/src/background-jobs/scheduler.d.ts +0 -3
  40. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  41. package/build/src/background-jobs/scheduler.js +4 -4
  42. package/build/src/background-jobs/worker.d.ts +0 -8
  43. package/build/src/background-jobs/worker.d.ts.map +1 -1
  44. package/build/src/background-jobs/worker.js +9 -9
  45. package/build/src/beacon/client.d.ts +0 -4
  46. package/build/src/beacon/client.d.ts.map +1 -1
  47. package/build/src/beacon/client.js +4 -4
  48. package/build/src/database/drivers/sqlite/web-persistence.d.ts +0 -14
  49. package/build/src/database/drivers/sqlite/web-persistence.d.ts.map +1 -1
  50. package/build/src/database/drivers/sqlite/web-persistence.js +3 -3
  51. package/build/src/database/pool/async-tracked-multi-connection.d.ts +29 -1
  52. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  53. package/build/src/database/pool/async-tracked-multi-connection.js +57 -15
  54. package/build/src/database/pool/base.d.ts +53 -4
  55. package/build/src/database/pool/base.d.ts.map +1 -1
  56. package/build/src/database/pool/base.js +23 -6
  57. package/build/src/database/query/index.d.ts +18 -39
  58. package/build/src/database/query/index.d.ts.map +1 -1
  59. package/build/src/database/query/index.js +22 -22
  60. package/build/src/database/query/model-class-query.d.ts +0 -5
  61. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  62. package/build/src/database/query/model-class-query.js +6 -6
  63. package/build/src/database/record/acts-as-list.d.ts.map +1 -1
  64. package/build/src/database/record/acts-as-list.js +34 -12
  65. package/build/src/database/record/attachments/normalize-input.d.ts +0 -9
  66. package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
  67. package/build/src/database/record/attachments/normalize-input.js +10 -10
  68. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  69. package/build/src/database/record/attachments/store.js +2 -2
  70. package/build/src/database/record/auditing.d.ts +17 -24
  71. package/build/src/database/record/auditing.d.ts.map +1 -1
  72. package/build/src/database/record/auditing.js +8 -8
  73. package/build/src/database/record/index.d.ts +4 -4
  74. package/build/src/database/record/index.d.ts.map +1 -1
  75. package/build/src/database/record/index.js +5 -5
  76. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  77. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +5 -13
  78. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +0 -39
  79. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  80. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +2 -2
  81. package/build/src/frontend-model-controller.d.ts +1 -1
  82. package/build/src/frontend-model-controller.d.ts.map +1 -1
  83. package/build/src/frontend-model-controller.js +50 -50
  84. package/build/src/frontend-models/base.d.ts.map +1 -1
  85. package/build/src/frontend-models/base.js +18 -18
  86. package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
  87. package/build/src/frontend-models/outgoing-event-buffer.js +3 -3
  88. package/build/src/frontend-models/query.d.ts +56 -37
  89. package/build/src/frontend-models/query.d.ts.map +1 -1
  90. package/build/src/frontend-models/query.js +39 -39
  91. package/build/src/frontend-models/resource-definition.d.ts +0 -7
  92. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  93. package/build/src/frontend-models/resource-definition.js +8 -8
  94. package/build/src/frontend-models/transport-serialization.d.ts +0 -10
  95. package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
  96. package/build/src/frontend-models/transport-serialization.js +11 -11
  97. package/build/src/frontend-models/websocket-channel.d.ts +0 -12
  98. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  99. package/build/src/frontend-models/websocket-channel.js +13 -13
  100. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  101. package/build/src/http-server/client/websocket-session.js +5 -5
  102. package/build/src/http-server/client-delivery-queue.d.ts +7 -7
  103. package/build/src/http-server/client-delivery-queue.d.ts.map +1 -1
  104. package/build/src/http-server/client-delivery-queue.js +8 -8
  105. package/build/src/http-server/websocket-event-log-store.d.ts +0 -14
  106. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  107. package/build/src/http-server/websocket-event-log-store.js +5 -5
  108. package/build/src/plugins/sqljs-wasm-route.d.ts.map +1 -1
  109. package/build/src/plugins/sqljs-wasm-route.js +4 -4
  110. package/build/src/sync/conflict-strategy.d.ts +0 -15
  111. package/build/src/sync/conflict-strategy.d.ts.map +1 -1
  112. package/build/src/sync/conflict-strategy.js +3 -3
  113. package/build/src/sync/device-identity.d.ts +0 -45
  114. package/build/src/sync/device-identity.d.ts.map +1 -1
  115. package/build/src/sync/device-identity.js +4 -4
  116. package/build/src/sync/local-mutation-log.d.ts +0 -41
  117. package/build/src/sync/local-mutation-log.d.ts.map +1 -1
  118. package/build/src/sync/local-mutation-log.js +9 -9
  119. package/build/src/sync/offline-grant.d.ts +0 -26
  120. package/build/src/sync/offline-grant.d.ts.map +1 -1
  121. package/build/src/sync/offline-grant.js +4 -4
  122. package/build/src/sync/peer-mutation-bundle.d.ts +0 -14
  123. package/build/src/sync/peer-mutation-bundle.d.ts.map +1 -1
  124. package/build/src/sync/peer-mutation-bundle.js +3 -3
  125. package/build/src/sync/server-change-feed.d.ts.map +1 -1
  126. package/build/src/sync/server-change-feed.js +33 -33
  127. package/build/src/sync/sync-api-client.d.ts +0 -9
  128. package/build/src/sync/sync-api-client.d.ts.map +1 -1
  129. package/build/src/sync/sync-api-client.js +2 -2
  130. package/build/src/sync/sync-envelope-replay-service.d.ts +38 -21
  131. package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
  132. package/build/src/sync/sync-envelope-replay-service.js +18 -18
  133. package/build/src/sync/sync-resource-base.d.ts +0 -7
  134. package/build/src/sync/sync-resource-base.d.ts.map +1 -1
  135. package/build/src/sync/sync-resource-base.js +2 -2
  136. package/build/src/sync/sync-scope-store.d.ts +0 -9
  137. package/build/src/sync/sync-scope-store.d.ts.map +1 -1
  138. package/build/src/sync/sync-scope-store.js +10 -10
  139. package/build/src/testing/test-filter-parser.d.ts +0 -10
  140. package/build/src/testing/test-filter-parser.d.ts.map +1 -1
  141. package/build/src/testing/test-filter-parser.js +11 -11
  142. package/build/src/testing/test-runner.d.ts +25 -91
  143. package/build/src/testing/test-runner.d.ts.map +1 -1
  144. package/build/src/testing/test-runner.js +113 -98
  145. package/build/src/testing/test.d.ts +8 -0
  146. package/build/src/testing/test.d.ts.map +1 -1
  147. package/build/src/testing/test.js +9 -9
  148. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  149. package/build/src/utils/backtrace-cleaner.js +9 -9
  150. package/build/src/utils/model-scope.d.ts +0 -8
  151. package/build/src/utils/model-scope.d.ts.map +1 -1
  152. package/build/src/utils/model-scope.js +3 -3
  153. package/build/src/utils/ransack.d.ts +52 -19
  154. package/build/src/utils/ransack.d.ts.map +1 -1
  155. package/build/src/utils/ransack.js +26 -26
  156. package/build/sync/conflict-strategy.js +3 -6
  157. package/build/sync/device-identity.js +4 -9
  158. package/build/sync/local-mutation-log.js +9 -14
  159. package/build/sync/offline-grant.js +4 -7
  160. package/build/sync/peer-mutation-bundle.js +2 -4
  161. package/build/sync/server-change-feed.js +32 -34
  162. package/build/sync/sync-api-client.js +1 -2
  163. package/build/sync/sync-envelope-replay-service.js +17 -19
  164. package/build/sync/sync-resource-base.js +1 -2
  165. package/build/sync/sync-scope-store.js +9 -10
  166. package/build/testing/test-filter-parser.js +10 -11
  167. package/build/testing/test-runner.js +116 -108
  168. package/build/testing/test.js +8 -9
  169. package/build/utils/backtrace-cleaner.js +8 -9
  170. package/build/utils/model-scope.js +3 -4
  171. package/build/utils/ransack.js +27 -34
  172. package/package.json +2 -1
  173. package/scripts/eslint-rules/typedefs-first.js +67 -0
  174. package/scripts/prewarm-chromedriver.js +26 -0
  175. package/src/background-jobs/cron-expression.js +12 -13
  176. package/src/background-jobs/main.js +6 -6
  177. package/src/background-jobs/runner-graceful-shutdown.js +2 -3
  178. package/src/background-jobs/scheduler.js +3 -3
  179. package/src/background-jobs/worker.js +8 -9
  180. package/src/beacon/client.js +3 -4
  181. package/src/database/drivers/sqlite/web-persistence.js +2 -5
  182. package/src/database/pool/async-tracked-multi-connection.js +65 -15
  183. package/src/database/pool/base.js +23 -7
  184. package/src/database/query/index.js +21 -22
  185. package/src/database/query/model-class-query.js +5 -6
  186. package/src/database/record/acts-as-list.js +37 -10
  187. package/src/database/record/attachments/normalize-input.js +9 -10
  188. package/src/database/record/attachments/store.js +2 -2
  189. package/src/database/record/auditing.js +7 -8
  190. package/src/database/record/index.js +4 -5
  191. package/src/environment-handlers/node/cli/commands/generate/base-models.js +4 -12
  192. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +1 -2
  193. package/src/frontend-model-controller.js +49 -56
  194. package/src/frontend-models/base.js +17 -19
  195. package/src/frontend-models/outgoing-event-buffer.js +3 -4
  196. package/src/frontend-models/query.js +40 -44
  197. package/src/frontend-models/resource-definition.js +7 -8
  198. package/src/frontend-models/transport-serialization.js +10 -12
  199. package/src/frontend-models/websocket-channel.js +12 -13
  200. package/src/http-server/client/websocket-session.js +4 -5
  201. package/src/http-server/client-delivery-queue.js +7 -8
  202. package/src/http-server/websocket-event-log-store.js +4 -6
  203. package/src/plugins/sqljs-wasm-route.js +3 -5
  204. package/src/sync/conflict-strategy.js +3 -6
  205. package/src/sync/device-identity.js +4 -9
  206. package/src/sync/local-mutation-log.js +9 -14
  207. package/src/sync/offline-grant.js +4 -7
  208. package/src/sync/peer-mutation-bundle.js +2 -4
  209. package/src/sync/server-change-feed.js +32 -34
  210. package/src/sync/sync-api-client.js +1 -2
  211. package/src/sync/sync-envelope-replay-service.js +17 -19
  212. package/src/sync/sync-resource-base.js +1 -2
  213. package/src/sync/sync-scope-store.js +9 -10
  214. package/src/testing/test-filter-parser.js +10 -11
  215. package/src/testing/test-runner.js +116 -108
  216. package/src/testing/test.js +8 -9
  217. package/src/utils/backtrace-cleaner.js +8 -9
  218. package/src/utils/model-scope.js +3 -4
  219. package/src/utils/ransack.js +27 -34
@@ -44,6 +44,7 @@ export default function registerActsAsListCallbacks(modelClass, positionColumn,
44
44
  return;
45
45
  const position = record.readAttribute(positionColumn);
46
46
  if (position != null) {
47
+ assertPositivePosition({ position, positionColumn });
47
48
  await shiftPositionsUp({ record, positionColumn, scope, fromPosition: position });
48
49
  }
49
50
  else {
@@ -70,11 +71,17 @@ export default function registerActsAsListCallbacks(modelClass, positionColumn,
70
71
  const posAssigned = assignedAttributeNames.has(positionColumn);
71
72
  if (!posChanged && !scopeChanged)
72
73
  return;
74
+ assertPositivePosition({
75
+ position: rawAttributes[posColumn],
76
+ positionColumn,
77
+ persisted: true
78
+ });
73
79
  const oldPosition = posChanged ? /** @type {number} */ (rawAttributes[posColumn]) : /** @type {number} */ (record.readAttribute(positionColumn));
74
80
  const newPosition = posChanged ? /** @type {number} */ (changes[posColumn]) : /** @type {number} */ (record.readAttribute(positionColumn));
75
81
  const oldScopeValue = scopeChanged ? /** @type {number} */ (rawAttributes[scopeCol]) : /** @type {number} */ (record.readAttribute(scope));
76
82
  const newScopeValue = scopeChanged ? /** @type {number} */ (changes[scopeCol]) : /** @type {number} */ (record.readAttribute(scope));
77
- if (oldPosition == null || newPosition == null)
83
+ assertPositivePosition({ position: newPosition, positionColumn });
84
+ if (oldPosition == null)
78
85
  return;
79
86
  if (newPosition === oldPosition && newScopeValue === oldScopeValue)
80
87
  return;
@@ -90,7 +97,7 @@ export default function registerActsAsListCallbacks(modelClass, positionColumn,
90
97
  await shiftPositionsDown({ record, positionColumn, scope, scopeValue: oldScopeValue, fromPosition: oldPosition + 1 });
91
98
  return;
92
99
  }
93
- await moveOutOfWay({ record, positionColumn, scope, scopeValue: oldScopeValue, targetScopeValue: newScopeValue });
100
+ await moveOutOfWay({ record, positionColumn, scope, scopeValue: oldScopeValue });
94
101
  setShiftingFlag(record, false);
95
102
  await shiftPositionsDown({ record, positionColumn, scope, scopeValue: oldScopeValue, fromPosition: oldPosition + 1 });
96
103
  await shiftPositionsUp({ record, positionColumn, scope, scopeValue: newScopeValue, fromPosition: newPosition, excludeRecordId: record.id() });
@@ -108,13 +115,33 @@ export default function registerActsAsListCallbacks(modelClass, positionColumn,
108
115
  });
109
116
  modelClass.beforeDestroy(async (record) => {
110
117
  const position = record.readAttribute(positionColumn);
111
- if (position == null)
118
+ if (position == null) {
119
+ const modelClass = /** @type {typeof import("./index.js").default} */ (record.constructor);
120
+ const posColumn = modelClass.getColumnNameForAttributeName(positionColumn);
121
+ if (posColumn in record._attributes)
122
+ assertPositivePosition({ position, positionColumn, persisted: true });
112
123
  return;
124
+ }
125
+ assertPositivePosition({ position, positionColumn, persisted: true });
113
126
  await moveOutOfWay({ record, positionColumn, scope });
114
127
  setShiftingFlag(record, false);
115
128
  await shiftPositionsDown({ record, positionColumn, scope, fromPosition: position + 1 });
116
129
  });
117
130
  }
131
+ /**
132
+ * Enforces the public gap-less list position invariant before any shifting.
133
+ * @param {object} args - Arguments.
134
+ * @param {number | null | undefined} args.position - Position to validate.
135
+ * @param {string} args.positionColumn - Position attribute name.
136
+ * @param {boolean} [args.persisted] - Whether the invalid value came from persisted state.
137
+ * @returns {void}
138
+ */
139
+ function assertPositivePosition({ position, positionColumn, persisted = false }) {
140
+ if (typeof position === "number" && Number.isInteger(position) && position > 0)
141
+ return;
142
+ const source = persisted ? "Persisted" : "Requested";
143
+ throw new Error(`${source} actsAsList ${positionColumn} must be a positive integer`);
144
+ }
118
145
  /**
119
146
  * Places a moved row after surrounding rows have shifted.
120
147
  * @param {object} args - Arguments.
@@ -328,30 +355,25 @@ function resolveScopeValue(record, scope) {
328
355
  * @param {string} args.positionColumn - camelCase position attribute.
329
356
  * @param {string} args.scope - camelCase scope attribute.
330
357
  * @param {string | number | null} [args.scopeValue] - Scope containing the record before move-out.
331
- * @param {string | number | null} [args.targetScopeValue] - Temporary scope value to assign.
332
358
  * @returns {Promise<void>}
333
359
  */
334
- async function moveOutOfWay({ record, positionColumn, scope, scopeValue, targetScopeValue }) {
360
+ async function moveOutOfWay({ record, positionColumn, scope, scopeValue }) {
335
361
  const modelClass = /** @type {typeof import("./index.js").default} */ (record.constructor);
336
362
  const connection = modelClass.connection();
337
363
  const tableName = modelClass._getTable().getName();
338
364
  const resolvedScopeValue = scopeValue != null ? scopeValue : resolveScopeValue(record, scope);
339
- const resolvedTargetScopeValue = targetScopeValue != null ? targetScopeValue : resolvedScopeValue;
340
365
  if (resolvedScopeValue == null)
341
366
  return;
342
- if (resolvedTargetScopeValue == null)
343
- return;
344
- const tempPosition = -record.id();
345
367
  const positionColumnSql = connection.quoteColumn(modelClass.getColumnNameForAttributeName(positionColumn));
346
368
  const scopeColumnSql = connection.quoteColumn(modelClass.getColumnNameForAttributeName(scope));
347
369
  const tableSql = connection.quoteTable(tableName);
348
- const pkSql = connection.quoteColumn("id");
370
+ const pkSql = connection.quoteColumn(modelClass.primaryKey());
349
371
  setShiftingFlag(record, true);
350
372
  try {
351
- await connection.query(`UPDATE ${tableSql} SET ${scopeColumnSql} = ${connection.quote(resolvedTargetScopeValue)}, ${positionColumnSql} = ${connection.quote(tempPosition)} WHERE ${scopeColumnSql} = ${connection.quote(resolvedScopeValue)} AND ${pkSql} = ${connection.quote(record.id())}`);
373
+ await connection.query(`UPDATE ${tableSql} SET ${positionColumnSql} = -${positionColumnSql} WHERE ${scopeColumnSql} = ${connection.quote(resolvedScopeValue)} AND ${pkSql} = ${connection.quote(record.id())}`);
352
374
  }
353
375
  finally {
354
376
  // Don't clear the flag here — the caller will do that after shifts
355
377
  }
356
378
  }
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0cy1hcy1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3JlY29yZC9hY3RzLWFzLWxpc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLDJFQUEyRTtBQUUzRTs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0FBRTFEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSztJQUNwQyxtREFBbUQ7SUFDbkQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsS0FBSyxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxVQUFVLENBQUMsTUFBTTtJQUN4QixtREFBbUQ7SUFDbkQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQTtBQUMvQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsT0FBTyxVQUFVLDJCQUEyQixDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsRUFBQyxLQUFLLEVBQUM7SUFDckYsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdkMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTTtRQUU5QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRXJELElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLE1BQU0sZ0JBQWdCLENBQUMsRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQTtRQUNqRixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sWUFBWSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsRUFBQyxNQUFNLEVBQUUsY0FBYyxF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Q0FBQyx3QkFBd0IsQ0FBQyxLQUFLLGlCQUFpQixNQUFNLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsY0FBYyxNQUFNLFVBQVUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBUSxLQUFLLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUN2USxDQUFBO0lBQ0gsQ0FBQztZQUFTLENBQUM7UUFDVCxtRUFBbUU7SUFDckUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqIEBmaWxlIFJlZ2lzdGVycyBnYXAtbGVzcyBwb3NpdGlvbmFsIGxpc3QgY2FsbGJhY2tzIG9uIGEgbW9kZWwgY2xhc3MuICovXG5cbi8qKlxuICogQWN0cyBhcyBsaXN0IHNoaWZ0aW5nLlxuICogQHR5cGUge3N5bWJvbH0gLSBHdWFyZCBmbGFnIHNldCBvbiB0aGUgbW9kZWwgaW5zdGFuY2UgZHVyaW5nIHNoaWZ0IG9wZXJhdGlvbnMgdG8gcHJldmVudCByZS1lbnRyYW50IGxpZmVjeWNsZSBob29rcy5cbiAqL1xuY29uc3QgQUNUU19BU19MSVNUX1NISUZUSU5HID0gU3ltYm9sKFwiYWN0c0FzTGlzdFNoaWZ0aW5nXCIpXG5cbi8qKlxuICogUnVucyBzZXQgc2hpZnRpbmcgZmxhZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSByZWNvcmQgLSBNb2RlbCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgLSBGbGFnIHZhbHVlLlxuICovXG5mdW5jdGlvbiBzZXRTaGlmdGluZ0ZsYWcocmVjb3JkLCB2YWx1ZSkge1xuICAvLyBAdHMtaWdub3JlIC0gU3ltYm9sIGluZGV4aW5nIG9uIFJlY29yZCBpbnN0YW5jZXNcbiAgcmVjb3JkW0FDVFNfQVNfTElTVF9TSElGVElOR10gPSB2YWx1ZVxufVxuXG4vKipcbiAqIFJ1bnMgaXMgc2hpZnRpbmcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gcmVjb3JkIC0gTW9kZWwgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGxpc3QgcG9zaXRpb25zIGFyZSBjdXJyZW50bHkgc2hpZnRpbmcuXG4gKi9cbmZ1bmN0aW9uIGlzU2hpZnRpbmcocmVjb3JkKSB7XG4gIC8vIEB0cy1pZ25vcmUgLSBTeW1ib2wgaW5kZXhpbmcgb24gUmVjb3JkIGluc3RhbmNlc1xuICByZXR1cm4gQm9vbGVhbihyZWNvcmRbQUNUU19BU19MSVNUX1NISUZUSU5HXSlcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgZ2FwLWxlc3MgcG9zaXRpb25hbCBsaXN0IGNhbGxiYWNrcyBvbiBhIG1vZGVsIGNsYXNzIHRvIG1haW50YWluXG4gKiBhIGdhcC1sZXNzIHBvc2l0aW9uYWwgbGlzdC4gV2hlbiBhIHJlY29yZCBpcyBpbnNlcnRlZCwgdXBkYXRlZCwgb3JcbiAqIGRlc3Ryb3llZCwgdGhlIHN1cnJvdW5kaW5nIHBvc2l0aW9ucyBhcmUgc2hpZnRlZCBzbyB0aGUgbGlzdCBzdGF5cyBjb21wYWN0XG4gKiAoMSwyLDMsLi4uKSBhbmQgc2NvcGVkIHdpdGhpbiB0aGUgZ2l2ZW4gY29sdW1uLlxuICpcbiAqIENhbGxlcnMgbXVzdCBhbHNvIGVuc3VyZSBhIFVOSVFVRSBpbmRleCBvbiAoc2NvcGVDb2x1bW4sIHBvc2l0aW9uQ29sdW1uKVxuICogZXhpc3RzIGluIHRoZSBkYXRhYmFzZSBzY2hlbWEg4oCUIHVzZSBgTWlncmF0aW9uLmFkZEFjdHNBc0xpc3QoKWAgZm9yIHRoZVxuICogY29ycmVzcG9uZGluZyBzY2hlbWEgc2V0dXAuXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsQ2xhc3MgLSBUaGUgbW9kZWwgY2xhc3MuXG4gKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb25Db2x1bW4gLSBjYW1lbENhc2UgbmFtZSBvZiB0aGUgcG9zaXRpb24gYXR0cmlidXRlIChlLmcuIFwicm93TnVtYmVyXCIpLlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuc2NvcGUgLSBjYW1lbENhc2UgbmFtZSBvZiB0aGUgc2NvcGUgYXR0cmlidXRlIChlLmcuIFwiYm9hcmRDb2x1bW5JZFwiKS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlckFjdHNBc0xpc3RDYWxsYmFja3MobW9kZWxDbGFzcywgcG9zaXRpb25Db2x1bW4sIHtzY29wZX0pIHtcbiAgbW9kZWxDbGFzcy5iZWZvcmVDcmVhdGUoYXN5bmMgKHJlY29yZCkgPT4ge1xuICAgIGlmIChpc1NoaWZ0aW5nKHJlY29yZCkpIHJldHVyblxuXG4gICAgY29uc3QgcG9zaXRpb24gPSByZWNvcmQucmVhZEF0dHJpYnV0ZShwb3NpdGlvbkNvbHVtbilcblxuICAgIGlmIChwb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICBhd2FpdCBzaGlmdFBvc2l0aW9uc1VwKHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZSwgZnJvbVBvc2l0aW9uOiBwb3NpdGlvbn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGF3YWl0IGhpZ2hlc3RQb3NpdGlvbkluU2NvcGUoe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlfSlcblxuICAgICAgcmVjb3JkLnNldEF0dHJpYnV0ZShwb3NpdGlvbkNvbHVtbiwgbmV4dFBvc2l0aW9uICsgMSlcbiAgICB9XG4gIH0pXG5cbiAgbW9kZWxDbGFzcy5iZWZvcmVVcGRhdGUoYXN5bmMgKHJlY29yZCkgPT4ge1xuICAgIGlmIChpc1NoaWZ0aW5nKHJlY29yZCkpIHJldHVyblxuICAgIGlmICghcmVjb3JkLmlzUGVyc2lzdGVkKCkpIHJldHVyblxuXG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IC8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gKi8gKHJlY29yZC5jb25zdHJ1Y3RvcilcbiAgICBjb25zdCBwb3NDb2x1bW4gPSBtb2RlbENsYXNzLmdldENvbHVtbk5hbWVGb3JBdHRyaWJ1dGVOYW1lKHBvc2l0aW9uQ29sdW1uKVxuICAgIGNvbnN0IHNjb3BlQ29sID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lRm9yQXR0cmlidXRlTmFtZShzY29wZSlcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGNvbnN0IHJhd0F0dHJpYnV0ZXMgPSByZWNvcmQuX2F0dHJpYnV0ZXMgfHwge31cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGNvbnN0IGNoYW5nZXMgPSByZWNvcmQuX2NoYW5nZXMgfHwge31cbiAgICAvKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGFzc2lnbmVkQXR0cmlidXRlTmFtZXMgPSByZWNvcmQuX2Fzc2lnbmVkQXR0cmlidXRlTmFtZXMgfHwgbmV3IFNldCgpXG4gICAgY29uc3QgcG9zQ2hhbmdlZCA9IHBvc0NvbHVtbiBpbiBjaGFuZ2VzXG4gICAgY29uc3Qgc2NvcGVDaGFuZ2VkID0gc2NvcGVDb2wgaW4gY2hhbmdlc1xuICAgIGNvbnN0IHBvc0Fzc2lnbmVkID0gYXNzaWduZWRBdHRyaWJ1dGVOYW1lcy5oYXMocG9zaXRpb25Db2x1bW4pXG5cbiAgICBpZiAoIXBvc0NoYW5nZWQgJiYgIXNjb3BlQ2hhbmdlZCkgcmV0dXJuXG5cbiAgICBjb25zdCBvbGRQb3NpdGlvbiA9IHBvc0NoYW5nZWQgPyAvKiogQHR5cGUge251bWJlcn0gKi8gKHJhd0F0dHJpYnV0ZXNbcG9zQ29sdW1uXSkgOiAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlY29yZC5yZWFkQXR0cmlidXRlKHBvc2l0aW9uQ29sdW1uKSlcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IHBvc0NoYW5nZWQgPyAvKiogQHR5cGUge251bWJlcn0gKi8gKGNoYW5nZXNbcG9zQ29sdW1uXSkgOiAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlY29yZC5yZWFkQXR0cmlidXRlKHBvc2l0aW9uQ29sdW1uKSlcbiAgICBjb25zdCBvbGRTY29wZVZhbHVlID0gc2NvcGVDaGFuZ2VkID8gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyYXdBdHRyaWJ1dGVzW3Njb3BlQ29sXSkgOiAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlY29yZC5yZWFkQXR0cmlidXRlKHNjb3BlKSlcbiAgICBjb25zdCBuZXdTY29wZVZhbHVlID0gc2NvcGVDaGFuZ2VkID8gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChjaGFuZ2VzW3Njb3BlQ29sXSkgOiAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlY29yZC5yZWFkQXR0cmlidXRlKHNjb3BlKSlcblxuICAgIGlmIChvbGRQb3NpdGlvbiA9PSBudWxsIHx8IG5ld1Bvc2l0aW9uID09IG51bGwpIHJldHVyblxuICAgIGlmIChuZXdQb3NpdGlvbiA9PT0gb2xkUG9zaXRpb24gJiYgbmV3U2NvcGVWYWx1ZSA9PT0gb2xkU2NvcGVWYWx1ZSkgcmV0dXJuXG5cbiAgICBpZiAoc2NvcGVDaGFuZ2VkICYmIG9sZFNjb3BlVmFsdWUgIT09IG5ld1Njb3BlVmFsdWUpIHtcbiAgICAgIC8vIFdoZW4gb25seSB0aGUgc2NvcGUgY2hhbmdlcyB3aXRob3V0IGEgbmV3IHBvc2l0aW9uLCBhcHBlbmQgdG8gdGhlIGVuZFxuICAgICAgLy8gb2YgdGhlIG5ldyBzY29wZS4gVGhlcmUgaXMgbm8gdGFyZ2V0LXNjb3BlIHJvdyB0byBzaGlmdCBvdXQgb2YgdGhlIHdheS5cbiAgICAgIGlmICghcG9zQXNzaWduZWQpIHtcbiAgICAgICAgYXdhaXQgbW92ZU91dE9mV2F5KHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZSwgc2NvcGVWYWx1ZTogb2xkU2NvcGVWYWx1ZX0pXG4gICAgICAgIHNldFNoaWZ0aW5nRmxhZyhyZWNvcmQsIGZhbHNlKVxuXG4gICAgICAgIGNvbnN0IGhpZ2hlc3ROZXcgPSBhd2FpdCBoaWdoZXN0UG9zaXRpb25JblNjb3BlKHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZSwgc2NvcGVWYWx1ZTogbmV3U2NvcGVWYWx1ZX0pXG4gICAgICAgIGNvbnN0IG5leHRQb3MgPSBoaWdoZXN0TmV3ICsgMVxuXG4gICAgICAgIHJlY29yZC5zZXRBdHRyaWJ1dGUocG9zaXRpb25Db2x1bW4sIG5leHRQb3MpXG4gICAgICAgIGF3YWl0IHNoaWZ0UG9zaXRpb25zRG93bih7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIHNjb3BlVmFsdWU6IG9sZFNjb3BlVmFsdWUsIGZyb21Qb3NpdGlvbjogb2xkUG9zaXRpb24gKyAxfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IG1vdmVPdXRPZldheSh7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIHNjb3BlVmFsdWU6IG9sZFNjb3BlVmFsdWUsIHRhcmdldFNjb3BlVmFsdWU6IG5ld1Njb3BlVmFsdWV9KVxuICAgICAgc2V0U2hpZnRpbmdGbGFnKHJlY29yZCwgZmFsc2UpXG4gICAgICBhd2FpdCBzaGlmdFBvc2l0aW9uc0Rvd24oe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlLCBzY29wZVZhbHVlOiBvbGRTY29wZVZhbHVlLCBmcm9tUG9zaXRpb246IG9sZFBvc2l0aW9uICsgMX0pXG4gICAgICBhd2FpdCBzaGlmdFBvc2l0aW9uc1VwKHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZSwgc2NvcGVWYWx1ZTogbmV3U2NvcGVWYWx1ZSwgZnJvbVBvc2l0aW9uOiBuZXdQb3NpdGlvbiwgZXhjbHVkZVJlY29yZElkOiByZWNvcmQuaWQoKX0pXG4gICAgICBhd2FpdCBwbGFjZU1vdmVkUmVjb3JkKHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZSwgc2NvcGVWYWx1ZTogbmV3U2NvcGVWYWx1ZSwgcG9zaXRpb246IG5ld1Bvc2l0aW9ufSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGF3YWl0IG1vdmVPdXRPZldheSh7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIHNjb3BlVmFsdWU6IG9sZFNjb3BlVmFsdWV9KVxuICAgIHNldFNoaWZ0aW5nRmxhZyhyZWNvcmQsIGZhbHNlKVxuXG4gICAgaWYgKG5ld1Bvc2l0aW9uIDwgb2xkUG9zaXRpb24pIHtcbiAgICAgIGF3YWl0IHNoaWZ0UG9zaXRpb25zVXAoe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlLCBmcm9tUG9zaXRpb246IG5ld1Bvc2l0aW9uLCB0b1Bvc2l0aW9uOiBvbGRQb3NpdGlvbn0pXG4gICAgfSBlbHNlIGlmIChuZXdQb3NpdGlvbiA+IG9sZFBvc2l0aW9uKSB7XG4gICAgICBhd2FpdCBzaGlmdFBvc2l0aW9uc0Rvd24oe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlLCBmcm9tUG9zaXRpb246IG9sZFBvc2l0aW9uICsgMSwgdG9Qb3NpdGlvbjogbmV3UG9zaXRpb24gKyAxfSlcbiAgICB9XG4gIH0pXG5cbiAgbW9kZWxDbGFzcy5iZWZvcmVEZXN0cm95KGFzeW5jIChyZWNvcmQpID0+IHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHJlY29yZC5yZWFkQXR0cmlidXRlKHBvc2l0aW9uQ29sdW1uKVxuXG4gICAgaWYgKHBvc2l0aW9uID09IG51bGwpIHJldHVyblxuXG4gICAgYXdhaXQgbW92ZU91dE9mV2F5KHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZX0pXG4gICAgc2V0U2hpZnRpbmdGbGFnKHJlY29yZCwgZmFsc2UpXG5cbiAgICBhd2FpdCBzaGlmdFBvc2l0aW9uc0Rvd24oe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlLCBmcm9tUG9zaXRpb246IHBvc2l0aW9uICsgMX0pXG4gIH0pXG59XG5cbi8qKlxuICogUGxhY2VzIGEgbW92ZWQgcm93IGFmdGVyIHN1cnJvdW5kaW5nIHJvd3MgaGF2ZSBzaGlmdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5yZWNvcmQgLSBNb2RlbCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnBvc2l0aW9uQ29sdW1uIC0gUG9zaXRpb24gYXR0cmlidXRlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zY29wZSAtIFNjb3BlIGF0dHJpYnV0ZSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGFyZ3Muc2NvcGVWYWx1ZSAtIERlc3RpbmF0aW9uIHNjb3BlIHZhbHVlLlxuICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MucG9zaXRpb24gLSBEZXN0aW5hdGlvbiBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBSZXNvbHZlcyBhZnRlciBwbGFjZW1lbnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBsYWNlTW92ZWRSZWNvcmQoe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlLCBzY29wZVZhbHVlLCBwb3NpdGlvbn0pIHtcbiAgY29uc3QgbW9kZWxDbGFzcyA9IC8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gKi8gKHJlY29yZC5jb25zdHJ1Y3RvcilcbiAgY29uc3QgY29ubmVjdGlvbiA9IG1vZGVsQ2xhc3MuY29ubmVjdGlvbigpXG4gIGNvbnN0IHRhYmxlU3FsID0gY29ubmVjdGlvbi5xdW90ZVRhYmxlKG1vZGVsQ2xhc3MuX2dldFRhYmxlKCkuZ2V0TmFtZSgpKVxuICBjb25zdCBzY29wZUNvbCA9IG1vZGVsQ2xhc3MuZ2V0Q29sdW1uTmFtZUZvckF0dHJpYnV0ZU5hbWUoc2NvcGUpXG4gIGNvbnN0IHBvc0NvbCA9IG1vZGVsQ2xhc3MuZ2V0Q29sdW1uTmFtZUZvckF0dHJpYnV0ZU5hbWUocG9zaXRpb25Db2x1bW4pXG4gIGNvbnN0IHByZXNlcnZlZENoYW5nZXMgPSB7Li4ucmVjb3JkLl9jaGFuZ2VzfVxuICBjb25zdCBzY29wZUNvbHVtblNxbCA9IGNvbm5lY3Rpb24ucXVvdGVDb2x1bW4oc2NvcGVDb2wpXG4gIGNvbnN0IHBvc2l0aW9uQ29sdW1uU3FsID0gY29ubmVjdGlvbi5xdW90ZUNvbHVtbihwb3NDb2wpXG4gIGNvbnN0IHByaW1hcnlLZXlTcWwgPSBjb25uZWN0aW9uLnF1b3RlQ29sdW1uKG1vZGVsQ2xhc3MucHJpbWFyeUtleSgpKVxuXG4gIGRlbGV0ZSBwcmVzZXJ2ZWRDaGFuZ2VzW3Njb3BlQ29sXVxuICBkZWxldGUgcHJlc2VydmVkQ2hhbmdlc1twb3NDb2xdXG5cbiAgYXdhaXQgY29ubmVjdGlvbi5xdWVyeShcbiAgICBgVVBEQVRFICR7dGFibGVTcWx9IFNFVCAke3Njb3BlQ29sdW1uU3FsfSA9ICR7Y29ubmVjdGlvbi5xdW90ZShzY29wZVZhbHVlKX0sICR7cG9zaXRpb25Db2x1bW5TcWx9ID0gJHtjb25uZWN0aW9uLnF1b3RlKHBvc2l0aW9uKX0gV0hFUkUgJHtwcmltYXJ5S2V5U3FsfSA9ICR7Y29ubmVjdGlvbi5xdW90ZShyZWNvcmQuaWQoKSl9YFxuICApXG4gIGF3YWl0IHJlY29yZC5fcmVsb2FkV2l0aElkKHJlY29yZC5pZCgpKVxuICByZWNvcmQuX2NoYW5nZXMgPSBwcmVzZXJ2ZWRDaGFuZ2VzXG4gIGNsZWFyQmVsb25nc1RvQ2hhbmdlRm9yU2NvcGUocmVjb3JkKVxufVxuXG4vKipcbiAqIENsZWFycyBkaXJ0eSBiZWxvbmdzLXRvIHN0YXRlIGZvciB0aGUgc2NvcGUgRksgYWZ0ZXIgZGlyZWN0IHBsYWNlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSByZWNvcmQgLSBNb2RlbCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHt2b2lkfSBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBjbGVhckJlbG9uZ3NUb0NoYW5nZUZvclNjb3BlKHJlY29yZCkge1xuICBmb3IgKGNvbnN0IHJlbGF0aW9uc2hpcE5hbWUgaW4gcmVjb3JkLl9pbnN0YW5jZVJlbGF0aW9uc2hpcHMgfHwge30pIHtcbiAgICBjb25zdCByZWxhdGlvbnNoaXAgPSByZWNvcmQuX2luc3RhbmNlUmVsYXRpb25zaGlwc1tyZWxhdGlvbnNoaXBOYW1lXVxuXG4gICAgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgIT09IFwiYmVsb25nc1RvXCIpIGNvbnRpbnVlXG5cbiAgICByZWxhdGlvbnNoaXAuc2V0RGlydHkoZmFsc2UpXG4gIH1cbn1cblxuLyoqXG4gKiBCdW1wcyBwb3NpdGlvbnMgVVAgYnkgMSBpbiB0aGUgcmFuZ2UgW2Zyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbikgd2l0aGluIHRoZVxuICogc2FtZSBzY29wZS4gVXBkYXRlcyBpbiBkZXNjZW5kaW5nIG9yZGVyIHRvIGF2b2lkIGludGVybWVkaWF0ZSBVTklRVUVcbiAqIGNvbnN0cmFpbnQgdmlvbGF0aW9ucy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVjb3JkIC0gVGhlIG1vZGVsIGluc3RhbmNlIHdob3NlIHNjb3BlIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGguXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wb3NpdGlvbkNvbHVtbiAtIGNhbWVsQ2FzZSBwb3NpdGlvbiBhdHRyaWJ1dGUgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnNjb3BlIC0gY2FtZWxDYXNlIHNjb3BlIGF0dHJpYnV0ZSBuYW1lLlxuICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuZnJvbVBvc2l0aW9uIC0gU3RhcnRpbmcgcG9zaXRpb24gKGluY2x1c2l2ZSkuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MudG9Qb3NpdGlvbl0gLSBFbmRpbmcgcG9zaXRpb24gKGV4Y2x1c2l2ZSkuXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gW2FyZ3Muc2NvcGVWYWx1ZV0gLSBFeHBsaWNpdCBzY29wZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBbYXJncy5leGNsdWRlUmVjb3JkSWRdIC0gUmVjb3JkIGlkIHRvIGV4Y2x1ZGUgZnJvbSBzaGlmdHMuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2hpZnRQb3NpdGlvbnNVcCh7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIGZyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbiwgc2NvcGVWYWx1ZSwgZXhjbHVkZVJlY29yZElkfSkge1xuICBjb25zdCBtb2RlbENsYXNzID0gLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAqLyAocmVjb3JkLmNvbnN0cnVjdG9yKVxuICBjb25zdCBjb25uZWN0aW9uID0gbW9kZWxDbGFzcy5jb25uZWN0aW9uKClcbiAgY29uc3QgdGFibGVOYW1lID0gbW9kZWxDbGFzcy5fZ2V0VGFibGUoKS5nZXROYW1lKClcbiAgY29uc3QgcmVzb2x2ZWRTY29wZVZhbHVlID0gc2NvcGVWYWx1ZSAhPSBudWxsID8gc2NvcGVWYWx1ZSA6IHJlc29sdmVTY29wZVZhbHVlKHJlY29yZCwgc2NvcGUpXG4gIGNvbnN0IHNjb3BlQ29sdW1uTmFtZSA9IG1vZGVsQ2xhc3MuZ2V0Q29sdW1uTmFtZUZvckF0dHJpYnV0ZU5hbWUoc2NvcGUpXG5cbiAgaWYgKHJlc29sdmVkU2NvcGVWYWx1ZSA9PSBudWxsKSByZXR1cm5cblxuICBjb25zdCBwb3NpdGlvbkNvbHVtbk5hbWUgPSBtb2RlbENsYXNzLmdldENvbHVtbk5hbWVGb3JBdHRyaWJ1dGVOYW1lKHBvc2l0aW9uQ29sdW1uKVxuICBjb25zdCBwb3NpdGlvbkNvbHVtblNxbCA9IGNvbm5lY3Rpb24ucXVvdGVDb2x1bW4ocG9zaXRpb25Db2x1bW5OYW1lKVxuICBjb25zdCBzY29wZUNvbHVtblNxbCA9IGNvbm5lY3Rpb24ucXVvdGVDb2x1bW4oc2NvcGVDb2x1bW5OYW1lKVxuICBjb25zdCBwcmltYXJ5S2V5U3FsID0gY29ubmVjdGlvbi5xdW90ZUNvbHVtbihtb2RlbENsYXNzLnByaW1hcnlLZXkoKSlcbiAgY29uc3QgdGFibGVTcWwgPSBjb25uZWN0aW9uLnF1b3RlVGFibGUodGFibGVOYW1lKVxuICBjb25zdCBxdW90ZWRTY29wZSA9IGNvbm5lY3Rpb24ucXVvdGUocmVzb2x2ZWRTY29wZVZhbHVlKVxuXG4gIC8vIExvYWQgcm93cyBpbiBkZXNjZW5kaW5nIG9yZGVyIHNvIHdlIGJ1bXAgdGhlIGhpZ2hlc3QgZmlyc3RcbiAgbGV0IHF1ZXJ5ID0gbW9kZWxDbGFzc1xuICAgIC5zZWxlY3QobW9kZWxDbGFzcy5wcmltYXJ5S2V5KCkpXG4gICAgLnNlbGVjdChwb3NpdGlvbkNvbHVtbilcbiAgICAud2hlcmUoe1tzY29wZUNvbHVtbk5hbWVdOiByZXNvbHZlZFNjb3BlVmFsdWV9KVxuICAgIC53aGVyZShgJHtwb3NpdGlvbkNvbHVtblNxbH0gPj0gJHtjb25uZWN0aW9uLnF1b3RlKGZyb21Qb3NpdGlvbil9YClcbiAgICAud2hlcmUoYCR7cG9zaXRpb25Db2x1bW5TcWx9ID4gMGApXG4gICAgLm9yZGVyKGAke3Bvc2l0aW9uQ29sdW1uU3FsfSBERVNDYClcblxuICBjb25zdCByZWNvcmRJZFRvRXhjbHVkZSA9IGV4Y2x1ZGVSZWNvcmRJZCB8fCAocmVjb3JkLmlzUGVyc2lzdGVkKCkgPyByZWNvcmQuaWQoKSA6IG51bGwpXG5cbiAgaWYgKHJlY29yZElkVG9FeGNsdWRlICE9IG51bGwpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5LndoZXJlKGAke3ByaW1hcnlLZXlTcWx9ICE9ICR7Y29ubmVjdGlvbi5xdW90ZShyZWNvcmRJZFRvRXhjbHVkZSl9YClcbiAgfVxuXG4gIGlmICh0b1Bvc2l0aW9uICE9IG51bGwpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5LndoZXJlKGAke3Bvc2l0aW9uQ29sdW1uU3FsfSA8ICR7Y29ubmVjdGlvbi5xdW90ZSh0b1Bvc2l0aW9uKX1gKVxuICB9XG5cbiAgY29uc3Qgcm93cyA9IGF3YWl0IHF1ZXJ5LnRvQXJyYXkoKVxuXG4gIHNldFNoaWZ0aW5nRmxhZyhyZWNvcmQsIHRydWUpXG5cbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICBjb25zdCBjdXJyZW50UG9zID0gTnVtYmVyKHJvdy5yZWFkQXR0cmlidXRlKHBvc2l0aW9uQ29sdW1uKSlcblxuICAgICAgYXdhaXQgY29ubmVjdGlvbi5xdWVyeShcbiAgICAgICAgYFVQREFURSAke3RhYmxlU3FsfSBTRVQgJHtwb3NpdGlvbkNvbHVtblNxbH0gPSAke3Bvc2l0aW9uQ29sdW1uU3FsfSArIDEgV0hFUkUgJHtwcmltYXJ5S2V5U3FsfSA9ICR7Y29ubmVjdGlvbi5xdW90ZShyb3cuaWQoKSl9IEFORCAke3Njb3BlQ29sdW1uU3FsfSA9ICR7cXVvdGVkU2NvcGV9IEFORCAke3Bvc2l0aW9uQ29sdW1uU3FsfSA9ICR7Y29ubmVjdGlvbi5xdW90ZShjdXJyZW50UG9zKX1gXG4gICAgICApXG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHNldFNoaWZ0aW5nRmxhZyhyZWNvcmQsIGZhbHNlKVxuICB9XG59XG5cbi8qKlxuICogQnVtcHMgcG9zaXRpb25zIERPV04gYnkgMSBpbiB0aGUgcmFuZ2UgW2Zyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbikgd2l0aGluXG4gKiB0aGUgc2FtZSBzY29wZS4gVXBkYXRlcyBpbiBhc2NlbmRpbmcgb3JkZXIgdG8gYXZvaWQgaW50ZXJtZWRpYXRlIFVOSVFVRVxuICogY29uc3RyYWludCB2aW9sYXRpb25zLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5yZWNvcmQgLSBUaGUgbW9kZWwgaW5zdGFuY2Ugd2hvc2Ugc2NvcGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnBvc2l0aW9uQ29sdW1uIC0gY2FtZWxDYXNlIHBvc2l0aW9uIGF0dHJpYnV0ZSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muc2NvcGUgLSBjYW1lbENhc2Ugc2NvcGUgYXR0cmlidXRlIG5hbWUuXG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5mcm9tUG9zaXRpb24gLSBTdGFydGluZyBwb3NpdGlvbiAoaW5jbHVzaXZlKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy50b1Bvc2l0aW9uXSAtIEVuZGluZyBwb3NpdGlvbiAoZXhjbHVzaXZlKS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBbYXJncy5zY29wZVZhbHVlXSAtIEV4cGxpY2l0IHNjb3BlIHZhbHVlLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNoaWZ0UG9zaXRpb25zRG93bih7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIGZyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbiwgc2NvcGVWYWx1ZX0pIHtcbiAgY29uc3QgbW9kZWxDbGFzcyA9IC8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gKi8gKHJlY29yZC5jb25zdHJ1Y3RvcilcbiAgY29uc3QgY29ubmVjdGlvbiA9IG1vZGVsQ2xhc3MuY29ubmVjdGlvbigpXG4gIGNvbnN0IHRhYmxlTmFtZSA9IG1vZGVsQ2xhc3MuX2dldFRhYmxlKCkuZ2V0TmFtZSgpXG4gIGNvbnN0IHJlc29sdmVkU2NvcGVWYWx1ZSA9IHNjb3BlVmFsdWUgIT0gbnVsbCA/IHNjb3BlVmFsdWUgOiByZXNvbHZlU2NvcGVWYWx1ZShyZWNvcmQsIHNjb3BlKVxuICBjb25zdCBzY29wZUNvbHVtbk5hbWUgPSBtb2RlbENsYXNzLmdldENvbHVtbk5hbWVGb3JBdHRyaWJ1dGVOYW1lKHNjb3BlKVxuXG4gIGlmIChyZXNvbHZlZFNjb3BlVmFsdWUgPT0gbnVsbCkgcmV0dXJuXG5cbiAgY29uc3QgcG9zaXRpb25Db2x1bW5OYW1lID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lRm9yQXR0cmlidXRlTmFtZShwb3NpdGlvbkNvbHVtbilcbiAgY29uc3QgcG9zaXRpb25Db2x1bW5TcWwgPSBjb25uZWN0aW9uLnF1b3RlQ29sdW1uKHBvc2l0aW9uQ29sdW1uTmFtZSlcbiAgY29uc3Qgc2NvcGVDb2x1bW5TcWwgPSBjb25uZWN0aW9uLnF1b3RlQ29sdW1uKHNjb3BlQ29sdW1uTmFtZSlcbiAgY29uc3QgcHJpbWFyeUtleVNxbCA9IGNvbm5lY3Rpb24ucXVvdGVDb2x1bW4obW9kZWxDbGFzcy5wcmltYXJ5S2V5KCkpXG4gIGNvbnN0IHRhYmxlU3FsID0gY29ubmVjdGlvbi5xdW90ZVRhYmxlKHRhYmxlTmFtZSlcbiAgY29uc3QgcXVvdGVkU2NvcGUgPSBjb25uZWN0aW9uLnF1b3RlKHJlc29sdmVkU2NvcGVWYWx1ZSlcblxuICAvLyBMb2FkIHJvd3MgaW4gYXNjZW5kaW5nIG9yZGVyIHNvIHdlIHNoaWZ0IHRoZSBsb3dlc3QgZ2FwIGZpcnN0XG4gIGxldCBxdWVyeSA9IG1vZGVsQ2xhc3NcbiAgICAuc2VsZWN0KG1vZGVsQ2xhc3MucHJpbWFyeUtleSgpKVxuICAgIC5zZWxlY3QocG9zaXRpb25Db2x1bW4pXG4gICAgLndoZXJlKHtbc2NvcGVDb2x1bW5OYW1lXTogcmVzb2x2ZWRTY29wZVZhbHVlfSlcbiAgICAud2hlcmUoYCR7cG9zaXRpb25Db2x1bW5TcWx9ID49ICR7Y29ubmVjdGlvbi5xdW90ZShmcm9tUG9zaXRpb24pfWApXG4gICAgLndoZXJlKGAke3Bvc2l0aW9uQ29sdW1uU3FsfSA+IDBgKVxuICAgIC53aGVyZShgJHtwcmltYXJ5S2V5U3FsfSAhPSAke2Nvbm5lY3Rpb24ucXVvdGUocmVjb3JkLmlkKCkpfWApXG4gICAgLm9yZGVyKHtjb2x1bW46IHBvc2l0aW9uQ29sdW1uTmFtZSwgZGlyZWN0aW9uOiBcIkFTQ1wifSlcblxuICBpZiAodG9Qb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgcXVlcnkgPSBxdWVyeS53aGVyZShgJHtwb3NpdGlvbkNvbHVtblNxbH0gPCAke2Nvbm5lY3Rpb24ucXVvdGUodG9Qb3NpdGlvbil9YClcbiAgfVxuXG4gIGNvbnN0IHJvd3MgPSBhd2FpdCBxdWVyeS50b0FycmF5KClcblxuICBzZXRTaGlmdGluZ0ZsYWcocmVjb3JkLCB0cnVlKVxuXG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgY29uc3QgY3VycmVudFBvcyA9IE51bWJlcihyb3cucmVhZEF0dHJpYnV0ZShwb3NpdGlvbkNvbHVtbikpXG5cbiAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoXG4gICAgICAgIGBVUERBVEUgJHt0YWJsZVNxbH0gU0VUICR7cG9zaXRpb25Db2x1bW5TcWx9ID0gJHtwb3NpdGlvbkNvbHVtblNxbH0gLSAxIFdIRVJFICR7cHJpbWFyeUtleVNxbH0gPSAke2Nvbm5lY3Rpb24ucXVvdGUocm93LmlkKCkpfSBBTkQgJHtzY29wZUNvbHVtblNxbH0gPSAke3F1b3RlZFNjb3BlfSBBTkQgJHtwb3NpdGlvbkNvbHVtblNxbH0gPSAke2Nvbm5lY3Rpb24ucXVvdGUoY3VycmVudFBvcyl9YFxuICAgICAgKVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzZXRTaGlmdGluZ0ZsYWcocmVjb3JkLCBmYWxzZSlcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGhpZ2hlc3QgY3VycmVudCBwb3NpdGlvbiB2YWx1ZSBpbiB0aGUgcmVjb3JkJ3Mgc2NvcGUuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlY29yZCAtIFRoZSBtb2RlbCBpbnN0YW5jZSB3aG9zZSBzY29wZSBpcyB0aGUgc291cmNlIG9mIHRydXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucG9zaXRpb25Db2x1bW4gLSBjYW1lbENhc2UgcG9zaXRpb24gYXR0cmlidXRlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zY29wZSAtIGNhbWVsQ2FzZSBzY29wZSBhdHRyaWJ1dGUgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBbYXJncy5zY29wZVZhbHVlXSAtIEV4cGxpY2l0IHNjb3BlIHZhbHVlLlxuICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gLSBIaWdoZXN0IHBvc2l0aW9uIGluIHNjb3BlLCBvciAwIHdoZW4gc2NvcGUgaXMgZW1wdHkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhpZ2hlc3RQb3NpdGlvbkluU2NvcGUoe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlLCBzY29wZVZhbHVlfSkge1xuICBjb25zdCBtb2RlbENsYXNzID0gLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAqLyAocmVjb3JkLmNvbnN0cnVjdG9yKVxuICBjb25zdCBjb25uZWN0aW9uID0gbW9kZWxDbGFzcy5jb25uZWN0aW9uKClcbiAgY29uc3Qgc2NvcGVDb2x1bW5OYW1lID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lRm9yQXR0cmlidXRlTmFtZShzY29wZSlcbiAgY29uc3QgcG9zaXRpb25Db2x1bW5OYW1lID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lRm9yQXR0cmlidXRlTmFtZShwb3NpdGlvbkNvbHVtbilcbiAgY29uc3QgcG9zaXRpb25Db2x1bW5TcWwgPSBjb25uZWN0aW9uLnF1b3RlQ29sdW1uKHBvc2l0aW9uQ29sdW1uTmFtZSlcbiAgY29uc3QgcmVzb2x2ZWRTY29wZVZhbHVlID0gc2NvcGVWYWx1ZSAhPSBudWxsID8gc2NvcGVWYWx1ZSA6IHJlc29sdmVTY29wZVZhbHVlKHJlY29yZCwgc2NvcGUpXG5cbiAgaWYgKHJlc29sdmVkU2NvcGVWYWx1ZSA9PSBudWxsKSByZXR1cm4gMFxuXG4gIGNvbnN0IHJvd3MgPSBhd2FpdCBtb2RlbENsYXNzXG4gICAgLnNlbGVjdChwb3NpdGlvbkNvbHVtbilcbiAgICAud2hlcmUoe1tzY29wZUNvbHVtbk5hbWVdOiByZXNvbHZlZFNjb3BlVmFsdWV9KVxuICAgIC5vcmRlcihgJHtwb3NpdGlvbkNvbHVtblNxbH0gREVTQ2ApXG4gICAgLmxpbWl0KDEpXG4gICAgLnRvQXJyYXkoKVxuXG4gIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICByZXR1cm4gTnVtYmVyKHJvd3NbMF0ucmVhZEF0dHJpYnV0ZShwb3NpdGlvbkNvbHVtbikpIHx8IDBcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhIHNjb3BlIHZhbHVlIGZyb20gdGhlIGF0dHJpYnV0ZSBzdG9yZSBmaXJzdCwgdGhlbiBmYWxscyBiYWNrXG4gKiB0byB0aGUgbG9hZGVkIGJlbG9uZ3NUbyByZWxhdGlvbnNoaXAuIFRoaXMgaXMgbmVlZGVkIGR1cmluZyBiZWZvcmVDcmVhdGVcbiAqIGJlY2F1c2UgdGhlIEZLIGF0dHJpYnV0ZSBtYXkgbm90IGJlIHNldCB1bnRpbCBfY3JlYXRlTmV3UmVjb3JkIGZsdXNoZXNcbiAqIF9iZWxvbmdzVG9DaGFuZ2VzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IHJlY29yZCAtIE1vZGVsIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlIC0gY2FtZWxDYXNlIHNjb3BlIGF0dHJpYnV0ZSBuYW1lIChlLmcuIFwicHJvamVjdElkXCIpLlxuICogQHJldHVybnMge3N0cmluZyB8IG51bWJlciB8IG51bGx9IC0gQ3VycmVudCBsaXN0IHBvc2l0aW9uIHZhbHVlLlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVWYWx1ZShyZWNvcmQsIHNjb3BlKSB7XG4gIGNvbnN0IGF0dHJWYWx1ZSA9IHJlY29yZC5yZWFkQXR0cmlidXRlKHNjb3BlKVxuXG4gIGlmIChhdHRyVmFsdWUgIT0gbnVsbCkgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAoYXR0clZhbHVlKVxuXG4gIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9ICovIChyZWNvcmQuY29uc3RydWN0b3IpXG4gIGNvbnN0IHJlbGF0aW9uc2hpcHMgPSBtb2RlbENsYXNzLmdldFJlbGF0aW9uc2hpcHNNYXAoKVxuICBjb25zdCBzY29wZUNvbHVtbk5hbWUgPSBtb2RlbENsYXNzLmdldENvbHVtbk5hbWVGb3JBdHRyaWJ1dGVOYW1lKHNjb3BlKVxuXG4gIGZvciAoY29uc3QgcmVsYXRpb25zaGlwTmFtZSBpbiByZWxhdGlvbnNoaXBzKSB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwc1tyZWxhdGlvbnNoaXBOYW1lXVxuXG4gICAgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlPy4oKSAhPT0gXCJiZWxvbmdzVG9cIikgY29udGludWVcblxuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSByZWxhdGlvbnNoaXAuZ2V0Rm9yZWlnbktleSgpXG5cbiAgICBpZiAoZm9yZWlnbktleSAhPT0gc2NvcGVDb2x1bW5OYW1lKSBjb250aW51ZVxuXG4gICAgY29uc3QgaW5zdGFuY2VSZWxhdGlvbnNoaXAgPSByZWNvcmQuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHJlbGF0aW9uc2hpcE5hbWUpXG4gICAgY29uc3QgbG9hZGVkID0gaW5zdGFuY2VSZWxhdGlvbnNoaXAubG9hZGVkKClcblxuICAgIGlmIChsb2FkZWQgJiYgIUFycmF5LmlzQXJyYXkobG9hZGVkKSAmJiB0eXBlb2YgbG9hZGVkLmlkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBsb2FkZWQuaWQoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogTW92ZXMgdGhlIHJlY29yZCB0byBhIHRlbXBvcmFyeSBwb3NpdGlvbiBvdXRzaWRlIHRoZSBub3JtYWwgcmFuZ2Ugc29cbiAqIHRoYXQgc3Vycm91bmRpbmcgcG9zaXRpb24gc2hpZnRzIGRvIG5vdCBoaXQgdW5pcXVlIGNvbnN0cmFpbnQgdmlvbGF0aW9ucy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVjb3JkIC0gTW9kZWwgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wb3NpdGlvbkNvbHVtbiAtIGNhbWVsQ2FzZSBwb3NpdGlvbiBhdHRyaWJ1dGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zY29wZSAtIGNhbWVsQ2FzZSBzY29wZSBhdHRyaWJ1dGUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG51bGx9IFthcmdzLnNjb3BlVmFsdWVdIC0gU2NvcGUgY29udGFpbmluZyB0aGUgcmVjb3JkIGJlZm9yZSBtb3ZlLW91dC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0gW2FyZ3MudGFyZ2V0U2NvcGVWYWx1ZV0gLSBUZW1wb3Jhcnkgc2NvcGUgdmFsdWUgdG8gYXNzaWduLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG1vdmVPdXRPZldheSh7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIHNjb3BlVmFsdWUsIHRhcmdldFNjb3BlVmFsdWV9KSB7XG4gIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9ICovIChyZWNvcmQuY29uc3RydWN0b3IpXG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBtb2RlbENsYXNzLmNvbm5lY3Rpb24oKVxuICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbENsYXNzLl9nZXRUYWJsZSgpLmdldE5hbWUoKVxuICBjb25zdCByZXNvbHZlZFNjb3BlVmFsdWUgPSBzY29wZVZhbHVlICE9IG51bGwgPyBzY29wZVZhbHVlIDogcmVzb2x2ZVNjb3BlVmFsdWUocmVjb3JkLCBzY29wZSlcbiAgY29uc3QgcmVzb2x2ZWRUYXJnZXRTY29wZVZhbHVlID0gdGFyZ2V0U2NvcGVWYWx1ZSAhPSBudWxsID8gdGFyZ2V0U2NvcGVWYWx1ZSA6IHJlc29sdmVkU2NvcGVWYWx1ZVxuXG4gIGlmIChyZXNvbHZlZFNjb3BlVmFsdWUgPT0gbnVsbCkgcmV0dXJuXG4gIGlmIChyZXNvbHZlZFRhcmdldFNjb3BlVmFsdWUgPT0gbnVsbCkgcmV0dXJuXG5cbiAgY29uc3QgdGVtcFBvc2l0aW9uID0gLXJlY29yZC5pZCgpXG4gIGNvbnN0IHBvc2l0aW9uQ29sdW1uU3FsID0gY29ubmVjdGlvbi5xdW90ZUNvbHVtbihtb2RlbENsYXNzLmdldENvbHVtbk5hbWVGb3JBdHRyaWJ1dGVOYW1lKHBvc2l0aW9uQ29sdW1uKSlcbiAgY29uc3Qgc2NvcGVDb2x1bW5TcWwgPSBjb25uZWN0aW9uLnF1b3RlQ29sdW1uKG1vZGVsQ2xhc3MuZ2V0Q29sdW1uTmFtZUZvckF0dHJpYnV0ZU5hbWUoc2NvcGUpKVxuICBjb25zdCB0YWJsZVNxbCA9IGNvbm5lY3Rpb24ucXVvdGVUYWJsZSh0YWJsZU5hbWUpXG4gIGNvbnN0IHBrU3FsID0gY29ubmVjdGlvbi5xdW90ZUNvbHVtbihcImlkXCIpXG5cbiAgc2V0U2hpZnRpbmdGbGFnKHJlY29yZCwgdHJ1ZSlcblxuICB0cnkge1xuICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoXG4gICAgICBgVVBEQVRFICR7dGFibGVTcWx9IFNFVCAke3Njb3BlQ29sdW1uU3FsfSA9ICR7Y29ubmVjdGlvbi5xdW90ZShyZXNvbHZlZFRhcmdldFNjb3BlVmFsdWUpfSwgJHtwb3NpdGlvbkNvbHVtblNxbH0gPSAke2Nvbm5lY3Rpb24ucXVvdGUodGVtcFBvc2l0aW9uKX0gV0hFUkUgJHtzY29wZUNvbHVtblNxbH0gPSAke2Nvbm5lY3Rpb24ucXVvdGUocmVzb2x2ZWRTY29wZVZhbHVlKX0gQU5EICR7cGtTcWx9ID0gJHtjb25uZWN0aW9uLnF1b3RlKHJlY29yZC5pZCgpKX1gXG4gICAgKVxuICB9IGZpbmFsbHkge1xuICAgIC8vIERvbid0IGNsZWFyIHRoZSBmbGFnIGhlcmUg4oCUIHRoZSBjYWxsZXIgd2lsbCBkbyB0aGF0IGFmdGVyIHNoaWZ0c1xuICB9XG59XG4iXX0=
379
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0cy1hcy1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3JlY29yZC9hY3RzLWFzLWxpc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLDJFQUEyRTtBQUUzRTs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0FBRTFEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSztJQUNwQyxtREFBbUQ7SUFDbkQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsS0FBSyxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxVQUFVLENBQUMsTUFBTTtJQUN4QixtREFBbUQ7SUFDbkQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQTtBQUMvQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsT0FBTyxVQUFVLDJCQUEyQixDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsRUFBQyxLQUFLLEVBQUM7SUFDckYsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdkMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTTtRQUU5QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRXJELElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLHNCQUFzQixDQUFDLEVBQUMsUUFBUSxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUE7WUFDbEQsTUFBTSxnQkFBZ0IsQ0FBQyxFQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO1FBQ2pGLENBQUM7YUFBTSxDQUFDO1lBQ04s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QVUsRUFBRSxDQUFBO0lBQzFDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNsRCxNQUFNLGtCQUFrQixHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBRTdGLElBQUksa0JBQWtCLElBQUksSUFBSTtRQUFFLE9BQU07SUFFdEMsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFBO0lBQzFHLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDOUYsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNqRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBRTdELGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFFN0IsSUFBSSxDQUFDO1FBQ0gsTUFBTSxVQUFVLENBQUMsS0FBSyxDQUNwQixVQUFVLFFBQVEsUUFBUSxpQkFBaUIsT0FBTyxpQkFBaUIsVUFBVSxjQUFjLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEtBQUssTUFBTSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQ3hMLENBQUE7SUFDSCxDQUFDO1lBQVMsQ0FBQztRQUNULG1FQUFtRTtJQUNyRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKiogQGZpbGUgUmVnaXN0ZXJzIGdhcC1sZXNzIHBvc2l0aW9uYWwgbGlzdCBjYWxsYmFja3Mgb24gYSBtb2RlbCBjbGFzcy4gKi9cblxuLyoqXG4gKiBBY3RzIGFzIGxpc3Qgc2hpZnRpbmcuXG4gKiBAdHlwZSB7c3ltYm9sfSAtIEd1YXJkIGZsYWcgc2V0IG9uIHRoZSBtb2RlbCBpbnN0YW5jZSBkdXJpbmcgc2hpZnQgb3BlcmF0aW9ucyB0byBwcmV2ZW50IHJlLWVudHJhbnQgbGlmZWN5Y2xlIGhvb2tzLlxuICovXG5jb25zdCBBQ1RTX0FTX0xJU1RfU0hJRlRJTkcgPSBTeW1ib2woXCJhY3RzQXNMaXN0U2hpZnRpbmdcIilcblxuLyoqXG4gKiBSdW5zIHNldCBzaGlmdGluZyBmbGFnLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IHJlY29yZCAtIE1vZGVsIGluc3RhbmNlLlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSAtIEZsYWcgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHNldFNoaWZ0aW5nRmxhZyhyZWNvcmQsIHZhbHVlKSB7XG4gIC8vIEB0cy1pZ25vcmUgLSBTeW1ib2wgaW5kZXhpbmcgb24gUmVjb3JkIGluc3RhbmNlc1xuICByZWNvcmRbQUNUU19BU19MSVNUX1NISUZUSU5HXSA9IHZhbHVlXG59XG5cbi8qKlxuICogUnVucyBpcyBzaGlmdGluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSByZWNvcmQgLSBNb2RlbCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgbGlzdCBwb3NpdGlvbnMgYXJlIGN1cnJlbnRseSBzaGlmdGluZy5cbiAqL1xuZnVuY3Rpb24gaXNTaGlmdGluZyhyZWNvcmQpIHtcbiAgLy8gQHRzLWlnbm9yZSAtIFN5bWJvbCBpbmRleGluZyBvbiBSZWNvcmQgaW5zdGFuY2VzXG4gIHJldHVybiBCb29sZWFuKHJlY29yZFtBQ1RTX0FTX0xJU1RfU0hJRlRJTkddKVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBnYXAtbGVzcyBwb3NpdGlvbmFsIGxpc3QgY2FsbGJhY2tzIG9uIGEgbW9kZWwgY2xhc3MgdG8gbWFpbnRhaW5cbiAqIGEgZ2FwLWxlc3MgcG9zaXRpb25hbCBsaXN0LiBXaGVuIGEgcmVjb3JkIGlzIGluc2VydGVkLCB1cGRhdGVkLCBvclxuICogZGVzdHJveWVkLCB0aGUgc3Vycm91bmRpbmcgcG9zaXRpb25zIGFyZSBzaGlmdGVkIHNvIHRoZSBsaXN0IHN0YXlzIGNvbXBhY3RcbiAqICgxLDIsMywuLi4pIGFuZCBzY29wZWQgd2l0aGluIHRoZSBnaXZlbiBjb2x1bW4uXG4gKlxuICogQ2FsbGVycyBtdXN0IGFsc28gZW5zdXJlIGEgVU5JUVVFIGluZGV4IG9uIChzY29wZUNvbHVtbiwgcG9zaXRpb25Db2x1bW4pXG4gKiBleGlzdHMgaW4gdGhlIGRhdGFiYXNlIHNjaGVtYSDigJQgdXNlIGBNaWdyYXRpb24uYWRkQWN0c0FzTGlzdCgpYCBmb3IgdGhlXG4gKiBjb3JyZXNwb25kaW5nIHNjaGVtYSBzZXR1cC5cbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWxDbGFzcyAtIFRoZSBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3NpdGlvbkNvbHVtbiAtIGNhbWVsQ2FzZSBuYW1lIG9mIHRoZSBwb3NpdGlvbiBhdHRyaWJ1dGUgKGUuZy4gXCJyb3dOdW1iZXJcIikuXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5zY29wZSAtIGNhbWVsQ2FzZSBuYW1lIG9mIHRoZSBzY29wZSBhdHRyaWJ1dGUgKGUuZy4gXCJib2FyZENvbHVtbklkXCIpLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyQWN0c0FzTGlzdENhbGxiYWNrcyhtb2RlbENsYXNzLCBwb3NpdGlvbkNvbHVtbiwge3Njb3BlfSkge1xuICBtb2RlbENsYXNzLmJlZm9yZUNyZWF0ZShhc3luYyAocmVjb3JkKSA9PiB7XG4gICAgaWYgKGlzU2hpZnRpbmcocmVjb3JkKSkgcmV0dXJuXG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHJlY29yZC5yZWFkQXR0cmlidXRlKHBvc2l0aW9uQ29sdW1uKVxuXG4gICAgaWYgKHBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgIGFzc2VydFBvc2l0aXZlUG9zaXRpb24oe3Bvc2l0aW9uLCBwb3NpdGlvbkNvbHVtbn0pXG4gICAgICBhd2FpdCBzaGlmdFBvc2l0aW9uc1VwKHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZSwgZnJvbVBvc2l0aW9uOiBwb3NpdGlvbn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGF3YWl0IGhpZ2hlc3RQb3NpdGlvbkluU2NvcGUoe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlfSlcblxuICAgICAgcmVjb3JkLnNldEF0dHJpYnV0ZShwb3NpdGlvbkNvbHVtbiwgbmV4dFBvc2l0aW9uICsgMSlcbiAgICB9XG4gIH0pXG5cbiAgbW9kZWxDbGFzcy5iZWZvcmVVcGRhdGUoYXN5bmMgKHJlY29yZCkgPT4ge1xuICAgIGlmIChpc1NoaWZ0aW5nKHJlY29yZCkpIHJldHVyblxuICAgIGlmICghcmVjb3JkLmlzUGVyc2lzdGVkKCkpIHJldHVyblxuXG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IC8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gKi8gKHJlY29yZC5jb25zdHJ1Y3RvcilcbiAgICBjb25zdCBwb3NDb2x1bW4gPSBtb2RlbENsYXNzLmdldENvbHVtbk5hbWVGb3JBdHRyaWJ1dGVOYW1lKHBvc2l0aW9uQ29sdW1uKVxuICAgIGNvbnN0IHNjb3BlQ29sID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lRm9yQXR0cmlidXRlTmFtZShzY29wZSlcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGNvbnN0IHJhd0F0dHJpYnV0ZXMgPSByZWNvcmQuX2F0dHJpYnV0ZXMgfHwge31cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGNvbnN0IGNoYW5nZXMgPSByZWNvcmQuX2NoYW5nZXMgfHwge31cbiAgICAvKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGFzc2lnbmVkQXR0cmlidXRlTmFtZXMgPSByZWNvcmQuX2Fzc2lnbmVkQXR0cmlidXRlTmFtZXMgfHwgbmV3IFNldCgpXG4gICAgY29uc3QgcG9zQ2hhbmdlZCA9IHBvc0NvbHVtbiBpbiBjaGFuZ2VzXG4gICAgY29uc3Qgc2NvcGVDaGFuZ2VkID0gc2NvcGVDb2wgaW4gY2hhbmdlc1xuICAgIGNvbnN0IHBvc0Fzc2lnbmVkID0gYXNzaWduZWRBdHRyaWJ1dGVOYW1lcy5oYXMocG9zaXRpb25Db2x1bW4pXG5cbiAgICBpZiAoIXBvc0NoYW5nZWQgJiYgIXNjb3BlQ2hhbmdlZCkgcmV0dXJuXG5cbiAgICBhc3NlcnRQb3NpdGl2ZVBvc2l0aW9uKHtcbiAgICAgIHBvc2l0aW9uOiByYXdBdHRyaWJ1dGVzW3Bvc0NvbHVtbl0sXG4gICAgICBwb3NpdGlvbkNvbHVtbixcbiAgICAgIHBlcnNpc3RlZDogdHJ1ZVxuICAgIH0pXG5cbiAgICBjb25zdCBvbGRQb3NpdGlvbiA9IHBvc0NoYW5nZWQgPyAvKiogQHR5cGUge251bWJlcn0gKi8gKHJhd0F0dHJpYnV0ZXNbcG9zQ29sdW1uXSkgOiAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlY29yZC5yZWFkQXR0cmlidXRlKHBvc2l0aW9uQ29sdW1uKSlcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IHBvc0NoYW5nZWQgPyAvKiogQHR5cGUge251bWJlcn0gKi8gKGNoYW5nZXNbcG9zQ29sdW1uXSkgOiAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlY29yZC5yZWFkQXR0cmlidXRlKHBvc2l0aW9uQ29sdW1uKSlcbiAgICBjb25zdCBvbGRTY29wZVZhbHVlID0gc2NvcGVDaGFuZ2VkID8gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChyYXdBdHRyaWJ1dGVzW3Njb3BlQ29sXSkgOiAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlY29yZC5yZWFkQXR0cmlidXRlKHNjb3BlKSlcbiAgICBjb25zdCBuZXdTY29wZVZhbHVlID0gc2NvcGVDaGFuZ2VkID8gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChjaGFuZ2VzW3Njb3BlQ29sXSkgOiAvKiogQHR5cGUge251bWJlcn0gKi8gKHJlY29yZC5yZWFkQXR0cmlidXRlKHNjb3BlKSlcblxuICAgIGFzc2VydFBvc2l0aXZlUG9zaXRpb24oe3Bvc2l0aW9uOiBuZXdQb3NpdGlvbiwgcG9zaXRpb25Db2x1bW59KVxuICAgIGlmIChvbGRQb3NpdGlvbiA9PSBudWxsKSByZXR1cm5cbiAgICBpZiAobmV3UG9zaXRpb24gPT09IG9sZFBvc2l0aW9uICYmIG5ld1Njb3BlVmFsdWUgPT09IG9sZFNjb3BlVmFsdWUpIHJldHVyblxuXG4gICAgaWYgKHNjb3BlQ2hhbmdlZCAmJiBvbGRTY29wZVZhbHVlICE9PSBuZXdTY29wZVZhbHVlKSB7XG4gICAgICAvLyBXaGVuIG9ubHkgdGhlIHNjb3BlIGNoYW5nZXMgd2l0aG91dCBhIG5ldyBwb3NpdGlvbiwgYXBwZW5kIHRvIHRoZSBlbmRcbiAgICAgIC8vIG9mIHRoZSBuZXcgc2NvcGUuIFRoZXJlIGlzIG5vIHRhcmdldC1zY29wZSByb3cgdG8gc2hpZnQgb3V0IG9mIHRoZSB3YXkuXG4gICAgICBpZiAoIXBvc0Fzc2lnbmVkKSB7XG4gICAgICAgIGF3YWl0IG1vdmVPdXRPZldheSh7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIHNjb3BlVmFsdWU6IG9sZFNjb3BlVmFsdWV9KVxuICAgICAgICBzZXRTaGlmdGluZ0ZsYWcocmVjb3JkLCBmYWxzZSlcblxuICAgICAgICBjb25zdCBoaWdoZXN0TmV3ID0gYXdhaXQgaGlnaGVzdFBvc2l0aW9uSW5TY29wZSh7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIHNjb3BlVmFsdWU6IG5ld1Njb3BlVmFsdWV9KVxuICAgICAgICBjb25zdCBuZXh0UG9zID0gaGlnaGVzdE5ldyArIDFcblxuICAgICAgICByZWNvcmQuc2V0QXR0cmlidXRlKHBvc2l0aW9uQ29sdW1uLCBuZXh0UG9zKVxuICAgICAgICBhd2FpdCBzaGlmdFBvc2l0aW9uc0Rvd24oe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlLCBzY29wZVZhbHVlOiBvbGRTY29wZVZhbHVlLCBmcm9tUG9zaXRpb246IG9sZFBvc2l0aW9uICsgMX0pXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBhd2FpdCBtb3ZlT3V0T2ZXYXkoe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlLCBzY29wZVZhbHVlOiBvbGRTY29wZVZhbHVlfSlcbiAgICAgIHNldFNoaWZ0aW5nRmxhZyhyZWNvcmQsIGZhbHNlKVxuICAgICAgYXdhaXQgc2hpZnRQb3NpdGlvbnNEb3duKHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZSwgc2NvcGVWYWx1ZTogb2xkU2NvcGVWYWx1ZSwgZnJvbVBvc2l0aW9uOiBvbGRQb3NpdGlvbiArIDF9KVxuICAgICAgYXdhaXQgc2hpZnRQb3NpdGlvbnNVcCh7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIHNjb3BlVmFsdWU6IG5ld1Njb3BlVmFsdWUsIGZyb21Qb3NpdGlvbjogbmV3UG9zaXRpb24sIGV4Y2x1ZGVSZWNvcmRJZDogcmVjb3JkLmlkKCl9KVxuICAgICAgYXdhaXQgcGxhY2VNb3ZlZFJlY29yZCh7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIHNjb3BlVmFsdWU6IG5ld1Njb3BlVmFsdWUsIHBvc2l0aW9uOiBuZXdQb3NpdGlvbn0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhd2FpdCBtb3ZlT3V0T2ZXYXkoe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlLCBzY29wZVZhbHVlOiBvbGRTY29wZVZhbHVlfSlcbiAgICBzZXRTaGlmdGluZ0ZsYWcocmVjb3JkLCBmYWxzZSlcblxuICAgIGlmIChuZXdQb3NpdGlvbiA8IG9sZFBvc2l0aW9uKSB7XG4gICAgICBhd2FpdCBzaGlmdFBvc2l0aW9uc1VwKHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZSwgZnJvbVBvc2l0aW9uOiBuZXdQb3NpdGlvbiwgdG9Qb3NpdGlvbjogb2xkUG9zaXRpb259KVxuICAgIH0gZWxzZSBpZiAobmV3UG9zaXRpb24gPiBvbGRQb3NpdGlvbikge1xuICAgICAgYXdhaXQgc2hpZnRQb3NpdGlvbnNEb3duKHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZSwgZnJvbVBvc2l0aW9uOiBvbGRQb3NpdGlvbiArIDEsIHRvUG9zaXRpb246IG5ld1Bvc2l0aW9uICsgMX0pXG4gICAgfVxuICB9KVxuXG4gIG1vZGVsQ2xhc3MuYmVmb3JlRGVzdHJveShhc3luYyAocmVjb3JkKSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb24gPSByZWNvcmQucmVhZEF0dHJpYnV0ZShwb3NpdGlvbkNvbHVtbilcblxuICAgIGlmIChwb3NpdGlvbiA9PSBudWxsKSB7XG4gICAgICBjb25zdCBtb2RlbENsYXNzID0gLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAqLyAocmVjb3JkLmNvbnN0cnVjdG9yKVxuICAgICAgY29uc3QgcG9zQ29sdW1uID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lRm9yQXR0cmlidXRlTmFtZShwb3NpdGlvbkNvbHVtbilcblxuICAgICAgaWYgKHBvc0NvbHVtbiBpbiByZWNvcmQuX2F0dHJpYnV0ZXMpIGFzc2VydFBvc2l0aXZlUG9zaXRpb24oe3Bvc2l0aW9uLCBwb3NpdGlvbkNvbHVtbiwgcGVyc2lzdGVkOiB0cnVlfSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBhc3NlcnRQb3NpdGl2ZVBvc2l0aW9uKHtwb3NpdGlvbiwgcG9zaXRpb25Db2x1bW4sIHBlcnNpc3RlZDogdHJ1ZX0pXG5cbiAgICBhd2FpdCBtb3ZlT3V0T2ZXYXkoe3JlY29yZCwgcG9zaXRpb25Db2x1bW4sIHNjb3BlfSlcbiAgICBzZXRTaGlmdGluZ0ZsYWcocmVjb3JkLCBmYWxzZSlcblxuICAgIGF3YWl0IHNoaWZ0UG9zaXRpb25zRG93bih7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIGZyb21Qb3NpdGlvbjogcG9zaXRpb24gKyAxfSlcbiAgfSlcbn1cblxuLyoqXG4gKiBFbmZvcmNlcyB0aGUgcHVibGljIGdhcC1sZXNzIGxpc3QgcG9zaXRpb24gaW52YXJpYW50IGJlZm9yZSBhbnkgc2hpZnRpbmcuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gYXJncy5wb3NpdGlvbiAtIFBvc2l0aW9uIHRvIHZhbGlkYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucG9zaXRpb25Db2x1bW4gLSBQb3NpdGlvbiBhdHRyaWJ1dGUgbmFtZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MucGVyc2lzdGVkXSAtIFdoZXRoZXIgdGhlIGludmFsaWQgdmFsdWUgY2FtZSBmcm9tIHBlcnNpc3RlZCBzdGF0ZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhc3NlcnRQb3NpdGl2ZVBvc2l0aW9uKHtwb3NpdGlvbiwgcG9zaXRpb25Db2x1bW4sIHBlcnNpc3RlZCA9IGZhbHNlfSkge1xuICBpZiAodHlwZW9mIHBvc2l0aW9uID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0ludGVnZXIocG9zaXRpb24pICYmIHBvc2l0aW9uID4gMCkgcmV0dXJuXG5cbiAgY29uc3Qgc291cmNlID0gcGVyc2lzdGVkID8gXCJQZXJzaXN0ZWRcIiA6IFwiUmVxdWVzdGVkXCJcblxuICB0aHJvdyBuZXcgRXJyb3IoYCR7c291cmNlfSBhY3RzQXNMaXN0ICR7cG9zaXRpb25Db2x1bW59IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyYClcbn1cblxuLyoqXG4gKiBQbGFjZXMgYSBtb3ZlZCByb3cgYWZ0ZXIgc3Vycm91bmRpbmcgcm93cyBoYXZlIHNoaWZ0ZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlY29yZCAtIE1vZGVsIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucG9zaXRpb25Db2x1bW4gLSBQb3NpdGlvbiBhdHRyaWJ1dGUgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnNjb3BlIC0gU2NvcGUgYXR0cmlidXRlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gYXJncy5zY29wZVZhbHVlIC0gRGVzdGluYXRpb24gc2NvcGUgdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5wb3NpdGlvbiAtIERlc3RpbmF0aW9uIHBvc2l0aW9uLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IFJlc29sdmVzIGFmdGVyIHBsYWNlbWVudC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcGxhY2VNb3ZlZFJlY29yZCh7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIHNjb3BlVmFsdWUsIHBvc2l0aW9ufSkge1xuICBjb25zdCBtb2RlbENsYXNzID0gLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAqLyAocmVjb3JkLmNvbnN0cnVjdG9yKVxuICBjb25zdCBjb25uZWN0aW9uID0gbW9kZWxDbGFzcy5jb25uZWN0aW9uKClcbiAgY29uc3QgdGFibGVTcWwgPSBjb25uZWN0aW9uLnF1b3RlVGFibGUobW9kZWxDbGFzcy5fZ2V0VGFibGUoKS5nZXROYW1lKCkpXG4gIGNvbnN0IHNjb3BlQ29sID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lRm9yQXR0cmlidXRlTmFtZShzY29wZSlcbiAgY29uc3QgcG9zQ29sID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lRm9yQXR0cmlidXRlTmFtZShwb3NpdGlvbkNvbHVtbilcbiAgY29uc3QgcHJlc2VydmVkQ2hhbmdlcyA9IHsuLi5yZWNvcmQuX2NoYW5nZXN9XG4gIGNvbnN0IHNjb3BlQ29sdW1uU3FsID0gY29ubmVjdGlvbi5xdW90ZUNvbHVtbihzY29wZUNvbClcbiAgY29uc3QgcG9zaXRpb25Db2x1bW5TcWwgPSBjb25uZWN0aW9uLnF1b3RlQ29sdW1uKHBvc0NvbClcbiAgY29uc3QgcHJpbWFyeUtleVNxbCA9IGNvbm5lY3Rpb24ucXVvdGVDb2x1bW4obW9kZWxDbGFzcy5wcmltYXJ5S2V5KCkpXG5cbiAgZGVsZXRlIHByZXNlcnZlZENoYW5nZXNbc2NvcGVDb2xdXG4gIGRlbGV0ZSBwcmVzZXJ2ZWRDaGFuZ2VzW3Bvc0NvbF1cblxuICBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KFxuICAgIGBVUERBVEUgJHt0YWJsZVNxbH0gU0VUICR7c2NvcGVDb2x1bW5TcWx9ID0gJHtjb25uZWN0aW9uLnF1b3RlKHNjb3BlVmFsdWUpfSwgJHtwb3NpdGlvbkNvbHVtblNxbH0gPSAke2Nvbm5lY3Rpb24ucXVvdGUocG9zaXRpb24pfSBXSEVSRSAke3ByaW1hcnlLZXlTcWx9ID0gJHtjb25uZWN0aW9uLnF1b3RlKHJlY29yZC5pZCgpKX1gXG4gIClcbiAgYXdhaXQgcmVjb3JkLl9yZWxvYWRXaXRoSWQocmVjb3JkLmlkKCkpXG4gIHJlY29yZC5fY2hhbmdlcyA9IHByZXNlcnZlZENoYW5nZXNcbiAgY2xlYXJCZWxvbmdzVG9DaGFuZ2VGb3JTY29wZShyZWNvcmQpXG59XG5cbi8qKlxuICogQ2xlYXJzIGRpcnR5IGJlbG9uZ3MtdG8gc3RhdGUgZm9yIHRoZSBzY29wZSBGSyBhZnRlciBkaXJlY3QgcGxhY2VtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IHJlY29yZCAtIE1vZGVsIGluc3RhbmNlLlxuICogQHJldHVybnMge3ZvaWR9IE5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGNsZWFyQmVsb25nc1RvQ2hhbmdlRm9yU2NvcGUocmVjb3JkKSB7XG4gIGZvciAoY29uc3QgcmVsYXRpb25zaGlwTmFtZSBpbiByZWNvcmQuX2luc3RhbmNlUmVsYXRpb25zaGlwcyB8fCB7fSkge1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHJlY29yZC5faW5zdGFuY2VSZWxhdGlvbnNoaXBzW3JlbGF0aW9uc2hpcE5hbWVdXG5cbiAgICBpZiAocmVsYXRpb25zaGlwLmdldFR5cGUoKSAhPT0gXCJiZWxvbmdzVG9cIikgY29udGludWVcblxuICAgIHJlbGF0aW9uc2hpcC5zZXREaXJ0eShmYWxzZSlcbiAgfVxufVxuXG4vKipcbiAqIEJ1bXBzIHBvc2l0aW9ucyBVUCBieSAxIGluIHRoZSByYW5nZSBbZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9uKSB3aXRoaW4gdGhlXG4gKiBzYW1lIHNjb3BlLiBVcGRhdGVzIGluIGRlc2NlbmRpbmcgb3JkZXIgdG8gYXZvaWQgaW50ZXJtZWRpYXRlIFVOSVFVRVxuICogY29uc3RyYWludCB2aW9sYXRpb25zLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5yZWNvcmQgLSBUaGUgbW9kZWwgaW5zdGFuY2Ugd2hvc2Ugc2NvcGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnBvc2l0aW9uQ29sdW1uIC0gY2FtZWxDYXNlIHBvc2l0aW9uIGF0dHJpYnV0ZSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muc2NvcGUgLSBjYW1lbENhc2Ugc2NvcGUgYXR0cmlidXRlIG5hbWUuXG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5mcm9tUG9zaXRpb24gLSBTdGFydGluZyBwb3NpdGlvbiAoaW5jbHVzaXZlKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy50b1Bvc2l0aW9uXSAtIEVuZGluZyBwb3NpdGlvbiAoZXhjbHVzaXZlKS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBbYXJncy5zY29wZVZhbHVlXSAtIEV4cGxpY2l0IHNjb3BlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IFthcmdzLmV4Y2x1ZGVSZWNvcmRJZF0gLSBSZWNvcmQgaWQgdG8gZXhjbHVkZSBmcm9tIHNoaWZ0cy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBzaGlmdFBvc2l0aW9uc1VwKHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZSwgZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9uLCBzY29wZVZhbHVlLCBleGNsdWRlUmVjb3JkSWR9KSB7XG4gIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9ICovIChyZWNvcmQuY29uc3RydWN0b3IpXG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBtb2RlbENsYXNzLmNvbm5lY3Rpb24oKVxuICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbENsYXNzLl9nZXRUYWJsZSgpLmdldE5hbWUoKVxuICBjb25zdCByZXNvbHZlZFNjb3BlVmFsdWUgPSBzY29wZVZhbHVlICE9IG51bGwgPyBzY29wZVZhbHVlIDogcmVzb2x2ZVNjb3BlVmFsdWUocmVjb3JkLCBzY29wZSlcbiAgY29uc3Qgc2NvcGVDb2x1bW5OYW1lID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lRm9yQXR0cmlidXRlTmFtZShzY29wZSlcblxuICBpZiAocmVzb2x2ZWRTY29wZVZhbHVlID09IG51bGwpIHJldHVyblxuXG4gIGNvbnN0IHBvc2l0aW9uQ29sdW1uTmFtZSA9IG1vZGVsQ2xhc3MuZ2V0Q29sdW1uTmFtZUZvckF0dHJpYnV0ZU5hbWUocG9zaXRpb25Db2x1bW4pXG4gIGNvbnN0IHBvc2l0aW9uQ29sdW1uU3FsID0gY29ubmVjdGlvbi5xdW90ZUNvbHVtbihwb3NpdGlvbkNvbHVtbk5hbWUpXG4gIGNvbnN0IHNjb3BlQ29sdW1uU3FsID0gY29ubmVjdGlvbi5xdW90ZUNvbHVtbihzY29wZUNvbHVtbk5hbWUpXG4gIGNvbnN0IHByaW1hcnlLZXlTcWwgPSBjb25uZWN0aW9uLnF1b3RlQ29sdW1uKG1vZGVsQ2xhc3MucHJpbWFyeUtleSgpKVxuICBjb25zdCB0YWJsZVNxbCA9IGNvbm5lY3Rpb24ucXVvdGVUYWJsZSh0YWJsZU5hbWUpXG4gIGNvbnN0IHF1b3RlZFNjb3BlID0gY29ubmVjdGlvbi5xdW90ZShyZXNvbHZlZFNjb3BlVmFsdWUpXG5cbiAgLy8gTG9hZCByb3dzIGluIGRlc2NlbmRpbmcgb3JkZXIgc28gd2UgYnVtcCB0aGUgaGlnaGVzdCBmaXJzdFxuICBsZXQgcXVlcnkgPSBtb2RlbENsYXNzXG4gICAgLnNlbGVjdChtb2RlbENsYXNzLnByaW1hcnlLZXkoKSlcbiAgICAuc2VsZWN0KHBvc2l0aW9uQ29sdW1uKVxuICAgIC53aGVyZSh7W3Njb3BlQ29sdW1uTmFtZV06IHJlc29sdmVkU2NvcGVWYWx1ZX0pXG4gICAgLndoZXJlKGAke3Bvc2l0aW9uQ29sdW1uU3FsfSA+PSAke2Nvbm5lY3Rpb24ucXVvdGUoZnJvbVBvc2l0aW9uKX1gKVxuICAgIC53aGVyZShgJHtwb3NpdGlvbkNvbHVtblNxbH0gPiAwYClcbiAgICAub3JkZXIoYCR7cG9zaXRpb25Db2x1bW5TcWx9IERFU0NgKVxuXG4gIGNvbnN0IHJlY29yZElkVG9FeGNsdWRlID0gZXhjbHVkZVJlY29yZElkIHx8IChyZWNvcmQuaXNQZXJzaXN0ZWQoKSA/IHJlY29yZC5pZCgpIDogbnVsbClcblxuICBpZiAocmVjb3JkSWRUb0V4Y2x1ZGUgIT0gbnVsbCkge1xuICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoYCR7cHJpbWFyeUtleVNxbH0gIT0gJHtjb25uZWN0aW9uLnF1b3RlKHJlY29yZElkVG9FeGNsdWRlKX1gKVxuICB9XG5cbiAgaWYgKHRvUG9zaXRpb24gIT0gbnVsbCkge1xuICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoYCR7cG9zaXRpb25Db2x1bW5TcWx9IDwgJHtjb25uZWN0aW9uLnF1b3RlKHRvUG9zaXRpb24pfWApXG4gIH1cblxuICBjb25zdCByb3dzID0gYXdhaXQgcXVlcnkudG9BcnJheSgpXG5cbiAgc2V0U2hpZnRpbmdGbGFnKHJlY29yZCwgdHJ1ZSlcblxuICB0cnkge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRQb3MgPSBOdW1iZXIocm93LnJlYWRBdHRyaWJ1dGUocG9zaXRpb25Db2x1bW4pKVxuXG4gICAgICBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KFxuICAgICAgICBgVVBEQVRFICR7dGFibGVTcWx9IFNFVCAke3Bvc2l0aW9uQ29sdW1uU3FsfSA9ICR7cG9zaXRpb25Db2x1bW5TcWx9ICsgMSBXSEVSRSAke3ByaW1hcnlLZXlTcWx9ID0gJHtjb25uZWN0aW9uLnF1b3RlKHJvdy5pZCgpKX0gQU5EICR7c2NvcGVDb2x1bW5TcWx9ID0gJHtxdW90ZWRTY29wZX0gQU5EICR7cG9zaXRpb25Db2x1bW5TcWx9ID0gJHtjb25uZWN0aW9uLnF1b3RlKGN1cnJlbnRQb3MpfWBcbiAgICAgIClcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc2V0U2hpZnRpbmdGbGFnKHJlY29yZCwgZmFsc2UpXG4gIH1cbn1cblxuLyoqXG4gKiBCdW1wcyBwb3NpdGlvbnMgRE9XTiBieSAxIGluIHRoZSByYW5nZSBbZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9uKSB3aXRoaW5cbiAqIHRoZSBzYW1lIHNjb3BlLiBVcGRhdGVzIGluIGFzY2VuZGluZyBvcmRlciB0byBhdm9pZCBpbnRlcm1lZGlhdGUgVU5JUVVFXG4gKiBjb25zdHJhaW50IHZpb2xhdGlvbnMuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlY29yZCAtIFRoZSBtb2RlbCBpbnN0YW5jZSB3aG9zZSBzY29wZSBpcyB0aGUgc291cmNlIG9mIHRydXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucG9zaXRpb25Db2x1bW4gLSBjYW1lbENhc2UgcG9zaXRpb24gYXR0cmlidXRlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zY29wZSAtIGNhbWVsQ2FzZSBzY29wZSBhdHRyaWJ1dGUgbmFtZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmZyb21Qb3NpdGlvbiAtIFN0YXJ0aW5nIHBvc2l0aW9uIChpbmNsdXNpdmUpLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLnRvUG9zaXRpb25dIC0gRW5kaW5nIHBvc2l0aW9uIChleGNsdXNpdmUpLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IFthcmdzLnNjb3BlVmFsdWVdIC0gRXhwbGljaXQgc2NvcGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2hpZnRQb3NpdGlvbnNEb3duKHtyZWNvcmQsIHBvc2l0aW9uQ29sdW1uLCBzY29wZSwgZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9uLCBzY29wZVZhbHVlfSkge1xuICBjb25zdCBtb2RlbENsYXNzID0gLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAqLyAocmVjb3JkLmNvbnN0cnVjdG9yKVxuICBjb25zdCBjb25uZWN0aW9uID0gbW9kZWxDbGFzcy5jb25uZWN0aW9uKClcbiAgY29uc3QgdGFibGVOYW1lID0gbW9kZWxDbGFzcy5fZ2V0VGFibGUoKS5nZXROYW1lKClcbiAgY29uc3QgcmVzb2x2ZWRTY29wZVZhbHVlID0gc2NvcGVWYWx1ZSAhPSBudWxsID8gc2NvcGVWYWx1ZSA6IHJlc29sdmVTY29wZVZhbHVlKHJlY29yZCwgc2NvcGUpXG4gIGNvbnN0IHNjb3BlQ29sdW1uTmFtZSA9IG1vZGVsQ2xhc3MuZ2V0Q29sdW1uTmFtZUZvckF0dHJpYnV0ZU5hbWUoc2NvcGUpXG5cbiAgaWYgKHJlc29sdmVkU2NvcGVWYWx1ZSA9PSBudWxsKSByZXR1cm5cblxuICBjb25zdCBwb3NpdGlvbkNvbHVtbk5hbWUgPSBtb2RlbENsYXNzLmdldENvbHVtbk5hbWVGb3JBdHRyaWJ1dGVOYW1lKHBvc2l0aW9uQ29sdW1uKVxuICBjb25zdCBwb3NpdGlvbkNvbHVtblNxbCA9IGNvbm5lY3Rpb24ucXVvdGVDb2x1bW4ocG9zaXRpb25Db2x1bW5OYW1lKVxuICBjb25zdCBzY29wZUNvbHVtblNxbCA9IGNvbm5lY3Rpb24ucXVvdGVDb2x1bW4oc2NvcGVDb2x1bW5OYW1lKVxuICBjb25zdCBwcmltYXJ5S2V5U3FsID0gY29ubmVjdGlvbi5xdW90ZUNvbHVtbihtb2RlbENsYXNzLnByaW1hcnlLZXkoKSlcbiAgY29uc3QgdGFibGVTcWwgPSBjb25uZWN0aW9uLnF1b3RlVGFibGUodGFibGVOYW1lKVxuICBjb25zdCBxdW90ZWRTY29wZSA9IGNvbm5lY3Rpb24ucXVvdGUocmVzb2x2ZWRTY29wZVZhbHVlKVxuXG4gIC8vIExvYWQgcm93cyBpbiBhc2NlbmRpbmcgb3JkZXIgc28gd2Ugc2hpZnQgdGhlIGxvd2VzdCBnYXAgZmlyc3RcbiAgbGV0IHF1ZXJ5ID0gbW9kZWxDbGFzc1xuICAgIC5zZWxlY3QobW9kZWxDbGFzcy5wcmltYXJ5S2V5KCkpXG4gICAgLnNlbGVjdChwb3NpdGlvbkNvbHVtbilcbiAgICAud2hlcmUoe1tzY29wZUNvbHVtbk5hbWVdOiByZXNvbHZlZFNjb3BlVmFsdWV9KVxuICAgIC53aGVyZShgJHtwb3NpdGlvbkNvbHVtblNxbH0gPj0gJHtjb25uZWN0aW9uLnF1b3RlKGZyb21Qb3NpdGlvbil9YClcbiAgICAud2hlcmUoYCR7cG9zaXRpb25Db2x1bW5TcWx9ID4gMGApXG4gICAgLndoZXJlKGAke3ByaW1hcnlLZXlTcWx9ICE9ICR7Y29ubmVjdGlvbi5xdW90ZShyZWNvcmQuaWQoKSl9YClcbiAgICAub3JkZXIoe2NvbHVtbjogcG9zaXRpb25Db2x1bW5OYW1lLCBkaXJlY3Rpb246IFwiQVNDXCJ9KVxuXG4gIGlmICh0b1Bvc2l0aW9uICE9IG51bGwpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5LndoZXJlKGAke3Bvc2l0aW9uQ29sdW1uU3FsfSA8ICR7Y29ubmVjdGlvbi5xdW90ZSh0b1Bvc2l0aW9uKX1gKVxuICB9XG5cbiAgY29uc3Qgcm93cyA9IGF3YWl0IHF1ZXJ5LnRvQXJyYXkoKVxuXG4gIHNldFNoaWZ0aW5nRmxhZyhyZWNvcmQsIHRydWUpXG5cbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICBjb25zdCBjdXJyZW50UG9zID0gTnVtYmVyKHJvdy5yZWFkQXR0cmlidXRlKHBvc2l0aW9uQ29sdW1uKSlcblxuICAgICAgYXdhaXQgY29ubmVjdGlvbi5xdWVyeShcbiAgICAgICAgYFVQREFURSAke3RhYmxlU3FsfSBTRVQgJHtwb3NpdGlvbkNvbHVtblNxbH0gPSAke3Bvc2l0aW9uQ29sdW1uU3FsfSAtIDEgV0hFUkUgJHtwcmltYXJ5S2V5U3FsfSA9ICR7Y29ubmVjdGlvbi5xdW90ZShyb3cuaWQoKSl9IEFORCAke3Njb3BlQ29sdW1uU3FsfSA9ICR7cXVvdGVkU2NvcGV9IEFORCAke3Bvc2l0aW9uQ29sdW1uU3FsfSA9ICR7Y29ubmVjdGlvbi5xdW90ZShjdXJyZW50UG9zKX1gXG4gICAgICApXG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHNldFNoaWZ0aW5nRmxhZyhyZWNvcmQsIGZhbHNlKVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaGlnaGVzdCBjdXJyZW50IHBvc2l0aW9uIHZhbHVlIGluIHRoZSByZWNvcmQncyBzY29wZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVjb3JkIC0gVGhlIG1vZGVsIGluc3RhbmNlIHdob3NlIHNjb3BlIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGguXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wb3NpdGlvbkNvbHVtbiAtIGNhbWVsQ2FzZSBwb3NpdGlvbiBhdHRyaWJ1dGUgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnNjb3BlIC0gY2FtZWxDYXNlIHNjb3BlIGF0dHJpYnV0ZSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IFthcmdzLnNjb3BlVmFsdWVdIC0gRXhwbGljaXQgc2NvcGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fSAtIEhpZ2hlc3QgcG9zaXRpb24gaW4gc2NvcGUsIG9yIDAgd2hlbiBzY29wZSBpcyBlbXB0eS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGlnaGVzdFBvc2l0aW9uSW5TY29wZSh7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIHNjb3BlVmFsdWV9KSB7XG4gIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9ICovIChyZWNvcmQuY29uc3RydWN0b3IpXG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBtb2RlbENsYXNzLmNvbm5lY3Rpb24oKVxuICBjb25zdCBzY29wZUNvbHVtbk5hbWUgPSBtb2RlbENsYXNzLmdldENvbHVtbk5hbWVGb3JBdHRyaWJ1dGVOYW1lKHNjb3BlKVxuICBjb25zdCBwb3NpdGlvbkNvbHVtbk5hbWUgPSBtb2RlbENsYXNzLmdldENvbHVtbk5hbWVGb3JBdHRyaWJ1dGVOYW1lKHBvc2l0aW9uQ29sdW1uKVxuICBjb25zdCBwb3NpdGlvbkNvbHVtblNxbCA9IGNvbm5lY3Rpb24ucXVvdGVDb2x1bW4ocG9zaXRpb25Db2x1bW5OYW1lKVxuICBjb25zdCByZXNvbHZlZFNjb3BlVmFsdWUgPSBzY29wZVZhbHVlICE9IG51bGwgPyBzY29wZVZhbHVlIDogcmVzb2x2ZVNjb3BlVmFsdWUocmVjb3JkLCBzY29wZSlcblxuICBpZiAocmVzb2x2ZWRTY29wZVZhbHVlID09IG51bGwpIHJldHVybiAwXG5cbiAgY29uc3Qgcm93cyA9IGF3YWl0IG1vZGVsQ2xhc3NcbiAgICAuc2VsZWN0KHBvc2l0aW9uQ29sdW1uKVxuICAgIC53aGVyZSh7W3Njb3BlQ29sdW1uTmFtZV06IHJlc29sdmVkU2NvcGVWYWx1ZX0pXG4gICAgLm9yZGVyKGAke3Bvc2l0aW9uQ29sdW1uU3FsfSBERVNDYClcbiAgICAubGltaXQoMSlcbiAgICAudG9BcnJheSgpXG5cbiAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIHJldHVybiBOdW1iZXIocm93c1swXS5yZWFkQXR0cmlidXRlKHBvc2l0aW9uQ29sdW1uKSkgfHwgMFxufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgc2NvcGUgdmFsdWUgZnJvbSB0aGUgYXR0cmlidXRlIHN0b3JlIGZpcnN0LCB0aGVuIGZhbGxzIGJhY2tcbiAqIHRvIHRoZSBsb2FkZWQgYmVsb25nc1RvIHJlbGF0aW9uc2hpcC4gVGhpcyBpcyBuZWVkZWQgZHVyaW5nIGJlZm9yZUNyZWF0ZVxuICogYmVjYXVzZSB0aGUgRksgYXR0cmlidXRlIG1heSBub3QgYmUgc2V0IHVudGlsIF9jcmVhdGVOZXdSZWNvcmQgZmx1c2hlc1xuICogX2JlbG9uZ3NUb0NoYW5nZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gcmVjb3JkIC0gTW9kZWwgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgLSBjYW1lbENhc2Ugc2NvcGUgYXR0cmlidXRlIG5hbWUgKGUuZy4gXCJwcm9qZWN0SWRcIikuXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0gLSBDdXJyZW50IGxpc3QgcG9zaXRpb24gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTY29wZVZhbHVlKHJlY29yZCwgc2NvcGUpIHtcbiAgY29uc3QgYXR0clZhbHVlID0gcmVjb3JkLnJlYWRBdHRyaWJ1dGUoc2NvcGUpXG5cbiAgaWYgKGF0dHJWYWx1ZSAhPSBudWxsKSByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovIChhdHRyVmFsdWUpXG5cbiAgY29uc3QgbW9kZWxDbGFzcyA9IC8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gKi8gKHJlY29yZC5jb25zdHJ1Y3RvcilcbiAgY29uc3QgcmVsYXRpb25zaGlwcyA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwc01hcCgpXG4gIGNvbnN0IHNjb3BlQ29sdW1uTmFtZSA9IG1vZGVsQ2xhc3MuZ2V0Q29sdW1uTmFtZUZvckF0dHJpYnV0ZU5hbWUoc2NvcGUpXG5cbiAgZm9yIChjb25zdCByZWxhdGlvbnNoaXBOYW1lIGluIHJlbGF0aW9uc2hpcHMpIHtcbiAgICBjb25zdCByZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBzW3JlbGF0aW9uc2hpcE5hbWVdXG5cbiAgICBpZiAocmVsYXRpb25zaGlwLmdldFR5cGU/LigpICE9PSBcImJlbG9uZ3NUb1wiKSBjb250aW51ZVxuXG4gICAgY29uc3QgZm9yZWlnbktleSA9IHJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5KClcblxuICAgIGlmIChmb3JlaWduS2V5ICE9PSBzY29wZUNvbHVtbk5hbWUpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBpbnN0YW5jZVJlbGF0aW9uc2hpcCA9IHJlY29yZC5nZXRSZWxhdGlvbnNoaXBCeU5hbWUocmVsYXRpb25zaGlwTmFtZSlcbiAgICBjb25zdCBsb2FkZWQgPSBpbnN0YW5jZVJlbGF0aW9uc2hpcC5sb2FkZWQoKVxuXG4gICAgaWYgKGxvYWRlZCAmJiAhQXJyYXkuaXNBcnJheShsb2FkZWQpICYmIHR5cGVvZiBsb2FkZWQuaWQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGxvYWRlZC5pZCgpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBNb3ZlcyB0aGUgcmVjb3JkIHRvIGEgdGVtcG9yYXJ5IHBvc2l0aW9uIG91dHNpZGUgdGhlIG5vcm1hbCByYW5nZSBzb1xuICogdGhhdCBzdXJyb3VuZGluZyBwb3NpdGlvbiBzaGlmdHMgZG8gbm90IGhpdCB1bmlxdWUgY29uc3RyYWludCB2aW9sYXRpb25zLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5yZWNvcmQgLSBNb2RlbCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnBvc2l0aW9uQ29sdW1uIC0gY2FtZWxDYXNlIHBvc2l0aW9uIGF0dHJpYnV0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnNjb3BlIC0gY2FtZWxDYXNlIHNjb3BlIGF0dHJpYnV0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0gW2FyZ3Muc2NvcGVWYWx1ZV0gLSBTY29wZSBjb250YWluaW5nIHRoZSByZWNvcmQgYmVmb3JlIG1vdmUtb3V0LlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG1vdmVPdXRPZldheSh7cmVjb3JkLCBwb3NpdGlvbkNvbHVtbiwgc2NvcGUsIHNjb3BlVmFsdWV9KSB7XG4gIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9ICovIChyZWNvcmQuY29uc3RydWN0b3IpXG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBtb2RlbENsYXNzLmNvbm5lY3Rpb24oKVxuICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbENsYXNzLl9nZXRUYWJsZSgpLmdldE5hbWUoKVxuICBjb25zdCByZXNvbHZlZFNjb3BlVmFsdWUgPSBzY29wZVZhbHVlICE9IG51bGwgPyBzY29wZVZhbHVlIDogcmVzb2x2ZVNjb3BlVmFsdWUocmVjb3JkLCBzY29wZSlcblxuICBpZiAocmVzb2x2ZWRTY29wZVZhbHVlID09IG51bGwpIHJldHVyblxuXG4gIGNvbnN0IHBvc2l0aW9uQ29sdW1uU3FsID0gY29ubmVjdGlvbi5xdW90ZUNvbHVtbihtb2RlbENsYXNzLmdldENvbHVtbk5hbWVGb3JBdHRyaWJ1dGVOYW1lKHBvc2l0aW9uQ29sdW1uKSlcbiAgY29uc3Qgc2NvcGVDb2x1bW5TcWwgPSBjb25uZWN0aW9uLnF1b3RlQ29sdW1uKG1vZGVsQ2xhc3MuZ2V0Q29sdW1uTmFtZUZvckF0dHJpYnV0ZU5hbWUoc2NvcGUpKVxuICBjb25zdCB0YWJsZVNxbCA9IGNvbm5lY3Rpb24ucXVvdGVUYWJsZSh0YWJsZU5hbWUpXG4gIGNvbnN0IHBrU3FsID0gY29ubmVjdGlvbi5xdW90ZUNvbHVtbihtb2RlbENsYXNzLnByaW1hcnlLZXkoKSlcblxuICBzZXRTaGlmdGluZ0ZsYWcocmVjb3JkLCB0cnVlKVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29ubmVjdGlvbi5xdWVyeShcbiAgICAgIGBVUERBVEUgJHt0YWJsZVNxbH0gU0VUICR7cG9zaXRpb25Db2x1bW5TcWx9ID0gLSR7cG9zaXRpb25Db2x1bW5TcWx9IFdIRVJFICR7c2NvcGVDb2x1bW5TcWx9ID0gJHtjb25uZWN0aW9uLnF1b3RlKHJlc29sdmVkU2NvcGVWYWx1ZSl9IEFORCAke3BrU3FsfSA9ICR7Y29ubmVjdGlvbi5xdW90ZShyZWNvcmQuaWQoKSl9YFxuICAgIClcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBEb24ndCBjbGVhciB0aGUgZmxhZyBoZXJlIOKAlCB0aGUgY2FsbGVyIHdpbGwgZG8gdGhhdCBhZnRlciBzaGlmdHNcbiAgfVxufVxuIl19
@@ -1,12 +1,3 @@
1
- /**
2
- * NormalizedAttachmentInput type.
3
- * @typedef {object} NormalizedAttachmentInput
4
- * @property {number} byteSize - File size in bytes.
5
- * @property {Buffer} contentBuffer - Raw content bytes.
6
- * @property {string} contentBase64 - Base64 encoded content.
7
- * @property {string | null} contentType - Content type.
8
- * @property {string} filename - Filename.
9
- */
10
1
  /**
11
2
  * Runs normalize record attachment input.
12
3
  * @param {?} input - Attachment input.
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-input.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/attachments/normalize-input.js"],"names":[],"mappings":"AAkGA;;;;;;;;GAQG;AAEH;;;;;;;;;GASG;AACH,8DARW,OAAC,SAET;IAAuB,cAAc;IACb,mBAAmB;IACrB,eAAe;IACkC,kBAAkB;CACzF,GAAU,OAAO,CAAC,yBAAyB,CAAC,CA8E9C;;;;;;;;cA7Fa,MAAM;;;;mBACN,MAAM;;;;mBACN,MAAM;;;;iBACN,MAAM,GAAG,IAAI;;;;cACb,MAAM"}
1
+ {"version":3,"file":"normalize-input.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/attachments/normalize-input.js"],"names":[],"mappings":"AA2GA;;;;;;;;;GASG;AACH,8DARW,OAAC,SAET;IAAuB,cAAc;IACb,mBAAmB;IACrB,eAAe;IACkC,kBAAkB;CACzF,GAAU,OAAO,CAAC,yBAAyB,CAAC,CA8E9C;;;;;;;;cA1La,MAAM;;;;mBACN,MAAM;;;;mBACN,MAAM;;;;iBACN,MAAM,GAAG,IAAI;;;;cACb,MAAM"}
@@ -1,5 +1,14 @@
1
1
  // @ts-check
2
2
  import UploadedFile from "../../../http-server/client/uploaded-file/uploaded-file.js";
3
+ /**
4
+ * NormalizedAttachmentInput type.
5
+ * @typedef {object} NormalizedAttachmentInput
6
+ * @property {number} byteSize - File size in bytes.
7
+ * @property {Buffer} contentBuffer - Raw content bytes.
8
+ * @property {string} contentBase64 - Base64 encoded content.
9
+ * @property {string | null} contentType - Content type.
10
+ * @property {string} filename - Filename.
11
+ */
3
12
  /**
4
13
  * Runs base name.
5
14
  * @param {string} value - Path-like value.
@@ -83,15 +92,6 @@ async function uploadedFileBuffer(uploadedFile, environmentHandler) {
83
92
  }
84
93
  throw new Error("Unsupported uploaded file type");
85
94
  }
86
- /**
87
- * NormalizedAttachmentInput type.
88
- * @typedef {object} NormalizedAttachmentInput
89
- * @property {number} byteSize - File size in bytes.
90
- * @property {Buffer} contentBuffer - Raw content bytes.
91
- * @property {string} contentBase64 - Base64 encoded content.
92
- * @property {string | null} contentType - Content type.
93
- * @property {string} filename - Filename.
94
- */
95
95
  /**
96
96
  * Runs normalize record attachment input.
97
97
  * @param {?} input - Attachment input.
@@ -178,4 +178,4 @@ export default async function normalizeRecordAttachmentInput(input, args = {}) {
178
178
  filename: normalizedFilename || defaultFilename
179
179
  };
180
180
  }
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3JlY29yZC9hdHRhY2htZW50cy9ub3JtYWxpemUtaW5wdXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sWUFBWSxNQUFNLDREQUE0RCxDQUFBO0FBRXJGOzs7O0dBSUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxLQUFLO0lBQ3JCLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFOUQsSUFBSSxDQUFDLHlCQUF5QjtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRXpDLE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDbEUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVuQyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUN0QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQUs7SUFDMUIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUU3RSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTlDLE9BQU8sU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQTtBQUM3RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQUs7SUFDekIsT0FBTyxLQUFLLFlBQVksVUFBVSxDQUFBO0FBQ3BDLENBQUM7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R0FBRyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFTixPQUFPO1FBQ0wsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3ZCLGFBQWEsRUFBRSxNQUFNO1FBQ3JCLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN4QyxXQUFXO1FBQ1gsUUFBUSxFQUFFLGtCQUFrQixJQUFJLGVBQWU7S0FDaEQsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFVwbG9hZGVkRmlsZSBmcm9tIFwiLi4vLi4vLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3VwbG9hZGVkLWZpbGUvdXBsb2FkZWQtZmlsZS5qc1wiXG5cbi8qKlxuICogUnVucyBiYXNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBQYXRoLWxpa2UgdmFsdWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIEJhc2VuYW1lLWxpa2UgZmlsZW5hbWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VOYW1lKHZhbHVlKSB7XG4gIGNvbnN0IHdpdGhvdXRUcmFpbGluZ1NlcGFyYXRvcnMgPSB2YWx1ZS5yZXBsYWNlKC9bXFxcXC9dKyQvLCBcIlwiKVxuXG4gIGlmICghd2l0aG91dFRyYWlsaW5nU2VwYXJhdG9ycykgcmV0dXJuIFwiXCJcblxuICBjb25zdCBub3JtYWxpemVkID0gd2l0aG91dFRyYWlsaW5nU2VwYXJhdG9ycy5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIilcbiAgY29uc3QgcGFydHMgPSBub3JtYWxpemVkLnNwbGl0KFwiL1wiKVxuXG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSB8fCBcIlwiXG59XG5cbi8qKlxuICogUnVucyBpcyBwbGFpbiBvYmplY3QuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHJldHVybnMge3ZhbHVlIGlzIFJlY29yZDxzdHJpbmcsID8+fSAtIFdoZXRoZXIgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSlcblxuICByZXR1cm4gcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvdHlwZSA9PT0gbnVsbFxufVxuXG4vKipcbiAqIFJ1bnMgaXMgdWludDggYXJyYXkuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHJldHVybnMge3ZhbHVlIGlzIFVpbnQ4QXJyYXl9IC0gV2hldGhlciB2YWx1ZSBpcyBhIGJ5dGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5XG59XG5cbi8qKlxuICogUnVucyBpcyBhcnJheSBidWZmZXIuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHJldHVybnMge3ZhbHVlIGlzIEFycmF5QnVmZmVyfSAtIFdoZXRoZXIgdmFsdWUgaXMgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyXG59XG5cbi8qKlxuICogUnVucyBpcyBhcnJheSBidWZmZXIgbGlrZS5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMge2FycmF5QnVmZmVyOiAoKSA9PiBQcm9taXNlPEFycmF5QnVmZmVyPn19IC0gV2hldGhlciB2YWx1ZSBzdXBwb3J0cyBhcnJheUJ1ZmZlcigpLlxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyTGlrZSh2YWx1ZSkge1xuICByZXR1cm4gQm9vbGVhbih2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIC8qKiBAdHlwZSB7P30gKi8gKHZhbHVlKS5hcnJheUJ1ZmZlciA9PT0gXCJmdW5jdGlvblwiKVxufVxuXG4vKipcbiAqIFJ1bnMgdG8gYnVmZmVyLlxuICogQHBhcmFtIHtVaW50OEFycmF5IHwgQnVmZmVyIHwgQXJyYXlCdWZmZXIgfCBzdHJpbmd9IHZhbHVlIC0gVmFsdWUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSAtIEJ1ZmZlciB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gdG9CdWZmZXIodmFsdWUpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHJldHVybiB2YWx1ZVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUpXG4gIGlmIChpc0FycmF5QnVmZmVyKHZhbHVlKSkgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlKVxuICBpZiAoaXNVaW50OEFycmF5KHZhbHVlKSkgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlKVxuXG4gIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGF0dGFjaG1lbnQgY29udGVudCB0eXBlXCIpXG59XG5cbi8qKlxuICogUnVucyB1cGxvYWRlZCBmaWxlIGJ1ZmZlci5cbiAqIEBwYXJhbSB7VXBsb2FkZWRGaWxlfSB1cGxvYWRlZEZpbGUgLSBVcGxvYWRlZCBmaWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi8uLi9lbnZpcm9ubWVudC1oYW5kbGVycy9iYXNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IGVudmlyb25tZW50SGFuZGxlciAtIEVudmlyb25tZW50IGhhbmRsZXIuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCdWZmZXI+fSAtIEZpbGUgY29udGVudCBidWZmZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZGVkRmlsZUJ1ZmZlcih1cGxvYWRlZEZpbGUsIGVudmlyb25tZW50SGFuZGxlcikge1xuICBjb25zdCBtZW1vcnlCdWZmZXIgPSAvKiogQHR5cGUge3tnZXRCdWZmZXI/OiAoKSA9PiBCdWZmZXJ9fSAqLyAodXBsb2FkZWRGaWxlKS5nZXRCdWZmZXI/LigpXG5cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihtZW1vcnlCdWZmZXIpKSByZXR1cm4gbWVtb3J5QnVmZmVyXG5cbiAgY29uc3QgdGVtcFBhdGggPSAvKiogQHR5cGUge3tnZXRQYXRoPzogKCkgPT4gc3RyaW5nfX0gKi8gKHVwbG9hZGVkRmlsZSkuZ2V0UGF0aD8uKClcblxuICBpZiAodHlwZW9mIHRlbXBQYXRoID09PSBcInN0cmluZ1wiICYmIHRlbXBQYXRoLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoIWVudmlyb25tZW50SGFuZGxlciB8fCB0eXBlb2YgZW52aXJvbm1lbnRIYW5kbGVyLnJlYWRBdHRhY2htZW50SW5wdXRGaWxlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGFjaG1lbnQgdGVtcC1wYXRoIGlucHV0IGlzIHVuc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgZW52aXJvbm1lbnRIYW5kbGVyLnJlYWRBdHRhY2htZW50SW5wdXRGaWxlKHRlbXBQYXRoKVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdXBsb2FkZWQgZmlsZSB0eXBlXCIpXG59XG5cbi8qKlxuICogTm9ybWFsaXplZEF0dGFjaG1lbnRJbnB1dCB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gTm9ybWFsaXplZEF0dGFjaG1lbnRJbnB1dFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJ5dGVTaXplIC0gRmlsZSBzaXplIGluIGJ5dGVzLlxuICogQHByb3BlcnR5IHtCdWZmZXJ9IGNvbnRlbnRCdWZmZXIgLSBSYXcgY29udGVudCBieXRlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50QmFzZTY0IC0gQmFzZTY0IGVuY29kZWQgY29udGVudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gY29udGVudFR5cGUgLSBDb250ZW50IHR5cGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZW5hbWUgLSBGaWxlbmFtZS5cbiAqL1xuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIHJlY29yZCBhdHRhY2htZW50IGlucHV0LlxuICogQHBhcmFtIHs/fSBpbnB1dCAtIEF0dGFjaG1lbnQgaW5wdXQuXG4gKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuYWxsb3dQYXRoSW5wdXRdIC0gV2hldGhlciBge3BhdGg6IC4uLn1gIGlucHV0IGlzIGFsbG93ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbYXJncy5hbGxvd2VkUGF0aFByZWZpeGVzXSAtIE9wdGlvbmFsIGFsbG93bGlzdCBmb3IgcGF0aCBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5kZWZhdWx0RmlsZW5hbWVdIC0gT3B0aW9uYWwgZGVmYXVsdCBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vLi4vZW52aXJvbm1lbnQtaGFuZGxlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBbYXJncy5lbnZpcm9ubWVudEhhbmRsZXJdIC0gT3B0aW9uYWwgZW52aXJvbm1lbnQgaGFuZGxlciBmb3IgTm9kZS1vbmx5IGZpbGUgb3BlcmF0aW9ucy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPE5vcm1hbGl6ZWRBdHRhY2htZW50SW5wdXQ+fSAtIE5vcm1hbGl6ZWQgYXR0YWNobWVudCBpbnB1dC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gbm9ybWFsaXplUmVjb3JkQXR0YWNobWVudElucHV0KGlucHV0LCBhcmdzID0ge30pIHtcbiAgY29uc3QgZGVmYXVsdEZpbGVuYW1lID0gYXJncy5kZWZhdWx0RmlsZW5hbWUgfHwgXCJhdHRhY2htZW50LmJpblwiXG4gIGNvbnN0IGVudmlyb25tZW50SGFuZGxlciA9IGFyZ3MuZW52aXJvbm1lbnRIYW5kbGVyXG4gIC8qKlxuICAgKiBEZWZpbmVzIGJ1ZmZlci5cbiAgICogQHR5cGUge0J1ZmZlcn0gKi9cbiAgbGV0IGJ1ZmZlclxuICAvKipcbiAgICogQ29udGVudCB0eXBlLlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgbnVsbH0gKi9cbiAgbGV0IGNvbnRlbnRUeXBlID0gbnVsbFxuICAvKipcbiAgICogRGVmaW5lcyBmaWxlbmFtZS5cbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGZpbGVuYW1lXG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgVXBsb2FkZWRGaWxlKSB7XG4gICAgYnVmZmVyID0gYXdhaXQgdXBsb2FkZWRGaWxlQnVmZmVyKGlucHV0LCBlbnZpcm9ubWVudEhhbmRsZXIpXG4gICAgZmlsZW5hbWUgPSBpbnB1dC5maWxlbmFtZSgpXG4gICAgY29udGVudFR5cGUgPSBpbnB1dC5jb250ZW50VHlwZSgpIHx8IG51bGxcbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGlucHV0KSAmJiB0eXBlb2YgaW5wdXQucGF0aCA9PT0gXCJzdHJpbmdcIiAmJiBpbnB1dC5wYXRoLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoYXJncy5hbGxvd1BhdGhJbnB1dCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXR0YWNobWVudCBwYXRoIGlucHV0IGlzIGRpc2FibGVkXCIpXG4gICAgfVxuXG4gICAgaWYgKCFlbnZpcm9ubWVudEhhbmRsZXIgfHwgdHlwZW9mIGVudmlyb25tZW50SGFuZGxlci5yZXNvbHZlQXR0YWNobWVudElucHV0UGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRhY2htZW50IHBhdGggaW5wdXQgaXMgdW5zdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudFwiKVxuICAgIH1cblxuICAgIGNvbnN0IGFsbG93ZWRQYXRoUHJlZml4ZXMgPSBBcnJheS5pc0FycmF5KGFyZ3MuYWxsb3dlZFBhdGhQcmVmaXhlcylcbiAgICAgID8gYXJncy5hbGxvd2VkUGF0aFByZWZpeGVzLmZpbHRlcigoZW50cnkpID0+IHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiBlbnRyeS5sZW5ndGggPiAwKVxuICAgICAgOiBbXVxuICAgIGNvbnN0IHtidWZmZXI6IGZpbGVCdWZmZXIsIGZpbGVQYXRofSA9IGF3YWl0IGVudmlyb25tZW50SGFuZGxlci5yZXNvbHZlQXR0YWNobWVudElucHV0UGF0aCh7XG4gICAgICBhbGxvd2VkUGF0aFByZWZpeGVzLFxuICAgICAgaW5wdXRQYXRoOiBpbnB1dC5wYXRoXG4gICAgfSlcblxuICAgIGJ1ZmZlciA9IGZpbGVCdWZmZXJcbiAgICBmaWxlbmFtZSA9IHR5cGVvZiBpbnB1dC5maWxlbmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBpbnB1dC5maWxlbmFtZS5sZW5ndGggPiAwID8gaW5wdXQuZmlsZW5hbWUgOiBiYXNlTmFtZShmaWxlUGF0aClcbiAgICBjb250ZW50VHlwZSA9IHR5cGVvZiBpbnB1dC5jb250ZW50VHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBpbnB1dC5jb250ZW50VHlwZS5sZW5ndGggPiAwID8gaW5wdXQuY29udGVudFR5cGUgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChpbnB1dCkgJiYgdHlwZW9mIGlucHV0LmNvbnRlbnRCYXNlNjQgPT09IFwic3RyaW5nXCIpIHtcbiAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShpbnB1dC5jb250ZW50QmFzZTY0LCBcImJhc2U2NFwiKVxuICAgIGZpbGVuYW1lID0gdHlwZW9mIGlucHV0LmZpbGVuYW1lID09PSBcInN0cmluZ1wiICYmIGlucHV0LmZpbGVuYW1lLmxlbmd0aCA+IDAgPyBpbnB1dC5maWxlbmFtZSA6IGRlZmF1bHRGaWxlbmFtZVxuICAgIGNvbnRlbnRUeXBlID0gdHlwZW9mIGlucHV0LmNvbnRlbnRUeXBlID09PSBcInN0cmluZ1wiICYmIGlucHV0LmNvbnRlbnRUeXBlLmxlbmd0aCA+IDAgPyBpbnB1dC5jb250ZW50VHlwZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGlucHV0KSAmJiBcImNvbnRlbnRcIiBpbiBpbnB1dCkge1xuICAgIGJ1ZmZlciA9IHRvQnVmZmVyKGlucHV0LmNvbnRlbnQpXG4gICAgZmlsZW5hbWUgPSB0eXBlb2YgaW5wdXQuZmlsZW5hbWUgPT09IFwic3RyaW5nXCIgJiYgaW5wdXQuZmlsZW5hbWUubGVuZ3RoID4gMCA/IGlucHV0LmZpbGVuYW1lIDogZGVmYXVsdEZpbGVuYW1lXG4gICAgY29udGVudFR5cGUgPSB0eXBlb2YgaW5wdXQuY29udGVudFR5cGUgPT09IFwic3RyaW5nXCIgJiYgaW5wdXQuY29udGVudFR5cGUubGVuZ3RoID4gMCA/IGlucHV0LmNvbnRlbnRUeXBlIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQXJyYXlCdWZmZXJMaWtlKGlucHV0KSkge1xuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgaW5wdXQuYXJyYXlCdWZmZXIoKVxuXG4gICAgYnVmZmVyID0gQnVmZmVyLmZyb20oYXJyYXlCdWZmZXIpXG4gICAgZmlsZW5hbWUgPSB0eXBlb2YgLyoqIEB0eXBlIHs/fSAqLyAoaW5wdXQpLm5hbWUgPT09IFwic3RyaW5nXCIgJiYgLyoqIEB0eXBlIHs/fSAqLyAoaW5wdXQpLm5hbWUubGVuZ3RoID4gMFxuICAgICAgPyAvKiogQHR5cGUgez99ICovIChpbnB1dCkubmFtZVxuICAgICAgOiBkZWZhdWx0RmlsZW5hbWVcbiAgICBjb250ZW50VHlwZSA9IHR5cGVvZiAvKiogQHR5cGUgez99ICovIChpbnB1dCkudHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAvKiogQHR5cGUgez99ICovIChpbnB1dCkudHlwZS5sZW5ndGggPiAwXG4gICAgICA/IC8qKiBAdHlwZSB7P30gKi8gKGlucHV0KS50eXBlXG4gICAgICA6IG51bGxcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIgfHwgQnVmZmVyLmlzQnVmZmVyKGlucHV0KSB8fCBpc0FycmF5QnVmZmVyKGlucHV0KSB8fCBpc1VpbnQ4QXJyYXkoaW5wdXQpKSB7XG4gICAgYnVmZmVyID0gdG9CdWZmZXIoaW5wdXQpXG4gICAgZmlsZW5hbWUgPSBkZWZhdWx0RmlsZW5hbWVcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhdHRhY2htZW50IGlucHV0XCIpXG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0eXBlb2YgZmlsZW5hbWUgPT09IFwic3RyaW5nXCIgJiYgZmlsZW5hbWUubGVuZ3RoID4gMFxuICAgID8gYmFzZU5hbWUoZmlsZW5hbWUpXG4gICAgOiBcIlwiXG5cbiAgcmV0dXJuIHtcbiAgICBieXRlU2l6ZTogYnVmZmVyLmxlbmd0aCxcbiAgICBjb250ZW50QnVmZmVyOiBidWZmZXIsXG4gICAgY29udGVudEJhc2U2NDogYnVmZmVyLnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgIGNvbnRlbnRUeXBlLFxuICAgIGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfHwgZGVmYXVsdEZpbGVuYW1lXG4gIH1cbn1cbiJdfQ==
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3JlY29yZC9hdHRhY2htZW50cy9ub3JtYWxpemUtaW5wdXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sWUFBWSxNQUFNLDREQUE0RCxDQUFBO0FBRXJGOzs7Ozs7OztHQVFHO0FBQ0g7Ozs7R0FJRztBQUNILFNBQVMsUUFBUSxDQUFDLEtBQUs7SUFDckIsTUFBTSx5QkFBeUIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUU5RCxJQUFJLENBQUMseUJBQXlCO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFFekMsTUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNsRSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRW5DLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ3RDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxhQUFhLENBQUMsS0FBSztJQUMxQixJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTdFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFOUMsT0FBTyxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVMsSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFBO0FBQzdELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxZQUFZLENBQUMsS0FBSztJQUN6QixPQUFPLEtBQUssWUFBWSxVQUFV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R0FBRyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFTixPQUFPO1FBQ0wsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3ZCLGFBQWEsRUFBRSxNQUFNO1FBQ3JCLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN4QyxXQUFXO1FBQ1gsUUFBUSxFQUFFLGtCQUFrQixJQUFJLGVBQWU7S0FDaEQsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFVwbG9hZGVkRmlsZSBmcm9tIFwiLi4vLi4vLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3VwbG9hZGVkLWZpbGUvdXBsb2FkZWQtZmlsZS5qc1wiXG5cbi8qKlxuICogTm9ybWFsaXplZEF0dGFjaG1lbnRJbnB1dCB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gTm9ybWFsaXplZEF0dGFjaG1lbnRJbnB1dFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJ5dGVTaXplIC0gRmlsZSBzaXplIGluIGJ5dGVzLlxuICogQHByb3BlcnR5IHtCdWZmZXJ9IGNvbnRlbnRCdWZmZXIgLSBSYXcgY29udGVudCBieXRlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50QmFzZTY0IC0gQmFzZTY0IGVuY29kZWQgY29udGVudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gY29udGVudFR5cGUgLSBDb250ZW50IHR5cGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZW5hbWUgLSBGaWxlbmFtZS5cbiAqL1xuLyoqXG4gKiBSdW5zIGJhc2UgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFBhdGgtbGlrZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQmFzZW5hbWUtbGlrZSBmaWxlbmFtZS5cbiAqL1xuZnVuY3Rpb24gYmFzZU5hbWUodmFsdWUpIHtcbiAgY29uc3Qgd2l0aG91dFRyYWlsaW5nU2VwYXJhdG9ycyA9IHZhbHVlLnJlcGxhY2UoL1tcXFxcL10rJC8sIFwiXCIpXG5cbiAgaWYgKCF3aXRob3V0VHJhaWxpbmdTZXBhcmF0b3JzKSByZXR1cm4gXCJcIlxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB3aXRob3V0VHJhaWxpbmdTZXBhcmF0b3JzLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKVxuICBjb25zdCBwYXJ0cyA9IG5vcm1hbGl6ZWQuc3BsaXQoXCIvXCIpXG5cbiAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdIHx8IFwiXCJcbn1cblxuLyoqXG4gKiBSdW5zIGlzIHBsYWluIG9iamVjdC5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgUmVjb3JkPHN0cmluZywgPz59IC0gV2hldGhlciB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxuXG4gIHJldHVybiBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG90eXBlID09PSBudWxsXG59XG5cbi8qKlxuICogUnVucyBpcyB1aW50OCBhcnJheS5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgVWludDhBcnJheX0gLSBXaGV0aGVyIHZhbHVlIGlzIGEgYnl0ZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gaXNVaW50OEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbn1cblxuLyoqXG4gKiBSdW5zIGlzIGFycmF5IGJ1ZmZlci5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgQXJyYXlCdWZmZXJ9IC0gV2hldGhlciB2YWx1ZSBpcyBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJcbn1cblxuLyoqXG4gKiBSdW5zIGlzIGFycmF5IGJ1ZmZlciBsaWtlLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyB7YXJyYXlCdWZmZXI6ICgpID0+IFByb21pc2U8QXJyYXlCdWZmZXI+fX0gLSBXaGV0aGVyIHZhbHVlIHN1cHBvcnRzIGFycmF5QnVmZmVyKCkuXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJMaWtlKHZhbHVlKSB7XG4gIHJldHVybiBCb29sZWFuKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgLyoqIEB0eXBlIHs/fSAqLyAodmFsdWUpLmFycmF5QnVmZmVyID09PSBcImZ1bmN0aW9uXCIpXG59XG5cbi8qKlxuICogUnVucyB0byBidWZmZXIuXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXkgfCBCdWZmZXIgfCBBcnJheUJ1ZmZlciB8IHN0cmluZ30gdmFsdWUgLSBWYWx1ZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gQnVmZmVyIHZhbHVlLlxuICovXG5mdW5jdGlvbiB0b0J1ZmZlcih2YWx1ZSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkgcmV0dXJuIHZhbHVlXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSlcbiAgaWYgKGlzQXJyYXlCdWZmZXIodmFsdWUpKSByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUpXG4gIGlmIChpc1VpbnQ4QXJyYXkodmFsdWUpKSByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUpXG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYXR0YWNobWVudCBjb250ZW50IHR5cGVcIilcbn1cblxuLyoqXG4gKiBSdW5zIHVwbG9hZGVkIGZpbGUgYnVmZmVyLlxuICogQHBhcmFtIHtVcGxvYWRlZEZpbGV9IHVwbG9hZGVkRmlsZSAtIFVwbG9hZGVkIGZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uLy4uL2Vudmlyb25tZW50LWhhbmRsZXJzL2Jhc2UuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gZW52aXJvbm1lbnRIYW5kbGVyIC0gRW52aXJvbm1lbnQgaGFuZGxlci5cbiAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlcj59IC0gRmlsZSBjb250ZW50IGJ1ZmZlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBsb2FkZWRGaWxlQnVmZmVyKHVwbG9hZGVkRmlsZSwgZW52aXJvbm1lbnRIYW5kbGVyKSB7XG4gIGNvbnN0IG1lbW9yeUJ1ZmZlciA9IC8qKiBAdHlwZSB7e2dldEJ1ZmZlcj86ICgpID0+IEJ1ZmZlcn19ICovICh1cGxvYWRlZEZpbGUpLmdldEJ1ZmZlcj8uKClcblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG1lbW9yeUJ1ZmZlcikpIHJldHVybiBtZW1vcnlCdWZmZXJcblxuICBjb25zdCB0ZW1wUGF0aCA9IC8qKiBAdHlwZSB7e2dldFBhdGg/OiAoKSA9PiBzdHJpbmd9fSAqLyAodXBsb2FkZWRGaWxlKS5nZXRQYXRoPy4oKVxuXG4gIGlmICh0eXBlb2YgdGVtcFBhdGggPT09IFwic3RyaW5nXCIgJiYgdGVtcFBhdGgubGVuZ3RoID4gMCkge1xuICAgIGlmICghZW52aXJvbm1lbnRIYW5kbGVyIHx8IHR5cGVvZiBlbnZpcm9ubWVudEhhbmRsZXIucmVhZEF0dGFjaG1lbnRJbnB1dEZpbGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXR0YWNobWVudCB0ZW1wLXBhdGggaW5wdXQgaXMgdW5zdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudFwiKVxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBlbnZpcm9ubWVudEhhbmRsZXIucmVhZEF0dGFjaG1lbnRJbnB1dEZpbGUodGVtcFBhdGgpXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1cGxvYWRlZCBmaWxlIHR5cGVcIilcbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSByZWNvcmQgYXR0YWNobWVudCBpbnB1dC5cbiAqIEBwYXJhbSB7P30gaW5wdXQgLSBBdHRhY2htZW50IGlucHV0LlxuICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmFsbG93UGF0aElucHV0XSAtIFdoZXRoZXIgYHtwYXRoOiAuLi59YCBpbnB1dCBpcyBhbGxvd2VkLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2FyZ3MuYWxsb3dlZFBhdGhQcmVmaXhlc10gLSBPcHRpb25hbCBhbGxvd2xpc3QgZm9yIHBhdGggaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZGVmYXVsdEZpbGVuYW1lXSAtIE9wdGlvbmFsIGRlZmF1bHQgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uLy4uL2Vudmlyb25tZW50LWhhbmRsZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gW2FyZ3MuZW52aXJvbm1lbnRIYW5kbGVyXSAtIE9wdGlvbmFsIGVudmlyb25tZW50IGhhbmRsZXIgZm9yIE5vZGUtb25seSBmaWxlIG9wZXJhdGlvbnMuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxOb3JtYWxpemVkQXR0YWNobWVudElucHV0Pn0gLSBOb3JtYWxpemVkIGF0dGFjaG1lbnQgaW5wdXQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIG5vcm1hbGl6ZVJlY29yZEF0dGFjaG1lbnRJbnB1dChpbnB1dCwgYXJncyA9IHt9KSB7XG4gIGNvbnN0IGRlZmF1bHRGaWxlbmFtZSA9IGFyZ3MuZGVmYXVsdEZpbGVuYW1lIHx8IFwiYXR0YWNobWVudC5iaW5cIlxuICBjb25zdCBlbnZpcm9ubWVudEhhbmRsZXIgPSBhcmdzLmVudmlyb25tZW50SGFuZGxlclxuICAvKipcbiAgICogRGVmaW5lcyBidWZmZXIuXG4gICAqIEB0eXBlIHtCdWZmZXJ9ICovXG4gIGxldCBidWZmZXJcbiAgLyoqXG4gICAqIENvbnRlbnQgdHlwZS5cbiAgICogQHR5cGUge3N0cmluZyB8IG51bGx9ICovXG4gIGxldCBjb250ZW50VHlwZSA9IG51bGxcbiAgLyoqXG4gICAqIERlZmluZXMgZmlsZW5hbWUuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gIGxldCBmaWxlbmFtZVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFVwbG9hZGVkRmlsZSkge1xuICAgIGJ1ZmZlciA9IGF3YWl0IHVwbG9hZGVkRmlsZUJ1ZmZlcihpbnB1dCwgZW52aXJvbm1lbnRIYW5kbGVyKVxuICAgIGZpbGVuYW1lID0gaW5wdXQuZmlsZW5hbWUoKVxuICAgIGNvbnRlbnRUeXBlID0gaW5wdXQuY29udGVudFR5cGUoKSB8fCBudWxsXG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChpbnB1dCkgJiYgdHlwZW9mIGlucHV0LnBhdGggPT09IFwic3RyaW5nXCIgJiYgaW5wdXQucGF0aC5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGFyZ3MuYWxsb3dQYXRoSW5wdXQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGFjaG1lbnQgcGF0aCBpbnB1dCBpcyBkaXNhYmxlZFwiKVxuICAgIH1cblxuICAgIGlmICghZW52aXJvbm1lbnRIYW5kbGVyIHx8IHR5cGVvZiBlbnZpcm9ubWVudEhhbmRsZXIucmVzb2x2ZUF0dGFjaG1lbnRJbnB1dFBhdGggIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXR0YWNobWVudCBwYXRoIGlucHV0IGlzIHVuc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnRcIilcbiAgICB9XG5cbiAgICBjb25zdCBhbGxvd2VkUGF0aFByZWZpeGVzID0gQXJyYXkuaXNBcnJheShhcmdzLmFsbG93ZWRQYXRoUHJlZml4ZXMpXG4gICAgICA/IGFyZ3MuYWxsb3dlZFBhdGhQcmVmaXhlcy5maWx0ZXIoKGVudHJ5KSA9PiB0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIgJiYgZW50cnkubGVuZ3RoID4gMClcbiAgICAgIDogW11cbiAgICBjb25zdCB7YnVmZmVyOiBmaWxlQnVmZmVyLCBmaWxlUGF0aH0gPSBhd2FpdCBlbnZpcm9ubWVudEhhbmRsZXIucmVzb2x2ZUF0dGFjaG1lbnRJbnB1dFBhdGgoe1xuICAgICAgYWxsb3dlZFBhdGhQcmVmaXhlcyxcbiAgICAgIGlucHV0UGF0aDogaW5wdXQucGF0aFxuICAgIH0pXG5cbiAgICBidWZmZXIgPSBmaWxlQnVmZmVyXG4gICAgZmlsZW5hbWUgPSB0eXBlb2YgaW5wdXQuZmlsZW5hbWUgPT09IFwic3RyaW5nXCIgJiYgaW5wdXQuZmlsZW5hbWUubGVuZ3RoID4gMCA/IGlucHV0LmZpbGVuYW1lIDogYmFzZU5hbWUoZmlsZVBhdGgpXG4gICAgY29udGVudFR5cGUgPSB0eXBlb2YgaW5wdXQuY29udGVudFR5cGUgPT09IFwic3RyaW5nXCIgJiYgaW5wdXQuY29udGVudFR5cGUubGVuZ3RoID4gMCA/IGlucHV0LmNvbnRlbnRUeXBlIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5wdXQpICYmIHR5cGVvZiBpbnB1dC5jb250ZW50QmFzZTY0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgYnVmZmVyID0gQnVmZmVyLmZyb20oaW5wdXQuY29udGVudEJhc2U2NCwgXCJiYXNlNjRcIilcbiAgICBmaWxlbmFtZSA9IHR5cGVvZiBpbnB1dC5maWxlbmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBpbnB1dC5maWxlbmFtZS5sZW5ndGggPiAwID8gaW5wdXQuZmlsZW5hbWUgOiBkZWZhdWx0RmlsZW5hbWVcbiAgICBjb250ZW50VHlwZSA9IHR5cGVvZiBpbnB1dC5jb250ZW50VHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBpbnB1dC5jb250ZW50VHlwZS5sZW5ndGggPiAwID8gaW5wdXQuY29udGVudFR5cGUgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChpbnB1dCkgJiYgXCJjb250ZW50XCIgaW4gaW5wdXQpIHtcbiAgICBidWZmZXIgPSB0b0J1ZmZlcihpbnB1dC5jb250ZW50KVxuICAgIGZpbGVuYW1lID0gdHlwZW9mIGlucHV0LmZpbGVuYW1lID09PSBcInN0cmluZ1wiICYmIGlucHV0LmZpbGVuYW1lLmxlbmd0aCA+IDAgPyBpbnB1dC5maWxlbmFtZSA6IGRlZmF1bHRGaWxlbmFtZVxuICAgIGNvbnRlbnRUeXBlID0gdHlwZW9mIGlucHV0LmNvbnRlbnRUeXBlID09PSBcInN0cmluZ1wiICYmIGlucHV0LmNvbnRlbnRUeXBlLmxlbmd0aCA+IDAgPyBpbnB1dC5jb250ZW50VHlwZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyTGlrZShpbnB1dCkpIHtcbiAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGlucHV0LmFycmF5QnVmZmVyKClcblxuICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyKVxuICAgIGZpbGVuYW1lID0gdHlwZW9mIC8qKiBAdHlwZSB7P30gKi8gKGlucHV0KS5uYW1lID09PSBcInN0cmluZ1wiICYmIC8qKiBAdHlwZSB7P30gKi8gKGlucHV0KS5uYW1lLmxlbmd0aCA+IDBcbiAgICAgID8gLyoqIEB0eXBlIHs/fSAqLyAoaW5wdXQpLm5hbWVcbiAgICAgIDogZGVmYXVsdEZpbGVuYW1lXG4gICAgY29udGVudFR5cGUgPSB0eXBlb2YgLyoqIEB0eXBlIHs/fSAqLyAoaW5wdXQpLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgLyoqIEB0eXBlIHs/fSAqLyAoaW5wdXQpLnR5cGUubGVuZ3RoID4gMFxuICAgICAgPyAvKiogQHR5cGUgez99ICovIChpbnB1dCkudHlwZVxuICAgICAgOiBudWxsXG4gIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiIHx8IEJ1ZmZlci5pc0J1ZmZlcihpbnB1dCkgfHwgaXNBcnJheUJ1ZmZlcihpbnB1dCkgfHwgaXNVaW50OEFycmF5KGlucHV0KSkge1xuICAgIGJ1ZmZlciA9IHRvQnVmZmVyKGlucHV0KVxuICAgIGZpbGVuYW1lID0gZGVmYXVsdEZpbGVuYW1lXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYXR0YWNobWVudCBpbnB1dFwiKVxuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gdHlwZW9mIGZpbGVuYW1lID09PSBcInN0cmluZ1wiICYmIGZpbGVuYW1lLmxlbmd0aCA+IDBcbiAgICA/IGJhc2VOYW1lKGZpbGVuYW1lKVxuICAgIDogXCJcIlxuXG4gIHJldHVybiB7XG4gICAgYnl0ZVNpemU6IGJ1ZmZlci5sZW5ndGgsXG4gICAgY29udGVudEJ1ZmZlcjogYnVmZmVyLFxuICAgIGNvbnRlbnRCYXNlNjQ6IGJ1ZmZlci50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICBjb250ZW50VHlwZSxcbiAgICBmaWxlbmFtZTogbm9ybWFsaXplZEZpbGVuYW1lIHx8IGRlZmF1bHRGaWxlbmFtZVxuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/attachments/store.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/attachments/store.js"],"names":[],"mappings":"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"}