taon 18.0.24 → 18.0.26

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 (204) hide show
  1. package/README.md +175 -114
  2. package/assets/shared/shared_folder_info.txt +1 -1
  3. package/bin/start.js +279 -279
  4. package/bin/taon +6 -6
  5. package/bin/taon-debug +5 -5
  6. package/bin/taon-debug-brk +5 -5
  7. package/browser/README.md +24 -24
  8. package/browser/esm2022/lib/endpoint-context.mjs +4 -1
  9. package/browser/esm2022/lib/index.mjs +2 -2
  10. package/browser/esm2022/lib/models.mjs +1 -1
  11. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +11 -11
  12. package/browser/fesm2022/taon.mjs +3 -0
  13. package/browser/fesm2022/taon.mjs.map +1 -1
  14. package/browser/lib/models.d.ts +5 -0
  15. package/browser/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.d.ts +4 -4
  16. package/cli.js +11 -17
  17. package/cli.js.map +1 -1
  18. package/client/README.md +24 -24
  19. package/client/esm2022/lib/endpoint-context.mjs +4 -1
  20. package/client/esm2022/lib/index.mjs +2 -2
  21. package/client/esm2022/lib/models.mjs +1 -1
  22. package/client/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +11 -11
  23. package/client/fesm2022/taon.mjs +3 -0
  24. package/client/fesm2022/taon.mjs.map +1 -1
  25. package/client/lib/models.d.ts +5 -0
  26. package/client/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.d.ts +4 -4
  27. package/index.js +15 -2
  28. package/index.js.map +1 -1
  29. package/lib/base-classes/base-abstract-entity.js +30 -28
  30. package/lib/base-classes/base-abstract-entity.js.map +1 -1
  31. package/lib/base-classes/base-class.js +9 -17
  32. package/lib/base-classes/base-class.js.map +1 -1
  33. package/lib/base-classes/base-context.js +4 -4
  34. package/lib/base-classes/base-context.js.map +1 -1
  35. package/lib/base-classes/base-controller.js +15 -15
  36. package/lib/base-classes/base-controller.js.map +1 -1
  37. package/lib/base-classes/base-crud-controller.js +211 -329
  38. package/lib/base-classes/base-crud-controller.js.map +1 -1
  39. package/lib/base-classes/base-entity.js +15 -15
  40. package/lib/base-classes/base-entity.js.map +1 -1
  41. package/lib/base-classes/base-injector.js +99 -124
  42. package/lib/base-classes/base-injector.js.map +1 -1
  43. package/lib/base-classes/base-migration.js +15 -31
  44. package/lib/base-classes/base-migration.js.map +1 -1
  45. package/lib/base-classes/base-provider.js +3 -9
  46. package/lib/base-classes/base-provider.js.map +1 -1
  47. package/lib/base-classes/base-repository.js +310 -444
  48. package/lib/base-classes/base-repository.js.map +1 -1
  49. package/lib/base-classes/base-subscriber-for-entity.js +73 -73
  50. package/lib/base-classes/base-subscriber-for-entity.js.map +1 -1
  51. package/lib/base-classes/base.js +10 -10
  52. package/lib/base-classes/base.js.map +1 -1
  53. package/lib/build-info._auto-generated_.js.map +1 -1
  54. package/lib/constants.js.map +1 -1
  55. package/lib/context-db-migrations.js +325 -581
  56. package/lib/context-db-migrations.js.map +1 -1
  57. package/lib/create-context.js +80 -109
  58. package/lib/create-context.js.map +1 -1
  59. package/lib/decorators/classes/controller-decorator.js +15 -13
  60. package/lib/decorators/classes/controller-decorator.js.map +1 -1
  61. package/lib/decorators/classes/entity-decorator.js +23 -20
  62. package/lib/decorators/classes/entity-decorator.js.map +1 -1
  63. package/lib/decorators/classes/migration-decorator.js +7 -13
  64. package/lib/decorators/classes/migration-decorator.js.map +1 -1
  65. package/lib/decorators/classes/provider-decorator.js +7 -13
  66. package/lib/decorators/classes/provider-decorator.js.map +1 -1
  67. package/lib/decorators/classes/repository-decorator.js +7 -13
  68. package/lib/decorators/classes/repository-decorator.js.map +1 -1
  69. package/lib/decorators/classes/subscriber-decorator.js +8 -13
  70. package/lib/decorators/classes/subscriber-decorator.js.map +1 -1
  71. package/lib/decorators/http/http-decorators.js +4 -4
  72. package/lib/decorators/http/http-decorators.js.map +1 -1
  73. package/lib/decorators/http/http-methods-decorators.js +19 -25
  74. package/lib/decorators/http/http-methods-decorators.js.map +1 -1
  75. package/lib/decorators/http/http-params-decorators.js +7 -9
  76. package/lib/decorators/http/http-params-decorators.js.map +1 -1
  77. package/lib/dependency-injection/di-container.js +13 -18
  78. package/lib/dependency-injection/di-container.js.map +1 -1
  79. package/lib/endpoint-context.js +1196 -1543
  80. package/lib/endpoint-context.js.map +1 -1
  81. package/lib/entity-process.js +102 -112
  82. package/lib/entity-process.js.map +1 -1
  83. package/lib/env.js +2 -2
  84. package/lib/env.js.map +1 -1
  85. package/lib/formly/formly-group-wrapper-component.js +45 -23
  86. package/lib/formly/formly-group-wrapper-component.js.map +1 -1
  87. package/lib/formly/formly-repeat-component.js +74 -27
  88. package/lib/formly/formly-repeat-component.js.map +1 -1
  89. package/lib/formly/formly.models.js.map +1 -1
  90. package/lib/formly/fromly.js +57 -61
  91. package/lib/formly/fromly.js.map +1 -1
  92. package/lib/formly/type-from-entity.js +11 -16
  93. package/lib/formly/type-from-entity.js.map +1 -1
  94. package/lib/get-response-value.js +22 -33
  95. package/lib/get-response-value.js.map +1 -1
  96. package/lib/helpers/class-helpers.js +62 -73
  97. package/lib/helpers/class-helpers.js.map +1 -1
  98. package/lib/helpers/taon-helpers.js +33 -31
  99. package/lib/helpers/taon-helpers.js.map +1 -1
  100. package/lib/index._auto-generated_.d.ts +1 -0
  101. package/lib/index._auto-generated_.js.map +1 -1
  102. package/lib/index.d.ts +1 -25
  103. package/lib/index.js +44 -41
  104. package/lib/index.js.map +1 -1
  105. package/lib/inject.js +15 -15
  106. package/lib/inject.js.map +1 -1
  107. package/lib/models.d.ts +5 -0
  108. package/lib/models.js +124 -100
  109. package/lib/models.js.map +1 -1
  110. package/lib/orm.js +13 -27
  111. package/lib/orm.js.map +1 -1
  112. package/lib/realtime/realtime-client.js +70 -65
  113. package/lib/realtime/realtime-client.js.map +1 -1
  114. package/lib/realtime/realtime-core.js +48 -29
  115. package/lib/realtime/realtime-core.js.map +1 -1
  116. package/lib/realtime/realtime-server.js +81 -80
  117. package/lib/realtime/realtime-server.js.map +1 -1
  118. package/lib/realtime/realtime-strategy/index.js +18 -5
  119. package/lib/realtime/realtime-strategy/index.js.map +1 -1
  120. package/lib/realtime/realtime-strategy/realtime-strategy-ipc.js +132 -172
  121. package/lib/realtime/realtime-strategy/realtime-strategy-ipc.js.map +1 -1
  122. package/lib/realtime/realtime-strategy/realtime-strategy-mock.js +158 -241
  123. package/lib/realtime/realtime-strategy/realtime-strategy-mock.js.map +1 -1
  124. package/lib/realtime/realtime-strategy/realtime-strategy-socket-io.js +18 -29
  125. package/lib/realtime/realtime-strategy/realtime-strategy-socket-io.js.map +1 -1
  126. package/lib/realtime/realtime-strategy/realtime-strategy.js +9 -13
  127. package/lib/realtime/realtime-strategy/realtime-strategy.js.map +1 -1
  128. package/lib/realtime/realtime-subs-manager.js +29 -30
  129. package/lib/realtime/realtime-subs-manager.js.map +1 -1
  130. package/lib/realtime/realtime.models.js.map +1 -1
  131. package/lib/storage.js +1 -1
  132. package/lib/storage.js.map +1 -1
  133. package/lib/symbols.js +62 -66
  134. package/lib/symbols.js.map +1 -1
  135. package/lib/ui/directives/index.js +2 -2
  136. package/lib/ui/directives/index.js.map +1 -1
  137. package/lib/ui/directives/view-mode.js.map +1 -1
  138. package/lib/ui/index.js +2 -2
  139. package/lib/ui/index.js.map +1 -1
  140. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.d.ts +2 -0
  141. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.js +5 -0
  142. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.js.map +1 -0
  143. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.d.ts +29 -0
  144. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.d.ts +2 -0
  145. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.d.ts +1 -0
  146. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.js +5 -0
  147. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.js.map +1 -0
  148. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/taon-db-admin.component.d.ts +8 -0
  149. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.d.ts +2 -0
  150. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.js +5 -0
  151. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.js.map +1 -0
  152. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.d.ts +13 -0
  153. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.d.ts +2 -0
  154. package/lib/ui/taon-admin-mode-configuration/index.js +2 -2
  155. package/lib/ui/taon-admin-mode-configuration/index.js.map +1 -1
  156. package/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.d.ts +5 -0
  157. package/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.js +3 -0
  158. package/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.js.map +1 -0
  159. package/lib/ui/taon-admin-mode-configuration/taon-admin-control.service.d.ts +14 -0
  160. package/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.d.ts +4 -4
  161. package/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.d.ts +2 -0
  162. package/lib/ui/taon-admin-mode-configuration/taon-admin.models.js.map +1 -1
  163. package/lib/ui/taon-github-fork-me-corner/index.js +2 -2
  164. package/lib/ui/taon-github-fork-me-corner/index.js.map +1 -1
  165. package/lib/ui/taon-github-fork-me-ribbon/index.js +2 -2
  166. package/lib/ui/taon-github-fork-me-ribbon/index.js.map +1 -1
  167. package/lib/ui/taon-notifications/index.js +15 -2
  168. package/lib/ui/taon-notifications/index.js.map +1 -1
  169. package/lib/ui/taon-notifications/taon-notifications.models.js +2 -2
  170. package/lib/ui/taon-notifications/taon-notifications.models.js.map +1 -1
  171. package/lib/ui/taon-progress-bar/index.js +2 -2
  172. package/lib/ui/taon-progress-bar/index.js.map +1 -1
  173. package/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +2 -1
  174. package/lib/ui/taon-session-passcode/index.js +2 -2
  175. package/lib/ui/taon-session-passcode/index.js.map +1 -1
  176. package/lib/ui/taon-table/index.js +2 -2
  177. package/lib/ui/taon-table/index.js.map +1 -1
  178. package/lib/ui/taon.models.js.map +1 -1
  179. package/lib/validators.js +48 -16
  180. package/lib/validators.js.map +1 -1
  181. package/migrations/index.js +15 -2
  182. package/migrations/index.js.map +1 -1
  183. package/migrations/migrations_index._auto-generated_.d.ts +1 -0
  184. package/migrations/migrations_index._auto-generated_.js.map +1 -1
  185. package/old-app .d.ts +1 -0
  186. package/old-app .js +67 -78
  187. package/old-app .js.map +1 -1
  188. package/package.json +18 -65
  189. package/playground.d.ts +1 -0
  190. package/playground.js.map +1 -1
  191. package/src.d.ts +1 -1
  192. package/taon.jsonc +44 -47
  193. package/tmp-environment.json +8 -401
  194. package/websql/README.md +24 -24
  195. package/websql/esm2022/lib/endpoint-context.mjs +4 -1
  196. package/websql/esm2022/lib/index.mjs +2 -2
  197. package/websql/esm2022/lib/models.mjs +1 -1
  198. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +11 -11
  199. package/websql/fesm2022/taon.mjs +3 -0
  200. package/websql/fesm2022/taon.mjs.map +1 -1
  201. package/websql/lib/models.d.ts +5 -0
  202. package/websql/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.d.ts +4 -4
  203. package/browser/package.json +0 -25
  204. package/websql/package.json +0 -25
@@ -188,6 +188,9 @@ export class EndpointContext {
188
188
  !this.config.host.startsWith('https://')) {
189
189
  Helpers.throw(`[taon-config] Your 'host' must start with http:// or https://`);
190
190
  }
191
+ if (_.isUndefined(this.config.useIpcWhenElectron)) {
192
+ this.config.useIpcWhenElectron = true;
193
+ }
191
194
  if (this.config.remoteHost &&
192
195
  !this.config.remoteHost.startsWith('http://') &&
193
196
  !this.config.remoteHost.startsWith('https://')) {
@@ -1699,4 +1702,4 @@ instead
1699
1702
  }
1700
1703
  ;
1701
1704
  ({}); // @--end-of-file-for-module=taon lib/endpoint-context.ts
