velocious 1.0.643 → 1.0.645

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 (279) hide show
  1. package/README.md +21 -10
  2. package/build/authorization/ability.js +36 -13
  3. package/build/background-jobs/adapter.js +9 -0
  4. package/build/background-jobs/main.js +35 -10
  5. package/build/background-jobs/store.js +217 -38
  6. package/build/background-jobs/types.js +15 -0
  7. package/build/configuration-types.js +1 -1
  8. package/build/configuration.js +45 -9
  9. package/build/database/drivers/base-column.js +8 -0
  10. package/build/database/drivers/mssql/sql/update.js +1 -3
  11. package/build/database/drivers/mysql/sql/update.js +1 -3
  12. package/build/database/drivers/pgsql/column.js +22 -0
  13. package/build/database/drivers/pgsql/sql/update.js +1 -3
  14. package/build/database/drivers/sqlite/sql/alter-table.js +11 -1
  15. package/build/database/drivers/sqlite/sql/update.js +1 -3
  16. package/build/database/query/index.js +2 -2
  17. package/build/database/query/model-class-query.js +26 -10
  18. package/build/database/query/preloader/has-many.js +4 -1
  19. package/build/database/query/query-data.js +2 -1
  20. package/build/database/query/update-base.js +14 -0
  21. package/build/database/query/with-count.js +3 -1
  22. package/build/database/record/acts-as-list.js +37 -13
  23. package/build/database/record/attachments/store.js +336 -26
  24. package/build/database/record/auditing.js +6 -3
  25. package/build/database/record/index.js +197 -42
  26. package/build/database/record/instance-relationships/belongs-to.js +2 -1
  27. package/build/database/record/validators/uniqueness.js +8 -5
  28. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
  29. package/build/frontend-model-controller.js +136 -53
  30. package/build/frontend-model-resource/base-resource.js +87 -37
  31. package/build/frontend-model-resource/velocious-attachment-resource.js +98 -31
  32. package/build/frontend-models/base.js +307 -59
  33. package/build/frontend-models/preloader.js +6 -3
  34. package/build/frontend-models/query.js +15 -6
  35. package/build/frontend-models/resource-definition.js +21 -2
  36. package/build/frontend-models/use-destroyed-event.js +1 -1
  37. package/build/frontend-models/use-model-class-event.js +2 -2
  38. package/build/frontend-models/use-updated-event.js +1 -1
  39. package/build/frontend-models/websocket-channel.js +256 -93
  40. package/build/frontend-models/websocket-publishers.js +218 -18
  41. package/build/http-server/client/websocket-session.js +13 -1
  42. package/build/http-server/websocket-channel.js +15 -2
  43. package/build/src/authorization/ability.d.ts +9 -3
  44. package/build/src/authorization/ability.d.ts.map +1 -1
  45. package/build/src/authorization/ability.js +33 -14
  46. package/build/src/background-jobs/adapter.d.ts +6 -0
  47. package/build/src/background-jobs/adapter.d.ts.map +1 -1
  48. package/build/src/background-jobs/adapter.js +9 -1
  49. package/build/src/background-jobs/main.d.ts +6 -0
  50. package/build/src/background-jobs/main.d.ts.map +1 -1
  51. package/build/src/background-jobs/main.js +34 -11
  52. package/build/src/background-jobs/store.d.ts +66 -12
  53. package/build/src/background-jobs/store.d.ts.map +1 -1
  54. package/build/src/background-jobs/store.js +191 -35
  55. package/build/src/background-jobs/types.d.ts +55 -0
  56. package/build/src/background-jobs/types.d.ts.map +1 -1
  57. package/build/src/background-jobs/types.js +16 -1
  58. package/build/src/configuration-types.d.ts +3 -3
  59. package/build/src/configuration-types.d.ts.map +1 -1
  60. package/build/src/configuration-types.js +2 -2
  61. package/build/src/configuration.d.ts +18 -8
  62. package/build/src/configuration.d.ts.map +1 -1
  63. package/build/src/configuration.js +38 -7
  64. package/build/src/database/drivers/base-column.d.ts +5 -0
  65. package/build/src/database/drivers/base-column.d.ts.map +1 -1
  66. package/build/src/database/drivers/base-column.js +8 -1
  67. package/build/src/database/drivers/mssql/sql/update.d.ts.map +1 -1
  68. package/build/src/database/drivers/mssql/sql/update.js +2 -4
  69. package/build/src/database/drivers/mysql/sql/update.d.ts.map +1 -1
  70. package/build/src/database/drivers/mysql/sql/update.js +2 -4
  71. package/build/src/database/drivers/pgsql/column.d.ts +5 -0
  72. package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
  73. package/build/src/database/drivers/pgsql/column.js +19 -1
  74. package/build/src/database/drivers/pgsql/sql/update.d.ts.map +1 -1
  75. package/build/src/database/drivers/pgsql/sql/update.js +2 -4
  76. package/build/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -1
  77. package/build/src/database/drivers/sqlite/sql/alter-table.js +6 -2
  78. package/build/src/database/drivers/sqlite/sql/update.d.ts.map +1 -1
  79. package/build/src/database/drivers/sqlite/sql/update.js +2 -4
  80. package/build/src/database/query/index.d.ts +4 -4
  81. package/build/src/database/query/index.d.ts.map +1 -1
  82. package/build/src/database/query/index.js +3 -3
  83. package/build/src/database/query/model-class-query.d.ts +8 -2
  84. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  85. package/build/src/database/query/model-class-query.js +25 -11
  86. package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
  87. package/build/src/database/query/preloader/has-many.js +4 -2
  88. package/build/src/database/query/query-data.d.ts.map +1 -1
  89. package/build/src/database/query/query-data.js +3 -2
  90. package/build/src/database/query/update-base.d.ts +7 -0
  91. package/build/src/database/query/update-base.d.ts.map +1 -1
  92. package/build/src/database/query/update-base.js +13 -1
  93. package/build/src/database/query/with-count.d.ts.map +1 -1
  94. package/build/src/database/query/with-count.js +3 -2
  95. package/build/src/database/record/acts-as-list.d.ts.map +1 -1
  96. package/build/src/database/record/acts-as-list.js +35 -14
  97. package/build/src/database/record/attachments/store.d.ts +67 -0
  98. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  99. package/build/src/database/record/attachments/store.js +301 -25
  100. package/build/src/database/record/auditing.d.ts.map +1 -1
  101. package/build/src/database/record/auditing.js +7 -4
  102. package/build/src/database/record/index.d.ts +78 -26
  103. package/build/src/database/record/index.d.ts.map +1 -1
  104. package/build/src/database/record/index.js +171 -42
  105. package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
  106. package/build/src/database/record/instance-relationships/belongs-to.js +3 -2
  107. package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
  108. package/build/src/database/record/validators/uniqueness.js +8 -6
  109. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +4 -4
  110. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  111. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -12
  112. package/build/src/frontend-model-controller.d.ts +29 -8
  113. package/build/src/frontend-model-controller.d.ts.map +1 -1
  114. package/build/src/frontend-model-controller.js +122 -51
  115. package/build/src/frontend-model-resource/base-resource.d.ts +51 -24
  116. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  117. package/build/src/frontend-model-resource/base-resource.js +83 -37
  118. package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts +45 -26
  119. package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts.map +1 -1
  120. package/build/src/frontend-model-resource/velocious-attachment-resource.js +89 -31
  121. package/build/src/frontend-models/base.d.ts +53 -20
  122. package/build/src/frontend-models/base.d.ts.map +1 -1
  123. package/build/src/frontend-models/base.js +275 -59
  124. package/build/src/frontend-models/preloader.d.ts.map +1 -1
  125. package/build/src/frontend-models/preloader.js +6 -4
  126. package/build/src/frontend-models/query.d.ts +2 -2
  127. package/build/src/frontend-models/query.d.ts.map +1 -1
  128. package/build/src/frontend-models/query.js +14 -7
  129. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  130. package/build/src/frontend-models/resource-definition.js +20 -3
  131. package/build/src/frontend-models/use-destroyed-event.d.ts +1 -1
  132. package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
  133. package/build/src/frontend-models/use-destroyed-event.js +2 -2
  134. package/build/src/frontend-models/use-model-class-event.d.ts +2 -2
  135. package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
  136. package/build/src/frontend-models/use-model-class-event.js +3 -3
  137. package/build/src/frontend-models/use-updated-event.d.ts +1 -1
  138. package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
  139. package/build/src/frontend-models/use-updated-event.js +2 -2
  140. package/build/src/frontend-models/websocket-channel.d.ts +60 -41
  141. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  142. package/build/src/frontend-models/websocket-channel.js +225 -85
  143. package/build/src/frontend-models/websocket-publishers.d.ts +9 -0
  144. package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
  145. package/build/src/frontend-models/websocket-publishers.js +190 -19
  146. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  147. package/build/src/http-server/client/websocket-session.js +11 -2
  148. package/build/src/http-server/websocket-channel.d.ts +20 -8
  149. package/build/src/http-server/websocket-channel.d.ts.map +1 -1
  150. package/build/src/http-server/websocket-channel.js +15 -3
  151. package/build/src/sync/assets/cache.d.ts +288 -0
  152. package/build/src/sync/assets/cache.d.ts.map +1 -0
  153. package/build/src/sync/assets/cache.js +883 -0
  154. package/build/src/sync/assets/types.d.ts +199 -0
  155. package/build/src/sync/assets/types.d.ts.map +1 -0
  156. package/build/src/sync/assets/types.js +56 -0
  157. package/build/src/sync/sync-api-client.d.ts.map +1 -1
  158. package/build/src/sync/sync-api-client.js +4 -3
  159. package/build/src/sync/sync-client.d.ts.map +1 -1
  160. package/build/src/sync/sync-client.js +3 -2
  161. package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
  162. package/build/src/sync/sync-envelope-replay-service.js +6 -5
  163. package/build/src/sync/sync-publisher.d.ts.map +1 -1
  164. package/build/src/sync/sync-publisher.js +4 -3
  165. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts +2 -2
  166. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
  167. package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +3 -3
  168. package/build/src/testing/test-profiler.d.ts +4 -4
  169. package/build/src/testing/test-profiler.d.ts.map +1 -1
  170. package/build/src/testing/test-profiler.js +3 -3
  171. package/build/src/testing/test-runner.d.ts +279 -117
  172. package/build/src/testing/test-runner.d.ts.map +1 -1
  173. package/build/src/testing/test-runner.js +503 -933
  174. package/build/src/testing/test.d.ts +11 -72
  175. package/build/src/testing/test.d.ts.map +1 -1
  176. package/build/src/testing/test.js +131 -284
  177. package/build/src/testing/velocious-attempt-executor.d.ts +54 -0
  178. package/build/src/testing/velocious-attempt-executor.d.ts.map +1 -0
  179. package/build/src/testing/velocious-attempt-executor.js +408 -0
  180. package/build/src/testing/velocious-runner-reporter.d.ts +67 -0
  181. package/build/src/testing/velocious-runner-reporter.d.ts.map +1 -0
  182. package/build/src/testing/velocious-runner-reporter.js +240 -0
  183. package/build/src/testing/velocious-suite-hook-executor.d.ts +19 -0
  184. package/build/src/testing/velocious-suite-hook-executor.d.ts.map +1 -0
  185. package/build/src/testing/velocious-suite-hook-executor.js +41 -0
  186. package/build/src/testing/velocious-test-arguments.d.ts +39 -0
  187. package/build/src/testing/velocious-test-arguments.d.ts.map +1 -0
  188. package/build/src/testing/velocious-test-arguments.js +55 -0
  189. package/build/src/utils/model-primary-key.d.ts +73 -0
  190. package/build/src/utils/model-primary-key.d.ts.map +1 -0
  191. package/build/src/utils/model-primary-key.js +144 -0
  192. package/build/src/utils/sha256-bytes-hex.d.ts +7 -0
  193. package/build/src/utils/sha256-bytes-hex.d.ts.map +1 -0
  194. package/build/src/utils/sha256-bytes-hex.js +117 -0
  195. package/build/src/utils/sha256-hex.d.ts +2 -4
  196. package/build/src/utils/sha256-hex.d.ts.map +1 -1
  197. package/build/src/utils/sha256-hex.js +6 -120
  198. package/build/sync/assets/cache.js +998 -0
  199. package/build/sync/assets/types.js +62 -0
  200. package/build/sync/sync-api-client.js +3 -2
  201. package/build/sync/sync-client.js +2 -1
  202. package/build/sync/sync-envelope-replay-service.js +5 -4
  203. package/build/sync/sync-publisher.js +3 -2
  204. package/build/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
  205. package/build/testing/test-profiler.js +2 -2
  206. package/build/testing/test-runner.js +496 -990
  207. package/build/testing/test.js +164 -306
  208. package/build/testing/velocious-attempt-executor.js +441 -0
  209. package/build/testing/velocious-runner-reporter.js +264 -0
  210. package/build/testing/velocious-suite-hook-executor.js +43 -0
  211. package/build/testing/velocious-test-arguments.js +64 -0
  212. package/build/tsconfig.tsbuildinfo +1 -1
  213. package/build/utils/model-primary-key.js +171 -0
  214. package/build/utils/sha256-bytes-hex.js +132 -0
  215. package/build/utils/sha256-hex.js +7 -135
  216. package/package.json +5 -4
  217. package/src/authorization/ability.js +36 -13
  218. package/src/background-jobs/adapter.js +9 -0
  219. package/src/background-jobs/main.js +35 -10
  220. package/src/background-jobs/store.js +217 -38
  221. package/src/background-jobs/types.js +15 -0
  222. package/src/configuration-types.js +1 -1
  223. package/src/configuration.js +45 -9
  224. package/src/database/drivers/base-column.js +8 -0
  225. package/src/database/drivers/mssql/sql/update.js +1 -3
  226. package/src/database/drivers/mysql/sql/update.js +1 -3
  227. package/src/database/drivers/pgsql/column.js +22 -0
  228. package/src/database/drivers/pgsql/sql/update.js +1 -3
  229. package/src/database/drivers/sqlite/sql/alter-table.js +11 -1
  230. package/src/database/drivers/sqlite/sql/update.js +1 -3
  231. package/src/database/query/index.js +2 -2
  232. package/src/database/query/model-class-query.js +26 -10
  233. package/src/database/query/preloader/has-many.js +4 -1
  234. package/src/database/query/query-data.js +2 -1
  235. package/src/database/query/update-base.js +14 -0
  236. package/src/database/query/with-count.js +3 -1
  237. package/src/database/record/acts-as-list.js +37 -13
  238. package/src/database/record/attachments/store.js +336 -26
  239. package/src/database/record/auditing.js +6 -3
  240. package/src/database/record/index.js +197 -42
  241. package/src/database/record/instance-relationships/belongs-to.js +2 -1
  242. package/src/database/record/validators/uniqueness.js +8 -5
  243. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
  244. package/src/frontend-model-controller.js +136 -53
  245. package/src/frontend-model-resource/base-resource.js +87 -37
  246. package/src/frontend-model-resource/velocious-attachment-resource.js +98 -31
  247. package/src/frontend-models/base.js +307 -59
  248. package/src/frontend-models/preloader.js +6 -3
  249. package/src/frontend-models/query.js +15 -6
  250. package/src/frontend-models/resource-definition.js +21 -2
  251. package/src/frontend-models/use-destroyed-event.js +1 -1
  252. package/src/frontend-models/use-model-class-event.js +2 -2
  253. package/src/frontend-models/use-updated-event.js +1 -1
  254. package/src/frontend-models/websocket-channel.js +256 -93
  255. package/src/frontend-models/websocket-publishers.js +218 -18
  256. package/src/http-server/client/websocket-session.js +13 -1
  257. package/src/http-server/websocket-channel.js +15 -2
  258. package/src/sync/assets/cache.js +998 -0
  259. package/src/sync/assets/types.js +62 -0
  260. package/src/sync/sync-api-client.js +3 -2
  261. package/src/sync/sync-client.js +2 -1
  262. package/src/sync/sync-envelope-replay-service.js +5 -4
  263. package/src/sync/sync-publisher.js +3 -2
  264. package/src/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
  265. package/src/testing/test-profiler.js +2 -2
  266. package/src/testing/test-runner.js +496 -990
  267. package/src/testing/test.js +164 -306
  268. package/src/testing/velocious-attempt-executor.js +441 -0
  269. package/src/testing/velocious-runner-reporter.js +264 -0
  270. package/src/testing/velocious-suite-hook-executor.js +43 -0
  271. package/src/testing/velocious-test-arguments.js +64 -0
  272. package/src/utils/model-primary-key.js +171 -0
  273. package/src/utils/sha256-bytes-hex.js +132 -0
  274. package/src/utils/sha256-hex.js +7 -135
  275. package/build/src/testing/testing-package-adapter.d.ts +0 -9
  276. package/build/src/testing/testing-package-adapter.d.ts.map +0 -1
  277. package/build/src/testing/testing-package-adapter.js +0 -69
  278. package/build/testing/testing-package-adapter.js +0 -76
  279. package/src/testing/testing-package-adapter.js +0 -76
@@ -403,7 +403,7 @@
403
403
  * @property {string[]} [builtInMemberCommands] - Built-in member command names (`find`, `update`, `destroy`, `attach`, `download`, `url`).
404
404
  * @property {string} [modelName] - Frontend model name override.
405
405
  * @property {string[]} [relationships] - Relationship names to expose in frontend models. Type and target model are inferred from the backend model's registered relationships.
406
- * @property {string} [primaryKey] - Primary key attribute name.
406
+ * @property {string | string[]} [primaryKey] - Primary key attribute name or ordered composite primary-key attribute names.
407
407
  * @property {FrontendModelResourceServerConfiguration} [server] - Optional legacy backend behavior overrides for built-in frontend actions.
408
408
  * @property {FrontendModelResourceSyncConfiguration | boolean} [sync] - Optional safe local/offline sync policy metadata. `policy` participates in the hash but is not exposed to generated frontend config/manifest.
409
409
  */
@@ -691,4 +691,4 @@
691
691
  * @property {WebsocketMessageHandlerResolverType} [websocketMessageHandlerResolver] - Resolve a raw websocket message handler for each connection.
692
692
  */
693
693
  export const nothing = {};
694
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uLXR5cGVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVIOzs7OztHQUtHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOztHQUVHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7OztHQUlHO0FBRUg7Ozs7R0FJRztBQUVIOztHQUVHO0FBRUg7Ozs7Ozs7Ozs7OztHQVlHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUgsNERBQTREO0FBQzVELHlGQUF5RjtBQUN6Riw4SkFBOEo7QUFDOUosK0ZBQStGO0FBRS9GOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxRUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUNIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7O0dBR0c7QUFFSDs7R0FFRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBR0g7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7OztHQUlHO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7Ozs7O0dBV0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUg7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7OztHQUdHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7OztHQUlHO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7OztHQUlHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Q0c7QUFFSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQG1vZHVsZSB0eXBlc1xuICovXG5cbi8qKlxuICogSW1tdXRhYmxlIGlkZW50aXR5IHNoYXJlZCBieSBhcHBsaWNhdGlvbiBpbml0aWFsaXplcnMgZm9yIG9uZSBwcm9jZXNzIGxpZmVjeWNsZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFwcGxpY2F0aW9uUHJvY2Vzc0NvbnRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIC0gR2VuZXJpYyBwcm9jZXNzIHR5cGUgc3VwcGxpZWQgdG8gYGNvbmZpZ3VyYXRpb24uaW5pdGlhbGl6ZSgpYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnN0YW5jZUlkIC0gT3BhcXVlIGlkZW50aXR5IHVuaXF1ZSB0byB0aGlzIGxpZmVjeWNsZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQsIHJlc3BvbnNlOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTx2b2lkPn0gQ29yc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIHN1YnNjcmlwdGlvbj86IHtjaGFubmVsOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0sIGNsaWVudDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvaW5kZXguanNcIikuZGVmYXVsdCwgd2Vic29ja2V0U2Vzc2lvbjogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXNlc3Npb24uanNcIikuZGVmYXVsdCwgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA9PiB0eXBlb2YgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgdm9pZCB8IFByb21pc2U8dHlwZW9mIGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvd2Vic29ja2V0LWNoYW5uZWwuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvd2Vic29ja2V0LWNoYW5uZWwuanNcIikuZGVmYXVsdCB8IHZvaWQ+fSBXZWJzb2NrZXRDaGFubmVsUmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBXZWJzb2NrZXRNZXNzYWdlSGFuZGxlclxuICogQHByb3BlcnR5IHsoYXJnczoge21lc3NhZ2U6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IFtvbk1lc3NhZ2VdIC0gSGFuZGxlciBmb3IgaW5jb21pbmcgd2Vic29ja2V0IG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHsoYXJnczoge3Nlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uT3Blbl0gLSBIYW5kbGVyIHdoZW4gdGhlIHdlYnNvY2tldCBzZXNzaW9uIG9wZW5zLlxuICogQHByb3BlcnR5IHsoYXJnczoge3Nlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uQ2xvc2VdIC0gSGFuZGxlciB3aGVuIHRoZSB3ZWJzb2NrZXQgc2Vzc2lvbiBjbG9zZXMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7ZXJyb3I6IEVycm9yLCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IFtvbkVycm9yXSAtIEhhbmRsZXIgd2hlbiBhIHdlYnNvY2tldCBtZXNzYWdlIGVycm9ycy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIGNsaWVudDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvaW5kZXguanNcIikuZGVmYXVsdCwgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBXZWJzb2NrZXRNZXNzYWdlSGFuZGxlciB8IHZvaWQgfCBQcm9taXNlPFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyIHwgdm9pZD59IFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyUmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KGlkOiBzdHJpbmcpID0+IHtkZWZhdWx0OiB0eXBlb2YgaW1wb3J0KFwiLi9pbml0aWFsaXplci5qc1wiKS5kZWZhdWx0fX0gSW5pdGlhbGl6ZXJzUmVxdWlyZUNvbnRleHRUeXBlXG4gKiBAdHlwZWRlZiB7SW5pdGlhbGl6ZXJzUmVxdWlyZUNvbnRleHRUeXBlICYge1xuICogICBrZXlzOiAoKSA9PiBzdHJpbmdbXSxcbiAqICAgaWQ6IHN0cmluZ1xuICogfX0gV2VicGFja1JlcXVpcmVDb250ZXh0XG4gKiBAdHlwZWRlZiB7e3JlcXVpcmVDb250ZXh0OiBXZWJwYWNrUmVxdWlyZUNvbnRleHR9fSBJbml0aWFsaXplcnNFeHBvcnRUeXBlXG4gKiBAdHlwZWRlZiB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0pID0+IFByb21pc2U8SW5pdGlhbGl6ZXJzRXhwb3J0VHlwZT59IEluaXRpYWxpemVyc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNxbENvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZV0gLSBEYXRhYmFzZSBuYW1lIGZvciB0aGUgU1FMIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbb3B0aW9uc10gLSBEcml2ZXItc3BlY2lmaWMgY29ubmVjdGlvbiBvcHRpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy5lbmNyeXB0XSAtIFdoZXRoZXIgdG8gZW5jcnlwdCB0aGUgY29ubmVjdGlvbiAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNjaGVtYV0gLSBEZWZhdWx0IHNjaGVtYSBmb3IgdW5xdWFsaWZpZWQgdGFibGUgbG9va3VwcyAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNlcnZlck5hbWVdIC0gVExTIFNOSSBzZXJ2ZXIgbmFtZSBvdmVycmlkZSBmb3IgTVNTUUwgKGVtcHR5IHN0cmluZyBkaXNhYmxlcyBTTkkpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlXSAtIFdoZXRoZXIgdG8gdHJ1c3QgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBQYXNzd29yZCBmb3IgdGhlIFNRTCB1c2VyLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtwb29sXSAtIENvbm5lY3Rpb24gcG9vbCBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcG9vbC5tYXhdIC0gTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMuIFNldCBudWxsIHRvIGRpc2FibGUgdGhlIGNhcC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9vbC5taW5dIC0gTWluaW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2wuaWRsZVRpbWVvdXRNaWxsaXNdIC0gSWRsZSB0aW1lb3V0IGJlZm9yZSByZWxlYXNpbmcgYSBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcG9vbC5jaGVja291dFRpbWVvdXRNaWxsaXNdIC0gVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBhbiBhdmFpbGFibGUgY29ubmVjdGlvbiBhZnRlciB0aGUgbWF4IGNvbm5lY3Rpb24gY2FwIGlzIHJlYWNoZWQuIFNldCBudWxsIHRvIHdhaXQgaW5kZWZpbml0ZWx5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZXJ2ZXJdIC0gU1FMIHNlcnZlciBob3N0bmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlcl0gLSBTUUwgdXNlcm5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZVBvb2xDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtjaGVja291dFRpbWVvdXRNaWxsaXNdIC0gVGltZW91dCB3aGlsZSBhIGNoZWNrb3V0IHdhaXRzIGZvciBhbiBhdmFpbGFibGUgYXN5bmMtdHJhY2tlZCBjb25uZWN0aW9uIGFmdGVyIHRoZSBtYXggbGl2ZSBjb25uZWN0aW9uIGNhcCBpcyByZWFjaGVkLiBTZXQgbnVsbCB0byB3YWl0IGluZGVmaW5pdGVseS4gRGVmYXVsdDogMTAwMDAuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtpZGxlVGltZW91dE1pbGxpc10gLSBJZGxlIHRpbWVvdXQgYmVmb3JlIGNsb3NpbmcgYSBjaGVja2VkLWluIGFzeW5jLXRyYWNrZWQgY29ubmVjdGlvbi4gU2V0IG51bGwgdG8gZGlzYWJsZSBpZGxlIHJlYXBpbmcuIERlZmF1bHQ6IDUwMDAuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFttYXhdIC0gTWF4aW11bSBsaXZlIGFzeW5jLXRyYWNrZWQgY29ubmVjdGlvbnMgZm9yIHRoaXMgcG9vbC4gRGVmYXVsdHMgdG8gMTAuIEV4dHJhIGNoZWNrb3V0cyB3YWl0IHVudGlsIGEgbWF0Y2hpbmcgY29ubmVjdGlvbiBpcyBjaGVja2VkIGluIG9yIGNhcGFjaXR5IGlzIGZyZWVkLiBTZXQgbnVsbCB0byBkaXNhYmxlIHRoZSBjYXAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlQ2hhcnNldF0gLSBEZWZhdWx0IGNoYXJhY3RlciBzZXQgYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDSEFSQUNURVIgU0VUYC4gRGlzdGluY3QgZnJvbSBgY2hhcnNldGAsIHdoaWNoIGlzIHRoZSBjbGllbnQgY29ubmVjdGlvbiBjaGFyc2V0IGZvcndhcmRlZCB0byB0aGUgbXlzcWwyIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VDb2xsYXRpb25dIC0gRGVmYXVsdCBjb2xsYXRpb24gYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDT0xMQVRFYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VdIC0gRGF0YWJhc2UgbmFtZSBmb3IgdGhpcyBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZWFkbG9ja01heFJldHJpZXNdIC0gTWF4aW11bSBhdHRlbXB0cyBmb3IgdGhlIG91dGVybW9zdCB0cmFuc2FjdGlvbiB3aGVuIGl0IGtlZXBzIGhpdHRpbmcgZGVhZGxvY2tzLiBEZWZhdWx0cyB0byA4LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZWFkbG9ja0Jhc2VXYWl0TXNdIC0gQmFzZSBkZWxheSAobXMpIGZvciB0aGUgZGVhZGxvY2sgcmV0cnkgYmFja29mZjsgdGhlIHBlci1hdHRlbXB0IGNlaWxpbmcgZG91YmxlcyBmcm9tIGhlcmUuIERlZmF1bHRzIHRvIDUwLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZWFkbG9ja01heFdhaXRNc10gLSBDYXAgKG1zKSBvbiB0aGUgZGVhZGxvY2sgcmV0cnkgYmFja29mZiBjZWlsaW5nIHNvIHRoZSBqaXR0ZXJlZCB3YWl0IHN0YXlzIGJvdW5kZWQuIERlZmF1bHRzIHRvIDEwMDAuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBbZHJpdmVyXSAtIERyaXZlciBjbGFzcyB0byB1c2UgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3Bvb2wvYmFzZS5qc1wiKS5kZWZhdWx0fSBbcG9vbFR5cGVdIC0gUG9vbCBjbGFzcyB0byB1c2UgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkgeygpID0+IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBbZ2V0Q29ubmVjdGlvbl0gLSBDdXN0b20gY29ubmVjdGlvbiBmYWN0b3J5IG92ZXJyaWRlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0XSAtIERhdGFiYXNlIGhvc3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFttaWdyYXRpb25zXSAtIFdoZXRoZXIgbWlncmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyBkYXRhYmFzZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW211bHRpcGxlU3RhdGVtZW50c10gLSAoTXlTUUwpIE9wdCBpbiB0byBtdWx0aS1zdGF0ZW1lbnQgcXVlcmllcyBzbyBzdHJ1Y3R1cmUgU1FMIGxvYWRzIGFuZCBhbGwtdGFibGUgY2xlYW51cCBjYW4gYmF0Y2ggaW50byBvbmUgcm91bmQtdHJpcC4gT2ZmIGJ5IGRlZmF1bHQ7IG9yZGluYXJ5IHF1ZXJpZXMgb3RoZXJ3aXNlIHJlamVjdCBzdGFja2VkIHN0YXRlbWVudHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heFJvd3NQZXJJbnNlcnRdIC0gTWF4aW11bSByb3dzIHBlciBgSU5TRVJUIC4uLiBWQUxVRVMgKC4uLiksICguLi4pLCAuLi5gIHN0YXRlbWVudCBnZW5lcmF0ZWQgYnkgYFJlY29yZC5pbnNlcnRNdWx0aXBsZWAuIERlZmF1bHRzIHRvIDUwMC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4SW5zZXJ0U3FsQnl0ZXNdIC0gTWF4aW11bSBzZXJpYWxpemVkIFNRTCBzaXplLCBpbiBieXRlcywgZm9yIGEgc2luZ2xlIGBJTlNFUlQgLi4uIFZBTFVFUyAoLi4uKSwgKC4uLiksIC4uLmAgc3RhdGVtZW50LiBEZWZhdWx0cyB0byAxIE1pQiAoMTA0ODU3NikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heEluQ2xhdXNlVmFsdWVzXSAtIE1heGltdW0gdmFsdWVzIGluIGEgc2luZ2xlIGBJTiAoLi4uKWAgY29ob3J0IHVzZWQgYnkgcHJlbG9hZHMsIGFzc29jaWF0aW9uIGNvdW50cywgYW5kIHF1ZXJ5RGF0YSBhZ2dyZWdhdGVzLiBEZWZhdWx0cyB0byA5OTkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heFF1ZXJ5U3FsQnl0ZXNdIC0gTWF4aW11bSBzZXJpYWxpemVkIFNRTCBzaXplLCBpbiBieXRlcywgZm9yIGEgc2luZ2xlIGNvaG9ydCBxdWVyeSB1c2VkIGJ5IHByZWxvYWRzLCBhc3NvY2lhdGlvbiBjb3VudHMsIGFuZCBxdWVyeURhdGEgYWdncmVnYXRlcy4gRGVmYXVsdHMgdG8gMSBNaUIgKDEwNDg1NzYpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBQYXNzd29yZCBmb3IgdGhlIGRhdGFiYXNlIHVzZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BvcnRdIC0gRGF0YWJhc2UgcG9ydC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHJpbWFyeUtleVR5cGVdIC0gRGVmYXVsdCB0eXBlIGZvciBpbXBsaWNpdCBtaWdyYXRpb24gcHJpbWFyeSBrZXlzIGFuZCByZWZlcmVuY2VzLiBEZWZhdWx0cyB0byBgdXVpZGAuXG4gKiBAcHJvcGVydHkge0RhdGFiYXNlUG9vbENvbmZpZ3VyYXRpb259IFtwb29sXSAtIFZlbG9jaW91cyBkYXRhYmFzZSBwb29sIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEZyaWVuZGx5IG5hbWUgZm9yIHRoZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHsoZmlsZTogc3RyaW5nKSA9PiBzdHJpbmd9IFtsb2NhdGVGaWxlXSAtIE9wdGlvbmFsIHNxbGl0ZS13ZWIgc3FsLmpzIHdhc20gcmVzb2x2ZXIgKGBpbml0U3FsSnMoe2xvY2F0ZUZpbGV9KWApLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcmVhZE9ubHldIC0gV2hldGhlciB3cml0ZXMgc2hvdWxkIGJlIGJsb2NrZWQgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NjaGVtYV0gLSBEZWZhdWx0IHNjaGVtYSBmb3IgdW5xdWFsaWZpZWQgdGFibGUgbG9va3VwcyAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2NoZW1hQ2FjaGVdIC0gV2hldGhlciBzY2hlbWEgbWV0YWRhdGEgc2hvdWxkIGJlIGNhY2hlZCBvbiB0aGUgZHJpdmVyLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtyZWNvcmRdIC0gUmVjb3JkLWxldmVsIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZWNvcmQudHJhbnNhY3Rpb25zXSAtIFdoZXRoZXIgcmVjb3JkIG9wZXJhdGlvbnMgc2hvdWxkIHVzZSB0cmFuc2FjdGlvbnMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNldF0gLSBXaGV0aGVyIHRvIHJlc2V0IHRoZSBkYXRhYmFzZSBvbiBzdGFydHVwLlxuICogQHByb3BlcnR5IHtTcWxDb25maWd9IFtzcWxDb25maWddIC0gRHJpdmVyLXNwZWNpZmljIFNRTCBjb25maWcuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt0ZW5hbnRPbmx5XSAtIFdoZXRoZXIgdGhpcyBkYXRhYmFzZSBpZGVudGlmaWVyIGlzIG9ubHkgYWN0aXZlIGluc2lkZSBhIHJlc29sdmVkIHRlbmFudCBjb250ZXh0LlxuICogQHByb3BlcnR5IHtcIm1zc3FsXCIgfCBcIm15c3FsXCIgfCBcInBnc3FsXCIgfCBcInNxbGl0ZVwifSBbdHlwZV0gLSBEYXRhYmFzZSB0eXBlIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VzZURhdGFiYXNlXSAtIERhdGFiYXNlIHRvIHN3aXRjaCB0byBhZnRlciBjb25uZWN0aW5nLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1c2VybmFtZV0gLSBVc2VybmFtZSBmb3IgZGF0YWJhc2UgYXV0aGVudGljYXRpb24uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7XCJkZWJ1Zy1sb3ctbGV2ZWxcIiB8IFwiZGVidWdcIiB8IFwiaW5mb1wiIHwgXCJ3YXJuXCIgfCBcImVycm9yXCJ9IExvZ0xldmVsXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2dnaW5nT3V0cHV0UGF5bG9hZFxuICogQHByb3BlcnR5IHtMb2dMZXZlbH0gbGV2ZWwgLSBMb2cgbGV2ZWwuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZSAtIEZvcm1hdHRlZCBtZXNzYWdlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN1YmplY3QgLSBMb2cgc3ViamVjdC5cbiAqIEBwcm9wZXJ0eSB7RGF0ZX0gdGltZXN0YW1wIC0gVGltZXN0YW1wLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTG9nZ2luZ091dHB1dFxuICogQHByb3BlcnR5IHsoYXJnOiBMb2dnaW5nT3V0cHV0UGF5bG9hZCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IHdyaXRlIC0gV3JpdGUgYSBsb2cgZW50cnkuXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsW119IFtsZXZlbHNdIC0gRGVmYXVsdCBsZXZlbHMgZm9yIHRoaXMgb3V0cHV0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTG9nZ2luZ091dHB1dENvbmZpZ1xuICogQHByb3BlcnR5IHtMb2dnaW5nT3V0cHV0fSBvdXRwdXQgLSBPdXRwdXQgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge0FycmF5PExvZ0xldmVsPn0gW2xldmVsc10gLSBMZXZlbHMgZW5hYmxlZCBmb3IgdGhpcyBvdXRwdXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7TG9nZ2luZ091dHB1dENvbmZpZyB8IExvZ2dpbmdPdXRwdXQgfCBpbXBvcnQoXCIuL2xvZ2dlci9iYXNlLWxvZ2dlci5qc1wiKS5kZWZhdWx0fSBMb2dnZXJDb25maWdcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb25zb2xlXSAtIEVuYWJsZS9kaXNhYmxlIGNvbnNvbGUgbG9nZ2luZyBmb3IgcmVxdWVzdCBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgb2YgXCJ0ZXN0XCIgYW5kIGZvciBIVFRQIHNlcnZlciBsb2dzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZmlsZV0gLSBFbmFibGUvZGlzYWJsZSB3cml0aW5nIGxvZ3MgdG8gYSBmaWxlLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkaXJlY3RvcnldIC0gRGlyZWN0b3J5IHdoZXJlIGxvZyBmaWxlcyBhcmUgc3RvcmVkLiBEZWZhdWx0cyB0byBcIjxwcm9qZWN0Pi9sb2dcIi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmlsZVBhdGhdIC0gRXhwbGljaXQgcGF0aCBmb3IgdGhlIGxvZyBmaWxlLiBEZWZhdWx0cyB0byBcIjxkaXJlY3Rvcnk+LzxlbnZpcm9ubWVudD4ubG9nXCIuXG4gKiBAcHJvcGVydHkge0FycmF5PFwiZGVidWctbG93LWxldmVsXCIgfCBcImRlYnVnXCIgfCBcImluZm9cIiB8IFwid2FyblwiIHwgXCJlcnJvclwiPn0gW2xldmVsc10gLSBPdmVycmlkZSB3aGljaCBsb2cgbGV2ZWxzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGVidWdMb3dMZXZlbF0gLSBDb252ZW5pZW5jZSBmbGFnIHRvIGluY2x1ZGUgdmVyeSBsb3ctbGV2ZWwgZGVidWcgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3F1ZXJ5TG9nZ2luZ10gLSBFbmFibGUvZGlzYWJsZSBkYXRhYmFzZSBxdWVyeSBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgdGVzdCBhbmQgZmFsc2UgaW4gdGVzdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtzZW5zaXRpdmVOYW1lc10gLSBBZGRpdGlvbmFsIGNhc2UtaW5zZW5zaXRpdmUgc2Vuc2l0aXZlIGhlYWRlci9wYXJhbWV0ZXIgbmFtZXMgdG8gcmVkYWN0IGZyb20gbG9nZ2luZy5cbiAqIEBwcm9wZXJ0eSB7TG9nZ2VyQ29uZmlnW119IFtsb2dnZXJzXSAtIExvZ2dlciBpbnN0YW5jZXMgKGNvbnZlcnRlZCB0byBvdXRwdXRzIHdoZW4gY29uZmlndXJlZCkuXG4gKiBAcHJvcGVydHkge0xvZ2dpbmdPdXRwdXRDb25maWdbXX0gW291dHB1dHNdIC0gRXhwbGljaXQgbG9nZ2VyIG91dHB1dHMgKG92ZXJyaWRlcyBjb25zb2xlL2ZpbGUgZGVmYXVsdHMgd2hlbiBwcm92aWRlZCkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTdHJ1Y3R1cmVTcWxDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbZW5hYmxlZEVudmlyb25tZW50c10gLSBFbnZpcm9ubWVudHMgYWxsb3dlZCB0byB3cml0ZSBzdHJ1Y3R1cmUgc3FsIGZpbGVzIGR1cmluZyBhdXRvbWF0aWMgbWlncmF0aW9uIGR1bXBzLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2Rpc2FibGVkRW52aXJvbm1lbnRzXSAtIEVudmlyb25tZW50cyB0aGF0IHNob3VsZCBza2lwIHdyaXRpbmcgc3RydWN0dXJlIHNxbCBmaWxlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtcImJlYWNvblwiIHwgXCJwb2xsaW5nXCJ9IEJhY2tncm91bmRKb2JzRGlzcGF0Y2hTdHJhdGVneVxuICpcbiAqIC0gYFwiYmVhY29uXCJgIChkZWZhdWx0KTogZXZlbnQtZHJpdmVuIGRpc3BhdGNoLiBUaGVcbiAqICAgYGJhY2tncm91bmQtam9icy1tYWluYCBwcm9jZXNzIGRyYWlucyB0aGUgcXVldWUgb24gZW5xdWV1ZSwgb25cbiAqICAgd29ya2VyIHJlYWRpbmVzcywgb24gQmVhY29uIGJyb2FkY2FzdHMgKHNvIGNyb3NzLXByb2Nlc3MgZW5xdWV1ZXNcbiAqICAgd2FrZSBpdCksIGFuZCBhcm1zIGEgYHNldFRpbWVvdXRgIGZvciB0aGUgc29vbmVzdCBmdXR1cmUtc2NoZWR1bGVkXG4gKiAgIGpvYi4gRmFsbHMgYmFjayBncmFjZWZ1bGx5IHRvIGRpcmVjdCBpbi1wcm9jZXNzIHRyaWdnZXJpbmcgd2hlblxuICogICBCZWFjb24gaXMgbm90IGNvbmZpZ3VyZWQuXG4gKiAtIGBcInBvbGxpbmdcImA6IGxlZ2FjeSBtb2RlLCBydW5zIGEgZml4ZWQtaW50ZXJ2YWwgcG9sbCBvdmVyIHRoZVxuICogICBgYmFja2dyb3VuZF9qb2JzYCB0YWJsZSAoc2VlIGBwb2xsSW50ZXJ2YWxNc2ApLlxuICovXG5cbi8qKiBAdHlwZWRlZiB7XCJiYWNrZ3JvdW5kXCIgfCBcImlubGluZVwifSBCYWNrZ3JvdW5kSm9ic01vZGUgKi9cbi8qKiBAdHlwZWRlZiB7XCJjYW5kaWRhdGVcIiB8IFwiYWN0aXZlXCIgfCBcInJldGlyZWRcIn0gQmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uSW5pdGlhbFN0YXRlICovXG4vKiogQHR5cGVkZWYgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBpbXBvcnQoXCIuL2JhY2tncm91bmQtam9icy9hZGFwdGVyLmpzXCIpLmRlZmF1bHR9IEJhY2tncm91bmRKb2JzQWRhcHRlckZhY3RvcnkgKi9cbi8qKiBAdHlwZWRlZiB7dHlwZW9mIGltcG9ydChcIi4vYmFja2dyb3VuZC1qb2JzL3BsYXRmb3JtLWpvYi5qc1wiKS5kZWZhdWx0fSBCYWNrZ3JvdW5kSm9iQ2xhc3MgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9iYWNrZ3JvdW5kLWpvYnMvYWRhcHRlci5qc1wiKS5kZWZhdWx0IHwgQmFja2dyb3VuZEpvYnNBZGFwdGVyRmFjdG9yeX0gW2FkYXB0ZXJdIC0gQWRhcHRlciBpbnN0YW5jZSBvciBzeW5jaHJvbm91cyBmYWN0b3J5LiBBIGZhY3RvcnkgY3JlYXRlcyBvbmUgYWRhcHRlciBwZXIgY29uZmlndXJhdGlvbiBsaWZlY3ljbGU7IHRoZSBmcmFtZXdvcmsgY2xvc2VzIGFkYXB0ZXJzIGl0IHJlc29sdmVzLlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9iQ2xhc3NbXX0gW2pvYkNsYXNzZXNdIC0gU3RhdGljIHBvcnRhYmxlIGpvYiBjbGFzc2VzIGF2YWlsYWJsZSB0byBCcm93c2VyL0V4cG8gbG9jYWwgZGlzcGF0Y2guIERlZmF1bHRzIHRvIGBbXWA7IE5vZGUga2VlcHMgaXRzIGZpbGVzeXN0ZW0gcmVnaXN0cnkuXG4gKiBAcHJvcGVydHkge0JhY2tncm91bmRKb2JzTW9kZX0gW21vZGVdIC0gYFwiYmFja2dyb3VuZFwiYCB1c2VzIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIvdHJhbnNwb3J0IGFuZCBkdXJhYmxlIHF1ZXVlIHNlbWFudGljczsgYFwiaW5saW5lXCJgIHBlcmZvcm1zIGltbWVkaWF0ZWx5IHdpdGhvdXQgZHVyYWJsZSBxdWV1ZSBzdGF0ZS4gRGVmYXVsdHMgdG8gYFwiYmFja2dyb3VuZFwiYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZ2VuZXJhdGlvbklkXSAtIE9wdC1pbiByZWxlYXNlIGdlbmVyYXRpb24gaWRlbnRpdHkuIE11c3QgbWF0Y2ggYF5bQS1aYS16MC05XVtBLVphLXowLTkuXy1dezAsMTI3fSRgIGFuZCBhZ3JlZSB3aXRoIGVudmlyb25tZW50L0FQSS9DTEkgc291cmNlcy5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uSW5pdGlhbFN0YXRlfSBbaW5pdGlhbEdlbmVyYXRpb25TdGF0ZV0gLSBHZW5lcmF0aW9uLWF3YXJlIGJvb3Qgc3RhdGUuIERlZmF1bHRzIHRvIGBcImNhbmRpZGF0ZVwiYDsgaW52YWxpZCB3aXRob3V0IGBnZW5lcmF0aW9uSWRgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsaWZlY3ljbGVTb2NrZXRQYXRoXSAtIEFic29sdXRlIHJlbGVhc2UtbG9jYWwgVW5peCBzb2NrZXQgdXNlZCBieSBhY2tub3dsZWRnZWQgYWN0aXZhdGlvbiBhbmQgcmV0aXJlbWVudCBjb21tYW5kcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBIb3N0bmFtZSBmb3IgdGhlIGJhY2tncm91bmQgam9icyBtYWluIHByb2Nlc3MuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BvcnRdIC0gUG9ydCBmb3IgdGhlIGJhY2tncm91bmQgam9icyBtYWluIHByb2Nlc3MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlSWRlbnRpZmllcl0gLSBEYXRhYmFzZSBpZGVudGlmaWVyIHVzZWQgdG8gc3RvcmUgYmFja2dyb3VuZCBqb2JzLiBCcm93c2VyL0V4cG8gbG9jYWwgZGlzcGF0Y2ggdXNlcyB0aGlzIGV4aXN0aW5nIFNRTGl0ZSBkYXRhYmFzZSBhbmQgZGVmYXVsdHMgdG8gYFwiZGVmYXVsdFwiYC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4Q29uY3VycmVudElubGluZUpvYnNdIC0gSG93IG1hbnkgYGZvcmtlZDogZmFsc2VgIGpvYnMgYSBzaW5nbGVcbiAqICAgYGJhY2tncm91bmQtam9icy13b3JrZXJgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byBydW4gaW4gcGFyYWxsZWwuIENvbmN1cnJlbmN5XG4gKiAgIGlzIGF0IHRoZSBKUyBldmVudC1sb29wIGxldmVsOiBldmVyeSBjb25jdXJyZW50IGpvYiBzaGFyZXMgdGhlIHdvcmtlcidzXG4gKiAgIHByb2Nlc3MgYW5kIERCIGNvbm5lY3Rpb24gcG9vbCwgc28gdGhpcyBzaG91bGQgZml0IHRoZSBwb29sIHNpemUsIG5vdCB0aGVcbiAqICAgQ1BVIGNvdW50LiBGb3JraW5nIHJlbWFpbnMgdGhlIHJpZ2h0IHRvb2wgZm9yIG1lbW9yeSBpc29sYXRpb24gYWNyb3NzXG4gKiAgIGxvbmctcnVubmluZyBqb2JzIGFuZCBmb3IgdXNpbmcgbW9yZSBjb3Jlcy4gRGVmYXVsdDogYDRgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhDb25jdXJyZW50Rm9ya2VkSm9ic10gLSBIb3cgbWFueSBvdXQtb2YtcHJvY2Vzc1xuICogICBgXCJmb3JrZWRcImAgb3IgYFwic3Bhd25lZFwiYCBqb2JzIGEgc2luZ2xlIGBiYWNrZ3JvdW5kLWpvYnMtd29ya2VyYCBpc1xuICogICBhbGxvd2VkIHRvIGtlZXAgaW4gZmxpZ2h0LiBEZWZhdWx0OiBgNGAuIFRoaXMgaXMgYSBwZXItd29ya2VyIHNhZmV0eSBjYXA7XG4gKiAgIGZvciB3b3JrbG9hZC1zaGFwZWQgbGltaXRzIHVzZSBwZXItcXVldWUgY2FwcyAoYHF1ZXVlc2ApIGluc3RlYWQsIHdoaWNoIGFyZVxuICogICBlbmZvcmNlZCBjbHVzdGVyLXdpZGUgYW5kIGFyZSBpbW11bmUgdG8gZHVwbGljYXRlIHdvcmtlciBwcm9jZXNzZXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2xlZFJ1bm5lckNvdW50XSAtIE51bWJlciBvZiB3YXJtLCByZXVzYWJsZSBjaGlsZCBydW5uZXJzIG93bmVkIGJ5IGVhY2ggd29ya2VyLiBQb29sZWQgY2FwYWNpdHkgaXMgc2VwYXJhdGUgZnJvbSBpbmxpbmUgYW5kIGZvcmtlZC9zcGF3bmVkIGNhcGFjaXR5LiBEZWZhdWx0OiBgNGAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2xlZFJ1bm5lckNvbmN1cnJlbmN5XSAtIE51bWJlciBvZiBqb2JzIGVhY2ggcG9vbGVkIGNoaWxkIHJ1bnMgY29uY3VycmVudGx5IG9uIGl0cyBvd24gZXZlbnQgbG9vcC4gVG90YWwgcGVyLXdvcmtlciBwb29sZWQgY2FwYWNpdHkgaXMgYHBvb2xlZFJ1bm5lckNvdW50IMOXIHBvb2xlZFJ1bm5lckNvbmN1cnJlbmN5YC4gYDFgIChkZWZhdWx0KSBrZWVwcyBlYWNoIGNoaWxkIHNlcmlhbDsgcmFpc2UgaXQgZm9yIEkvTy1ib3VuZCBqb2JzIHNvIGEgYm91bmRlZCBzZXQgb2YgaXNvbGF0ZWQgcHJvY2Vzc2VzIGhhbmRsZXMgaGlnaCBjb25jdXJyZW5jeSAobGlrZSB0aGUgaW5saW5lIGxhbmUpIHdpdGhvdXQgb25lIHByb2Nlc3MgcGVyIGNvbmN1cnJlbnQgam9iLiBEZWZhdWx0OiBgMWAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2xlZFJ1bm5lck1heEpvYnNdIC0gTnVtYmVyIG9mIHNlcXVlbnRpYWwgam9icyBhIHBvb2xlZCBjaGlsZCBydW5zIGJlZm9yZSBpdCBpcyByZXBsYWNlZCwgYm91bmRpbmcgcHJvY2Vzcy1sZXZlbCByZXNvdXJjZSBhY2N1bXVsYXRpb24uIERlZmF1bHQ6IGAxMDBgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb29sZWRSdW5uZXJNYXhSc3NCeXRlc10gLSBSU1MgYnl0ZXMgYWZ0ZXIgYW4gYWNrbm93bGVkZ2VkIGpvYiBhdCB3aGljaCBhIHBvb2xlZCBjaGlsZCBpcyByZXBsYWNlZC4gRGVmYXVsdDogYDUzNjg3MDkxMmAgKDUxMiBNaUIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb29sZWRSdW5uZXJNYXhMaWZldGltZU1zXSAtIEFnZSBhZnRlciBhbiBhY2tub3dsZWRnZWQgam9iIGF0IHdoaWNoIGEgcG9vbGVkIGNoaWxkIGlzIHJlcGxhY2VkLiBEZWZhdWx0OiBgMzYwMDAwMGAgKG9uZSBob3VyKS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywge21heENvbmN1cnJlbnQ/OiBudW1iZXIsIHByaW9yaXR5PzogbnVtYmVyfT59IFtxdWV1ZXNdIC0gUGVyLXF1ZXVlXG4gKiAgIGNvbmN1cnJlbmN5IGNhcHMgYW5kIGRpc3BhdGNoIHByaW9yaXRpZXMsIFNpZGVraXEtc3R5bGUuIEEgam9iIGRlY2xhcmVzIGl0cyBxdWV1ZSAoc3RhdGljXG4gKiAgIGBxdWV1ZWAgb24gdGhlIGpvYiBjbGFzcywgb3IgdGhlIGBxdWV1ZWAgZW5xdWV1ZSBvcHRpb247IGRlZmF1bHRzIHRvIGBcImRlZmF1bHRcImApLCBhbmRcbiAqICAgYHF1ZXVlc1tuYW1lXS5tYXhDb25jdXJyZW50YCBib3VuZHMgaG93IG1hbnkgam9icyBmcm9tIHRoYXQgcXVldWUgbWF5IGJlXG4gKiAgIGluIGZsaWdodCBhY3Jvc3MgdGhlIHdob2xlIGNsdXN0ZXIgKGVuZm9yY2VkIHZpYSBkdXJhYmxlIHBlci1rZXlcbiAqICAgY29uY3VycmVuY3ksIHNvIGl0IGhvbGRzIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgd29ya2VyIHByb2Nlc3NlcyBydW4pLlxuICogICBTaXplIGVhY2ggcXVldWUgdG8gaXRzIHdvcmtsb2FkOiBJL08tYm91bmQgcXVldWVzIChlLmcuIGJ1aWxkIHJ1bm5lcnNcbiAqICAgd2FpdGluZyBvbiByZW1vdGUgRG9ja2VyIHNlcnZlcnMpIGNhbiBydW4gZmFyIGFib3ZlIHRoZSBjb3JlIGNvdW50LCB3aGlsZVxuICogICBDUFUtYm91bmQgcXVldWVzIHNob3VsZCBzdGF5IG5lYXIgaXQuIGBxdWV1ZXNbbmFtZV0ucHJpb3JpdHlgIChkZWZhdWx0IGAwYClcbiAqICAgbWFrZXMgdGhlIG1haW4gcHJvY2VzcyBkaXNwYXRjaCBoaWdoZXItcHJpb3JpdHkgcXVldWVzIGJlZm9yZSBsb3dlci1wcmlvcml0eVxuICogICBvbmVzIHJlZ2FyZGxlc3Mgb2YgZW5xdWV1ZSBvcmRlciwgc28gYSBzbWFsbCB0aW1lLWNyaXRpY2FsIHF1ZXVlIGNhbiBuZXZlciBiZVxuICogICBzdGFydmVkIGJ5IGEgZmxvb2Qgb2YgbG93LXByaW9yaXR5IHdvcmsgc2hhcmluZyBhIHdvcmtlciBwb29sLiBVbmxpa2VcbiAqICAgU2lkZWtpcSdzIHN0cmljdCBxdWV1ZSBvcmRlcmluZywgcHJpb3JpdHkgY29tcG9zZXMgd2l0aCB0aGUgcGVyLXF1ZXVlIGNhcHM6XG4gKiAgIGEgaGlnaGVyLXByaW9yaXR5IHF1ZXVlIHRoYXQgaXMgYWxyZWFkeSBhdCBpdHMgYG1heENvbmN1cnJlbnRgIGlzIHNraXBwZWQgYW5kXG4gKiAgIGRpc3BhdGNoIGZhbGxzIHRocm91Z2ggdG8gdGhlIG5leHQgZWxpZ2libGUgbG93ZXItcHJpb3JpdHkgam9iLCBzbyBhIGJ1c3lcbiAqICAgaGlnaC1wcmlvcml0eSBxdWV1ZSBkb2VzIG5vdCBibG9jayBldmVyeXRoaW5nIGVsc2UuIFRoaXMgZmFsbHRocm91Z2ggaXMgYVxuICogICBwcm9wZXJ0eSBvZiB0aGUgcXVldWUtZGVyaXZlZCBjYXA7IGEgam9iIHRoYXQgc3VwcGxpZXMgaXRzIG93biBleHBsaWNpdFxuICogICBgY29uY3VycmVuY3lLZXlgL2BtYXhDb25jdXJyZW5jeWAgYnlwYXNzZXMgdGhlIHF1ZXVlIGNhcCBlbnRpcmVseSAoYW5cbiAqICAgZXhwbGljaXQga2V5IGFsd2F5cyB3aW5zIOKAlCBzZWUgYWJvdmUpIGFuZCBpcyBib3VuZGVkIG9ubHkgYnkgdGhhdCBrZXksIHNvIGl0XG4gKiAgIGlzIG5vdCBoZWxkIGJhY2sgYnkgdGhlIHF1ZXVlJ3MgY2FwIGFuZCBwcmlvcml0eSBzaW1wbHkgb3JkZXJzIGl0IG5vcm1hbGx5LlxuICogICBQcmlvcml0aWVzIG1heSBiZSBhbnkgbnVtYmVyLCBpbmNsdWRpbmcgbmVnYXRpdmUgdG8gc2luayBhIHF1ZXVlIGJlbG93IHRoZVxuICogICBkZWZhdWx0LiBKb2JzIHdpdGhpbiB0aGUgc2FtZSBwcmlvcml0eSBrZWVwIEZJRk8gKGBzY2hlZHVsZWRfYXRgLCB0aGVuXG4gKiAgIGBjcmVhdGVkX2F0YCkgb3JkZXIuIERlZmF1bHQ6IGB7fWAgKG5vIHF1ZXVlIGNhcHMsIGFsbCBxdWV1ZXMgcHJpb3JpdHkgYDBgKS5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYnNEaXNwYXRjaFN0cmF0ZWd5fSBbZGlzcGF0Y2hTdHJhdGVneV0gLSBIb3cgdGhlIG1haW4gcHJvY2Vzc1xuICogICBkZXRlY3RzIG5ldyB3b3JrLiBEZWZhdWx0cyB0byBgXCJiZWFjb25cImAgKGV2ZW50LWRyaXZlbikuIFNldCB0byBgXCJwb2xsaW5nXCJgXG4gKiAgIHRvIHJlc3RvcmUgdGhlIGxlZ2FjeSBmaXhlZC1pbnRlcnZhbCBwb2xsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb2xsSW50ZXJ2YWxNc10gLSBQb2xsIGludGVydmFsIGluIG1pbGxpc2Vjb25kcy4gT25seSB1c2VkXG4gKiAgIHdoZW4gYGRpc3BhdGNoU3RyYXRlZ3kgPT09IFwicG9sbGluZ1wiYC4gRGVmYXVsdDogYDEwMDBgLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbam9iVGltZW91dE1zXSAtIFdhbGwtY2xvY2sgYmFja3N0b3AsIGluIG1zLCBmb3IgYVxuICogICBgXCJmb3JrZWRcImAgam9iIHJ1bm5lci4gQSBmb3JrZWQgam9iIHN0aWxsIHJ1bm5pbmcgYWZ0ZXIgdGhpcyBpcyB0ZXJtaW5hdGVkXG4gKiAgIChTSUdURVJNLCB0aGVuIFNJR0tJTEwgYWZ0ZXIgdGhlIHJlYXBpbmcgZ3JhY2UpIGFuZCByZXBvcnRlZCBmYWlsZWQsIHNvIGFcbiAqICAgc2luZ2xlIGdlbnVpbmVseS1odW5nIHJ1bm5lciBjYW4ndCBwaW4gYSBkcmFpbmluZyB3b3JrZXIg4oCUIGFuZCBpdHMgZnVsbC1hcHBcbiAqICAgYm9vdCBhbmQgREIgY29ubmVjdGlvbnMg4oCUIGluZGVmaW5pdGVseSAoZS5nLiBhY3Jvc3MgYSBkZXBsb3kgd2hlcmUgYSByZXRpcmVkXG4gKiAgIHdvcmtlciBkcmFpbnMgaW4tZmxpZ2h0IGpvYnMpLiBUaGlzIGlzIGEgY29hcnNlIHNhZmV0eSBuZXQsIG5vdCBwZXItam9iXG4gKiAgIHR1bmluZzogc2V0IGl0IHdlbGwgYWJvdmUgdGhlIGxvbmdlc3QgbGVnaXRpbWF0ZSBmb3JrZWQgam9iIChidWlsZCBydW5uZXJzLFxuICogICBsb25nIGltcG9ydHMpIHNvIG9ubHkgZ2VudWluZWx5LXN0dWNrIHJ1bm5lcnMgYXJlIGtpbGxlZC4gT21pdCwgYG51bGxgLCBvclxuICogICBgPD0gMGAgdG8gZGlzYWJsZSAoZGVmYXVsdCksIHdoaWNoIHByZXNlcnZlcyB0aGUgcHJpb3IgdW5ib3VuZGVkIGJlaGF2aW9yLlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9ic1JldGVudGlvbkNvbmZpZ3VyYXRpb259IFtyZXRlbnRpb25dIC0gUmV0ZW50aW9uL3BydW5pbmdcbiAqICAgb2YgdGVybWluYWwgam9iIHJvd3MuIFdpdGhvdXQgcHJ1bmluZyB0aGUgam9icyB0YWJsZSBncm93cyB1bmJvdW5kZWRcbiAqICAgKGNvbXBsZXRlZCByb3dzIGFjY3VtdWxhdGUgZm9yZXZlciksIHdoaWNoIGJsb2F0cyBzdG9yYWdlIGFuZCBpbmRleGVzIGFuZFxuICogICBldmVudHVhbGx5IHNsb3dzIGRpc3BhdGNoLiBUaGUgbWFpbiBwcm9jZXNzIHN3ZWVwcyB0ZXJtaW5hbCByb3dzIHBhc3QgdGhlaXJcbiAqICAgd2luZG93IG9uIGFuIGludGVydmFsLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmFja2dyb3VuZEpvYnNSZXRlbnRpb25Db25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtjb21wbGV0ZWRUdGxNc10gLSBEZWxldGUgYGNvbXBsZXRlZGAgam9icyB3aG9zZVxuICogICBgY29tcGxldGVkX2F0X21zYCBpcyBvbGRlciB0aGFuIHRoaXMgbWFueSBtcy4gYG51bGxgIG9yIGA8PSAwYCBkaXNhYmxlc1xuICogICBjb21wbGV0ZWQgcHJ1bmluZy4gRGVmYXVsdDogYDYwNDgwMDAwMGAgKDcgZGF5cykuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtmYWlsZWRUdGxNc10gLSBEZWxldGUgdGVybWluYWwgYGZhaWxlZGAvYG9ycGhhbmVkYFxuICogICBqb2JzIG9sZGVyIHRoYW4gdGhpcyBtYW55IG1zLiBgbnVsbGAgb3IgYDw9IDBgIGRpc2FibGVzIChrZWVwcyB0aGVtIGZvclxuICogICBkZWJ1Z2dpbmcpLiBEZWZhdWx0OiBgMjU5MjAwMDAwMGAgKDMwIGRheXMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtiYXRjaFNpemVdIC0gUm93cyBkZWxldGVkIHBlciBiYXRjaC4gRGVmYXVsdDogYDEwMDBgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzd2VlcEludGVydmFsTXNdIC0gSG93IG9mdGVuIHRoZSByZXRlbnRpb24gc3dlZXAgcnVucy5cbiAqICAgRGVmYXVsdDogYDM2MDAwMDBgICgxIGhvdXIpLlxuICovXG4vKipcbiAqIEZ1bGx5LXJlc29sdmVkIHJldGVudGlvbiBjb25maWcgYXMgcmV0dXJuZWQgYnkgYGdldEJhY2tncm91bmRKb2JzQ29uZmlnKClgXG4gKiAoZXZlcnkgZmllbGQgZGVmYXVsdGVkKSwgYXMgb3Bwb3NlZCB0byB0aGUgcGFydGlhbCB1c2VyLXByb3ZpZGVkIGlucHV0LlxuICogQHR5cGVkZWYge29iamVjdH0gUmVzb2x2ZWRCYWNrZ3JvdW5kSm9ic1JldGVudGlvbkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gY29tcGxldGVkVHRsTXMgLSBSZXNvbHZlZCBjb21wbGV0ZWQtam9iIFRUTCBpbiBtcyAoYG51bGxgIGRpc2FibGVzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gZmFpbGVkVHRsTXMgLSBSZXNvbHZlZCBmYWlsZWQvb3JwaGFuZWQgVFRMIGluIG1zIChgbnVsbGAgZGlzYWJsZXMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJhdGNoU2l6ZSAtIFJlc29sdmVkIGRlbGV0ZSBiYXRjaCBzaXplLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHN3ZWVwSW50ZXJ2YWxNcyAtIFJlc29sdmVkIHN3ZWVwIGludGVydmFsIGluIG1zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmVhY29uQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW5hYmxlZF0gLSBXaGV0aGVyIHRvIGNvbm5lY3QgdG8gYSBCZWFjb24gYnJva2VyLiBEZWZhdWx0cyB0byBmYWxzZSB1bmxlc3MgYGhvc3RgL2Bwb3J0YCBvciBgaW5Qcm9jZXNzOiB0cnVlYCBhcmUgc2V0LCBvciBlbnYgdmFycyBhcmUgcHJlc2VudC4gRXhwbGljaXQgYGZhbHNlYCBkaXNhYmxlcyBCZWFjb24gZXZlbiB3aGVuIGVudiB2YXJzIGFyZSBzZXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpblByb2Nlc3NdIC0gV2hlbiB0cnVlLCB1c2UgYSBtb2R1bGUtbGV2ZWwgaW4tcHJvY2VzcyBicm9rZXIgc2luZ2xldG9uIGluc3RlYWQgb2YgY29ubmVjdGluZyBvdmVyIFRDUC4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGhvc3RgL2Bwb3J0YC4gVXNlZnVsIGZvciB0ZXN0cyBhbmQgc2luZ2xlLXByb2Nlc3MgZGVwbG95bWVudHMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hvc3RdIC0gSG9zdG5hbWUgb2YgdGhlIEJlYWNvbiBicm9rZXIgZGFlbW9uLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgb2YgdGhlIEJlYWNvbiBicm9rZXIgZGFlbW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwZWVyVHlwZV0gLSBPcHRpb25hbCBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhpcyBwZWVyIChlLmcuIFwic2VydmVyXCIsIFwiYmFja2dyb3VuZC1qb2JzLXdvcmtlclwiKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdW5yZWFjaGFibGVSZXBvcnRNc10gLSBHcmFjZSB3aW5kb3cgKG1zKSBhIGJlYWNvbiBjb25uZWN0L2Rpc2Nvbm5lY3QgYmxpcCBtdXN0IHBlcnNpc3QgYmVmb3JlIGl0IGlzIHJlcG9ydGVkIGFzIGEgZnJhbWV3b3JrLWVycm9yLiBUcmFuc2llbnQgb3V0YWdlcyB0aGF0IHJlY292ZXIgd2l0aGluIHRoaXMgd2luZG93IChlLmcuIGEgZGVwbG95IHJlc3RhcnRpbmcgdGhlIGJyb2tlcikgYXJlIG5vdCByZXBvcnRlZC4gRGVmYXVsdHMgdG8gMzAwMDAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIdHRwQ29tcHJlc3Npb25Db25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtlbmFibGVkXSAtIFdoZXRoZXIgYnVmZmVyZWQgcmVzcG9uc2UgY29tcHJlc3Npb24gaXMgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZTsgc2V0IGZhbHNlIHRvIGRpc2FibGUgZ2xvYmFsbHkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RocmVzaG9sZF0gLSBNaW5pbXVtIGJ1ZmZlcmVkIGJvZHkgc2l6ZSBpbiBieXRlcyBiZWZvcmUgY29tcHJlc3Npb24gaXMgYXBwbGllZC4gRGVmYXVsdHMgdG8gMTAyNC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYnJvdGxpUXVhbGl0eV0gLSBCcm90bGkgZW5jb2RlciBxdWFsaXR5ICgwLTExKS4gRGVmYXVsdHMgdG8gNC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZ3ppcExldmVsXSAtIEd6aXAgY29tcHJlc3Npb24gbGV2ZWwgKDAtOSkuIERlZmF1bHRzIHRvIDYuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3JtYWxpemVkSHR0cENvbXByZXNzaW9uQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBlbmFibGVkIC0gV2hldGhlciBidWZmZXJlZCBIVFRQIHJlc3BvbnNlIGNvbXByZXNzaW9uIGlzIGVuYWJsZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGhyZXNob2xkIC0gTWluaW11bSBidWZmZXJlZCBib2R5IHNpemUgaW4gYnl0ZXMgYmVmb3JlIGNvbXByZXNzaW9uIGlzIGFwcGxpZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYnJvdGxpUXVhbGl0eSAtIEJyb3RsaSBlbmNvZGVyIHF1YWxpdHkgKDAtMTEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGd6aXBMZXZlbCAtIEd6aXAgY29tcHJlc3Npb24gbGV2ZWwgKDAtOSkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIdHRwU2VydmVyQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFuIHwgSHR0cENvbXByZXNzaW9uQ29uZmlndXJhdGlvbn0gW2NvbXByZXNzaW9uXSAtIEJ1ZmZlcmVkIHJlc3BvbnNlIGNvbXByZXNzaW9uLiBFbmFibGVkIHdpdGggZG9jdW1lbnRlZCBkZWZhdWx0cyB3aGVuIGFic2VudDsgZmFsc2Ugb3Ige2VuYWJsZWQ6IGZhbHNlfSBkaXNhYmxlcyBpdCBnbG9iYWxseS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBIb3N0bmFtZSB0byBiaW5kIHRoZSBIVFRQIHNlcnZlciB0by5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2luUHJvY2Vzc10gLSBSdW4gSFRUUCBoYW5kbGVycyBpbiB0aGUgbWFpbiB0aHJlYWQgaW5zdGVhZCBvZiB3b3JrZXIgdGhyZWFkcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4V29ya2Vyc10gLSBCYWNrd2FyZC1jb21wYXRpYmxlIGFsaWFzIGZvciB3b3JrZXJzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgdG8gYmluZCB0aGUgSFRUUCBzZXJ2ZXIgdG8uXG4gKiBAcHJvcGVydHkge3ttYXhQZW5kaW5nQnl0ZXM/OiBudW1iZXIsIG1heFBlbmRpbmdNZXNzYWdlcz86IG51bWJlcn19IFt3ZWJzb2NrZXRJbmJvdW5kUXVldWVdIC0gUGVyLXNlc3Npb24gcmV0YWluZWQgaW5ib3VuZCBXZWJTb2NrZXQgbWVzc2FnZSBsaW1pdHMuXG4gKiBAcHJvcGVydHkge3ttYXhQZW5kaW5nQnl0ZXM/OiBudW1iZXIsIG1heFBlbmRpbmdGcmFtZXM/OiBudW1iZXJ9fSBbd2Vic29ja2V0T3V0Ym91bmRRdWV1ZV0gLSBQZXItY2xpZW50IHJldGFpbmVkIG91dGJvdW5kIFdlYlNvY2tldCBmcmFtZSBsaW1pdHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3dvcmtlcnNdIC0gV29ya2VyIGhhbmRsZXJzIHRvIHN0YXJ0IGZvciB0aGUgSFRUUCBzZXJ2ZXIuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRXZlcnlPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gW2ZpcnN0SW5dIC0gRGVsYXkgYmVmb3JlIHRoZSBmaXJzdCBlbnF1ZXVlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbYXJnc10gLSBBcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBqb2Igd2hlbiBlbnF1ZXVlZC5cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4vYmFja2dyb3VuZC1qb2JzL2pvYi5qc1wiKS5kZWZhdWx0fSBjbGFzcyAtIEpvYiBjbGFzcyB0byBlbnF1ZXVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjcm9uXSAtIENyb250YWIgZXhwcmVzc2lvbiAoNS1maWVsZCBQT1NJWCwgcGx1cyBgQGhvdXJseWAvYEBkYWlseWAvYEB3ZWVrbHlgL2BAbW9udGhseWAvYEB5ZWFybHlgL2BAbWlkbmlnaHRgKS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGV2ZXJ5YC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0aGUgc2NoZWR1bGUgaXMgZW5hYmxlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nIHwgW251bWJlciB8IHN0cmluZywgU2NoZWR1bGVkQmFja2dyb3VuZEpvYkV2ZXJ5T3B0aW9uc119IFtldmVyeV0gLSBSZXBlYXQgaW50ZXJ2YWwuIEVpdGhlciBgZXZlcnlgIG9yIGBjcm9uYCBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9iYWNrZ3JvdW5kLWpvYnMvdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9IFtvcHRpb25zXSAtIEpvYiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFZlbG9jaW91c1BhcmFtc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZT59IENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyUGF5bG9hZFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRXJyb3JSZXF1ZXN0RGV0YWlsc1xuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gW2JvZHldIC0gU2FuaXRpemVkIHBhcnNlZCByZXF1ZXN0IGJvZHksIHdoZW4gYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGh0dHBNZXRob2QgLSBSZXF1ZXN0IEhUVFAgbWV0aG9kLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBSZXF1ZXN0IHBhdGguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbGllbnRFcnJvclBheWxvYWRDb250ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29udHJvbGxlciAtIENvbnRyb2xsZXIgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYWN0aW9uXSAtIENvbnRyb2xsZXIgYWN0aW9uIG9yIGVuZHBvaW50IGxhYmVsLlxuICogQHByb3BlcnR5IHtcImluZGV4XCIgfCBcImZpbmRcIiB8IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImF0dGFjaFwiIHwgXCJhdHRhY2htZW50TGlzdFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiB8IFwiY3VzdG9tLWNvbW1hbmRcIn0gW2NvbW1hbmRUeXBlXSAtIEZyb250ZW5kLW1vZGVsIGNvbW1hbmQgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29ycmVsYXRpb25JZF0gLSBTZXJ2ZXItZ2VuZXJhdGVkIGlkZW50aWZpZXIgc2hhcmVkIGJ5IGFuIHVuZXhwZWN0ZWQgY2xpZW50IGVycm9yIGFuZCBmcmFtZXdvcmsgcmVwb3J0cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2V4cGVjdGVkRXJyb3JdIC0gV2hldGhlciB0aGUgZXJyb3IgaXMgYW4gZXhwZWN0ZWQgdXNlci1mbG93IGZhaWx1cmUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtmcm9udGVuZE1vZGVsRW5kcG9pbnRdIC0gV2hldGhlciB0aGUgZXJyb3IgY2FtZSBmcm9tIHRoZSBmcm9udGVuZC1tb2RlbCBlbmRwb2ludC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxdIC0gRnJvbnRlbmQtbW9kZWwgbmFtZSBmcm9tIHRoZSBmYWlsZWQgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVxdWVzdElkXSAtIFNoYXJlZCBmcm9udGVuZC1tb2RlbCByZXF1ZXN0IGlkLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhhcmdzOiB7XG4gKiAgIGNvbnRleHQ6IENsaWVudEVycm9yUGF5bG9hZENvbnRleHQsXG4gKiAgIGVycm9yOiBFcnJvcixcbiAqICAgcmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCxcbiAqICAgcmVxdWVzdERldGFpbHM6IEVycm9yUmVxdWVzdERldGFpbHMgfCBudWxsXG4gKiB9KSA9PiBQcm9taXNlPENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyUGF5bG9hZCB8IHZvaWQ+IHwgQ2xpZW50RXJyb3JQYXlsb2FkUmVwb3J0ZXJQYXlsb2FkIHwgdm9pZH0gQ2xpZW50RXJyb3JQYXlsb2FkUmVwb3J0ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7Y29uZmlndXJhdGlvbj86IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBjdXJyZW50RGV2aWNlPzogdW5rbm93biwgY3VycmVudFVzZXI/OiB1bmtub3duLCBtb2RlbFJlZ2lzdHJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB7bW9kZWw6IChuYW1lOiBzdHJpbmcpID0+IHVua25vd259LCBub3c/OiBEYXRlIHwgKCgpID0+IERhdGUpLCBvZmZsaW5lR3JhbnQ/OiB1bmtub3duLCBwYXJhbXM/OiBWZWxvY2lvdXNQYXJhbXMsIHJlcXVlc3Q/OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0LCByZXNvdXJjZVJ1bnRpbWU/OiBcImJhY2tlbmRcIiB8IFwiZnJvbnRlbmRcIiB8IFwib2ZmbGluZVwifX0gVmVsb2Npb3VzTG9vc2VPYmplY3RcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtuZXcgKGFyZ3M6IHthdHRhY2htZW50TmFtZT86IHN0cmluZywgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIG1vZGVsQ2xhc3M/OiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbmFtZT86IHN0cmluZywgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0pID0+IG9iamVjdH0gQXR0YWNobWVudERyaXZlckNvbnN0cnVjdG9yXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb24+fSBqb2JzIC0gU2NoZWR1bGVkIGpvYnMga2V5ZWQgYnkgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgPT4gU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uIHwgUHJvbWlzZTxTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb24+fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0xvYWRlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEF0dGFjaG1lbnREcml2ZXJDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIG5hbWU6IHN0cmluZywgb3B0aW9uczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSkgPT4gUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbY3JlYXRlXSAtIE9wdGlvbmFsIGZhY3RvcnkgZm9yIGEgY3VzdG9tIGF0dGFjaG1lbnQgZHJpdmVyIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtBdHRhY2htZW50RHJpdmVyQ29uc3RydWN0b3J9IFtkcml2ZXJDbGFzc10gLSBPcHRpb25hbCBjdXN0b20gYXR0YWNobWVudCBkcml2ZXIgY2xhc3MuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW2luc3RhbmNlXSAtIE9wdGlvbmFsIGN1c3RvbSBhdHRhY2htZW50IGRyaXZlciBpbnN0YW5jZS5cbiAqL1xuXG4vKipcbiAqIENsaWVudC1zYWZlIHN5bmNocm9uaXphdGlvbiBwb2xpY3kgZGVjbGFyZWQgd2l0aCBhIG1vZGVsIGF0dGFjaG1lbnQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBdHRhY2htZW50U3luY0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJlYWdlclwiIHwgXCJvbi1kZW1hbmRcIn0gZmV0Y2ggLSBXaGV0aGVyIGNsaWVudHMgcHJlZmV0Y2ggdGhlIGF0dGFjaG1lbnQgb3Igd2FpdCB1bnRpbCBpdCBpcyByZXF1ZXN0ZWQuXG4gKiBAcHJvcGVydHkge1wib3B0aW9uYWxcIiB8IFwicmVxdWlyZWRcIn0gb2ZmbGluZVJlcXVpcmVtZW50IC0gV2hldGhlciBhbiBvZmZsaW5lLXJlYWR5IHNjb3BlIHJlcXVpcmVzIHRoZSBhdHRhY2htZW50IGJ5dGVzLlxuICogQHByb3BlcnR5IHtcImR1cmFibGVcIiB8IFwiZXZpY3RhYmxlXCJ9IHJldGVudGlvbiAtIFdoZXRoZXIgY2xpZW50cyBtYXkgZXZpY3QgdGhlIGF0dGFjaG1lbnQgdW5kZXIgc3RvcmFnZSBwcmVzc3VyZS5cbiAqL1xuXG4vKipcbiAqIE1vZGVsIGF0dGFjaG1lbnQgZGVjbGFyYXRpb24gcmV0YWluZWQgYnkgdGhlIHJlY29yZCBjbGFzcy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJlY29yZEF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IEF0dGFjaG1lbnREcml2ZXJDb25zdHJ1Y3RvciB8IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW2RyaXZlcl0gLSBBdHRhY2htZW50IGRyaXZlciBuYW1lLCBjbGFzcywgb3IgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge0F0dGFjaG1lbnRTeW5jQ29uZmlndXJhdGlvbn0gW3N5bmNdIC0gQ2xpZW50LXNhZmUgc3luY2hyb25pemVkIGFzc2V0IHBvbGljeS5cbiAqIEBwcm9wZXJ0eSB7XCJoYXNPbmVcIiB8IFwiaGFzTWFueVwifSB0eXBlIC0gQXR0YWNobWVudCBjYXJkaW5hbGl0eS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEF0dGFjaG1lbnRzQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZWZhdWx0RHJpdmVyXSAtIERlZmF1bHQgYXR0YWNobWVudCBzdG9yYWdlIGRyaXZlciBuYW1lLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBBdHRhY2htZW50RHJpdmVyQ29uZmlndXJhdGlvbiAmIFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj59IFtkcml2ZXJzXSAtIE5hbWVkIGF0dGFjaG1lbnQgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbYWxsb3dQYXRoSW5wdXRdIC0gV2hldGhlciBge3BhdGg6IC4uLn1gIGF0dGFjaG1lbnQgaW5wdXQgaXMgYWxsb3dlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthbGxvd2VkUGF0aFByZWZpeGVzXSAtIE9wdGlvbmFsIGFsbG93bGlzdCBvZiBkaXJlY3RvcmllcyBmb3IgYHtwYXRoOiAuLi59YCBpbnB1dC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IE1haWxlckJhY2tlbmRcbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtwYXlsb2FkOiBpbXBvcnQoXCIuL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4gfCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gZGVsaXZlciAtIERlbGl2ZXIgYSBtYWlsZXIgcGF5bG9hZC5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlJZGVtcG90ZW5jeUNhcGFiaWxpdHl9IFtkZWxpdmVyeUlkZW1wb3RlbmN5Q2FwYWJpbGl0eV0gLSBFeHBsaWNpdCBwcm92aWRlci1iYWNrZWQgZHVwbGljYXRlLXN1cHByZXNzaW9uIGNhcGFiaWxpdHkuIEdlbmVyaWMgU01UUCBvbWl0cyB0aGlzIGFuZCByZW1haW5zIGF0LWxlYXN0LW9uY2UuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7cGF5bG9hZDogaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSkgPT4gaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSBbcHJlcGFyZURlbGl2ZXJ5T3BlcmF0aW9uUGF5bG9hZF0gLSBSZXNvbHZlcyBwcm92aWRlciBkZWZhdWx0cyBpbnRvIHRoZSBpbW11dGFibGUgcGF5bG9hZCBiZWZvcmUgcmVxdWlyZWQtb3BlcmF0aW9uIGhhc2hpbmcgYW5kIGVucXVldWUuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7ZGVsaXZlcnlPcGVyYXRpb246IGltcG9ydChcIi4vbWFpbGVyLmpzXCIpLk1haWxlckRlbGl2ZXJ5T3BlcmF0aW9uUmVxdWVzdCB8IGltcG9ydChcIi4vbWFpbGVyLmpzXCIpLk1haWxlckRlbGl2ZXJ5T3BlcmF0aW9uLCBwYXlsb2FkOiBpbXBvcnQoXCIuL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9KSA9PiB2b2lkfSBbdmFsaWRhdGVEZWxpdmVyeU9wZXJhdGlvbl0gLSBQcm92aWRlci1zcGVjaWZpYyBvcGVyYXRpb24gYW5kIHBheWxvYWQgdmFsaWRhdGlvbiBwZXJmb3JtZWQgYmVmb3JlIGVucXVldWUgYW5kIGV2ZXJ5IG5ldHdvcmsgYXR0ZW1wdC5cbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gTG9jYWxlRmFsbGJhY2tzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlbGF0aW9uc2hpcENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJiZWxvbmdzVG9cIiB8IFwiaGFzT25lXCIgfCBcImhhc01hbnlcIn0gdHlwZSAtIFJlbGF0aW9uc2hpcCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbF0gLSBUYXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXSAtIEFsaWFzIG9mIHRhcmdldCBtb2RlbCBjbGFzcyBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbENsYXNzTmFtZV0gLSBFeHBsaWNpdCB0YXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3R5cGVdIC0gQ29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29sdW1uVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3FsVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YVR5cGVdIC0gQWxpYXMgZm9yIGNvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2pzRG9jVHlwZV0gLSBFeGFjdCBnZW5lcmF0ZWQgSlNEb2MgdHlwZSBmb3Igbm9uLWNvbHVtbiBhdHRyaWJ1dGVzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEF0dHJpYnV0ZSBuYW1lIHdoZW4gY29uZmlndXJlZCBhcyBhbiBhcnJheSBlbnRyeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW251bGxdIC0gV2hldGhlciB2YWx1ZSBjYW4gYmUgbnVsbC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NlbGVjdGVkQnlEZWZhdWx0XSAtIFdoZXRoZXIgaW5jbHVkZWQgaW4gZGVmYXVsdCBzZXJpYWxpemF0aW9uLiBEZWZhdWx0cyB0byB0cnVlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbEF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge0F0dGFjaG1lbnRTeW5jQ29uZmlndXJhdGlvbn0gW3N5bmNdIC0gQ2xpZW50LXNpZGUgc3luY2hyb25pemVkIGFzc2V0IHBvbGljeS5cbiAqIEBwcm9wZXJ0eSB7XCJoYXNPbmVcIiB8IFwiaGFzTWFueVwifSB0eXBlIC0gQXR0YWNobWVudCBjYXJkaW5hbGl0eS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nIHwgRnJvbnRlbmRNb2RlbEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24+IHwgUmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24gfCBpbXBvcnQoXCIuL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS1jb2x1bW4uanNcIikuZGVmYXVsdCB8IGJvb2xlYW4+fSBhdHRyaWJ1dGVzIC0gQXR0cmlidXRlcyB0byBleHBvc2Ugb24gdGhlIGZyb250ZW5kIG1vZGVsLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2FiaWxpdGllc10gLSBBZGRpdGlvbmFsIGNhbWVsQ2FzZSBhYmlsaXR5IGFjdGlvbiBuYW1lcyB0byBleHBvc2UgZm9yIHBlci1yZWNvcmQgYHJlY29yZC5jYW4oYWN0aW9uKWAgcmVhZHMuIEJhc2UgQ1JVRCBhY3Rpb25zIChgcmVhZGAsIGBjcmVhdGVgLCBgdXBkYXRlYCwgYGRlc3Ryb3lgKSBhcmUgYWx3YXlzIGluY2x1ZGVkIGFuZCBtdXN0IG5vdCBiZSBsaXN0ZWQgaGVyZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbEF0dGFjaG1lbnRDb25maWd1cmF0aW9uPn0gW2F0dGFjaG1lbnRzXSAtIEF0dGFjaG1lbnQgaGVscGVycyBrZXllZCBieSBhdHRhY2htZW50IG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbY29tbWFuZHNdIC0gTGVnYWN5IGJ1aWx0LWluIGNvbW1hbmQgbmFtZXMgKGBpbmRleGAsIGBmaW5kYCwgYGNyZWF0ZWAsIGB1cGRhdGVgLCBgZGVzdHJveWAsIGBhdHRhY2hgLCBgZG93bmxvYWRgLCBgdXJsYCkuXG4gKiBAcHJvcGVydHkge0FycmF5PEZyb250ZW5kTW9kZWxSZXNvdXJjZUN1c3RvbUNvbW1hbmQ+fSBbY29sbGVjdGlvbkNvbW1hbmRzXSAtIEN1c3RvbSBjb2xsZWN0aW9uIGNvbW1hbmRzLiBFYWNoIGVudHJ5IGlzIGEgY2FtZWxDYXNlIG1ldGhvZCBuYW1lLCBvciBhIGB7bmFtZSwgYXJncz8sIHJldHVyblR5cGU/fWAgb2JqZWN0IGRlY2xhcmluZyB0eXBlZCBhcmd1bWVudHMgYW5kL29yIGEgcmVzcG9uc2UgdHlwZS4gVGhlIHJ1bnRpbWUgZGVyaXZlcyB0aGUga2ViYWItY2FzZSBjb21tYW5kIHNsdWcgZnJvbSB0aGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RnJvbnRlbmRNb2RlbFJlc291cmNlQ3VzdG9tQ29tbWFuZD59IFttZW1iZXJDb21tYW5kc10gLSBDdXN0b20gbWVtYmVyIGNvbW1hbmRzLiBFYWNoIGVudHJ5IGlzIGEgY2FtZWxDYXNlIG1ldGhvZCBuYW1lLCBvciBhIGB7bmFtZSwgYXJncz8sIHJldHVyblR5cGU/fWAgb2JqZWN0IGRlY2xhcmluZyB0eXBlZCBhcmd1bWVudHMgYW5kL29yIGEgcmVzcG9uc2UgdHlwZS4gVGhlIHJ1bnRpbWUgZGVyaXZlcyB0aGUga2ViYWItY2FzZSBjb21tYW5kIHNsdWcgZnJvbSB0aGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXSAtIEJ1aWx0LWluIGNvbGxlY3Rpb24gY29tbWFuZCBuYW1lcyAoYGluZGV4YCwgYGNyZWF0ZWApLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2J1aWx0SW5NZW1iZXJDb21tYW5kc10gLSBCdWlsdC1pbiBtZW1iZXIgY29tbWFuZCBuYW1lcyAoYGZpbmRgLCBgdXBkYXRlYCwgYGRlc3Ryb3lgLCBgYXR0YWNoYCwgYGRvd25sb2FkYCwgYHVybGApLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbE5hbWVdIC0gRnJvbnRlbmQgbW9kZWwgbmFtZSBvdmVycmlkZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtyZWxhdGlvbnNoaXBzXSAtIFJlbGF0aW9uc2hpcCBuYW1lcyB0byBleHBvc2UgaW4gZnJvbnRlbmQgbW9kZWxzLiBUeXBlIGFuZCB0YXJnZXQgbW9kZWwgYXJlIGluZmVycmVkIGZyb20gdGhlIGJhY2tlbmQgbW9kZWwncyByZWdpc3RlcmVkIHJlbGF0aW9uc2hpcHMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ByaW1hcnlLZXldIC0gUHJpbWFyeSBrZXkgYXR0cmlidXRlIG5hbWUuXG4gKiBAcHJvcGVydHkge0Zyb250ZW5kTW9kZWxSZXNvdXJjZVNlcnZlckNvbmZpZ3VyYXRpb259IFtzZXJ2ZXJdIC0gT3B0aW9uYWwgbGVnYWN5IGJhY2tlbmQgYmVoYXZpb3Igb3ZlcnJpZGVzIGZvciBidWlsdC1pbiBmcm9udGVuZCBhY3Rpb25zLlxuICogQHByb3BlcnR5IHtGcm9udGVuZE1vZGVsUmVzb3VyY2VTeW5jQ29uZmlndXJhdGlvbiB8IGJvb2xlYW59IFtzeW5jXSAtIE9wdGlvbmFsIHNhZmUgbG9jYWwvb2ZmbGluZSBzeW5jIHBvbGljeSBtZXRhZGF0YS4gYHBvbGljeWAgcGFydGljaXBhdGVzIGluIHRoZSBoYXNoIGJ1dCBpcyBub3QgZXhwb3NlZCB0byBnZW5lcmF0ZWQgZnJvbnRlbmQgY29uZmlnL21hbmlmZXN0LlxuICovXG5cbi8qKlxuICogT2JqZWN0IGZvcm0gb2YgYSBjdXN0b20gY29tbWFuZCBlbnRyeSwgZGVjbGFyaW5nIGl0cyB0eXBlZCBhcmd1bWVudHMgYW5kL29yXG4gKiByZXNwb25zZSB0eXBlIGFsb25nc2lkZSB0aGUgY29tbWFuZCBuYW1lLlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlc291cmNlQ3VzdG9tQ29tbWFuZE9iamVjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBjYW1lbENhc2UgY29tbWFuZCBtZXRob2QgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8e25hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nfT59IFthcmdzXSAtIFR5cGVkIGNvbW1hbmQgYXJndW1lbnRzOyBlYWNoIGdlbmVyYXRlcyBhIG5hbWVkLCB0eXBlZCBtZXRob2QgcGFyYW1ldGVyIG1hcHBlZCBwb3NpdGlvbmFsbHkgaW50byB0aGUgY29tbWFuZCBwYXlsb2FkLiBgdHlwZWAgaXMgYSBKU0RvYyB0eXBlIHN0cmluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmV0dXJuVHlwZV0gLSBKU0RvYyB0eXBlIGZvciB0aGUgY29tbWFuZCByZXNwb25zZS4gV2hlbiBzZXQsIHRoZSBnZW5lcmF0ZWQgbWV0aG9kIGlzIHR5cGVkIGBQcm9taXNlPHJldHVyblR5cGU+YCBpbnN0ZWFkIG9mIGBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj5gLiBFbWl0dGVkIHZlcmJhdGltIGludG8gdGhlIGdlbmVyYXRlZCBmcm9udGVuZCBtb2RlbCwgc28gaXQgbXVzdCByZXNvbHZlIHRoZXJlLlxuICovXG5cbi8qKlxuICogQSBjdXN0b20gY29tbWFuZCBlbnRyeTogYSBwbGFpbiBjYW1lbENhc2UgbWV0aG9kIG5hbWUsIG9yIGFuIG9iamVjdCBkZWNsYXJpbmdcbiAqIHR5cGVkIGFyZ3MgYW5kL29yIGEgcmVzcG9uc2UgdHlwZS5cbiAqIEB0eXBlZGVmIHtzdHJpbmcgfCBGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kT2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kXG4gKi9cblxuLyoqXG4gKiBKU09OIHZhbHVlIGFjY2VwdGVkIGJ5IHN5bmMgcG9saWN5IG1ldGFkYXRhL2hhc2ggaW5wdXRzLlxuICogQHR5cGVkZWYge251bGwgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5rbm93bltdIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IEZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlXG4gKi9cblxuLyoqXG4gKiBGcm9udGVuZC1tb2RlbCBsb2NhbC9vZmZsaW5lIHN5bmMgcG9saWN5IGNvbmZpZy4gYG1ldGFkYXRhYCBpcyBleHBvc2VkIHRvXG4gKiBmcm9udGVuZHMgYW5kIHBlZXJzOyBgcG9saWN5YCBpcyBoYXNoZWQgYnV0IGludGVudGlvbmFsbHkgb21pdHRlZCBmcm9tXG4gKiBmcm9udGVuZC1zYWZlIG1hbmlmZXN0cy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZVN5bmNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1wib3B0aW1pc3RpY1ZlcnNpb25cIiB8IFwic2VydmVyV2luc1wiIHwgXCJsYXN0V3JpdGVyV2luc1wiIHwgXCJmaWVsZFRocmVlV2F5XCIgfCBcImFwcGVuZE9ubHlcIn0gW2NvbmZsaWN0U3RyYXRlZ3ldIC0gU3RyYXRlZ3kgdXNlZCB3aGVuIHJlcGxheSBkZXRlY3RzIHNlcnZlci9jbGllbnQgZGl2ZXJnZW5jZS4gRGVmYXVsdHMgdG8gYG9wdGltaXN0aWNWZXJzaW9uYC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0aGUgcmVzb3VyY2UgaXMgc3luYy1lbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIHdoZW4gYHN5bmNgIGlzIGNvbmZpZ3VyZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbb3BlcmF0aW9uc10gLSBTeW5jIG9wZXJhdGlvbiBuYW1lcyBzdWNoIGFzIGBpbmRleGAsIGBmaW5kYCwgYGNyZWF0ZWAsIGB1cGRhdGVgLCBjdXN0b20gZG9tYWluIGNvbW1hbmRzLCBldGMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW3BvbGljeVZlcnNpb25dIC0gQXBwLWNvbnRyb2xsZWQgcG9saWN5IHZlcnNpb24gdXNlZCBhcyBhIHN0YWJsZSBjaGFuZ2Ugc2lnbmFsLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFttZXRhZGF0YV0gLSBTYWZlIGZyb250ZW5kLXZpc2libGUgbWV0YWRhdGEuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gW3BvbGljeV0gLSBEZXRlcm1pbmlzdGljIG5vbi1zZWNyZXQgcG9saWN5IGlucHV0cyBpbmNsdWRlZCBpbiB0aGUgcG9saWN5IGhhc2ggb25seS5cbiAqL1xuXG4vKipcbiAqIFZlbG9jaW91cyBzeW5jIEFQSSBlbmRwb2ludCBjb25maWd1cmF0aW9uLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0FwaUNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW91bnRQYXRoXSAtIE1vdW50IHBhdGggZm9yIHRoZSBzeW5jIGVuZHBvaW50cy4gRGVmYXVsdHMgdG8gXCIvdmVsb2Npb3VzL3N5bmNcIi5cbiAqIEBwcm9wZXJ0eSB7RnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlfSByZXNvdXJjZUNsYXNzIC0gQXBwIHN5bmMgcmVzb3VyY2UgY2xhc3Mgc2VydmVkIGJ5IHRoZSBhdXRvLW1vdW50ZWQgc3luYyBlbmRwb2ludHMuXG4gKi9cblxuLyoqXG4gKiBDbGllbnQtc2lkZSBzeW5jIHRyYW5zcG9ydCBvd25pbmcgSFRUUCBQT1NUcyB0byB0aGUgZnJhbWV3b3JrIHN5bmMgZW5kcG9pbnRzLFxuICogbWF0Y2hpbmcgdGhlIGZyb250ZW5kLW1vZGVsIHdlYnNvY2tldCBjbGllbnQgcG9zdCBjb250cmFjdC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNDbGllbnRUcmFuc3BvcnRcbiAqIEBwcm9wZXJ0eSB7KHBhdGg6IHN0cmluZywgYm9keT86IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBvcHRpb25zPzoge2hlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSkgPT4gUHJvbWlzZTx7anNvbjogKCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59Pn0gcG9zdCAtIFBvc3RzIG9uZSByZXF1ZXN0IGFuZCByZXNvbHZlcyBhIHJlc3BvbnNlIHdpdGggYSBqc29uIGFjY2Vzc29yLlxuICovXG5cbi8qKlxuICogV2Vic29ja2V0IGNsaWVudCBjb250cmFjdCByZXF1aXJlZCBmcm9tIGBzeW5jLmNsaWVudC5yZWFsdGltZS5jcmVhdGVDbGllbnRgLFxuICogbWF0Y2hpbmcgYFZlbG9jaW91c1dlYnNvY2tldENsaWVudGAgLyBzbmFwcmVxJ3Mgd2Vic29ja2V0IGNsaWVudC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNSZWFsdGltZVdlYnNvY2tldENsaWVudFxuICogQHByb3BlcnR5IHsoKSA9PiBQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gY29ubmVjdCAtIENvbm5lY3RzIHRoZSB3ZWJzb2NrZXQuXG4gKiBAcHJvcGVydHkgeyhjaGFubmVsVHlwZTogc3RyaW5nLCBvcHRpb25zPzoge3BhcmFtcz86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Piwgb25NZXNzYWdlPzogKGJvZHk6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+KSA9PiB2b2lkLCBvblJlc3VtZT86ICgpID0+IHZvaWQsIG9uQ2xvc2U/OiAocmVhc29uOiBzdHJpbmcpID0+IHZvaWR9KSA9PiBWZWxvY2lvdXNTeW5jUmVhbHRpbWVTdWJzY3JpcHRpb259IHN1YnNjcmliZUNoYW5uZWwgLSBPcGVucyBvbmUgY2hhbm5lbCBzdWJzY3JpcHRpb24uXG4gKiBAcHJvcGVydHkgeygpID0+IFByb21pc2U8dm9pZD59IGRpc2Nvbm5lY3RBbmRTdG9wUmVjb25uZWN0IC0gQ2xvc2VzIHRoZSBzb2NrZXQgYW5kIHN0b3BzIGF1dG8tcmVjb25uZWN0LlxuICovXG5cbi8qKlxuICogQ2hhbm5lbCBzdWJzY3JpcHRpb24gaGFuZGxlIHJldHVybmVkIGJ5IGBzdWJzY3JpYmVDaGFubmVsYC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNSZWFsdGltZVN1YnNjcmlwdGlvblxuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSBjbG9zZSAtIENsb3NlcyB0aGUgc3Vic2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHsoKSA9PiBib29sZWFufSBpc1JlYWR5IC0gV2hldGhlciB0aGUgc3Vic2NyaXB0aW9uIGlzIGFja25vd2xlZGdlZCBhbmQgcmVhZHkuXG4gKiBAcHJvcGVydHkgeyhwYXJhbXM/OiB7dGltZW91dE1zPzogbnVtYmVyfSkgPT4gUHJvbWlzZTx2b2lkPn0gd2FpdEZvclJlYWR5IC0gUmVzb2x2ZXMgb25jZSB0aGUgc2VydmVyIGFja25vd2xlZGdlcyB0aGUgc3Vic2NyaXB0aW9uLlxuICovXG5cbi8qKlxuICogT25lIHJlYWx0aW1lIGNoYW5uZWwgc3Vic2NyaXB0aW9uIGRlc2NyaXB0b3IuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jUmVhbHRpbWVDaGFubmVsRGVzY3JpcHRvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYW5uZWwgLSBTZXJ2ZXIgY2hhbm5lbCBuYW1lIHRvIHN1YnNjcmliZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbcGFyYW1zXSAtIFN1YnNjcmliZSBwYXJhbXMgKHJ1bnRpbWUgc2NvcGUgdmFsdWVzKS4gVGhlIGZyYW1ld29yayBpbmplY3RzIGBhdXRoZW50aWNhdGlvblRva2VuYCBhdXRvbWF0aWNhbGx5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZXNvdXJjZVR5cGVdIC0gRGVmYXVsdCByZXNvdXJjZS9tb2RlbCBuYW1lIGZvciBwdXNoZWQgY2hhbmdlcyB0aGF0IGRvIG5vdCBjYXJyeSB0aGVpciBvd24gcmVzb3VyY2VUeXBlLlxuICovXG5cbi8qKlxuICogUmVhbHRpbWUgcHVzaCBjb25maWd1cmF0aW9uIGZvciB0aGUgc3luYyBjbGllbnQuIE9ubHkgdGhlIGdlbnVpbmVseVxuICogYXBwLW93bmVkIGNhbGxiYWNrIGxpdmVzIGhlcmU6IGhvdyB0byBidWlsZCB0aGUgd2Vic29ja2V0IGNsaWVudC5cbiAqIEV2ZXJ5dGhpbmcgZWxzZSAtIGRlcml2aW5nIHRoZSBmcmFtZXdvcmsgc3luYyBjaGFubmVsIHN1YnNjcmlwdGlvbnMgZnJvbVxuICogdGhlIGRlY2xhcmVkIHB1bGwgc2NvcGVzLCBzdWJzY3JpYmluZywgYXBwbHlpbmcgcHVzaGVzIHRocm91Z2ggdGhlIGRlcml2ZWRcbiAqIHJlc291cmNlIGFwcGxpZXIsIGVjaG8gc3VwcHJlc3Npb24sIGFuZCBwdWxsLW9uLXJlY29ubmVjdCAtIGlzIGRlcml2ZWQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jQ2xpZW50UmVhbHRpbWVDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkgeygpID0+IFZlbG9jaW91c1N5bmNSZWFsdGltZVdlYnNvY2tldENsaWVudCB8IFByb21pc2U8VmVsb2Npb3VzU3luY1JlYWx0aW1lV2Vic29ja2V0Q2xpZW50Pn0gY3JlYXRlQ2xpZW50IC0gQnVpbGRzIHRoZSAodW5jb25uZWN0ZWQpIHdlYnNvY2tldCBjbGllbnQ7IHRoZSBmcmFtZXdvcmsgb3ducyBjb25uZWN0L2Rpc2Nvbm5lY3QuXG4gKiBAcHJvcGVydHkgeyhjb250ZXh0OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPikgPT4gQXJyYXk8VmVsb2Npb3VzU3luY1JlYWx0aW1lQ2hhbm5lbERlc2NyaXB0b3I+IHwgUHJvbWlzZTxBcnJheTxWZWxvY2lvdXNTeW5jUmVhbHRpbWVDaGFubmVsRGVzY3JpcHRvcj4+fSBbY2hhbm5lbHNdIC0gRGVwcmVjYXRlZCBsZWdhY3kgZXNjYXBlIGhhdGNoOiByZXNvbHZlcyBleHRyYSBhcHAtY2hhbm5lbCBkZXNjcmlwdG9ycyBmcm9tIHRoZSBgc3Vic2NyaWJlUmVhbHRpbWUoY29udGV4dClgIGNvbnRleHQuIERlY2xhcmVkIHB1bGwgc2NvcGVzIHN1YnNjcmliZSB0aGUgZnJhbWV3b3JrIHN5bmMgY2hhbm5lbCBhdXRvbWF0aWNhbGx5LlxuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz59IFtsb2NhbE9yaWdpbl0gLSBSZXNvbHZlcyB0aGlzIGRldmljZSdzIGVjaG8gb3JpZ2luOyBwdXNoZWQgbWVzc2FnZXMgd2l0aCBhIG1hdGNoaW5nIGBlY2hvT3JpZ2luYCBhcmUgZHJvcHBlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3B1bGxPblJlY29ubmVjdF0gLSBGaXJlIGEgY29hbGVzY2VkIGBwdWxsKClgIHdoZW4gc3Vic2NyaXB0aW9ucyBiZWNvbWUgcmVhZHkgb3IgcmVzdW1lIGFmdGVyIGEgZHJvcCwgY2xvc2luZyBvZmZsaW5lIGdhcHMuIERlZmF1bHRzIHRvIHRydWUuXG4gKi9cblxuLyoqXG4gKiBDbGllbnQtc2lkZSBzeW5jIGNvbmZpZ3VyYXRpb24gY29uc3VtZWQgYnkgYFN5bmNDbGllbnQuZnJvbUNvbmZpZ3VyYXRpb24oLi4uKWAuXG4gKiBUaGUgZnJhbWV3b3JrIG93bnMgdGhlIGAke21vdW50UGF0aH0vY2hhbmdlc2AgYW5kIGAke21vdW50UGF0aH0vcmVwbGF5YFxuICogUE9TVGVycyBvdmVyIHRoZSBnaXZlbiB0cmFuc3BvcnQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jQ2xpZW50Q29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz59IGF1dGhlbnRpY2F0aW9uVG9rZW4gLSBSZXNvbHZlcyB0aGUgYXV0aCB0b2tlbiBzZW50IHdpdGggc3luYyByZXF1ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYmF0Y2hTaXplXSAtIE1heCBzeW5jcyBwZXIgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj59IFtpc09ubGluZV0gLSBDb25uZWN0aXZpdHkgZ2F0ZSBmb3IgcHVsbHMgYW5kIHJlcGxheXMuIERlZmF1bHRzIHRvIGFsd2F5cyBvbmxpbmUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vdW50UGF0aF0gLSBNb3VudCBwYXRoIHRoZSBzZXJ2ZXIgc2VydmVzIHRoZSBzeW5jIGVuZHBvaW50cyB1bmRlciAobWF0Y2ggdGhlIHNlcnZlcidzIGBzeW5jLmFwaS5tb3VudFBhdGhgKS4gRGVmYXVsdHMgdG8gXCIvdmVsb2Npb3VzL3N5bmNcIjsgbm9ybWFsaXphdGlvbiBzdHJpcHMgdHJhaWxpbmcgc2xhc2hlcyBhbmQgYWx3YXlzIGZpbGxzIGluIHRoZSBkZWZhdWx0LlxuICogQHByb3BlcnR5IHsoZXJyb3I6IEVycm9yKSA9PiB2b2lkfSBbb25FcnJvcl0gLSBSZXBvcnRzIGJhY2tncm91bmQgcmVwbGF5L3B1bGwgZmFpbHVyZXMuIERlZmF1bHRzIHRvIHJldGhyb3dpbmcuXG4gKiBAcHJvcGVydHkge1ZlbG9jaW91c1N5bmNDbGllbnRSZWFsdGltZUNvbmZpZ3VyYXRpb259IFtyZWFsdGltZV0gLSBSZWFsdGltZSBwdXNoIGNvbmZpZ3VyYXRpb24gY29uc3VtZWQgYnkgYHN1YnNjcmliZVJlYWx0aW1lKC4uLilgLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNTeW5jQ2xpZW50VHJhbnNwb3J0fSB0cmFuc3BvcnQgLSBUcmFuc3BvcnQgcG9zdGluZyB0byB0aGUgZnJhbWV3b3JrIHN5bmMgZW5kcG9pbnRzIChlLmcuIHRoZSBmcm9udGVuZC1tb2RlbCB3ZWJzb2NrZXQgY2xpZW50KS5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY1JlYWx0aW1lV2Vic29ja2V0Q2xpZW50fSBbd2Vic29ja2V0Q2xpZW50XSAtIFNoYXJlZCBhcHAtbGlmZXRpbWUgd2Vic29ja2V0IGNsaWVudCAodGhlIGxvdy1sZXZlbCBmb3JtKSB0aGF0IGFsbCBzeW5jIHRyYWZmaWMgcmlkZXMuIFByb3ZpZGUgdGhlIHNhbWUgaW5zdGFuY2UgdGhlIGZyb250ZW5kLW1vZGVsIHRyYW5zcG9ydCB1c2VzIHNvIG9uZSBjb25uZWN0aW9uIGNhcnJpZXMgZXZlcnl0aGluZy4gV2hlbiBzZXQsIHRoZSByZWFsdGltZSBicmlkZ2Ugc3Vic2NyaWJlcyBjaGFubmVscyBvbiBpdCBhbmQgbmV2ZXIgb3ducyBpdHMgbGlmZWN5Y2xlOiB1bnN1YnNjcmliaW5nIGNsb3NlcyBvbmx5IGNoYW5uZWwgc3Vic2NyaXB0aW9ucywgbGVhdmluZyB0aGUgc29ja2V0IGNvbm5lY3RlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpfSBbd2Vic29ja2V0VXJsXSAtIFNoYXJlZCBhcHAtbGlmZXRpbWUgd2Vic29ja2V0IFVSTC4gV2hlbiBzZXQgKGFuZCBubyBgd2Vic29ja2V0Q2xpZW50YCBpcyBnaXZlbiksIHRoZSBmcmFtZXdvcmsgYnVpbGRzIGFuZCBvd25zIG9uZSByZWNvbm5lY3RpbmcgYFZlbG9jaW91c1dlYnNvY2tldENsaWVudGAgZm9yIGFsbCBzeW5jIHRyYWZmaWMsIGNvbm5lY3RlZCBvbiBmaXJzdCB1c2UuXG4gKi9cblxuLyoqXG4gKiBWZWxvY2lvdXMgc3luYyBjb25maWd1cmF0aW9uLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0FwaUNvbmZpZ3VyYXRpb259IFthcGldIC0gQXV0by1tb3VudHMgdGhlIFZlbG9jaW91cyBzeW5jIGNoYW5nZXMvcmVwbGF5IGVuZHBvaW50cyBmb3IgdGhpcyByZXNvdXJjZSBjbGFzcy5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0NsaWVudENvbmZpZ3VyYXRpb259IFtjbGllbnRdIC0gQ2xpZW50LXNpZGUgc3luYyBjb25maWd1cmF0aW9uIGNvbnN1bWVkIGJ5IGBTeW5jQ2xpZW50LmZyb21Db25maWd1cmF0aW9uKC4uLilgLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMvZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNKc29uV2ViS2V5IHwgbnVsbH0gW2RldmljZUNlcnRpZmljYXRlQmFja2VuZFB1YmxpY0tleV0gLSBQdWJsaWMgYmFja2VuZCBrZXkgdXNlZCB0byB2ZXJpZnkgb2ZmbGluZSBkZXZpY2UgY2VydGlmaWNhdGVzIGZvciBzeW5jIHJlcGxheS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbY2hhbmdlRmVlZFJldGVudGlvblNpemVdIC0gTnVtYmVyIG9mIGFjY2VwdGVkIHNlcnZlciBjaGFuZ2VzIHJldGFpbmVkIGJlZm9yZSBjbGllbnRzIG11c3QgcmVmcmVzaCBmcm9tIHNuYXBzaG90LlxuICogQHByb3BlcnR5IHtBcnJheTxpbXBvcnQoXCIuL3N5bmMvb2ZmbGluZS1ncmFudC5qc1wiKS5PZmZsaW5lR3JhbnRTaWduaW5nS2V5Pn0gb2ZmbGluZUdyYW50U2lnbmluZ0tleXMgLSBTaWduaW5nIGtleXMgdXNlZCB0byBpc3N1ZSBhbmQgdmVyaWZ5IG9mZmxpbmUgZ3JhbnRzLiBTZWNyZXRzIG11c3QgbmV2ZXIgYmUgZXhwb3NlZCB0byBjbGllbnRzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtvZmZsaW5lR3JhbnRUdGxNc10gLSBEZWZhdWx0IG9mZmxpbmUgZ3JhbnQgVFRMIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gMjQgaG91cnMuXG4gKi9cblxuLyoqXG4gKiBGcm9udGVuZC1zYWZlIG5vcm1hbGl6ZWQgc3luYyBtZXRhZGF0YS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IE5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VTeW5jQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtcIm9wdGltaXN0aWNWZXJzaW9uXCIgfCBcInNlcnZlcldpbnNcIiB8IFwibGFzdFdyaXRlcldpbnNcIiB8IFwiZmllbGRUaHJlZVdheVwiIHwgXCJhcHBlbmRPbmx5XCJ9IGNvbmZsaWN0U3RyYXRlZ3kgLSBOb3JtYWxpemVkIHJlcGxheSBjb25mbGljdCBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5hYmxlZCAtIFdoZXRoZXIgdGhlIHJlc291cmNlIGlzIHN5bmMtZW5hYmxlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IG9wZXJhdGlvbnMgLSBTb3J0ZWQsIGR1cGxpY2F0ZS1mcmVlIHN5bmMgb3BlcmF0aW9uIG5hbWVzLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBwb2xpY3lWZXJzaW9uIC0gQXBwLWNvbnRyb2xsZWQgcG9saWN5IHZlcnNpb24sIG9yIG51bGwuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcG9saWN5SGFzaCAtIERldGVybWluaXN0aWMgc2hhMjU2IGhhc2ggb2Ygc2FmZSBwb2xpY3kgaW5wdXRzLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFttZXRhZGF0YV0gLSBTYWZlIGZyb250ZW5kLXZpc2libGUgbWV0YWRhdGEuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T21pdDxGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uLCBcImFiaWxpdGllc1wiIHwgXCJidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXCIgfCBcImJ1aWx0SW5NZW1iZXJDb21tYW5kc1wiIHwgXCJjb2xsZWN0aW9uQ29tbWFuZHNcIiB8IFwiY29tbWFuZHNcIiB8IFwibWVtYmVyQ29tbWFuZHNcIiB8IFwic3luY1wiPiAmIHtcbiAqICAgYWJpbGl0aWVzOiBGcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXRpZXNDb25maWd1cmF0aW9uXG4gKiAgIGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAqICAgYnVpbHRJbk1lbWJlckNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiAgIGNvbGxlY3Rpb25Db21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICogICBjb21tYW5kTWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHthcmdzOiBBcnJheTx7bmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmd9PiwgcmV0dXJuVHlwZTogc3RyaW5nIHwgbnVsbH0+XG4gKiAgIG1lbWJlckNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiAgIHN5bmM/OiBOb3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlU3luY0NvbmZpZ3VyYXRpb25cbiAqIH19IE5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uXG4gKi9cblxuLyoqXG4gKiBVbmJvdW5kIHJlc291cmNlIGNsYXNzIHVzZWQgYnkgbW9kZWwtYWdub3N0aWMgcmVnaXN0cmllcy5cbiAqIEB0eXBlZGVmIHtPbWl0PHR5cGVvZiBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuZGVmYXVsdCwgXCJtb2RlbENsYXNzXCI+ICYge21vZGVsQ2xhc3M6ICgpID0+IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBuZXcgKGFyZ3M6IG5ldmVyKTogaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHQ8dHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+fX0gVW5ib3VuZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZVxuICovXG5cbi8qKlxuICogUmVzb3VyY2UgY2xhc3MgYm91bmQgdG8gYSBzcGVjaWZpYyBtb2RlbCBjbGFzcy5cbiAqIEB0ZW1wbGF0ZSB7aW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZU1vZGVsQ2xhc3N9IFRNb2RlbENsYXNzXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBURGF0YWJhc2VNb2RlbENsYXNzXG4gKiBAdHlwZWRlZiB7T21pdDx0eXBlb2YgaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHQsIFwiTW9kZWxDbGFzc1wiIHwgXCJtb2RlbENsYXNzXCI+ICYge01vZGVsQ2xhc3M6IFRNb2RlbENsYXNzIHwgdW5kZWZpbmVkLCBtb2RlbENsYXNzOiAoKSA9PiBUTW9kZWxDbGFzcywgbmV3IChhcmdzOiBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0eUFyZ3M8VE1vZGVsQ2xhc3M+IHwgaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbnRyb2xsZXJBcmdzPFREYXRhYmFzZU1vZGVsQ2xhc3M+KTogaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHQ8VE1vZGVsQ2xhc3MsIFREYXRhYmFzZU1vZGVsQ2xhc3M+fX0gQm91bmRGcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7aW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZU1vZGVsQ2xhc3N9IFtUTW9kZWxDbGFzcz1uZXZlcl1cbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IFtURGF0YWJhc2VNb2RlbENsYXNzPUV4dHJhY3Q8VE1vZGVsQ2xhc3MsIHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pl1cbiAqIEB0eXBlZGVmIHtbVE1vZGVsQ2xhc3NdIGV4dGVuZHMgW25ldmVyXSA/IFVuYm91bmRGcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGUgOiBCb3VuZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZTxUTW9kZWxDbGFzcywgVERhdGFiYXNlTW9kZWxDbGFzcz59IEZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlTW9kZWxDbGFzc30gW1RNb2RlbENsYXNzPW5ldmVyXVxuICogQHR5cGVkZWYge0Zyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZTxUTW9kZWxDbGFzcz59IEZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUFiaWxpdGllc0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW5kZXhdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGluZGV4LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmaW5kXSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCBmaW5kLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjcmVhdGVdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGNyZWF0ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXBkYXRlXSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCB1cGRhdGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Rlc3Ryb3ldIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGRlc3Ryb3kuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VTZXJ2ZXJDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7YWN0aW9uOiBcImluZGV4XCIgfCBcImZpbmRcIiB8IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImF0dGFjaFwiIHwgXCJhdHRhY2htZW50TGlzdFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0pID0+IChib29sZWFuIHwgdm9pZCB8IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+KX0gW2JlZm9yZUFjdGlvbl0gLSBPcHRpb25hbCBjYWxsYmFjayBydW4gYmVmb3JlIGJ1aWx0LWluIGZyb250ZW5kIGFjdGlvbnMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7YWN0aW9uOiBcImluZGV4XCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXT59IFtyZWNvcmRzXSAtIFJlY29yZHMgbG9hZGVyIGZvciBmcm9udGVuZEluZGV4LlxuICogQHByb3BlcnR5IHsoYXJnczoge2FjdGlvbjogXCJpbmRleFwiIHwgXCJmaW5kXCIgfCBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbW9kZWw6IGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA9PiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4gfCBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj59IFtzZXJpYWxpemVdIC0gUmVjb3JkIHNlcmlhbGl6ZXIgZm9yIHJlc3BvbnNlIHBheWxvYWRzLlxuICogQHByb3BlcnR5IHsoYXJnczoge2FjdGlvbjogXCJmaW5kXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImF0dGFjaFwiIHwgXCJhdHRhY2htZW50TGlzdFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgaWQ6IHN0cmluZyB8IG51bWJlcn0pID0+IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IG51bGw+fSBbZmluZF0gLSBSZWNvcmQgbG9hZGVyIGZvciBmaW5kL3VwZGF0ZS9kZXN0cm95L2F0dGFjaC9kb3dubG9hZC91cmwgYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHthY3Rpb246IFwiY3JlYXRlXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0pID0+IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD59IFtjcmVhdGVdIC0gQ3VzdG9tIGNyZWF0ZSBjYWxsYmFjay5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHthY3Rpb246IFwidXBkYXRlXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG1vZGVsOiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59KSA9PiBQcm9taXNlPGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgfCB2b2lkPn0gW3VwZGF0ZV0gLSBDdXN0b20gdXBkYXRlIGNhbGxiYWNrLlxuICogQHByb3BlcnR5IHsoYXJnczoge2FjdGlvbjogXCJkZXN0cm95XCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG1vZGVsOiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTx2b2lkPn0gW2Rlc3Ryb3ldIC0gQ3VzdG9tIGRlc3Ryb3kgY2FsbGJhY2suXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBCYWNrZW5kUHJvamVjdENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIC0gUGF0aCB0byB0aGUgYmFja2VuZCBwcm9qZWN0LiBNYXkgYmUgYW4gYXBwIHJvb3Qgb3IgYSBjb250cmlidXRpbmcgcGFja2FnZSByb290IChwYWNrYWdlIGVudHJpZXMgYXJlIGFwcGVuZGVkIGludGVybmFsbHkgZnJvbSBgcGFja2FnZXNgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZnJvbnRlbmRNb2RlbHNPdXRwdXRQYXRoXSAtIE9wdGlvbmFsIG91dHB1dCBwcm9qZWN0IHBhdGggd2hlcmUgYHNyYy9mcm9udGVuZC1tb2RlbHNgIHNob3VsZCBiZSBnZW5lcmF0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Jlc291cmNlc1BhdGhdIC0gT3B0aW9uYWwgb3ZlcnJpZGUgZm9yIHRoZSByZXNvdXJjZXMgZGlyZWN0b3J5IHRvIGF1dG8tZGlzY292ZXI7IGRlZmF1bHRzIHRvIGA8cGF0aD4vc3JjL3Jlc291cmNlc2AuIFNldCBpbnRlcm5hbGx5IGZvciBwYWNrYWdlIGVudHJpZXMuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb24+fSBbZnJvbnRlbmRNb2RlbHNdIC0gQXV0by1kaXNjb3ZlcmVkIGZyb250ZW5kIG1vZGVsIGRlZmluaXRpb25zIGtleWVkIGJ5IG1vZGVsIGNsYXNzIG5hbWUuIFNldCBpbnRlcm5hbGx5IGJ5IHRoZSBlbnZpcm9ubWVudCBoYW5kbGVyIOKAlCBkbyBub3Qgc2V0IG1hbnVhbGx5LlxuICogQHByb3BlcnR5IHtBYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVbXX0gW2FiaWxpdHlSZXNvdXJjZXNdIC0gQXV0by1kaXNjb3ZlcmVkIGFiaWxpdHkgcmVzb3VyY2UgY2xhc3NlcyAoZnJvbnRlbmQtbW9kZWwgYW5kIGF1dGhvcml6YXRpb24pIGZyb20gdGhpcyBwcm9qZWN0J3MgcmVzb3VyY2VzIGRpcmVjdG9yeS4gU2V0IGludGVybmFsbHkgYnkgdGhlIGVudmlyb25tZW50IGhhbmRsZXIg4oCUIGRvIG5vdCBzZXQgbWFudWFsbHkuXG4gKi9cblxuLyoqXG4gKiBBIGRlc2NyaXB0b3IgZm9yIGFuIGV4dGVybmFsIFZlbG9jaW91cyBwYWNrYWdlIChlbmdpbmUpIHRoYXQgY29udHJpYnV0ZXMgbW9kZWxzLFxuICogcmVzb3VyY2VzIGFuZCBtaWdyYXRpb25zLiBBIHBhY2thZ2UgdXN1YWxseSBleHBvcnRzIGBuZXcgVmVsb2Npb3VzUGFja2FnZSh7bmFtZSwgdXJsOiBpbXBvcnQubWV0YS51cmx9KWAuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNQYWNrYWdlRGVzY3JpcHRvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBUaGUgcGFja2FnZSBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1cmxdIC0gVGhlIGRlc2NyaXB0b3IgbW9kdWxlJ3MgYGltcG9ydC5tZXRhLnVybGA7IHRoZSBwYWNrYWdlIHJvb3QgaXMgZGVyaXZlZCBmcm9tIGl0IHdoZW4gYHBhdGhgIGlzIG9taXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BhdGhdIC0gVGhlIHBhY2thZ2Ugcm9vdCBkaXJlY3RvcnkgKHRoZSBvbmUgY29udGFpbmluZyBgc3JjYCkuIERlcml2ZWQgZnJvbSBgdXJsYCB3aGVuIG9taXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vZGVsc1BhdGhdIC0gT3ZlcnJpZGUgZm9yIHRoZSBwYWNrYWdlJ3MgbW9kZWxzIGRpcmVjdG9yeSAoZGVmYXVsdCBgPHBhdGg+L3NyYy9tb2RlbHNgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVzb3VyY2VzUGF0aF0gLSBPdmVycmlkZSBmb3IgdGhlIHBhY2thZ2UncyBmcm9udGVuZC1tb2RlbCByZXNvdXJjZXMgZGlyZWN0b3J5IChkZWZhdWx0IGA8cGF0aD4vc3JjL3Jlc291cmNlc2ApLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttaWdyYXRpb25zUGF0aF0gLSBPdmVycmlkZSBmb3IgdGhlIHBhY2thZ2UncyBtaWdyYXRpb25zIGRpcmVjdG9yeSAoZGVmYXVsdCBgPHBhdGg+L3NyYy9kYXRhYmFzZS9taWdyYXRpb25zYCkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9wYWNrYWdlcy92ZWxvY2lvdXMtcGFja2FnZS5qc1wiKS5kZWZhdWx0IHwgVmVsb2Npb3VzUGFja2FnZURlc2NyaXB0b3J9IFZlbG9jaW91c1BhY2thZ2VDb25maWd1cmF0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSb3V0ZVJlc29sdmVySG9va0FyZ3NcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IHBhcmFtcyAtIE11dGFibGUgcmVxdWVzdCBwYXJhbXMgb2JqZWN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGN1cnJlbnRQYXRoIC0gUmVxdWVzdCBwYXRoIHdpdGhvdXQgcXVlcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtoYXNNYXRjaGluZ0N1c3RvbVJvdXRlXSAtIFRydWUgd2hlbiBtYXRjaGluZyBhIGNvbmZpZ3VyZWQgY3VzdG9tIHJvdXRlLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSByZXF1ZXN0IC0gUmVxdWVzdCBvYmplY3QuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9IHJlc3BvbnNlIC0gUmVzcG9uc2Ugb2JqZWN0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3JvdXRlcy9yZXNvbHZlci5qc1wiKS5kZWZhdWx0fSByZXNvbHZlciAtIFJlc29sdmVyIGluc3RhbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUm91dGVSZXNvbHZlckhvb2tSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb24gLSBEYXNoZXJpemVkIGFjdGlvbiBuYW1lIChmb3IgZXhhbXBsZSBgZnJvbnRlbmQtaW5kZXhgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250cm9sbGVyIC0gQ29udHJvbGxlciBwYXRoIChmb3IgZXhhbXBsZSBgYWNjb3VudHNgKS5cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0fSBbY29udHJvbGxlckNsYXNzXSAtIE9wdGlvbmFsIGNvbnRyb2xsZXIgY2xhc3Mgb3ZlcnJpZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NvbnRyb2xsZXJQYXRoXSAtIE9wdGlvbmFsIGFic29sdXRlL3JlbGF0aXZlIGNvbnRyb2xsZXIgZmlsZSBwYXRoIG92ZXJyaWRlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IFtwYXJhbXNdIC0gRXh0cmEgcGFyYW1zIHRvIG1lcmdlIGZvciBjb250cm9sbGVyL2FjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBBYmlsaXR5UmVzb2x1dGlvbl0gLSBXaGV0aGVyIHRvIHJ1biB0aGUgY29udHJvbGxlciBhY3Rpb24gd2l0aG91dCByZXNvbHZpbmcgcmVxdWVzdCBhYmlsaXR5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2tpcENvbnRyb2xsZXJDb25uZWN0aW9uc10gLSBXaGV0aGVyIHRvIHJ1biB0aGUgY29udHJvbGxlciBhY3Rpb24gd2l0aG91dCB0aGUgYXV0b21hdGljIGRhdGFiYXNlIGNoZWNrb3V0IHdyYXBwZXIuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtza2lwVGVuYW50UmVzb2x1dGlvbl0gLSBXaGV0aGVyIHRvIHJ1biB0aGUgY29udHJvbGxlciBhY3Rpb24gd2l0aG91dCByZXNvbHZpbmcgcmVxdWVzdCB0ZW5hbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ZpZXdQYXRoXSAtIE9wdGlvbmFsIHZpZXcgcGF0aCBvdmVycmlkZSB1c2VkIGJ5IGNvbnRyb2xsZXIgcmVuZGVyIGxvb2t1cHMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KGFyZzogUm91dGVSZXNvbHZlckhvb2tBcmdzKSA9PiBSb3V0ZVJlc29sdmVySG9va1Jlc3VsdCB8IG51bGwgfCBQcm9taXNlPFJvdXRlUmVzb2x2ZXJIb29rUmVzdWx0IHwgbnVsbD59IFJvdXRlUmVzb2x2ZXJIb29rVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge3R5cGVvZiBpbXBvcnQoXCIuL2F1dGhvcml6YXRpb24vYmFzZS1yZXNvdXJjZS5qc1wiKS5kZWZhdWx0fSBBYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgcmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgcmVzcG9uc2U6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9KSA9PiBpbXBvcnQoXCIuL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgdm9pZCB8IFByb21pc2U8aW1wb3J0KFwiLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHZvaWQ+fSBBYmlsaXR5UmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIHJlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIHJlc3BvbnNlOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkLCBzdWJzY3JpcHRpb24/OiB7Y2hhbm5lbDogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59fSkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4gfCB2b2lkIHwgUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiB8IHZvaWQ+fSBUZW5hbnRSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgdGVuYW50OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0pID0+IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUgfCBQYXJ0aWFsPERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGU+IHwgdm9pZH0gVGVuYW50RGF0YWJhc2VSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFwaU1hbmlmZXN0Q29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXRoXSAtIEhUVFAgcGF0aCBmb3IgdGhlIGJ1aWx0LWluIEFQSSBtYW5pZmVzdCBlbmRwb2ludC4gRGVmYXVsdHMgdG8gYC9hcGkvbWFuaWZlc3RgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0b2tlbl0gLSBCZWFyZXIgdG9rZW4gcmVxdWlyZWQgaW4gdGhlIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPHRva2VuPmAgaGVhZGVyLiBXaGVuIHNldCwgcmVxdWVzdHMgd2l0aG91dCBhIG1hdGNoaW5nIHRva2VuIGFyZSBub3Qgcm91dGVkICg0MDQpLCBzbyB0aGUgZW5kcG9pbnQgc3RheXMgaGlkZGVuLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRGVidWdFbmRwb2ludENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGF0aF0gLSBIVFRQIHBhdGggZm9yIHRoZSBidWlsdC1pbiBkZWJ1ZyBlbmRwb2ludC4gRGVmYXVsdHMgdG8gYC92ZWxvY2lvdXMvZGVidWdgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0b2tlbl0gLSBCZWFyZXIgdG9rZW4gcmVxdWlyZWQgaW4gdGhlIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPHRva2VuPmAgaGVhZGVyLiBXaGVuIHNldCwgcmVxdWVzdHMgd2l0aG91dCBhIG1hdGNoaW5nIHRva2VuIGFyZSBub3Qgcm91dGVkICg0MDQpLCBzbyB0aGUgZW5kcG9pbnQgc3RheXMgaGlkZGVuLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGVuYW50RGF0YWJhc2VQcm92aWRlclR5cGVcbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgaWRlbnRpZmllcjogc3RyaW5nfSkgPT4gQXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+IHwgUHJvbWlzZTxBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSBsaXN0VGVuYW50cyAtIExpc3RzIHRlbmFudHMgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCwgY2hlY2tlZCwgb3IgbWlncmF0ZWQgZm9yIHRoaXMgZGF0YWJhc2UgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgaWRlbnRpZmllcjogc3RyaW5nfSkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4gfCB2b2lkIHwgUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiB8IHZvaWQ+fSBbcmVzb2x2ZUdlbmVyYXRpb25UZW5hbnRdIC0gUmVzb2x2ZXMgb25lIGV4cGxpY2l0IHRlbmFudCBkZXNjcmlwdG9yIGZvciBzY2hlbWEvYmFzZS1tb2RlbCBnZW5lcmF0aW9uIHdpdGhvdXQgZW51bWVyYXRpbmcgbGlmZWN5Y2xlIHRlbmFudHMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGlkZW50aWZpZXI6IHN0cmluZ30pID0+IEFycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiB8IFByb21pc2U8QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pn0gW2xpc3RSZXN0cmljdFRlbmFudHNdIC0gTGlzdHMgZXhpc3RpbmcgdGVuYW50cyB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGZvciBkZXBlbmRlbnQgcmVzdHJpY3QgZGVzdHJveXMuIERlZmF1bHRzIHRvIGxpc3RUZW5hbnRzLlxuICogQHByb3BlcnR5IHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgdGVuYW50OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBbY3JlYXRlRGF0YWJhc2VdIC0gQ3JlYXRlcyB0aGUgdGVuYW50IGRhdGFiYXNlL3NjaGVtYSBmb3Igb25lIHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2Ryb3BEYXRhYmFzZV0gLSBEcm9wcyB0aGUgdGVuYW50IGRhdGFiYXNlL3NjaGVtYSBmb3Igb25lIHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2NoZWNrVGVuYW50XSAtIENoZWNrcyBvbmUgdGVuYW50IGRhdGFiYXNlIGJlZm9yZSBnZW5lcmljIGNvbm5lY3Rpb24gdmFsaWRhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIG1pZ3JhdGlvbnNBcHBsaWVkOiBudW1iZXIsIHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2FmdGVyTWlncmF0ZVRlbmFudF0gLSBSdW5zIGFwcC1vd25lZCB0ZW5hbnQgd29yayBhZnRlciBnZW5lcmljIG1pZ3JhdGlvbnMgZm9yIG9uZSB0ZW5hbnQuIGBtaWdyYXRpb25zQXBwbGllZGAgaXMgaG93IG1hbnkgbWlncmF0aW9ucyBhY3R1YWxseSByYW4gKDAgd2hlbiB0aGUgdGVuYW50IHdhcyBhbHJlYWR5IHVwIHRvIGRhdGUpLCBzbyB0aGUgYXBwIGNhbiBza2lwIGV4cGVuc2l2ZSBwZXItdGVuYW50IHdvcmsgb24gbm8tb3AgZGVwbG95cy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbmZpZ3VyYXRpb25BcmdzVHlwZVxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXV0b2xvYWRdIC0gR2xvYmFsbHkgZW5hYmxlIGF1dG8tYmF0Y2gtcHJlbG9hZCBvZiByZWxhdGlvbnNoaXBzIG9uIGxhenkgYWNjZXNzLiBEZWZhdWx0IHRydWUuXG4gKiBAcHJvcGVydHkge0NvcnNUeXBlfSBbY29yc10gLSBDT1JTIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBIVFRQIHNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29va2llU2VjcmV0XSAtIFNlY3JldCBmb3IgZW5jcnlwdGluZyBjb29raWVzLlxuICogQHByb3BlcnR5IHtBYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVbXX0gW2FiaWxpdHlSZXNvdXJjZXNdIC0gUmVzb3VyY2UgY2xhc3NlcyB1c2VkIHRvIGRlZmluZSBhYmlsaXRpZXMgcGVyIG1vZGVsLlxuICogQHByb3BlcnR5IHtBYmlsaXR5UmVzb2x2ZXJUeXBlfSBbYWJpbGl0eVJlc29sdmVyXSAtIFJlc29sdmVyIGZvciBjcmVhdGluZyByZXF1ZXN0LXNjb3BlZCBhYmlsaXR5IGluc3RhbmNlcy5cbiAqIEBwcm9wZXJ0eSB7QXR0YWNobWVudHNDb25maWd1cmF0aW9ufSBbYXR0YWNobWVudHNdIC0gQXR0YWNobWVudCBzdG9yYWdlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0JhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvbltdfSBbYmFja2VuZFByb2plY3RzXSAtIEJhY2tlbmQgcHJvamVjdCBkZWZpbml0aW9ucyB1c2VkIGZvciBmcm9udGVuZCBtb2RlbCBnZW5lcmF0aW9uLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNQYWNrYWdlQ29uZmlndXJhdGlvbltdfSBbcGFja2FnZXNdIC0gRXh0ZXJuYWwgVmVsb2Npb3VzIHBhY2thZ2VzIHRoYXQgY29udHJpYnV0ZSBtb2RlbHMsIGZyb250ZW5kLW1vZGVsIHJlc291cmNlcyBhbmQgbWlncmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7e1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfX19IGRhdGFiYXNlIC0gRGF0YWJhc2UgY29uZmlndXJhdGlvbnMga2V5ZWQgYnkgZW52aXJvbm1lbnQgYW5kIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZWJ1Z10gLSBFbmFibGUgZGVidWcgbG9nZ2luZy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IERlYnVnRW5kcG9pbnRDb25maWd1cmF0aW9ufSBbZGVidWdFbmRwb2ludF0gLSBFbmFibGUgdGhlIGJ1aWx0LWluIGRlYnVnIGVuZHBvaW50LiBEZWZhdWx0cyB0byBmYWxzZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IEFwaU1hbmlmZXN0Q29uZmlndXJhdGlvbn0gW2FwaU1hbmlmZXN0XSAtIEVuYWJsZSB0aGUgYnVpbHQtaW4gQVBJIG1hbmlmZXN0IGVuZHBvaW50LiBEZWZhdWx0cyB0byBmYWxzZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGlyZWN0b3J5XSAtIEJhc2UgZGlyZWN0b3J5IGZvciB0aGUgcHJvamVjdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuZm9yY2VUZW5hbnREYXRhYmFzZVNjb3Blc10gLSBSZXF1aXJlIHRlbmFudC1zd2l0Y2hlZCBtb2RlbCBxdWVyaWVzIHRvIHJlc29sdmUgYSB0ZW5hbnQgZGF0YWJhc2UgaWRlbnRpZmllci4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZW52aXJvbm1lbnRdIC0gQ3VycmVudCBlbnZpcm9ubWVudCBuYW1lLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2Vudmlyb25tZW50LWhhbmRsZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gZW52aXJvbm1lbnRIYW5kbGVyIC0gRW52aXJvbm1lbnQgaGFuZGxlciBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2V4cG9zZUludGVybmFsRXJyb3JzVG9DbGllbnRzXSAtIFJldHVybiB1bmV4cGVjdGVkIGludGVybmFsIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMgaW4gZnJvbnRlbmQtbW9kZWwgY2xpZW50IHBheWxvYWRzIGluIGV2ZXJ5IGVudmlyb25tZW50LiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHt7bWF4T3BlbkhhbmRsZXM/OiBudW1iZXJ9fSBbZnJvbnRlbmRUZW5hbnRTcWxpdGVdIC0gQm91bmRlZCBmcm9udGVuZCB0ZW5hbnQgU1FMaXRlIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2VjdXJlRnJvbnRlbmRNb2RlbEVycm9yc10gLSBEZXByZWNhdGVkIGNvbXBhdGliaWxpdHkgYWxpYXMgZm9yIGBleHBvc2VJbnRlcm5hbEVycm9yc1RvQ2xpZW50czogZmFsc2VgIHdoZW4gdGhlIGF1dGhvcml0YXRpdmUgb3B0aW9uIGlzIG9taXR0ZWQuXG4gKiBAcHJvcGVydHkge0h0dHBTZXJ2ZXJDb25maWd1cmF0aW9ufSBbaHR0cFNlcnZlcl0gLSBEZWZhdWx0IEhUVFAgc2VydmVyIGNvbmZpZ3VyYXRpb24gZm9yIGFwcGxpY2F0aW9ucyBzdGFydGVkIGZyb20gdGhpcyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtMb2dnaW5nQ29uZmlndXJhdGlvbn0gW2xvZ2dpbmddIC0gTG9nZ2luZyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb259IFtiYWNrZ3JvdW5kSm9ic10gLSBCYWNrZ3JvdW5kIGpvYnMgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmVhY29uQ29uZmlndXJhdGlvbn0gW2JlYWNvbl0gLSBCZWFjb24gYnJvYWRjYXN0IGJ1cyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb24gfCBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0xvYWRlclR5cGV9IFtzY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic10gLSBTY2hlZHVsZWQgYmFja2dyb3VuZCBqb2JzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge01haWxlckJhY2tlbmR9IFttYWlsZXJCYWNrZW5kXSAtIE1haWwgZGVsaXZlcnkgYmFja2VuZC5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgdHlwZTogc3RyaW5nfSkgPT4gdm9pZH0gaW5pdGlhbGl6ZU1vZGVscyAtIEhvb2sgdG8gcmVnaXN0ZXIgbW9kZWxzIGZvciBhIGdpdmVuIGluaXRpYWxpemF0aW9uIHR5cGUuXG4gKiBAcHJvcGVydHkge0luaXRpYWxpemVyc1R5cGV9IFtpbml0aWFsaXplcnNdIC0gSW5pdGlhbGl6ZXIgbG9hZGVyIGZvciBlbnZpcm9ubWVudCBib290c3RyYXBwaW5nLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCAoKCkgPT4gc3RyaW5nKX0gbG9jYWxlIC0gRGVmYXVsdCBsb2NhbGUgb3IgbG9jYWxlIHJlc29sdmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gbG9jYWxlcyAtIFN1cHBvcnRlZCBsb2NhbGVzLlxuICogQHByb3BlcnR5IHtMb2NhbGVGYWxsYmFja3NUeXBlfSBsb2NhbGVGYWxsYmFja3MgLSBMb2NhbGUgZmFsbGJhY2sgbWFwLlxuICogQHByb3BlcnR5IHtTdHJ1Y3R1cmVTcWxDb25maWd1cmF0aW9ufSBbc3RydWN0dXJlU3FsXSAtIFN0cnVjdHVyZSBTUUwgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNTeW5jQ29uZmlndXJhdGlvbn0gW3N5bmNdIC0gTG9jYWwvb2ZmbGluZSBzeW5jIGZyYW1ld29yayBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtUZW5hbnRSZXNvbHZlclR5cGV9IFt0ZW5hbnRSZXNvbHZlcl0gLSBSZXNvbHZlciBmb3IgY3JlYXRpbmcgcmVxdWVzdC1zY29wZWQgdGVuYW50IGNvbnRleHQgb2JqZWN0cy5cbiAqIEBwcm9wZXJ0eSB7VGVuYW50RGF0YWJhc2VSZXNvbHZlclR5cGV9IFt0ZW5hbnREYXRhYmFzZVJlc29sdmVyXSAtIFJlc29sdmVyIGZvciBkZXJpdmluZyB0ZW5hbnQtc3BlY2lmaWMgZGF0YWJhc2UgY29uZmlnIG92ZXJyaWRlcy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgVGVuYW50RGF0YWJhc2VQcm92aWRlclR5cGU+fSBbdGVuYW50RGF0YWJhc2VQcm92aWRlcnNdIC0gVGVuYW50IGRhdGFiYXNlIGxpZmVjeWNsZSBwcm92aWRlcnMga2V5ZWQgYnkgZGF0YWJhc2UgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGVzdGluZ10gLSBQYXRoIHRvIHRoZSB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IHVuZGVmaW5lZCl9IFt0aW1lWm9uZV0gLSBEZWZhdWx0IHRpbWV6b25lIGZvciB0aW1lem9uZS1sZXNzIGRhdGV0aW1lIHN0cmluZ3MuXG4gKiBAcHJvcGVydHkge251bWJlciB8ICgoKSA9PiBudW1iZXIpfSBbdGltZXpvbmVPZmZzZXRNaW51dGVzXSAtIERlZmF1bHQgdGltZXpvbmUgb2Zmc2V0IGluIG1pbnV0ZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHN0cmluZ1tdfSBbdHJ1c3RlZFByb3hpZXNdIC0gVHJ1c3RlZCByZXZlcnNlIHByb3h5IGFkZHJlc3MgcmFuZ2VzIHVzZWQgdG8gcmVzb2x2ZSByZXF1ZXN0IHJlbW90ZSBhZGRyZXNzZXMgZnJvbSBmb3J3YXJkaW5nIGhlYWRlcnMuXG4gKiBAcHJvcGVydHkge251bWJlciB8ICgoKSA9PiBudW1iZXIpfSBbcmVxdWVzdFRpbWVvdXRNc10gLSBUaW1lb3V0IGluIHNlY29uZHMgZm9yIGNvbXBsZXRpbmcgYSBIVFRQIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkge1JvdXRlUmVzb2x2ZXJIb29rVHlwZVtdfSBbcm91dGVSZXNvbHZlckhvb2tzXSAtIEhvb2sgY2FsbGJhY2tzIHRoYXQgY2FuIGhpamFjayB1bnJlc29sdmVkIHJvdXRlcy5cbiAqIEBwcm9wZXJ0eSB7V2Vic29ja2V0Q2hhbm5lbFJlc29sdmVyVHlwZX0gW3dlYnNvY2tldENoYW5uZWxSZXNvbHZlcl0gLSBSZXNvbHZlIGEgd2Vic29ja2V0IGNoYW5uZWwgY2xhc3MvaW5zdGFuY2UgZm9yIGVhY2ggY29ubmVjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7V2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlclR5cGV9IFt3ZWJzb2NrZXRNZXNzYWdlSGFuZGxlclJlc29sdmVyXSAtIFJlc29sdmUgYSByYXcgd2Vic29ja2V0IG1lc3NhZ2UgaGFuZGxlciBmb3IgZWFjaCBjb25uZWN0aW9uLlxuICovXG5cbmV4cG9ydCBjb25zdCBub3RoaW5nID0ge31cbiJdfQ==
694
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uLXR5cGVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVIOzs7OztHQUtHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOztHQUVHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7OztHQUlHO0FBRUg7Ozs7R0FJRztBQUVIOztHQUVHO0FBRUg7Ozs7Ozs7Ozs7OztHQVlHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUgsNERBQTREO0FBQzVELHlGQUF5RjtBQUN6Riw4SkFBOEo7QUFDOUosK0ZBQStGO0FBRS9GOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxRUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUNIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7O0dBR0c7QUFFSDs7R0FFRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBR0g7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7OztHQUlHO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7Ozs7O0dBV0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUg7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7OztHQUdHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7OztHQUlHO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7OztHQUlHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Q0c7QUFFSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQG1vZHVsZSB0eXBlc1xuICovXG5cbi8qKlxuICogSW1tdXRhYmxlIGlkZW50aXR5IHNoYXJlZCBieSBhcHBsaWNhdGlvbiBpbml0aWFsaXplcnMgZm9yIG9uZSBwcm9jZXNzIGxpZmVjeWNsZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFwcGxpY2F0aW9uUHJvY2Vzc0NvbnRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIC0gR2VuZXJpYyBwcm9jZXNzIHR5cGUgc3VwcGxpZWQgdG8gYGNvbmZpZ3VyYXRpb24uaW5pdGlhbGl6ZSgpYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnN0YW5jZUlkIC0gT3BhcXVlIGlkZW50aXR5IHVuaXF1ZSB0byB0aGlzIGxpZmVjeWNsZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQsIHJlc3BvbnNlOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTx2b2lkPn0gQ29yc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIHN1YnNjcmlwdGlvbj86IHtjaGFubmVsOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0sIGNsaWVudDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvaW5kZXguanNcIikuZGVmYXVsdCwgd2Vic29ja2V0U2Vzc2lvbjogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXNlc3Npb24uanNcIikuZGVmYXVsdCwgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA9PiB0eXBlb2YgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgdm9pZCB8IFByb21pc2U8dHlwZW9mIGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvd2Vic29ja2V0LWNoYW5uZWwuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvd2Vic29ja2V0LWNoYW5uZWwuanNcIikuZGVmYXVsdCB8IHZvaWQ+fSBXZWJzb2NrZXRDaGFubmVsUmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBXZWJzb2NrZXRNZXNzYWdlSGFuZGxlclxuICogQHByb3BlcnR5IHsoYXJnczoge21lc3NhZ2U6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IFtvbk1lc3NhZ2VdIC0gSGFuZGxlciBmb3IgaW5jb21pbmcgd2Vic29ja2V0IG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHsoYXJnczoge3Nlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uT3Blbl0gLSBIYW5kbGVyIHdoZW4gdGhlIHdlYnNvY2tldCBzZXNzaW9uIG9wZW5zLlxuICogQHByb3BlcnR5IHsoYXJnczoge3Nlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uQ2xvc2VdIC0gSGFuZGxlciB3aGVuIHRoZSB3ZWJzb2NrZXQgc2Vzc2lvbiBjbG9zZXMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7ZXJyb3I6IEVycm9yLCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IFtvbkVycm9yXSAtIEhhbmRsZXIgd2hlbiBhIHdlYnNvY2tldCBtZXNzYWdlIGVycm9ycy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIGNsaWVudDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvaW5kZXguanNcIikuZGVmYXVsdCwgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBXZWJzb2NrZXRNZXNzYWdlSGFuZGxlciB8IHZvaWQgfCBQcm9taXNlPFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyIHwgdm9pZD59IFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyUmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KGlkOiBzdHJpbmcpID0+IHtkZWZhdWx0OiB0eXBlb2YgaW1wb3J0KFwiLi9pbml0aWFsaXplci5qc1wiKS5kZWZhdWx0fX0gSW5pdGlhbGl6ZXJzUmVxdWlyZUNvbnRleHRUeXBlXG4gKiBAdHlwZWRlZiB7SW5pdGlhbGl6ZXJzUmVxdWlyZUNvbnRleHRUeXBlICYge1xuICogICBrZXlzOiAoKSA9PiBzdHJpbmdbXSxcbiAqICAgaWQ6IHN0cmluZ1xuICogfX0gV2VicGFja1JlcXVpcmVDb250ZXh0XG4gKiBAdHlwZWRlZiB7e3JlcXVpcmVDb250ZXh0OiBXZWJwYWNrUmVxdWlyZUNvbnRleHR9fSBJbml0aWFsaXplcnNFeHBvcnRUeXBlXG4gKiBAdHlwZWRlZiB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0pID0+IFByb21pc2U8SW5pdGlhbGl6ZXJzRXhwb3J0VHlwZT59IEluaXRpYWxpemVyc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNxbENvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZV0gLSBEYXRhYmFzZSBuYW1lIGZvciB0aGUgU1FMIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbb3B0aW9uc10gLSBEcml2ZXItc3BlY2lmaWMgY29ubmVjdGlvbiBvcHRpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy5lbmNyeXB0XSAtIFdoZXRoZXIgdG8gZW5jcnlwdCB0aGUgY29ubmVjdGlvbiAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNjaGVtYV0gLSBEZWZhdWx0IHNjaGVtYSBmb3IgdW5xdWFsaWZpZWQgdGFibGUgbG9va3VwcyAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNlcnZlck5hbWVdIC0gVExTIFNOSSBzZXJ2ZXIgbmFtZSBvdmVycmlkZSBmb3IgTVNTUUwgKGVtcHR5IHN0cmluZyBkaXNhYmxlcyBTTkkpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlXSAtIFdoZXRoZXIgdG8gdHJ1c3QgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBQYXNzd29yZCBmb3IgdGhlIFNRTCB1c2VyLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtwb29sXSAtIENvbm5lY3Rpb24gcG9vbCBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcG9vbC5tYXhdIC0gTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMuIFNldCBudWxsIHRvIGRpc2FibGUgdGhlIGNhcC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9vbC5taW5dIC0gTWluaW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2wuaWRsZVRpbWVvdXRNaWxsaXNdIC0gSWRsZSB0aW1lb3V0IGJlZm9yZSByZWxlYXNpbmcgYSBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcG9vbC5jaGVja291dFRpbWVvdXRNaWxsaXNdIC0gVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBhbiBhdmFpbGFibGUgY29ubmVjdGlvbiBhZnRlciB0aGUgbWF4IGNvbm5lY3Rpb24gY2FwIGlzIHJlYWNoZWQuIFNldCBudWxsIHRvIHdhaXQgaW5kZWZpbml0ZWx5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZXJ2ZXJdIC0gU1FMIHNlcnZlciBob3N0bmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlcl0gLSBTUUwgdXNlcm5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZVBvb2xDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtjaGVja291dFRpbWVvdXRNaWxsaXNdIC0gVGltZW91dCB3aGlsZSBhIGNoZWNrb3V0IHdhaXRzIGZvciBhbiBhdmFpbGFibGUgYXN5bmMtdHJhY2tlZCBjb25uZWN0aW9uIGFmdGVyIHRoZSBtYXggbGl2ZSBjb25uZWN0aW9uIGNhcCBpcyByZWFjaGVkLiBTZXQgbnVsbCB0byB3YWl0IGluZGVmaW5pdGVseS4gRGVmYXVsdDogMTAwMDAuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtpZGxlVGltZW91dE1pbGxpc10gLSBJZGxlIHRpbWVvdXQgYmVmb3JlIGNsb3NpbmcgYSBjaGVja2VkLWluIGFzeW5jLXRyYWNrZWQgY29ubmVjdGlvbi4gU2V0IG51bGwgdG8gZGlzYWJsZSBpZGxlIHJlYXBpbmcuIERlZmF1bHQ6IDUwMDAuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFttYXhdIC0gTWF4aW11bSBsaXZlIGFzeW5jLXRyYWNrZWQgY29ubmVjdGlvbnMgZm9yIHRoaXMgcG9vbC4gRGVmYXVsdHMgdG8gMTAuIEV4dHJhIGNoZWNrb3V0cyB3YWl0IHVudGlsIGEgbWF0Y2hpbmcgY29ubmVjdGlvbiBpcyBjaGVja2VkIGluIG9yIGNhcGFjaXR5IGlzIGZyZWVkLiBTZXQgbnVsbCB0byBkaXNhYmxlIHRoZSBjYXAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlQ2hhcnNldF0gLSBEZWZhdWx0IGNoYXJhY3RlciBzZXQgYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDSEFSQUNURVIgU0VUYC4gRGlzdGluY3QgZnJvbSBgY2hhcnNldGAsIHdoaWNoIGlzIHRoZSBjbGllbnQgY29ubmVjdGlvbiBjaGFyc2V0IGZvcndhcmRlZCB0byB0aGUgbXlzcWwyIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VDb2xsYXRpb25dIC0gRGVmYXVsdCBjb2xsYXRpb24gYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDT0xMQVRFYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VdIC0gRGF0YWJhc2UgbmFtZSBmb3IgdGhpcyBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZWFkbG9ja01heFJldHJpZXNdIC0gTWF4aW11bSBhdHRlbXB0cyBmb3IgdGhlIG91dGVybW9zdCB0cmFuc2FjdGlvbiB3aGVuIGl0IGtlZXBzIGhpdHRpbmcgZGVhZGxvY2tzLiBEZWZhdWx0cyB0byA4LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZWFkbG9ja0Jhc2VXYWl0TXNdIC0gQmFzZSBkZWxheSAobXMpIGZvciB0aGUgZGVhZGxvY2sgcmV0cnkgYmFja29mZjsgdGhlIHBlci1hdHRlbXB0IGNlaWxpbmcgZG91YmxlcyBmcm9tIGhlcmUuIERlZmF1bHRzIHRvIDUwLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZWFkbG9ja01heFdhaXRNc10gLSBDYXAgKG1zKSBvbiB0aGUgZGVhZGxvY2sgcmV0cnkgYmFja29mZiBjZWlsaW5nIHNvIHRoZSBqaXR0ZXJlZCB3YWl0IHN0YXlzIGJvdW5kZWQuIERlZmF1bHRzIHRvIDEwMDAuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBbZHJpdmVyXSAtIERyaXZlciBjbGFzcyB0byB1c2UgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3Bvb2wvYmFzZS5qc1wiKS5kZWZhdWx0fSBbcG9vbFR5cGVdIC0gUG9vbCBjbGFzcyB0byB1c2UgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkgeygpID0+IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBbZ2V0Q29ubmVjdGlvbl0gLSBDdXN0b20gY29ubmVjdGlvbiBmYWN0b3J5IG92ZXJyaWRlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0XSAtIERhdGFiYXNlIGhvc3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFttaWdyYXRpb25zXSAtIFdoZXRoZXIgbWlncmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyBkYXRhYmFzZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW211bHRpcGxlU3RhdGVtZW50c10gLSAoTXlTUUwpIE9wdCBpbiB0byBtdWx0aS1zdGF0ZW1lbnQgcXVlcmllcyBzbyBzdHJ1Y3R1cmUgU1FMIGxvYWRzIGFuZCBhbGwtdGFibGUgY2xlYW51cCBjYW4gYmF0Y2ggaW50byBvbmUgcm91bmQtdHJpcC4gT2ZmIGJ5IGRlZmF1bHQ7IG9yZGluYXJ5IHF1ZXJpZXMgb3RoZXJ3aXNlIHJlamVjdCBzdGFja2VkIHN0YXRlbWVudHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heFJvd3NQZXJJbnNlcnRdIC0gTWF4aW11bSByb3dzIHBlciBgSU5TRVJUIC4uLiBWQUxVRVMgKC4uLiksICguLi4pLCAuLi5gIHN0YXRlbWVudCBnZW5lcmF0ZWQgYnkgYFJlY29yZC5pbnNlcnRNdWx0aXBsZWAuIERlZmF1bHRzIHRvIDUwMC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4SW5zZXJ0U3FsQnl0ZXNdIC0gTWF4aW11bSBzZXJpYWxpemVkIFNRTCBzaXplLCBpbiBieXRlcywgZm9yIGEgc2luZ2xlIGBJTlNFUlQgLi4uIFZBTFVFUyAoLi4uKSwgKC4uLiksIC4uLmAgc3RhdGVtZW50LiBEZWZhdWx0cyB0byAxIE1pQiAoMTA0ODU3NikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heEluQ2xhdXNlVmFsdWVzXSAtIE1heGltdW0gdmFsdWVzIGluIGEgc2luZ2xlIGBJTiAoLi4uKWAgY29ob3J0IHVzZWQgYnkgcHJlbG9hZHMsIGFzc29jaWF0aW9uIGNvdW50cywgYW5kIHF1ZXJ5RGF0YSBhZ2dyZWdhdGVzLiBEZWZhdWx0cyB0byA5OTkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heFF1ZXJ5U3FsQnl0ZXNdIC0gTWF4aW11bSBzZXJpYWxpemVkIFNRTCBzaXplLCBpbiBieXRlcywgZm9yIGEgc2luZ2xlIGNvaG9ydCBxdWVyeSB1c2VkIGJ5IHByZWxvYWRzLCBhc3NvY2lhdGlvbiBjb3VudHMsIGFuZCBxdWVyeURhdGEgYWdncmVnYXRlcy4gRGVmYXVsdHMgdG8gMSBNaUIgKDEwNDg1NzYpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBQYXNzd29yZCBmb3IgdGhlIGRhdGFiYXNlIHVzZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BvcnRdIC0gRGF0YWJhc2UgcG9ydC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHJpbWFyeUtleVR5cGVdIC0gRGVmYXVsdCB0eXBlIGZvciBpbXBsaWNpdCBtaWdyYXRpb24gcHJpbWFyeSBrZXlzIGFuZCByZWZlcmVuY2VzLiBEZWZhdWx0cyB0byBgdXVpZGAuXG4gKiBAcHJvcGVydHkge0RhdGFiYXNlUG9vbENvbmZpZ3VyYXRpb259IFtwb29sXSAtIFZlbG9jaW91cyBkYXRhYmFzZSBwb29sIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEZyaWVuZGx5IG5hbWUgZm9yIHRoZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHsoZmlsZTogc3RyaW5nKSA9PiBzdHJpbmd9IFtsb2NhdGVGaWxlXSAtIE9wdGlvbmFsIHNxbGl0ZS13ZWIgc3FsLmpzIHdhc20gcmVzb2x2ZXIgKGBpbml0U3FsSnMoe2xvY2F0ZUZpbGV9KWApLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcmVhZE9ubHldIC0gV2hldGhlciB3cml0ZXMgc2hvdWxkIGJlIGJsb2NrZWQgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NjaGVtYV0gLSBEZWZhdWx0IHNjaGVtYSBmb3IgdW5xdWFsaWZpZWQgdGFibGUgbG9va3VwcyAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2NoZW1hQ2FjaGVdIC0gV2hldGhlciBzY2hlbWEgbWV0YWRhdGEgc2hvdWxkIGJlIGNhY2hlZCBvbiB0aGUgZHJpdmVyLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtyZWNvcmRdIC0gUmVjb3JkLWxldmVsIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZWNvcmQudHJhbnNhY3Rpb25zXSAtIFdoZXRoZXIgcmVjb3JkIG9wZXJhdGlvbnMgc2hvdWxkIHVzZSB0cmFuc2FjdGlvbnMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNldF0gLSBXaGV0aGVyIHRvIHJlc2V0IHRoZSBkYXRhYmFzZSBvbiBzdGFydHVwLlxuICogQHByb3BlcnR5IHtTcWxDb25maWd9IFtzcWxDb25maWddIC0gRHJpdmVyLXNwZWNpZmljIFNRTCBjb25maWcuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt0ZW5hbnRPbmx5XSAtIFdoZXRoZXIgdGhpcyBkYXRhYmFzZSBpZGVudGlmaWVyIGlzIG9ubHkgYWN0aXZlIGluc2lkZSBhIHJlc29sdmVkIHRlbmFudCBjb250ZXh0LlxuICogQHByb3BlcnR5IHtcIm1zc3FsXCIgfCBcIm15c3FsXCIgfCBcInBnc3FsXCIgfCBcInNxbGl0ZVwifSBbdHlwZV0gLSBEYXRhYmFzZSB0eXBlIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VzZURhdGFiYXNlXSAtIERhdGFiYXNlIHRvIHN3aXRjaCB0byBhZnRlciBjb25uZWN0aW5nLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1c2VybmFtZV0gLSBVc2VybmFtZSBmb3IgZGF0YWJhc2UgYXV0aGVudGljYXRpb24uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7XCJkZWJ1Zy1sb3ctbGV2ZWxcIiB8IFwiZGVidWdcIiB8IFwiaW5mb1wiIHwgXCJ3YXJuXCIgfCBcImVycm9yXCJ9IExvZ0xldmVsXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2dnaW5nT3V0cHV0UGF5bG9hZFxuICogQHByb3BlcnR5IHtMb2dMZXZlbH0gbGV2ZWwgLSBMb2cgbGV2ZWwuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZSAtIEZvcm1hdHRlZCBtZXNzYWdlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN1YmplY3QgLSBMb2cgc3ViamVjdC5cbiAqIEBwcm9wZXJ0eSB7RGF0ZX0gdGltZXN0YW1wIC0gVGltZXN0YW1wLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTG9nZ2luZ091dHB1dFxuICogQHByb3BlcnR5IHsoYXJnOiBMb2dnaW5nT3V0cHV0UGF5bG9hZCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IHdyaXRlIC0gV3JpdGUgYSBsb2cgZW50cnkuXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsW119IFtsZXZlbHNdIC0gRGVmYXVsdCBsZXZlbHMgZm9yIHRoaXMgb3V0cHV0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTG9nZ2luZ091dHB1dENvbmZpZ1xuICogQHByb3BlcnR5IHtMb2dnaW5nT3V0cHV0fSBvdXRwdXQgLSBPdXRwdXQgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge0FycmF5PExvZ0xldmVsPn0gW2xldmVsc10gLSBMZXZlbHMgZW5hYmxlZCBmb3IgdGhpcyBvdXRwdXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7TG9nZ2luZ091dHB1dENvbmZpZyB8IExvZ2dpbmdPdXRwdXQgfCBpbXBvcnQoXCIuL2xvZ2dlci9iYXNlLWxvZ2dlci5qc1wiKS5kZWZhdWx0fSBMb2dnZXJDb25maWdcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb25zb2xlXSAtIEVuYWJsZS9kaXNhYmxlIGNvbnNvbGUgbG9nZ2luZyBmb3IgcmVxdWVzdCBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgb2YgXCJ0ZXN0XCIgYW5kIGZvciBIVFRQIHNlcnZlciBsb2dzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZmlsZV0gLSBFbmFibGUvZGlzYWJsZSB3cml0aW5nIGxvZ3MgdG8gYSBmaWxlLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkaXJlY3RvcnldIC0gRGlyZWN0b3J5IHdoZXJlIGxvZyBmaWxlcyBhcmUgc3RvcmVkLiBEZWZhdWx0cyB0byBcIjxwcm9qZWN0Pi9sb2dcIi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmlsZVBhdGhdIC0gRXhwbGljaXQgcGF0aCBmb3IgdGhlIGxvZyBmaWxlLiBEZWZhdWx0cyB0byBcIjxkaXJlY3Rvcnk+LzxlbnZpcm9ubWVudD4ubG9nXCIuXG4gKiBAcHJvcGVydHkge0FycmF5PFwiZGVidWctbG93LWxldmVsXCIgfCBcImRlYnVnXCIgfCBcImluZm9cIiB8IFwid2FyblwiIHwgXCJlcnJvclwiPn0gW2xldmVsc10gLSBPdmVycmlkZSB3aGljaCBsb2cgbGV2ZWxzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGVidWdMb3dMZXZlbF0gLSBDb252ZW5pZW5jZSBmbGFnIHRvIGluY2x1ZGUgdmVyeSBsb3ctbGV2ZWwgZGVidWcgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3F1ZXJ5TG9nZ2luZ10gLSBFbmFibGUvZGlzYWJsZSBkYXRhYmFzZSBxdWVyeSBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgdGVzdCBhbmQgZmFsc2UgaW4gdGVzdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtzZW5zaXRpdmVOYW1lc10gLSBBZGRpdGlvbmFsIGNhc2UtaW5zZW5zaXRpdmUgc2Vuc2l0aXZlIGhlYWRlci9wYXJhbWV0ZXIgbmFtZXMgdG8gcmVkYWN0IGZyb20gbG9nZ2luZy5cbiAqIEBwcm9wZXJ0eSB7TG9nZ2VyQ29uZmlnW119IFtsb2dnZXJzXSAtIExvZ2dlciBpbnN0YW5jZXMgKGNvbnZlcnRlZCB0byBvdXRwdXRzIHdoZW4gY29uZmlndXJlZCkuXG4gKiBAcHJvcGVydHkge0xvZ2dpbmdPdXRwdXRDb25maWdbXX0gW291dHB1dHNdIC0gRXhwbGljaXQgbG9nZ2VyIG91dHB1dHMgKG92ZXJyaWRlcyBjb25zb2xlL2ZpbGUgZGVmYXVsdHMgd2hlbiBwcm92aWRlZCkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTdHJ1Y3R1cmVTcWxDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbZW5hYmxlZEVudmlyb25tZW50c10gLSBFbnZpcm9ubWVudHMgYWxsb3dlZCB0byB3cml0ZSBzdHJ1Y3R1cmUgc3FsIGZpbGVzIGR1cmluZyBhdXRvbWF0aWMgbWlncmF0aW9uIGR1bXBzLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2Rpc2FibGVkRW52aXJvbm1lbnRzXSAtIEVudmlyb25tZW50cyB0aGF0IHNob3VsZCBza2lwIHdyaXRpbmcgc3RydWN0dXJlIHNxbCBmaWxlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtcImJlYWNvblwiIHwgXCJwb2xsaW5nXCJ9IEJhY2tncm91bmRKb2JzRGlzcGF0Y2hTdHJhdGVneVxuICpcbiAqIC0gYFwiYmVhY29uXCJgIChkZWZhdWx0KTogZXZlbnQtZHJpdmVuIGRpc3BhdGNoLiBUaGVcbiAqICAgYGJhY2tncm91bmQtam9icy1tYWluYCBwcm9jZXNzIGRyYWlucyB0aGUgcXVldWUgb24gZW5xdWV1ZSwgb25cbiAqICAgd29ya2VyIHJlYWRpbmVzcywgb24gQmVhY29uIGJyb2FkY2FzdHMgKHNvIGNyb3NzLXByb2Nlc3MgZW5xdWV1ZXNcbiAqICAgd2FrZSBpdCksIGFuZCBhcm1zIGEgYHNldFRpbWVvdXRgIGZvciB0aGUgc29vbmVzdCBmdXR1cmUtc2NoZWR1bGVkXG4gKiAgIGpvYi4gRmFsbHMgYmFjayBncmFjZWZ1bGx5IHRvIGRpcmVjdCBpbi1wcm9jZXNzIHRyaWdnZXJpbmcgd2hlblxuICogICBCZWFjb24gaXMgbm90IGNvbmZpZ3VyZWQuXG4gKiAtIGBcInBvbGxpbmdcImA6IGxlZ2FjeSBtb2RlLCBydW5zIGEgZml4ZWQtaW50ZXJ2YWwgcG9sbCBvdmVyIHRoZVxuICogICBgYmFja2dyb3VuZF9qb2JzYCB0YWJsZSAoc2VlIGBwb2xsSW50ZXJ2YWxNc2ApLlxuICovXG5cbi8qKiBAdHlwZWRlZiB7XCJiYWNrZ3JvdW5kXCIgfCBcImlubGluZVwifSBCYWNrZ3JvdW5kSm9ic01vZGUgKi9cbi8qKiBAdHlwZWRlZiB7XCJjYW5kaWRhdGVcIiB8IFwiYWN0aXZlXCIgfCBcInJldGlyZWRcIn0gQmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uSW5pdGlhbFN0YXRlICovXG4vKiogQHR5cGVkZWYgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBpbXBvcnQoXCIuL2JhY2tncm91bmQtam9icy9hZGFwdGVyLmpzXCIpLmRlZmF1bHR9IEJhY2tncm91bmRKb2JzQWRhcHRlckZhY3RvcnkgKi9cbi8qKiBAdHlwZWRlZiB7dHlwZW9mIGltcG9ydChcIi4vYmFja2dyb3VuZC1qb2JzL3BsYXRmb3JtLWpvYi5qc1wiKS5kZWZhdWx0fSBCYWNrZ3JvdW5kSm9iQ2xhc3MgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9iYWNrZ3JvdW5kLWpvYnMvYWRhcHRlci5qc1wiKS5kZWZhdWx0IHwgQmFja2dyb3VuZEpvYnNBZGFwdGVyRmFjdG9yeX0gW2FkYXB0ZXJdIC0gQWRhcHRlciBpbnN0YW5jZSBvciBzeW5jaHJvbm91cyBmYWN0b3J5LiBBIGZhY3RvcnkgY3JlYXRlcyBvbmUgYWRhcHRlciBwZXIgY29uZmlndXJhdGlvbiBsaWZlY3ljbGU7IHRoZSBmcmFtZXdvcmsgY2xvc2VzIGFkYXB0ZXJzIGl0IHJlc29sdmVzLlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9iQ2xhc3NbXX0gW2pvYkNsYXNzZXNdIC0gU3RhdGljIHBvcnRhYmxlIGpvYiBjbGFzc2VzIGF2YWlsYWJsZSB0byBCcm93c2VyL0V4cG8gbG9jYWwgZGlzcGF0Y2guIERlZmF1bHRzIHRvIGBbXWA7IE5vZGUga2VlcHMgaXRzIGZpbGVzeXN0ZW0gcmVnaXN0cnkuXG4gKiBAcHJvcGVydHkge0JhY2tncm91bmRKb2JzTW9kZX0gW21vZGVdIC0gYFwiYmFja2dyb3VuZFwiYCB1c2VzIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIvdHJhbnNwb3J0IGFuZCBkdXJhYmxlIHF1ZXVlIHNlbWFudGljczsgYFwiaW5saW5lXCJgIHBlcmZvcm1zIGltbWVkaWF0ZWx5IHdpdGhvdXQgZHVyYWJsZSBxdWV1ZSBzdGF0ZS4gRGVmYXVsdHMgdG8gYFwiYmFja2dyb3VuZFwiYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZ2VuZXJhdGlvbklkXSAtIE9wdC1pbiByZWxlYXNlIGdlbmVyYXRpb24gaWRlbnRpdHkuIE11c3QgbWF0Y2ggYF5bQS1aYS16MC05XVtBLVphLXowLTkuXy1dezAsMTI3fSRgIGFuZCBhZ3JlZSB3aXRoIGVudmlyb25tZW50L0FQSS9DTEkgc291cmNlcy5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uSW5pdGlhbFN0YXRlfSBbaW5pdGlhbEdlbmVyYXRpb25TdGF0ZV0gLSBHZW5lcmF0aW9uLWF3YXJlIGJvb3Qgc3RhdGUuIERlZmF1bHRzIHRvIGBcImNhbmRpZGF0ZVwiYDsgaW52YWxpZCB3aXRob3V0IGBnZW5lcmF0aW9uSWRgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsaWZlY3ljbGVTb2NrZXRQYXRoXSAtIEFic29sdXRlIHJlbGVhc2UtbG9jYWwgVW5peCBzb2NrZXQgdXNlZCBieSBhY2tub3dsZWRnZWQgYWN0aXZhdGlvbiBhbmQgcmV0aXJlbWVudCBjb21tYW5kcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBIb3N0bmFtZSBmb3IgdGhlIGJhY2tncm91bmQgam9icyBtYWluIHByb2Nlc3MuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BvcnRdIC0gUG9ydCBmb3IgdGhlIGJhY2tncm91bmQgam9icyBtYWluIHByb2Nlc3MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlSWRlbnRpZmllcl0gLSBEYXRhYmFzZSBpZGVudGlmaWVyIHVzZWQgdG8gc3RvcmUgYmFja2dyb3VuZCBqb2JzLiBCcm93c2VyL0V4cG8gbG9jYWwgZGlzcGF0Y2ggdXNlcyB0aGlzIGV4aXN0aW5nIFNRTGl0ZSBkYXRhYmFzZSBhbmQgZGVmYXVsdHMgdG8gYFwiZGVmYXVsdFwiYC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4Q29uY3VycmVudElubGluZUpvYnNdIC0gSG93IG1hbnkgYGZvcmtlZDogZmFsc2VgIGpvYnMgYSBzaW5nbGVcbiAqICAgYGJhY2tncm91bmQtam9icy13b3JrZXJgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byBydW4gaW4gcGFyYWxsZWwuIENvbmN1cnJlbmN5XG4gKiAgIGlzIGF0IHRoZSBKUyBldmVudC1sb29wIGxldmVsOiBldmVyeSBjb25jdXJyZW50IGpvYiBzaGFyZXMgdGhlIHdvcmtlcidzXG4gKiAgIHByb2Nlc3MgYW5kIERCIGNvbm5lY3Rpb24gcG9vbCwgc28gdGhpcyBzaG91bGQgZml0IHRoZSBwb29sIHNpemUsIG5vdCB0aGVcbiAqICAgQ1BVIGNvdW50LiBGb3JraW5nIHJlbWFpbnMgdGhlIHJpZ2h0IHRvb2wgZm9yIG1lbW9yeSBpc29sYXRpb24gYWNyb3NzXG4gKiAgIGxvbmctcnVubmluZyBqb2JzIGFuZCBmb3IgdXNpbmcgbW9yZSBjb3Jlcy4gRGVmYXVsdDogYDRgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhDb25jdXJyZW50Rm9ya2VkSm9ic10gLSBIb3cgbWFueSBvdXQtb2YtcHJvY2Vzc1xuICogICBgXCJmb3JrZWRcImAgb3IgYFwic3Bhd25lZFwiYCBqb2JzIGEgc2luZ2xlIGBiYWNrZ3JvdW5kLWpvYnMtd29ya2VyYCBpc1xuICogICBhbGxvd2VkIHRvIGtlZXAgaW4gZmxpZ2h0LiBEZWZhdWx0OiBgNGAuIFRoaXMgaXMgYSBwZXItd29ya2VyIHNhZmV0eSBjYXA7XG4gKiAgIGZvciB3b3JrbG9hZC1zaGFwZWQgbGltaXRzIHVzZSBwZXItcXVldWUgY2FwcyAoYHF1ZXVlc2ApIGluc3RlYWQsIHdoaWNoIGFyZVxuICogICBlbmZvcmNlZCBjbHVzdGVyLXdpZGUgYW5kIGFyZSBpbW11bmUgdG8gZHVwbGljYXRlIHdvcmtlciBwcm9jZXNzZXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2xlZFJ1bm5lckNvdW50XSAtIE51bWJlciBvZiB3YXJtLCByZXVzYWJsZSBjaGlsZCBydW5uZXJzIG93bmVkIGJ5IGVhY2ggd29ya2VyLiBQb29sZWQgY2FwYWNpdHkgaXMgc2VwYXJhdGUgZnJvbSBpbmxpbmUgYW5kIGZvcmtlZC9zcGF3bmVkIGNhcGFjaXR5LiBEZWZhdWx0OiBgNGAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2xlZFJ1bm5lckNvbmN1cnJlbmN5XSAtIE51bWJlciBvZiBqb2JzIGVhY2ggcG9vbGVkIGNoaWxkIHJ1bnMgY29uY3VycmVudGx5IG9uIGl0cyBvd24gZXZlbnQgbG9vcC4gVG90YWwgcGVyLXdvcmtlciBwb29sZWQgY2FwYWNpdHkgaXMgYHBvb2xlZFJ1bm5lckNvdW50IMOXIHBvb2xlZFJ1bm5lckNvbmN1cnJlbmN5YC4gYDFgIChkZWZhdWx0KSBrZWVwcyBlYWNoIGNoaWxkIHNlcmlhbDsgcmFpc2UgaXQgZm9yIEkvTy1ib3VuZCBqb2JzIHNvIGEgYm91bmRlZCBzZXQgb2YgaXNvbGF0ZWQgcHJvY2Vzc2VzIGhhbmRsZXMgaGlnaCBjb25jdXJyZW5jeSAobGlrZSB0aGUgaW5saW5lIGxhbmUpIHdpdGhvdXQgb25lIHByb2Nlc3MgcGVyIGNvbmN1cnJlbnQgam9iLiBEZWZhdWx0OiBgMWAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2xlZFJ1bm5lck1heEpvYnNdIC0gTnVtYmVyIG9mIHNlcXVlbnRpYWwgam9icyBhIHBvb2xlZCBjaGlsZCBydW5zIGJlZm9yZSBpdCBpcyByZXBsYWNlZCwgYm91bmRpbmcgcHJvY2Vzcy1sZXZlbCByZXNvdXJjZSBhY2N1bXVsYXRpb24uIERlZmF1bHQ6IGAxMDBgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb29sZWRSdW5uZXJNYXhSc3NCeXRlc10gLSBSU1MgYnl0ZXMgYWZ0ZXIgYW4gYWNrbm93bGVkZ2VkIGpvYiBhdCB3aGljaCBhIHBvb2xlZCBjaGlsZCBpcyByZXBsYWNlZC4gRGVmYXVsdDogYDUzNjg3MDkxMmAgKDUxMiBNaUIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb29sZWRSdW5uZXJNYXhMaWZldGltZU1zXSAtIEFnZSBhZnRlciBhbiBhY2tub3dsZWRnZWQgam9iIGF0IHdoaWNoIGEgcG9vbGVkIGNoaWxkIGlzIHJlcGxhY2VkLiBEZWZhdWx0OiBgMzYwMDAwMGAgKG9uZSBob3VyKS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywge21heENvbmN1cnJlbnQ/OiBudW1iZXIsIHByaW9yaXR5PzogbnVtYmVyfT59IFtxdWV1ZXNdIC0gUGVyLXF1ZXVlXG4gKiAgIGNvbmN1cnJlbmN5IGNhcHMgYW5kIGRpc3BhdGNoIHByaW9yaXRpZXMsIFNpZGVraXEtc3R5bGUuIEEgam9iIGRlY2xhcmVzIGl0cyBxdWV1ZSAoc3RhdGljXG4gKiAgIGBxdWV1ZWAgb24gdGhlIGpvYiBjbGFzcywgb3IgdGhlIGBxdWV1ZWAgZW5xdWV1ZSBvcHRpb247IGRlZmF1bHRzIHRvIGBcImRlZmF1bHRcImApLCBhbmRcbiAqICAgYHF1ZXVlc1tuYW1lXS5tYXhDb25jdXJyZW50YCBib3VuZHMgaG93IG1hbnkgam9icyBmcm9tIHRoYXQgcXVldWUgbWF5IGJlXG4gKiAgIGluIGZsaWdodCBhY3Jvc3MgdGhlIHdob2xlIGNsdXN0ZXIgKGVuZm9yY2VkIHZpYSBkdXJhYmxlIHBlci1rZXlcbiAqICAgY29uY3VycmVuY3ksIHNvIGl0IGhvbGRzIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgd29ya2VyIHByb2Nlc3NlcyBydW4pLlxuICogICBTaXplIGVhY2ggcXVldWUgdG8gaXRzIHdvcmtsb2FkOiBJL08tYm91bmQgcXVldWVzIChlLmcuIGJ1aWxkIHJ1bm5lcnNcbiAqICAgd2FpdGluZyBvbiByZW1vdGUgRG9ja2VyIHNlcnZlcnMpIGNhbiBydW4gZmFyIGFib3ZlIHRoZSBjb3JlIGNvdW50LCB3aGlsZVxuICogICBDUFUtYm91bmQgcXVldWVzIHNob3VsZCBzdGF5IG5lYXIgaXQuIGBxdWV1ZXNbbmFtZV0ucHJpb3JpdHlgIChkZWZhdWx0IGAwYClcbiAqICAgbWFrZXMgdGhlIG1haW4gcHJvY2VzcyBkaXNwYXRjaCBoaWdoZXItcHJpb3JpdHkgcXVldWVzIGJlZm9yZSBsb3dlci1wcmlvcml0eVxuICogICBvbmVzIHJlZ2FyZGxlc3Mgb2YgZW5xdWV1ZSBvcmRlciwgc28gYSBzbWFsbCB0aW1lLWNyaXRpY2FsIHF1ZXVlIGNhbiBuZXZlciBiZVxuICogICBzdGFydmVkIGJ5IGEgZmxvb2Qgb2YgbG93LXByaW9yaXR5IHdvcmsgc2hhcmluZyBhIHdvcmtlciBwb29sLiBVbmxpa2VcbiAqICAgU2lkZWtpcSdzIHN0cmljdCBxdWV1ZSBvcmRlcmluZywgcHJpb3JpdHkgY29tcG9zZXMgd2l0aCB0aGUgcGVyLXF1ZXVlIGNhcHM6XG4gKiAgIGEgaGlnaGVyLXByaW9yaXR5IHF1ZXVlIHRoYXQgaXMgYWxyZWFkeSBhdCBpdHMgYG1heENvbmN1cnJlbnRgIGlzIHNraXBwZWQgYW5kXG4gKiAgIGRpc3BhdGNoIGZhbGxzIHRocm91Z2ggdG8gdGhlIG5leHQgZWxpZ2libGUgbG93ZXItcHJpb3JpdHkgam9iLCBzbyBhIGJ1c3lcbiAqICAgaGlnaC1wcmlvcml0eSBxdWV1ZSBkb2VzIG5vdCBibG9jayBldmVyeXRoaW5nIGVsc2UuIFRoaXMgZmFsbHRocm91Z2ggaXMgYVxuICogICBwcm9wZXJ0eSBvZiB0aGUgcXVldWUtZGVyaXZlZCBjYXA7IGEgam9iIHRoYXQgc3VwcGxpZXMgaXRzIG93biBleHBsaWNpdFxuICogICBgY29uY3VycmVuY3lLZXlgL2BtYXhDb25jdXJyZW5jeWAgYnlwYXNzZXMgdGhlIHF1ZXVlIGNhcCBlbnRpcmVseSAoYW5cbiAqICAgZXhwbGljaXQga2V5IGFsd2F5cyB3aW5zIOKAlCBzZWUgYWJvdmUpIGFuZCBpcyBib3VuZGVkIG9ubHkgYnkgdGhhdCBrZXksIHNvIGl0XG4gKiAgIGlzIG5vdCBoZWxkIGJhY2sgYnkgdGhlIHF1ZXVlJ3MgY2FwIGFuZCBwcmlvcml0eSBzaW1wbHkgb3JkZXJzIGl0IG5vcm1hbGx5LlxuICogICBQcmlvcml0aWVzIG1heSBiZSBhbnkgbnVtYmVyLCBpbmNsdWRpbmcgbmVnYXRpdmUgdG8gc2luayBhIHF1ZXVlIGJlbG93IHRoZVxuICogICBkZWZhdWx0LiBKb2JzIHdpdGhpbiB0aGUgc2FtZSBwcmlvcml0eSBrZWVwIEZJRk8gKGBzY2hlZHVsZWRfYXRgLCB0aGVuXG4gKiAgIGBjcmVhdGVkX2F0YCkgb3JkZXIuIERlZmF1bHQ6IGB7fWAgKG5vIHF1ZXVlIGNhcHMsIGFsbCBxdWV1ZXMgcHJpb3JpdHkgYDBgKS5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYnNEaXNwYXRjaFN0cmF0ZWd5fSBbZGlzcGF0Y2hTdHJhdGVneV0gLSBIb3cgdGhlIG1haW4gcHJvY2Vzc1xuICogICBkZXRlY3RzIG5ldyB3b3JrLiBEZWZhdWx0cyB0byBgXCJiZWFjb25cImAgKGV2ZW50LWRyaXZlbikuIFNldCB0byBgXCJwb2xsaW5nXCJgXG4gKiAgIHRvIHJlc3RvcmUgdGhlIGxlZ2FjeSBmaXhlZC1pbnRlcnZhbCBwb2xsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb2xsSW50ZXJ2YWxNc10gLSBQb2xsIGludGVydmFsIGluIG1pbGxpc2Vjb25kcy4gT25seSB1c2VkXG4gKiAgIHdoZW4gYGRpc3BhdGNoU3RyYXRlZ3kgPT09IFwicG9sbGluZ1wiYC4gRGVmYXVsdDogYDEwMDBgLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbam9iVGltZW91dE1zXSAtIFdhbGwtY2xvY2sgYmFja3N0b3AsIGluIG1zLCBmb3IgYVxuICogICBgXCJmb3JrZWRcImAgam9iIHJ1bm5lci4gQSBmb3JrZWQgam9iIHN0aWxsIHJ1bm5pbmcgYWZ0ZXIgdGhpcyBpcyB0ZXJtaW5hdGVkXG4gKiAgIChTSUdURVJNLCB0aGVuIFNJR0tJTEwgYWZ0ZXIgdGhlIHJlYXBpbmcgZ3JhY2UpIGFuZCByZXBvcnRlZCBmYWlsZWQsIHNvIGFcbiAqICAgc2luZ2xlIGdlbnVpbmVseS1odW5nIHJ1bm5lciBjYW4ndCBwaW4gYSBkcmFpbmluZyB3b3JrZXIg4oCUIGFuZCBpdHMgZnVsbC1hcHBcbiAqICAgYm9vdCBhbmQgREIgY29ubmVjdGlvbnMg4oCUIGluZGVmaW5pdGVseSAoZS5nLiBhY3Jvc3MgYSBkZXBsb3kgd2hlcmUgYSByZXRpcmVkXG4gKiAgIHdvcmtlciBkcmFpbnMgaW4tZmxpZ2h0IGpvYnMpLiBUaGlzIGlzIGEgY29hcnNlIHNhZmV0eSBuZXQsIG5vdCBwZXItam9iXG4gKiAgIHR1bmluZzogc2V0IGl0IHdlbGwgYWJvdmUgdGhlIGxvbmdlc3QgbGVnaXRpbWF0ZSBmb3JrZWQgam9iIChidWlsZCBydW5uZXJzLFxuICogICBsb25nIGltcG9ydHMpIHNvIG9ubHkgZ2VudWluZWx5LXN0dWNrIHJ1bm5lcnMgYXJlIGtpbGxlZC4gT21pdCwgYG51bGxgLCBvclxuICogICBgPD0gMGAgdG8gZGlzYWJsZSAoZGVmYXVsdCksIHdoaWNoIHByZXNlcnZlcyB0aGUgcHJpb3IgdW5ib3VuZGVkIGJlaGF2aW9yLlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9ic1JldGVudGlvbkNvbmZpZ3VyYXRpb259IFtyZXRlbnRpb25dIC0gUmV0ZW50aW9uL3BydW5pbmdcbiAqICAgb2YgdGVybWluYWwgam9iIHJvd3MuIFdpdGhvdXQgcHJ1bmluZyB0aGUgam9icyB0YWJsZSBncm93cyB1bmJvdW5kZWRcbiAqICAgKGNvbXBsZXRlZCByb3dzIGFjY3VtdWxhdGUgZm9yZXZlciksIHdoaWNoIGJsb2F0cyBzdG9yYWdlIGFuZCBpbmRleGVzIGFuZFxuICogICBldmVudHVhbGx5IHNsb3dzIGRpc3BhdGNoLiBUaGUgbWFpbiBwcm9jZXNzIHN3ZWVwcyB0ZXJtaW5hbCByb3dzIHBhc3QgdGhlaXJcbiAqICAgd2luZG93IG9uIGFuIGludGVydmFsLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmFja2dyb3VuZEpvYnNSZXRlbnRpb25Db25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtjb21wbGV0ZWRUdGxNc10gLSBEZWxldGUgYGNvbXBsZXRlZGAgam9icyB3aG9zZVxuICogICBgY29tcGxldGVkX2F0X21zYCBpcyBvbGRlciB0aGFuIHRoaXMgbWFueSBtcy4gYG51bGxgIG9yIGA8PSAwYCBkaXNhYmxlc1xuICogICBjb21wbGV0ZWQgcHJ1bmluZy4gRGVmYXVsdDogYDYwNDgwMDAwMGAgKDcgZGF5cykuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtmYWlsZWRUdGxNc10gLSBEZWxldGUgdGVybWluYWwgYGZhaWxlZGAvYG9ycGhhbmVkYFxuICogICBqb2JzIG9sZGVyIHRoYW4gdGhpcyBtYW55IG1zLiBgbnVsbGAgb3IgYDw9IDBgIGRpc2FibGVzIChrZWVwcyB0aGVtIGZvclxuICogICBkZWJ1Z2dpbmcpLiBEZWZhdWx0OiBgMjU5MjAwMDAwMGAgKDMwIGRheXMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtiYXRjaFNpemVdIC0gUm93cyBkZWxldGVkIHBlciBiYXRjaC4gRGVmYXVsdDogYDEwMDBgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzd2VlcEludGVydmFsTXNdIC0gSG93IG9mdGVuIHRoZSByZXRlbnRpb24gc3dlZXAgcnVucy5cbiAqICAgRGVmYXVsdDogYDM2MDAwMDBgICgxIGhvdXIpLlxuICovXG4vKipcbiAqIEZ1bGx5LXJlc29sdmVkIHJldGVudGlvbiBjb25maWcgYXMgcmV0dXJuZWQgYnkgYGdldEJhY2tncm91bmRKb2JzQ29uZmlnKClgXG4gKiAoZXZlcnkgZmllbGQgZGVmYXVsdGVkKSwgYXMgb3Bwb3NlZCB0byB0aGUgcGFydGlhbCB1c2VyLXByb3ZpZGVkIGlucHV0LlxuICogQHR5cGVkZWYge29iamVjdH0gUmVzb2x2ZWRCYWNrZ3JvdW5kSm9ic1JldGVudGlvbkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gY29tcGxldGVkVHRsTXMgLSBSZXNvbHZlZCBjb21wbGV0ZWQtam9iIFRUTCBpbiBtcyAoYG51bGxgIGRpc2FibGVzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gZmFpbGVkVHRsTXMgLSBSZXNvbHZlZCBmYWlsZWQvb3JwaGFuZWQgVFRMIGluIG1zIChgbnVsbGAgZGlzYWJsZXMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJhdGNoU2l6ZSAtIFJlc29sdmVkIGRlbGV0ZSBiYXRjaCBzaXplLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHN3ZWVwSW50ZXJ2YWxNcyAtIFJlc29sdmVkIHN3ZWVwIGludGVydmFsIGluIG1zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmVhY29uQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW5hYmxlZF0gLSBXaGV0aGVyIHRvIGNvbm5lY3QgdG8gYSBCZWFjb24gYnJva2VyLiBEZWZhdWx0cyB0byBmYWxzZSB1bmxlc3MgYGhvc3RgL2Bwb3J0YCBvciBgaW5Qcm9jZXNzOiB0cnVlYCBhcmUgc2V0LCBvciBlbnYgdmFycyBhcmUgcHJlc2VudC4gRXhwbGljaXQgYGZhbHNlYCBkaXNhYmxlcyBCZWFjb24gZXZlbiB3aGVuIGVudiB2YXJzIGFyZSBzZXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpblByb2Nlc3NdIC0gV2hlbiB0cnVlLCB1c2UgYSBtb2R1bGUtbGV2ZWwgaW4tcHJvY2VzcyBicm9rZXIgc2luZ2xldG9uIGluc3RlYWQgb2YgY29ubmVjdGluZyBvdmVyIFRDUC4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGhvc3RgL2Bwb3J0YC4gVXNlZnVsIGZvciB0ZXN0cyBhbmQgc2luZ2xlLXByb2Nlc3MgZGVwbG95bWVudHMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hvc3RdIC0gSG9zdG5hbWUgb2YgdGhlIEJlYWNvbiBicm9rZXIgZGFlbW9uLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgb2YgdGhlIEJlYWNvbiBicm9rZXIgZGFlbW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwZWVyVHlwZV0gLSBPcHRpb25hbCBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhpcyBwZWVyIChlLmcuIFwic2VydmVyXCIsIFwiYmFja2dyb3VuZC1qb2JzLXdvcmtlclwiKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdW5yZWFjaGFibGVSZXBvcnRNc10gLSBHcmFjZSB3aW5kb3cgKG1zKSBhIGJlYWNvbiBjb25uZWN0L2Rpc2Nvbm5lY3QgYmxpcCBtdXN0IHBlcnNpc3QgYmVmb3JlIGl0IGlzIHJlcG9ydGVkIGFzIGEgZnJhbWV3b3JrLWVycm9yLiBUcmFuc2llbnQgb3V0YWdlcyB0aGF0IHJlY292ZXIgd2l0aGluIHRoaXMgd2luZG93IChlLmcuIGEgZGVwbG95IHJlc3RhcnRpbmcgdGhlIGJyb2tlcikgYXJlIG5vdCByZXBvcnRlZC4gRGVmYXVsdHMgdG8gMzAwMDAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIdHRwQ29tcHJlc3Npb25Db25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtlbmFibGVkXSAtIFdoZXRoZXIgYnVmZmVyZWQgcmVzcG9uc2UgY29tcHJlc3Npb24gaXMgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZTsgc2V0IGZhbHNlIHRvIGRpc2FibGUgZ2xvYmFsbHkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RocmVzaG9sZF0gLSBNaW5pbXVtIGJ1ZmZlcmVkIGJvZHkgc2l6ZSBpbiBieXRlcyBiZWZvcmUgY29tcHJlc3Npb24gaXMgYXBwbGllZC4gRGVmYXVsdHMgdG8gMTAyNC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYnJvdGxpUXVhbGl0eV0gLSBCcm90bGkgZW5jb2RlciBxdWFsaXR5ICgwLTExKS4gRGVmYXVsdHMgdG8gNC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZ3ppcExldmVsXSAtIEd6aXAgY29tcHJlc3Npb24gbGV2ZWwgKDAtOSkuIERlZmF1bHRzIHRvIDYuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3JtYWxpemVkSHR0cENvbXByZXNzaW9uQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBlbmFibGVkIC0gV2hldGhlciBidWZmZXJlZCBIVFRQIHJlc3BvbnNlIGNvbXByZXNzaW9uIGlzIGVuYWJsZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGhyZXNob2xkIC0gTWluaW11bSBidWZmZXJlZCBib2R5IHNpemUgaW4gYnl0ZXMgYmVmb3JlIGNvbXByZXNzaW9uIGlzIGFwcGxpZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYnJvdGxpUXVhbGl0eSAtIEJyb3RsaSBlbmNvZGVyIHF1YWxpdHkgKDAtMTEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGd6aXBMZXZlbCAtIEd6aXAgY29tcHJlc3Npb24gbGV2ZWwgKDAtOSkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIdHRwU2VydmVyQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFuIHwgSHR0cENvbXByZXNzaW9uQ29uZmlndXJhdGlvbn0gW2NvbXByZXNzaW9uXSAtIEJ1ZmZlcmVkIHJlc3BvbnNlIGNvbXByZXNzaW9uLiBFbmFibGVkIHdpdGggZG9jdW1lbnRlZCBkZWZhdWx0cyB3aGVuIGFic2VudDsgZmFsc2Ugb3Ige2VuYWJsZWQ6IGZhbHNlfSBkaXNhYmxlcyBpdCBnbG9iYWxseS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBIb3N0bmFtZSB0byBiaW5kIHRoZSBIVFRQIHNlcnZlciB0by5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2luUHJvY2Vzc10gLSBSdW4gSFRUUCBoYW5kbGVycyBpbiB0aGUgbWFpbiB0aHJlYWQgaW5zdGVhZCBvZiB3b3JrZXIgdGhyZWFkcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4V29ya2Vyc10gLSBCYWNrd2FyZC1jb21wYXRpYmxlIGFsaWFzIGZvciB3b3JrZXJzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgdG8gYmluZCB0aGUgSFRUUCBzZXJ2ZXIgdG8uXG4gKiBAcHJvcGVydHkge3ttYXhQZW5kaW5nQnl0ZXM/OiBudW1iZXIsIG1heFBlbmRpbmdNZXNzYWdlcz86IG51bWJlcn19IFt3ZWJzb2NrZXRJbmJvdW5kUXVldWVdIC0gUGVyLXNlc3Npb24gcmV0YWluZWQgaW5ib3VuZCBXZWJTb2NrZXQgbWVzc2FnZSBsaW1pdHMuXG4gKiBAcHJvcGVydHkge3ttYXhQZW5kaW5nQnl0ZXM/OiBudW1iZXIsIG1heFBlbmRpbmdGcmFtZXM/OiBudW1iZXJ9fSBbd2Vic29ja2V0T3V0Ym91bmRRdWV1ZV0gLSBQZXItY2xpZW50IHJldGFpbmVkIG91dGJvdW5kIFdlYlNvY2tldCBmcmFtZSBsaW1pdHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3dvcmtlcnNdIC0gV29ya2VyIGhhbmRsZXJzIHRvIHN0YXJ0IGZvciB0aGUgSFRUUCBzZXJ2ZXIuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRXZlcnlPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gW2ZpcnN0SW5dIC0gRGVsYXkgYmVmb3JlIHRoZSBmaXJzdCBlbnF1ZXVlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbYXJnc10gLSBBcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBqb2Igd2hlbiBlbnF1ZXVlZC5cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4vYmFja2dyb3VuZC1qb2JzL2pvYi5qc1wiKS5kZWZhdWx0fSBjbGFzcyAtIEpvYiBjbGFzcyB0byBlbnF1ZXVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjcm9uXSAtIENyb250YWIgZXhwcmVzc2lvbiAoNS1maWVsZCBQT1NJWCwgcGx1cyBgQGhvdXJseWAvYEBkYWlseWAvYEB3ZWVrbHlgL2BAbW9udGhseWAvYEB5ZWFybHlgL2BAbWlkbmlnaHRgKS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGV2ZXJ5YC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0aGUgc2NoZWR1bGUgaXMgZW5hYmxlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nIHwgW251bWJlciB8IHN0cmluZywgU2NoZWR1bGVkQmFja2dyb3VuZEpvYkV2ZXJ5T3B0aW9uc119IFtldmVyeV0gLSBSZXBlYXQgaW50ZXJ2YWwuIEVpdGhlciBgZXZlcnlgIG9yIGBjcm9uYCBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9iYWNrZ3JvdW5kLWpvYnMvdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9IFtvcHRpb25zXSAtIEpvYiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFZlbG9jaW91c1BhcmFtc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZT59IENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyUGF5bG9hZFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRXJyb3JSZXF1ZXN0RGV0YWlsc1xuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gW2JvZHldIC0gU2FuaXRpemVkIHBhcnNlZCByZXF1ZXN0IGJvZHksIHdoZW4gYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGh0dHBNZXRob2QgLSBSZXF1ZXN0IEhUVFAgbWV0aG9kLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBSZXF1ZXN0IHBhdGguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbGllbnRFcnJvclBheWxvYWRDb250ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29udHJvbGxlciAtIENvbnRyb2xsZXIgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYWN0aW9uXSAtIENvbnRyb2xsZXIgYWN0aW9uIG9yIGVuZHBvaW50IGxhYmVsLlxuICogQHByb3BlcnR5IHtcImluZGV4XCIgfCBcImZpbmRcIiB8IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImF0dGFjaFwiIHwgXCJhdHRhY2htZW50TGlzdFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiB8IFwiY3VzdG9tLWNvbW1hbmRcIn0gW2NvbW1hbmRUeXBlXSAtIEZyb250ZW5kLW1vZGVsIGNvbW1hbmQgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29ycmVsYXRpb25JZF0gLSBTZXJ2ZXItZ2VuZXJhdGVkIGlkZW50aWZpZXIgc2hhcmVkIGJ5IGFuIHVuZXhwZWN0ZWQgY2xpZW50IGVycm9yIGFuZCBmcmFtZXdvcmsgcmVwb3J0cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2V4cGVjdGVkRXJyb3JdIC0gV2hldGhlciB0aGUgZXJyb3IgaXMgYW4gZXhwZWN0ZWQgdXNlci1mbG93IGZhaWx1cmUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtmcm9udGVuZE1vZGVsRW5kcG9pbnRdIC0gV2hldGhlciB0aGUgZXJyb3IgY2FtZSBmcm9tIHRoZSBmcm9udGVuZC1tb2RlbCBlbmRwb2ludC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxdIC0gRnJvbnRlbmQtbW9kZWwgbmFtZSBmcm9tIHRoZSBmYWlsZWQgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVxdWVzdElkXSAtIFNoYXJlZCBmcm9udGVuZC1tb2RlbCByZXF1ZXN0IGlkLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhhcmdzOiB7XG4gKiAgIGNvbnRleHQ6IENsaWVudEVycm9yUGF5bG9hZENvbnRleHQsXG4gKiAgIGVycm9yOiBFcnJvcixcbiAqICAgcmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCxcbiAqICAgcmVxdWVzdERldGFpbHM6IEVycm9yUmVxdWVzdERldGFpbHMgfCBudWxsXG4gKiB9KSA9PiBQcm9taXNlPENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyUGF5bG9hZCB8IHZvaWQ+IHwgQ2xpZW50RXJyb3JQYXlsb2FkUmVwb3J0ZXJQYXlsb2FkIHwgdm9pZH0gQ2xpZW50RXJyb3JQYXlsb2FkUmVwb3J0ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7Y29uZmlndXJhdGlvbj86IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBjdXJyZW50RGV2aWNlPzogdW5rbm93biwgY3VycmVudFVzZXI/OiB1bmtub3duLCBtb2RlbFJlZ2lzdHJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB7bW9kZWw6IChuYW1lOiBzdHJpbmcpID0+IHVua25vd259LCBub3c/OiBEYXRlIHwgKCgpID0+IERhdGUpLCBvZmZsaW5lR3JhbnQ/OiB1bmtub3duLCBwYXJhbXM/OiBWZWxvY2lvdXNQYXJhbXMsIHJlcXVlc3Q/OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0LCByZXNvdXJjZVJ1bnRpbWU/OiBcImJhY2tlbmRcIiB8IFwiZnJvbnRlbmRcIiB8IFwib2ZmbGluZVwifX0gVmVsb2Npb3VzTG9vc2VPYmplY3RcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtuZXcgKGFyZ3M6IHthdHRhY2htZW50TmFtZT86IHN0cmluZywgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIG1vZGVsQ2xhc3M/OiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbmFtZT86IHN0cmluZywgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0pID0+IG9iamVjdH0gQXR0YWNobWVudERyaXZlckNvbnN0cnVjdG9yXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb24+fSBqb2JzIC0gU2NoZWR1bGVkIGpvYnMga2V5ZWQgYnkgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgPT4gU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uIHwgUHJvbWlzZTxTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb24+fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0xvYWRlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEF0dGFjaG1lbnREcml2ZXJDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIG5hbWU6IHN0cmluZywgb3B0aW9uczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSkgPT4gUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbY3JlYXRlXSAtIE9wdGlvbmFsIGZhY3RvcnkgZm9yIGEgY3VzdG9tIGF0dGFjaG1lbnQgZHJpdmVyIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtBdHRhY2htZW50RHJpdmVyQ29uc3RydWN0b3J9IFtkcml2ZXJDbGFzc10gLSBPcHRpb25hbCBjdXN0b20gYXR0YWNobWVudCBkcml2ZXIgY2xhc3MuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW2luc3RhbmNlXSAtIE9wdGlvbmFsIGN1c3RvbSBhdHRhY2htZW50IGRyaXZlciBpbnN0YW5jZS5cbiAqL1xuXG4vKipcbiAqIENsaWVudC1zYWZlIHN5bmNocm9uaXphdGlvbiBwb2xpY3kgZGVjbGFyZWQgd2l0aCBhIG1vZGVsIGF0dGFjaG1lbnQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBdHRhY2htZW50U3luY0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJlYWdlclwiIHwgXCJvbi1kZW1hbmRcIn0gZmV0Y2ggLSBXaGV0aGVyIGNsaWVudHMgcHJlZmV0Y2ggdGhlIGF0dGFjaG1lbnQgb3Igd2FpdCB1bnRpbCBpdCBpcyByZXF1ZXN0ZWQuXG4gKiBAcHJvcGVydHkge1wib3B0aW9uYWxcIiB8IFwicmVxdWlyZWRcIn0gb2ZmbGluZVJlcXVpcmVtZW50IC0gV2hldGhlciBhbiBvZmZsaW5lLXJlYWR5IHNjb3BlIHJlcXVpcmVzIHRoZSBhdHRhY2htZW50IGJ5dGVzLlxuICogQHByb3BlcnR5IHtcImR1cmFibGVcIiB8IFwiZXZpY3RhYmxlXCJ9IHJldGVudGlvbiAtIFdoZXRoZXIgY2xpZW50cyBtYXkgZXZpY3QgdGhlIGF0dGFjaG1lbnQgdW5kZXIgc3RvcmFnZSBwcmVzc3VyZS5cbiAqL1xuXG4vKipcbiAqIE1vZGVsIGF0dGFjaG1lbnQgZGVjbGFyYXRpb24gcmV0YWluZWQgYnkgdGhlIHJlY29yZCBjbGFzcy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJlY29yZEF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IEF0dGFjaG1lbnREcml2ZXJDb25zdHJ1Y3RvciB8IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW2RyaXZlcl0gLSBBdHRhY2htZW50IGRyaXZlciBuYW1lLCBjbGFzcywgb3IgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge0F0dGFjaG1lbnRTeW5jQ29uZmlndXJhdGlvbn0gW3N5bmNdIC0gQ2xpZW50LXNhZmUgc3luY2hyb25pemVkIGFzc2V0IHBvbGljeS5cbiAqIEBwcm9wZXJ0eSB7XCJoYXNPbmVcIiB8IFwiaGFzTWFueVwifSB0eXBlIC0gQXR0YWNobWVudCBjYXJkaW5hbGl0eS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEF0dGFjaG1lbnRzQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZWZhdWx0RHJpdmVyXSAtIERlZmF1bHQgYXR0YWNobWVudCBzdG9yYWdlIGRyaXZlciBuYW1lLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBBdHRhY2htZW50RHJpdmVyQ29uZmlndXJhdGlvbiAmIFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj59IFtkcml2ZXJzXSAtIE5hbWVkIGF0dGFjaG1lbnQgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbYWxsb3dQYXRoSW5wdXRdIC0gV2hldGhlciBge3BhdGg6IC4uLn1gIGF0dGFjaG1lbnQgaW5wdXQgaXMgYWxsb3dlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthbGxvd2VkUGF0aFByZWZpeGVzXSAtIE9wdGlvbmFsIGFsbG93bGlzdCBvZiBkaXJlY3RvcmllcyBmb3IgYHtwYXRoOiAuLi59YCBpbnB1dC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IE1haWxlckJhY2tlbmRcbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtwYXlsb2FkOiBpbXBvcnQoXCIuL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4gfCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gZGVsaXZlciAtIERlbGl2ZXIgYSBtYWlsZXIgcGF5bG9hZC5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlJZGVtcG90ZW5jeUNhcGFiaWxpdHl9IFtkZWxpdmVyeUlkZW1wb3RlbmN5Q2FwYWJpbGl0eV0gLSBFeHBsaWNpdCBwcm92aWRlci1iYWNrZWQgZHVwbGljYXRlLXN1cHByZXNzaW9uIGNhcGFiaWxpdHkuIEdlbmVyaWMgU01UUCBvbWl0cyB0aGlzIGFuZCByZW1haW5zIGF0LWxlYXN0LW9uY2UuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7cGF5bG9hZDogaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSkgPT4gaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSBbcHJlcGFyZURlbGl2ZXJ5T3BlcmF0aW9uUGF5bG9hZF0gLSBSZXNvbHZlcyBwcm92aWRlciBkZWZhdWx0cyBpbnRvIHRoZSBpbW11dGFibGUgcGF5bG9hZCBiZWZvcmUgcmVxdWlyZWQtb3BlcmF0aW9uIGhhc2hpbmcgYW5kIGVucXVldWUuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7ZGVsaXZlcnlPcGVyYXRpb246IGltcG9ydChcIi4vbWFpbGVyLmpzXCIpLk1haWxlckRlbGl2ZXJ5T3BlcmF0aW9uUmVxdWVzdCB8IGltcG9ydChcIi4vbWFpbGVyLmpzXCIpLk1haWxlckRlbGl2ZXJ5T3BlcmF0aW9uLCBwYXlsb2FkOiBpbXBvcnQoXCIuL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9KSA9PiB2b2lkfSBbdmFsaWRhdGVEZWxpdmVyeU9wZXJhdGlvbl0gLSBQcm92aWRlci1zcGVjaWZpYyBvcGVyYXRpb24gYW5kIHBheWxvYWQgdmFsaWRhdGlvbiBwZXJmb3JtZWQgYmVmb3JlIGVucXVldWUgYW5kIGV2ZXJ5IG5ldHdvcmsgYXR0ZW1wdC5cbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gTG9jYWxlRmFsbGJhY2tzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlbGF0aW9uc2hpcENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJiZWxvbmdzVG9cIiB8IFwiaGFzT25lXCIgfCBcImhhc01hbnlcIn0gdHlwZSAtIFJlbGF0aW9uc2hpcCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbF0gLSBUYXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXSAtIEFsaWFzIG9mIHRhcmdldCBtb2RlbCBjbGFzcyBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbENsYXNzTmFtZV0gLSBFeHBsaWNpdCB0YXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3R5cGVdIC0gQ29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29sdW1uVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3FsVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YVR5cGVdIC0gQWxpYXMgZm9yIGNvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2pzRG9jVHlwZV0gLSBFeGFjdCBnZW5lcmF0ZWQgSlNEb2MgdHlwZSBmb3Igbm9uLWNvbHVtbiBhdHRyaWJ1dGVzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEF0dHJpYnV0ZSBuYW1lIHdoZW4gY29uZmlndXJlZCBhcyBhbiBhcnJheSBlbnRyeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW251bGxdIC0gV2hldGhlciB2YWx1ZSBjYW4gYmUgbnVsbC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NlbGVjdGVkQnlEZWZhdWx0XSAtIFdoZXRoZXIgaW5jbHVkZWQgaW4gZGVmYXVsdCBzZXJpYWxpemF0aW9uLiBEZWZhdWx0cyB0byB0cnVlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbEF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge0F0dGFjaG1lbnRTeW5jQ29uZmlndXJhdGlvbn0gW3N5bmNdIC0gQ2xpZW50LXNpZGUgc3luY2hyb25pemVkIGFzc2V0IHBvbGljeS5cbiAqIEBwcm9wZXJ0eSB7XCJoYXNPbmVcIiB8IFwiaGFzTWFueVwifSB0eXBlIC0gQXR0YWNobWVudCBjYXJkaW5hbGl0eS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nIHwgRnJvbnRlbmRNb2RlbEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24+IHwgUmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24gfCBpbXBvcnQoXCIuL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS1jb2x1bW4uanNcIikuZGVmYXVsdCB8IGJvb2xlYW4+fSBhdHRyaWJ1dGVzIC0gQXR0cmlidXRlcyB0byBleHBvc2Ugb24gdGhlIGZyb250ZW5kIG1vZGVsLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2FiaWxpdGllc10gLSBBZGRpdGlvbmFsIGNhbWVsQ2FzZSBhYmlsaXR5IGFjdGlvbiBuYW1lcyB0byBleHBvc2UgZm9yIHBlci1yZWNvcmQgYHJlY29yZC5jYW4oYWN0aW9uKWAgcmVhZHMuIEJhc2UgQ1JVRCBhY3Rpb25zIChgcmVhZGAsIGBjcmVhdGVgLCBgdXBkYXRlYCwgYGRlc3Ryb3lgKSBhcmUgYWx3YXlzIGluY2x1ZGVkIGFuZCBtdXN0IG5vdCBiZSBsaXN0ZWQgaGVyZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbEF0dGFjaG1lbnRDb25maWd1cmF0aW9uPn0gW2F0dGFjaG1lbnRzXSAtIEF0dGFjaG1lbnQgaGVscGVycyBrZXllZCBieSBhdHRhY2htZW50IG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbY29tbWFuZHNdIC0gTGVnYWN5IGJ1aWx0LWluIGNvbW1hbmQgbmFtZXMgKGBpbmRleGAsIGBmaW5kYCwgYGNyZWF0ZWAsIGB1cGRhdGVgLCBgZGVzdHJveWAsIGBhdHRhY2hgLCBgZG93bmxvYWRgLCBgdXJsYCkuXG4gKiBAcHJvcGVydHkge0FycmF5PEZyb250ZW5kTW9kZWxSZXNvdXJjZUN1c3RvbUNvbW1hbmQ+fSBbY29sbGVjdGlvbkNvbW1hbmRzXSAtIEN1c3RvbSBjb2xsZWN0aW9uIGNvbW1hbmRzLiBFYWNoIGVudHJ5IGlzIGEgY2FtZWxDYXNlIG1ldGhvZCBuYW1lLCBvciBhIGB7bmFtZSwgYXJncz8sIHJldHVyblR5cGU/fWAgb2JqZWN0IGRlY2xhcmluZyB0eXBlZCBhcmd1bWVudHMgYW5kL29yIGEgcmVzcG9uc2UgdHlwZS4gVGhlIHJ1bnRpbWUgZGVyaXZlcyB0aGUga2ViYWItY2FzZSBjb21tYW5kIHNsdWcgZnJvbSB0aGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RnJvbnRlbmRNb2RlbFJlc291cmNlQ3VzdG9tQ29tbWFuZD59IFttZW1iZXJDb21tYW5kc10gLSBDdXN0b20gbWVtYmVyIGNvbW1hbmRzLiBFYWNoIGVudHJ5IGlzIGEgY2FtZWxDYXNlIG1ldGhvZCBuYW1lLCBvciBhIGB7bmFtZSwgYXJncz8sIHJldHVyblR5cGU/fWAgb2JqZWN0IGRlY2xhcmluZyB0eXBlZCBhcmd1bWVudHMgYW5kL29yIGEgcmVzcG9uc2UgdHlwZS4gVGhlIHJ1bnRpbWUgZGVyaXZlcyB0aGUga2ViYWItY2FzZSBjb21tYW5kIHNsdWcgZnJvbSB0aGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXSAtIEJ1aWx0LWluIGNvbGxlY3Rpb24gY29tbWFuZCBuYW1lcyAoYGluZGV4YCwgYGNyZWF0ZWApLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2J1aWx0SW5NZW1iZXJDb21tYW5kc10gLSBCdWlsdC1pbiBtZW1iZXIgY29tbWFuZCBuYW1lcyAoYGZpbmRgLCBgdXBkYXRlYCwgYGRlc3Ryb3lgLCBgYXR0YWNoYCwgYGRvd25sb2FkYCwgYHVybGApLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbE5hbWVdIC0gRnJvbnRlbmQgbW9kZWwgbmFtZSBvdmVycmlkZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtyZWxhdGlvbnNoaXBzXSAtIFJlbGF0aW9uc2hpcCBuYW1lcyB0byBleHBvc2UgaW4gZnJvbnRlbmQgbW9kZWxzLiBUeXBlIGFuZCB0YXJnZXQgbW9kZWwgYXJlIGluZmVycmVkIGZyb20gdGhlIGJhY2tlbmQgbW9kZWwncyByZWdpc3RlcmVkIHJlbGF0aW9uc2hpcHMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHN0cmluZ1tdfSBbcHJpbWFyeUtleV0gLSBQcmltYXJ5IGtleSBhdHRyaWJ1dGUgbmFtZSBvciBvcmRlcmVkIGNvbXBvc2l0ZSBwcmltYXJ5LWtleSBhdHRyaWJ1dGUgbmFtZXMuXG4gKiBAcHJvcGVydHkge0Zyb250ZW5kTW9kZWxSZXNvdXJjZVNlcnZlckNvbmZpZ3VyYXRpb259IFtzZXJ2ZXJdIC0gT3B0aW9uYWwgbGVnYWN5IGJhY2tlbmQgYmVoYXZpb3Igb3ZlcnJpZGVzIGZvciBidWlsdC1pbiBmcm9udGVuZCBhY3Rpb25zLlxuICogQHByb3BlcnR5IHtGcm9udGVuZE1vZGVsUmVzb3VyY2VTeW5jQ29uZmlndXJhdGlvbiB8IGJvb2xlYW59IFtzeW5jXSAtIE9wdGlvbmFsIHNhZmUgbG9jYWwvb2ZmbGluZSBzeW5jIHBvbGljeSBtZXRhZGF0YS4gYHBvbGljeWAgcGFydGljaXBhdGVzIGluIHRoZSBoYXNoIGJ1dCBpcyBub3QgZXhwb3NlZCB0byBnZW5lcmF0ZWQgZnJvbnRlbmQgY29uZmlnL21hbmlmZXN0LlxuICovXG5cbi8qKlxuICogT2JqZWN0IGZvcm0gb2YgYSBjdXN0b20gY29tbWFuZCBlbnRyeSwgZGVjbGFyaW5nIGl0cyB0eXBlZCBhcmd1bWVudHMgYW5kL29yXG4gKiByZXNwb25zZSB0eXBlIGFsb25nc2lkZSB0aGUgY29tbWFuZCBuYW1lLlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlc291cmNlQ3VzdG9tQ29tbWFuZE9iamVjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBjYW1lbENhc2UgY29tbWFuZCBtZXRob2QgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8e25hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nfT59IFthcmdzXSAtIFR5cGVkIGNvbW1hbmQgYXJndW1lbnRzOyBlYWNoIGdlbmVyYXRlcyBhIG5hbWVkLCB0eXBlZCBtZXRob2QgcGFyYW1ldGVyIG1hcHBlZCBwb3NpdGlvbmFsbHkgaW50byB0aGUgY29tbWFuZCBwYXlsb2FkLiBgdHlwZWAgaXMgYSBKU0RvYyB0eXBlIHN0cmluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmV0dXJuVHlwZV0gLSBKU0RvYyB0eXBlIGZvciB0aGUgY29tbWFuZCByZXNwb25zZS4gV2hlbiBzZXQsIHRoZSBnZW5lcmF0ZWQgbWV0aG9kIGlzIHR5cGVkIGBQcm9taXNlPHJldHVyblR5cGU+YCBpbnN0ZWFkIG9mIGBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj5gLiBFbWl0dGVkIHZlcmJhdGltIGludG8gdGhlIGdlbmVyYXRlZCBmcm9udGVuZCBtb2RlbCwgc28gaXQgbXVzdCByZXNvbHZlIHRoZXJlLlxuICovXG5cbi8qKlxuICogQSBjdXN0b20gY29tbWFuZCBlbnRyeTogYSBwbGFpbiBjYW1lbENhc2UgbWV0aG9kIG5hbWUsIG9yIGFuIG9iamVjdCBkZWNsYXJpbmdcbiAqIHR5cGVkIGFyZ3MgYW5kL29yIGEgcmVzcG9uc2UgdHlwZS5cbiAqIEB0eXBlZGVmIHtzdHJpbmcgfCBGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kT2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kXG4gKi9cblxuLyoqXG4gKiBKU09OIHZhbHVlIGFjY2VwdGVkIGJ5IHN5bmMgcG9saWN5IG1ldGFkYXRhL2hhc2ggaW5wdXRzLlxuICogQHR5cGVkZWYge251bGwgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5rbm93bltdIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IEZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlXG4gKi9cblxuLyoqXG4gKiBGcm9udGVuZC1tb2RlbCBsb2NhbC9vZmZsaW5lIHN5bmMgcG9saWN5IGNvbmZpZy4gYG1ldGFkYXRhYCBpcyBleHBvc2VkIHRvXG4gKiBmcm9udGVuZHMgYW5kIHBlZXJzOyBgcG9saWN5YCBpcyBoYXNoZWQgYnV0IGludGVudGlvbmFsbHkgb21pdHRlZCBmcm9tXG4gKiBmcm9udGVuZC1zYWZlIG1hbmlmZXN0cy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZVN5bmNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1wib3B0aW1pc3RpY1ZlcnNpb25cIiB8IFwic2VydmVyV2luc1wiIHwgXCJsYXN0V3JpdGVyV2luc1wiIHwgXCJmaWVsZFRocmVlV2F5XCIgfCBcImFwcGVuZE9ubHlcIn0gW2NvbmZsaWN0U3RyYXRlZ3ldIC0gU3RyYXRlZ3kgdXNlZCB3aGVuIHJlcGxheSBkZXRlY3RzIHNlcnZlci9jbGllbnQgZGl2ZXJnZW5jZS4gRGVmYXVsdHMgdG8gYG9wdGltaXN0aWNWZXJzaW9uYC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0aGUgcmVzb3VyY2UgaXMgc3luYy1lbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIHdoZW4gYHN5bmNgIGlzIGNvbmZpZ3VyZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbb3BlcmF0aW9uc10gLSBTeW5jIG9wZXJhdGlvbiBuYW1lcyBzdWNoIGFzIGBpbmRleGAsIGBmaW5kYCwgYGNyZWF0ZWAsIGB1cGRhdGVgLCBjdXN0b20gZG9tYWluIGNvbW1hbmRzLCBldGMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW3BvbGljeVZlcnNpb25dIC0gQXBwLWNvbnRyb2xsZWQgcG9saWN5IHZlcnNpb24gdXNlZCBhcyBhIHN0YWJsZSBjaGFuZ2Ugc2lnbmFsLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFttZXRhZGF0YV0gLSBTYWZlIGZyb250ZW5kLXZpc2libGUgbWV0YWRhdGEuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gW3BvbGljeV0gLSBEZXRlcm1pbmlzdGljIG5vbi1zZWNyZXQgcG9saWN5IGlucHV0cyBpbmNsdWRlZCBpbiB0aGUgcG9saWN5IGhhc2ggb25seS5cbiAqL1xuXG4vKipcbiAqIFZlbG9jaW91cyBzeW5jIEFQSSBlbmRwb2ludCBjb25maWd1cmF0aW9uLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0FwaUNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW91bnRQYXRoXSAtIE1vdW50IHBhdGggZm9yIHRoZSBzeW5jIGVuZHBvaW50cy4gRGVmYXVsdHMgdG8gXCIvdmVsb2Npb3VzL3N5bmNcIi5cbiAqIEBwcm9wZXJ0eSB7RnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlfSByZXNvdXJjZUNsYXNzIC0gQXBwIHN5bmMgcmVzb3VyY2UgY2xhc3Mgc2VydmVkIGJ5IHRoZSBhdXRvLW1vdW50ZWQgc3luYyBlbmRwb2ludHMuXG4gKi9cblxuLyoqXG4gKiBDbGllbnQtc2lkZSBzeW5jIHRyYW5zcG9ydCBvd25pbmcgSFRUUCBQT1NUcyB0byB0aGUgZnJhbWV3b3JrIHN5bmMgZW5kcG9pbnRzLFxuICogbWF0Y2hpbmcgdGhlIGZyb250ZW5kLW1vZGVsIHdlYnNvY2tldCBjbGllbnQgcG9zdCBjb250cmFjdC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNDbGllbnRUcmFuc3BvcnRcbiAqIEBwcm9wZXJ0eSB7KHBhdGg6IHN0cmluZywgYm9keT86IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBvcHRpb25zPzoge2hlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSkgPT4gUHJvbWlzZTx7anNvbjogKCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59Pn0gcG9zdCAtIFBvc3RzIG9uZSByZXF1ZXN0IGFuZCByZXNvbHZlcyBhIHJlc3BvbnNlIHdpdGggYSBqc29uIGFjY2Vzc29yLlxuICovXG5cbi8qKlxuICogV2Vic29ja2V0IGNsaWVudCBjb250cmFjdCByZXF1aXJlZCBmcm9tIGBzeW5jLmNsaWVudC5yZWFsdGltZS5jcmVhdGVDbGllbnRgLFxuICogbWF0Y2hpbmcgYFZlbG9jaW91c1dlYnNvY2tldENsaWVudGAgLyBzbmFwcmVxJ3Mgd2Vic29ja2V0IGNsaWVudC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNSZWFsdGltZVdlYnNvY2tldENsaWVudFxuICogQHByb3BlcnR5IHsoKSA9PiBQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gY29ubmVjdCAtIENvbm5lY3RzIHRoZSB3ZWJzb2NrZXQuXG4gKiBAcHJvcGVydHkgeyhjaGFubmVsVHlwZTogc3RyaW5nLCBvcHRpb25zPzoge3BhcmFtcz86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Piwgb25NZXNzYWdlPzogKGJvZHk6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+KSA9PiB2b2lkLCBvblJlc3VtZT86ICgpID0+IHZvaWQsIG9uQ2xvc2U/OiAocmVhc29uOiBzdHJpbmcpID0+IHZvaWR9KSA9PiBWZWxvY2lvdXNTeW5jUmVhbHRpbWVTdWJzY3JpcHRpb259IHN1YnNjcmliZUNoYW5uZWwgLSBPcGVucyBvbmUgY2hhbm5lbCBzdWJzY3JpcHRpb24uXG4gKiBAcHJvcGVydHkgeygpID0+IFByb21pc2U8dm9pZD59IGRpc2Nvbm5lY3RBbmRTdG9wUmVjb25uZWN0IC0gQ2xvc2VzIHRoZSBzb2NrZXQgYW5kIHN0b3BzIGF1dG8tcmVjb25uZWN0LlxuICovXG5cbi8qKlxuICogQ2hhbm5lbCBzdWJzY3JpcHRpb24gaGFuZGxlIHJldHVybmVkIGJ5IGBzdWJzY3JpYmVDaGFubmVsYC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNSZWFsdGltZVN1YnNjcmlwdGlvblxuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSBjbG9zZSAtIENsb3NlcyB0aGUgc3Vic2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHsoKSA9PiBib29sZWFufSBpc1JlYWR5IC0gV2hldGhlciB0aGUgc3Vic2NyaXB0aW9uIGlzIGFja25vd2xlZGdlZCBhbmQgcmVhZHkuXG4gKiBAcHJvcGVydHkgeyhwYXJhbXM/OiB7dGltZW91dE1zPzogbnVtYmVyfSkgPT4gUHJvbWlzZTx2b2lkPn0gd2FpdEZvclJlYWR5IC0gUmVzb2x2ZXMgb25jZSB0aGUgc2VydmVyIGFja25vd2xlZGdlcyB0aGUgc3Vic2NyaXB0aW9uLlxuICovXG5cbi8qKlxuICogT25lIHJlYWx0aW1lIGNoYW5uZWwgc3Vic2NyaXB0aW9uIGRlc2NyaXB0b3IuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jUmVhbHRpbWVDaGFubmVsRGVzY3JpcHRvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYW5uZWwgLSBTZXJ2ZXIgY2hhbm5lbCBuYW1lIHRvIHN1YnNjcmliZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbcGFyYW1zXSAtIFN1YnNjcmliZSBwYXJhbXMgKHJ1bnRpbWUgc2NvcGUgdmFsdWVzKS4gVGhlIGZyYW1ld29yayBpbmplY3RzIGBhdXRoZW50aWNhdGlvblRva2VuYCBhdXRvbWF0aWNhbGx5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZXNvdXJjZVR5cGVdIC0gRGVmYXVsdCByZXNvdXJjZS9tb2RlbCBuYW1lIGZvciBwdXNoZWQgY2hhbmdlcyB0aGF0IGRvIG5vdCBjYXJyeSB0aGVpciBvd24gcmVzb3VyY2VUeXBlLlxuICovXG5cbi8qKlxuICogUmVhbHRpbWUgcHVzaCBjb25maWd1cmF0aW9uIGZvciB0aGUgc3luYyBjbGllbnQuIE9ubHkgdGhlIGdlbnVpbmVseVxuICogYXBwLW93bmVkIGNhbGxiYWNrIGxpdmVzIGhlcmU6IGhvdyB0byBidWlsZCB0aGUgd2Vic29ja2V0IGNsaWVudC5cbiAqIEV2ZXJ5dGhpbmcgZWxzZSAtIGRlcml2aW5nIHRoZSBmcmFtZXdvcmsgc3luYyBjaGFubmVsIHN1YnNjcmlwdGlvbnMgZnJvbVxuICogdGhlIGRlY2xhcmVkIHB1bGwgc2NvcGVzLCBzdWJzY3JpYmluZywgYXBwbHlpbmcgcHVzaGVzIHRocm91Z2ggdGhlIGRlcml2ZWRcbiAqIHJlc291cmNlIGFwcGxpZXIsIGVjaG8gc3VwcHJlc3Npb24sIGFuZCBwdWxsLW9uLXJlY29ubmVjdCAtIGlzIGRlcml2ZWQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jQ2xpZW50UmVhbHRpbWVDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkgeygpID0+IFZlbG9jaW91c1N5bmNSZWFsdGltZVdlYnNvY2tldENsaWVudCB8IFByb21pc2U8VmVsb2Npb3VzU3luY1JlYWx0aW1lV2Vic29ja2V0Q2xpZW50Pn0gY3JlYXRlQ2xpZW50IC0gQnVpbGRzIHRoZSAodW5jb25uZWN0ZWQpIHdlYnNvY2tldCBjbGllbnQ7IHRoZSBmcmFtZXdvcmsgb3ducyBjb25uZWN0L2Rpc2Nvbm5lY3QuXG4gKiBAcHJvcGVydHkgeyhjb250ZXh0OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPikgPT4gQXJyYXk8VmVsb2Npb3VzU3luY1JlYWx0aW1lQ2hhbm5lbERlc2NyaXB0b3I+IHwgUHJvbWlzZTxBcnJheTxWZWxvY2lvdXNTeW5jUmVhbHRpbWVDaGFubmVsRGVzY3JpcHRvcj4+fSBbY2hhbm5lbHNdIC0gRGVwcmVjYXRlZCBsZWdhY3kgZXNjYXBlIGhhdGNoOiByZXNvbHZlcyBleHRyYSBhcHAtY2hhbm5lbCBkZXNjcmlwdG9ycyBmcm9tIHRoZSBgc3Vic2NyaWJlUmVhbHRpbWUoY29udGV4dClgIGNvbnRleHQuIERlY2xhcmVkIHB1bGwgc2NvcGVzIHN1YnNjcmliZSB0aGUgZnJhbWV3b3JrIHN5bmMgY2hhbm5lbCBhdXRvbWF0aWNhbGx5LlxuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz59IFtsb2NhbE9yaWdpbl0gLSBSZXNvbHZlcyB0aGlzIGRldmljZSdzIGVjaG8gb3JpZ2luOyBwdXNoZWQgbWVzc2FnZXMgd2l0aCBhIG1hdGNoaW5nIGBlY2hvT3JpZ2luYCBhcmUgZHJvcHBlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3B1bGxPblJlY29ubmVjdF0gLSBGaXJlIGEgY29hbGVzY2VkIGBwdWxsKClgIHdoZW4gc3Vic2NyaXB0aW9ucyBiZWNvbWUgcmVhZHkgb3IgcmVzdW1lIGFmdGVyIGEgZHJvcCwgY2xvc2luZyBvZmZsaW5lIGdhcHMuIERlZmF1bHRzIHRvIHRydWUuXG4gKi9cblxuLyoqXG4gKiBDbGllbnQtc2lkZSBzeW5jIGNvbmZpZ3VyYXRpb24gY29uc3VtZWQgYnkgYFN5bmNDbGllbnQuZnJvbUNvbmZpZ3VyYXRpb24oLi4uKWAuXG4gKiBUaGUgZnJhbWV3b3JrIG93bnMgdGhlIGAke21vdW50UGF0aH0vY2hhbmdlc2AgYW5kIGAke21vdW50UGF0aH0vcmVwbGF5YFxuICogUE9TVGVycyBvdmVyIHRoZSBnaXZlbiB0cmFuc3BvcnQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jQ2xpZW50Q29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz59IGF1dGhlbnRpY2F0aW9uVG9rZW4gLSBSZXNvbHZlcyB0aGUgYXV0aCB0b2tlbiBzZW50IHdpdGggc3luYyByZXF1ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYmF0Y2hTaXplXSAtIE1heCBzeW5jcyBwZXIgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj59IFtpc09ubGluZV0gLSBDb25uZWN0aXZpdHkgZ2F0ZSBmb3IgcHVsbHMgYW5kIHJlcGxheXMuIERlZmF1bHRzIHRvIGFsd2F5cyBvbmxpbmUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vdW50UGF0aF0gLSBNb3VudCBwYXRoIHRoZSBzZXJ2ZXIgc2VydmVzIHRoZSBzeW5jIGVuZHBvaW50cyB1bmRlciAobWF0Y2ggdGhlIHNlcnZlcidzIGBzeW5jLmFwaS5tb3VudFBhdGhgKS4gRGVmYXVsdHMgdG8gXCIvdmVsb2Npb3VzL3N5bmNcIjsgbm9ybWFsaXphdGlvbiBzdHJpcHMgdHJhaWxpbmcgc2xhc2hlcyBhbmQgYWx3YXlzIGZpbGxzIGluIHRoZSBkZWZhdWx0LlxuICogQHByb3BlcnR5IHsoZXJyb3I6IEVycm9yKSA9PiB2b2lkfSBbb25FcnJvcl0gLSBSZXBvcnRzIGJhY2tncm91bmQgcmVwbGF5L3B1bGwgZmFpbHVyZXMuIERlZmF1bHRzIHRvIHJldGhyb3dpbmcuXG4gKiBAcHJvcGVydHkge1ZlbG9jaW91c1N5bmNDbGllbnRSZWFsdGltZUNvbmZpZ3VyYXRpb259IFtyZWFsdGltZV0gLSBSZWFsdGltZSBwdXNoIGNvbmZpZ3VyYXRpb24gY29uc3VtZWQgYnkgYHN1YnNjcmliZVJlYWx0aW1lKC4uLilgLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNTeW5jQ2xpZW50VHJhbnNwb3J0fSB0cmFuc3BvcnQgLSBUcmFuc3BvcnQgcG9zdGluZyB0byB0aGUgZnJhbWV3b3JrIHN5bmMgZW5kcG9pbnRzIChlLmcuIHRoZSBmcm9udGVuZC1tb2RlbCB3ZWJzb2NrZXQgY2xpZW50KS5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY1JlYWx0aW1lV2Vic29ja2V0Q2xpZW50fSBbd2Vic29ja2V0Q2xpZW50XSAtIFNoYXJlZCBhcHAtbGlmZXRpbWUgd2Vic29ja2V0IGNsaWVudCAodGhlIGxvdy1sZXZlbCBmb3JtKSB0aGF0IGFsbCBzeW5jIHRyYWZmaWMgcmlkZXMuIFByb3ZpZGUgdGhlIHNhbWUgaW5zdGFuY2UgdGhlIGZyb250ZW5kLW1vZGVsIHRyYW5zcG9ydCB1c2VzIHNvIG9uZSBjb25uZWN0aW9uIGNhcnJpZXMgZXZlcnl0aGluZy4gV2hlbiBzZXQsIHRoZSByZWFsdGltZSBicmlkZ2Ugc3Vic2NyaWJlcyBjaGFubmVscyBvbiBpdCBhbmQgbmV2ZXIgb3ducyBpdHMgbGlmZWN5Y2xlOiB1bnN1YnNjcmliaW5nIGNsb3NlcyBvbmx5IGNoYW5uZWwgc3Vic2NyaXB0aW9ucywgbGVhdmluZyB0aGUgc29ja2V0IGNvbm5lY3RlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpfSBbd2Vic29ja2V0VXJsXSAtIFNoYXJlZCBhcHAtbGlmZXRpbWUgd2Vic29ja2V0IFVSTC4gV2hlbiBzZXQgKGFuZCBubyBgd2Vic29ja2V0Q2xpZW50YCBpcyBnaXZlbiksIHRoZSBmcmFtZXdvcmsgYnVpbGRzIGFuZCBvd25zIG9uZSByZWNvbm5lY3RpbmcgYFZlbG9jaW91c1dlYnNvY2tldENsaWVudGAgZm9yIGFsbCBzeW5jIHRyYWZmaWMsIGNvbm5lY3RlZCBvbiBmaXJzdCB1c2UuXG4gKi9cblxuLyoqXG4gKiBWZWxvY2lvdXMgc3luYyBjb25maWd1cmF0aW9uLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0FwaUNvbmZpZ3VyYXRpb259IFthcGldIC0gQXV0by1tb3VudHMgdGhlIFZlbG9jaW91cyBzeW5jIGNoYW5nZXMvcmVwbGF5IGVuZHBvaW50cyBmb3IgdGhpcyByZXNvdXJjZSBjbGFzcy5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0NsaWVudENvbmZpZ3VyYXRpb259IFtjbGllbnRdIC0gQ2xpZW50LXNpZGUgc3luYyBjb25maWd1cmF0aW9uIGNvbnN1bWVkIGJ5IGBTeW5jQ2xpZW50LmZyb21Db25maWd1cmF0aW9uKC4uLilgLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMvZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNKc29uV2ViS2V5IHwgbnVsbH0gW2RldmljZUNlcnRpZmljYXRlQmFja2VuZFB1YmxpY0tleV0gLSBQdWJsaWMgYmFja2VuZCBrZXkgdXNlZCB0byB2ZXJpZnkgb2ZmbGluZSBkZXZpY2UgY2VydGlmaWNhdGVzIGZvciBzeW5jIHJlcGxheS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbY2hhbmdlRmVlZFJldGVudGlvblNpemVdIC0gTnVtYmVyIG9mIGFjY2VwdGVkIHNlcnZlciBjaGFuZ2VzIHJldGFpbmVkIGJlZm9yZSBjbGllbnRzIG11c3QgcmVmcmVzaCBmcm9tIHNuYXBzaG90LlxuICogQHByb3BlcnR5IHtBcnJheTxpbXBvcnQoXCIuL3N5bmMvb2ZmbGluZS1ncmFudC5qc1wiKS5PZmZsaW5lR3JhbnRTaWduaW5nS2V5Pn0gb2ZmbGluZUdyYW50U2lnbmluZ0tleXMgLSBTaWduaW5nIGtleXMgdXNlZCB0byBpc3N1ZSBhbmQgdmVyaWZ5IG9mZmxpbmUgZ3JhbnRzLiBTZWNyZXRzIG11c3QgbmV2ZXIgYmUgZXhwb3NlZCB0byBjbGllbnRzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtvZmZsaW5lR3JhbnRUdGxNc10gLSBEZWZhdWx0IG9mZmxpbmUgZ3JhbnQgVFRMIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gMjQgaG91cnMuXG4gKi9cblxuLyoqXG4gKiBGcm9udGVuZC1zYWZlIG5vcm1hbGl6ZWQgc3luYyBtZXRhZGF0YS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IE5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VTeW5jQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtcIm9wdGltaXN0aWNWZXJzaW9uXCIgfCBcInNlcnZlcldpbnNcIiB8IFwibGFzdFdyaXRlcldpbnNcIiB8IFwiZmllbGRUaHJlZVdheVwiIHwgXCJhcHBlbmRPbmx5XCJ9IGNvbmZsaWN0U3RyYXRlZ3kgLSBOb3JtYWxpemVkIHJlcGxheSBjb25mbGljdCBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5hYmxlZCAtIFdoZXRoZXIgdGhlIHJlc291cmNlIGlzIHN5bmMtZW5hYmxlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IG9wZXJhdGlvbnMgLSBTb3J0ZWQsIGR1cGxpY2F0ZS1mcmVlIHN5bmMgb3BlcmF0aW9uIG5hbWVzLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBwb2xpY3lWZXJzaW9uIC0gQXBwLWNvbnRyb2xsZWQgcG9saWN5IHZlcnNpb24sIG9yIG51bGwuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcG9saWN5SGFzaCAtIERldGVybWluaXN0aWMgc2hhMjU2IGhhc2ggb2Ygc2FmZSBwb2xpY3kgaW5wdXRzLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFttZXRhZGF0YV0gLSBTYWZlIGZyb250ZW5kLXZpc2libGUgbWV0YWRhdGEuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T21pdDxGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uLCBcImFiaWxpdGllc1wiIHwgXCJidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXCIgfCBcImJ1aWx0SW5NZW1iZXJDb21tYW5kc1wiIHwgXCJjb2xsZWN0aW9uQ29tbWFuZHNcIiB8IFwiY29tbWFuZHNcIiB8IFwibWVtYmVyQ29tbWFuZHNcIiB8IFwic3luY1wiPiAmIHtcbiAqICAgYWJpbGl0aWVzOiBGcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXRpZXNDb25maWd1cmF0aW9uXG4gKiAgIGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAqICAgYnVpbHRJbk1lbWJlckNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiAgIGNvbGxlY3Rpb25Db21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICogICBjb21tYW5kTWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHthcmdzOiBBcnJheTx7bmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmd9PiwgcmV0dXJuVHlwZTogc3RyaW5nIHwgbnVsbH0+XG4gKiAgIG1lbWJlckNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiAgIHN5bmM/OiBOb3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlU3luY0NvbmZpZ3VyYXRpb25cbiAqIH19IE5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uXG4gKi9cblxuLyoqXG4gKiBVbmJvdW5kIHJlc291cmNlIGNsYXNzIHVzZWQgYnkgbW9kZWwtYWdub3N0aWMgcmVnaXN0cmllcy5cbiAqIEB0eXBlZGVmIHtPbWl0PHR5cGVvZiBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuZGVmYXVsdCwgXCJtb2RlbENsYXNzXCI+ICYge21vZGVsQ2xhc3M6ICgpID0+IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBuZXcgKGFyZ3M6IG5ldmVyKTogaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHQ8dHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+fX0gVW5ib3VuZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZVxuICovXG5cbi8qKlxuICogUmVzb3VyY2UgY2xhc3MgYm91bmQgdG8gYSBzcGVjaWZpYyBtb2RlbCBjbGFzcy5cbiAqIEB0ZW1wbGF0ZSB7aW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZU1vZGVsQ2xhc3N9IFRNb2RlbENsYXNzXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBURGF0YWJhc2VNb2RlbENsYXNzXG4gKiBAdHlwZWRlZiB7T21pdDx0eXBlb2YgaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHQsIFwiTW9kZWxDbGFzc1wiIHwgXCJtb2RlbENsYXNzXCI+ICYge01vZGVsQ2xhc3M6IFRNb2RlbENsYXNzIHwgdW5kZWZpbmVkLCBtb2RlbENsYXNzOiAoKSA9PiBUTW9kZWxDbGFzcywgbmV3IChhcmdzOiBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0eUFyZ3M8VE1vZGVsQ2xhc3M+IHwgaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbnRyb2xsZXJBcmdzPFREYXRhYmFzZU1vZGVsQ2xhc3M+KTogaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHQ8VE1vZGVsQ2xhc3MsIFREYXRhYmFzZU1vZGVsQ2xhc3M+fX0gQm91bmRGcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7aW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZU1vZGVsQ2xhc3N9IFtUTW9kZWxDbGFzcz1uZXZlcl1cbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IFtURGF0YWJhc2VNb2RlbENsYXNzPUV4dHJhY3Q8VE1vZGVsQ2xhc3MsIHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pl1cbiAqIEB0eXBlZGVmIHtbVE1vZGVsQ2xhc3NdIGV4dGVuZHMgW25ldmVyXSA/IFVuYm91bmRGcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGUgOiBCb3VuZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZTxUTW9kZWxDbGFzcywgVERhdGFiYXNlTW9kZWxDbGFzcz59IEZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlTW9kZWxDbGFzc30gW1RNb2RlbENsYXNzPW5ldmVyXVxuICogQHR5cGVkZWYge0Zyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZTxUTW9kZWxDbGFzcz59IEZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUFiaWxpdGllc0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW5kZXhdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGluZGV4LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmaW5kXSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCBmaW5kLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjcmVhdGVdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGNyZWF0ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXBkYXRlXSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCB1cGRhdGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Rlc3Ryb3ldIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGRlc3Ryb3kuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VTZXJ2ZXJDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7YWN0aW9uOiBcImluZGV4XCIgfCBcImZpbmRcIiB8IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImF0dGFjaFwiIHwgXCJhdHRhY2htZW50TGlzdFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0pID0+IChib29sZWFuIHwgdm9pZCB8IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+KX0gW2JlZm9yZUFjdGlvbl0gLSBPcHRpb25hbCBjYWxsYmFjayBydW4gYmVmb3JlIGJ1aWx0LWluIGZyb250ZW5kIGFjdGlvbnMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7YWN0aW9uOiBcImluZGV4XCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXT59IFtyZWNvcmRzXSAtIFJlY29yZHMgbG9hZGVyIGZvciBmcm9udGVuZEluZGV4LlxuICogQHByb3BlcnR5IHsoYXJnczoge2FjdGlvbjogXCJpbmRleFwiIHwgXCJmaW5kXCIgfCBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbW9kZWw6IGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA9PiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4gfCBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj59IFtzZXJpYWxpemVdIC0gUmVjb3JkIHNlcmlhbGl6ZXIgZm9yIHJlc3BvbnNlIHBheWxvYWRzLlxuICogQHByb3BlcnR5IHsoYXJnczoge2FjdGlvbjogXCJmaW5kXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImF0dGFjaFwiIHwgXCJhdHRhY2htZW50TGlzdFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgaWQ6IHN0cmluZyB8IG51bWJlcn0pID0+IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IG51bGw+fSBbZmluZF0gLSBSZWNvcmQgbG9hZGVyIGZvciBmaW5kL3VwZGF0ZS9kZXN0cm95L2F0dGFjaC9kb3dubG9hZC91cmwgYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHthY3Rpb246IFwiY3JlYXRlXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0pID0+IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD59IFtjcmVhdGVdIC0gQ3VzdG9tIGNyZWF0ZSBjYWxsYmFjay5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHthY3Rpb246IFwidXBkYXRlXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG1vZGVsOiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59KSA9PiBQcm9taXNlPGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgfCB2b2lkPn0gW3VwZGF0ZV0gLSBDdXN0b20gdXBkYXRlIGNhbGxiYWNrLlxuICogQHByb3BlcnR5IHsoYXJnczoge2FjdGlvbjogXCJkZXN0cm95XCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG1vZGVsOiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTx2b2lkPn0gW2Rlc3Ryb3ldIC0gQ3VzdG9tIGRlc3Ryb3kgY2FsbGJhY2suXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBCYWNrZW5kUHJvamVjdENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIC0gUGF0aCB0byB0aGUgYmFja2VuZCBwcm9qZWN0LiBNYXkgYmUgYW4gYXBwIHJvb3Qgb3IgYSBjb250cmlidXRpbmcgcGFja2FnZSByb290IChwYWNrYWdlIGVudHJpZXMgYXJlIGFwcGVuZGVkIGludGVybmFsbHkgZnJvbSBgcGFja2FnZXNgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZnJvbnRlbmRNb2RlbHNPdXRwdXRQYXRoXSAtIE9wdGlvbmFsIG91dHB1dCBwcm9qZWN0IHBhdGggd2hlcmUgYHNyYy9mcm9udGVuZC1tb2RlbHNgIHNob3VsZCBiZSBnZW5lcmF0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Jlc291cmNlc1BhdGhdIC0gT3B0aW9uYWwgb3ZlcnJpZGUgZm9yIHRoZSByZXNvdXJjZXMgZGlyZWN0b3J5IHRvIGF1dG8tZGlzY292ZXI7IGRlZmF1bHRzIHRvIGA8cGF0aD4vc3JjL3Jlc291cmNlc2AuIFNldCBpbnRlcm5hbGx5IGZvciBwYWNrYWdlIGVudHJpZXMuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb24+fSBbZnJvbnRlbmRNb2RlbHNdIC0gQXV0by1kaXNjb3ZlcmVkIGZyb250ZW5kIG1vZGVsIGRlZmluaXRpb25zIGtleWVkIGJ5IG1vZGVsIGNsYXNzIG5hbWUuIFNldCBpbnRlcm5hbGx5IGJ5IHRoZSBlbnZpcm9ubWVudCBoYW5kbGVyIOKAlCBkbyBub3Qgc2V0IG1hbnVhbGx5LlxuICogQHByb3BlcnR5IHtBYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVbXX0gW2FiaWxpdHlSZXNvdXJjZXNdIC0gQXV0by1kaXNjb3ZlcmVkIGFiaWxpdHkgcmVzb3VyY2UgY2xhc3NlcyAoZnJvbnRlbmQtbW9kZWwgYW5kIGF1dGhvcml6YXRpb24pIGZyb20gdGhpcyBwcm9qZWN0J3MgcmVzb3VyY2VzIGRpcmVjdG9yeS4gU2V0IGludGVybmFsbHkgYnkgdGhlIGVudmlyb25tZW50IGhhbmRsZXIg4oCUIGRvIG5vdCBzZXQgbWFudWFsbHkuXG4gKi9cblxuLyoqXG4gKiBBIGRlc2NyaXB0b3IgZm9yIGFuIGV4dGVybmFsIFZlbG9jaW91cyBwYWNrYWdlIChlbmdpbmUpIHRoYXQgY29udHJpYnV0ZXMgbW9kZWxzLFxuICogcmVzb3VyY2VzIGFuZCBtaWdyYXRpb25zLiBBIHBhY2thZ2UgdXN1YWxseSBleHBvcnRzIGBuZXcgVmVsb2Npb3VzUGFja2FnZSh7bmFtZSwgdXJsOiBpbXBvcnQubWV0YS51cmx9KWAuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNQYWNrYWdlRGVzY3JpcHRvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBUaGUgcGFja2FnZSBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1cmxdIC0gVGhlIGRlc2NyaXB0b3IgbW9kdWxlJ3MgYGltcG9ydC5tZXRhLnVybGA7IHRoZSBwYWNrYWdlIHJvb3QgaXMgZGVyaXZlZCBmcm9tIGl0IHdoZW4gYHBhdGhgIGlzIG9taXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BhdGhdIC0gVGhlIHBhY2thZ2Ugcm9vdCBkaXJlY3RvcnkgKHRoZSBvbmUgY29udGFpbmluZyBgc3JjYCkuIERlcml2ZWQgZnJvbSBgdXJsYCB3aGVuIG9taXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vZGVsc1BhdGhdIC0gT3ZlcnJpZGUgZm9yIHRoZSBwYWNrYWdlJ3MgbW9kZWxzIGRpcmVjdG9yeSAoZGVmYXVsdCBgPHBhdGg+L3NyYy9tb2RlbHNgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVzb3VyY2VzUGF0aF0gLSBPdmVycmlkZSBmb3IgdGhlIHBhY2thZ2UncyBmcm9udGVuZC1tb2RlbCByZXNvdXJjZXMgZGlyZWN0b3J5IChkZWZhdWx0IGA8cGF0aD4vc3JjL3Jlc291cmNlc2ApLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttaWdyYXRpb25zUGF0aF0gLSBPdmVycmlkZSBmb3IgdGhlIHBhY2thZ2UncyBtaWdyYXRpb25zIGRpcmVjdG9yeSAoZGVmYXVsdCBgPHBhdGg+L3NyYy9kYXRhYmFzZS9taWdyYXRpb25zYCkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9wYWNrYWdlcy92ZWxvY2lvdXMtcGFja2FnZS5qc1wiKS5kZWZhdWx0IHwgVmVsb2Npb3VzUGFja2FnZURlc2NyaXB0b3J9IFZlbG9jaW91c1BhY2thZ2VDb25maWd1cmF0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSb3V0ZVJlc29sdmVySG9va0FyZ3NcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IHBhcmFtcyAtIE11dGFibGUgcmVxdWVzdCBwYXJhbXMgb2JqZWN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGN1cnJlbnRQYXRoIC0gUmVxdWVzdCBwYXRoIHdpdGhvdXQgcXVlcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtoYXNNYXRjaGluZ0N1c3RvbVJvdXRlXSAtIFRydWUgd2hlbiBtYXRjaGluZyBhIGNvbmZpZ3VyZWQgY3VzdG9tIHJvdXRlLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSByZXF1ZXN0IC0gUmVxdWVzdCBvYmplY3QuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9IHJlc3BvbnNlIC0gUmVzcG9uc2Ugb2JqZWN0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3JvdXRlcy9yZXNvbHZlci5qc1wiKS5kZWZhdWx0fSByZXNvbHZlciAtIFJlc29sdmVyIGluc3RhbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUm91dGVSZXNvbHZlckhvb2tSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb24gLSBEYXNoZXJpemVkIGFjdGlvbiBuYW1lIChmb3IgZXhhbXBsZSBgZnJvbnRlbmQtaW5kZXhgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250cm9sbGVyIC0gQ29udHJvbGxlciBwYXRoIChmb3IgZXhhbXBsZSBgYWNjb3VudHNgKS5cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0fSBbY29udHJvbGxlckNsYXNzXSAtIE9wdGlvbmFsIGNvbnRyb2xsZXIgY2xhc3Mgb3ZlcnJpZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NvbnRyb2xsZXJQYXRoXSAtIE9wdGlvbmFsIGFic29sdXRlL3JlbGF0aXZlIGNvbnRyb2xsZXIgZmlsZSBwYXRoIG92ZXJyaWRlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IFtwYXJhbXNdIC0gRXh0cmEgcGFyYW1zIHRvIG1lcmdlIGZvciBjb250cm9sbGVyL2FjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBBYmlsaXR5UmVzb2x1dGlvbl0gLSBXaGV0aGVyIHRvIHJ1biB0aGUgY29udHJvbGxlciBhY3Rpb24gd2l0aG91dCByZXNvbHZpbmcgcmVxdWVzdCBhYmlsaXR5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2tpcENvbnRyb2xsZXJDb25uZWN0aW9uc10gLSBXaGV0aGVyIHRvIHJ1biB0aGUgY29udHJvbGxlciBhY3Rpb24gd2l0aG91dCB0aGUgYXV0b21hdGljIGRhdGFiYXNlIGNoZWNrb3V0IHdyYXBwZXIuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtza2lwVGVuYW50UmVzb2x1dGlvbl0gLSBXaGV0aGVyIHRvIHJ1biB0aGUgY29udHJvbGxlciBhY3Rpb24gd2l0aG91dCByZXNvbHZpbmcgcmVxdWVzdCB0ZW5hbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ZpZXdQYXRoXSAtIE9wdGlvbmFsIHZpZXcgcGF0aCBvdmVycmlkZSB1c2VkIGJ5IGNvbnRyb2xsZXIgcmVuZGVyIGxvb2t1cHMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KGFyZzogUm91dGVSZXNvbHZlckhvb2tBcmdzKSA9PiBSb3V0ZVJlc29sdmVySG9va1Jlc3VsdCB8IG51bGwgfCBQcm9taXNlPFJvdXRlUmVzb2x2ZXJIb29rUmVzdWx0IHwgbnVsbD59IFJvdXRlUmVzb2x2ZXJIb29rVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge3R5cGVvZiBpbXBvcnQoXCIuL2F1dGhvcml6YXRpb24vYmFzZS1yZXNvdXJjZS5qc1wiKS5kZWZhdWx0fSBBYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgcmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgcmVzcG9uc2U6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9KSA9PiBpbXBvcnQoXCIuL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgdm9pZCB8IFByb21pc2U8aW1wb3J0KFwiLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHZvaWQ+fSBBYmlsaXR5UmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIHJlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIHJlc3BvbnNlOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkLCBzdWJzY3JpcHRpb24/OiB7Y2hhbm5lbDogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59fSkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4gfCB2b2lkIHwgUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiB8IHZvaWQ+fSBUZW5hbnRSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgdGVuYW50OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0pID0+IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUgfCBQYXJ0aWFsPERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGU+IHwgdm9pZH0gVGVuYW50RGF0YWJhc2VSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFwaU1hbmlmZXN0Q29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXRoXSAtIEhUVFAgcGF0aCBmb3IgdGhlIGJ1aWx0LWluIEFQSSBtYW5pZmVzdCBlbmRwb2ludC4gRGVmYXVsdHMgdG8gYC9hcGkvbWFuaWZlc3RgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0b2tlbl0gLSBCZWFyZXIgdG9rZW4gcmVxdWlyZWQgaW4gdGhlIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPHRva2VuPmAgaGVhZGVyLiBXaGVuIHNldCwgcmVxdWVzdHMgd2l0aG91dCBhIG1hdGNoaW5nIHRva2VuIGFyZSBub3Qgcm91dGVkICg0MDQpLCBzbyB0aGUgZW5kcG9pbnQgc3RheXMgaGlkZGVuLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRGVidWdFbmRwb2ludENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGF0aF0gLSBIVFRQIHBhdGggZm9yIHRoZSBidWlsdC1pbiBkZWJ1ZyBlbmRwb2ludC4gRGVmYXVsdHMgdG8gYC92ZWxvY2lvdXMvZGVidWdgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0b2tlbl0gLSBCZWFyZXIgdG9rZW4gcmVxdWlyZWQgaW4gdGhlIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPHRva2VuPmAgaGVhZGVyLiBXaGVuIHNldCwgcmVxdWVzdHMgd2l0aG91dCBhIG1hdGNoaW5nIHRva2VuIGFyZSBub3Qgcm91dGVkICg0MDQpLCBzbyB0aGUgZW5kcG9pbnQgc3RheXMgaGlkZGVuLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGVuYW50RGF0YWJhc2VQcm92aWRlclR5cGVcbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgaWRlbnRpZmllcjogc3RyaW5nfSkgPT4gQXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+IHwgUHJvbWlzZTxBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSBsaXN0VGVuYW50cyAtIExpc3RzIHRlbmFudHMgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCwgY2hlY2tlZCwgb3IgbWlncmF0ZWQgZm9yIHRoaXMgZGF0YWJhc2UgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgaWRlbnRpZmllcjogc3RyaW5nfSkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4gfCB2b2lkIHwgUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiB8IHZvaWQ+fSBbcmVzb2x2ZUdlbmVyYXRpb25UZW5hbnRdIC0gUmVzb2x2ZXMgb25lIGV4cGxpY2l0IHRlbmFudCBkZXNjcmlwdG9yIGZvciBzY2hlbWEvYmFzZS1tb2RlbCBnZW5lcmF0aW9uIHdpdGhvdXQgZW51bWVyYXRpbmcgbGlmZWN5Y2xlIHRlbmFudHMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGlkZW50aWZpZXI6IHN0cmluZ30pID0+IEFycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiB8IFByb21pc2U8QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pn0gW2xpc3RSZXN0cmljdFRlbmFudHNdIC0gTGlzdHMgZXhpc3RpbmcgdGVuYW50cyB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGZvciBkZXBlbmRlbnQgcmVzdHJpY3QgZGVzdHJveXMuIERlZmF1bHRzIHRvIGxpc3RUZW5hbnRzLlxuICogQHByb3BlcnR5IHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgdGVuYW50OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBbY3JlYXRlRGF0YWJhc2VdIC0gQ3JlYXRlcyB0aGUgdGVuYW50IGRhdGFiYXNlL3NjaGVtYSBmb3Igb25lIHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2Ryb3BEYXRhYmFzZV0gLSBEcm9wcyB0aGUgdGVuYW50IGRhdGFiYXNlL3NjaGVtYSBmb3Igb25lIHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2NoZWNrVGVuYW50XSAtIENoZWNrcyBvbmUgdGVuYW50IGRhdGFiYXNlIGJlZm9yZSBnZW5lcmljIGNvbm5lY3Rpb24gdmFsaWRhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIG1pZ3JhdGlvbnNBcHBsaWVkOiBudW1iZXIsIHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2FmdGVyTWlncmF0ZVRlbmFudF0gLSBSdW5zIGFwcC1vd25lZCB0ZW5hbnQgd29yayBhZnRlciBnZW5lcmljIG1pZ3JhdGlvbnMgZm9yIG9uZSB0ZW5hbnQuIGBtaWdyYXRpb25zQXBwbGllZGAgaXMgaG93IG1hbnkgbWlncmF0aW9ucyBhY3R1YWxseSByYW4gKDAgd2hlbiB0aGUgdGVuYW50IHdhcyBhbHJlYWR5IHVwIHRvIGRhdGUpLCBzbyB0aGUgYXBwIGNhbiBza2lwIGV4cGVuc2l2ZSBwZXItdGVuYW50IHdvcmsgb24gbm8tb3AgZGVwbG95cy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbmZpZ3VyYXRpb25BcmdzVHlwZVxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXV0b2xvYWRdIC0gR2xvYmFsbHkgZW5hYmxlIGF1dG8tYmF0Y2gtcHJlbG9hZCBvZiByZWxhdGlvbnNoaXBzIG9uIGxhenkgYWNjZXNzLiBEZWZhdWx0IHRydWUuXG4gKiBAcHJvcGVydHkge0NvcnNUeXBlfSBbY29yc10gLSBDT1JTIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBIVFRQIHNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29va2llU2VjcmV0XSAtIFNlY3JldCBmb3IgZW5jcnlwdGluZyBjb29raWVzLlxuICogQHByb3BlcnR5IHtBYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVbXX0gW2FiaWxpdHlSZXNvdXJjZXNdIC0gUmVzb3VyY2UgY2xhc3NlcyB1c2VkIHRvIGRlZmluZSBhYmlsaXRpZXMgcGVyIG1vZGVsLlxuICogQHByb3BlcnR5IHtBYmlsaXR5UmVzb2x2ZXJUeXBlfSBbYWJpbGl0eVJlc29sdmVyXSAtIFJlc29sdmVyIGZvciBjcmVhdGluZyByZXF1ZXN0LXNjb3BlZCBhYmlsaXR5IGluc3RhbmNlcy5cbiAqIEBwcm9wZXJ0eSB7QXR0YWNobWVudHNDb25maWd1cmF0aW9ufSBbYXR0YWNobWVudHNdIC0gQXR0YWNobWVudCBzdG9yYWdlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0JhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvbltdfSBbYmFja2VuZFByb2plY3RzXSAtIEJhY2tlbmQgcHJvamVjdCBkZWZpbml0aW9ucyB1c2VkIGZvciBmcm9udGVuZCBtb2RlbCBnZW5lcmF0aW9uLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNQYWNrYWdlQ29uZmlndXJhdGlvbltdfSBbcGFja2FnZXNdIC0gRXh0ZXJuYWwgVmVsb2Npb3VzIHBhY2thZ2VzIHRoYXQgY29udHJpYnV0ZSBtb2RlbHMsIGZyb250ZW5kLW1vZGVsIHJlc291cmNlcyBhbmQgbWlncmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7e1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfX19IGRhdGFiYXNlIC0gRGF0YWJhc2UgY29uZmlndXJhdGlvbnMga2V5ZWQgYnkgZW52aXJvbm1lbnQgYW5kIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZWJ1Z10gLSBFbmFibGUgZGVidWcgbG9nZ2luZy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IERlYnVnRW5kcG9pbnRDb25maWd1cmF0aW9ufSBbZGVidWdFbmRwb2ludF0gLSBFbmFibGUgdGhlIGJ1aWx0LWluIGRlYnVnIGVuZHBvaW50LiBEZWZhdWx0cyB0byBmYWxzZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IEFwaU1hbmlmZXN0Q29uZmlndXJhdGlvbn0gW2FwaU1hbmlmZXN0XSAtIEVuYWJsZSB0aGUgYnVpbHQtaW4gQVBJIG1hbmlmZXN0IGVuZHBvaW50LiBEZWZhdWx0cyB0byBmYWxzZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGlyZWN0b3J5XSAtIEJhc2UgZGlyZWN0b3J5IGZvciB0aGUgcHJvamVjdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuZm9yY2VUZW5hbnREYXRhYmFzZVNjb3Blc10gLSBSZXF1aXJlIHRlbmFudC1zd2l0Y2hlZCBtb2RlbCBxdWVyaWVzIHRvIHJlc29sdmUgYSB0ZW5hbnQgZGF0YWJhc2UgaWRlbnRpZmllci4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZW52aXJvbm1lbnRdIC0gQ3VycmVudCBlbnZpcm9ubWVudCBuYW1lLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2Vudmlyb25tZW50LWhhbmRsZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gZW52aXJvbm1lbnRIYW5kbGVyIC0gRW52aXJvbm1lbnQgaGFuZGxlciBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2V4cG9zZUludGVybmFsRXJyb3JzVG9DbGllbnRzXSAtIFJldHVybiB1bmV4cGVjdGVkIGludGVybmFsIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMgaW4gZnJvbnRlbmQtbW9kZWwgY2xpZW50IHBheWxvYWRzIGluIGV2ZXJ5IGVudmlyb25tZW50LiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHt7bWF4T3BlbkhhbmRsZXM/OiBudW1iZXJ9fSBbZnJvbnRlbmRUZW5hbnRTcWxpdGVdIC0gQm91bmRlZCBmcm9udGVuZCB0ZW5hbnQgU1FMaXRlIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2VjdXJlRnJvbnRlbmRNb2RlbEVycm9yc10gLSBEZXByZWNhdGVkIGNvbXBhdGliaWxpdHkgYWxpYXMgZm9yIGBleHBvc2VJbnRlcm5hbEVycm9yc1RvQ2xpZW50czogZmFsc2VgIHdoZW4gdGhlIGF1dGhvcml0YXRpdmUgb3B0aW9uIGlzIG9taXR0ZWQuXG4gKiBAcHJvcGVydHkge0h0dHBTZXJ2ZXJDb25maWd1cmF0aW9ufSBbaHR0cFNlcnZlcl0gLSBEZWZhdWx0IEhUVFAgc2VydmVyIGNvbmZpZ3VyYXRpb24gZm9yIGFwcGxpY2F0aW9ucyBzdGFydGVkIGZyb20gdGhpcyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtMb2dnaW5nQ29uZmlndXJhdGlvbn0gW2xvZ2dpbmddIC0gTG9nZ2luZyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb259IFtiYWNrZ3JvdW5kSm9ic10gLSBCYWNrZ3JvdW5kIGpvYnMgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmVhY29uQ29uZmlndXJhdGlvbn0gW2JlYWNvbl0gLSBCZWFjb24gYnJvYWRjYXN0IGJ1cyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb24gfCBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0xvYWRlclR5cGV9IFtzY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic10gLSBTY2hlZHVsZWQgYmFja2dyb3VuZCBqb2JzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge01haWxlckJhY2tlbmR9IFttYWlsZXJCYWNrZW5kXSAtIE1haWwgZGVsaXZlcnkgYmFja2VuZC5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgdHlwZTogc3RyaW5nfSkgPT4gdm9pZH0gaW5pdGlhbGl6ZU1vZGVscyAtIEhvb2sgdG8gcmVnaXN0ZXIgbW9kZWxzIGZvciBhIGdpdmVuIGluaXRpYWxpemF0aW9uIHR5cGUuXG4gKiBAcHJvcGVydHkge0luaXRpYWxpemVyc1R5cGV9IFtpbml0aWFsaXplcnNdIC0gSW5pdGlhbGl6ZXIgbG9hZGVyIGZvciBlbnZpcm9ubWVudCBib290c3RyYXBwaW5nLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCAoKCkgPT4gc3RyaW5nKX0gbG9jYWxlIC0gRGVmYXVsdCBsb2NhbGUgb3IgbG9jYWxlIHJlc29sdmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gbG9jYWxlcyAtIFN1cHBvcnRlZCBsb2NhbGVzLlxuICogQHByb3BlcnR5IHtMb2NhbGVGYWxsYmFja3NUeXBlfSBsb2NhbGVGYWxsYmFja3MgLSBMb2NhbGUgZmFsbGJhY2sgbWFwLlxuICogQHByb3BlcnR5IHtTdHJ1Y3R1cmVTcWxDb25maWd1cmF0aW9ufSBbc3RydWN0dXJlU3FsXSAtIFN0cnVjdHVyZSBTUUwgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNTeW5jQ29uZmlndXJhdGlvbn0gW3N5bmNdIC0gTG9jYWwvb2ZmbGluZSBzeW5jIGZyYW1ld29yayBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtUZW5hbnRSZXNvbHZlclR5cGV9IFt0ZW5hbnRSZXNvbHZlcl0gLSBSZXNvbHZlciBmb3IgY3JlYXRpbmcgcmVxdWVzdC1zY29wZWQgdGVuYW50IGNvbnRleHQgb2JqZWN0cy5cbiAqIEBwcm9wZXJ0eSB7VGVuYW50RGF0YWJhc2VSZXNvbHZlclR5cGV9IFt0ZW5hbnREYXRhYmFzZVJlc29sdmVyXSAtIFJlc29sdmVyIGZvciBkZXJpdmluZyB0ZW5hbnQtc3BlY2lmaWMgZGF0YWJhc2UgY29uZmlnIG92ZXJyaWRlcy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgVGVuYW50RGF0YWJhc2VQcm92aWRlclR5cGU+fSBbdGVuYW50RGF0YWJhc2VQcm92aWRlcnNdIC0gVGVuYW50IGRhdGFiYXNlIGxpZmVjeWNsZSBwcm92aWRlcnMga2V5ZWQgYnkgZGF0YWJhc2UgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGVzdGluZ10gLSBQYXRoIHRvIHRoZSB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IHVuZGVmaW5lZCl9IFt0aW1lWm9uZV0gLSBEZWZhdWx0IHRpbWV6b25lIGZvciB0aW1lem9uZS1sZXNzIGRhdGV0aW1lIHN0cmluZ3MuXG4gKiBAcHJvcGVydHkge251bWJlciB8ICgoKSA9PiBudW1iZXIpfSBbdGltZXpvbmVPZmZzZXRNaW51dGVzXSAtIERlZmF1bHQgdGltZXpvbmUgb2Zmc2V0IGluIG1pbnV0ZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHN0cmluZ1tdfSBbdHJ1c3RlZFByb3hpZXNdIC0gVHJ1c3RlZCByZXZlcnNlIHByb3h5IGFkZHJlc3MgcmFuZ2VzIHVzZWQgdG8gcmVzb2x2ZSByZXF1ZXN0IHJlbW90ZSBhZGRyZXNzZXMgZnJvbSBmb3J3YXJkaW5nIGhlYWRlcnMuXG4gKiBAcHJvcGVydHkge251bWJlciB8ICgoKSA9PiBudW1iZXIpfSBbcmVxdWVzdFRpbWVvdXRNc10gLSBUaW1lb3V0IGluIHNlY29uZHMgZm9yIGNvbXBsZXRpbmcgYSBIVFRQIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkge1JvdXRlUmVzb2x2ZXJIb29rVHlwZVtdfSBbcm91dGVSZXNvbHZlckhvb2tzXSAtIEhvb2sgY2FsbGJhY2tzIHRoYXQgY2FuIGhpamFjayB1bnJlc29sdmVkIHJvdXRlcy5cbiAqIEBwcm9wZXJ0eSB7V2Vic29ja2V0Q2hhbm5lbFJlc29sdmVyVHlwZX0gW3dlYnNvY2tldENoYW5uZWxSZXNvbHZlcl0gLSBSZXNvbHZlIGEgd2Vic29ja2V0IGNoYW5uZWwgY2xhc3MvaW5zdGFuY2UgZm9yIGVhY2ggY29ubmVjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7V2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlclR5cGV9IFt3ZWJzb2NrZXRNZXNzYWdlSGFuZGxlclJlc29sdmVyXSAtIFJlc29sdmUgYSByYXcgd2Vic29ja2V0IG1lc3NhZ2UgaGFuZGxlciBmb3IgZWFjaCBjb25uZWN0aW9uLlxuICovXG5cbmV4cG9ydCBjb25zdCBub3RoaW5nID0ge31cbiJdfQ==
@@ -198,6 +198,12 @@ export default class VelociousConfiguration {
198
198
  * Settled deliveries are removed by the tracking-level cleanup.
199
199
  * @type {Set<Promise<void>>} */
200
200
  _localBroadcastDeliveries: Set<Promise<void>>;
201
+ /**
202
+ * Latest local broadcast delivery per subscription. Chaining subsequent
203
+ * deliveries preserves lifecycle event order without coupling separate
204
+ * subscribers to one another.
205
+ * @type {WeakMap<import("./http-server/websocket-channel.js").default, Promise<void>>} */
206
+ _localBroadcastDeliveryTails: WeakMap<import("./http-server/websocket-channel.js").default, Promise<void>>;
201
207
  /**
202
208
  * Stores the websocket sessions value.
203
209
  * @type {Set<import("./http-server/client/websocket-session.js").default>} - Live websocket sessions, including paused sessions within the grace window.
@@ -274,6 +280,8 @@ export default class VelociousConfiguration {
274
280
  * lets a shutdown close them and release the lock instead of orphaning it.
275
281
  * @type {Set<import("./database/drivers/base.js").default>} */
276
282
  _advisoryLockConnections: Set<import("./database/drivers/base.js").default>;
283
+ /** @type {Map<string, number>} */
284
+ _schemaCacheGenerationsByReuseKey: Map<string, number>;
277
285
  /**
278
286
  * Runs current.
279
287
  * @returns {VelociousConfiguration} - The current.
@@ -503,6 +511,12 @@ export default class VelociousConfiguration {
503
511
  * @returns {void} - No return value.
504
512
  */
505
513
  clearSchemaCachesForReuseKey(reuseKey: string): void;
514
+ /**
515
+ * Returns the current schema-cache generation for one physical database.
516
+ * @param {string} reuseKey - Connection reuse key identifying the shared database.
517
+ * @returns {number} - Current schema-cache generation.
518
+ */
519
+ schemaCacheGenerationForReuseKey(reuseKey: string): number;
506
520
  /**
507
521
  * Invalidates record metadata owned by one closed/deleted physical tenant
508
522
  * database while preserving every other tenant generation.
@@ -1380,12 +1394,10 @@ export default class VelociousConfiguration {
1380
1394
  * @param {string} name - Channel name.
1381
1395
  * @param {Record<string, ReturnType<typeof JSON.parse>>} broadcastParams - Params passed to each subscription's `matches()`.
1382
1396
  * @param {ReturnType<typeof JSON.parse>} body - Message body delivered via `sendMessage()`.
1383
- * @param {{eventId?: string}} [meta] - Optional event metadata for replay tracking.
1397
+ * @param {import("./http-server/websocket-channel.js").WebsocketBroadcastMetadata} [meta] - Optional event metadata for replay tracking.
1384
1398
  * @returns {void}
1385
1399
  */
1386
- _broadcastToChannelLocal(name: string, broadcastParams: Record<string, ReturnType<typeof JSON.parse>>, body: ReturnType<typeof JSON.parse>, meta?: {
1387
- eventId?: string;
1388
- }): void;
1400
+ _broadcastToChannelLocal(name: string, broadcastParams: Record<string, ReturnType<typeof JSON.parse>>, body: ReturnType<typeof JSON.parse>, meta?: import("./http-server/websocket-channel.js").WebsocketBroadcastMetadata): void;
1389
1401
  /**
1390
1402
  * Awaits a snapshot of the in-flight local (per-process) websocket channel
1391
1403
  * broadcast deliveries. Called from `awaitPendingBroadcasts` after the host
@@ -1400,12 +1412,10 @@ export default class VelociousConfiguration {
1400
1412
  * Runs deliver websocket channel broadcast.
1401
1413
  * @param {import("./http-server/websocket-channel.js").default} subscription - Channel subscription.
1402
1414
  * @param {import("./http-server/websocket-channel.js").WebsocketJsonValue} body - Broadcast body.
1403
- * @param {{eventId?: string}} meta - Broadcast metadata.
1415
+ * @param {import("./http-server/websocket-channel.js").WebsocketBroadcastMetadata} meta - Broadcast metadata.
1404
1416
  * @returns {void | Promise<void>} Broadcast delivery result.
1405
1417
  */
1406
- _deliverWebsocketChannelBroadcast(subscription: import("./http-server/websocket-channel.js").default, body: import("./http-server/websocket-channel.js").WebsocketJsonValue, meta: {
1407
- eventId?: string;
1408
- }): void | Promise<void>;
1418
+ _deliverWebsocketChannelBroadcast(subscription: import("./http-server/websocket-channel.js").default, body: import("./http-server/websocket-channel.js").WebsocketJsonValue, meta: import("./http-server/websocket-channel.js").WebsocketBroadcastMetadata): void | Promise<void>;
1409
1419
  /**
1410
1420
  * Runs get websocket message handler resolver.
1411
1421
  * @returns {import("./configuration-types.js").WebsocketMessageHandlerResolverType | undefined} - The websocket message handler resolver.
@@ -1 +1 @@
1
- {"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/configuration.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/configuration.js"],"names":[],"mappings":"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"}