1702
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0L3Rhb24vcHJvamVjdHMvdGFvbi9zcmMvbGliL2VuZHBvaW50LWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsK0NBQStDO0FBaUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUksT0FBTyxFQUFJLE1BQU0sSUFBSSxhQUFhLEVBQUksUUFBUSxFQUFJLFdBQVcsR0FBRyxNQUFNLGtCQUFrQixDQUFDLENBQUEsS0FBSztBQUN6RyxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxJQUFJLEVBQVcsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBUzFCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSXhELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzlELE1BQU0sT0FBTyxlQUFlO0lBTTFCLE1B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QztJQUMxQixDQUFDO0lBSUQsS0FBSyxDQUFDLGVBQWU7UUFDdkIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJRCxLQUFLLENBQUMsWUFBWTtRQUNwQixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztJQUVILENBQUM7SUFLRCxLQUFLLENBQUMsc0JBQXNCO1FBQzlCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxL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O1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7SUFFSCxDQUFDO0lBSUQsSUFBVyxXQUFXO1FBQ3hCLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUlPLGVBQWU7UUFDekIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxL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TCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFD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LEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFNRCxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFvQixHQUFHLElBQUk7WUFNckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9C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QyxnQ0FBZ0MsRUFDNUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUMxQyxDQUFDO1lBQ0osQ0FBQztZQUdELE1BQU0sYUFBYSxHQUFHO2dCQUNwQixRQUFRLEVBQUUsVUFBVTtvQkFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzFELENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDakQsQ0FBQztZQUNGLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztJQUVKLENBQUM7Q0FFRjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMseURBQXlEIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC90eXBlZGVmICovXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5pbXBvcnQgeyBUYW9uQWRtaW5TZXJ2aWNlIH0gZnJvbSAnLi91aS90YW9uLWFkbWluLW1vZGUtY29uZmlndXJhdGlvbi90YW9uLWFkbWluLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBVdGlsc09zLCBVdGlscyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgY3Jvc3NQbGF0Zm9ybVBhdGggfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IENsYXNzSGVscGVycyB9IGZyb20gJy4vaGVscGVycy9jbGFzcy1oZWxwZXJzJztcbmltcG9ydCB7IFN5bWJvbHMgfSBmcm9tICcuL3N5bWJvbHMnO1xuaW1wb3J0IHsgXywgSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHR5cGUgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnLi9jcmVhdGUtY29udGV4dCc7XG5pbXBvcnQgeyBESVRhb25Db250YWluZXIgfSBmcm9tICcuL2RlcGVuZGVuY3ktaW5qZWN0aW9uL2RpLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBUYW9uQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tICcuL2RlY29yYXRvcnMvY2xhc3Nlcy9jb250cm9sbGVyLWRlY29yYXRvcic7XG5pbXBvcnQgeyBUYW9uSGVscGVycyB9IGZyb20gJy4vaGVscGVycy90YW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgICBNYXBwaW5nLCAgIE1vZGVscyBhcyBNb2RlbHNOZzJSZXN0LCAgIFJlc291cmNlLCAgIFJlc3RIZWFkZXJzLCB9IGZyb20gJ25nMi1yZXN0L2Jyb3dzZXInOy8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgeyBKU09OMTAgfSBmcm9tICdqc29uMTAvYnJvd3Nlcic7XG5pbXBvcnQgeyBwYXRoIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBmcm9tLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHlQcm9jZXNzIH0gZnJvbSAnLi9lbnRpdHktcHJvY2Vzcyc7XG5pbXBvcnQgeyBnZXRSZXNwb25zZVZhbHVlIH0gZnJvbSAnLi9nZXQtcmVzcG9uc2UtdmFsdWUnO1xuaW1wb3J0IHR5cGUgeyBBcHBsaWNhdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB0eXBlIHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyAgIERhdGFTb3VyY2UsICAgRGF0YVNvdXJjZU9wdGlvbnMsICAgZ2V0TWV0YWRhdGFBcmdzU3RvcmFnZSwgfSBmcm9tICd0YW9uLXR5cGVvcm0vYnJvd3Nlcic7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cblxuaW1wb3J0IHsgVGFvbkVudGl0eU9wdGlvbnMgfSBmcm9tICcuL2RlY29yYXRvcnMvY2xhc3Nlcy9lbnRpdHktZGVjb3JhdG9yJztcbmltcG9ydCB0eXBlIHsgU2VydmVyIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBFTlYgfSBmcm9tICcuL2Vudic7XG5pbXBvcnQgdHlwZSB7IEJhc2VDbGFzcyB9IGZyb20gJy4vYmFzZS1jbGFzc2VzL2Jhc2UtY2xhc3MnO1xuaW1wb3J0IHsgUmVhbHRpbWVDb3JlIH0gZnJvbSAnLi9yZWFsdGltZS9yZWFsdGltZS1jb3JlJztcbmltcG9ydCB7IFRhb25TdWJzY3JpYmVyT3B0aW9ucyB9IGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL3N1YnNjcmliZXItZGVjb3JhdG9yJztcbmltcG9ydCB7IEJhc2VTdWJzY3JpYmVyRm9yRW50aXR5IH0gZnJvbSAnLi9iYXNlLWNsYXNzZXMvYmFzZS1zdWJzY3JpYmVyLWZvci1lbnRpdHknO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWlncmF0aW9uIH0gZnJvbSAnLi9iYXNlLWNsYXNzZXMvYmFzZS1taWdyYXRpb24nO1xuaW1wb3J0IHsgQ29udGV4dERiTWlncmF0aW9ucyB9IGZyb20gJy4vY29udGV4dC1kYi1taWdyYXRpb25zJztcblxuXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRDb250ZXh0IHtcblxuXG5cbiAgcHJpdmF0ZSBzdGF0aWMgbmdab25lOiBOZ1pvbmU7XG5cbiAgc3RhdGljIGluaXROZ1pvbmUobmdab25lOiBOZ1pvbmUpIHtcblxuICAgIHRoaXMubmdab25lID0gbmdab25lO1xuXG4gIH1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgZGlzYWJsZWRSZWFsdGltZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogY2hlY2sgd2hldGhlciBjb250ZXh0IGlzIGluaXRlZFxuICAgKiAod2l0aCBpbml0KCkgZnVuY3Rpb24gKVxuICAgKi9cbiAgcHVibGljIGluaXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgcmVhZG9ubHkgZGJNaWdyYXRpb25zID0gbmV3IENvbnRleHREYk1pZ3JhdGlvbnModGhpcyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbEluc3RhY2VPYmpTeW1ib2wgPSBTeW1ib2woJ2xvY2FsSW5zdGFjZU9ialN5bWJvbCcpO1xuXG5cbiAgLyoqXG4gICAqIGFsbCBpbnN0YW5jZXMgb2YgY2xhc3NlcyBmcm9tIGNvbnRleHRcbiAgICoga2V5IGlzIGNsYXNzIG5hbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhbGxDbGFzc2VzSW5zdGFuY2VzID0ge307XG5cblxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xhc3NJbnN0YW5jZXNCeU5hbWVPYmogPSB7fTtcblxuXG5cbiAgcHJpdmF0ZSByZWFkb25seSBvYmpXaXRoQ2xhc3Nlc0luc3RhbmNlc0FyciA9IHt9O1xuXG5cblxuICBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlUm91dGVzOiB7XG4gICAgcm91dGVQYXRoOiBzdHJpbmc7XG4gICAgbWV0aG9kOiBNb2RlbHMuSHR0cC5SZXN0Lkh0dHBNZXRob2Q7XG4gIH1bXSA9IFtdO1xuXG5cbiAgcHVibGljIHJlYWRvbmx5IHNraXBXcml0aW5nU2VydmVyUm91dGVzOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBwcml2YXRlIGluamVjdGFibGVUeXBlc2Zyb21Db250ZXh0cyA9IFtcbiAgICBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUixcbiAgICBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgTW9kZWxzLkNsYXNzVHlwZS5TVUJTQ1JJQkVSLFxuICAgIE1vZGVscy5DbGFzc1R5cGUuTUlHUkFUSU9OLFxuICBdO1xuXG5cbiAgcHJpdmF0ZSBhbGxUeXBlc2Zyb21Db250ZXh0cyA9IFtcbiAgICAuLi50aGlzLmluamVjdGFibGVUeXBlc2Zyb21Db250ZXh0cyxcbiAgICBNb2RlbHMuQ2xhc3NUeXBlLkVOVElUWSxcbiAgXTtcblxuXG5cblxuICBwdWJsaWMgZXhwcmVzc0FwcDogQXBwbGljYXRpb24gPSB7fSBhcyBhbnk7XG5cblxuXG4gIHB1YmxpYyBzZXJ2ZXJUY3BVZHA6IFNlcnZlcjtcblxuXG5cbiAgZGF0YWJhc2VDb25maWc/OiBNb2RlbHMuRGF0YWJhc2VDb25maWdUeXBlT3JtO1xuXG5cblxuICBtb2RlOiBNb2RlbHMuRnJhbWV3b3JrTW9kZTtcblxuXG5cbiAgcmVhZG9ubHkgb25seU1pZ3JhdGlvblJ1bj86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVhZG9ubHkgb25seU1pZ3JhdGlvblJldmVydFRvVGltZXN0YW1wPzogbnVtYmVyID0gdW5kZWZpbmVkO1xuXG4gIGdldCBpc1J1bk9yUmV2ZXJ0T25seU1pZ3JhdGlvbkFwcFN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLm9ubHlNaWdyYXRpb25SdW4gfHwgdGhpcy5vbmx5TWlncmF0aW9uUmV2ZXJ0VG9UaW1lc3RhbXApO1xuICB9XG5cblxuXG4gIHNlc3Npb24/OiBNb2RlbHMuSVNlc3Npb247XG5cblxuXG4gIHB1YmxpYyBjb25uZWN0aW9uOiBEYXRhU291cmNlO1xuXG5cblxuICBwcml2YXRlIGVudGl0aWVzVHJpZ2dlcnMgPSB7fTtcblxuXG5cbiAgcHJpdmF0ZSByZWFsdGltZTogUmVhbHRpbWVDb3JlO1xuICBnZXQgcmVhbHRpbWVDbGllbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhbHRpbWUuY2xpZW50O1xuICB9XG4gIGdldCByZWFsdGltZVNlcnZlcigpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFsdGltZS5zZXJ2ZXI7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGF2YWlsYWJsZSBhZnRlciBpbml0KClcbiAgICovXG4gIHB1YmxpYyBjb25maWc6IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuXG5cblxuICBnZXQgbG9nSHR0cCgpOiBib29sZWFuIHtcbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZz8ubG9ncykpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmNvbmZpZy5sb2dzIGFzIE1vZGVscy5Db25uZWN0aW9uT3B0aW9uc0xvZ3MpLmh0dHA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ubG9ncyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBsb2dSZWFsdGltZSgpOiBib29sZWFuIHtcbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZz8ubG9ncykpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmNvbmZpZy5sb2dzIGFzIE1vZGVscy5Db25uZWN0aW9uT3B0aW9uc0xvZ3MpLnJlYWx0aW1lO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmxvZ3MgPT09IHRydWU7XG4gIH1cblxuICBnZXQgbG9nRnJhbWV3b3JrKCk6IGJvb2xlYW4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMuY29uZmlnPy5sb2dzKSkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLmxvZ3MgYXMgTW9kZWxzLkNvbm5lY3Rpb25PcHRpb25zTG9ncykuZnJhbWV3b3JrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmxvZ3MgPT09IHRydWU7XG4gIH1cblxuICBnZXQgbG9nRGIoKTogYm9vbGVhbiB7XG4gICAgaWYgKF8uaXNPYmplY3QodGhpcy5jb25maWc/LmxvZ3MpKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5jb25maWcubG9ncyBhcyBNb2RlbHMuQ29ubmVjdGlvbk9wdGlvbnNMb2dzKS5kYjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5sb2dzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGxvZ01pZ3JhdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgaWYgKF8uaXNPYmplY3QodGhpcy5jb25maWc/LmxvZ3MpKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5jb25maWcubG9ncyBhcyBNb2RlbHMuQ29ubmVjdGlvbk9wdGlvbnNMb2dzKS5taWdyYXRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmxvZ3MgPT09IHRydWU7XG4gIH1cblxuXG5cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3JpZ2luYWxDb25maWc6IE1vZGVscy5Db250ZXh0T3B0aW9uczxcbiAgICAgIGFueSxcbiAgICAgIGFueSxcbiAgICAgIGFueSxcbiAgICAgIGFueSxcbiAgICAgIGFueSxcbiAgICAgIGFueSxcbiAgICAgIGFueVxuICAgID4sXG4gICAgcHJpdmF0ZSBjb25maWdGbjogKFxuICAgICAgZW52OiBhbnksXG4gICAgKSA9PiBNb2RlbHMuQ29udGV4dE9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PixcbiAgKSB7fVxuXG5cblxuICBwdWJsaWMgYXN5bmMgaW5pdChvcHRpb25zPzoge1xuICAgIGluaXRGcm9tUmVjcnVzaXZlQ29udGV4dFJlc292bGU/OiBib29sZWFuO1xuICAgIG92ZXJyaWRlSG9zdD86IHN0cmluZyB8IG51bGw7XG4gICAgb3ZlcnJpZGVSZW1vdGVIb3N0Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBvbmx5TWlncmF0aW9uUnVuPzogYm9vbGVhbjtcbiAgICBvbmx5TWlncmF0aW9uUmV2ZXJ0VG9UaW1lc3RhbXA/OiBudW1iZXI7XG4gIH0pIHtcbiAgICBjb25zdCB7XG4gICAgICBpbml0RnJvbVJlY3J1c2l2ZUNvbnRleHRSZXNvdmxlLFxuICAgICAgb3ZlcnJpZGVIb3N0LFxuICAgICAgb3ZlcnJpZGVSZW1vdGVIb3N0LFxuICAgICAgb25seU1pZ3JhdGlvblJ1bixcbiAgICAgIG9ubHlNaWdyYXRpb25SZXZlcnRUb1RpbWVzdGFtcCxcbiAgICB9ID0gb3B0aW9ucyB8fCB7fTsgLy8gVE9ETyB1c2UgaXQgP1xuXG4gICAgdGhpcy5pbml0ZWQgPSB0cnVlO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm9ubHlNaWdyYXRpb25SdW4gPSBvbmx5TWlncmF0aW9uUnVuO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm9ubHlNaWdyYXRpb25SZXZlcnRUb1RpbWVzdGFtcCA9IG9ubHlNaWdyYXRpb25SZXZlcnRUb1RpbWVzdGFtcDtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuY29uZmlnRm4oRU5WKTtcbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZy5kYXRhYmFzZSkpIHtcbiAgICAgIHRoaXMuY29uZmlnLmRhdGFiYXNlID0gTW9kZWxzLkRhdGFiYXNlQ29uZmlnLmZyb20oXG4gICAgICAgIHRoaXMuY29uZmlnLmRhdGFiYXNlIGFzIE1vZGVscy5EYXRhYmFzZUNvbmZpZyxcbiAgICAgICkuZGF0YWJhc2VDb25maWdUeXBlT1JNO1xuICAgIH1cbiAgICBpZiAob3ZlcnJpZGVIb3N0ICYmIG92ZXJyaWRlUmVtb3RlSG9zdCkge1xuICAgICAgSGVscGVycy50aHJvdyhcbiAgICAgICAgYFt0YW9uLWNvbmZpZ10gWW91IGNhbid0IGhhdmUgb3ZlcnJpZGVIb3N0IGFuZCBvdmVycmlkZVJlbW90ZUhvc3QgYXQgdGhlIHNhbWUgdGltZWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnLmhvc3QgPSAhXy5pc1VuZGVmaW5lZChvdmVycmlkZUhvc3QpXG4gICAgICA/IG92ZXJyaWRlSG9zdFxuICAgICAgOiB0aGlzLmNvbmZpZy5ob3N0O1xuICAgIHRoaXMuY29uZmlnLnJlbW90ZUhvc3QgPSAhXy5pc1VuZGVmaW5lZChvdmVycmlkZVJlbW90ZUhvc3QpXG4gICAgICA/IG92ZXJyaWRlUmVtb3RlSG9zdFxuICAgICAgOiB0aGlzLmNvbmZpZy5yZW1vdGVIb3N0O1xuXG4gICAgdGhpcy5jb25maWcuaG9zdCA9IHRoaXMuaG9zdCA9PT0gbnVsbCA/IHZvaWQgMCA6IHRoaXMuaG9zdDtcbiAgICB0aGlzLmNvbmZpZy5yZW1vdGVIb3N0ID1cbiAgICAgIHRoaXMucmVtb3RlSG9zdCA9PT0gbnVsbCA/IHZvaWQgMCA6IHRoaXMucmVtb3RlSG9zdDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLmhvc3QgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5ob3N0LnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmhvc3Quc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKVxuICAgICkge1xuICAgICAgSGVscGVycy50aHJvdyhcbiAgICAgICAgYFt0YW9uLWNvbmZpZ10gWW91ciAnaG9zdCcgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly9gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5yZW1vdGVIb3N0ICYmXG4gICAgICAhdGhpcy5jb25maWcucmVtb3RlSG9zdC5zdGFydHNXaXRoKCdodHRwOi8vJykgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5yZW1vdGVIb3N0LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJylcbiAgICApIHtcbiAgICAgIEhlbHBlcnMudGhyb3coXG4gICAgICAgIGBbdGFvbi1jb25maWddIFlvdXIgJ3JlbW90ZUhvc3QnIG11c3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vYCxcbiAgICAgICk7XG4gICAgfVxuXG5cbiAgICAvL0B0cy1leHBlY3QtZXJyb3Igb3ZlcnJpZGluZyByZWFkb25seVxuICAgIHRoaXMuc2tpcFdyaXRpbmdTZXJ2ZXJSb3V0ZXMgPSBfLmlzQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnNraXBXcml0aW5nU2VydmVyUm91dGVzLFxuICAgIClcbiAgICAgID8gdGhpcy5jb25maWcuc2tpcFdyaXRpbmdTZXJ2ZXJSb3V0ZXNcbiAgICAgIDogZmFsc2U7XG5cblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmhvc3QpIHtcbiAgICAgIHRoaXMubW9kZSA9ICdiYWNrZW5kLWZyb250ZW5kKHRjcCt1ZHApJztcbi8qICovXG4vKiAqL1xuICBcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcucmVtb3RlSG9zdCkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmhvc3QpIHtcbiAgICAgICAgSGVscGVycy50aHJvdyhcbiAgICAgICAgICBgW3Rhb25dIFlvdSBjYW4ndCBoYXZlIHJlbW90ZUhvc3QgYW5kIGhvc3QgYXQgdGhlIHNhbWUgdGltZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLm1vZGUgPSAncmVtb3RlLWJhY2tlbmQodGNwK3VkcCknO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy51c2VJcGNXaGVuRWxlY3Ryb24gJiYgSGVscGVycy5pc0VsZWN0cm9uKSB7XG4gICAgICBpZiAoSGVscGVycy5pc1dlYlNRTCkge1xuICAgICAgICB0aGlzLm1vZGUgPSAnYmFja2VuZC1mcm9udGVuZCh3ZWJzcWwtZWxlY3Ryb24pJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9kZSA9ICdiYWNrZW5kLWZyb250ZW5kKGlwYy1lbGVjdHJvbiknO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5tb2RlICYmICF0aGlzLmNvbmZpZy5hYnN0cmFjdCkge1xuICAgICAgSGVscGVycy5lcnJvcihcbiAgICAgICAgYFt0YW9uXSBDb250ZXh0IFwiJHt0aGlzLmNvbnRleHROYW1lfVwiOiBZb3UgbmVlZCB0byBwcm92aWRlIGhvc3Qgb3IgcmVtb3RlSG9zdCBvciB1c2VJcGNXaGVuRWxlY3Ryb25gLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4vKiAqL1xuLyogKi9cbiAgXG4gICAgfVxuXG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5kYXRhYmFzZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kYXRhYmFzZUNvbmZpZyA9IHRoaXMuZ2V0QXV0b0dlbmVyYXRlZENvbmZpZygpO1xuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZy5kYXRhYmFzZSkpIHtcbiAgICAgIHRoaXMuZGF0YWJhc2VDb25maWcgPSBfLm1lcmdlKFxuICAgICAgICB0aGlzLmdldEF1dG9HZW5lcmF0ZWRDb25maWcoKSxcbiAgICAgICAgXy5jbG9uZURlZXAodGhpcy5jb25maWcuZGF0YWJhc2UpLFxuICAgICAgKSBhcyBNb2RlbHMuRGF0YWJhc2VDb25maWdUeXBlT3JtO1xuICAgIH1cblxuXG5cbiAgICBpZiAodGhpcy5jb25maWcuc2Vzc2lvbikge1xuICAgICAgdGhpcy5zZXNzaW9uID0gXy5jbG9uZURlZXAodGhpcy5jb25maWcuc2Vzc2lvbik7XG4gICAgICBjb25zdCBvbmVIb3VyID0gMTAwMCAqIDYwICogNjAgKiAxOyAvLyAyNDtcbiAgICAgIGlmICghdGhpcy5zZXNzaW9uLmNvb2tpZU1heEFnZSkge1xuICAgICAgICB0aGlzLnNlc3Npb24uY29va2llTWF4QWdlID0gb25lSG91cjtcbiAgICAgIH1cblxuICAgICAgYXhpb3MuZGVmYXVsdHMud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICB9XG5cblxuXG4gICAgdGhpcy5jb25maWcuY29udGV4dHMgPSB0aGlzLmNvbmZpZy5jb250ZXh0cyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5lbnRpdGllcyA9IHRoaXMuY29uZmlnLmVudGl0aWVzIHx8IHt9O1xuICAgIHRoaXMuY29uZmlnLmNvbnRyb2xsZXJzID0gdGhpcy5jb25maWcuY29udHJvbGxlcnMgfHwge307XG4gICAgdGhpcy5jb25maWcucmVwb3NpdG9yaWVzID0gdGhpcy5jb25maWcucmVwb3NpdG9yaWVzIHx8IHt9O1xuICAgIHRoaXMuY29uZmlnLnByb3ZpZGVycyA9IHRoaXMuY29uZmlnLnByb3ZpZGVycyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycyA9IHRoaXMuY29uZmlnLnN1YnNjcmliZXJzIHx8IHt9O1xuICAgIHRoaXMuY29uZmlnLm1pZ3JhdGlvbnMgPSB0aGlzLmNvbmZpZy5taWdyYXRpb25zIHx8IHt9O1xuXG4gICAgdGhpcy5jb25maWcuZW50aXRpZXMgPSB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgICAgICBNb2RlbHMuQ2xhc3NUeXBlLkVOVElUWSxcbiAgICAgICkpLFxuICAgICAgLi4udGhpcy5jb25maWcuZW50aXRpZXMsXG4gICAgfTtcblxuICAgIHRoaXMuY29uZmlnLmNvbnRyb2xsZXJzID0ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICAgICAgTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSLFxuICAgICAgKSksXG4gICAgICAuLi50aGlzLmNvbmZpZy5jb250cm9sbGVycyxcbiAgICB9O1xuXG4gICAgdGhpcy5jb25maWcucHJvdmlkZXJzID0ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICAgICAgTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUixcbiAgICAgICkpLFxuICAgICAgLi4udGhpcy5jb25maWcucHJvdmlkZXJzLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycyA9IHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgICAgIE1vZGVscy5DbGFzc1R5cGUuU1VCU0NSSUJFUixcbiAgICAgICkpLFxuICAgICAgLi4udGhpcy5jb25maWcuc3Vic2NyaWJlcnMsXG4gICAgfTtcblxuICAgIHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyA9IHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgICAgIE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWSxcbiAgICAgICkpLFxuICAgICAgLi4udGhpcy5jb25maWcucmVwb3NpdG9yaWVzLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbmZpZy5taWdyYXRpb25zID0ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICAgICAgTW9kZWxzLkNsYXNzVHlwZS5NSUdSQVRJT04sXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLm1pZ3JhdGlvbnMsXG4gICAgfTtcblxuXG5cblxuXG5cbiAgICB0aGlzLmNvbmZpZy5jb250cm9sbGVycyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcuY29udHJvbGxlcnMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgfSk7XG4gICAgdGhpcy5jb25maWcucmVwb3NpdG9yaWVzID0gdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgY2xhc3Nlc0lucHV0OiB0aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgfSk7XG4gICAgdGhpcy5jb25maWcucHJvdmlkZXJzID0gdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgY2xhc3Nlc0lucHV0OiB0aGlzLmNvbmZpZy5wcm92aWRlcnMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgIH0pO1xuICAgIHRoaXMuY29uZmlnLnN1YnNjcmliZXJzID0gdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgY2xhc3Nlc0lucHV0OiB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycyxcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjdHg6IHRoaXMsXG4gICAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUuU1VCU0NSSUJFUixcbiAgICB9KTtcblxuICAgIHRoaXMuY29uZmlnLm1pZ3JhdGlvbnMgPSB0aGlzLmNsb25lQ2xhc3Nlc09ialdpdGhOZXdNZXRhZGF0YSh7XG4gICAgICBjbGFzc2VzSW5wdXQ6IHRoaXMuY29uZmlnLm1pZ3JhdGlvbnMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLk1JR1JBVElPTixcbiAgICB9KTtcblxuXG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgdGhpcy5pbmplY3RhYmxlVHlwZXNmcm9tQ29udGV4dHMpIHtcbiAgICAgIHRoaXMuY2xhc3NJbnN0YW5jZXNCeU5hbWVPYmpbY2xhc3NUeXBlTmFtZV0gPSB7fTtcbiAgICAgIHRoaXMub2JqV2l0aENsYXNzZXNJbnN0YW5jZXNBcnJbY2xhc3NUeXBlTmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgdGhpcy5pbmplY3RhYmxlVHlwZXNmcm9tQ29udGV4dHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlSW5zdGFuY2VzKFxuICAgICAgICB0aGlzLmNvbmZpZ1tNb2RlbHMuQ2xhc3NUeXBlS2V5W2NsYXNzVHlwZU5hbWVdXSxcbiAgICAgICAgY2xhc3NUeXBlTmFtZSxcbiAgICAgICk7XG4gICAgfVxuXG5cbiAgICBpZiAoIXRoaXMuaXNSdW5PclJldmVydE9ubHlNaWdyYXRpb25BcHBTdGFydCkge1xuXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnYmFja2VuZC1mcm9udGVuZCh0Y3ArdWRwKScgJiYgIXRoaXMuY29uZmlnLmFic3RyYWN0KSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICAgIH1cblxuXG5cbiAgICAgIGlmICghdGhpcy5jb25maWcuYWJzdHJhY3QpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZFJlYWx0aW1lID0gISF0aGlzLmNvbmZpZy5kaXNhYmxlZFJlYWx0aW1lO1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgICB0aGlzLnJlYWx0aW1lID0gbmV3IFJlYWx0aW1lQ29yZSh0aGlzKTtcbiAgICAgIH1cblxuICAgIH1cblxuXG5cbiAgICBpZiAodGhpcy5jb25maWcuYWJzdHJhY3QpIHtcbiAgICAgIHRoaXMubG9nRnJhbWV3b3JrICYmXG4gICAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgICBgW3Rhb25dIENyZWF0ZSBhYnN0cmFjdCBjb250ZXh0OiAke3RoaXMuY29uZmlnLmNvbnRleHROYW1lfWAsXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5yZW1vdGVIb3N0KSB7XG4gICAgICAgIHRoaXMubG9nRnJhbWV3b3JrICYmXG4gICAgICAgICAgSGVscGVycy5pbmZvKFxuICAgICAgICAgICAgYFt0YW9uXSBDcmVhdGUgY29udGV4dCBmb3IgcmVtb3RlIGhvc3Q6ICR7dGhpcy5jb25maWcucmVtb3RlSG9zdH1gLFxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgICAgIEhlbHBlcnMuaW5mbyhgW3Rhb25dIENyZWF0ZSBjb250ZXh0IGZvciBob3N0OiAke3RoaXMuY29uZmlnLmhvc3R9YCk7XG4gICAgICB9XG4gICAgfVxuXG5cblxuICAgIE9iamVjdC5rZXlzKHRoaXMuY29uZmlnKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0aGlzLm9yaWdpbmFsQ29uZmlnW2tleV0gPSB0aGlzLmNvbmZpZ1trZXldO1xuICAgIH0pO1xuICB9XG5cblxuXG4gIHByaXZhdGUgZ2V0QXV0b0dlbmVyYXRlZENvbmZpZygpOiBNb2RlbHMuRGF0YWJhc2VDb25maWdUeXBlT3JtIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGdldCBuZ1pvbmUoKTogYW55IHtcblxuICAgIHJldHVybiBFbmRwb2ludENvbnRleHQubmdab25lO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cblxuXG4gIHN0YXJ0U2VydmVyKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgZGlzcGxheVJvdXRlcyhhcHApIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIGdldCBtb2RlQWxsb3dzRGF0YWJhc2VDcmVhdGlvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tb2RlID09PSAnYmFja2VuZC1mcm9udGVuZCh0Y3ArdWRwKScgfHxcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2JhY2tlbmQtZnJvbnRlbmQod2Vic3FsKScgfHxcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2JhY2tlbmQtZnJvbnRlbmQoaXBjLWVsZWN0cm9uKSdcbiAgICApO1xuICB9XG5cblxuXG5cbiAgcHJpdmF0ZSBjbG9uZUNsYXNzV2l0aE5ld01ldGFkYXRhID0gPFxuICAgIFQgZXh0ZW5kcyB7IG5ldyAoLi4uYXJnczogYW55W10pOiBhbnkgfSxcbiAgPih7XG4gICAgQmFzZUNsYXNzLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb25maWcsXG4gICAgY3R4LFxuICAgIGNsYXNzVHlwZSxcbiAgfToge1xuICAgIEJhc2VDbGFzczogVDtcbiAgICBjbGFzc05hbWU6IHN0cmluZztcbiAgICBjb25maWc6IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuICAgIGN0eDogRW5kcG9pbnRDb250ZXh0O1xuICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZTtcbiAgfSk6IFQgPT4ge1xuXG4gICAgY29uc3QgY2xvbmVDbGFzcyA9ICgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgQmFzZUNsYXNzW1N5bWJvbHMuZnVsbENsYXNzTmFtZVN0YXRpY1Byb3BlcnR5XSA9PT1cbiAgICAgICAgYCR7Y3R4LmNvbnRleHROYW1lfS4ke2NsYXNzTmFtZX1gXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIEJhc2VDbGFzcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XG5cblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHN0YXRpYyBbU3ltYm9scy5vcmlnbmFsQ2xhc3NdID0gQmFzZUNsYXNzO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc3RhdGljIFtTeW1ib2xzLmZ1bGxDbGFzc05hbWVTdGF0aWNQcm9wZXJ0eV0gPSBgJHtjdHguY29udGV4dE5hbWV9LiR7Y2xhc3NOYW1lfWA7XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzdGF0aWMgW1N5bWJvbHMuY2xhc3NOYW1lU3RhdGljUHJvcGVydHldID0gY2xhc3NOYW1lO1xuXG4gICAgICAgIHN0YXRpYyBbU3ltYm9scy5jdHhJbkNsYXNzT3JDbGFzc09ial0gPSBjdHg7XG5cbiAgICAgICAgc3RhdGljIF9fZ2V0RnVsbFBhdGhGb3JDbGFzc19fKGFyciA9IFtdKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXNbU3ltYm9scy5mdWxsQ2xhc3NOYW1lU3RhdGljUHJvcGVydHldO1xuICAgICAgICAgIGFyci5wdXNoKG5hbWUpO1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzW1N5bWJvbHMub3JpZ25hbENsYXNzXSAmJiAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICB0aGlzW1N5bWJvbHMub3JpZ25hbENsYXNzXS5fX2dldEZ1bGxQYXRoRm9yQ2xhc3NfX1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpc1tTeW1ib2xzLm9yaWduYWxDbGFzc10uX19nZXRGdWxsUGF0aEZvckNsYXNzX18oYXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFyci5qb2luKCcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGdldCBmdWxsUGF0aEZvckNsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX19nZXRGdWxsUGF0aEZvckNsYXNzX18oKTtcbiAgICAgICAgfVxuICAgICAgICBbU3ltYm9scy5jdHhJbkNsYXNzT3JDbGFzc09ial0gPSBjdHg7XG5cblxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2xvbmVDbGFzc0Z1bmN0aW9uID0gY2xvbmVDbGFzcygpO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgcmV0dXJuIGNsb25lQ2xhc3NGdW5jdGlvbjtcbiAgfTtcblxuXG5cblxuXG4gIHByaXZhdGUgY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhID0gKHtcbiAgICBjbGFzc2VzSW5wdXQsXG4gICAgY29uZmlnLFxuICAgIGN0eCxcbiAgICBjbGFzc1R5cGUsXG4gIH06IHtcbiAgICBjbGFzc2VzSW5wdXQ6IGFueTtcbiAgICBjb25maWc6IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuICAgIGN0eDogRW5kcG9pbnRDb250ZXh0O1xuICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZTtcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGNsYXNzZXMgPSB7fTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNsYXNzZXNJbnB1dCB8fCB7fSkpIHtcbiAgICAgIGNvbnN0IEJhc2VDbGFzcyA9IGNsYXNzZXNJbnB1dFtrZXldO1xuXG4gICAgICBpZiAoIUJhc2VDbGFzcykge1xuICAgICAgICBIZWxwZXJzLmVycm9yKGBDbGFzcyAke2tleX0gaXMgbm90IGRlZmluZWQgaW4gY29udGV4dCAke2N0eC5jb250ZXh0TmFtZX1cblxuICAgICAgICBQbGVhc2UgY2hlY2sgaWYgeW91IGhhdmUgY29ycmVjdCBpbXBvcnQgaW4gY29udGV4dCBmaWxlXG5cbiAgICAgICAgYCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc05hbWUgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICBTeW1ib2xzLm1ldGFkYXRhLmNsYXNzTmFtZSxcbiAgICAgICAgQmFzZUNsYXNzLFxuICAgICAgKTtcblxuXG5cblxuXG4gICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwga2V5O1xuICAgICAgQmFzZUNsYXNzW1N5bWJvbHMuY2xhc3NOYW1lU3RhdGljUHJvcGVydHldID0gY2xhc3NOYW1lO1xuXG4gICAgICBjb25zdCBjbG9uZWRDbGFzcyA9IHRoaXMuY2xvbmVDbGFzc1dpdGhOZXdNZXRhZGF0YSh7XG4gICAgICAgIEJhc2VDbGFzcyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGN0eCxcbiAgICAgICAgY2xhc3NUeXBlLFxuICAgICAgfSk7XG4gICAgICBjbGFzc2VzW2NsYXNzTmFtZV0gPSBjbG9uZWRDbGFzcztcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH07XG5cblxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUsXG4gICkge1xuICAgIGNvbnN0IGFyciA9IGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0cyhjbGFzc1R5cGUpO1xuICAgIHJldHVybiBhcnIucmVkdWNlKChhY2MsIGMpID0+IHtcbiAgICAgIGFjY1tDbGFzc0hlbHBlcnMuZ2V0TmFtZShjKV0gPSBjO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHMoXG4gICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLFxuICAgIGFyciA9IFtdLFxuICApIHtcbiAgICBjb25zdCBjb250ZXh0cyA9IE9iamVjdC52YWx1ZXModGhpcy5jb25maWcuY29udGV4dHMgfHwge30pIGFzIFJldHVyblR5cGU8XG4gICAgICB0eXBlb2YgY3JlYXRlQ29udGV4dFxuICAgID5bXTtcblxuXG5cbiAgICBmb3IgKGNvbnN0IGN0eCBvZiBjb250ZXh0cykge1xuXG4gICAgICBjb25zdCByZWYgPSBhd2FpdCBjdHguX19yZWYoKTtcblxuICAgICAgY29uc3QgY2xhc3Nlc0lucHV0ID0gcmVmLmdldENsYXNzRnVuQnkoY2xhc3NUeXBlKTtcblxuXG4gICAgICBjb25zdCBjbG9uZWRDbGFzc2VzID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgICAgdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgICAgIGNsYXNzZXNJbnB1dCxcbiAgICAgICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgICAgIGN0eDogdGhpcyxcbiAgICAgICAgICBjbGFzc1R5cGUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgY2xvbmVkQ2xhc3Nlcy5mb3JFYWNoKGMgPT4gYXJyLnB1c2goYykpO1xuXG4gICAgICBhd2FpdCByZWYuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0cyhjbGFzc1R5cGUsIGFycik7XG4gICAgfVxuICAgIHJldHVybiBhcnIgYXMgRnVuY3Rpb25bXTtcbiAgfVxuXG5cblxuICBnZXRDbGFzc0luc3RhbmNlT2JqQnkoY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jbGFzc0luc3RhbmNlc0J5TmFtZU9ialtjbGFzc1R5cGVdO1xuICB9XG5cblxuXG4gIHByaXZhdGUgZ2V0Q2xhc3Nlc0luc3RhbmNlc0FyckJ5KGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5vYmpXaXRoQ2xhc3Nlc0luc3RhbmNlc0FycltjbGFzc1R5cGVdO1xuICB9XG5cblxuXG4gIGluamVjdDxUPihcbiAgICBjdG9yOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBsb2NhbEluc3RhbmNlPzogYm9vbGVhbjtcbiAgICAgIGNvbnRleHRDbGFzc0luc3RhbmNlPzogQmFzZUNsYXNzO1xuICAgICAgbG9jYUluc3RhbmNlQ29uc3RydWN0b3JBcmdzPzogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBjdG9yPjtcbiAgICB9LFxuICApOiBUIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fSBhcyBhbnk7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IENsYXNzSGVscGVycy5nZXROYW1lKGN0b3IpO1xuXG4gICAgY29uc3QgbG9jYUluc3RhbmNlQ29uc3RydWN0b3JBcmdzID1cbiAgICAgIG9wdGlvbnMubG9jYUluc3RhbmNlQ29uc3RydWN0b3JBcmdzIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuaXNDTGFzc1R5cGUoTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZLCBjdG9yKSkge1xuICAgICAgb3B0aW9ucy5sb2NhbEluc3RhbmNlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8ubG9jYWxJbnN0YW5jZSkge1xuICAgICAgY29uc3QgY3R4Q2xhc3NGbiA9IHRoaXMuZ2V0Q2xhc3NGdW5CeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuICAgICAgbGV0IGVudGl0eU5hbWU6IHN0cmluZyA9ICcnO1xuXG4gICAgICBpZiAoY2xhc3NOYW1lID09PSAnQmFzZVJlcG9zaXRvcnknKSB7XG4gICAgICAgIGNvbnN0IGVudGl0eUZuID0gbG9jYUluc3RhbmNlQ29uc3RydWN0b3JBcmdzWzBdO1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdHlGbiAmJiBlbnRpdHlGbigpO1xuICAgICAgICBlbnRpdHlOYW1lID0gZW50aXR5ICYmIENsYXNzSGVscGVycy5nZXROYW1lKGVudGl0eSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy5jb250ZXh0Q2xhc3NJbnN0YW5jZVt0aGlzLmxvY2FsSW5zdGFjZU9ialN5bWJvbF0pIHtcbiAgICAgICAgb3B0aW9ucy5jb250ZXh0Q2xhc3NJbnN0YW5jZVt0aGlzLmxvY2FsSW5zdGFjZU9ialN5bWJvbF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluc3RhbmNlS2V5ID0gY2xhc3NOYW1lICsgKGVudGl0eU5hbWUgPyBgLiR7ZW50aXR5TmFtZX1gIDogJycpO1xuICAgICAgY29uc3QgZXhpc3RlZCA9XG4gICAgICAgIG9wdGlvbnMuY29udGV4dENsYXNzSW5zdGFuY2VbdGhpcy5sb2NhbEluc3RhY2VPYmpTeW1ib2xdW2luc3RhbmNlS2V5XTtcbiAgICAgIGlmIChleGlzdGVkKSB7XG5cbiAgICAgICAgcmV0dXJuIGV4aXN0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghY3R4Q2xhc3NGbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBhYmxlIHRvIGluamVjdCBcIiR7Y2xhc3NOYW1lfVwiIGluc2lkZSBjb250ZXh0IFwiJHt0aGlzLmNvbnRleHROYW1lfVwiXG5cbiAgICAgICAgTWFrZSBzdXJlIHRoZXkgc2hhcmUgdGhlIHNhbWUgY29udGV4dCBvciBpbXBvcnQgY29udGV4dCB3aGVyZSBcIiR7Y2xhc3NOYW1lfVwiIGlzIGRlZmluZWQuXG5cbiAgICAgICAgYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluamVjdGVkSW5zdGFuY2UgPSBuZXcgKGN0eENsYXNzRm4gYXMgYW55KShcbiAgICAgICAgLi4ubG9jYUluc3RhbmNlQ29uc3RydWN0b3JBcmdzLFxuICAgICAgKTtcbiAgICAgIG9wdGlvbnMuY29udGV4dENsYXNzSW5zdGFuY2VbdGhpcy5sb2NhbEluc3RhY2VPYmpTeW1ib2xdW2luc3RhbmNlS2V5XSA9XG4gICAgICAgIGluamVjdGVkSW5zdGFuY2U7XG5cbiAgICAgIHJldHVybiBpbmplY3RlZEluc3RhbmNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHRTY29wZUluc3RhbmNlID0gdGhpcy5hbGxDbGFzc2VzSW5zdGFuY2VzW2NsYXNzTmFtZV07XG5cblxuXG4gICAgcmV0dXJuIGNvbnRleHRTY29wZUluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIGFsaWFzIGZvciBpbmplY3RcbiAgICovXG4gIGdldEluc3RhbmNlQnk8VD4oY3RvcjogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCk6IFQge1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgIHJldHVybiB0aGlzLmluamVjdChjdG9yLCB7IGxvY2FsSW5zdGFuY2U6IGZhbHNlIH0pO1xuICB9XG5cblxuXG4gIGNoZWNrSWZDb250ZXh0SW5pdGlhbGl6ZWQoKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5jb25maWcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBjaGVjayBpZiB5b3VyIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG5cblxuICAgICAgYXdhaXQgQ29udGV4dC5pbml0aWFsaXplKCk7XG5cblxuXG4gICAgICBgKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgZ2V0Q2xhc3NGdW5CeShjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpIHtcbiAgICB0aGlzLmNoZWNrSWZDb250ZXh0SW5pdGlhbGl6ZWQoKTtcbiAgICBzd2l0Y2ggKGNsYXNzVHlwZSkge1xuICAgICAgY2FzZSBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVI6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb250cm9sbGVycztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5FTlRJVFk6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5lbnRpdGllcztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnByb3ZpZGVycztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcucmVwb3NpdG9yaWVzO1xuICAgICAgY2FzZSBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVI6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5NSUdSQVRJT046XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5taWdyYXRpb25zO1xuICAgIH1cbiAgfVxuXG4gIGlzQ0xhc3NUeXBlKGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSwgY2xhc3NGbjogRnVuY3Rpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmdldENsYXNzRnVuQnkoY2xhc3NUeXBlKVtDbGFzc0hlbHBlcnMuZ2V0TmFtZShjbGFzc0ZuKV07XG4gIH1cblxuICAvKipcbiAgICogT25seSBmb3IgaW5qZWN0YWJsZSB0eXBlc1xuICAgKiBPbmx5IGZvciBjbGFzc1R5cGU6IENPTlRST0xMRVIsIFJFUE9TSVRPUlksIFBST1ZJREVSXG4gICAqL1xuICBnZXRDbGFzc0Z1bkJ5Q2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogRnVuY3Rpb24ge1xuICAgIGZvciAoY29uc3QgY2xhc3NUeXBlTmFtZSBvZiB0aGlzLmFsbFR5cGVzZnJvbUNvbnRleHRzKSB7XG4gICAgICBjb25zdCBjbGFzc2VzRm9ySW5qZWN0YWJsZVR5cGUgPVxuICAgICAgICB0aGlzLmNvbmZpZ1tNb2RlbHMuQ2xhc3NUeXBlS2V5W2NsYXNzVHlwZU5hbWVdXTtcblxuICAgICAgaWYgKGNsYXNzZXNGb3JJbmplY3RhYmxlVHlwZVtjbGFzc05hbWVdKSB7XG4gICAgICAgIHJldHVybiBjbGFzc2VzRm9ySW5qZWN0YWJsZVR5cGVbY2xhc3NOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDbGFzc0Z1bkJ5Q2xhc3MoY2xhc3NGdW5jdGlvbjogRnVuY3Rpb24pOiBGdW5jdGlvbiB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NIZWxwZXJzLmdldE5hbWUoY2xhc3NGdW5jdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3NGdW5CeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuICB9XG5cbiAgZ2V0Q2xhc3NGdW5CeUFycihjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmdldENsYXNzRnVuQnkoY2xhc3NUeXBlKSB8fCB7fSkgYXMgRnVuY3Rpb25bXTtcbiAgfVxuXG5cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUluc3RhbmNlcyhjbGFzc2VzOiBhbnksIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSkge1xuXG5cblxuXG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzRm4gb2YgW1xuXG4gICAgICAuLi5PYmplY3QudmFsdWVzKGNsYXNzZXMpLFxuICAgIF0pIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gRElUYW9uQ29udGFpbmVyLnJlc29sdmUoY2xhc3NGbiBhcyBhbnkpIGFzIGFueTtcbiAgICAgIGNvbnN0IGNsYXNzSW5zdGFuY2VzQnlOYW1lT2JqID0gdGhpcy5jbGFzc0luc3RhbmNlc0J5TmFtZU9ialtjbGFzc1R5cGVdO1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NIZWxwZXJzLmdldE5hbWUoY2xhc3NGbik7XG5cbiAgICAgIGNsYXNzSW5zdGFuY2VzQnlOYW1lT2JqW2NsYXNzTmFtZV0gPSBpbnN0YW5jZTtcblxuICAgICAgdGhpcy5jb25maWdbTW9kZWxzLkNsYXNzVHlwZUtleVtjbGFzc1R5cGVdXVtjbGFzc05hbWVdID0gY2xhc3NGbjtcbiAgICAgIHRoaXMub2JqV2l0aENsYXNzZXNJbnN0YW5jZXNBcnJbY2xhc3NUeXBlXS5wdXNoKGluc3RhbmNlKTtcbiAgICAgIHRoaXMuYWxsQ2xhc3Nlc0luc3RhbmNlc1tjbGFzc05hbWVdID0gaW5zdGFuY2U7XG4gICAgfVxuICB9XG5cblxuXG4gIGFzeW5jIHJlaW5pdENvbnRyb2xsZXJzKCkge1xuICAgIGlmICh0aGlzLnJlbW90ZUhvc3QgfHwgT2JqZWN0LmtleXModGhpcy5jb25maWcubWlncmF0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBjb25zdCBjb250cm9sbGVycyA9IHRoaXMuZ2V0Q2xhc3Nlc0luc3RhbmNlc0FyckJ5KFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSLFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IGN0cmwgb2YgY29udHJvbGxlcnMpIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY3RybC5pbml0RXhhbXBsZURiRGF0YSkpIHtcbiAgICAgICAgYXdhaXQgSGVscGVycy5ydW5TeW5jT3JBc3luYyh7XG4gICAgICAgICAgZnVuY3Rpb25GbjogY3RybC5pbml0RXhhbXBsZURiRGF0YSxcbiAgICAgICAgICBjb250ZXh0OiBjdHJsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cblxuXG4gIH1cbiAgYXN5bmMgaW5pdENsYXNzZXMoKSB7XG4gICAgaWYgKHRoaXMucmVtb3RlSG9zdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgW1xuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUixcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWSxcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuRU5USVRZLFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5NSUdSQVRJT04sXG4gICAgXSkge1xuXG5cblxuXG4gICAgICBmb3IgKGNvbnN0IGNsYXNzRnVuIG9mIHRoaXMuZ2V0Q2xhc3NGdW5CeUFycihjbGFzc1R5cGVOYW1lKSBhcyBhbnlbXSkge1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNsYXNzRnVuLl8pKSB7XG4gICAgICAgICAgYXdhaXQgSGVscGVycy5ydW5TeW5jT3JBc3luYyh7XG4gICAgICAgICAgICBmdW5jdGlvbkZuOiBjbGFzc0Z1bi5fLFxuICAgICAgICAgICAgY29udGV4dDogY2xhc3NGdW4sXG4gICAgICAgICAgfSk7XG5cblxuXG5cblxuXG4gICAgICAgIH1cbiAgICAgIH1cblxuXG5cblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2xhc3NUeXBlTmFtZSBvZiBbXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZLFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSLFxuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5NSUdSQVRJT04sXG4gICAgXSkge1xuXG5cblxuXG4gICAgICBmb3IgKGNvbnN0IGN0cmwgb2YgdGhpcy5nZXRDbGFzc2VzSW5zdGFuY2VzQXJyQnkoY2xhc3NUeXBlTmFtZSkpIHtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjdHJsLl8pKSB7XG4gICAgICAgICAgYXdhaXQgSGVscGVycy5ydW5TeW5jT3JBc3luYyh7XG4gICAgICAgICAgICBmdW5jdGlvbkZuOiBjdHJsLl8sXG4gICAgICAgICAgICBjb250ZXh0OiBjdHJsLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cblxuXG5cbiAgICB9XG4gIH1cblxuXG5cbiAgaXNBY3RpdmVPbihjbGFzc0luc3RhbmNlOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICBsZXQgY29udGV4dFJlZjogRW5kcG9pbnRDb250ZXh0ID1cbiAgICAgIGNsYXNzSW5zdGFuY2VbU3ltYm9scy5jdHhJbkNsYXNzT3JDbGFzc09ial07XG4gICAgcmV0dXJuIHRoaXMgPT09IGNvbnRleHRSZWY7XG4gIH1cblxuXG5cbiAgZ2V0IHVyaSgpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmhvc3RcbiAgICAgID8gbmV3IFVSTCh0aGlzLmhvc3QpXG4gICAgICA6IHRoaXMucmVtb3RlSG9zdFxuICAgICAgICA/IG5ldyBVUkwodGhpcy5yZW1vdGVIb3N0KVxuICAgICAgICA6IHZvaWQgMDtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cblxuXG4gIGdldCBpc0h0dHBTZXJ2ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudXJpLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgfVxuXG5cblxuICAvKipcbiAgICogaXBjL3VkcCBuZWVkcyB0aGlzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbnRleHROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb250ZXh0TmFtZTtcbiAgfVxuXG5cblxuICBwdWJsaWMgZ2V0IHB1YmxpY0Fzc2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnB1YmxpY0Fzc2V0cyB8fCBbXTtcbiAgfVxuXG5cblxuICBnZXQgaXNQcm9kdWN0aW9uTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucHJvZHVjdGlvbk1vZGU7XG4gIH1cblxuXG5cbiAgZ2V0IHJlbW90ZUhvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlbW90ZUhvc3Q7XG4gIH1cblxuXG5cbiAgZ2V0IGhvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmhvc3Q7XG4gIH1cblxuXG5cbiAgZ2V0IG9yZ2luKCkge1xuICAgIHJldHVybiB0aGlzLnVyaT8ub3JpZ2luO1xuICB9XG5cblxuXG4gIGFzeW5jIGluaXRTdWJzY3JpYmVycygpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGFzeW5jIGluaXRFbnRpdGllcygpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuXG4gIGFzeW5jIGluaXREYXRhYmFzZUNvbm5lY3Rpb24oKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cblxuICBpbml0Q29udHJvbGxlcnMoKSB7XG4gICAgaWYgKHRoaXMuaXNSdW5PclJldmVydE9ubHlNaWdyYXRpb25BcHBTdGFydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbGxDb250cm9sbGVycyA9IHRoaXMuZ2V0Q2xhc3NGdW5CeUFycihNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIpO1xuXG4gICAgZm9yIChjb25zdCBjb250cm9sbGVyQ2xhc3NGbiBvZiBhbGxDb250cm9sbGVycykge1xuICAgICAgY29udHJvbGxlckNsYXNzRm5bU3ltYm9scy5jbGFzc01ldGhvZHNOYW1lc10gPVxuICAgICAgICBDbGFzc0hlbHBlcnMuZ2V0TWV0aG9kc05hbWVzKGNvbnRyb2xsZXJDbGFzc0ZuKTtcbiAgICAgIGNvbnN0IGNvbmZpZ3MgPSBDbGFzc0hlbHBlcnMuZ2V0Q29udHJvbGxlckNvbmZpZ3MoY29udHJvbGxlckNsYXNzRm4pO1xuXG4gICAgICBjb25zdCBjbGFzc0NvbmZpZzogTW9kZWxzLlJ1bnRpbWVDb250cm9sbGVyQ29uZmlnID0gY29uZmlnc1swXTtcblxuICAgICAgY29uc3QgcGFyZW50c2NhbGN1bGF0ZWRQYXRoID0gXy5zbGljZShjb25maWdzLCAxKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5tYXAoYmMgPT4ge1xuICAgICAgICAgIGlmIChUYW9uSGVscGVycy5pc0dvb2RQYXRoKGJjLnBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gYmMucGF0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJjLmNsYXNzTmFtZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJy8nKTtcblxuICAgICAgaWYgKFRhb25IZWxwZXJzLmlzR29vZFBhdGgoY2xhc3NDb25maWcucGF0aCkpIHtcbiAgICAgICAgY2xhc3NDb25maWcuY2FsY3VsYXRlZFBhdGggPSBjbGFzc0NvbmZpZy5wYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3NDb25maWcuY2FsY3VsYXRlZFBhdGggPVxuICAgICAgICAgIGAke3BhcmVudHNjYWxjdWxhdGVkUGF0aH0vJHtDbGFzc0hlbHBlcnMuZ2V0TmFtZShjb250cm9sbGVyQ2xhc3NGbil9YFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG4gICAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBiYykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gXy5sYXN0KGFjYykgPT09IGJjID8gYWNjIDogWy4uLmFjYywgYmNdO1xuICAgICAgICAgICAgfSwgW10pXG4gICAgICAgICAgICAuam9pbignLycpO1xuICAgICAgfVxuXG4gICAgICBfLnNsaWNlKGNvbmZpZ3MsIDEpLmZvckVhY2goYmMgPT4ge1xuICAgICAgICBjb25zdCBhbHJlYWR5SXMgPSBjbGFzc0NvbmZpZy5tZXRob2RzO1xuICAgICAgICBjb25zdCB0b01lcmdlID0gXy5jbG9uZURlZXAoYmMubWV0aG9kcyk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRvTWVyZ2UpIHtcbiAgICAgICAgICBpZiAodG9NZXJnZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFhbHJlYWR5SXNba2V5XSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRvTWVyZ2Vba2V5XTtcbiAgICAgICAgICAgIGFscmVhZHlJc1trZXldID0gZWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICAgIHRoaXMubG9nSHR0cCAmJlxuICAgICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXG4gICAgICAgICAgICBgW3Rhb25dW2V4cHJlc3Mtc2VydmVyXSByb3V0ZXMgWyR7Y2xhc3NDb25maWcuY2xhc3NOYW1lfV1gLFxuICAgICAgICAgICk7XG4vKiAqL1xuLyogKi9cbiAgXG5cblxuICAgICAgT2JqZWN0LmtleXMoY2xhc3NDb25maWcubWV0aG9kcykuZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICAgICAgY29uc3QgbWV0aG9kQ29uZmlnOiBNb2RlbHMuTWV0aG9kQ29uZmlnID1cbiAgICAgICAgICBjbGFzc0NvbmZpZy5tZXRob2RzW21ldGhvZE5hbWVdO1xuXG4gICAgICAgIGNvbnN0IHR5cGU6IE1vZGVscy5IdHRwLlJlc3QuSHR0cE1ldGhvZCA9IG1ldGhvZENvbmZpZy50eXBlO1xuICAgICAgICBjb25zdCBleHByZXNzUGF0aCA9IG1ldGhvZENvbmZpZy5nbG9iYWxcbiAgICAgICAgICA/IGAvJHttZXRob2RDb25maWcucGF0aD8ucmVwbGFjZSgvXFwvLywgJycpfWBcbiAgICAgICAgICA6IFRhb25IZWxwZXJzLmdldEV4cHJlc3NQYXRoKGNsYXNzQ29uZmlnLCBtZXRob2RDb25maWcpO1xuXG5cbiAgICAgICAgaWYgKEhlbHBlcnMuaXNOb2RlIHx8IEhlbHBlcnMuaXNXZWJTUUwpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNob3VsZEluaXRDbGllbnQgPVxuICAgICAgICAgIEhlbHBlcnMuaXNCcm93c2VyIHx8IHRoaXMucmVtb3RlSG9zdCB8fCBIZWxwZXJzLmlzV2ViU1FMO1xuXG4gICAgICAgIGlmIChzaG91bGRJbml0Q2xpZW50KSB7XG5cblxuXG5cblxuXG5cbiAgICAgICAgICB0aGlzLmluaXRDbGllbnQoY29udHJvbGxlckNsYXNzRm4sIHR5cGUsIG1ldGhvZENvbmZpZywgZXhwcmVzc1BhdGgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuLyogKi9cbi8qICovXG4gIFxuICAgICAgICB0aGlzLmxvZ0h0dHAgJiYgY29uc29sZS5ncm91cEVuZCgpO1xuLyogKi9cbi8qICovXG4gIFxuICAgIH1cbiAgfVxuXG5cblxuICBwdWJsaWMgd3JpdGVBY3RpdmVSb3V0ZXMoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5yZW1vdGVIb3N0IHx8XG4gICAgICB0aGlzLmlzUnVuT3JSZXZlcnRPbmx5TWlncmF0aW9uQXBwU3RhcnQgfHxcbiAgICAgIHRoaXMuc2tpcFdyaXRpbmdTZXJ2ZXJSb3V0ZXNcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dHM6IEVuZHBvaW50Q29udGV4dFtdID0gW3RoaXNdO1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgcHVibGljIGdldCBtaWRkbGV3YXJlcygpOiBNb2RlbHMuTWlkZGxld2FyZVR5cGVbXSB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBpbml0TWlkZGxld2FyZXMoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIHByaXZhdGUgaW5pdFNlcnZlcihcblxuICAgIHR5cGU6IE1vZGVscy5IdHRwLlJlc3QuSHR0cE1ldGhvZCxcbiAgICBtZXRob2RDb25maWc6IE1vZGVscy5NZXRob2RDb25maWcsXG4gICAgY2xhc3NDb25maWc6IE1vZGVscy5SdW50aW1lQ29udHJvbGxlckNvbmZpZyxcbiAgICBleHByZXNzUGF0aDogc3RyaW5nLFxuICAgIHRhcmdldDogRnVuY3Rpb24sXG5cbiAgKTogYW55IHtcblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG4gICAgY29uc3QgdXJsID0gdGhpcy51cmk7XG5cblxuICAgIGNvbnN0IGdldFJlc3VsdCA9IGFzeW5jIChyZXNvbHZlZFBhcmFtcywgcmVxLCByZXMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBNb2RlbHMuSHR0cC5SZXNwb25zZTxhbnk+ID1cbiAgICAgICAgbWV0aG9kQ29uZmlnLmRlc2NyaXB0b3IudmFsdWUuYXBwbHkoXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQ29udGV4dCBmb3IgbWV0aG9kIEBHRVQsQFBVVCBldGMuXG4gICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5nZXRJbnN0YW5jZUJ5KHRhcmdldCBhcyBhbnkpLFxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFBhcmFtcyBmb3IgbWV0am9kIEBHRVQsIEBQVVQgZXRjLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIHJlc29sdmVkUGFyYW1zLFxuICAgICAgICApO1xuICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGdldFJlc3BvbnNlVmFsdWUocmVzcG9uc2UsIHsgcmVxLCByZXMgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cblxuICAgIHVybC5wYXRobmFtZSA9IHVybC5wYXRobmFtZS5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgIGV4cHJlc3NQYXRoID0gdXJsLnBhdGhuYW1lLnN0YXJ0c1dpdGgoJy8nKVxuICAgICAgPyBgJHt1cmwucGF0aG5hbWV9JHtleHByZXNzUGF0aH1gXG4gICAgICA6IGV4cHJlc3NQYXRoO1xuICAgIGV4cHJlc3NQYXRoID0gZXhwcmVzc1BhdGgucmVwbGFjZSgvXFwvXFwvL2csICcvJyk7XG5cblxuXG4gICAgaWYgKEhlbHBlcnMuaXNFbGVjdHJvbikge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucmVtb3RlSG9zdCkge1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByb3V0ZVBhdGg6IGV4cHJlc3NQYXRoLFxuICAgICAgbWV0aG9kOiBtZXRob2RDb25maWcudHlwZSxcbiAgICB9O1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBjbGllbnQgY2FuIGJlIGJyb3dzZXIgb3Igbm9kZWpzICh3aGVuIHJlbW90ZSBob3N0KVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0Q2xpZW50KFxuXG4gICAgdGFyZ2V0OiBGdW5jdGlvbixcbiAgICB0eXBlOiBNb2RlbHMuSHR0cC5SZXN0Lkh0dHBNZXRob2QsXG4gICAgbWV0aG9kQ29uZmlnOiBNb2RlbHMuSHR0cC5SZXN0Lk1ldGhvZENvbmZpZyxcbiAgICBleHByZXNzUGF0aDogc3RyaW5nLFxuXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IHRoaXM7XG5cbiAgICB0aGlzLmxvZ0h0dHAgJiYgY29uc29sZS5sb2coYCR7dHlwZT8udG9VcHBlckNhc2UoKX0gJHtleHByZXNzUGF0aH0gYCk7XG5cblxuICAgIGxldCBzdG9yYWdlOiBhbnk7XG4gICAgaWYgKEhlbHBlcnMuaXNCcm93c2VyKSB7XG4gICAgICBzdG9yYWdlID0gd2luZG93O1xuICAgIH1cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cbiAgICBjb25zdCBvcmdNZXRob2RzID0gdGFyZ2V0LnByb3RvdHlwZVttZXRob2RDb25maWcubWV0aG9kTmFtZV07XG5cblxuXG4gICAgaWYgKEhlbHBlcnMuaXNFbGVjdHJvbikge1xuICAgICAgdGFyZ2V0LnByb3RvdHlwZVttZXRob2RDb25maWcubWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICBjb25zdCByZWNlaXZlZCA9IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICAgICAgY29uc3QgeyByZXF1ZXN0LCByZXNwb25zZSB9ID0gVGFvbkhlbHBlcnMud2Vic3FsTW9ja3MoaGVhZGVycyk7XG5cbiAgICAgICAgICBIZWxwZXJzLmlwY1JlbmRlcmVyLm9uY2UoXG4gICAgICAgICAgICBUYW9uSGVscGVycy5pcGNLZXlOYW1lUmVzcG9uc2UodGFyZ2V0LCBtZXRob2RDb25maWcsIGV4cHJlc3NQYXRoKSxcbiAgICAgICAgICAgIChldmVudCwgcmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGxldCByZXM6IGFueSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coeyByZXNwb25zZURhdGEgfSk7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHJlcztcbiAgICAgICAgICAgICAgICByZXMgPSBuZXcgTW9kZWxzTmcyUmVzdC5IdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgaXNBcnJheTogdm9pZCAwIGFzIGFueSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2RDb25maWcudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBgJHtjdHgudXJpLm9yaWdpbn0ke1xuICAgICAgICAgICAgICAgICAgICAgICcnIC8vIFRPRE8gZXhwcmVzcyBwYXRoXG4gICAgICAgICAgICAgICAgICAgIH0ke21ldGhvZENvbmZpZy5wYXRofSBgLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIEhlbHBlcnMuaXNCbG9iKGJvZHkpIHx8IF8uaXNTdHJpbmcoYm9keSlcbiAgICAgICAgICAgICAgICAgICAgPyBib2R5XG4gICAgICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICAgICAgICAgICAgICBSZXN0SGVhZGVycy5mcm9tKGhlYWRlcnMpLFxuICAgICAgICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgKCkgPT4gYm9keSxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBIZWxwZXJzLmlwY1JlbmRlcmVyLnNlbmQoXG4gICAgICAgICAgICBUYW9uSGVscGVycy5pcGNLZXlOYW1lUmVxdWVzdCh0YXJnZXQsIG1ldGhvZENvbmZpZywgZXhwcmVzc1BhdGgpLFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVjZWl2ZWRbJ29ic2VydmFibGUnXSA9IGZyb20ocmVjZWl2ZWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlY2VpdmVkLFxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuXG5cblxuICAgIHRhcmdldC5wcm90b3R5cGVbbWV0aG9kQ29uZmlnLm1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKHRoaXM6IHt9LCAuLi5hcmdzKSB7XG5cblxuXG5cblxuICAgICAgaWYgKCFzdG9yYWdlW1N5bWJvbHMub2xkLkVORFBPSU5UX01FVEFfQ09ORklHXSlcbiAgICAgICAgc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR10gPSB7fTtcbiAgICAgIGlmICghc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR11bY3R4LnVyaS5ocmVmXSlcbiAgICAgICAgc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR11bY3R4LnVyaS5ocmVmXSA9IHt9O1xuICAgICAgY29uc3QgZW5kcG9pbnRzID0gc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR107XG4gICAgICBsZXQgcmVzdDogTW9kZWxzTmcyUmVzdC5SZXNvdXJjZU1vZGVsPGFueSwgYW55PjtcbiAgICAgIGlmICghZW5kcG9pbnRzW2N0eC51cmkuaHJlZl1bZXhwcmVzc1BhdGhdKSB7XG4gICAgICAgIGxldCBoZWFkZXJzID0ge307XG4gICAgICAgIGlmIChtZXRob2RDb25maWcuY29udGVudFR5cGUgJiYgIW1ldGhvZENvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgICAgICByZXN0ID0gUmVzb3VyY2UuY3JlYXRlKFxuICAgICAgICAgICAgY3R4LnVyaS5ocmVmLFxuICAgICAgICAgICAgZXhwcmVzc1BhdGgsXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVIgYXMgYW55LFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSBhcyBhbnksXG4gICAgICAgICAgICBSZXN0SGVhZGVycy5mcm9tKHtcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgQWNjZXB0OiBtZXRob2RDb25maWcuY29udGVudFR5cGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSAmJiBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICAgICAgcmVzdCA9IFJlc291cmNlLmNyZWF0ZShcbiAgICAgICAgICAgIGN0eC51cmkuaHJlZixcbiAgICAgICAgICAgIGV4cHJlc3NQYXRoLFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSIGFzIGFueSxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLkNJUkNVUkFMX09CSkVDVFNfTUFQX0JPRFkgYXMgYW55LFxuICAgICAgICAgICAgUmVzdEhlYWRlcnMuZnJvbSh7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBtZXRob2RDb25maWcuY29udGVudFR5cGUsXG4gICAgICAgICAgICAgIEFjY2VwdDogbWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICByZXNwb25zZXR5cGVheGlvczogbWV0aG9kQ29uZmlnLnJlc3BvbnNlVHlwZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW1ldGhvZENvbmZpZy5jb250ZW50VHlwZSAmJiBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICAgICAgcmVzdCA9IFJlc291cmNlLmNyZWF0ZShcbiAgICAgICAgICAgIGN0eC51cmkuaHJlZixcbiAgICAgICAgICAgIGV4cHJlc3NQYXRoLFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSIGFzIGFueSxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLkNJUkNVUkFMX09CSkVDVFNfTUFQX0JPRFkgYXMgYW55LFxuICAgICAgICAgICAgUmVzdEhlYWRlcnMuZnJvbSh7XG4gICAgICAgICAgICAgIHJlc3BvbnNldHlwZWF4aW9zOiBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0ID0gUmVzb3VyY2UuY3JlYXRlKFxuICAgICAgICAgICAgY3R4LnVyaS5ocmVmLFxuICAgICAgICAgICAgZXhwcmVzc1BhdGgsXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVIgYXMgYW55LFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSBhcyBhbnksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVuZHBvaW50c1tjdHgudXJpLmhyZWZdW2V4cHJlc3NQYXRoXSA9IHJlc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0ID0gZW5kcG9pbnRzW2N0eC51cmkuaHJlZl1bZXhwcmVzc1BhdGhdIGFzIGFueTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWV0aG9kID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgaXNXaXRoQm9keSA9IG1ldGhvZCA9PT0gJ3B1dCcgfHwgbWV0aG9kID09PSAncG9zdCc7XG4gICAgICBjb25zdCBwYXRoUHJhbXMgPSB7fTtcbiAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHt9O1xuICAgICAgbGV0IGJvZHlPYmplY3QgPSB7fTtcbiAgICAgIGFyZ3MuZm9yRWFjaCgocGFyYW0sIGkpID0+IHtcbiAgICAgICAgbGV0IGN1cnJlbnRQYXJhbTogTW9kZWxzLkh0dHAuUmVzdC5QYXJhbUNvbmZpZyA9IHZvaWQgMCBhcyBhbnk7XG5cbiAgICAgICAgZm9yIChsZXQgcHAgaW4gbWV0aG9kQ29uZmlnLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgICBsZXQgdiA9IG1ldGhvZENvbmZpZy5wYXJhbWV0ZXJzW3BwXTtcbiAgICAgICAgICBpZiAodi5pbmRleCA9PT0gaSkge1xuICAgICAgICAgICAgY3VycmVudFBhcmFtID0gdjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnUGF0aCcpIHtcbiAgICAgICAgICBwYXRoUHJhbXNbY3VycmVudFBhcmFtLnBhcmFtTmFtZV0gPSBwYXJhbTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtVHlwZSA9PT0gJ1F1ZXJ5Jykge1xuICAgICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gTWFwcGluZy5kZWNvZGUocGFyYW0sICFjdHguaXNQcm9kdWN0aW9uTW9kZSk7XG4gICAgICAgICAgICBpZiAobWFwcGluZykge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgIGAke1N5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUl9RVUVSWV9QQVJBTVN9JHtjdXJyZW50UGFyYW0ucGFyYW1OYW1lfSBgLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1hcHBpbmcpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlQYXJhbXNbY3VycmVudFBhcmFtLnBhcmFtTmFtZV0gPSBwYXJhbTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IE1hcHBpbmcuZGVjb2RlKHBhcmFtLCAhY3R4LmlzUHJvZHVjdGlvbk1vZGUpO1xuICAgICAgICAgICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVJfUVVFUllfUEFSQU1TLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1hcHBpbmcpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBfLmNsb25lRGVlcChwYXJhbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnSGVhZGVyJykge1xuICAgICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtTmFtZSA9PT0gU3ltYm9scy5vbGQuTURDX0tFWSkge1xuXG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmFtLnBhcmFtTmFtZSxcbiAgICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocGFyYW0pKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoY3VycmVudFBhcmFtLnBhcmFtTmFtZSwgcGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBoZWFkZXIgaW4gcGFyYW0pIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChoZWFkZXIsIHBhcmFtW2hlYWRlcl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtVHlwZSA9PT0gJ0Nvb2tpZScpIHtcbiAgICAgICAgICBSZXNvdXJjZS5Db29raWVzLndyaXRlKFxuICAgICAgICAgICAgY3VycmVudFBhcmFtLnBhcmFtTmFtZSxcbiAgICAgICAgICAgIHBhcmFtLFxuICAgICAgICAgICAgY3VycmVudFBhcmFtLmV4cGlyZUluU2Vjb25kcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnQm9keScpIHtcbiAgICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtTmFtZSkge1xuICAgICAgICAgICAgaWYgKENsYXNzSGVscGVycy5nZXROYW1lKGJvZHlPYmplY3QpID09PSAnRm9ybURhdGEnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW3Rhb24gLSBmcmFtZXdvcmtdIERvbiB1c2UgcGFyYW0gbmFtZXMgd2hlbiBwb3N0aW5nIC8gcHV0dGluZyBGb3JtRGF0YS5cbiAgICAgICAgICAgICAgVXNlIHRoaXM6XG5cbihAVGFvbi5IdHRwLlBhcmFtLkJvZHkoKSBmb3JtRGF0YTogRm9ybURhdGEpIC4uLlxuXG5cbmluc3RlYWRcblxuICAoQFRhb24uSHR0cC5QYXJhbS5Cb2R5KCcke2N1cnJlbnRQYXJhbS5wYXJhbU5hbWV9JykgZm9ybURhdGE6IEZvcm1EYXRhKSAuLi5cblxuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gTWFwcGluZy5kZWNvZGUocGFyYW0sICFjdHguaXNQcm9kdWN0aW9uTW9kZSk7XG4gICAgICAgICAgICBpZiAobWFwcGluZykge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgIGAke1N5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUl9CT0RZX1BBUkFNU30ke2N1cnJlbnRQYXJhbS5wYXJhbU5hbWV9IGAsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFwcGluZyksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5T2JqZWN0W2N1cnJlbnRQYXJhbS5wYXJhbU5hbWVdID0gcGFyYW07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBNYXBwaW5nLmRlY29kZShwYXJhbSwgIWN0eC5pc1Byb2R1Y3Rpb25Nb2RlKTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSX0JPRFlfUEFSQU1TLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1hcHBpbmcpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keU9iamVjdCA9IHBhcmFtO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGJvZHlPYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgICAgIENsYXNzSGVscGVycy5nZXROYW1lKGJvZHlPYmplY3QpICE9PSAnRm9ybURhdGEnXG4gICAgICApIHtcbiAgICAgICAgbGV0IGNpcmN1cmFsRnJvbUl0ZW0gPSBbXTtcbiAgICAgICAgYm9keU9iamVjdCA9IEpTT04xMC5wYXJzZShcbiAgICAgICAgICBKU09OMTAuc3RyaW5naWZ5KGJvZHlPYmplY3QsIHZvaWQgMCwgdm9pZCAwLCBjaXJjcyA9PiB7XG4gICAgICAgICAgICBjaXJjdXJhbEZyb21JdGVtID0gY2lyY3M7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSxcbiAgICAgICAgICBKU09OMTAuc3RyaW5naWZ5KGNpcmN1cmFsRnJvbUl0ZW0pLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHF1ZXJ5UGFyYW1zID09PSAnb2JqZWN0Jykge1xuICAgICAgICBsZXQgY2lyY3VyYWxGcm9tUXVlcnlQYXJhbXMgPSBbXTtcbiAgICAgICAgcXVlcnlQYXJhbXMgPSBKU09OMTAucGFyc2UoXG4gICAgICAgICAgSlNPTjEwLnN0cmluZ2lmeShxdWVyeVBhcmFtcywgdm9pZCAwLCB2b2lkIDAsIGNpcmNzID0+IHtcbiAgICAgICAgICAgIGNpcmN1cmFsRnJvbVF1ZXJ5UGFyYW1zID0gY2lyY3M7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICBTeW1ib2xzLm9sZC5DSVJDVVJBTF9PQkpFQ1RTX01BUF9RVUVSWV9QQVJBTSxcbiAgICAgICAgICBKU09OMTAuc3RyaW5naWZ5KGNpcmN1cmFsRnJvbVF1ZXJ5UGFyYW1zKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuXG4gICAgICBjb25zdCBodHRwUmVzdWx0T2JqID0ge1xuICAgICAgICByZWNlaXZlZDogaXNXaXRoQm9keVxuICAgICAgICAgID8gcmVzdC5tb2RlbChwYXRoUHJhbXMpW21ldGhvZF0oYm9keU9iamVjdCwgW3F1ZXJ5UGFyYW1zXSlcbiAgICAgICAgICA6IHJlc3QubW9kZWwocGF0aFByYW1zKVttZXRob2RdKFtxdWVyeVBhcmFtc10pLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBodHRwUmVzdWx0T2JqO1xuICAgIH07XG5cbiAgfVxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10YW9uIGxpYi9lbmRwb2ludC1jb250ZXh0LnRzIl19
1705
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0L3Rhb24vcHJvamVjdHMvdGFvbi9zcmMvbGliL2VuZHBvaW50LWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsK0NBQStDO0FBaUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUksT0FBTyxFQUFJLE1BQU0sSUFBSSxhQUFhLEVBQUksUUFBUSxFQUFJLFdBQVcsR0FBRyxNQUFNLGtCQUFrQixDQUFDLENBQUEsS0FBSztBQUN6RyxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxJQUFJLEVBQVcsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBUzFCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSXhELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzlELE1BQU0sT0FBTyxlQUFlO0lBTTFCLE1B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O1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQsSUFBSSxNQUFNO1FBRVIsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBRTlCLE9BQU87SUFDVCxDQUFDO0lBSUQsV0FBVztRQUNiLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQsYUFBYSxDQUFDLEdBQUc7UUFDbkIsS0FBSztRQUNMLEtBQUs7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O0lBQ2hDLENBQUM7SUFJRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFJRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFJRCxLQUFLLENBQUMsZUFBZTtRQUN2QixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUlELEtBQUssQ0FBQyxZQUFZO1FBQ3BCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO0lBRUgsQ0FBQztJQUtELEtBQUssQ0FBQyxzQkFBc0I7UUFDOUIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBS0QsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUM7WUFDNUMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxJ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LENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztJQUVILENBQUM7SUFJRCxJQUFXLFdBQVc7UUFDeEIsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSU8sZUFBZTtRQUN6QixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0ws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Q0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lB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TCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFD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LEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ3BELHVCQUF1QixHQUFHLEtBQUssQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztnQkFFRixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDZCxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxFQUM1QyxNQUFNLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQzFDLENBQUM7WUFDSixDQUFDO1lBR0QsTUFBTSxhQUFhLEdBQUc7Z0JBQ3BCLFFBQVEsRUFBRSxVQUFVO29CQUNsQixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDMUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNqRCxDQUFDO1lBQ0YsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQyxDQUFDO0lBRUosQ0FBQztDQUVGO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx5REFBeUQiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVkZWYgKi9cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cbmltcG9ydCB7IFRhb25BZG1pblNlcnZpY2UgfSBmcm9tICcuL3VpL3Rhb24tYWRtaW4tbW9kZS1jb25maWd1cmF0aW9uL3Rhb24tYWRtaW4uc2VydmljZSc7XG5cbmltcG9ydCB7IFV0aWxzT3MsIFV0aWxzIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBjcm9zc1BsYXRmb3JtUGF0aCB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ2xhc3NIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzL2NsYXNzLWhlbHBlcnMnO1xuaW1wb3J0IHsgU3ltYm9scyB9IGZyb20gJy4vc3ltYm9scyc7XG5pbXBvcnQgeyBfLCBIZWxwZXJzIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgdHlwZSB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuL2NyZWF0ZS1jb250ZXh0JztcbmltcG9ydCB7IERJVGFvbkNvbnRhaW5lciB9IGZyb20gJy4vZGVwZW5kZW5jeS1pbmplY3Rpb24vZGktY29udGFpbmVyJztcbmltcG9ydCB7IFRhb25Db250cm9sbGVyT3B0aW9ucyB9IGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL2NvbnRyb2xsZXItZGVjb3JhdG9yJztcbmltcG9ydCB7IFRhb25IZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzL3Rhb24taGVscGVycyc7XG5pbXBvcnQgeyAgIE1hcHBpbmcsICAgTW9kZWxzIGFzIE1vZGVsc05nMlJlc3QsICAgUmVzb3VyY2UsICAgUmVzdEhlYWRlcnMsIH0gZnJvbSAnbmcyLXJlc3QvYnJvd3Nlcic7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG5cbmltcG9ydCB7IEpTT04xMCB9IGZyb20gJ2pzb24xMC9icm93c2VyJztcbmltcG9ydCB7IHBhdGggfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmltcG9ydCB7IGZyb20sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVByb2Nlc3MgfSBmcm9tICcuL2VudGl0eS1wcm9jZXNzJztcbmltcG9ydCB7IGdldFJlc3BvbnNlVmFsdWUgfSBmcm9tICcuL2dldC1yZXNwb25zZS12YWx1ZSc7XG5pbXBvcnQgdHlwZSB7IEFwcGxpY2F0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHR5cGUgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ICAgRGF0YVNvdXJjZSwgICBEYXRhU291cmNlT3B0aW9ucywgICBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlLCB9IGZyb20gJ3Rhb24tdHlwZW9ybS9icm93c2VyJzsvKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgeyBUYW9uRW50aXR5T3B0aW9ucyB9IGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL2VudGl0eS1kZWNvcmF0b3InO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXIgfSBmcm9tICdodHRwJztcbmltcG9ydCB7IEVOViB9IGZyb20gJy4vZW52JztcbmltcG9ydCB0eXBlIHsgQmFzZUNsYXNzIH0gZnJvbSAnLi9iYXNlLWNsYXNzZXMvYmFzZS1jbGFzcyc7XG5pbXBvcnQgeyBSZWFsdGltZUNvcmUgfSBmcm9tICcuL3JlYWx0aW1lL3JlYWx0aW1lLWNvcmUnO1xuaW1wb3J0IHsgVGFvblN1YnNjcmliZXJPcHRpb25zIH0gZnJvbSAnLi9kZWNvcmF0b3JzL2NsYXNzZXMvc3Vic2NyaWJlci1kZWNvcmF0b3InO1xuaW1wb3J0IHsgQmFzZVN1YnNjcmliZXJGb3JFbnRpdHkgfSBmcm9tICcuL2Jhc2UtY2xhc3Nlcy9iYXNlLXN1YnNjcmliZXItZm9yLWVudGl0eSc7XG5pbXBvcnQgdHlwZSB7IEJhc2VNaWdyYXRpb24gfSBmcm9tICcuL2Jhc2UtY2xhc3Nlcy9iYXNlLW1pZ3JhdGlvbic7XG5pbXBvcnQgeyBDb250ZXh0RGJNaWdyYXRpb25zIH0gZnJvbSAnLi9jb250ZXh0LWRiLW1pZ3JhdGlvbnMnO1xuXG5cbmV4cG9ydCBjbGFzcyBFbmRwb2ludENvbnRleHQge1xuXG5cblxuICBwcml2YXRlIHN0YXRpYyBuZ1pvbmU6IE5nWm9uZTtcblxuICBzdGF0aWMgaW5pdE5nWm9uZShuZ1pvbmU6IE5nWm9uZSkge1xuXG4gICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG5cbiAgfVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICBkaXNhYmxlZFJlYWx0aW1lOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBjaGVjayB3aGV0aGVyIGNvbnRleHQgaXMgaW5pdGVkXG4gICAqICh3aXRoIGluaXQoKSBmdW5jdGlvbiApXG4gICAqL1xuICBwdWJsaWMgaW5pdGVkOiBib29sZWFuID0gZmFsc2U7XG5cblxuICByZWFkb25seSBkYk1pZ3JhdGlvbnMgPSBuZXcgQ29udGV4dERiTWlncmF0aW9ucyh0aGlzKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsSW5zdGFjZU9ialN5bWJvbCA9IFN5bWJvbCgnbG9jYWxJbnN0YWNlT2JqU3ltYm9sJyk7XG5cblxuICAvKipcbiAgICogYWxsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGZyb20gY29udGV4dFxuICAgKiBrZXkgaXMgY2xhc3MgbmFtZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFsbENsYXNzZXNJbnN0YW5jZXMgPSB7fTtcblxuXG5cbiAgcHJpdmF0ZSByZWFkb25seSBjbGFzc0luc3RhbmNlc0J5TmFtZU9iaiA9IHt9O1xuXG5cblxuICBwcml2YXRlIHJlYWRvbmx5IG9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyID0ge307XG5cblxuXG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVSb3V0ZXM6IHtcbiAgICByb3V0ZVBhdGg6IHN0cmluZztcbiAgICBtZXRob2Q6IE1vZGVscy5IdHRwLlJlc3QuSHR0cE1ldGhvZDtcbiAgfVtdID0gW107XG5cblxuICBwdWJsaWMgcmVhZG9ubHkgc2tpcFdyaXRpbmdTZXJ2ZXJSb3V0ZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuXG4gIHByaXZhdGUgaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzID0gW1xuICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgIE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWSxcbiAgICBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVIsXG4gICAgTW9kZWxzLkNsYXNzVHlwZS5NSUdSQVRJT04sXG4gIF07XG5cblxuICBwcml2YXRlIGFsbFR5cGVzZnJvbUNvbnRleHRzID0gW1xuICAgIC4uLnRoaXMuaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzLFxuICAgIE1vZGVscy5DbGFzc1R5cGUuRU5USVRZLFxuICBdO1xuXG5cblxuXG4gIHB1YmxpYyBleHByZXNzQXBwOiBBcHBsaWNhdGlvbiA9IHt9IGFzIGFueTtcblxuXG5cbiAgcHVibGljIHNlcnZlclRjcFVkcDogU2VydmVyO1xuXG5cblxuICBkYXRhYmFzZUNvbmZpZz86IE1vZGVscy5EYXRhYmFzZUNvbmZpZ1R5cGVPcm07XG5cblxuXG4gIG1vZGU6IE1vZGVscy5GcmFtZXdvcmtNb2RlO1xuXG5cblxuICByZWFkb25seSBvbmx5TWlncmF0aW9uUnVuPzogYm9vbGVhbiA9IGZhbHNlO1xuICByZWFkb25seSBvbmx5TWlncmF0aW9uUmV2ZXJ0VG9UaW1lc3RhbXA/OiBudW1iZXIgPSB1bmRlZmluZWQ7XG5cbiAgZ2V0IGlzUnVuT3JSZXZlcnRPbmx5TWlncmF0aW9uQXBwU3RhcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMub25seU1pZ3JhdGlvblJ1biB8fCB0aGlzLm9ubHlNaWdyYXRpb25SZXZlcnRUb1RpbWVzdGFtcCk7XG4gIH1cblxuXG5cbiAgc2Vzc2lvbj86IE1vZGVscy5JU2Vzc2lvbjtcblxuXG5cbiAgcHVibGljIGNvbm5lY3Rpb246IERhdGFTb3VyY2U7XG5cblxuXG4gIHByaXZhdGUgZW50aXRpZXNUcmlnZ2VycyA9IHt9O1xuXG5cblxuICBwcml2YXRlIHJlYWx0aW1lOiBSZWFsdGltZUNvcmU7XG4gIGdldCByZWFsdGltZUNsaWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFsdGltZS5jbGllbnQ7XG4gIH1cbiAgZ2V0IHJlYWx0aW1lU2VydmVyKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWx0aW1lLnNlcnZlcjtcbiAgfVxuXG5cblxuICAvKipcbiAgICogYXZhaWxhYmxlIGFmdGVyIGluaXQoKVxuICAgKi9cbiAgcHVibGljIGNvbmZpZzogTW9kZWxzLkNvbnRleHRPcHRpb25zPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cblxuXG4gIGdldCBsb2dIdHRwKCk6IGJvb2xlYW4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMuY29uZmlnPy5sb2dzKSkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLmxvZ3MgYXMgTW9kZWxzLkNvbm5lY3Rpb25PcHRpb25zTG9ncykuaHR0cDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5sb2dzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGxvZ1JlYWx0aW1lKCk6IGJvb2xlYW4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMuY29uZmlnPy5sb2dzKSkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLmxvZ3MgYXMgTW9kZWxzLkNvbm5lY3Rpb25PcHRpb25zTG9ncykucmVhbHRpbWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ubG9ncyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBsb2dGcmFtZXdvcmsoKTogYm9vbGVhbiB7XG4gICAgaWYgKF8uaXNPYmplY3QodGhpcy5jb25maWc/LmxvZ3MpKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5jb25maWcubG9ncyBhcyBNb2RlbHMuQ29ubmVjdGlvbk9wdGlvbnNMb2dzKS5mcmFtZXdvcms7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ubG9ncyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBsb2dEYigpOiBib29sZWFuIHtcbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZz8ubG9ncykpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmNvbmZpZy5sb2dzIGFzIE1vZGVscy5Db25uZWN0aW9uT3B0aW9uc0xvZ3MpLmRiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmxvZ3MgPT09IHRydWU7XG4gIH1cblxuICBnZXQgbG9nTWlncmF0aW9ucygpOiBib29sZWFuIHtcbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZz8ubG9ncykpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmNvbmZpZy5sb2dzIGFzIE1vZGVscy5Db25uZWN0aW9uT3B0aW9uc0xvZ3MpLm1pZ3JhdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ubG9ncyA9PT0gdHJ1ZTtcbiAgfVxuXG5cblxuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvcmlnaW5hbENvbmZpZzogTW9kZWxzLkNvbnRleHRPcHRpb25zPFxuICAgICAgYW55LFxuICAgICAgYW55LFxuICAgICAgYW55LFxuICAgICAgYW55LFxuICAgICAgYW55LFxuICAgICAgYW55LFxuICAgICAgYW55XG4gICAgPixcbiAgICBwcml2YXRlIGNvbmZpZ0ZuOiAoXG4gICAgICBlbnY6IGFueSxcbiAgICApID0+IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+LFxuICApIHt9XG5cblxuXG4gIHB1YmxpYyBhc3luYyBpbml0KG9wdGlvbnM/OiB7XG4gICAgaW5pdEZyb21SZWNydXNpdmVDb250ZXh0UmVzb3ZsZT86IGJvb2xlYW47XG4gICAgb3ZlcnJpZGVIb3N0Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBvdmVycmlkZVJlbW90ZUhvc3Q/OiBzdHJpbmcgfCBudWxsO1xuICAgIG9ubHlNaWdyYXRpb25SdW4/OiBib29sZWFuO1xuICAgIG9ubHlNaWdyYXRpb25SZXZlcnRUb1RpbWVzdGFtcD86IG51bWJlcjtcbiAgfSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGluaXRGcm9tUmVjcnVzaXZlQ29udGV4dFJlc292bGUsXG4gICAgICBvdmVycmlkZUhvc3QsXG4gICAgICBvdmVycmlkZVJlbW90ZUhvc3QsXG4gICAgICBvbmx5TWlncmF0aW9uUnVuLFxuICAgICAgb25seU1pZ3JhdGlvblJldmVydFRvVGltZXN0YW1wLFxuICAgIH0gPSBvcHRpb25zIHx8IHt9OyAvLyBUT0RPIHVzZSBpdCA/XG5cbiAgICB0aGlzLmluaXRlZCA9IHRydWU7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMub25seU1pZ3JhdGlvblJ1biA9IG9ubHlNaWdyYXRpb25SdW47XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMub25seU1pZ3JhdGlvblJldmVydFRvVGltZXN0YW1wID0gb25seU1pZ3JhdGlvblJldmVydFRvVGltZXN0YW1wO1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5jb25maWdGbihFTlYpO1xuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMuY29uZmlnLmRhdGFiYXNlKSkge1xuICAgICAgdGhpcy5jb25maWcuZGF0YWJhc2UgPSBNb2RlbHMuRGF0YWJhc2VDb25maWcuZnJvbShcbiAgICAgICAgdGhpcy5jb25maWcuZGF0YWJhc2UgYXMgTW9kZWxzLkRhdGFiYXNlQ29uZmlnLFxuICAgICAgKS5kYXRhYmFzZUNvbmZpZ1R5cGVPUk07XG4gICAgfVxuICAgIGlmIChvdmVycmlkZUhvc3QgJiYgb3ZlcnJpZGVSZW1vdGVIb3N0KSB7XG4gICAgICBIZWxwZXJzLnRocm93KFxuICAgICAgICBgW3Rhb24tY29uZmlnXSBZb3UgY2FuJ3QgaGF2ZSBvdmVycmlkZUhvc3QgYW5kIG92ZXJyaWRlUmVtb3RlSG9zdCBhdCB0aGUgc2FtZSB0aW1lYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcuaG9zdCA9ICFfLmlzVW5kZWZpbmVkKG92ZXJyaWRlSG9zdClcbiAgICAgID8gb3ZlcnJpZGVIb3N0XG4gICAgICA6IHRoaXMuY29uZmlnLmhvc3Q7XG4gICAgdGhpcy5jb25maWcucmVtb3RlSG9zdCA9ICFfLmlzVW5kZWZpbmVkKG92ZXJyaWRlUmVtb3RlSG9zdClcbiAgICAgID8gb3ZlcnJpZGVSZW1vdGVIb3N0XG4gICAgICA6IHRoaXMuY29uZmlnLnJlbW90ZUhvc3Q7XG5cbiAgICB0aGlzLmNvbmZpZy5ob3N0ID0gdGhpcy5ob3N0ID09PSBudWxsID8gdm9pZCAwIDogdGhpcy5ob3N0O1xuICAgIHRoaXMuY29uZmlnLnJlbW90ZUhvc3QgPVxuICAgICAgdGhpcy5yZW1vdGVIb3N0ID09PSBudWxsID8gdm9pZCAwIDogdGhpcy5yZW1vdGVIb3N0O1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWcuaG9zdCAmJlxuICAgICAgIXRoaXMuY29uZmlnLmhvc3Quc3RhcnRzV2l0aCgnaHR0cDovLycpICYmXG4gICAgICAhdGhpcy5jb25maWcuaG9zdC5zdGFydHNXaXRoKCdodHRwczovLycpXG4gICAgKSB7XG4gICAgICBIZWxwZXJzLnRocm93KFxuICAgICAgICBgW3Rhb24tY29uZmlnXSBZb3VyICdob3N0JyBtdXN0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovL2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuY29uZmlnLnVzZUlwY1doZW5FbGVjdHJvbikpIHtcbiAgICAgIHRoaXMuY29uZmlnLnVzZUlwY1doZW5FbGVjdHJvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWcucmVtb3RlSG9zdCAmJlxuICAgICAgIXRoaXMuY29uZmlnLnJlbW90ZUhvc3Quc3RhcnRzV2l0aCgnaHR0cDovLycpICYmXG4gICAgICAhdGhpcy5jb25maWcucmVtb3RlSG9zdC5zdGFydHNXaXRoKCdodHRwczovLycpXG4gICAgKSB7XG4gICAgICBIZWxwZXJzLnRocm93KFxuICAgICAgICBgW3Rhb24tY29uZmlnXSBZb3VyICdyZW1vdGVIb3N0JyBtdXN0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovL2AsXG4gICAgICApO1xuICAgIH1cblxuXG4gICAgLy9AdHMtZXhwZWN0LWVycm9yIG92ZXJyaWRpbmcgcmVhZG9ubHlcbiAgICB0aGlzLnNraXBXcml0aW5nU2VydmVyUm91dGVzID0gXy5pc0Jvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy5za2lwV3JpdGluZ1NlcnZlclJvdXRlcyxcbiAgICApXG4gICAgICA/IHRoaXMuY29uZmlnLnNraXBXcml0aW5nU2VydmVyUm91dGVzXG4gICAgICA6IGZhbHNlO1xuXG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5ob3N0KSB7XG4gICAgICB0aGlzLm1vZGUgPSAnYmFja2VuZC1mcm9udGVuZCh0Y3ArdWRwKSc7XG4vKiAqL1xuLyogKi9cbiAgXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnJlbW90ZUhvc3QpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5ob3N0KSB7XG4gICAgICAgIEhlbHBlcnMudGhyb3coXG4gICAgICAgICAgYFt0YW9uXSBZb3UgY2FuJ3QgaGF2ZSByZW1vdGVIb3N0IGFuZCBob3N0IGF0IHRoZSBzYW1lIHRpbWVgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5tb2RlID0gJ3JlbW90ZS1iYWNrZW5kKHRjcCt1ZHApJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcudXNlSXBjV2hlbkVsZWN0cm9uICYmIEhlbHBlcnMuaXNFbGVjdHJvbikge1xuICAgICAgaWYgKEhlbHBlcnMuaXNXZWJTUUwpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gJ2JhY2tlbmQtZnJvbnRlbmQod2Vic3FsLWVsZWN0cm9uKSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGUgPSAnYmFja2VuZC1mcm9udGVuZChpcGMtZWxlY3Ryb24pJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubW9kZSAmJiAhdGhpcy5jb25maWcuYWJzdHJhY3QpIHtcbiAgICAgIEhlbHBlcnMuZXJyb3IoXG4gICAgICAgIGBbdGFvbl0gQ29udGV4dCBcIiR7dGhpcy5jb250ZXh0TmFtZX1cIjogWW91IG5lZWQgdG8gcHJvdmlkZSBob3N0IG9yIHJlbW90ZUhvc3Qgb3IgdXNlSXBjV2hlbkVsZWN0cm9uYCxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuLyogKi9cbi8qICovXG4gIFxuICAgIH1cblxuXG5cbiAgICBpZiAodGhpcy5jb25maWcuZGF0YWJhc2UgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZGF0YWJhc2VDb25maWcgPSB0aGlzLmdldEF1dG9HZW5lcmF0ZWRDb25maWcoKTtcbiAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3QodGhpcy5jb25maWcuZGF0YWJhc2UpKSB7XG4gICAgICB0aGlzLmRhdGFiYXNlQ29uZmlnID0gXy5tZXJnZShcbiAgICAgICAgdGhpcy5nZXRBdXRvR2VuZXJhdGVkQ29uZmlnKCksXG4gICAgICAgIF8uY2xvbmVEZWVwKHRoaXMuY29uZmlnLmRhdGFiYXNlKSxcbiAgICAgICkgYXMgTW9kZWxzLkRhdGFiYXNlQ29uZmlnVHlwZU9ybTtcbiAgICB9XG5cblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnNlc3Npb24pIHtcbiAgICAgIHRoaXMuc2Vzc2lvbiA9IF8uY2xvbmVEZWVwKHRoaXMuY29uZmlnLnNlc3Npb24pO1xuICAgICAgY29uc3Qgb25lSG91ciA9IDEwMDAgKiA2MCAqIDYwICogMTsgLy8gMjQ7XG4gICAgICBpZiAoIXRoaXMuc2Vzc2lvbi5jb29raWVNYXhBZ2UpIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmNvb2tpZU1heEFnZSA9IG9uZUhvdXI7XG4gICAgICB9XG5cbiAgICAgIGF4aW9zLmRlZmF1bHRzLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgfVxuXG5cblxuICAgIHRoaXMuY29uZmlnLmNvbnRleHRzID0gdGhpcy5jb25maWcuY29udGV4dHMgfHwge307XG4gICAgdGhpcy5jb25maWcuZW50aXRpZXMgPSB0aGlzLmNvbmZpZy5lbnRpdGllcyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5jb250cm9sbGVycyA9IHRoaXMuY29uZmlnLmNvbnRyb2xsZXJzIHx8IHt9O1xuICAgIHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyA9IHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5wcm92aWRlcnMgPSB0aGlzLmNvbmZpZy5wcm92aWRlcnMgfHwge307XG4gICAgdGhpcy5jb25maWcuc3Vic2NyaWJlcnMgPSB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5taWdyYXRpb25zID0gdGhpcy5jb25maWcubWlncmF0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMuY29uZmlnLmVudGl0aWVzID0ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICAgICAgTW9kZWxzLkNsYXNzVHlwZS5FTlRJVFksXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLmVudGl0aWVzLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbmZpZy5jb250cm9sbGVycyA9IHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICAgICkpLFxuICAgICAgLi4udGhpcy5jb25maWcuY29udHJvbGxlcnMsXG4gICAgfTtcblxuICAgIHRoaXMuY29uZmlnLnByb3ZpZGVycyA9IHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgICAgIE1vZGVscy5DbGFzc1R5cGUuUFJPVklERVIsXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLnByb3ZpZGVycyxcbiAgICB9O1xuXG4gICAgdGhpcy5jb25maWcuc3Vic2NyaWJlcnMgPSB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgICAgICBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVIsXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLnN1YnNjcmliZXJzLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMgPSB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgICAgICBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyxcbiAgICB9O1xuXG4gICAgdGhpcy5jb25maWcubWlncmF0aW9ucyA9IHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgICAgIE1vZGVscy5DbGFzc1R5cGUuTUlHUkFUSU9OLFxuICAgICAgKSksXG4gICAgICAuLi50aGlzLmNvbmZpZy5taWdyYXRpb25zLFxuICAgIH07XG5cblxuXG5cblxuXG4gICAgdGhpcy5jb25maWcuY29udHJvbGxlcnMgPSB0aGlzLmNsb25lQ2xhc3Nlc09ialdpdGhOZXdNZXRhZGF0YSh7XG4gICAgICBjbGFzc2VzSW5wdXQ6IHRoaXMuY29uZmlnLmNvbnRyb2xsZXJzLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGN0eDogdGhpcyxcbiAgICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSLFxuICAgIH0pO1xuICAgIHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcucmVwb3NpdG9yaWVzLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGN0eDogdGhpcyxcbiAgICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZLFxuICAgIH0pO1xuICAgIHRoaXMuY29uZmlnLnByb3ZpZGVycyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcucHJvdmlkZXJzLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGN0eDogdGhpcyxcbiAgICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUixcbiAgICB9KTtcbiAgICB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcuc3Vic2NyaWJlcnMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbmZpZy5taWdyYXRpb25zID0gdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgY2xhc3Nlc0lucHV0OiB0aGlzLmNvbmZpZy5taWdyYXRpb25zLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGN0eDogdGhpcyxcbiAgICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZS5NSUdSQVRJT04sXG4gICAgfSk7XG5cblxuXG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIHRoaXMuaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzKSB7XG4gICAgICB0aGlzLmNsYXNzSW5zdGFuY2VzQnlOYW1lT2JqW2NsYXNzVHlwZU5hbWVdID0ge307XG4gICAgICB0aGlzLm9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyW2NsYXNzVHlwZU5hbWVdID0gW107XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIHRoaXMuaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZUluc3RhbmNlcyhcbiAgICAgICAgdGhpcy5jb25maWdbTW9kZWxzLkNsYXNzVHlwZUtleVtjbGFzc1R5cGVOYW1lXV0sXG4gICAgICAgIGNsYXNzVHlwZU5hbWUsXG4gICAgICApO1xuICAgIH1cblxuXG4gICAgaWYgKCF0aGlzLmlzUnVuT3JSZXZlcnRPbmx5TWlncmF0aW9uQXBwU3RhcnQpIHtcblxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2JhY2tlbmQtZnJvbnRlbmQodGNwK3VkcCknICYmICF0aGlzLmNvbmZpZy5hYnN0cmFjdCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICB9XG5cblxuXG4gICAgICBpZiAoIXRoaXMuY29uZmlnLmFic3RyYWN0KSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWRSZWFsdGltZSA9ICEhdGhpcy5jb25maWcuZGlzYWJsZWRSZWFsdGltZTtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICAgICAgdGhpcy5yZWFsdGltZSA9IG5ldyBSZWFsdGltZUNvcmUodGhpcyk7XG4gICAgICB9XG5cbiAgICB9XG5cblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgICBIZWxwZXJzLmluZm8oXG4gICAgICAgICAgYFt0YW9uXSBDcmVhdGUgYWJzdHJhY3QgY29udGV4dDogJHt0aGlzLmNvbmZpZy5jb250ZXh0TmFtZX1gLFxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jb25maWcucmVtb3RlSG9zdCkge1xuICAgICAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgICAgIGBbdGFvbl0gQ3JlYXRlIGNvbnRleHQgZm9yIHJlbW90ZSBob3N0OiAke3RoaXMuY29uZmlnLnJlbW90ZUhvc3R9YCxcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dGcmFtZXdvcmsgJiZcbiAgICAgICAgICBIZWxwZXJzLmluZm8oYFt0YW9uXSBDcmVhdGUgY29udGV4dCBmb3IgaG9zdDogJHt0aGlzLmNvbmZpZy5ob3N0fWApO1xuICAgICAgfVxuICAgIH1cblxuXG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgdGhpcy5vcmlnaW5hbENvbmZpZ1trZXldID0gdGhpcy5jb25maWdba2V5XTtcbiAgICB9KTtcbiAgfVxuXG5cblxuICBwcml2YXRlIGdldEF1dG9HZW5lcmF0ZWRDb25maWcoKTogTW9kZWxzLkRhdGFiYXNlQ29uZmlnVHlwZU9ybSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBnZXQgbmdab25lKCk6IGFueSB7XG5cbiAgICByZXR1cm4gRW5kcG9pbnRDb250ZXh0Lm5nWm9uZTtcblxuICAgIHJldHVybjtcbiAgfVxuXG5cblxuICBzdGFydFNlcnZlcigpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGRpc3BsYXlSb3V0ZXMoYXBwKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBnZXQgbW9kZUFsbG93c0RhdGFiYXNlQ3JlYXRpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2JhY2tlbmQtZnJvbnRlbmQodGNwK3VkcCknIHx8XG4gICAgICB0aGlzLm1vZGUgPT09ICdiYWNrZW5kLWZyb250ZW5kKHdlYnNxbCknIHx8XG4gICAgICB0aGlzLm1vZGUgPT09ICdiYWNrZW5kLWZyb250ZW5kKGlwYy1lbGVjdHJvbiknXG4gICAgKTtcbiAgfVxuXG5cblxuXG4gIHByaXZhdGUgY2xvbmVDbGFzc1dpdGhOZXdNZXRhZGF0YSA9IDxcbiAgICBUIGV4dGVuZHMgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogYW55IH0sXG4gID4oe1xuICAgIEJhc2VDbGFzcyxcbiAgICBjbGFzc05hbWUsXG4gICAgY29uZmlnLFxuICAgIGN0eCxcbiAgICBjbGFzc1R5cGUsXG4gIH06IHtcbiAgICBCYXNlQ2xhc3M6IFQ7XG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgY29uZmlnOiBNb2RlbHMuQ29udGV4dE9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PjtcbiAgICBjdHg6IEVuZHBvaW50Q29udGV4dDtcbiAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGU7XG4gIH0pOiBUID0+IHtcblxuICAgIGNvbnN0IGNsb25lQ2xhc3MgPSAoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIEJhc2VDbGFzc1tTeW1ib2xzLmZ1bGxDbGFzc05hbWVTdGF0aWNQcm9wZXJ0eV0gPT09XG4gICAgICAgIGAke2N0eC5jb250ZXh0TmFtZX0uJHtjbGFzc05hbWV9YFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBCYXNlQ2xhc3M7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xuXG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzdGF0aWMgW1N5bWJvbHMub3JpZ25hbENsYXNzXSA9IEJhc2VDbGFzcztcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHN0YXRpYyBbU3ltYm9scy5mdWxsQ2xhc3NOYW1lU3RhdGljUHJvcGVydHldID0gYCR7Y3R4LmNvbnRleHROYW1lfS4ke2NsYXNzTmFtZX1gO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc3RhdGljIFtTeW1ib2xzLmNsYXNzTmFtZVN0YXRpY1Byb3BlcnR5XSA9IGNsYXNzTmFtZTtcblxuICAgICAgICBzdGF0aWMgW1N5bWJvbHMuY3R4SW5DbGFzc09yQ2xhc3NPYmpdID0gY3R4O1xuXG4gICAgICAgIHN0YXRpYyBfX2dldEZ1bGxQYXRoRm9yQ2xhc3NfXyhhcnIgPSBbXSkge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzW1N5bWJvbHMuZnVsbENsYXNzTmFtZVN0YXRpY1Byb3BlcnR5XTtcbiAgICAgICAgICBhcnIucHVzaChuYW1lKTtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpc1tTeW1ib2xzLm9yaWduYWxDbGFzc10gJiYgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpc1tTeW1ib2xzLm9yaWduYWxDbGFzc10uX19nZXRGdWxsUGF0aEZvckNsYXNzX19cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXNbU3ltYm9scy5vcmlnbmFsQ2xhc3NdLl9fZ2V0RnVsbFBhdGhGb3JDbGFzc19fKGFycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhcnIuam9pbignLycpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXQgZnVsbFBhdGhGb3JDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9fZ2V0RnVsbFBhdGhGb3JDbGFzc19fKCk7XG4gICAgICAgIH1cbiAgICAgICAgW1N5bWJvbHMuY3R4SW5DbGFzc09yQ2xhc3NPYmpdID0gY3R4O1xuXG5cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNsb25lQ2xhc3NGdW5jdGlvbiA9IGNsb25lQ2xhc3MoKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgIHJldHVybiBjbG9uZUNsYXNzRnVuY3Rpb247XG4gIH07XG5cblxuXG5cblxuICBwcml2YXRlIGNsb25lQ2xhc3Nlc09ialdpdGhOZXdNZXRhZGF0YSA9ICh7XG4gICAgY2xhc3Nlc0lucHV0LFxuICAgIGNvbmZpZyxcbiAgICBjdHgsXG4gICAgY2xhc3NUeXBlLFxuICB9OiB7XG4gICAgY2xhc3Nlc0lucHV0OiBhbnk7XG4gICAgY29uZmlnOiBNb2RlbHMuQ29udGV4dE9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PjtcbiAgICBjdHg6IEVuZHBvaW50Q29udGV4dDtcbiAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGU7XG4gIH0pID0+IHtcbiAgICBjb25zdCBjbGFzc2VzID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjbGFzc2VzSW5wdXQgfHwge30pKSB7XG4gICAgICBjb25zdCBCYXNlQ2xhc3MgPSBjbGFzc2VzSW5wdXRba2V5XTtcblxuICAgICAgaWYgKCFCYXNlQ2xhc3MpIHtcbiAgICAgICAgSGVscGVycy5lcnJvcihgQ2xhc3MgJHtrZXl9IGlzIG5vdCBkZWZpbmVkIGluIGNvbnRleHQgJHtjdHguY29udGV4dE5hbWV9XG5cbiAgICAgICAgUGxlYXNlIGNoZWNrIGlmIHlvdSBoYXZlIGNvcnJlY3QgaW1wb3J0IGluIGNvbnRleHQgZmlsZVxuXG4gICAgICAgIGApO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NOYW1lID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgU3ltYm9scy5tZXRhZGF0YS5jbGFzc05hbWUsXG4gICAgICAgIEJhc2VDbGFzcyxcbiAgICAgICk7XG5cblxuXG5cblxuICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IGtleTtcbiAgICAgIEJhc2VDbGFzc1tTeW1ib2xzLmNsYXNzTmFtZVN0YXRpY1Byb3BlcnR5XSA9IGNsYXNzTmFtZTtcblxuICAgICAgY29uc3QgY2xvbmVkQ2xhc3MgPSB0aGlzLmNsb25lQ2xhc3NXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgICBCYXNlQ2xhc3MsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjdHgsXG4gICAgICAgIGNsYXNzVHlwZSxcbiAgICAgIH0pO1xuICAgICAgY2xhc3Nlc1tjbGFzc05hbWVdID0gY2xvbmVkQ2xhc3M7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9O1xuXG5cblxuICBwcml2YXRlIGFzeW5jIGdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLFxuICApIHtcbiAgICBjb25zdCBhcnIgPSBhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHMoY2xhc3NUeXBlKTtcbiAgICByZXR1cm4gYXJyLnJlZHVjZSgoYWNjLCBjKSA9PiB7XG4gICAgICBhY2NbQ2xhc3NIZWxwZXJzLmdldE5hbWUoYyldID0gYztcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzKFxuICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSxcbiAgICBhcnIgPSBbXSxcbiAgKSB7XG4gICAgY29uc3QgY29udGV4dHMgPSBPYmplY3QudmFsdWVzKHRoaXMuY29uZmlnLmNvbnRleHRzIHx8IHt9KSBhcyBSZXR1cm5UeXBlPFxuICAgICAgdHlwZW9mIGNyZWF0ZUNvbnRleHRcbiAgICA+W107XG5cblxuXG4gICAgZm9yIChjb25zdCBjdHggb2YgY29udGV4dHMpIHtcblxuICAgICAgY29uc3QgcmVmID0gYXdhaXQgY3R4Ll9fcmVmKCk7XG5cbiAgICAgIGNvbnN0IGNsYXNzZXNJbnB1dCA9IHJlZi5nZXRDbGFzc0Z1bkJ5KGNsYXNzVHlwZSk7XG5cblxuICAgICAgY29uc3QgY2xvbmVkQ2xhc3NlcyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICAgIHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgICAgICBjbGFzc2VzSW5wdXQsXG4gICAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBjdHg6IHRoaXMsXG4gICAgICAgICAgY2xhc3NUeXBlLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIGNsb25lZENsYXNzZXMuZm9yRWFjaChjID0+IGFyci5wdXNoKGMpKTtcblxuICAgICAgYXdhaXQgcmVmLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHMoY2xhc3NUeXBlLCBhcnIpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyIGFzIEZ1bmN0aW9uW107XG4gIH1cblxuXG5cbiAgZ2V0Q2xhc3NJbnN0YW5jZU9iakJ5KGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NJbnN0YW5jZXNCeU5hbWVPYmpbY2xhc3NUeXBlXTtcbiAgfVxuXG5cblxuICBwcml2YXRlIGdldENsYXNzZXNJbnN0YW5jZXNBcnJCeShjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMub2JqV2l0aENsYXNzZXNJbnN0YW5jZXNBcnJbY2xhc3NUeXBlXTtcbiAgfVxuXG5cblxuICBpbmplY3Q8VD4oXG4gICAgY3RvcjogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCxcbiAgICBvcHRpb25zPzoge1xuICAgICAgbG9jYWxJbnN0YW5jZT86IGJvb2xlYW47XG4gICAgICBjb250ZXh0Q2xhc3NJbnN0YW5jZT86IEJhc2VDbGFzcztcbiAgICAgIGxvY2FJbnN0YW5jZUNvbnN0cnVjdG9yQXJncz86IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgY3Rvcj47XG4gICAgfSxcbiAgKTogVCB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge30gYXMgYW55O1xuICAgIH1cbiAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc0hlbHBlcnMuZ2V0TmFtZShjdG9yKTtcblxuICAgIGNvbnN0IGxvY2FJbnN0YW5jZUNvbnN0cnVjdG9yQXJncyA9XG4gICAgICBvcHRpb25zLmxvY2FJbnN0YW5jZUNvbnN0cnVjdG9yQXJncyB8fCBbXTtcblxuICAgIGlmICh0aGlzLmlzQ0xhc3NUeXBlKE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWSwgY3RvcikpIHtcbiAgICAgIG9wdGlvbnMubG9jYWxJbnN0YW5jZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmxvY2FsSW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IGN0eENsYXNzRm4gPSB0aGlzLmdldENsYXNzRnVuQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICAgIGxldCBlbnRpdHlOYW1lOiBzdHJpbmcgPSAnJztcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ0Jhc2VSZXBvc2l0b3J5Jykge1xuICAgICAgICBjb25zdCBlbnRpdHlGbiA9IGxvY2FJbnN0YW5jZUNvbnN0cnVjdG9yQXJnc1swXTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gZW50aXR5Rm4gJiYgZW50aXR5Rm4oKTtcbiAgICAgICAgZW50aXR5TmFtZSA9IGVudGl0eSAmJiBDbGFzc0hlbHBlcnMuZ2V0TmFtZShlbnRpdHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMuY29udGV4dENsYXNzSW5zdGFuY2VbdGhpcy5sb2NhbEluc3RhY2VPYmpTeW1ib2xdKSB7XG4gICAgICAgIG9wdGlvbnMuY29udGV4dENsYXNzSW5zdGFuY2VbdGhpcy5sb2NhbEluc3RhY2VPYmpTeW1ib2xdID0ge307XG4gICAgICB9XG4gICAgICBjb25zdCBpbnN0YW5jZUtleSA9IGNsYXNzTmFtZSArIChlbnRpdHlOYW1lID8gYC4ke2VudGl0eU5hbWV9YCA6ICcnKTtcbiAgICAgIGNvbnN0IGV4aXN0ZWQgPVxuICAgICAgICBvcHRpb25zLmNvbnRleHRDbGFzc0luc3RhbmNlW3RoaXMubG9jYWxJbnN0YWNlT2JqU3ltYm9sXVtpbnN0YW5jZUtleV07XG4gICAgICBpZiAoZXhpc3RlZCkge1xuXG4gICAgICAgIHJldHVybiBleGlzdGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWN0eENsYXNzRm4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgYWJsZSB0byBpbmplY3QgXCIke2NsYXNzTmFtZX1cIiBpbnNpZGUgY29udGV4dCBcIiR7dGhpcy5jb250ZXh0TmFtZX1cIlxuXG4gICAgICAgIE1ha2Ugc3VyZSB0aGV5IHNoYXJlIHRoZSBzYW1lIGNvbnRleHQgb3IgaW1wb3J0IGNvbnRleHQgd2hlcmUgXCIke2NsYXNzTmFtZX1cIiBpcyBkZWZpbmVkLlxuXG4gICAgICAgIGApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbmplY3RlZEluc3RhbmNlID0gbmV3IChjdHhDbGFzc0ZuIGFzIGFueSkoXG4gICAgICAgIC4uLmxvY2FJbnN0YW5jZUNvbnN0cnVjdG9yQXJncyxcbiAgICAgICk7XG4gICAgICBvcHRpb25zLmNvbnRleHRDbGFzc0luc3RhbmNlW3RoaXMubG9jYWxJbnN0YWNlT2JqU3ltYm9sXVtpbnN0YW5jZUtleV0gPVxuICAgICAgICBpbmplY3RlZEluc3RhbmNlO1xuXG4gICAgICByZXR1cm4gaW5qZWN0ZWRJbnN0YW5jZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0U2NvcGVJbnN0YW5jZSA9IHRoaXMuYWxsQ2xhc3Nlc0luc3RhbmNlc1tjbGFzc05hbWVdO1xuXG5cblxuICAgIHJldHVybiBjb250ZXh0U2NvcGVJbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGlhcyBmb3IgaW5qZWN0XG4gICAqL1xuICBnZXRJbnN0YW5jZUJ5PFQ+KGN0b3I6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBUIHtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICByZXR1cm4gdGhpcy5pbmplY3QoY3RvciwgeyBsb2NhbEluc3RhbmNlOiBmYWxzZSB9KTtcbiAgfVxuXG5cblxuICBjaGVja0lmQ29udGV4dEluaXRpYWxpemVkKCkge1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuY29uZmlnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgY2hlY2sgaWYgeW91ciBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkLlxuXG5cbiAgICAgIGF3YWl0IENvbnRleHQuaW5pdGlhbGl6ZSgpO1xuXG5cblxuICAgICAgYCk7XG4gICAgfVxuICB9XG5cblxuXG4gIGdldENsYXNzRnVuQnkoY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlKSB7XG4gICAgdGhpcy5jaGVja0lmQ29udGV4dEluaXRpYWxpemVkKCk7XG4gICAgc3dpdGNoIChjbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuY29udHJvbGxlcnM7XG4gICAgICBjYXNlIE1vZGVscy5DbGFzc1R5cGUuRU5USVRZOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuZW50aXRpZXM7XG4gICAgICBjYXNlIE1vZGVscy5DbGFzc1R5cGUuUFJPVklERVI6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5wcm92aWRlcnM7XG4gICAgICBjYXNlIE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWTpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5TVUJTQ1JJQkVSOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuc3Vic2NyaWJlcnM7XG4gICAgICBjYXNlIE1vZGVscy5DbGFzc1R5cGUuTUlHUkFUSU9OOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcubWlncmF0aW9ucztcbiAgICB9XG4gIH1cblxuICBpc0NMYXNzVHlwZShjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUsIGNsYXNzRm46IEZ1bmN0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRDbGFzc0Z1bkJ5KGNsYXNzVHlwZSlbQ2xhc3NIZWxwZXJzLmdldE5hbWUoY2xhc3NGbildO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgZm9yIGluamVjdGFibGUgdHlwZXNcbiAgICogT25seSBmb3IgY2xhc3NUeXBlOiBDT05UUk9MTEVSLCBSRVBPU0lUT1JZLCBQUk9WSURFUlxuICAgKi9cbiAgZ2V0Q2xhc3NGdW5CeUNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IEZ1bmN0aW9uIHtcbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgdGhpcy5hbGxUeXBlc2Zyb21Db250ZXh0cykge1xuICAgICAgY29uc3QgY2xhc3Nlc0ZvckluamVjdGFibGVUeXBlID1cbiAgICAgICAgdGhpcy5jb25maWdbTW9kZWxzLkNsYXNzVHlwZUtleVtjbGFzc1R5cGVOYW1lXV07XG5cbiAgICAgIGlmIChjbGFzc2VzRm9ySW5qZWN0YWJsZVR5cGVbY2xhc3NOYW1lXSkge1xuICAgICAgICByZXR1cm4gY2xhc3Nlc0ZvckluamVjdGFibGVUeXBlW2NsYXNzTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xhc3NGdW5CeUNsYXNzKGNsYXNzRnVuY3Rpb246IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IENsYXNzSGVscGVycy5nZXROYW1lKGNsYXNzRnVuY3Rpb24pO1xuICAgIHJldHVybiB0aGlzLmdldENsYXNzRnVuQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgfVxuXG4gIGdldENsYXNzRnVuQnlBcnIoY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5nZXRDbGFzc0Z1bkJ5KGNsYXNzVHlwZSkgfHwge30pIGFzIEZ1bmN0aW9uW107XG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVJbnN0YW5jZXMoY2xhc3NlczogYW55LCBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpIHtcblxuXG5cblxuXG4gICAgZm9yIChjb25zdCBjbGFzc0ZuIG9mIFtcblxuICAgICAgLi4uT2JqZWN0LnZhbHVlcyhjbGFzc2VzKSxcbiAgICBdKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IERJVGFvbkNvbnRhaW5lci5yZXNvbHZlKGNsYXNzRm4gYXMgYW55KSBhcyBhbnk7XG4gICAgICBjb25zdCBjbGFzc0luc3RhbmNlc0J5TmFtZU9iaiA9IHRoaXMuY2xhc3NJbnN0YW5jZXNCeU5hbWVPYmpbY2xhc3NUeXBlXTtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IENsYXNzSGVscGVycy5nZXROYW1lKGNsYXNzRm4pO1xuXG4gICAgICBjbGFzc0luc3RhbmNlc0J5TmFtZU9ialtjbGFzc05hbWVdID0gaW5zdGFuY2U7XG5cbiAgICAgIHRoaXMuY29uZmlnW01vZGVscy5DbGFzc1R5cGVLZXlbY2xhc3NUeXBlXV1bY2xhc3NOYW1lXSA9IGNsYXNzRm47XG4gICAgICB0aGlzLm9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyW2NsYXNzVHlwZV0ucHVzaChpbnN0YW5jZSk7XG4gICAgICB0aGlzLmFsbENsYXNzZXNJbnN0YW5jZXNbY2xhc3NOYW1lXSA9IGluc3RhbmNlO1xuICAgIH1cbiAgfVxuXG5cblxuICBhc3luYyByZWluaXRDb250cm9sbGVycygpIHtcbiAgICBpZiAodGhpcy5yZW1vdGVIb3N0IHx8IE9iamVjdC5rZXlzKHRoaXMuY29uZmlnLm1pZ3JhdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuXG4gICAgY29uc3QgY29udHJvbGxlcnMgPSB0aGlzLmdldENsYXNzZXNJbnN0YW5jZXNBcnJCeShcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBjdHJsIG9mIGNvbnRyb2xsZXJzKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGN0cmwuaW5pdEV4YW1wbGVEYkRhdGEpKSB7XG4gICAgICAgIGF3YWl0IEhlbHBlcnMucnVuU3luY09yQXN5bmMoe1xuICAgICAgICAgIGZ1bmN0aW9uRm46IGN0cmwuaW5pdEV4YW1wbGVEYkRhdGEsXG4gICAgICAgICAgY29udGV4dDogY3RybCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG5cblxuICB9XG4gIGFzeW5jIGluaXRDbGFzc2VzKCkge1xuICAgIGlmICh0aGlzLnJlbW90ZUhvc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIFtcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuUFJPVklERVIsXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLkVOVElUWSxcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuTUlHUkFUSU9OLFxuICAgIF0pIHtcblxuXG5cblxuICAgICAgZm9yIChjb25zdCBjbGFzc0Z1biBvZiB0aGlzLmdldENsYXNzRnVuQnlBcnIoY2xhc3NUeXBlTmFtZSkgYXMgYW55W10pIHtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjbGFzc0Z1bi5fKSkge1xuICAgICAgICAgIGF3YWl0IEhlbHBlcnMucnVuU3luY09yQXN5bmMoe1xuICAgICAgICAgICAgZnVuY3Rpb25GbjogY2xhc3NGdW4uXyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNsYXNzRnVuLFxuICAgICAgICAgIH0pO1xuXG5cblxuXG5cblxuICAgICAgICB9XG4gICAgICB9XG5cblxuXG5cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgW1xuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUixcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWSxcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuTUlHUkFUSU9OLFxuICAgIF0pIHtcblxuXG5cblxuICAgICAgZm9yIChjb25zdCBjdHJsIG9mIHRoaXMuZ2V0Q2xhc3Nlc0luc3RhbmNlc0FyckJ5KGNsYXNzVHlwZU5hbWUpKSB7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY3RybC5fKSkge1xuICAgICAgICAgIGF3YWl0IEhlbHBlcnMucnVuU3luY09yQXN5bmMoe1xuICAgICAgICAgICAgZnVuY3Rpb25GbjogY3RybC5fLFxuICAgICAgICAgICAgY29udGV4dDogY3RybCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG5cblxuXG4gICAgfVxuICB9XG5cblxuXG4gIGlzQWN0aXZlT24oY2xhc3NJbnN0YW5jZTogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgbGV0IGNvbnRleHRSZWY6IEVuZHBvaW50Q29udGV4dCA9XG4gICAgICBjbGFzc0luc3RhbmNlW1N5bWJvbHMuY3R4SW5DbGFzc09yQ2xhc3NPYmpdO1xuICAgIHJldHVybiB0aGlzID09PSBjb250ZXh0UmVmO1xuICB9XG5cblxuXG4gIGdldCB1cmkoKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5ob3N0XG4gICAgICA/IG5ldyBVUkwodGhpcy5ob3N0KVxuICAgICAgOiB0aGlzLnJlbW90ZUhvc3RcbiAgICAgICAgPyBuZXcgVVJMKHRoaXMucmVtb3RlSG9zdClcbiAgICAgICAgOiB2b2lkIDA7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG5cblxuICBnZXQgaXNIdHRwU2VydmVyKCkge1xuICAgIHJldHVybiB0aGlzLnVyaS5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGlwYy91ZHAgbmVlZHMgdGhpc1xuICAgKi9cbiAgcHVibGljIGdldCBjb250ZXh0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY29udGV4dE5hbWU7XG4gIH1cblxuXG5cbiAgcHVibGljIGdldCBwdWJsaWNBc3NldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5wdWJsaWNBc3NldHMgfHwgW107XG4gIH1cblxuXG5cbiAgZ2V0IGlzUHJvZHVjdGlvbk1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnByb2R1Y3Rpb25Nb2RlO1xuICB9XG5cblxuXG4gIGdldCByZW1vdGVIb3N0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZW1vdGVIb3N0O1xuICB9XG5cblxuXG4gIGdldCBob3N0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5ob3N0O1xuICB9XG5cblxuXG4gIGdldCBvcmdpbigpIHtcbiAgICByZXR1cm4gdGhpcy51cmk/Lm9yaWdpbjtcbiAgfVxuXG5cblxuICBhc3luYyBpbml0U3Vic2NyaWJlcnMoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBhc3luYyBpbml0RW50aXRpZXMoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cblxuICBhc3luYyBpbml0RGF0YWJhc2VDb25uZWN0aW9uKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG5cbiAgaW5pdENvbnRyb2xsZXJzKCkge1xuICAgIGlmICh0aGlzLmlzUnVuT3JSZXZlcnRPbmx5TWlncmF0aW9uQXBwU3RhcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWxsQ29udHJvbGxlcnMgPSB0aGlzLmdldENsYXNzRnVuQnlBcnIoTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSKTtcblxuICAgIGZvciAoY29uc3QgY29udHJvbGxlckNsYXNzRm4gb2YgYWxsQ29udHJvbGxlcnMpIHtcbiAgICAgIGNvbnRyb2xsZXJDbGFzc0ZuW1N5bWJvbHMuY2xhc3NNZXRob2RzTmFtZXNdID1cbiAgICAgICAgQ2xhc3NIZWxwZXJzLmdldE1ldGhvZHNOYW1lcyhjb250cm9sbGVyQ2xhc3NGbik7XG4gICAgICBjb25zdCBjb25maWdzID0gQ2xhc3NIZWxwZXJzLmdldENvbnRyb2xsZXJDb25maWdzKGNvbnRyb2xsZXJDbGFzc0ZuKTtcblxuICAgICAgY29uc3QgY2xhc3NDb25maWc6IE1vZGVscy5SdW50aW1lQ29udHJvbGxlckNvbmZpZyA9IGNvbmZpZ3NbMF07XG5cbiAgICAgIGNvbnN0IHBhcmVudHNjYWxjdWxhdGVkUGF0aCA9IF8uc2xpY2UoY29uZmlncywgMSlcbiAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAubWFwKGJjID0+IHtcbiAgICAgICAgICBpZiAoVGFvbkhlbHBlcnMuaXNHb29kUGF0aChiYy5wYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGJjLnBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiYy5jbGFzc05hbWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcvJyk7XG5cbiAgICAgIGlmIChUYW9uSGVscGVycy5pc0dvb2RQYXRoKGNsYXNzQ29uZmlnLnBhdGgpKSB7XG4gICAgICAgIGNsYXNzQ29uZmlnLmNhbGN1bGF0ZWRQYXRoID0gY2xhc3NDb25maWcucGF0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzQ29uZmlnLmNhbGN1bGF0ZWRQYXRoID1cbiAgICAgICAgICBgJHtwYXJlbnRzY2FsY3VsYXRlZFBhdGh9LyR7Q2xhc3NIZWxwZXJzLmdldE5hbWUoY29udHJvbGxlckNsYXNzRm4pfWBcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKVxuICAgICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgYmMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIF8ubGFzdChhY2MpID09PSBiYyA/IGFjYyA6IFsuLi5hY2MsIGJjXTtcbiAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgLmpvaW4oJy8nKTtcbiAgICAgIH1cblxuICAgICAgXy5zbGljZShjb25maWdzLCAxKS5mb3JFYWNoKGJjID0+IHtcbiAgICAgICAgY29uc3QgYWxyZWFkeUlzID0gY2xhc3NDb25maWcubWV0aG9kcztcbiAgICAgICAgY29uc3QgdG9NZXJnZSA9IF8uY2xvbmVEZWVwKGJjLm1ldGhvZHMpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0b01lcmdlKSB7XG4gICAgICAgICAgaWYgKHRvTWVyZ2UuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhYWxyZWFkeUlzW2tleV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0b01lcmdlW2tleV07XG4gICAgICAgICAgICBhbHJlYWR5SXNba2V5XSA9IGVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuLyogKi9cbi8qICovXG4gIFxuICAgICAgICB0aGlzLmxvZ0h0dHAgJiZcbiAgICAgICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFxuICAgICAgICAgICAgYFt0YW9uXVtleHByZXNzLXNlcnZlcl0gcm91dGVzIFske2NsYXNzQ29uZmlnLmNsYXNzTmFtZX1dYCxcbiAgICAgICAgICApO1xuLyogKi9cbi8qICovXG4gIFxuXG5cbiAgICAgIE9iamVjdC5rZXlzKGNsYXNzQ29uZmlnLm1ldGhvZHMpLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZENvbmZpZzogTW9kZWxzLk1ldGhvZENvbmZpZyA9XG4gICAgICAgICAgY2xhc3NDb25maWcubWV0aG9kc1ttZXRob2ROYW1lXTtcblxuICAgICAgICBjb25zdCB0eXBlOiBNb2RlbHMuSHR0cC5SZXN0Lkh0dHBNZXRob2QgPSBtZXRob2RDb25maWcudHlwZTtcbiAgICAgICAgY29uc3QgZXhwcmVzc1BhdGggPSBtZXRob2RDb25maWcuZ2xvYmFsXG4gICAgICAgICAgPyBgLyR7bWV0aG9kQ29uZmlnLnBhdGg/LnJlcGxhY2UoL1xcLy8sICcnKX1gXG4gICAgICAgICAgOiBUYW9uSGVscGVycy5nZXRFeHByZXNzUGF0aChjbGFzc0NvbmZpZywgbWV0aG9kQ29uZmlnKTtcblxuXG4gICAgICAgIGlmIChIZWxwZXJzLmlzTm9kZSB8fCBIZWxwZXJzLmlzV2ViU1FMKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaG91bGRJbml0Q2xpZW50ID1cbiAgICAgICAgICBIZWxwZXJzLmlzQnJvd3NlciB8fCB0aGlzLnJlbW90ZUhvc3QgfHwgSGVscGVycy5pc1dlYlNRTDtcblxuICAgICAgICBpZiAoc2hvdWxkSW5pdENsaWVudCkge1xuXG5cblxuXG5cblxuXG4gICAgICAgICAgdGhpcy5pbml0Q2xpZW50KGNvbnRyb2xsZXJDbGFzc0ZuLCB0eXBlLCBtZXRob2RDb25maWcsIGV4cHJlc3NQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbi8qICovXG4vKiAqL1xuICBcbiAgICAgICAgdGhpcy5sb2dIdHRwICYmIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbi8qICovXG4vKiAqL1xuICBcbiAgICB9XG4gIH1cblxuXG5cbiAgcHVibGljIHdyaXRlQWN0aXZlUm91dGVzKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVtb3RlSG9zdCB8fFxuICAgICAgdGhpcy5pc1J1bk9yUmV2ZXJ0T25seU1pZ3JhdGlvbkFwcFN0YXJ0IHx8XG4gICAgICB0aGlzLnNraXBXcml0aW5nU2VydmVyUm91dGVzXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHRzOiBFbmRwb2ludENvbnRleHRbXSA9IFt0aGlzXTtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIHB1YmxpYyBnZXQgbWlkZGxld2FyZXMoKTogTW9kZWxzLk1pZGRsZXdhcmVUeXBlW10ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByaXZhdGUgaW5pdE1pZGRsZXdhcmVzKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBwcml2YXRlIGluaXRTZXJ2ZXIoXG5cbiAgICB0eXBlOiBNb2RlbHMuSHR0cC5SZXN0Lkh0dHBNZXRob2QsXG4gICAgbWV0aG9kQ29uZmlnOiBNb2RlbHMuTWV0aG9kQ29uZmlnLFxuICAgIGNsYXNzQ29uZmlnOiBNb2RlbHMuUnVudGltZUNvbnRyb2xsZXJDb25maWcsXG4gICAgZXhwcmVzc1BhdGg6IHN0cmluZyxcbiAgICB0YXJnZXQ6IEZ1bmN0aW9uLFxuXG4gICk6IGFueSB7XG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuICAgIGNvbnN0IHVybCA9IHRoaXMudXJpO1xuXG5cbiAgICBjb25zdCBnZXRSZXN1bHQgPSBhc3luYyAocmVzb2x2ZWRQYXJhbXMsIHJlcSwgcmVzKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZTogTW9kZWxzLkh0dHAuUmVzcG9uc2U8YW55PiA9XG4gICAgICAgIG1ldGhvZENvbmZpZy5kZXNjcmlwdG9yLnZhbHVlLmFwcGx5KFxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIENvbnRleHQgZm9yIG1ldGhvZCBAR0VULEBQVVQgZXRjLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuZ2V0SW5zdGFuY2VCeSh0YXJnZXQgYXMgYW55KSxcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQYXJhbXMgZm9yIG1ldGpvZCBAR0VULCBAUFVUIGV0Yy5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICByZXNvbHZlZFBhcmFtcyxcbiAgICAgICAgKTtcbiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBnZXRSZXNwb25zZVZhbHVlKHJlc3BvbnNlLCB7IHJlcSwgcmVzIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG5cbiAgICB1cmwucGF0aG5hbWUgPSB1cmwucGF0aG5hbWUucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICBleHByZXNzUGF0aCA9IHVybC5wYXRobmFtZS5zdGFydHNXaXRoKCcvJylcbiAgICAgID8gYCR7dXJsLnBhdGhuYW1lfSR7ZXhwcmVzc1BhdGh9YFxuICAgICAgOiBleHByZXNzUGF0aDtcbiAgICBleHByZXNzUGF0aCA9IGV4cHJlc3NQYXRoLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpO1xuXG5cblxuICAgIGlmIChIZWxwZXJzLmlzRWxlY3Ryb24pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlbW90ZUhvc3QpIHtcblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVQYXRoOiBleHByZXNzUGF0aCxcbiAgICAgIG1ldGhvZDogbWV0aG9kQ29uZmlnLnR5cGUsXG4gICAgfTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogY2xpZW50IGNhbiBiZSBicm93c2VyIG9yIG5vZGVqcyAod2hlbiByZW1vdGUgaG9zdClcbiAgICovXG4gIHByaXZhdGUgaW5pdENsaWVudChcblxuICAgIHRhcmdldDogRnVuY3Rpb24sXG4gICAgdHlwZTogTW9kZWxzLkh0dHAuUmVzdC5IdHRwTWV0aG9kLFxuICAgIG1ldGhvZENvbmZpZzogTW9kZWxzLkh0dHAuUmVzdC5NZXRob2RDb25maWcsXG4gICAgZXhwcmVzc1BhdGg6IHN0cmluZyxcblxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSB0aGlzO1xuXG4gICAgdGhpcy5sb2dIdHRwICYmIGNvbnNvbGUubG9nKGAke3R5cGU/LnRvVXBwZXJDYXNlKCl9ICR7ZXhwcmVzc1BhdGh9IGApO1xuXG5cbiAgICBsZXQgc3RvcmFnZTogYW55O1xuICAgIGlmIChIZWxwZXJzLmlzQnJvd3Nlcikge1xuICAgICAgc3RvcmFnZSA9IHdpbmRvdztcbiAgICB9XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuXG4gICAgY29uc3Qgb3JnTWV0aG9kcyA9IHRhcmdldC5wcm90b3R5cGVbbWV0aG9kQ29uZmlnLm1ldGhvZE5hbWVdO1xuXG5cblxuICAgIGlmIChIZWxwZXJzLmlzRWxlY3Ryb24pIHtcbiAgICAgIHRhcmdldC5wcm90b3R5cGVbbWV0aG9kQ29uZmlnLm1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgICAgIGNvbnN0IHsgcmVxdWVzdCwgcmVzcG9uc2UgfSA9IFRhb25IZWxwZXJzLndlYnNxbE1vY2tzKGhlYWRlcnMpO1xuXG4gICAgICAgICAgSGVscGVycy5pcGNSZW5kZXJlci5vbmNlKFxuICAgICAgICAgICAgVGFvbkhlbHBlcnMuaXBjS2V5TmFtZVJlc3BvbnNlKHRhcmdldCwgbWV0aG9kQ29uZmlnLCBleHByZXNzUGF0aCksXG4gICAgICAgICAgICAoZXZlbnQsIHJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgcmVzOiBhbnkgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKHsgcmVzcG9uc2VEYXRhIH0pO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXM7XG4gICAgICAgICAgICAgICAgcmVzID0gbmV3IE1vZGVsc05nMlJlc3QuSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBib2R5OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICAgIGlzQXJyYXk6IHZvaWQgMCBhcyBhbnksXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kQ29uZmlnLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHVybDogYCR7Y3R4LnVyaS5vcmlnaW59JHtcbiAgICAgICAgICAgICAgICAgICAgICAnJyAvLyBUT0RPIGV4cHJlc3MgcGF0aFxuICAgICAgICAgICAgICAgICAgICB9JHttZXRob2RDb25maWcucGF0aH0gYCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBIZWxwZXJzLmlzQmxvYihib2R5KSB8fCBfLmlzU3RyaW5nKGJvZHkpXG4gICAgICAgICAgICAgICAgICAgID8gYm9keVxuICAgICAgICAgICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgICAgICAgICAgICAgUmVzdEhlYWRlcnMuZnJvbShoZWFkZXJzKSxcbiAgICAgICAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICgpID0+IGJvZHksXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgICAgSGVscGVycy5pcGNSZW5kZXJlci5zZW5kKFxuICAgICAgICAgICAgVGFvbkhlbHBlcnMuaXBjS2V5TmFtZVJlcXVlc3QodGFyZ2V0LCBtZXRob2RDb25maWcsIGV4cHJlc3NQYXRoKSxcbiAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlY2VpdmVkWydvYnNlcnZhYmxlJ10gPSBmcm9tKHJlY2VpdmVkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZWNlaXZlZCxcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuXG5cbiAgICB0YXJnZXQucHJvdG90eXBlW21ldGhvZENvbmZpZy5tZXRob2ROYW1lXSA9IGZ1bmN0aW9uICh0aGlzOiB7fSwgLi4uYXJncykge1xuXG5cblxuXG5cbiAgICAgIGlmICghc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR10pXG4gICAgICAgIHN0b3JhZ2VbU3ltYm9scy5vbGQuRU5EUE9JTlRfTUVUQV9DT05GSUddID0ge307XG4gICAgICBpZiAoIXN0b3JhZ2VbU3ltYm9scy5vbGQuRU5EUE9JTlRfTUVUQV9DT05GSUddW2N0eC51cmkuaHJlZl0pXG4gICAgICAgIHN0b3JhZ2VbU3ltYm9scy5vbGQuRU5EUE9JTlRfTUVUQV9DT05GSUddW2N0eC51cmkuaHJlZl0gPSB7fTtcbiAgICAgIGNvbnN0IGVuZHBvaW50cyA9IHN0b3JhZ2VbU3ltYm9scy5vbGQuRU5EUE9JTlRfTUVUQV9DT05GSUddO1xuICAgICAgbGV0IHJlc3Q6IE1vZGVsc05nMlJlc3QuUmVzb3VyY2VNb2RlbDxhbnksIGFueT47XG4gICAgICBpZiAoIWVuZHBvaW50c1tjdHgudXJpLmhyZWZdW2V4cHJlc3NQYXRoXSkge1xuICAgICAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgICAgICBpZiAobWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlICYmICFtZXRob2RDb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICAgICAgcmVzdCA9IFJlc291cmNlLmNyZWF0ZShcbiAgICAgICAgICAgIGN0eC51cmkuaHJlZixcbiAgICAgICAgICAgIGV4cHJlc3NQYXRoLFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSIGFzIGFueSxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLkNJUkNVUkFMX09CSkVDVFNfTUFQX0JPRFkgYXMgYW55LFxuICAgICAgICAgICAgUmVzdEhlYWRlcnMuZnJvbSh7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBtZXRob2RDb25maWcuY29udGVudFR5cGUsXG4gICAgICAgICAgICAgIEFjY2VwdDogbWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChtZXRob2RDb25maWcuY29udGVudFR5cGUgJiYgbWV0aG9kQ29uZmlnLnJlc3BvbnNlVHlwZSkge1xuICAgICAgICAgIHJlc3QgPSBSZXNvdXJjZS5jcmVhdGUoXG4gICAgICAgICAgICBjdHgudXJpLmhyZWYsXG4gICAgICAgICAgICBleHByZXNzUGF0aCxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUiBhcyBhbnksXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5DSVJDVVJBTF9PQkpFQ1RTX01BUF9CT0RZIGFzIGFueSxcbiAgICAgICAgICAgIFJlc3RIZWFkZXJzLmZyb20oe1xuICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogbWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICBBY2NlcHQ6IG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgcmVzcG9uc2V0eXBlYXhpb3M6IG1ldGhvZENvbmZpZy5yZXNwb25zZVR5cGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKCFtZXRob2RDb25maWcuY29udGVudFR5cGUgJiYgbWV0aG9kQ29uZmlnLnJlc3BvbnNlVHlwZSkge1xuICAgICAgICAgIHJlc3QgPSBSZXNvdXJjZS5jcmVhdGUoXG4gICAgICAgICAgICBjdHgudXJpLmhyZWYsXG4gICAgICAgICAgICBleHByZXNzUGF0aCxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUiBhcyBhbnksXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5DSVJDVVJBTF9PQkpFQ1RTX01BUF9CT0RZIGFzIGFueSxcbiAgICAgICAgICAgIFJlc3RIZWFkZXJzLmZyb20oe1xuICAgICAgICAgICAgICByZXNwb25zZXR5cGVheGlvczogbWV0aG9kQ29uZmlnLnJlc3BvbnNlVHlwZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdCA9IFJlc291cmNlLmNyZWF0ZShcbiAgICAgICAgICAgIGN0eC51cmkuaHJlZixcbiAgICAgICAgICAgIGV4cHJlc3NQYXRoLFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSIGFzIGFueSxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLkNJUkNVUkFMX09CSkVDVFNfTUFQX0JPRFkgYXMgYW55LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBlbmRwb2ludHNbY3R4LnVyaS5ocmVmXVtleHByZXNzUGF0aF0gPSByZXN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdCA9IGVuZHBvaW50c1tjdHgudXJpLmhyZWZdW2V4cHJlc3NQYXRoXSBhcyBhbnk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ldGhvZCA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGlzV2l0aEJvZHkgPSBtZXRob2QgPT09ICdwdXQnIHx8IG1ldGhvZCA9PT0gJ3Bvc3QnO1xuICAgICAgY29uc3QgcGF0aFByYW1zID0ge307XG4gICAgICBsZXQgcXVlcnlQYXJhbXMgPSB7fTtcbiAgICAgIGxldCBib2R5T2JqZWN0ID0ge307XG4gICAgICBhcmdzLmZvckVhY2goKHBhcmFtLCBpKSA9PiB7XG4gICAgICAgIGxldCBjdXJyZW50UGFyYW06IE1vZGVscy5IdHRwLlJlc3QuUGFyYW1Db25maWcgPSB2b2lkIDAgYXMgYW55O1xuXG4gICAgICAgIGZvciAobGV0IHBwIGluIG1ldGhvZENvbmZpZy5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgbGV0IHYgPSBtZXRob2RDb25maWcucGFyYW1ldGVyc1twcF07XG4gICAgICAgICAgaWYgKHYuaW5kZXggPT09IGkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbSA9IHY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtVHlwZSA9PT0gJ1BhdGgnKSB7XG4gICAgICAgICAgcGF0aFByYW1zW2N1cnJlbnRQYXJhbS5wYXJhbU5hbWVdID0gcGFyYW07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbVR5cGUgPT09ICdRdWVyeScpIHtcbiAgICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IE1hcHBpbmcuZGVjb2RlKHBhcmFtLCAhY3R4LmlzUHJvZHVjdGlvbk1vZGUpO1xuICAgICAgICAgICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICBgJHtTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVJfUVVFUllfUEFSQU1TfSR7Y3VycmVudFBhcmFtLnBhcmFtTmFtZX0gYCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYXBwaW5nKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2N1cnJlbnRQYXJhbS5wYXJhbU5hbWVdID0gcGFyYW07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBNYXBwaW5nLmRlY29kZShwYXJhbSwgIWN0eC5pc1Byb2R1Y3Rpb25Nb2RlKTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSX1FVRVJZX1BBUkFNUyxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYXBwaW5nKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gXy5jbG9uZURlZXAocGFyYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtVHlwZSA9PT0gJ0hlYWRlcicpIHtcbiAgICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtTmFtZSkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbU5hbWUgPT09IFN5bWJvbHMub2xkLk1EQ19LRVkpIHtcblxuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJhbS5wYXJhbU5hbWUsXG4gICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHBhcmFtKSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KGN1cnJlbnRQYXJhbS5wYXJhbU5hbWUsIHBhcmFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaGVhZGVyIGluIHBhcmFtKSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoaGVhZGVyLCBwYXJhbVtoZWFkZXJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbVR5cGUgPT09ICdDb29raWUnKSB7XG4gICAgICAgICAgUmVzb3VyY2UuQ29va2llcy53cml0ZShcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbS5wYXJhbU5hbWUsXG4gICAgICAgICAgICBwYXJhbSxcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbS5leHBpcmVJblNlY29uZHMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtVHlwZSA9PT0gJ0JvZHknKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbU5hbWUpIHtcbiAgICAgICAgICAgIGlmIChDbGFzc0hlbHBlcnMuZ2V0TmFtZShib2R5T2JqZWN0KSA9PT0gJ0Zvcm1EYXRhJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFt0YW9uIC0gZnJhbWV3b3JrXSBEb24gdXNlIHBhcmFtIG5hbWVzIHdoZW4gcG9zdGluZyAvIHB1dHRpbmcgRm9ybURhdGEuXG4gICAgICAgICAgICAgIFVzZSB0aGlzOlxuXG4oQFRhb24uSHR0cC5QYXJhbS5Cb2R5KCkgZm9ybURhdGE6IEZvcm1EYXRhKSAuLi5cblxuXG5pbnN0ZWFkXG5cbiAgKEBUYW9uLkh0dHAuUGFyYW0uQm9keSgnJHtjdXJyZW50UGFyYW0ucGFyYW1OYW1lfScpIGZvcm1EYXRhOiBGb3JtRGF0YSkgLi4uXG5cbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IE1hcHBpbmcuZGVjb2RlKHBhcmFtLCAhY3R4LmlzUHJvZHVjdGlvbk1vZGUpO1xuICAgICAgICAgICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICBgJHtTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVJfQk9EWV9QQVJBTVN9JHtjdXJyZW50UGFyYW0ucGFyYW1OYW1lfSBgLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1hcHBpbmcpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keU9iamVjdFtjdXJyZW50UGFyYW0ucGFyYW1OYW1lXSA9IHBhcmFtO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gTWFwcGluZy5kZWNvZGUocGFyYW0sICFjdHguaXNQcm9kdWN0aW9uTW9kZSk7XG4gICAgICAgICAgICBpZiAobWFwcGluZykge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgIFN5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUl9CT0RZX1BBUkFNUyxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYXBwaW5nKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJvZHlPYmplY3QgPSBwYXJhbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBib2R5T2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBDbGFzc0hlbHBlcnMuZ2V0TmFtZShib2R5T2JqZWN0KSAhPT0gJ0Zvcm1EYXRhJ1xuICAgICAgKSB7XG4gICAgICAgIGxldCBjaXJjdXJhbEZyb21JdGVtID0gW107XG4gICAgICAgIGJvZHlPYmplY3QgPSBKU09OMTAucGFyc2UoXG4gICAgICAgICAgSlNPTjEwLnN0cmluZ2lmeShib2R5T2JqZWN0LCB2b2lkIDAsIHZvaWQgMCwgY2lyY3MgPT4ge1xuICAgICAgICAgICAgY2lyY3VyYWxGcm9tSXRlbSA9IGNpcmNzO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgIFN5bWJvbHMub2xkLkNJUkNVUkFMX09CSkVDVFNfTUFQX0JPRFksXG4gICAgICAgICAgSlNPTjEwLnN0cmluZ2lmeShjaXJjdXJhbEZyb21JdGVtKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBxdWVyeVBhcmFtcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbGV0IGNpcmN1cmFsRnJvbVF1ZXJ5UGFyYW1zID0gW107XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gSlNPTjEwLnBhcnNlKFxuICAgICAgICAgIEpTT04xMC5zdHJpbmdpZnkocXVlcnlQYXJhbXMsIHZvaWQgMCwgdm9pZCAwLCBjaXJjcyA9PiB7XG4gICAgICAgICAgICBjaXJjdXJhbEZyb21RdWVyeVBhcmFtcyA9IGNpcmNzO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfUVVFUllfUEFSQU0sXG4gICAgICAgICAgSlNPTjEwLnN0cmluZ2lmeShjaXJjdXJhbEZyb21RdWVyeVBhcmFtcyksXG4gICAgICAgICk7XG4gICAgICB9XG5cblxuICAgICAgY29uc3QgaHR0cFJlc3VsdE9iaiA9IHtcbiAgICAgICAgcmVjZWl2ZWQ6IGlzV2l0aEJvZHlcbiAgICAgICAgICA/IHJlc3QubW9kZWwocGF0aFByYW1zKVttZXRob2RdKGJvZHlPYmplY3QsIFtxdWVyeVBhcmFtc10pXG4gICAgICAgICAgOiByZXN0Lm1vZGVsKHBhdGhQcmFtcylbbWV0aG9kXShbcXVlcnlQYXJhbXNdKSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gaHR0cFJlc3VsdE9iajtcbiAgICB9O1xuXG4gIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbiBsaWIvZW5kcG9pbnQtY29udGV4dC50cyJdfQ==
@@ -1,4 +1,4 @@
1
- import 'reflect-metadata';
1
+ import 'reflect-metadata'; // TODO this is needed for my decorators to work
2
2
  import * as http from './decorators/http/http-decorators';
3
3
  import * as base from './base-classes/base';
4
4
  import * as controllerDecorator from './decorators/classes/controller-decorator';
@@ -67,4 +67,4 @@ export var Taon;
67
67
  })(Taon || (Taon = {}));
68
68
  ;
69
69
  ({}); // @--end-of-file-for-module=taon lib/index.ts
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90YW9uL3Byb2plY3RzL3Rhb24vc3JjL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUNBQW1DLENBQUM7QUFDMUQsT0FBTyxLQUFLLElBQUksTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssbUJBQW1CLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxLQUFLLGVBQWUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEtBQUssaUJBQWlCLE1BQU0seUNBQXlDLENBQUM7QUFDN0UsT0FBTyxLQUFLLG1CQUFtQixNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sS0FBSyxtQkFBbUIsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEtBQUssa0JBQWtCLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxLQUFLLGVBQWUsTUFBTSxrQkFBa0IsQ0FBQztBQUdwRCxPQUFPLEtBQUssV0FBVyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxRQUFRLE1BQU0sVUFBVSxDQUFDO0FBQ3JDLE9BQU8sS0FBSyxlQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxLQUFLLFVBQVUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxLQUFLLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUdwRCxjQUFjLE1BQU0sQ0FBQztBQUdyQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd2RCxNQUFNLEtBQVcsSUFBSSxDQXlEcEI7QUF6REQsV0FBaUIsSUFBSTtJQUVMLFNBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2pCLFNBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBR2xCLHFCQUFnQixHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztJQUcvQyxlQUFVLEdBQUcsbUJBQW1CLENBQUMsY0FBYyxDQUFDO0lBQ2hELFdBQU0sR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDO0lBQ3BDLGFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUM7SUFDMUMsZUFBVSxHQUFHLG1CQUFtQixDQUFDLGNBQWMsQ0FBQztJQUNoRCxlQUFVLEdBQUcsbUJBQW1CLENBQUMsY0FBYyxDQUFDO0lBQ2hELGNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7SUFHOUMsY0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQzFDLFdBQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxhQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDeEMsZUFBVSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBRTVDLGtCQUFhLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQztJQUU5QyxXQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUd6QixlQUFVLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUMzQyxlQUFlLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUM7SUFHVyxZQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUUxQzs7O09BR0c7SUFDVSxTQUFJLEdBQUcsS0FBSyxFQUFFLE9BSTFCLEVBQUUsRUFBRTtRQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQzthQUM5RCxXQUFXLENBQUM7UUFDZixNQUFNLE9BQU8sR0FBRyxLQUFBLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUU7WUFDekIsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFRO1lBQzdDLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQVE7U0FDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSixNQUFNLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUM7QUFDSixDQUFDLEVBekRnQixJQUFJLEtBQUosSUFBSSxRQXlEcEI7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDhDQUE4QyIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0ICogYXMgaHR0cCBmcm9tICcuL2RlY29yYXRvcnMvaHR0cC9odHRwLWRlY29yYXRvcnMnO1xuaW1wb3J0ICogYXMgYmFzZSBmcm9tICcuL2Jhc2UtY2xhc3Nlcy9iYXNlJztcbmltcG9ydCAqIGFzIGNvbnRyb2xsZXJEZWNvcmF0b3IgZnJvbSAnLi9kZWNvcmF0b3JzL2NsYXNzZXMvY29udHJvbGxlci1kZWNvcmF0b3InO1xuaW1wb3J0ICogYXMgZW50aXR5RGVjb3JhdG9yIGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL2VudGl0eS1kZWNvcmF0b3InO1xuaW1wb3J0ICogYXMgcHJvdmlkZXJEZWNvcmF0b3IgZnJvbSAnLi9kZWNvcmF0b3JzL2NsYXNzZXMvcHJvdmlkZXItZGVjb3JhdG9yJztcbmltcG9ydCAqIGFzIHJlcG9zaXRvcnlEZWNvcmF0b3IgZnJvbSAnLi9kZWNvcmF0b3JzL2NsYXNzZXMvcmVwb3NpdG9yeS1kZWNvcmF0b3InO1xuaW1wb3J0ICogYXMgc3Vic2NyaWJlckRlY29yYXRvciBmcm9tICcuL2RlY29yYXRvcnMvY2xhc3Nlcy9zdWJzY3JpYmVyLWRlY29yYXRvcic7XG5pbXBvcnQgKiBhcyBtaWdyYXRpb25EZWNvcmF0b3IgZnJvbSAnLi9kZWNvcmF0b3JzL2NsYXNzZXMvbWlncmF0aW9uLWRlY29yYXRvcic7XG5pbXBvcnQgKiBhcyBjcmVhdGVDb250ZXh0Rm4gZnJvbSAnLi9jcmVhdGUtY29udGV4dCc7XG5pbXBvcnQgKiBhcyBvcm0gZnJvbSAnLi9vcm0nO1xuaW1wb3J0ICogYXMgbW9kZWxzIGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCAqIGFzIGNvcmVIZWxwZXJzIGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0ICogYXMgaW5qZWN0Rm4gZnJvbSAnLi9pbmplY3QnO1xuaW1wb3J0ICogYXMgZW5kcG9pbnRDb250ZXh0IGZyb20gJy4vZW5kcG9pbnQtY29udGV4dCc7XG5pbXBvcnQgKiBhcyBhbGxTeW1ib2xzIGZyb20gJy4vc3ltYm9scyc7XG5pbXBvcnQgKiBhcyBnZXRSZXNwb25zZSBmcm9tICcuL2dldC1yZXNwb25zZS12YWx1ZSc7XG5cbmltcG9ydCB7IE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi91aSc7XG5cblxuZXhwb3J0IHsgQmFzZVJlcG9zaXRvcnkgfSBmcm9tICcuL2Jhc2UtY2xhc3Nlcy9iYXNlLXJlcG9zaXRvcnknO1xuZXhwb3J0IHsgQmFzZUNvbnRyb2xsZXIgfSBmcm9tICcuL2Jhc2UtY2xhc3Nlcy9iYXNlLWNvbnRyb2xsZXInO1xuZXhwb3J0IHsgQmFzZVByb3ZpZGVyIH0gZnJvbSAnLi9iYXNlLWNsYXNzZXMvYmFzZS1wcm92aWRlcic7XG5leHBvcnQgeyBCYXNlRW50aXR5IH0gZnJvbSAnLi9iYXNlLWNsYXNzZXMvYmFzZS1lbnRpdHknO1xuZXhwb3J0IHsgQmFzZUNvbnRleHQgfSBmcm9tICcuL2Jhc2UtY2xhc3Nlcy9iYXNlLWNvbnRleHQnO1xuZXhwb3J0IHsgQmFzZU1pZ3JhdGlvbiB9IGZyb20gJy4vYmFzZS1jbGFzc2VzL2Jhc2UtbWlncmF0aW9uJztcbmV4cG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuL2NyZWF0ZS1jb250ZXh0JztcbmV4cG9ydCB7IGluamVjdCB9IGZyb20gJy4vaW5qZWN0JztcbmV4cG9ydCB7IE1vZGVscyB9IGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCB7IENsYXNzSGVscGVycyB9IGZyb20gJy4vaGVscGVycy9jbGFzcy1oZWxwZXJzJztcblxuXG5leHBvcnQgbmFtZXNwYWNlIFRhb24ge1xuICBleHBvcnQgaW1wb3J0IFJlc3BvbnNlID0gbW9kZWxzLk1vZGVscy5IdHRwLlJlc3BvbnNlO1xuICBleHBvcnQgaW1wb3J0IEh0dHAgPSBodHRwLkh0dHA7XG4gIGV4cG9ydCBpbXBvcnQgQmFzZSA9IGJhc2UuQmFzZTtcbiAgZXhwb3J0IGltcG9ydCBPcm0gPSBvcm0uT3JtO1xuICBleHBvcnQgaW1wb3J0IFN0YXJ0UGFyYW1zID0gbW9kZWxzLk1vZGVscy5TdGFydFBhcmFtcztcbiAgZXhwb3J0IGNvbnN0IGdldFJlc3BvbnNlVmFsdWUgPSBnZXRSZXNwb25zZS5nZXRSZXNwb25zZVZhbHVlO1xuXG5cbiAgZXhwb3J0IGltcG9ydCBDb250cm9sbGVyID0gY29udHJvbGxlckRlY29yYXRvci5UYW9uQ29udHJvbGxlcjtcbiAgZXhwb3J0IGltcG9ydCBFbnRpdHkgPSBlbnRpdHlEZWNvcmF0b3IuVGFvbkVudGl0eTtcbiAgZXhwb3J0IGltcG9ydCBQcm92aWRlciA9IHByb3ZpZGVyRGVjb3JhdG9yLlRhb25Qcm92aWRlcjtcbiAgZXhwb3J0IGltcG9ydCBSZXBvc2l0b3J5ID0gcmVwb3NpdG9yeURlY29yYXRvci5UYW9uUmVwb3NpdG9yeTtcbiAgZXhwb3J0IGltcG9ydCBTdWJzY3JpYmVyID0gc3Vic2NyaWJlckRlY29yYXRvci5UYW9uU3Vic2NyaWJlcjtcbiAgZXhwb3J0IGltcG9ydCBNaWdyYXRpb24gPSBtaWdyYXRpb25EZWNvcmF0b3IuVGFvbk1pZ3JhdGlvbjtcblxuXG4gIGV4cG9ydCBjb25zdCBpc0Jyb3dzZXIgPSBjb3JlSGVscGVycy5IZWxwZXJzLmlzQnJvd3NlcjtcbiAgZXhwb3J0IGNvbnN0IGlzTm9kZSA9IGNvcmVIZWxwZXJzLkhlbHBlcnMuaXNOb2RlO1xuICBleHBvcnQgY29uc3QgaXNXZWJTUUwgPSBjb3JlSGVscGVycy5IZWxwZXJzLmlzV2ViU1FMO1xuICBleHBvcnQgY29uc3QgaXNFbGVjdHJvbiA9IGNvcmVIZWxwZXJzLkhlbHBlcnMuaXNFbGVjdHJvbjtcblxuICBleHBvcnQgY29uc3QgY3JlYXRlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHRGbi5jcmVhdGVDb250ZXh0O1xuXG4gIGV4cG9ydCBjb25zdCBpbmplY3QgPSBpbmplY3RGbi5pbmplY3Q7XG5cblxuICBleHBvcnQgY29uc3QgaW5pdE5nWm9uZSA9IChuZ1pvbmU6IE5nWm9uZSkgPT4ge1xuICAgIGVuZHBvaW50Q29udGV4dC5FbmRwb2ludENvbnRleHQuaW5pdE5nWm9uZShuZ1pvbmUpO1xuICB9O1xuXG5cbiAgZXhwb3J0IGNvbnN0IHN5bWJvbHMgPSBhbGxTeW1ib2xzLlN5bWJvbHM7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIHVzZSBjcmVhdGVDb250ZXh0IGluc3RlYWRcbiAgICovXG4gIGV4cG9ydCBjb25zdCBpbml0ID0gYXN5bmMgKG9wdGlvbnM6IHtcbiAgICBob3N0OiBzdHJpbmc7XG4gICAgZW50aXRpZXM6IEZ1bmN0aW9uW107XG4gICAgY29udHJvbGxlcnM6IEZ1bmN0aW9uW107XG4gIH0pID0+IHtcbiAgICBjb25zdCBCYXNlQ29udGV4dCA9IChhd2FpdCBpbXBvcnQoJy4vYmFzZS1jbGFzc2VzL2Jhc2UtY29udGV4dCcpKVxuICAgICAgLkJhc2VDb250ZXh0O1xuICAgIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVDb250ZXh0KCgpID0+ICh7XG4gICAgICBjb250ZXh0TmFtZTogJ2RlZmF1bHQnLFxuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0LFxuICAgICAgY29udGV4dHM6IHsgQmFzZUNvbnRleHQgfSxcbiAgICAgIGRhdGFiYXNlOiB0cnVlLFxuICAgICAgZW50aXRpZXM6IEFycmF5LmZyb20ob3B0aW9ucy5lbnRpdGllcykgYXMgYW55LFxuICAgICAgY29udHJvbGxlcnM6IEFycmF5LmZyb20ob3B0aW9ucy5jb250cm9sbGVycykgYXMgYW55LFxuICAgIH0pKTtcblxuICAgIGF3YWl0IGNvbnRleHQuaW5pdGlhbGl6ZSgpO1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9O1xufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbiBsaWIvaW5kZXgudHMiXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90YW9uL3Byb2plY3RzL3Rhb24vc3JjL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLGtCQUFrQixDQUFDLENBQUMsZ0RBQWdEO0FBQzNFLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUNBQW1DLENBQUM7QUFDMUQsT0FBTyxLQUFLLElBQUksTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssbUJBQW1CLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxLQUFLLGVBQWUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEtBQUssaUJBQWlCLE1BQU0seUNBQXlDLENBQUM7QUFDN0UsT0FBTyxLQUFLLG1CQUFtQixNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sS0FBSyxtQkFBbUIsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEtBQUssa0JBQWtCLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxLQUFLLGVBQWUsTUFBTSxrQkFBa0IsQ0FBQztBQUdwRCxPQUFPLEtBQUssV0FBVyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxRQUFRLE1BQU0sVUFBVSxDQUFDO0FBQ3JDLE9BQU8sS0FBSyxlQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxLQUFLLFVBQVUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxLQUFLLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUdwRCxjQUFjLE1BQU0sQ0FBQztBQUdyQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd2RCxNQUFNLEtBQVcsSUFBSSxDQXlEcEI7QUF6REQsV0FBaUIsSUFBSTtJQUVMLFNBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2pCLFNBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBR2xCLHFCQUFnQixHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztJQUcvQyxlQUFVLEdBQUcsbUJBQW1CLENBQUMsY0FBYyxDQUFDO0lBQ2hELFdBQU0sR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDO0lBQ3BDLGFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUM7SUFDMUMsZUFBVSxHQUFHLG1CQUFtQixDQUFDLGNBQWMsQ0FBQztJQUNoRCxlQUFVLEdBQUcsbUJBQW1CLENBQUMsY0FBYyxDQUFDO0lBQ2hELGNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7SUFHOUMsY0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQzFDLFdBQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxhQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDeEMsZUFBVSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBRTVDLGtCQUFhLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQztJQUU5QyxXQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUd6QixlQUFVLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUMzQyxlQUFlLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUM7SUFHVyxZQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUUxQzs7O09BR0c7SUFDVSxTQUFJLEdBQUcsS0FBSyxFQUFFLE9BSTFCLEVBQUUsRUFBRTtRQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQzthQUM5RCxXQUFXLENBQUM7UUFDZixNQUFNLE9BQU8sR0FBRyxLQUFBLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUU7WUFDekIsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFRO1lBQzdDLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQVE7U0FDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSixNQUFNLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUM7QUFDSixDQUFDLEVBekRnQixJQUFJLEtBQUosSUFBSSxRQXlEcEI7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDhDQUE4QyIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnOyAvLyBUT0RPIHRoaXMgaXMgbmVlZGVkIGZvciBteSBkZWNvcmF0b3JzIHRvIHdvcmtcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSAnLi9kZWNvcmF0b3JzL2h0dHAvaHR0cC1kZWNvcmF0b3JzJztcbmltcG9ydCAqIGFzIGJhc2UgZnJvbSAnLi9iYXNlLWNsYXNzZXMvYmFzZSc7XG5pbXBvcnQgKiBhcyBjb250cm9sbGVyRGVjb3JhdG9yIGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL2NvbnRyb2xsZXItZGVjb3JhdG9yJztcbmltcG9ydCAqIGFzIGVudGl0eURlY29yYXRvciBmcm9tICcuL2RlY29yYXRvcnMvY2xhc3Nlcy9lbnRpdHktZGVjb3JhdG9yJztcbmltcG9ydCAqIGFzIHByb3ZpZGVyRGVjb3JhdG9yIGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL3Byb3ZpZGVyLWRlY29yYXRvcic7XG5pbXBvcnQgKiBhcyByZXBvc2l0b3J5RGVjb3JhdG9yIGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL3JlcG9zaXRvcnktZGVjb3JhdG9yJztcbmltcG9ydCAqIGFzIHN1YnNjcmliZXJEZWNvcmF0b3IgZnJvbSAnLi9kZWNvcmF0b3JzL2NsYXNzZXMvc3Vic2NyaWJlci1kZWNvcmF0b3InO1xuaW1wb3J0ICogYXMgbWlncmF0aW9uRGVjb3JhdG9yIGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL21pZ3JhdGlvbi1kZWNvcmF0b3InO1xuaW1wb3J0ICogYXMgY3JlYXRlQ29udGV4dEZuIGZyb20gJy4vY3JlYXRlLWNvbnRleHQnO1xuaW1wb3J0ICogYXMgb3JtIGZyb20gJy4vb3JtJztcbmltcG9ydCAqIGFzIG1vZGVscyBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgKiBhcyBjb3JlSGVscGVycyBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmltcG9ydCAqIGFzIGluamVjdEZuIGZyb20gJy4vaW5qZWN0JztcbmltcG9ydCAqIGFzIGVuZHBvaW50Q29udGV4dCBmcm9tICcuL2VuZHBvaW50LWNvbnRleHQnO1xuaW1wb3J0ICogYXMgYWxsU3ltYm9scyBmcm9tICcuL3N5bWJvbHMnO1xuaW1wb3J0ICogYXMgZ2V0UmVzcG9uc2UgZnJvbSAnLi9nZXQtcmVzcG9uc2UtdmFsdWUnO1xuXG5pbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmV4cG9ydCAqIGZyb20gJy4vdWknO1xuXG5cbmV4cG9ydCB7IEJhc2VSZXBvc2l0b3J5IH0gZnJvbSAnLi9iYXNlLWNsYXNzZXMvYmFzZS1yZXBvc2l0b3J5JztcbmV4cG9ydCB7IEJhc2VDb250cm9sbGVyIH0gZnJvbSAnLi9iYXNlLWNsYXNzZXMvYmFzZS1jb250cm9sbGVyJztcbmV4cG9ydCB7IEJhc2VQcm92aWRlciB9IGZyb20gJy4vYmFzZS1jbGFzc2VzL2Jhc2UtcHJvdmlkZXInO1xuZXhwb3J0IHsgQmFzZUVudGl0eSB9IGZyb20gJy4vYmFzZS1jbGFzc2VzL2Jhc2UtZW50aXR5JztcbmV4cG9ydCB7IEJhc2VDb250ZXh0IH0gZnJvbSAnLi9iYXNlLWNsYXNzZXMvYmFzZS1jb250ZXh0JztcbmV4cG9ydCB7IEJhc2VNaWdyYXRpb24gfSBmcm9tICcuL2Jhc2UtY2xhc3Nlcy9iYXNlLW1pZ3JhdGlvbic7XG5leHBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnLi9jcmVhdGUtY29udGV4dCc7XG5leHBvcnQgeyBpbmplY3QgfSBmcm9tICcuL2luamVjdCc7XG5leHBvcnQgeyBNb2RlbHMgfSBmcm9tICcuL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgeyBDbGFzc0hlbHBlcnMgfSBmcm9tICcuL2hlbHBlcnMvY2xhc3MtaGVscGVycyc7XG5cblxuZXhwb3J0IG5hbWVzcGFjZSBUYW9uIHtcbiAgZXhwb3J0IGltcG9ydCBSZXNwb25zZSA9IG1vZGVscy5Nb2RlbHMuSHR0cC5SZXNwb25zZTtcbiAgZXhwb3J0IGltcG9ydCBIdHRwID0gaHR0cC5IdHRwO1xuICBleHBvcnQgaW1wb3J0IEJhc2UgPSBiYXNlLkJhc2U7XG4gIGV4cG9ydCBpbXBvcnQgT3JtID0gb3JtLk9ybTtcbiAgZXhwb3J0IGltcG9ydCBTdGFydFBhcmFtcyA9IG1vZGVscy5Nb2RlbHMuU3RhcnRQYXJhbXM7XG4gIGV4cG9ydCBjb25zdCBnZXRSZXNwb25zZVZhbHVlID0gZ2V0UmVzcG9uc2UuZ2V0UmVzcG9uc2VWYWx1ZTtcblxuXG4gIGV4cG9ydCBpbXBvcnQgQ29udHJvbGxlciA9IGNvbnRyb2xsZXJEZWNvcmF0b3IuVGFvbkNvbnRyb2xsZXI7XG4gIGV4cG9ydCBpbXBvcnQgRW50aXR5ID0gZW50aXR5RGVjb3JhdG9yLlRhb25FbnRpdHk7XG4gIGV4cG9ydCBpbXBvcnQgUHJvdmlkZXIgPSBwcm92aWRlckRlY29yYXRvci5UYW9uUHJvdmlkZXI7XG4gIGV4cG9ydCBpbXBvcnQgUmVwb3NpdG9yeSA9IHJlcG9zaXRvcnlEZWNvcmF0b3IuVGFvblJlcG9zaXRvcnk7XG4gIGV4cG9ydCBpbXBvcnQgU3Vic2NyaWJlciA9IHN1YnNjcmliZXJEZWNvcmF0b3IuVGFvblN1YnNjcmliZXI7XG4gIGV4cG9ydCBpbXBvcnQgTWlncmF0aW9uID0gbWlncmF0aW9uRGVjb3JhdG9yLlRhb25NaWdyYXRpb247XG5cblxuICBleHBvcnQgY29uc3QgaXNCcm93c2VyID0gY29yZUhlbHBlcnMuSGVscGVycy5pc0Jyb3dzZXI7XG4gIGV4cG9ydCBjb25zdCBpc05vZGUgPSBjb3JlSGVscGVycy5IZWxwZXJzLmlzTm9kZTtcbiAgZXhwb3J0IGNvbnN0IGlzV2ViU1FMID0gY29yZUhlbHBlcnMuSGVscGVycy5pc1dlYlNRTDtcbiAgZXhwb3J0IGNvbnN0IGlzRWxlY3Ryb24gPSBjb3JlSGVscGVycy5IZWxwZXJzLmlzRWxlY3Ryb247XG5cbiAgZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0Rm4uY3JlYXRlQ29udGV4dDtcblxuICBleHBvcnQgY29uc3QgaW5qZWN0ID0gaW5qZWN0Rm4uaW5qZWN0O1xuXG5cbiAgZXhwb3J0IGNvbnN0IGluaXROZ1pvbmUgPSAobmdab25lOiBOZ1pvbmUpID0+IHtcbiAgICBlbmRwb2ludENvbnRleHQuRW5kcG9pbnRDb250ZXh0LmluaXROZ1pvbmUobmdab25lKTtcbiAgfTtcblxuXG4gIGV4cG9ydCBjb25zdCBzeW1ib2xzID0gYWxsU3ltYm9scy5TeW1ib2xzO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiB1c2UgY3JlYXRlQ29udGV4dCBpbnN0ZWFkXG4gICAqL1xuICBleHBvcnQgY29uc3QgaW5pdCA9IGFzeW5jIChvcHRpb25zOiB7XG4gICAgaG9zdDogc3RyaW5nO1xuICAgIGVudGl0aWVzOiBGdW5jdGlvbltdO1xuICAgIGNvbnRyb2xsZXJzOiBGdW5jdGlvbltdO1xuICB9KSA9PiB7XG4gICAgY29uc3QgQmFzZUNvbnRleHQgPSAoYXdhaXQgaW1wb3J0KCcuL2Jhc2UtY2xhc3Nlcy9iYXNlLWNvbnRleHQnKSlcbiAgICAgIC5CYXNlQ29udGV4dDtcbiAgICBjb25zdCBjb250ZXh0ID0gY3JlYXRlQ29udGV4dCgoKSA9PiAoe1xuICAgICAgY29udGV4dE5hbWU6ICdkZWZhdWx0JyxcbiAgICAgIGhvc3Q6IG9wdGlvbnMuaG9zdCxcbiAgICAgIGNvbnRleHRzOiB7IEJhc2VDb250ZXh0IH0sXG4gICAgICBkYXRhYmFzZTogdHJ1ZSxcbiAgICAgIGVudGl0aWVzOiBBcnJheS5mcm9tKG9wdGlvbnMuZW50aXRpZXMpIGFzIGFueSxcbiAgICAgIGNvbnRyb2xsZXJzOiBBcnJheS5mcm9tKG9wdGlvbnMuY29udHJvbGxlcnMpIGFzIGFueSxcbiAgICB9KSk7XG5cbiAgICBhd2FpdCBjb250ZXh0LmluaXRpYWxpemUoKTtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfTtcbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRhb24gbGliL2luZGV4LnRzIl19