taon 18.0.18 → 18.0.19

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 (270) hide show
  1. package/assets/shared/shared_folder_info.txt +1 -1
  2. package/browser/esm2022/lib/base-classes/base-injector.mjs +8 -1
  3. package/browser/esm2022/lib/create-context.mjs +5 -3
  4. package/browser/esm2022/lib/decorators/http/http-decorators.mjs +3 -1
  5. package/browser/esm2022/lib/endpoint-context.mjs +35 -9
  6. package/browser/esm2022/lib/index.mjs +2 -1
  7. package/browser/esm2022/lib/ui/directives/index.mjs +6 -0
  8. package/browser/esm2022/lib/ui/directives/safe.pipe.mjs +43 -0
  9. package/browser/esm2022/lib/ui/directives/taon-inject-html.directive.mjs +24 -0
  10. package/browser/esm2022/lib/ui/directives/taon-long-press.directive.mjs +120 -0
  11. package/browser/esm2022/lib/ui/index.mjs +12 -0
  12. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.mjs +5 -0
  13. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.mjs +115 -0
  14. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.mjs +50 -0
  15. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.mjs +5 -0
  16. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.mjs +61 -0
  17. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.mjs +21 -0
  18. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/index.mjs +6 -0
  19. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +14 -3
  20. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.mjs +54 -0
  21. package/browser/esm2022/lib/ui/taon-full-material.module.mjs +179 -0
  22. package/browser/esm2022/lib/ui/taon-github-fork-me-corner/index.mjs +5 -0
  23. package/browser/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.mjs +18 -0
  24. package/browser/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.mjs +21 -0
  25. package/browser/esm2022/lib/ui/taon-notifications/index.mjs +7 -0
  26. package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.component.mjs +25 -0
  27. package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.models.mjs +5 -0
  28. package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.module.mjs +21 -0
  29. package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.service.mjs +48 -0
  30. package/browser/esm2022/lib/ui/taon-progress-bar/index.mjs +5 -0
  31. package/browser/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.component.mjs +98 -0
  32. package/browser/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.module.mjs +22 -0
  33. package/browser/esm2022/lib/ui/taon-session-passcode/index.mjs +4 -0
  34. package/browser/esm2022/lib/ui/taon-session-passcode/taon-session-passcode.component.mjs +120 -0
  35. package/browser/esm2022/lib/ui/taon-table/index.mjs +5 -0
  36. package/browser/esm2022/lib/ui/taon-table/taon-table.component.mjs +161 -0
  37. package/browser/esm2022/lib/ui/taon-table/taon-table.module.mjs +57 -0
  38. package/browser/fesm2022/taon.mjs +1445 -75
  39. package/browser/fesm2022/taon.mjs.map +1 -1
  40. package/browser/lib/base-classes/base-context.d.ts +4 -1
  41. package/browser/lib/base-classes/base-injector.d.ts +5 -0
  42. package/browser/lib/base-classes/base.d.ts +4 -1
  43. package/browser/lib/create-context.d.ts +4 -1
  44. package/browser/lib/decorators/http/http-decorators.d.ts +2 -0
  45. package/browser/lib/endpoint-context.d.ts +3 -2
  46. package/browser/lib/index.d.ts +13 -3
  47. package/browser/lib/ui/directives/index.d.ts +4 -0
  48. package/browser/lib/ui/directives/safe.pipe.d.ts +11 -0
  49. package/browser/lib/ui/directives/taon-inject-html.directive.d.ts +10 -0
  50. package/browser/lib/ui/directives/taon-long-press.directive.d.ts +26 -0
  51. package/browser/lib/ui/index.d.ts +10 -0
  52. package/browser/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.d.ts +3 -0
  53. package/browser/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.d.ts +33 -0
  54. package/browser/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.d.ts +16 -0
  55. package/browser/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.d.ts +3 -0
  56. package/browser/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.d.ts +17 -0
  57. package/browser/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.d.ts +10 -0
  58. package/browser/lib/ui/taon-admin-mode-configuration/index.d.ts +4 -0
  59. package/browser/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.d.ts +17 -0
  60. package/browser/lib/ui/taon-full-material.module.d.ts +47 -0
  61. package/browser/lib/ui/taon-github-fork-me-corner/index.d.ts +3 -0
  62. package/browser/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.d.ts +7 -0
  63. package/browser/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.d.ts +9 -0
  64. package/browser/lib/ui/taon-notifications/index.d.ts +5 -0
  65. package/browser/lib/ui/taon-notifications/taon-notifications.component.d.ts +13 -0
  66. package/browser/lib/ui/taon-notifications/taon-notifications.models.d.ts +7 -0
  67. package/browser/lib/ui/taon-notifications/taon-notifications.module.d.ts +8 -0
  68. package/browser/lib/ui/taon-notifications/taon-notifications.service.d.ts +15 -0
  69. package/browser/lib/ui/taon-progress-bar/index.d.ts +3 -0
  70. package/browser/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +19 -0
  71. package/browser/lib/ui/taon-progress-bar/taon-progress-bar.module.d.ts +10 -0
  72. package/browser/lib/ui/taon-session-passcode/index.d.ts +2 -0
  73. package/browser/lib/ui/taon-session-passcode/taon-session-passcode.component.d.ts +39 -0
  74. package/browser/lib/ui/taon-table/index.d.ts +3 -0
  75. package/browser/lib/ui/taon-table/taon-table.component.d.ts +37 -0
  76. package/browser/lib/ui/taon-table/taon-table.module.d.ts +17 -0
  77. package/client/esm2022/lib/base-classes/base-injector.mjs +8 -1
  78. package/client/esm2022/lib/create-context.mjs +5 -3
  79. package/client/esm2022/lib/decorators/http/http-decorators.mjs +3 -1
  80. package/client/esm2022/lib/endpoint-context.mjs +35 -9
  81. package/client/esm2022/lib/index.mjs +2 -1
  82. package/client/esm2022/lib/ui/directives/index.mjs +6 -0
  83. package/client/esm2022/lib/ui/directives/safe.pipe.mjs +43 -0
  84. package/client/esm2022/lib/ui/directives/taon-inject-html.directive.mjs +24 -0
  85. package/client/esm2022/lib/ui/directives/taon-long-press.directive.mjs +120 -0
  86. package/client/esm2022/lib/ui/index.mjs +12 -0
  87. package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.mjs +5 -0
  88. package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.mjs +115 -0
  89. package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.mjs +50 -0
  90. package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.mjs +5 -0
  91. package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.mjs +61 -0
  92. package/client/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.mjs +21 -0
  93. package/client/esm2022/lib/ui/taon-admin-mode-configuration/index.mjs +6 -0
  94. package/client/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +14 -3
  95. package/client/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.mjs +54 -0
  96. package/client/esm2022/lib/ui/taon-full-material.module.mjs +179 -0
  97. package/client/esm2022/lib/ui/taon-github-fork-me-corner/index.mjs +5 -0
  98. package/client/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.mjs +18 -0
  99. package/client/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.mjs +21 -0
  100. package/client/esm2022/lib/ui/taon-notifications/index.mjs +7 -0
  101. package/client/esm2022/lib/ui/taon-notifications/taon-notifications.component.mjs +25 -0
  102. package/client/esm2022/lib/ui/taon-notifications/taon-notifications.models.mjs +5 -0
  103. package/client/esm2022/lib/ui/taon-notifications/taon-notifications.module.mjs +21 -0
  104. package/client/esm2022/lib/ui/taon-notifications/taon-notifications.service.mjs +48 -0
  105. package/client/esm2022/lib/ui/taon-progress-bar/index.mjs +5 -0
  106. package/client/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.component.mjs +98 -0
  107. package/client/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.module.mjs +22 -0
  108. package/client/esm2022/lib/ui/taon-session-passcode/index.mjs +4 -0
  109. package/client/esm2022/lib/ui/taon-session-passcode/taon-session-passcode.component.mjs +120 -0
  110. package/client/esm2022/lib/ui/taon-table/index.mjs +5 -0
  111. package/client/esm2022/lib/ui/taon-table/taon-table.component.mjs +161 -0
  112. package/client/esm2022/lib/ui/taon-table/taon-table.module.mjs +57 -0
  113. package/client/fesm2022/taon.mjs +1445 -75
  114. package/client/fesm2022/taon.mjs.map +1 -1
  115. package/client/lib/base-classes/base-context.d.ts +4 -1
  116. package/client/lib/base-classes/base-injector.d.ts +5 -0
  117. package/client/lib/base-classes/base.d.ts +4 -1
  118. package/client/lib/create-context.d.ts +4 -1
  119. package/client/lib/decorators/http/http-decorators.d.ts +2 -0
  120. package/client/lib/endpoint-context.d.ts +3 -2
  121. package/client/lib/index.d.ts +13 -3
  122. package/client/lib/ui/directives/index.d.ts +4 -0
  123. package/client/lib/ui/directives/safe.pipe.d.ts +11 -0
  124. package/client/lib/ui/directives/taon-inject-html.directive.d.ts +10 -0
  125. package/client/lib/ui/directives/taon-long-press.directive.d.ts +26 -0
  126. package/client/lib/ui/index.d.ts +10 -0
  127. package/client/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.d.ts +3 -0
  128. package/client/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.d.ts +33 -0
  129. package/client/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.d.ts +16 -0
  130. package/client/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.d.ts +3 -0
  131. package/client/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.d.ts +17 -0
  132. package/client/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.d.ts +10 -0
  133. package/client/lib/ui/taon-admin-mode-configuration/index.d.ts +4 -0
  134. package/client/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.d.ts +17 -0
  135. package/client/lib/ui/taon-full-material.module.d.ts +47 -0
  136. package/client/lib/ui/taon-github-fork-me-corner/index.d.ts +3 -0
  137. package/client/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.d.ts +7 -0
  138. package/client/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.d.ts +9 -0
  139. package/client/lib/ui/taon-notifications/index.d.ts +5 -0
  140. package/client/lib/ui/taon-notifications/taon-notifications.component.d.ts +13 -0
  141. package/client/lib/ui/taon-notifications/taon-notifications.models.d.ts +7 -0
  142. package/client/lib/ui/taon-notifications/taon-notifications.module.d.ts +8 -0
  143. package/client/lib/ui/taon-notifications/taon-notifications.service.d.ts +15 -0
  144. package/client/lib/ui/taon-progress-bar/index.d.ts +3 -0
  145. package/client/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +19 -0
  146. package/client/lib/ui/taon-progress-bar/taon-progress-bar.module.d.ts +10 -0
  147. package/client/lib/ui/taon-session-passcode/index.d.ts +2 -0
  148. package/client/lib/ui/taon-session-passcode/taon-session-passcode.component.d.ts +39 -0
  149. package/client/lib/ui/taon-table/index.d.ts +3 -0
  150. package/client/lib/ui/taon-table/taon-table.component.d.ts +37 -0
  151. package/client/lib/ui/taon-table/taon-table.module.d.ts +17 -0
  152. package/lib/base-classes/base-context.d.ts +4 -1
  153. package/lib/base-classes/base-injector.d.ts +5 -0
  154. package/lib/base-classes/base-injector.js +11 -0
  155. package/lib/base-classes/base-injector.js.map +1 -1
  156. package/lib/base-classes/base.d.ts +4 -1
  157. package/lib/create-context.d.ts +4 -1
  158. package/lib/create-context.js +2 -2
  159. package/lib/create-context.js.map +1 -1
  160. package/lib/decorators/http/http-decorators.d.ts +3 -1
  161. package/lib/decorators/http/http-decorators.js +2 -0
  162. package/lib/decorators/http/http-decorators.js.map +1 -1
  163. package/lib/endpoint-context.d.ts +3 -2
  164. package/lib/endpoint-context.js +136 -97
  165. package/lib/endpoint-context.js.map +1 -1
  166. package/lib/index.d.ts +13 -3
  167. package/lib/ui/directives/index.d.ts +3 -4
  168. package/lib/ui/directives/index.js +2 -2
  169. package/lib/ui/index.d.ts +9 -0
  170. package/lib/ui/index.js +5 -0
  171. package/lib/ui/index.js.map +1 -0
  172. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.js +2 -2
  173. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.d.ts +3 -5
  174. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.js +2 -2
  175. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/taon-db-admin.component.d.ts +2 -3
  176. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.js +2 -2
  177. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.d.ts +1 -2
  178. package/lib/ui/taon-admin-mode-configuration/index.d.ts +0 -1
  179. package/lib/ui/taon-admin-mode-configuration/index.js +2 -2
  180. package/lib/ui/taon-github-fork-me-corner/index.js +2 -2
  181. package/lib/ui/taon-github-fork-me-ribbon/index.js +2 -2
  182. package/lib/ui/taon-notifications/taon-notifications.models.js +2 -2
  183. package/lib/ui/taon-progress-bar/index.js +2 -2
  184. package/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +1 -0
  185. package/lib/ui/taon-session-passcode/index.js +2 -2
  186. package/lib/ui/taon-table/index.d.ts +2 -0
  187. package/lib/ui/taon-table/index.js +5 -0
  188. package/lib/ui/taon-table/index.js.map +1 -0
  189. package/lib/ui/taon-table/taon-table.component.d.ts +33 -0
  190. package/lib/ui/taon-table/taon-table.module.d.ts +2 -0
  191. package/package.json +7 -7
  192. package/tmp-environment.json +30 -29
  193. package/websql/esm2022/lib/base-classes/base-injector.mjs +8 -1
  194. package/websql/esm2022/lib/create-context.mjs +5 -3
  195. package/websql/esm2022/lib/decorators/http/http-decorators.mjs +3 -1
  196. package/websql/esm2022/lib/endpoint-context.mjs +35 -9
  197. package/websql/esm2022/lib/index.mjs +2 -1
  198. package/websql/esm2022/lib/ui/directives/index.mjs +6 -0
  199. package/websql/esm2022/lib/ui/directives/safe.pipe.mjs +43 -0
  200. package/websql/esm2022/lib/ui/directives/taon-inject-html.directive.mjs +24 -0
  201. package/websql/esm2022/lib/ui/directives/taon-long-press.directive.mjs +120 -0
  202. package/websql/esm2022/lib/ui/index.mjs +12 -0
  203. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.mjs +5 -0
  204. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.mjs +115 -0
  205. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.mjs +50 -0
  206. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.mjs +5 -0
  207. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.mjs +61 -0
  208. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.mjs +21 -0
  209. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/index.mjs +6 -0
  210. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +14 -3
  211. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.mjs +54 -0
  212. package/websql/esm2022/lib/ui/taon-full-material.module.mjs +179 -0
  213. package/websql/esm2022/lib/ui/taon-github-fork-me-corner/index.mjs +5 -0
  214. package/websql/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.mjs +18 -0
  215. package/websql/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.mjs +21 -0
  216. package/websql/esm2022/lib/ui/taon-notifications/index.mjs +7 -0
  217. package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.component.mjs +25 -0
  218. package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.models.mjs +5 -0
  219. package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.module.mjs +21 -0
  220. package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.service.mjs +48 -0
  221. package/websql/esm2022/lib/ui/taon-progress-bar/index.mjs +5 -0
  222. package/websql/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.component.mjs +50 -0
  223. package/websql/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.module.mjs +22 -0
  224. package/websql/esm2022/lib/ui/taon-session-passcode/index.mjs +4 -0
  225. package/websql/esm2022/lib/ui/taon-session-passcode/taon-session-passcode.component.mjs +120 -0
  226. package/websql/esm2022/lib/ui/taon-table/index.mjs +5 -0
  227. package/websql/esm2022/lib/ui/taon-table/taon-table.component.mjs +161 -0
  228. package/websql/esm2022/lib/ui/taon-table/taon-table.module.mjs +57 -0
  229. package/websql/fesm2022/taon.mjs +1414 -92
  230. package/websql/fesm2022/taon.mjs.map +1 -1
  231. package/websql/lib/base-classes/base-context.d.ts +4 -1
  232. package/websql/lib/base-classes/base-injector.d.ts +5 -0
  233. package/websql/lib/base-classes/base.d.ts +4 -1
  234. package/websql/lib/create-context.d.ts +4 -1
  235. package/websql/lib/decorators/http/http-decorators.d.ts +2 -0
  236. package/websql/lib/endpoint-context.d.ts +3 -2
  237. package/websql/lib/index.d.ts +13 -3
  238. package/websql/lib/ui/directives/index.d.ts +4 -0
  239. package/websql/lib/ui/directives/safe.pipe.d.ts +11 -0
  240. package/websql/lib/ui/directives/taon-inject-html.directive.d.ts +10 -0
  241. package/websql/lib/ui/directives/taon-long-press.directive.d.ts +26 -0
  242. package/websql/lib/ui/index.d.ts +10 -0
  243. package/websql/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.d.ts +3 -0
  244. package/websql/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.d.ts +33 -0
  245. package/websql/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.d.ts +16 -0
  246. package/websql/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.d.ts +3 -0
  247. package/websql/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.d.ts +17 -0
  248. package/websql/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.d.ts +10 -0
  249. package/websql/lib/ui/taon-admin-mode-configuration/index.d.ts +4 -0
  250. package/websql/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.d.ts +17 -0
  251. package/websql/lib/ui/taon-full-material.module.d.ts +47 -0
  252. package/websql/lib/ui/taon-github-fork-me-corner/index.d.ts +3 -0
  253. package/websql/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.d.ts +7 -0
  254. package/websql/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.d.ts +9 -0
  255. package/websql/lib/ui/taon-notifications/index.d.ts +5 -0
  256. package/websql/lib/ui/taon-notifications/taon-notifications.component.d.ts +13 -0
  257. package/websql/lib/ui/taon-notifications/taon-notifications.models.d.ts +7 -0
  258. package/websql/lib/ui/taon-notifications/taon-notifications.module.d.ts +8 -0
  259. package/websql/lib/ui/taon-notifications/taon-notifications.service.d.ts +15 -0
  260. package/websql/lib/ui/taon-progress-bar/index.d.ts +3 -0
  261. package/websql/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +19 -0
  262. package/websql/lib/ui/taon-progress-bar/taon-progress-bar.module.d.ts +10 -0
  263. package/websql/lib/ui/taon-session-passcode/index.d.ts +2 -0
  264. package/websql/lib/ui/taon-session-passcode/taon-session-passcode.component.d.ts +39 -0
  265. package/websql/lib/ui/taon-table/index.d.ts +3 -0
  266. package/websql/lib/ui/taon-table/taon-table.component.d.ts +37 -0
  267. package/websql/lib/ui/taon-table/taon-table.module.d.ts +17 -0
  268. /package/lib/ui/directives/{firedev-inject-html.directive.d.ts → taon-inject-html.directive.d.ts} +0 -0
  269. /package/lib/ui/directives/{firedev-long-press.directive.d.ts → taon-long-press.directive.d.ts} +0 -0
  270. /package/lib/ui/{toan-full-material.module.d.ts → taon-full-material.module.d.ts} +0 -0
@@ -20,11 +20,6 @@ export class EndpointContext {
20
20
  static initNgZone(ngZone) {
21
21
  this.ngZone = ngZone;
22
22
  }
23
- static findForTraget(classFnOrObject) {
24
- const obj = ClassHelpers.getClassFnFromObject(classFnOrObject) || {};
25
- return (classFnOrObject[Symbols.ctxInClassOrClassObj] ||
26
- obj[Symbols.ctxInClassOrClassObj]);
27
- }
28
23
  get realtimeClient() {
29
24
  return this.realtime.client;
30
25
  }
@@ -151,9 +146,19 @@ export class EndpointContext {
151
146
  };
152
147
  }
153
148
  async init(options) {
154
- const { initFromRecrusiveContextResovle } = options || {}; // TODO use it ?
149
+ const { initFromRecrusiveContextResovle, overrideHost, overrideRemoteHost } = options || {}; // TODO use it ?
155
150
  this.inited = true;
156
151
  this.config = this.configFn(ENV);
152
+ if (overrideHost && overrideRemoteHost) {
153
+ if (Helpers.isWebSQL) {
154
+ throw new Error(`You can't have overrideHost and overrideRemoteHost at the same time`);
155
+ }
156
+ Helpers.error(`You can't have overrideHost and overrideRemoteHost at the same time`, false, true);
157
+ /* */
158
+ /* */
159
+ }
160
+ this.config.host = overrideHost ? overrideHost : this.config.host;
161
+ this.config.remoteHost = overrideRemoteHost ? overrideRemoteHost : this.config.remoteHost;
157
162
  if (this.config.host) {
158
163
  this.mode = 'backend-frontend(tcp+udp)';
159
164
  /* */
@@ -400,6 +405,9 @@ export class EndpointContext {
400
405
  /* */
401
406
  /* */
402
407
  /* */
408
+ /* */
409
+ /* */
410
+ /* */
403
411
  return (void 0);
404
412
  }
405
413
  displayRoutes(app) {
@@ -514,7 +522,7 @@ export class EndpointContext {
514
522
  }
515
523
  checkIfContextInitialized() {
516
524
  if (_.isUndefined(this.config)) {
517
- throw new Error(`Please check if your context has been initilized.
525
+ throw new Error(`Please check if your context has been initialized.
518
526
 
519
527
 
520
528
  await Context.initialize();
@@ -575,6 +583,9 @@ export class EndpointContext {
575
583
  }
576
584
  }
577
585
  async reinitControllers() {
586
+ if (this.remoteHost) {
587
+ return;
588
+ }
578
589
  const controllers = this.getClassesInstancesArrBy(Models.ClassType.CONTROLLER);
579
590
  for (const ctrl of controllers) {
580
591
  if (_.isFunction(ctrl.initExampleDbData)) {
@@ -586,6 +597,9 @@ export class EndpointContext {
586
597
  }
587
598
  }
588
599
  async initClasses() {
600
+ if (this.remoteHost) {
601
+ return;
602
+ }
589
603
  for (const classTypeName of [
590
604
  Models.ClassType.PROVIDER,
591
605
  Models.ClassType.REPOSITORY,
@@ -666,6 +680,9 @@ export class EndpointContext {
666
680
  /* */
667
681
  /* */
668
682
  /* */
683
+ /* */
684
+ /* */
685
+ /* */
669
686
  return (void 0);
670
687
  }
671
688
  async initEntities() {
@@ -695,6 +712,9 @@ export class EndpointContext {
695
712
  /* */
696
713
  /* */
697
714
  /* */
715
+ /* */
716
+ /* */
717
+ /* */
698
718
  }
699
719
  async initDatabaseConnection() {
700
720
  /* */
@@ -781,6 +801,9 @@ export class EndpointContext {
781
801
  /* */
782
802
  /* */
783
803
  /* */
804
+ /* */
805
+ /* */
806
+ /* */
784
807
  return (void 0);
785
808
  }
786
809
  initMetadata() {
@@ -863,6 +886,9 @@ export class EndpointContext {
863
886
  }
864
887
  }
865
888
  writeActiveRoutes() {
889
+ if (this.remoteHost) {
890
+ return;
891
+ }
866
892
  const contexts = [this];
867
893
  /* */
868
894
  /* */
@@ -901,7 +927,7 @@ export class EndpointContext {
901
927
  /* */
902
928
  return (void 0);
903
929
  }
904
- initMidleware() {
930
+ initMiddlewares() {
905
931
  /* */
906
932
  /* */
907
933
  /* */
@@ -1617,4 +1643,4 @@ instead
1617
1643
  }
1618
1644
  ;
1619
1645
  ({}); // @--end-of-file-for-module=taon lib/endpoint-context.ts
1620
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0L3Rhb24vcHJvamVjdHMvdGFvbi9zcmMvbGliL2VuZHBvaW50LWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsK0NBQStDO0FBK0IvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUksT0FBTyxFQUFJLE1BQU0sSUFBSSxhQUFhLEVBQUksUUFBUSxFQUFJLFdBQVcsR0FBRyxNQUFNLGtCQUFrQixDQUFDLENBQUEsS0FBSztBQUN6RyxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxJQUFJLEVBQVcsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBVTFCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBS3hELE1BQU0sT0FBTyxlQUFlO0lBTTFCLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBYztRQUU5QixJQUFJLENBQUMsTUFBTSxH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TCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQsSUFBSSxNQUFNO1FBRVIsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDO1FB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LElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUlELEtBQUssQ0FBQyxlQUFlO1FBQ3ZCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQsS0FBSyxDQUFDLFlBQVk7UUFDcEIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7SUFFSCxDQUFDO0lBS0QsS0FBSyxDQUFDLHNCQUFzQjtRQUM5QixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtB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QztJQUNsQixDQUFDO0lBSU8sYUFBYTtRQUN2QixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7SUFFSCxDQUFDO0lBSU8sVUFBVSxDQUVoQixJQUFpQyxFQUNqQyxZQUFpQyxFQUNqQyxXQUEyQyxFQUMzQyxXQUFtQixFQUNuQixNQUFnQjtRQUlwQixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUdELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFHckIsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbkQsTUFBTSxRQUFRLEdBQ1osWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSztZQUNqQzs7ZUFFRztZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsTUFBYSxDQUFDO1lBQ2pDOztlQUVHO1lBQ0gsY0FBYyxDQUNmLENBQUM7WUFDSixJQUFJLE1BQU0sR0FBRyxNQUFNLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUdGLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLFdBQVcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDeEMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsR0FBRyxXQUFXLEVBQUU7WUFDakMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNoQixXQUFXLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFJaEQsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0IsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1FBRUQsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFM0IsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBSUwsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztRQUVELENBQUM7UUFFRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLFdBQVc7WUFDdEIsTUFBTSxFQUFFLFlBQVksQ0FBQyxJQUFJO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBSUQ7O09BRUc7SUFDSyxVQUFVLENBRWhCLE1BQWdCLEVBQ2hCLElBQWlDLEVBQ2pDLFlBQTJDLEVBQzNDLFdBQW1CO1FB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LEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNM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T0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQyxDQUFDO0lBRUosQ0FBQztDQUVGO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx5REFBeUQiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVkZWYgKi9cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cbmltcG9ydCB7IFRhb25BZG1pbiB9IGZyb20gJy4vdWkvdGFvbi1hZG1pbi1tb2RlLWNvbmZpZ3VyYXRpb24vdGFvbi1hZG1pbi5zZXJ2aWNlJztcblxuaW1wb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ2xhc3NIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzL2NsYXNzLWhlbHBlcnMnO1xuaW1wb3J0IHsgU3ltYm9scyB9IGZyb20gJy4vc3ltYm9scyc7XG5pbXBvcnQgeyBfLCBIZWxwZXJzIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgdHlwZSB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuL2NyZWF0ZS1jb250ZXh0JztcbmltcG9ydCB7IERJVGFvbkNvbnRhaW5lciB9IGZyb20gJy4vZGVwZW5kZW5jeS1pbmplY3Rpb24vZGktY29udGFpbmVyJztcbmltcG9ydCB7IFRhb25Db250cm9sbGVyT3B0aW9ucyB9IGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL2NvbnRyb2xsZXItZGVjb3JhdG9yJztcbmltcG9ydCB7IFRhb25IZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzL3Rhb24taGVscGVycyc7XG5pbXBvcnQgeyAgIE1hcHBpbmcsICAgTW9kZWxzIGFzIE1vZGVsc05nMlJlc3QsICAgUmVzb3VyY2UsICAgUmVzdEhlYWRlcnMsIH0gZnJvbSAnbmcyLXJlc3QvYnJvd3Nlcic7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG5cbmltcG9ydCB7IEpTT04xMCB9IGZyb20gJ2pzb24xMC9icm93c2VyJztcbmltcG9ydCB7IHBhdGggfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmltcG9ydCB7IGZyb20sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVByb2Nlc3MgfSBmcm9tICcuL2VudGl0eS1wcm9jZXNzJztcbmltcG9ydCB7IGdldFJlc3BvbnNlVmFsdWUgfSBmcm9tICcuL2dldC1yZXNwb25zZS12YWx1ZSc7XG5pbXBvcnQgdHlwZSB7IEFwcGxpY2F0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHR5cGUgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgICBEYXRhU291cmNlLCAgIERhdGFTb3VyY2VPcHRpb25zLCAgIGdldE1ldGFkYXRhQXJnc1N0b3JhZ2UsIH0gZnJvbSAndGFvbi10eXBlb3JtL2Jyb3dzZXInOy8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG5cbmltcG9ydCB7IFRhb25FbnRpdHlPcHRpb25zIH0gZnJvbSAnLi9kZWNvcmF0b3JzL2NsYXNzZXMvZW50aXR5LWRlY29yYXRvcic7XG5pbXBvcnQgdHlwZSB7IFNlcnZlciB9IGZyb20gJ2h0dHAnO1xuaW1wb3J0IHsgRU5WIH0gZnJvbSAnLi9lbnYnO1xuaW1wb3J0IHR5cGUgeyBCYXNlQ2xhc3MgfSBmcm9tICcuL2Jhc2UtY2xhc3Nlcy9iYXNlLWNsYXNzJztcbmltcG9ydCB7IFJlYWx0aW1lQ29yZSB9IGZyb20gJy4vcmVhbHRpbWUvcmVhbHRpbWUtY29yZSc7XG5pbXBvcnQgeyBUYW9uU3Vic2NyaWJlck9wdGlvbnMgfSBmcm9tICcuL2RlY29yYXRvcnMvY2xhc3Nlcy9zdWJzY3JpYmVyLWRlY29yYXRvcic7XG5pbXBvcnQgeyBCYXNlU3Vic2NyaWJlckZvckVudGl0eSB9IGZyb20gJy4vYmFzZS1jbGFzc2VzL2Jhc2Utc3Vic2NyaWJlci1mb3ItZW50aXR5JztcblxuXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRDb250ZXh0IHtcblxuXG5cbiAgcHJpdmF0ZSBzdGF0aWMgbmdab25lOiBOZ1pvbmU7XG5cbiAgc3RhdGljIGluaXROZ1pvbmUobmdab25lOiBOZ1pvbmUpIHtcblxuICAgIHRoaXMubmdab25lID0gbmdab25lO1xuXG4gIH1cbiAgcHVibGljIHN0YXRpYyBmaW5kRm9yVHJhZ2V0KGNsYXNzRm5Pck9iamVjdDogYW55KTogRW5kcG9pbnRDb250ZXh0IHtcbiAgICBjb25zdCBvYmogPSBDbGFzc0hlbHBlcnMuZ2V0Q2xhc3NGbkZyb21PYmplY3QoY2xhc3NGbk9yT2JqZWN0KSB8fCB7fTtcbiAgICByZXR1cm4gKFxuICAgICAgY2xhc3NGbk9yT2JqZWN0W1N5bWJvbHMuY3R4SW5DbGFzc09yQ2xhc3NPYmpdIHx8XG4gICAgICBvYmpbU3ltYm9scy5jdHhJbkNsYXNzT3JDbGFzc09ial1cbiAgICApO1xuICB9XG5cblxuXG5cblxuICBkaXNhYmxlZFJlYWx0aW1lOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBjaGVjayB3aGV0aGVyIGNvbnRleHQgaXMgaW5pdGVkXG4gICAqICh3aXRoIGluaXQoKSBmdW5jdGlvbiApXG4gICAqL1xuICBwdWJsaWMgaW5pdGVkOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsSW5zdGFjZU9ialN5bWJvbCA9IFN5bWJvbCgnbG9jYWxJbnN0YWNlT2JqU3ltYm9sJyk7XG5cblxuICAvKipcbiAgICogYWxsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGZyb20gY29udGV4dFxuICAgKiBrZXkgaXMgY2xhc3MgbmFtZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFsbENsYXNzZXNJbnN0YW5jZXMgPSB7fTtcblxuXG5cbiAgcHJpdmF0ZSByZWFkb25seSBjbGFzc0luc3RhbmNlc0J5TmFtZU9iaiA9IHt9O1xuXG5cblxuICBwcml2YXRlIHJlYWRvbmx5IG9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyID0ge307XG5cblxuXG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVSb3V0ZXM6IHtcbiAgICByb3V0ZVBhdGg6IHN0cmluZztcbiAgICBtZXRob2Q6IE1vZGVscy5IdHRwLlJlc3QuSHR0cE1ldGhvZDtcbiAgfVtdID0gW107XG5cblxuXG4gIHByaXZhdGUgaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzID0gW1xuICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgIE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWSxcbiAgICBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVIsXG4gIF07XG5cblxuICBwcml2YXRlIGFsbFR5cGVzZnJvbUNvbnRleHRzID0gW1xuICAgIC4uLnRoaXMuaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzLFxuICAgIE1vZGVscy5DbGFzc1R5cGUuRU5USVRZLFxuICBdO1xuXG5cbiAgcHVibGljIGV4cHJlc3NBcHA6IEFwcGxpY2F0aW9uID0ge30gYXMgYW55O1xuXG5cblxuICBwdWJsaWMgc2VydmVyVGNwVWRwOiBTZXJ2ZXI7XG5cblxuXG4gIGRhdGFiYXNlQ29uZmlnPzogTW9kZWxzLkRhdGFiYXNlQ29uZmlnO1xuICBwcml2YXRlIGF1dG9HZW5lcmF0ZWRDb25maWc/OiBNb2RlbHMuRGF0YWJhc2VDb25maWc7XG5cblxuXG4gIG1vZGU6IE1vZGVscy5GcmFtZXdvcmtNb2RlO1xuXG5cblxuICBzZXNzaW9uPzogTW9kZWxzLklTZXNzaW9uO1xuXG5cblxuICBwdWJsaWMgY29ubmVjdGlvbjogRGF0YVNvdXJjZTtcblxuXG5cbiAgcHJpdmF0ZSBlbnRpdGllc1RyaWdnZXJzID0ge307XG5cblxuXG4gIHByaXZhdGUgcmVhbHRpbWU6IFJlYWx0aW1lQ29yZTtcbiAgZ2V0IHJlYWx0aW1lQ2xpZW50KCkge1xuICAgIHJldHVybiB0aGlzLnJlYWx0aW1lLmNsaWVudDtcbiAgfVxuICBnZXQgcmVhbHRpbWVTZXJ2ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhbHRpbWUuc2VydmVyO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBhdmFpbGFibGUgYWZ0ZXIgaW5pdCgpXG4gICAqL1xuICBwdWJsaWMgY29uZmlnOiBNb2RlbHMuQ29udGV4dE9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cblxuXG4gIGdldCBsb2dIdHRwKCk6IGJvb2xlYW4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMuY29uZmlnPy5sb2dzKSkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLmxvZ3MgYXMgTW9kZWxzLkNvbnRlY3Rpb25PcHRpb25zTG9ncykuaHR0cDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5sb2dzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGxvZ1JlYWx0aW1lKCk6IGJvb2xlYW4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMuY29uZmlnPy5sb2dzKSkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLmxvZ3MgYXMgTW9kZWxzLkNvbnRlY3Rpb25PcHRpb25zTG9ncykucmVhbHRpbWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ubG9ncyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBsb2dGcmFtZXdvcmsoKTogYm9vbGVhbiB7XG4gICAgaWYgKF8uaXNPYmplY3QodGhpcy5jb25maWc/LmxvZ3MpKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5jb25maWcubG9ncyBhcyBNb2RlbHMuQ29udGVjdGlvbk9wdGlvbnNMb2dzKS5mcmFtZXdvcms7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ubG9ncyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBsb2dEYigpOiBib29sZWFuIHtcbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZz8ubG9ncykpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmNvbmZpZy5sb2dzIGFzIE1vZGVscy5Db250ZWN0aW9uT3B0aW9uc0xvZ3MpLmRiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmxvZ3MgPT09IHRydWU7XG4gIH1cblxuXG5cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3JpZ2luYWxDb25maWc6IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PixcbiAgICBwcml2YXRlIGNvbmZpZ0ZuOiAoXG4gICAgICBlbnY6IGFueSxcbiAgICApID0+IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PixcbiAgKSB7fVxuXG5cblxuICBwdWJsaWMgYXN5bmMgaW5pdChvcHRpb25zPzogeyBpbml0RnJvbVJlY3J1c2l2ZUNvbnRleHRSZXNvdmxlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgeyBpbml0RnJvbVJlY3J1c2l2ZUNvbnRleHRSZXNvdmxlIH0gPSBvcHRpb25zIHx8IHt9OyAvLyBUT0RPIHVzZSBpdCA/XG5cbiAgICB0aGlzLmluaXRlZCA9IHRydWU7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZ0ZuKEVOVik7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmhvc3QpIHtcbiAgICAgIHRoaXMubW9kZSA9ICdiYWNrZW5kLWZyb250ZW5kKHRjcCt1ZHApJztcbi8qICovXG4vKiAqL1xuICBcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlbW90ZUhvc3QpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5ob3N0KSB7XG4gICAgICAgIEhlbHBlcnMuZXJyb3IoXG4gICAgICAgICAgYFt0YW9uXSBZb3UgY2FuJ3QgaGF2ZSByZW1vdGVIb3N0IGFuZCBob3N0IGF0IHRoZSBzYW1lIHRpbWVgLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLm1vZGUgPSAncmVtb3RlLWJhY2tlbmQodGNwK3VkcCknO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy51c2VJcGNXaGVuRWxlY3Ryb24gJiYgSGVscGVycy5pc0VsZWN0cm9uKSB7XG4gICAgICBpZiAoSGVscGVycy5pc1dlYlNRTCkge1xuICAgICAgICB0aGlzLm1vZGUgPSAnYmFja2VuZC1mcm9udGVuZCh3ZWJzcWwtZWxlY3Ryb24pJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9kZSA9ICdiYWNrZW5kLWZyb250ZW5kKGlwYy1lbGVjdHJvbiknO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5tb2RlICYmICF0aGlzLmNvbmZpZy5hYnN0cmFjdCkge1xuICAgICAgSGVscGVycy5lcnJvcihcbiAgICAgICAgYFt0YW9uXSBDb250ZXh0IFwiJHt0aGlzLmNvbnRleHROYW1lfVwiOiBZb3UgbmVlZCB0byBwcm92aWRlIGhvc3Qgb3IgcmVtb3RlSG9zdCBvciB1c2VJcGNXaGVuRWxlY3Ryb25gLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4vKiAqL1xuLyogKi9cbiAgXG4gICAgfVxuXG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5kYXRhYmFzZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kYXRhYmFzZUNvbmZpZyA9IHRoaXMuZ2V0QXV0b0dlbmVyYXRlZENvbmZpZygpO1xuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZy5kYXRhYmFzZSkpIHtcbiAgICAgIHRoaXMuZGF0YWJhc2VDb25maWcgPSBfLmNsb25lRGVlcChcbiAgICAgICAgdGhpcy5jb25maWcuZGF0YWJhc2UsXG4gICAgICApIGFzIE1vZGVscy5EYXRhYmFzZUNvbmZpZztcbiAgICB9XG5cblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnNlc3Npb24pIHtcbiAgICAgIHRoaXMuc2Vzc2lvbiA9IF8uY2xvbmVEZWVwKHRoaXMuY29uZmlnLnNlc3Npb24pO1xuICAgICAgY29uc3Qgb25lSG91ciA9IDEwMDAgKiA2MCAqIDYwICogMTsgLy8gMjQ7XG4gICAgICBpZiAoIXRoaXMuc2Vzc2lvbi5jb29raWVNYXhBZ2UpIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmNvb2tpZU1heEFnZSA9IG9uZUhvdXI7XG4gICAgICB9XG5cbiAgICAgIGF4aW9zLmRlZmF1bHRzLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgfVxuXG5cblxuICAgIHRoaXMuY29uZmlnLmNvbnRleHRzID0gdGhpcy5jb25maWcuY29udGV4dHMgfHwge307XG4gICAgdGhpcy5jb25maWcuZW50aXRpZXMgPSB0aGlzLmNvbmZpZy5lbnRpdGllcyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5jb250cm9sbGVycyA9IHRoaXMuY29uZmlnLmNvbnRyb2xsZXJzIHx8IHt9O1xuICAgIHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyA9IHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5wcm92aWRlcnMgPSB0aGlzLmNvbmZpZy5wcm92aWRlcnMgfHwge307XG4gICAgdGhpcy5jb25maWcuc3Vic2NyaWJlcnMgPSB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycyB8fCB7fTtcblxuICAgIHRoaXMuY29uZmlnLmVudGl0aWVzID0ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICAgICAgTW9kZWxzLkNsYXNzVHlwZS5FTlRJVFksXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLmVudGl0aWVzLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbmZpZy5jb250cm9sbGVycyA9IHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICAgICkpLFxuICAgICAgLi4udGhpcy5jb25maWcuY29udHJvbGxlcnMsXG4gICAgfTtcblxuICAgIHRoaXMuY29uZmlnLnByb3ZpZGVycyA9IHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgICAgIE1vZGVscy5DbGFzc1R5cGUuUFJPVklERVIsXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLnByb3ZpZGVycyxcbiAgICB9O1xuXG4gICAgdGhpcy5jb25maWcuc3Vic2NyaWJlcnMgPSB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgICAgICBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVIsXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLnN1YnNjcmliZXJzLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMgPSB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgICAgICBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyxcbiAgICB9O1xuXG5cblxuXG5cbiAgICB0aGlzLmNvbmZpZy5jb250cm9sbGVycyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcuY29udHJvbGxlcnMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgfSk7XG4gICAgdGhpcy5jb25maWcucmVwb3NpdG9yaWVzID0gdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgY2xhc3Nlc0lucHV0OiB0aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgfSk7XG4gICAgdGhpcy5jb25maWcucHJvdmlkZXJzID0gdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgY2xhc3Nlc0lucHV0OiB0aGlzLmNvbmZpZy5wcm92aWRlcnMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgIH0pO1xuICAgIHRoaXMuY29uZmlnLnN1YnNjcmliZXJzID0gdGhpcy5jbG9uZUNsYXNzZXNPYmpXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgY2xhc3Nlc0lucHV0OiB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycyxcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjdHg6IHRoaXMsXG4gICAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUuU1VCU0NSSUJFUixcbiAgICB9KTtcblxuXG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgdGhpcy5pbmplY3RhYmxlVHlwZXNmcm9tQ29udGV4dHMpIHtcbiAgICAgIHRoaXMuY2xhc3NJbnN0YW5jZXNCeU5hbWVPYmpbY2xhc3NUeXBlTmFtZV0gPSB7fTtcbiAgICAgIHRoaXMub2JqV2l0aENsYXNzZXNJbnN0YW5jZXNBcnJbY2xhc3NUeXBlTmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgdGhpcy5pbmplY3RhYmxlVHlwZXNmcm9tQ29udGV4dHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlSW5zdGFuY2VzKFxuICAgICAgICB0aGlzLmNvbmZpZ1tNb2RlbHMuQ2xhc3NUeXBlS2V5W2NsYXNzVHlwZU5hbWVdXSxcbiAgICAgICAgY2xhc3NUeXBlTmFtZSxcbiAgICAgICk7XG4gICAgfVxuXG5cblxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdiYWNrZW5kLWZyb250ZW5kKHRjcCt1ZHApJyAmJiAhdGhpcy5jb25maWcuYWJzdHJhY3QpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgIH1cblxuXG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLmRpc2FibGVkUmVhbHRpbWUgPSAhIXRoaXMuY29uZmlnLmRpc2FibGVkUmVhbHRpbWU7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICB0aGlzLnJlYWx0aW1lID0gbmV3IFJlYWx0aW1lQ29yZSh0aGlzKTtcbiAgICB9XG5cblxuXG5cbiAgICBpZiAodGhpcy5jb25maWcuYWJzdHJhY3QpIHtcbiAgICAgIHRoaXMubG9nRnJhbWV3b3JrICYmXG4gICAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgICBgW3Rhb25dIENyZWF0ZSBhYnN0cmFjdCBjb250ZXh0OiAke3RoaXMuY29uZmlnLmNvbnRleHROYW1lfWAsXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5yZW1vdGVIb3N0KSB7XG4gICAgICAgIHRoaXMubG9nRnJhbWV3b3JrICYmXG4gICAgICAgICAgSGVscGVycy5pbmZvKFxuICAgICAgICAgICAgYFt0YW9uXSBDcmVhdGUgY29udGV4dCBmb3IgcmVtb3RlIGhvc3Q6ICR7dGhpcy5jb25maWcucmVtb3RlSG9zdH1gLFxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgICAgIEhlbHBlcnMuaW5mbyhgW3Rhb25dIENyZWF0ZSBjb250ZXh0IGZvciBob3N0OiAke3RoaXMuY29uZmlnLmhvc3R9YCk7XG4gICAgICB9XG4gICAgfVxuXG5cblxuICAgIE9iamVjdC5rZXlzKHRoaXMuY29uZmlnKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0aGlzLm9yaWdpbmFsQ29uZmlnW2tleV0gPSB0aGlzLmNvbmZpZ1trZXldO1xuICAgIH0pO1xuICB9XG5cblxuXG4gIHByaXZhdGUgZ2V0QXV0b0dlbmVyYXRlZENvbmZpZygpOiBNb2RlbHMuRGF0YWJhc2VDb25maWcge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgZ2V0IG5nWm9uZSgpOiBhbnkge1xuXG4gICAgcmV0dXJuIEVuZHBvaW50Q29udGV4dC5uZ1pvbmU7XG5cbiAgICByZXR1cm47XG4gIH1cblxuXG5cbiAgc3RhcnRTZXJ2ZXIoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBkaXNwbGF5Um91dGVzKGFwcCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgZ2V0IG1vZGVBbGxvd3NEYXRhYmFzZUNyZWF0aW9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm1vZGUgPT09ICdiYWNrZW5kLWZyb250ZW5kKHRjcCt1ZHApJyB8fFxuICAgICAgdGhpcy5tb2RlID09PSAnYmFja2VuZC1mcm9udGVuZCh3ZWJzcWwpJyB8fFxuICAgICAgdGhpcy5tb2RlID09PSAnYmFja2VuZC1mcm9udGVuZChpcGMtZWxlY3Ryb24pJ1xuICAgICk7XG4gIH1cblxuXG5cblxuICBwcml2YXRlIGNsb25lQ2xhc3NXaXRoTmV3TWV0YWRhdGEgPSA8XG4gICAgVCBleHRlbmRzIHsgbmV3ICguLi5hcmdzOiBhbnlbXSk6IGFueSB9LFxuICA+KHtcbiAgICBCYXNlQ2xhc3MsXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbmZpZyxcbiAgICBjdHgsXG4gICAgY2xhc3NUeXBlLFxuICB9OiB7XG4gICAgQmFzZUNsYXNzOiBUO1xuICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgIGNvbmZpZzogTW9kZWxzLkNvbnRleHRPcHRpb25zPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuICAgIGN0eDogRW5kcG9pbnRDb250ZXh0O1xuICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZTtcbiAgfSk6IFQgPT4ge1xuXG4gICAgY29uc3QgY2xvbmVDbGFzcyA9ICgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgQmFzZUNsYXNzW1N5bWJvbHMuZnVsbENsYXNzTmFtZVN0YXRpY1Byb3BlcnR5XSA9PT1cbiAgICAgICAgYCR7Y3R4LmNvbnRleHROYW1lfS4ke2NsYXNzTmFtZX1gXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIEJhc2VDbGFzcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XG5cblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHN0YXRpYyBbU3ltYm9scy5vcmlnbmFsQ2xhc3NdID0gQmFzZUNsYXNzO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc3RhdGljIFtTeW1ib2xzLmZ1bGxDbGFzc05hbWVTdGF0aWNQcm9wZXJ0eV0gPSBgJHtjdHguY29udGV4dE5hbWV9LiR7Y2xhc3NOYW1lfWA7XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzdGF0aWMgW1N5bWJvbHMuY2xhc3NOYW1lU3RhdGljUHJvcGVydHldID0gY2xhc3NOYW1lO1xuXG4gICAgICAgIHN0YXRpYyBbU3ltYm9scy5jdHhJbkNsYXNzT3JDbGFzc09ial0gPSBjdHg7XG5cbiAgICAgICAgc3RhdGljIF9fZ2V0RnVsbFBhdGhGb3JDbGFzc19fKGFyciA9IFtdKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXNbU3ltYm9scy5mdWxsQ2xhc3NOYW1lU3RhdGljUHJvcGVydHldO1xuICAgICAgICAgIGFyci5wdXNoKG5hbWUpO1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzW1N5bWJvbHMub3JpZ25hbENsYXNzXSAmJiAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICB0aGlzW1N5bWJvbHMub3JpZ25hbENsYXNzXS5fX2dldEZ1bGxQYXRoRm9yQ2xhc3NfX1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpc1tTeW1ib2xzLm9yaWduYWxDbGFzc10uX19nZXRGdWxsUGF0aEZvckNsYXNzX18oYXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFyci5qb2luKCcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGdldCBmdWxsUGF0aEZvckNsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX19nZXRGdWxsUGF0aEZvckNsYXNzX18oKTtcbiAgICAgICAgfVxuICAgICAgICBbU3ltYm9scy5jdHhJbkNsYXNzT3JDbGFzc09ial0gPSBjdHg7XG5cblxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2xvbmVDbGFzc0Z1bmN0aW9uID0gY2xvbmVDbGFzcygpO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgcmV0dXJuIGNsb25lQ2xhc3NGdW5jdGlvbjtcbiAgfTtcblxuXG5cblxuXG4gIHByaXZhdGUgY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhID0gKHtcbiAgICBjbGFzc2VzSW5wdXQsXG4gICAgY29uZmlnLFxuICAgIGN0eCxcbiAgICBjbGFzc1R5cGUsXG4gIH06IHtcbiAgICBjbGFzc2VzSW5wdXQ6IGFueTtcbiAgICBjb25maWc6IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PjtcbiAgICBjdHg6IEVuZHBvaW50Q29udGV4dDtcbiAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGU7XG4gIH0pID0+IHtcbiAgICBjb25zdCBjbGFzc2VzID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjbGFzc2VzSW5wdXQgfHwge30pKSB7XG4gICAgICBjb25zdCBCYXNlQ2xhc3MgPSBjbGFzc2VzSW5wdXRba2V5XTtcblxuICAgICAgaWYgKCFCYXNlQ2xhc3MpIHtcbiAgICAgICAgSGVscGVycy5lcnJvcihgQ2xhc3MgJHtrZXl9IGlzIG5vdCBkZWZpbmVkIGluIGNvbnRleHQgJHtjdHguY29udGV4dE5hbWV9XG5cbiAgICAgICAgUGxlYXNlIGNoZWNrIGlmIHlvdSBoYXZlIGNvcnJlY3QgaW1wb3J0IGluIGNvbnRleHQgZmlsZVxuXG4gICAgICAgIGApO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NOYW1lID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgU3ltYm9scy5tZXRhZGF0YS5jbGFzc05hbWUsXG4gICAgICAgIEJhc2VDbGFzcyxcbiAgICAgICk7XG5cblxuXG5cblxuICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IGtleTtcbiAgICAgIEJhc2VDbGFzc1tTeW1ib2xzLmNsYXNzTmFtZVN0YXRpY1Byb3BlcnR5XSA9IGNsYXNzTmFtZTtcblxuICAgICAgY29uc3QgY2xvbmVkQ2xhc3MgPSB0aGlzLmNsb25lQ2xhc3NXaXRoTmV3TWV0YWRhdGEoe1xuICAgICAgICBCYXNlQ2xhc3MsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjdHgsXG4gICAgICAgIGNsYXNzVHlwZSxcbiAgICAgIH0pO1xuICAgICAgY2xhc3Nlc1tjbGFzc05hbWVdID0gY2xvbmVkQ2xhc3M7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9O1xuXG5cblxuICBwcml2YXRlIGFzeW5jIGdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLFxuICApIHtcbiAgICBjb25zdCBhcnIgPSBhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHMoY2xhc3NUeXBlKTtcbiAgICByZXR1cm4gYXJyLnJlZHVjZSgoYWNjLCBjKSA9PiB7XG4gICAgICBhY2NbQ2xhc3NIZWxwZXJzLmdldE5hbWUoYyldID0gYztcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzKFxuICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSxcbiAgICBhcnIgPSBbXSxcbiAgKSB7XG4gICAgY29uc3QgY29udGV4dHMgPSBPYmplY3QudmFsdWVzKHRoaXMuY29uZmlnLmNvbnRleHRzIHx8IHt9KSBhcyBSZXR1cm5UeXBlPFxuICAgICAgdHlwZW9mIGNyZWF0ZUNvbnRleHRcbiAgICA+W107XG5cblxuXG4gICAgZm9yIChjb25zdCBjdHggb2YgY29udGV4dHMpIHtcblxuICAgICAgY29uc3QgcmVmID0gYXdhaXQgY3R4Ll9fcmVmKCk7XG5cbiAgICAgIGNvbnN0IGNsYXNzZXNJbnB1dCA9IHJlZi5nZXRDbGFzc0Z1bkJ5KGNsYXNzVHlwZSk7XG5cblxuICAgICAgY29uc3QgY2xvbmVkQ2xhc3NlcyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICAgIHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgICAgICBjbGFzc2VzSW5wdXQsXG4gICAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBjdHg6IHRoaXMsXG4gICAgICAgICAgY2xhc3NUeXBlLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIGNsb25lZENsYXNzZXMuZm9yRWFjaChjID0+IGFyci5wdXNoKGMpKTtcblxuICAgICAgYXdhaXQgcmVmLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHMoY2xhc3NUeXBlLCBhcnIpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyIGFzIEZ1bmN0aW9uW107XG4gIH1cblxuXG5cbiAgZ2V0Q2xhc3NJbnN0YW5jZU9iakJ5KGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NJbnN0YW5jZXNCeU5hbWVPYmpbY2xhc3NUeXBlXTtcbiAgfVxuXG5cblxuICBwcml2YXRlIGdldENsYXNzZXNJbnN0YW5jZXNBcnJCeShjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMub2JqV2l0aENsYXNzZXNJbnN0YW5jZXNBcnJbY2xhc3NUeXBlXTtcbiAgfVxuXG5cblxuICBpbmplY3Q8VD4oXG4gICAgY3RvcjogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCxcbiAgICBvcHRpb25zPzoge1xuICAgICAgbG9jYWxJbnN0YW5jZT86IGJvb2xlYW47XG4gICAgICBjb250ZXh0Q2xhc3NJbnN0YW5jZT86IEJhc2VDbGFzcztcbiAgICAgIGxvY2FJbnN0YW5jZUNvbnN0cnVjdG9yQXJncz86IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgY3Rvcj47XG4gICAgfSxcbiAgKTogVCB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge30gYXMgYW55O1xuICAgIH1cbiAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc0hlbHBlcnMuZ2V0TmFtZShjdG9yKTtcblxuICAgIGNvbnN0IGxvY2FJbnN0YW5jZUNvbnN0cnVjdG9yQXJncyA9XG4gICAgICBvcHRpb25zLmxvY2FJbnN0YW5jZUNvbnN0cnVjdG9yQXJncyB8fCBbXTtcblxuICAgIGlmICh0aGlzLmlzQ0xhc3NUeXBlKE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWSwgY3RvcikpIHtcbiAgICAgIG9wdGlvbnMubG9jYWxJbnN0YW5jZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmxvY2FsSW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IGN0eENsYXNzRm4gPSB0aGlzLmdldENsYXNzRnVuQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICAgIGxldCBlbnRpdHlOYW1lOiBzdHJpbmcgPSAnJztcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ0Jhc2VSZXBvc2l0b3J5Jykge1xuICAgICAgICBjb25zdCBlbnRpdHlGbiA9IGxvY2FJbnN0YW5jZUNvbnN0cnVjdG9yQXJnc1swXTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gZW50aXR5Rm4gJiYgZW50aXR5Rm4oKTtcbiAgICAgICAgZW50aXR5TmFtZSA9IGVudGl0eSAmJiBDbGFzc0hlbHBlcnMuZ2V0TmFtZShlbnRpdHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMuY29udGV4dENsYXNzSW5zdGFuY2VbdGhpcy5sb2NhbEluc3RhY2VPYmpTeW1ib2xdKSB7XG4gICAgICAgIG9wdGlvbnMuY29udGV4dENsYXNzSW5zdGFuY2VbdGhpcy5sb2NhbEluc3RhY2VPYmpTeW1ib2xdID0ge307XG4gICAgICB9XG4gICAgICBjb25zdCBpbnN0YW5jZUtleSA9IGNsYXNzTmFtZSArIChlbnRpdHlOYW1lID8gYC4ke2VudGl0eU5hbWV9YCA6ICcnKTtcbiAgICAgIGNvbnN0IGV4aXN0ZWQgPVxuICAgICAgICBvcHRpb25zLmNvbnRleHRDbGFzc0luc3RhbmNlW3RoaXMubG9jYWxJbnN0YWNlT2JqU3ltYm9sXVtpbnN0YW5jZUtleV07XG4gICAgICBpZiAoZXhpc3RlZCkge1xuXG4gICAgICAgIHJldHVybiBleGlzdGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWN0eENsYXNzRm4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgYWJsZSB0byBpbmplY3QgXCIke2NsYXNzTmFtZX1cIiBpbnNpZGUgY29udGV4dCBcIiR7dGhpcy5jb250ZXh0TmFtZX1cIlxuXG4gICAgICAgIE1ha2Ugc3VyZSB0aGV5IHNoYXJlIHRoZSBzYW1lIGNvbnRleHQgb3IgaW1wb3J0IGNvbnRleHQgd2hlcmUgXCIke2NsYXNzTmFtZX1cIiBpcyBkZWZpbmVkLlxuXG4gICAgICAgIGApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbmplY3RlZEluc3RhbmNlID0gbmV3IChjdHhDbGFzc0ZuIGFzIGFueSkoXG4gICAgICAgIC4uLmxvY2FJbnN0YW5jZUNvbnN0cnVjdG9yQXJncyxcbiAgICAgICk7XG4gICAgICBvcHRpb25zLmNvbnRleHRDbGFzc0luc3RhbmNlW3RoaXMubG9jYWxJbnN0YWNlT2JqU3ltYm9sXVtpbnN0YW5jZUtleV0gPVxuICAgICAgICBpbmplY3RlZEluc3RhbmNlO1xuXG4gICAgICByZXR1cm4gaW5qZWN0ZWRJbnN0YW5jZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0U2NvcGVJbnN0YW5jZSA9IHRoaXMuYWxsQ2xhc3Nlc0luc3RhbmNlc1tjbGFzc05hbWVdO1xuXG5cblxuICAgIHJldHVybiBjb250ZXh0U2NvcGVJbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGlhcyBmb3IgaW5qZWN0XG4gICAqL1xuICBnZXRJbnN0YW5jZUJ5PFQ+KGN0b3I6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3QoY3RvciwgeyBsb2NhbEluc3RhbmNlOiBmYWxzZSB9KTtcbiAgfVxuXG5cbiAgY2hlY2tJZkNvbnRleHRJbml0aWFsaXplZCgpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLmNvbmZpZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGxlYXNlIGNoZWNrIGlmIHlvdXIgY29udGV4dCBoYXMgYmVlbiBpbml0aWxpemVkLlxuXG5cbiAgICAgIGF3YWl0IENvbnRleHQuaW5pdGlhbGl6ZSgpO1xuXG5cblxuICAgICAgYCk7XG4gICAgfVxuICB9XG5cblxuICBnZXRDbGFzc0Z1bkJ5KGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSkge1xuICAgIHRoaXMuY2hlY2tJZkNvbnRleHRJbml0aWFsaXplZCgpO1xuICAgIHN3aXRjaCAoY2xhc3NUeXBlKSB7XG4gICAgICBjYXNlIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvbnRyb2xsZXJzO1xuICAgICAgY2FzZSBNb2RlbHMuQ2xhc3NUeXBlLkVOVElUWTpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmVudGl0aWVzO1xuICAgICAgY2FzZSBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcucHJvdmlkZXJzO1xuICAgICAgY2FzZSBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlk6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXM7XG4gICAgICBjYXNlIE1vZGVscy5DbGFzc1R5cGUuU1VCU0NSSUJFUjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnN1YnNjcmliZXJzO1xuICAgIH1cbiAgfVxuXG4gIGlzQ0xhc3NUeXBlKGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSwgY2xhc3NGbjogRnVuY3Rpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmdldENsYXNzRnVuQnkoY2xhc3NUeXBlKVtDbGFzc0hlbHBlcnMuZ2V0TmFtZShjbGFzc0ZuKV07XG4gIH1cblxuICAvKipcbiAgICogT25seSBmb3IgaW5qZWN0YWJsZSB0eXBlc1xuICAgKiBPbmx5IGZvciBjbGFzc1R5cGU6IENPTlRST0xMRVIsIFJFUE9TSVRPUlksIFBST1ZJREVSXG4gICAqL1xuICBnZXRDbGFzc0Z1bkJ5Q2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogRnVuY3Rpb24ge1xuICAgIGZvciAoY29uc3QgY2xhc3NUeXBlTmFtZSBvZiB0aGlzLmFsbFR5cGVzZnJvbUNvbnRleHRzKSB7XG4gICAgICBjb25zdCBjbGFzc2VzRm9ySW5qZWN0YWJsZVR5cGUgPVxuICAgICAgICB0aGlzLmNvbmZpZ1tNb2RlbHMuQ2xhc3NUeXBlS2V5W2NsYXNzVHlwZU5hbWVdXTtcblxuICAgICAgaWYgKGNsYXNzZXNGb3JJbmplY3RhYmxlVHlwZVtjbGFzc05hbWVdKSB7XG4gICAgICAgIHJldHVybiBjbGFzc2VzRm9ySW5qZWN0YWJsZVR5cGVbY2xhc3NOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDbGFzc0Z1bkJ5Q2xhc3MoY2xhc3NGdW5jdGlvbjogRnVuY3Rpb24pOiBGdW5jdGlvbiB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NIZWxwZXJzLmdldE5hbWUoY2xhc3NGdW5jdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3NGdW5CeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuICB9XG5cbiAgZ2V0Q2xhc3NGdW5CeUFycihjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmdldENsYXNzRnVuQnkoY2xhc3NUeXBlKSB8fCB7fSkgYXMgRnVuY3Rpb25bXTtcbiAgfVxuXG5cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUluc3RhbmNlcyhjbGFzc2VzOiBhbnksIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSkge1xuXG5cblxuXG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzRm4gb2YgW1xuXG4gICAgICAuLi5PYmplY3QudmFsdWVzKGNsYXNzZXMpLFxuICAgIF0pIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gRElUYW9uQ29udGFpbmVyLnJlc29sdmUoY2xhc3NGbiBhcyBhbnkpIGFzIGFueTtcbiAgICAgIGNvbnN0IGNsYXNzSW5zdGFuY2VzQnlOYW1lT2JqID0gdGhpcy5jbGFzc0luc3RhbmNlc0J5TmFtZU9ialtjbGFzc1R5cGVdO1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NIZWxwZXJzLmdldE5hbWUoY2xhc3NGbik7XG5cbiAgICAgIGNsYXNzSW5zdGFuY2VzQnlOYW1lT2JqW2NsYXNzTmFtZV0gPSBpbnN0YW5jZTtcblxuICAgICAgdGhpcy5jb25maWdbTW9kZWxzLkNsYXNzVHlwZUtleVtjbGFzc1R5cGVdXVtjbGFzc05hbWVdID0gY2xhc3NGbjtcbiAgICAgIHRoaXMub2JqV2l0aENsYXNzZXNJbnN0YW5jZXNBcnJbY2xhc3NUeXBlXS5wdXNoKGluc3RhbmNlKTtcbiAgICAgIHRoaXMuYWxsQ2xhc3Nlc0luc3RhbmNlc1tjbGFzc05hbWVdID0gaW5zdGFuY2U7XG4gICAgfVxuICB9XG5cblxuXG4gIGFzeW5jIHJlaW5pdENvbnRyb2xsZXJzKCkge1xuXG5cblxuICAgIGNvbnN0IGNvbnRyb2xsZXJzID0gdGhpcy5nZXRDbGFzc2VzSW5zdGFuY2VzQXJyQnkoXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgY3RybCBvZiBjb250cm9sbGVycykge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjdHJsLmluaXRFeGFtcGxlRGJEYXRhKSkge1xuICAgICAgICBhd2FpdCBIZWxwZXJzLnJ1blN5bmNPckFzeW5jKHtcbiAgICAgICAgICBmdW5jdGlvbkZuOiBjdHJsLmluaXRFeGFtcGxlRGJEYXRhLFxuICAgICAgICAgIGNvbnRleHQ6IGN0cmwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuXG5cbiAgfVxuICBhc3luYyBpbml0Q2xhc3NlcygpIHtcbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgW1xuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUixcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWSxcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuRU5USVRZLFxuICAgIF0pIHtcblxuXG5cblxuICAgICAgZm9yIChjb25zdCBjbGFzc0Z1biBvZiB0aGlzLmdldENsYXNzRnVuQnlBcnIoY2xhc3NUeXBlTmFtZSkgYXMgYW55W10pIHtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjbGFzc0Z1bi5fKSkge1xuICAgICAgICAgIGF3YWl0IEhlbHBlcnMucnVuU3luY09yQXN5bmMoe1xuICAgICAgICAgICAgZnVuY3Rpb25GbjogY2xhc3NGdW4uXyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNsYXNzRnVuLFxuICAgICAgICAgIH0pO1xuXG5cblxuXG5cblxuICAgICAgICB9XG4gICAgICB9XG5cblxuXG5cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzVHlwZU5hbWUgb2YgW1xuICAgICAgTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUixcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWSxcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUixcbiAgICBdKSB7XG5cblxuXG5cbiAgICAgIGZvciAoY29uc3QgY3RybCBvZiB0aGlzLmdldENsYXNzZXNJbnN0YW5jZXNBcnJCeShjbGFzc1R5cGVOYW1lKSkge1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGN0cmwuXykpIHtcbiAgICAgICAgICBhd2FpdCBIZWxwZXJzLnJ1blN5bmNPckFzeW5jKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uRm46IGN0cmwuXyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGN0cmwsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuXG5cblxuICAgIH1cbiAgfVxuXG5cblxuICBpc0FjdGl2ZU9uKGNsYXNzSW5zdGFuY2U6IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIGxldCBjb250ZXh0UmVmOiBFbmRwb2ludENvbnRleHQgPVxuICAgICAgY2xhc3NJbnN0YW5jZVtTeW1ib2xzLmN0eEluQ2xhc3NPckNsYXNzT2JqXTtcbiAgICByZXR1cm4gdGhpcyA9PT0gY29udGV4dFJlZjtcbiAgfVxuXG5cblxuICBnZXQgdXJpKCkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuaG9zdFxuICAgICAgPyBuZXcgVVJMKHRoaXMuaG9zdClcbiAgICAgIDogdGhpcy5yZW1vdGVIb3N0XG4gICAgICAgID8gbmV3IFVSTCh0aGlzLnJlbW90ZUhvc3QpXG4gICAgICAgIDogdm9pZCAwO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuXG5cbiAgZ2V0IGlzSHR0cFNlcnZlcigpIHtcbiAgICByZXR1cm4gdGhpcy51cmkucHJvdG9jb2wgPT09ICdodHRwczonO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBpcGMvdWRwIG5lZWRzIHRoaXNcbiAgICovXG4gIHB1YmxpYyBnZXQgY29udGV4dE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvbnRleHROYW1lO1xuICB9XG5cblxuXG4gIHB1YmxpYyBnZXQgcHVibGljQXNzZXRzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ucHVibGljQXNzZXRzIHx8IFtdO1xuICB9XG5cblxuXG4gIGdldCBpc1Byb2R1Y3Rpb25Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wcm9kdWN0aW9uTW9kZTtcbiAgfVxuXG5cblxuICBnZXQgcmVtb3RlSG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVtb3RlSG9zdDtcbiAgfVxuXG5cblxuICBnZXQgaG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuaG9zdDtcbiAgfVxuXG5cblxuICBnZXQgb3JnaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudXJpPy5vcmlnaW47XG4gIH1cblxuXG5cbiAgYXN5bmMgaW5pdFN1YnNjcmliZXJzKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgaW5pdEVudGl0aWVzKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG5cbiAgYXN5bmMgaW5pdERhdGFiYXNlQ29ubmVjdGlvbigpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cblxuICBpbml0TWV0YWRhdGEoKSB7XG4gICAgY29uc3QgYWxsQ29udHJvbGxlcnMgPSB0aGlzLmdldENsYXNzRnVuQnlBcnIoTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSKTtcblxuICAgIGZvciAoY29uc3QgY29udHJvbGxlckNsYXNzRm4gb2YgYWxsQ29udHJvbGxlcnMpIHtcbiAgICAgIGNvbnRyb2xsZXJDbGFzc0ZuW1N5bWJvbHMuY2xhc3NNZXRob2RzTmFtZXNdID1cbiAgICAgICAgQ2xhc3NIZWxwZXJzLmdldE1ldGhvZHNOYW1lcyhjb250cm9sbGVyQ2xhc3NGbik7XG4gICAgICBjb25zdCBjb25maWdzID0gQ2xhc3NIZWxwZXJzLmdldENvbnRyb2xsZXJDb25maWdzKGNvbnRyb2xsZXJDbGFzc0ZuKTtcblxuICAgICAgY29uc3QgY2xhc3NDb25maWc6IE1vZGVscy5SdW50aW1lQ29udHJvbGxlckNvbmZpZyA9IGNvbmZpZ3NbMF07XG5cbiAgICAgIGNvbnN0IHBhcmVudHNjYWxjdWxhdGVkUGF0aCA9IF8uc2xpY2UoY29uZmlncywgMSlcbiAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAubWFwKGJjID0+IHtcbiAgICAgICAgICBpZiAoVGFvbkhlbHBlcnMuaXNHb29kUGF0aChiYy5wYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGJjLnBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiYy5jbGFzc05hbWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcvJyk7XG5cbiAgICAgIGlmIChUYW9uSGVscGVycy5pc0dvb2RQYXRoKGNsYXNzQ29uZmlnLnBhdGgpKSB7XG4gICAgICAgIGNsYXNzQ29uZmlnLmNhbGN1bGF0ZWRQYXRoID0gY2xhc3NDb25maWcucGF0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzQ29uZmlnLmNhbGN1bGF0ZWRQYXRoID1cbiAgICAgICAgICBgJHtwYXJlbnRzY2FsY3VsYXRlZFBhdGh9LyR7Q2xhc3NIZWxwZXJzLmdldE5hbWUoY29udHJvbGxlckNsYXNzRm4pfWBcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKVxuICAgICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgYmMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIF8ubGFzdChhY2MpID09PSBiYyA/IGFjYyA6IFsuLi5hY2MsIGJjXTtcbiAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgLmpvaW4oJy8nKTtcbiAgICAgIH1cblxuICAgICAgXy5zbGljZShjb25maWdzLCAxKS5mb3JFYWNoKGJjID0+IHtcbiAgICAgICAgY29uc3QgYWxyZWFkeUlzID0gY2xhc3NDb25maWcubWV0aG9kcztcbiAgICAgICAgY29uc3QgdG9NZXJnZSA9IF8uY2xvbmVEZWVwKGJjLm1ldGhvZHMpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0b01lcmdlKSB7XG4gICAgICAgICAgaWYgKHRvTWVyZ2UuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhYWxyZWFkeUlzW2tleV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0b01lcmdlW2tleV07XG4gICAgICAgICAgICBhbHJlYWR5SXNba2V5XSA9IGVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuLyogKi9cbi8qICovXG4gIFxuICAgICAgICB0aGlzLmxvZ0h0dHAgJiZcbiAgICAgICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFxuICAgICAgICAgICAgYFt0YW9uXVtleHByZXNzLXNlcnZlcl0gcm91dGVzIFske2NsYXNzQ29uZmlnLmNsYXNzTmFtZX1dYCxcbiAgICAgICAgICApO1xuLyogKi9cbi8qICovXG4gIFxuXG5cbiAgICAgIE9iamVjdC5rZXlzKGNsYXNzQ29uZmlnLm1ldGhvZHMpLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZENvbmZpZzogTW9kZWxzLk1ldGhvZENvbmZpZyA9XG4gICAgICAgICAgY2xhc3NDb25maWcubWV0aG9kc1ttZXRob2ROYW1lXTtcblxuICAgICAgICBjb25zdCB0eXBlOiBNb2RlbHMuSHR0cC5SZXN0Lkh0dHBNZXRob2QgPSBtZXRob2RDb25maWcudHlwZTtcbiAgICAgICAgY29uc3QgZXhwcmVzc1BhdGggPSBtZXRob2RDb25maWcuZ2xvYmFsXG4gICAgICAgICAgPyBgLyR7bWV0aG9kQ29uZmlnLnBhdGg/LnJlcGxhY2UoL1xcLy8sICcnKX1gXG4gICAgICAgICAgOiBUYW9uSGVscGVycy5nZXRFeHByZXNzUGF0aChjbGFzc0NvbmZpZywgbWV0aG9kQ29uZmlnKTtcblxuXG4gICAgICAgIGlmIChIZWxwZXJzLmlzTm9kZSB8fCBIZWxwZXJzLmlzV2ViU1FMKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaG91bGRJbml0Q2xpZW50ID1cbiAgICAgICAgICBIZWxwZXJzLmlzQnJvd3NlciB8fCB0aGlzLnJlbW90ZUhvc3QgfHwgSGVscGVycy5pc1dlYlNRTDtcblxuICAgICAgICBpZiAoc2hvdWxkSW5pdENsaWVudCkge1xuXG5cblxuXG5cblxuXG4gICAgICAgICAgdGhpcy5pbml0Q2xpZW50KGNvbnRyb2xsZXJDbGFzc0ZuLCB0eXBlLCBtZXRob2RDb25maWcsIGV4cHJlc3NQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbi8qICovXG4vKiAqL1xuICBcbiAgICAgICAgdGhpcy5sb2dIdHRwICYmIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbi8qICovXG4vKiAqL1xuICBcbiAgICB9XG4gIH1cblxuXG5cbiAgcHVibGljIHdyaXRlQWN0aXZlUm91dGVzKCkge1xuICAgIGNvbnN0IGNvbnRleHRzOiBFbmRwb2ludENvbnRleHRbXSA9IFt0aGlzXTtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIHB1YmxpYyBnZXQgbWlkZGxld2FyZXMoKTogTW9kZWxzLk1pZGRsZXdhcmVUeXBlW10ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByaXZhdGUgaW5pdE1pZGxld2FyZSgpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBpbml0U2VydmVyKFxuXG4gICAgdHlwZTogTW9kZWxzLkh0dHAuUmVzdC5IdHRwTWV0aG9kLFxuICAgIG1ldGhvZENvbmZpZzogTW9kZWxzLk1ldGhvZENvbmZpZyxcbiAgICBjbGFzc0NvbmZpZzogTW9kZWxzLlJ1bnRpbWVDb250cm9sbGVyQ29uZmlnLFxuICAgIGV4cHJlc3NQYXRoOiBzdHJpbmcsXG4gICAgdGFyZ2V0OiBGdW5jdGlvbixcblxuICApOiBhbnkge1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLnVyaTtcblxuXG4gICAgY29uc3QgZ2V0UmVzdWx0ID0gYXN5bmMgKHJlc29sdmVkUGFyYW1zLCByZXEsIHJlcykgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IE1vZGVscy5IdHRwLlJlc3BvbnNlPGFueT4gPVxuICAgICAgICBtZXRob2RDb25maWcuZGVzY3JpcHRvci52YWx1ZS5hcHBseShcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBDb250ZXh0IGZvciBtZXRob2QgQEdFVCxAUFVUIGV0Yy5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLmdldEluc3RhbmNlQnkodGFyZ2V0IGFzIGFueSksXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUGFyYW1zIGZvciBtZXRqb2QgQEdFVCwgQFBVVCBldGMuXG4gICAgICAgICAgICovXG4gICAgICAgICAgcmVzb2x2ZWRQYXJhbXMsXG4gICAgICAgICk7XG4gICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZ2V0UmVzcG9uc2VWYWx1ZShyZXNwb25zZSwgeyByZXEsIHJlcyB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuXG4gICAgdXJsLnBhdGhuYW1lID0gdXJsLnBhdGhuYW1lLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgZXhwcmVzc1BhdGggPSB1cmwucGF0aG5hbWUuc3RhcnRzV2l0aCgnLycpXG4gICAgICA/IGAke3VybC5wYXRobmFtZX0ke2V4cHJlc3NQYXRofWBcbiAgICAgIDogZXhwcmVzc1BhdGg7XG4gICAgZXhwcmVzc1BhdGggPSBleHByZXNzUGF0aC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKTtcblxuXG5cbiAgICBpZiAoSGVscGVycy5pc0VsZWN0cm9uKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgIH1cblxuICAgIGlmICghdGhpcy5yZW1vdGVIb3N0KSB7XG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlUGF0aDogZXhwcmVzc1BhdGgsXG4gICAgICBtZXRob2Q6IG1ldGhvZENvbmZpZy50eXBlLFxuICAgIH07XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGNsaWVudCBjYW4gYmUgYnJvd3NlciBvciBub2RlanMgKHdoZW4gcmVtb3RlIGhvc3QpXG4gICAqL1xuICBwcml2YXRlIGluaXRDbGllbnQoXG5cbiAgICB0YXJnZXQ6IEZ1bmN0aW9uLFxuICAgIHR5cGU6IE1vZGVscy5IdHRwLlJlc3QuSHR0cE1ldGhvZCxcbiAgICBtZXRob2RDb25maWc6IE1vZGVscy5IdHRwLlJlc3QuTWV0aG9kQ29uZmlnLFxuICAgIGV4cHJlc3NQYXRoOiBzdHJpbmcsXG5cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gdGhpcztcblxuICAgIHRoaXMubG9nSHR0cCAmJiBjb25zb2xlLmxvZyhgJHt0eXBlPy50b1VwcGVyQ2FzZSgpfSAke2V4cHJlc3NQYXRofSBgKTtcblxuXG4gICAgbGV0IHN0b3JhZ2U6IGFueTtcbiAgICBpZiAoSGVscGVycy5pc0Jyb3dzZXIpIHtcbiAgICAgIHN0b3JhZ2UgPSB3aW5kb3c7XG4gICAgfVxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuICAgIGNvbnN0IG9yZ01ldGhvZHMgPSB0YXJnZXQucHJvdG90eXBlW21ldGhvZENvbmZpZy5tZXRob2ROYW1lXTtcblxuXG5cbiAgICBpZiAoSGVscGVycy5pc0VsZWN0cm9uKSB7XG4gICAgICB0YXJnZXQucHJvdG90eXBlW21ldGhvZENvbmZpZy5tZXRob2ROYW1lXSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVkID0gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgICAgICBjb25zdCB7IHJlcXVlc3QsIHJlc3BvbnNlIH0gPSBUYW9uSGVscGVycy53ZWJzcWxNb2NrcyhoZWFkZXJzKTtcblxuICAgICAgICAgIEhlbHBlcnMuaXBjUmVuZGVyZXIub25jZShcbiAgICAgICAgICAgIFRhb25IZWxwZXJzLmlwY0tleU5hbWVSZXNwb25zZSh0YXJnZXQsIG1ldGhvZENvbmZpZywgZXhwcmVzc1BhdGgpLFxuICAgICAgICAgICAgKGV2ZW50LCByZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHJlczogYW55ID0gcmVzcG9uc2VEYXRhO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyh7IHJlc3BvbnNlRGF0YSB9KTtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gcmVzO1xuICAgICAgICAgICAgICAgIHJlcyA9IG5ldyBNb2RlbHNOZzJSZXN0Lkh0dHBSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYm9keTogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICBpc0FycmF5OiB2b2lkIDAgYXMgYW55LFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZENvbmZpZy50eXBlLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGAke2N0eC51cmkub3JpZ2lufSR7XG4gICAgICAgICAgICAgICAgICAgICAgJycgLy8gVE9ETyBleHByZXNzIHBhdGhcbiAgICAgICAgICAgICAgICAgICAgfSR7bWV0aG9kQ29uZmlnLnBhdGh9IGAsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgSGVscGVycy5pc0Jsb2IoYm9keSkgfHwgXy5pc1N0cmluZyhib2R5KVxuICAgICAgICAgICAgICAgICAgICA/IGJvZHlcbiAgICAgICAgICAgICAgICAgICAgOiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgICAgICAgICAgIFJlc3RIZWFkZXJzLmZyb20oaGVhZGVycyksXG4gICAgICAgICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICAoKSA9PiBib2R5LFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIEhlbHBlcnMuaXBjUmVuZGVyZXIuc2VuZChcbiAgICAgICAgICAgIFRhb25IZWxwZXJzLmlwY0tleU5hbWVSZXF1ZXN0KHRhcmdldCwgbWV0aG9kQ29uZmlnLCBleHByZXNzUGF0aCksXG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZWNlaXZlZFsnb2JzZXJ2YWJsZSddID0gZnJvbShyZWNlaXZlZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVjZWl2ZWQsXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cblxuXG4gICAgdGFyZ2V0LnByb3RvdHlwZVttZXRob2RDb25maWcubWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAodGhpczoge30sIC4uLmFyZ3MpIHtcblxuXG5cblxuXG4gICAgICBpZiAoIXN0b3JhZ2VbU3ltYm9scy5vbGQuRU5EUE9JTlRfTUVUQV9DT05GSUddKVxuICAgICAgICBzdG9yYWdlW1N5bWJvbHMub2xkLkVORFBPSU5UX01FVEFfQ09ORklHXSA9IHt9O1xuICAgICAgaWYgKCFzdG9yYWdlW1N5bWJvbHMub2xkLkVORFBPSU5UX01FVEFfQ09ORklHXVtjdHgudXJpLmhyZWZdKVxuICAgICAgICBzdG9yYWdlW1N5bWJvbHMub2xkLkVORFBPSU5UX01FVEFfQ09ORklHXVtjdHgudXJpLmhyZWZdID0ge307XG4gICAgICBjb25zdCBlbmRwb2ludHMgPSBzdG9yYWdlW1N5bWJvbHMub2xkLkVORFBPSU5UX01FVEFfQ09ORklHXTtcbiAgICAgIGxldCByZXN0OiBNb2RlbHNOZzJSZXN0LlJlc291cmNlTW9kZWw8YW55LCBhbnk+O1xuICAgICAgaWYgKCFlbmRwb2ludHNbY3R4LnVyaS5ocmVmXVtleHByZXNzUGF0aF0pIHtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSB7fTtcbiAgICAgICAgaWYgKG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSAmJiAhbWV0aG9kQ29uZmlnLnJlc3BvbnNlVHlwZSkge1xuICAgICAgICAgIHJlc3QgPSBSZXNvdXJjZS5jcmVhdGUoXG4gICAgICAgICAgICBjdHgudXJpLmhyZWYsXG4gICAgICAgICAgICBleHByZXNzUGF0aCxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUiBhcyBhbnksXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5DSVJDVVJBTF9PQkpFQ1RTX01BUF9CT0RZIGFzIGFueSxcbiAgICAgICAgICAgIFJlc3RIZWFkZXJzLmZyb20oe1xuICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogbWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICBBY2NlcHQ6IG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlICYmIG1ldGhvZENvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgICAgICByZXN0ID0gUmVzb3VyY2UuY3JlYXRlKFxuICAgICAgICAgICAgY3R4LnVyaS5ocmVmLFxuICAgICAgICAgICAgZXhwcmVzc1BhdGgsXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVIgYXMgYW55LFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSBhcyBhbnksXG4gICAgICAgICAgICBSZXN0SGVhZGVycy5mcm9tKHtcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgQWNjZXB0OiBtZXRob2RDb25maWcuY29udGVudFR5cGUsXG4gICAgICAgICAgICAgIHJlc3BvbnNldHlwZWF4aW9zOiBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICghbWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlICYmIG1ldGhvZENvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgICAgICByZXN0ID0gUmVzb3VyY2UuY3JlYXRlKFxuICAgICAgICAgICAgY3R4LnVyaS5ocmVmLFxuICAgICAgICAgICAgZXhwcmVzc1BhdGgsXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVIgYXMgYW55LFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSBhcyBhbnksXG4gICAgICAgICAgICBSZXN0SGVhZGVycy5mcm9tKHtcbiAgICAgICAgICAgICAgcmVzcG9uc2V0eXBlYXhpb3M6IG1ldGhvZENvbmZpZy5yZXNwb25zZVR5cGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3QgPSBSZXNvdXJjZS5jcmVhdGUoXG4gICAgICAgICAgICBjdHgudXJpLmhyZWYsXG4gICAgICAgICAgICBleHByZXNzUGF0aCxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUiBhcyBhbnksXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5DSVJDVVJBTF9PQkpFQ1RTX01BUF9CT0RZIGFzIGFueSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5kcG9pbnRzW2N0eC51cmkuaHJlZl1bZXhwcmVzc1BhdGhdID0gcmVzdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QgPSBlbmRwb2ludHNbY3R4LnVyaS5ocmVmXVtleHByZXNzUGF0aF0gYXMgYW55O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRob2QgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBpc1dpdGhCb2R5ID0gbWV0aG9kID09PSAncHV0JyB8fCBtZXRob2QgPT09ICdwb3N0JztcbiAgICAgIGNvbnN0IHBhdGhQcmFtcyA9IHt9O1xuICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgICBsZXQgYm9keU9iamVjdCA9IHt9O1xuICAgICAgYXJncy5mb3JFYWNoKChwYXJhbSwgaSkgPT4ge1xuICAgICAgICBsZXQgY3VycmVudFBhcmFtOiBNb2RlbHMuSHR0cC5SZXN0LlBhcmFtQ29uZmlnID0gdm9pZCAwIGFzIGFueTtcblxuICAgICAgICBmb3IgKGxldCBwcCBpbiBtZXRob2RDb25maWcucGFyYW1ldGVycykge1xuICAgICAgICAgIGxldCB2ID0gbWV0aG9kQ29uZmlnLnBhcmFtZXRlcnNbcHBdO1xuICAgICAgICAgIGlmICh2LmluZGV4ID09PSBpKSB7XG4gICAgICAgICAgICBjdXJyZW50UGFyYW0gPSB2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbVR5cGUgPT09ICdQYXRoJykge1xuICAgICAgICAgIHBhdGhQcmFtc1tjdXJyZW50UGFyYW0ucGFyYW1OYW1lXSA9IHBhcmFtO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnUXVlcnknKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBNYXBwaW5nLmRlY29kZShwYXJhbSwgIWN0eC5pc1Byb2R1Y3Rpb25Nb2RlKTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgYCR7U3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSX1FVRVJZX1BBUkFNU30ke2N1cnJlbnRQYXJhbS5wYXJhbU5hbWV9IGAsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFwcGluZyksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeVBhcmFtc1tjdXJyZW50UGFyYW0ucGFyYW1OYW1lXSA9IHBhcmFtO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gTWFwcGluZy5kZWNvZGUocGFyYW0sICFjdHguaXNQcm9kdWN0aW9uTW9kZSk7XG4gICAgICAgICAgICBpZiAobWFwcGluZykge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgIFN5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUl9RVUVSWV9QQVJBTVMsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFwcGluZyksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IF8uY2xvbmVEZWVwKHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbVR5cGUgPT09ICdIZWFkZXInKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbU5hbWUpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1OYW1lID09PSBTeW1ib2xzLm9sZC5NRENfS0VZKSB7XG5cbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyYW0ucGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShwYXJhbSkpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChjdXJyZW50UGFyYW0ucGFyYW1OYW1lLCBwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGhlYWRlciBpbiBwYXJhbSkge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KGhlYWRlciwgcGFyYW1baGVhZGVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnQ29va2llJykge1xuICAgICAgICAgIFJlc291cmNlLkNvb2tpZXMud3JpdGUoXG4gICAgICAgICAgICBjdXJyZW50UGFyYW0ucGFyYW1OYW1lLFxuICAgICAgICAgICAgcGFyYW0sXG4gICAgICAgICAgICBjdXJyZW50UGFyYW0uZXhwaXJlSW5TZWNvbmRzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRQYXJhbS5wYXJhbVR5cGUgPT09ICdCb2R5Jykge1xuICAgICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICBpZiAoQ2xhc3NIZWxwZXJzLmdldE5hbWUoYm9keU9iamVjdCkgPT09ICdGb3JtRGF0YScpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbdGFvbiAtIGZyYW1ld29ya10gRG9uIHVzZSBwYXJhbSBuYW1lcyB3aGVuIHBvc3RpbmcgLyBwdXR0aW5nIEZvcm1EYXRhLlxuICAgICAgICAgICAgICBVc2UgdGhpczpcblxuKEBUYW9uLkh0dHAuUGFyYW0uQm9keSgpIGZvcm1EYXRhOiBGb3JtRGF0YSkgLi4uXG5cblxuaW5zdGVhZFxuXG4gIChAVGFvbi5IdHRwLlBhcmFtLkJvZHkoJyR7Y3VycmVudFBhcmFtLnBhcmFtTmFtZX0nKSBmb3JtRGF0YTogRm9ybURhdGEpIC4uLlxuXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBNYXBwaW5nLmRlY29kZShwYXJhbSwgIWN0eC5pc1Byb2R1Y3Rpb25Nb2RlKTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgYCR7U3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSX0JPRFlfUEFSQU1TfSR7Y3VycmVudFBhcmFtLnBhcmFtTmFtZX0gYCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYXBwaW5nKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJvZHlPYmplY3RbY3VycmVudFBhcmFtLnBhcmFtTmFtZV0gPSBwYXJhbTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IE1hcHBpbmcuZGVjb2RlKHBhcmFtLCAhY3R4LmlzUHJvZHVjdGlvbk1vZGUpO1xuICAgICAgICAgICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVJfQk9EWV9QQVJBTVMsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFwcGluZyksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5T2JqZWN0ID0gcGFyYW07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgYm9keU9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgQ2xhc3NIZWxwZXJzLmdldE5hbWUoYm9keU9iamVjdCkgIT09ICdGb3JtRGF0YSdcbiAgICAgICkge1xuICAgICAgICBsZXQgY2lyY3VyYWxGcm9tSXRlbSA9IFtdO1xuICAgICAgICBib2R5T2JqZWN0ID0gSlNPTjEwLnBhcnNlKFxuICAgICAgICAgIEpTT04xMC5zdHJpbmdpZnkoYm9keU9iamVjdCwgdm9pZCAwLCB2b2lkIDAsIGNpcmNzID0+IHtcbiAgICAgICAgICAgIGNpcmN1cmFsRnJvbUl0ZW0gPSBjaXJjcztcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICBTeW1ib2xzLm9sZC5DSVJDVVJBTF9PQkpFQ1RTX01BUF9CT0RZLFxuICAgICAgICAgIEpTT04xMC5zdHJpbmdpZnkoY2lyY3VyYWxGcm9tSXRlbSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgcXVlcnlQYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGxldCBjaXJjdXJhbEZyb21RdWVyeVBhcmFtcyA9IFtdO1xuICAgICAgICBxdWVyeVBhcmFtcyA9IEpTT04xMC5wYXJzZShcbiAgICAgICAgICBKU09OMTAuc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zLCB2b2lkIDAsIHZvaWQgMCwgY2lyY3MgPT4ge1xuICAgICAgICAgICAgY2lyY3VyYWxGcm9tUXVlcnlQYXJhbXMgPSBjaXJjcztcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgIFN5bWJvbHMub2xkLkNJUkNVUkFMX09CSkVDVFNfTUFQX1FVRVJZX1BBUkFNLFxuICAgICAgICAgIEpTT04xMC5zdHJpbmdpZnkoY2lyY3VyYWxGcm9tUXVlcnlQYXJhbXMpLFxuICAgICAgICApO1xuICAgICAgfVxuXG5cbiAgICAgIGNvbnN0IGh0dHBSZXN1bHRPYmogPSB7XG4gICAgICAgIHJlY2VpdmVkOiBpc1dpdGhCb2R5XG4gICAgICAgICAgPyByZXN0Lm1vZGVsKHBhdGhQcmFtcylbbWV0aG9kXShib2R5T2JqZWN0LCBbcXVlcnlQYXJhbXNdKVxuICAgICAgICAgIDogcmVzdC5tb2RlbChwYXRoUHJhbXMpW21ldGhvZF0oW3F1ZXJ5UGFyYW1zXSksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGh0dHBSZXN1bHRPYmo7XG4gICAgfTtcblxuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRhb24gbGliL2VuZHBvaW50LWNvbnRleHQudHMiXX0=
1646
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0L3Rhb24vcHJvamVjdHMvdGFvbi9zcmMvbGliL2VuZHBvaW50LWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsK0NBQStDO0FBK0IvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUksT0FBTyxFQUFJLE1BQU0sSUFBSSxhQUFhLEVBQUksUUFBUSxFQUFJLFdBQVcsR0FBRyxNQUFNLGtCQUFrQixDQUFDLENBQUEsS0FBSztBQUN6RyxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxJQUFJLEVBQVcsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBVTFCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBS3hELE1BQU0sT0FBTyxlQUFlO0lBTTFCLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBYztRQUU5QixJQUFJLENBQUMsTUFBTSxH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QUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEUsQ0FBQztRQUNILENBQUM7UUFJRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlPLHNCQUFzQjtRQUNoQyxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7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S0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztJQUVILENBQUM7SUFLRCxLQUFLLENBQUMsc0JBQXNCO1FBQzlCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FB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S0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO0lBRUgsQ0FBQztJQUlPLFVBQVUsQ0FFaEIsSUFBaUMsRUFDakMsWUFBaUMsRUFDakMsV0FBMkMsRUFDM0MsV0FBbUIsRUFDbkIsTUFBZ0I7UUFJcEIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFHRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBR3JCLE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ25ELE1BQU0sUUFBUSxHQUNaLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUs7WUFDakM7O2VBRUc7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQWEsQ0FBQztZQUNqQzs7ZUFFRztZQUNILGNBQWMsQ0FDZixDQUFDO1lBQ0osSUFBSSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM1RCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7UUFHRixHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsV0FBVyxFQUFFO1lBQ2pDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDaEIsV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBSWhELElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzdCLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztRQUVELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRTNCLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUlMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7UUFFRCxDQUFDO1FBRUQsT0FBTztZQUNMLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSTtTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUlEOztPQUVHO0lBQ0ssVUFBVSxDQUVoQixNQUFnQixFQUNoQixJQUFpQyxFQUNqQyxZQUEyQyxFQUMzQyxXQUFtQjtRQUduQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFFakIsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFHdEUsSUFBSSxPQUFZLENBQUM7UUFDakIsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUNuQixDQUFDO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUlELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBSTdELElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJO2dCQUMzRCxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUNyRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ25CLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFFL0QsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3RCLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxFQUNqRSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRTt3QkFDdEIsSUFBSSxHQUFHLEdBQVEsWUFBWSxDQUFDO3dCQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDOzRCQUNILE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQzs0QkFDakIsR0FBRyxHQUFHLElBQUksYUFBYSxDQUFDLFlBQVksQ0FDbEM7Z0NBQ0UsSUFBSSxFQUFFLEtBQUssQ0FBQztnQ0FDWixPQUFPLEVBQUUsS0FBSyxDQUFRO2dDQUN0QixNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUk7Z0NBQ3pCLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUNwQixFQUFFLENBQUMsb0JBQW9CO2dDQUN6QixHQUFHLFlBQVksQ0FBQyxJQUFJLEdBQUc7NkJBQ3hCLEVBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQ0FDdEMsQ0FBQyxDQUFDLElBQUk7Z0NBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ3hCLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQ3pCLEtBQUssQ0FBQyxFQUNOLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FDWCxDQUFDOzRCQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDZixDQUFDO3dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7NEJBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNoQixDQUFDO29CQUNILENBQUMsQ0FDRixDQUFDO29CQUNGLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUN0QixXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsRUFDaEUsSUFBSSxDQUNMLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDeEMsT0FBTztvQkFDTCxRQUFRO2lCQUNULENBQUM7WUFDSixDQUFDLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUlMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFNRCxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFvQixHQUFHLElBQUk7WUFNckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO2dCQUM1QyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDMUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMvRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzVELElBQUksSUFBMkMsQ0FBQztZQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixJQUFJLFlBQVksQ0FBQyxXQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzNELElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUNwQixHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFDWixXQUFXLEVBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBNEIsRUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBZ0MsRUFDNUMsV0FBVyxDQUFDLElBQUksQ0FBQzt3QkFDZixjQUFjLEVBQUUsWUFBWSxDQUFDLFdBQVc7d0JBQ3hDLE1BQU0sRUFBRSxZQUFZLENBQUMsV0FBVztxQkFDakMsQ0FBQyxDQUNILENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxJQUFJLFlBQVksQ0FBQyxXQUFXLElBQUksWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNqRSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDcEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQ1osV0FBVyxFQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQTRCLEVBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQWdDLEVBQzVDLFdBQVcsQ0FBQyxJQUFJLENBQUM7d0JBQ2YsY0FBYyxFQUFFLFlBQVksQ0FBQyxXQUFXO3dCQUN4QyxNQUFNLEVBQUUsWUFBWSxDQUFDLFdBQVc7d0JBQ2hDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxZQUFZO3FCQUM3QyxDQUFDLENBQ0gsQ0FBQztnQkFDSixDQUFDO3FCQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDbEUsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQ3BCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUNaLFdBQVcsRUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUE0QixFQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUFnQyxFQUM1QyxXQUFXLENBQUMsSUFBSSxDQUFDO3dCQUNmLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxZQUFZO3FCQUM3QyxDQUFDLENBQ0gsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQ3BCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUNaLFdBQVcsRUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUE0QixFQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUFnQyxDQUM3QyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzlDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFRLENBQUM7WUFDckQsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFVBQVUsR0FBRyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxNQUFNLENBQUM7WUFDekQsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxZQUFZLEdBQWlDLEtBQUssQ0FBUSxDQUFDO2dCQUUvRCxLQUFLLElBQUksRUFBRSxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUNsQixZQUFZLEdBQUcsQ0FBQyxDQUFDO3dCQUNqQixNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxJQUFJLFlBQVksQ0FBQyxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQ3RDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUM1QyxDQUFDO2dCQUNELElBQUksWUFBWSxDQUFDLFNBQVMsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7d0JBQzNCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQzdELElBQUksT0FBTyxFQUFFLENBQUM7NEJBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2QsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxHQUFHLFlBQVksQ0FBQyxTQUFTLEdBQUcsRUFDN0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FDeEIsQ0FBQzt3QkFDSixDQUFDO3dCQUNELFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUM5QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDN0QsSUFBSSxPQUFPLEVBQUUsQ0FBQzs0QkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDZCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxFQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUN4QixDQUFDO3dCQUNKLENBQUM7d0JBQ0QsV0FBVyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25DLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLFlBQVksQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3hDLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUMzQixJQUFJLFlBQVksQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs0QkFFbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2QsWUFBWSxDQUFDLFNBQVMsRUFDdEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUMxQyxDQUFDO3dCQUNKLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUNsRCxDQUFDO29CQUNILENBQUM7eUJBQU0sQ0FBQzt3QkFDTixLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDOzRCQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzFDLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksWUFBWSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDeEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQ3BCLFlBQVksQ0FBQyxTQUFTLEVBQ3RCLEtBQUssRUFDTCxZQUFZLENBQUMsZUFBZSxDQUM3QixDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsSUFBSSxZQUFZLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUN0QyxJQUFJLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDOzRCQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDOzs7Ozs7Ozs0QkFRRixZQUFZLENBQUMsU0FBUzs7Q0FFakQsQ0FBQyxDQUFDO3dCQUNTLENBQUM7d0JBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDN0QsSUFBSSxPQUFPLEVBQUUsQ0FBQzs0QkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDZCxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLEdBQUcsWUFBWSxDQUFDLFNBQVMsR0FBRyxFQUM1RSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUN4QixDQUFDO3dCQUNKLENBQUM7d0JBQ0QsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7b0JBQzdDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUM3RCxJQUFJLE9BQU8sRUFBRSxDQUFDOzRCQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLEVBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQ3hCLENBQUM7d0JBQ0osQ0FBQzt3QkFDRCxVQUFVLEdBQUcsS0FBSyxDQUFDO29CQUNyQixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQ0UsT0FBTyxVQUFVLEtBQUssUUFBUTtnQkFDOUIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxVQUFVLEVBQy9DLENBQUM7Z0JBQ0QsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7Z0JBQzFCLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUN2QixNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDbkQsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FDSCxDQUFDO2dCQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQ3JDLE1BQU0sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FDbkMsQ0FBQztZQUNKLENBQUM7WUFFRCxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztnQkFDakMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQ3hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNwRCx1QkFBdUIsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxDQUNILENBQUM7Z0JBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFDNUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUMxQyxDQUFDO1lBQ0osQ0FBQztZQUdELE1BQU0sYUFBYSxHQUFHO2dCQUNwQixRQUFRLEVBQUUsVUFBVTtvQkFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzFELENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDakQsQ0FBQztZQUNGLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztJQUVKLENBQUM7Q0FFRjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMseURBQXlEIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC90eXBlZGVmICovXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5pbXBvcnQgeyBUYW9uQWRtaW4gfSBmcm9tICcuL3VpL3Rhb24tYWRtaW4tbW9kZS1jb25maWd1cmF0aW9uL3Rhb24tYWRtaW4uc2VydmljZSc7XG5cbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IENsYXNzSGVscGVycyB9IGZyb20gJy4vaGVscGVycy9jbGFzcy1oZWxwZXJzJztcbmltcG9ydCB7IFN5bWJvbHMgfSBmcm9tICcuL3N5bWJvbHMnO1xuaW1wb3J0IHsgXywgSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHR5cGUgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnLi9jcmVhdGUtY29udGV4dCc7XG5pbXBvcnQgeyBESVRhb25Db250YWluZXIgfSBmcm9tICcuL2RlcGVuZGVuY3ktaW5qZWN0aW9uL2RpLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBUYW9uQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tICcuL2RlY29yYXRvcnMvY2xhc3Nlcy9jb250cm9sbGVyLWRlY29yYXRvcic7XG5pbXBvcnQgeyBUYW9uSGVscGVycyB9IGZyb20gJy4vaGVscGVycy90YW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgICBNYXBwaW5nLCAgIE1vZGVscyBhcyBNb2RlbHNOZzJSZXN0LCAgIFJlc291cmNlLCAgIFJlc3RIZWFkZXJzLCB9IGZyb20gJ25nMi1yZXN0L2Jyb3dzZXInOy8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgeyBKU09OMTAgfSBmcm9tICdqc29uMTAvYnJvd3Nlcic7XG5pbXBvcnQgeyBwYXRoIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBmcm9tLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHlQcm9jZXNzIH0gZnJvbSAnLi9lbnRpdHktcHJvY2Vzcyc7XG5pbXBvcnQgeyBnZXRSZXNwb25zZVZhbHVlIH0gZnJvbSAnLi9nZXQtcmVzcG9uc2UtdmFsdWUnO1xuaW1wb3J0IHR5cGUgeyBBcHBsaWNhdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB0eXBlIHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7ICAgRGF0YVNvdXJjZSwgICBEYXRhU291cmNlT3B0aW9ucywgICBnZXRNZXRhZGF0YUFyZ3NTdG9yYWdlLCB9IGZyb20gJ3Rhb24tdHlwZW9ybS9icm93c2VyJzsvKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgeyBUYW9uRW50aXR5T3B0aW9ucyB9IGZyb20gJy4vZGVjb3JhdG9ycy9jbGFzc2VzL2VudGl0eS1kZWNvcmF0b3InO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXIgfSBmcm9tICdodHRwJztcbmltcG9ydCB7IEVOViB9IGZyb20gJy4vZW52JztcbmltcG9ydCB0eXBlIHsgQmFzZUNsYXNzIH0gZnJvbSAnLi9iYXNlLWNsYXNzZXMvYmFzZS1jbGFzcyc7XG5pbXBvcnQgeyBSZWFsdGltZUNvcmUgfSBmcm9tICcuL3JlYWx0aW1lL3JlYWx0aW1lLWNvcmUnO1xuaW1wb3J0IHsgVGFvblN1YnNjcmliZXJPcHRpb25zIH0gZnJvbSAnLi9kZWNvcmF0b3JzL2NsYXNzZXMvc3Vic2NyaWJlci1kZWNvcmF0b3InO1xuaW1wb3J0IHsgQmFzZVN1YnNjcmliZXJGb3JFbnRpdHkgfSBmcm9tICcuL2Jhc2UtY2xhc3Nlcy9iYXNlLXN1YnNjcmliZXItZm9yLWVudGl0eSc7XG5cblxuZXhwb3J0IGNsYXNzIEVuZHBvaW50Q29udGV4dCB7XG5cblxuXG4gIHByaXZhdGUgc3RhdGljIG5nWm9uZTogTmdab25lO1xuXG4gIHN0YXRpYyBpbml0Tmdab25lKG5nWm9uZTogTmdab25lKSB7XG5cbiAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcblxuICB9XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gIGRpc2FibGVkUmVhbHRpbWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIGNoZWNrIHdoZXRoZXIgY29udGV4dCBpcyBpbml0ZWRcbiAgICogKHdpdGggaW5pdCgpIGZ1bmN0aW9uIClcbiAgICovXG4gIHB1YmxpYyBpbml0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxJbnN0YWNlT2JqU3ltYm9sID0gU3ltYm9sKCdsb2NhbEluc3RhY2VPYmpTeW1ib2wnKTtcblxuXG4gIC8qKlxuICAgKiBhbGwgaW5zdGFuY2VzIG9mIGNsYXNzZXMgZnJvbSBjb250ZXh0XG4gICAqIGtleSBpcyBjbGFzcyBuYW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWxsQ2xhc3Nlc0luc3RhbmNlcyA9IHt9O1xuXG5cblxuICBwcml2YXRlIHJlYWRvbmx5IGNsYXNzSW5zdGFuY2VzQnlOYW1lT2JqID0ge307XG5cblxuXG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqV2l0aENsYXNzZXNJbnN0YW5jZXNBcnIgPSB7fTtcblxuXG5cbiAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZVJvdXRlczoge1xuICAgIHJvdXRlUGF0aDogc3RyaW5nO1xuICAgIG1ldGhvZDogTW9kZWxzLkh0dHAuUmVzdC5IdHRwTWV0aG9kO1xuICB9W10gPSBbXTtcblxuXG5cbiAgcHJpdmF0ZSBpbmplY3RhYmxlVHlwZXNmcm9tQ29udGV4dHMgPSBbXG4gICAgTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSLFxuICAgIE1vZGVscy5DbGFzc1R5cGUuUFJPVklERVIsXG4gICAgTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZLFxuICAgIE1vZGVscy5DbGFzc1R5cGUuU1VCU0NSSUJFUixcbiAgXTtcblxuXG4gIHByaXZhdGUgYWxsVHlwZXNmcm9tQ29udGV4dHMgPSBbXG4gICAgLi4udGhpcy5pbmplY3RhYmxlVHlwZXNmcm9tQ29udGV4dHMsXG4gICAgTW9kZWxzLkNsYXNzVHlwZS5FTlRJVFksXG4gIF07XG5cblxuICBwdWJsaWMgZXhwcmVzc0FwcDogQXBwbGljYXRpb24gPSB7fSBhcyBhbnk7XG5cblxuXG4gIHB1YmxpYyBzZXJ2ZXJUY3BVZHA6IFNlcnZlcjtcblxuXG5cbiAgZGF0YWJhc2VDb25maWc/OiBNb2RlbHMuRGF0YWJhc2VDb25maWc7XG4gIHByaXZhdGUgYXV0b0dlbmVyYXRlZENvbmZpZz86IE1vZGVscy5EYXRhYmFzZUNvbmZpZztcblxuXG5cbiAgbW9kZTogTW9kZWxzLkZyYW1ld29ya01vZGU7XG5cblxuXG4gIHNlc3Npb24/OiBNb2RlbHMuSVNlc3Npb247XG5cblxuXG4gIHB1YmxpYyBjb25uZWN0aW9uOiBEYXRhU291cmNlO1xuXG5cblxuICBwcml2YXRlIGVudGl0aWVzVHJpZ2dlcnMgPSB7fTtcblxuXG5cbiAgcHJpdmF0ZSByZWFsdGltZTogUmVhbHRpbWVDb3JlO1xuICBnZXQgcmVhbHRpbWVDbGllbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhbHRpbWUuY2xpZW50O1xuICB9XG4gIGdldCByZWFsdGltZVNlcnZlcigpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFsdGltZS5zZXJ2ZXI7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGF2YWlsYWJsZSBhZnRlciBpbml0KClcbiAgICovXG4gIHB1YmxpYyBjb25maWc6IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PjtcblxuXG5cbiAgZ2V0IGxvZ0h0dHAoKTogYm9vbGVhbiB7XG4gICAgaWYgKF8uaXNPYmplY3QodGhpcy5jb25maWc/LmxvZ3MpKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5jb25maWcubG9ncyBhcyBNb2RlbHMuQ29udGVjdGlvbk9wdGlvbnNMb2dzKS5odHRwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmxvZ3MgPT09IHRydWU7XG4gIH1cblxuICBnZXQgbG9nUmVhbHRpbWUoKTogYm9vbGVhbiB7XG4gICAgaWYgKF8uaXNPYmplY3QodGhpcy5jb25maWc/LmxvZ3MpKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5jb25maWcubG9ncyBhcyBNb2RlbHMuQ29udGVjdGlvbk9wdGlvbnNMb2dzKS5yZWFsdGltZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5sb2dzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGxvZ0ZyYW1ld29yaygpOiBib29sZWFuIHtcbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZz8ubG9ncykpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmNvbmZpZy5sb2dzIGFzIE1vZGVscy5Db250ZWN0aW9uT3B0aW9uc0xvZ3MpLmZyYW1ld29yaztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5sb2dzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGxvZ0RiKCk6IGJvb2xlYW4ge1xuICAgIGlmIChfLmlzT2JqZWN0KHRoaXMuY29uZmlnPy5sb2dzKSkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLmxvZ3MgYXMgTW9kZWxzLkNvbnRlY3Rpb25PcHRpb25zTG9ncykuZGI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ubG9ncyA9PT0gdHJ1ZTtcbiAgfVxuXG5cblxuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvcmlnaW5hbENvbmZpZzogTW9kZWxzLkNvbnRleHRPcHRpb25zPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+LFxuICAgIHByaXZhdGUgY29uZmlnRm46IChcbiAgICAgIGVudjogYW55LFxuICAgICkgPT4gTW9kZWxzLkNvbnRleHRPcHRpb25zPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+LFxuICApIHt9XG5cblxuXG4gIHB1YmxpYyBhc3luYyBpbml0KG9wdGlvbnM/OiB7IGluaXRGcm9tUmVjcnVzaXZlQ29udGV4dFJlc292bGU/OiBib29sZWFuOyBvdmVycmlkZUhvc3Q/OiBzdHJpbmc7b3ZlcnJpZGVSZW1vdGVIb3N0Pzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCB7IGluaXRGcm9tUmVjcnVzaXZlQ29udGV4dFJlc292bGUsIG92ZXJyaWRlSG9zdCwgb3ZlcnJpZGVSZW1vdGVIb3N0IH0gPSBvcHRpb25zIHx8IHt9OyAvLyBUT0RPIHVzZSBpdCA/XG5cbiAgICB0aGlzLmluaXRlZCA9IHRydWU7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZ0ZuKEVOVik7XG4gICAgaWYob3ZlcnJpZGVIb3N0ICYmIG92ZXJyaWRlUmVtb3RlSG9zdCkge1xuICAgICAgaWYoSGVscGVycy5pc1dlYlNRTCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBjYW4ndCBoYXZlIG92ZXJyaWRlSG9zdCBhbmQgb3ZlcnJpZGVSZW1vdGVIb3N0IGF0IHRoZSBzYW1lIHRpbWVgKVxuICAgICAgfVxuICAgICAgSGVscGVycy5lcnJvcihgWW91IGNhbid0IGhhdmUgb3ZlcnJpZGVIb3N0IGFuZCBvdmVycmlkZVJlbW90ZUhvc3QgYXQgdGhlIHNhbWUgdGltZWAsIGZhbHNlLCB0cnVlKTtcbi8qICovXG4vKiAqL1xuICBcbiAgICB9XG4gICAgdGhpcy5jb25maWcuaG9zdCA9ICAgb3ZlcnJpZGVIb3N0ID8gb3ZlcnJpZGVIb3N0IDogdGhpcy5jb25maWcuaG9zdDtcbiAgICB0aGlzLmNvbmZpZy5yZW1vdGVIb3N0ID0gb3ZlcnJpZGVSZW1vdGVIb3N0ID8gb3ZlcnJpZGVSZW1vdGVIb3N0IDogdGhpcy5jb25maWcucmVtb3RlSG9zdDtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5ob3N0KSB7XG4gICAgICB0aGlzLm1vZGUgPSAnYmFja2VuZC1mcm9udGVuZCh0Y3ArdWRwKSc7XG4vKiAqL1xuLyogKi9cbiAgXG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZy5yZW1vdGVIb3N0KSB7XG4gICAgICBpZiAodGhpcy5jb25maWcuaG9zdCkge1xuICAgICAgICBIZWxwZXJzLmVycm9yKFxuICAgICAgICAgIGBbdGFvbl0gWW91IGNhbid0IGhhdmUgcmVtb3RlSG9zdCBhbmQgaG9zdCBhdCB0aGUgc2FtZSB0aW1lYCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5tb2RlID0gJ3JlbW90ZS1iYWNrZW5kKHRjcCt1ZHApJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcudXNlSXBjV2hlbkVsZWN0cm9uICYmIEhlbHBlcnMuaXNFbGVjdHJvbikge1xuICAgICAgaWYgKEhlbHBlcnMuaXNXZWJTUUwpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gJ2JhY2tlbmQtZnJvbnRlbmQod2Vic3FsLWVsZWN0cm9uKSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGUgPSAnYmFja2VuZC1mcm9udGVuZChpcGMtZWxlY3Ryb24pJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubW9kZSAmJiAhdGhpcy5jb25maWcuYWJzdHJhY3QpIHtcbiAgICAgIEhlbHBlcnMuZXJyb3IoXG4gICAgICAgIGBbdGFvbl0gQ29udGV4dCBcIiR7dGhpcy5jb250ZXh0TmFtZX1cIjogWW91IG5lZWQgdG8gcHJvdmlkZSBob3N0IG9yIHJlbW90ZUhvc3Qgb3IgdXNlSXBjV2hlbkVsZWN0cm9uYCxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuLyogKi9cbi8qICovXG4gIFxuICAgIH1cblxuXG5cbiAgICBpZiAodGhpcy5jb25maWcuZGF0YWJhc2UgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZGF0YWJhc2VDb25maWcgPSB0aGlzLmdldEF1dG9HZW5lcmF0ZWRDb25maWcoKTtcbiAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3QodGhpcy5jb25maWcuZGF0YWJhc2UpKSB7XG4gICAgICB0aGlzLmRhdGFiYXNlQ29uZmlnID0gXy5jbG9uZURlZXAoXG4gICAgICAgIHRoaXMuY29uZmlnLmRhdGFiYXNlLFxuICAgICAgKSBhcyBNb2RlbHMuRGF0YWJhc2VDb25maWc7XG4gICAgfVxuXG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5zZXNzaW9uKSB7XG4gICAgICB0aGlzLnNlc3Npb24gPSBfLmNsb25lRGVlcCh0aGlzLmNvbmZpZy5zZXNzaW9uKTtcbiAgICAgIGNvbnN0IG9uZUhvdXIgPSAxMDAwICogNjAgKiA2MCAqIDE7IC8vIDI0O1xuICAgICAgaWYgKCF0aGlzLnNlc3Npb24uY29va2llTWF4QWdlKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5jb29raWVNYXhBZ2UgPSBvbmVIb3VyO1xuICAgICAgfVxuXG4gICAgICBheGlvcy5kZWZhdWx0cy53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgIH1cblxuXG5cbiAgICB0aGlzLmNvbmZpZy5jb250ZXh0cyA9IHRoaXMuY29uZmlnLmNvbnRleHRzIHx8IHt9O1xuICAgIHRoaXMuY29uZmlnLmVudGl0aWVzID0gdGhpcy5jb25maWcuZW50aXRpZXMgfHwge307XG4gICAgdGhpcy5jb25maWcuY29udHJvbGxlcnMgPSB0aGlzLmNvbmZpZy5jb250cm9sbGVycyB8fCB7fTtcbiAgICB0aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMgPSB0aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMgfHwge307XG4gICAgdGhpcy5jb25maWcucHJvdmlkZXJzID0gdGhpcy5jb25maWcucHJvdmlkZXJzIHx8IHt9O1xuICAgIHRoaXMuY29uZmlnLnN1YnNjcmliZXJzID0gdGhpcy5jb25maWcuc3Vic2NyaWJlcnMgfHwge307XG5cbiAgICB0aGlzLmNvbmZpZy5lbnRpdGllcyA9IHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmdldFJlY3J1c2l2ZUNsYXNzZXNmcm9tQ29udGV4dHNPYmooXG4gICAgICAgIE1vZGVscy5DbGFzc1R5cGUuRU5USVRZLFxuICAgICAgKSksXG4gICAgICAuLi50aGlzLmNvbmZpZy5lbnRpdGllcyxcbiAgICB9O1xuXG4gICAgdGhpcy5jb25maWcuY29udHJvbGxlcnMgPSB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgICAgICBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgICApKSxcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbnRyb2xsZXJzLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbmZpZy5wcm92aWRlcnMgPSB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgICAgICBNb2RlbHMuQ2xhc3NUeXBlLlBST1ZJREVSLFxuICAgICAgKSksXG4gICAgICAuLi50aGlzLmNvbmZpZy5wcm92aWRlcnMsXG4gICAgfTtcblxuICAgIHRoaXMuY29uZmlnLnN1YnNjcmliZXJzID0ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICAgICAgTW9kZWxzLkNsYXNzVHlwZS5TVUJTQ1JJQkVSLFxuICAgICAgKSksXG4gICAgICAuLi50aGlzLmNvbmZpZy5zdWJzY3JpYmVycyxcbiAgICB9O1xuXG4gICAgdGhpcy5jb25maWcucmVwb3NpdG9yaWVzID0ge1xuICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0c09iaihcbiAgICAgICAgTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZLFxuICAgICAgKSksXG4gICAgICAuLi50aGlzLmNvbmZpZy5yZXBvc2l0b3JpZXMsXG4gICAgfTtcblxuXG5cblxuXG4gICAgdGhpcy5jb25maWcuY29udHJvbGxlcnMgPSB0aGlzLmNsb25lQ2xhc3Nlc09ialdpdGhOZXdNZXRhZGF0YSh7XG4gICAgICBjbGFzc2VzSW5wdXQ6IHRoaXMuY29uZmlnLmNvbnRyb2xsZXJzLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGN0eDogdGhpcyxcbiAgICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSLFxuICAgIH0pO1xuICAgIHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcucmVwb3NpdG9yaWVzLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGN0eDogdGhpcyxcbiAgICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZS5SRVBPU0lUT1JZLFxuICAgIH0pO1xuICAgIHRoaXMuY29uZmlnLnByb3ZpZGVycyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcucHJvdmlkZXJzLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGN0eDogdGhpcyxcbiAgICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZS5QUk9WSURFUixcbiAgICB9KTtcbiAgICB0aGlzLmNvbmZpZy5zdWJzY3JpYmVycyA9IHRoaXMuY2xvbmVDbGFzc2VzT2JqV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgIGNsYXNzZXNJbnB1dDogdGhpcy5jb25maWcuc3Vic2NyaWJlcnMsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY3R4OiB0aGlzLFxuICAgICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLlNVQlNDUklCRVIsXG4gICAgfSk7XG5cblxuXG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIHRoaXMuaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzKSB7XG4gICAgICB0aGlzLmNsYXNzSW5zdGFuY2VzQnlOYW1lT2JqW2NsYXNzVHlwZU5hbWVdID0ge307XG4gICAgICB0aGlzLm9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyW2NsYXNzVHlwZU5hbWVdID0gW107XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIHRoaXMuaW5qZWN0YWJsZVR5cGVzZnJvbUNvbnRleHRzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZUluc3RhbmNlcyhcbiAgICAgICAgdGhpcy5jb25maWdbTW9kZWxzLkNsYXNzVHlwZUtleVtjbGFzc1R5cGVOYW1lXV0sXG4gICAgICAgIGNsYXNzVHlwZU5hbWUsXG4gICAgICApO1xuICAgIH1cblxuXG5cbiAgICBpZiAodGhpcy5tb2RlID09PSAnYmFja2VuZC1mcm9udGVuZCh0Y3ArdWRwKScgJiYgIXRoaXMuY29uZmlnLmFic3RyYWN0KSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICB9XG5cblxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5hYnN0cmFjdCkge1xuICAgICAgdGhpcy5kaXNhYmxlZFJlYWx0aW1lID0gISF0aGlzLmNvbmZpZy5kaXNhYmxlZFJlYWx0aW1lO1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgdGhpcy5yZWFsdGltZSA9IG5ldyBSZWFsdGltZUNvcmUodGhpcyk7XG4gICAgfVxuXG5cblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgICBIZWxwZXJzLmluZm8oXG4gICAgICAgICAgYFt0YW9uXSBDcmVhdGUgYWJzdHJhY3QgY29udGV4dDogJHt0aGlzLmNvbmZpZy5jb250ZXh0TmFtZX1gLFxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jb25maWcucmVtb3RlSG9zdCkge1xuICAgICAgICB0aGlzLmxvZ0ZyYW1ld29yayAmJlxuICAgICAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgICAgIGBbdGFvbl0gQ3JlYXRlIGNvbnRleHQgZm9yIHJlbW90ZSBob3N0OiAke3RoaXMuY29uZmlnLnJlbW90ZUhvc3R9YCxcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dGcmFtZXdvcmsgJiZcbiAgICAgICAgICBIZWxwZXJzLmluZm8oYFt0YW9uXSBDcmVhdGUgY29udGV4dCBmb3IgaG9zdDogJHt0aGlzLmNvbmZpZy5ob3N0fWApO1xuICAgICAgfVxuICAgIH1cblxuXG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgdGhpcy5vcmlnaW5hbENvbmZpZ1trZXldID0gdGhpcy5jb25maWdba2V5XTtcbiAgICB9KTtcbiAgfVxuXG5cblxuICBwcml2YXRlIGdldEF1dG9HZW5lcmF0ZWRDb25maWcoKTogTW9kZWxzLkRhdGFiYXNlQ29uZmlnIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGdldCBuZ1pvbmUoKTogYW55IHtcblxuICAgIHJldHVybiBFbmRwb2ludENvbnRleHQubmdab25lO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cblxuXG4gIHN0YXJ0U2VydmVyKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgZGlzcGxheVJvdXRlcyhhcHApIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIGdldCBtb2RlQWxsb3dzRGF0YWJhc2VDcmVhdGlvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tb2RlID09PSAnYmFja2VuZC1mcm9udGVuZCh0Y3ArdWRwKScgfHxcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2JhY2tlbmQtZnJvbnRlbmQod2Vic3FsKScgfHxcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2JhY2tlbmQtZnJvbnRlbmQoaXBjLWVsZWN0cm9uKSdcbiAgICApO1xuICB9XG5cblxuXG5cbiAgcHJpdmF0ZSBjbG9uZUNsYXNzV2l0aE5ld01ldGFkYXRhID0gPFxuICAgIFQgZXh0ZW5kcyB7IG5ldyAoLi4uYXJnczogYW55W10pOiBhbnkgfSxcbiAgPih7XG4gICAgQmFzZUNsYXNzLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb25maWcsXG4gICAgY3R4LFxuICAgIGNsYXNzVHlwZSxcbiAgfToge1xuICAgIEJhc2VDbGFzczogVDtcbiAgICBjbGFzc05hbWU6IHN0cmluZztcbiAgICBjb25maWc6IE1vZGVscy5Db250ZXh0T3B0aW9uczxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PjtcbiAgICBjdHg6IEVuZHBvaW50Q29udGV4dDtcbiAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGU7XG4gIH0pOiBUID0+IHtcblxuICAgIGNvbnN0IGNsb25lQ2xhc3MgPSAoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIEJhc2VDbGFzc1tTeW1ib2xzLmZ1bGxDbGFzc05hbWVTdGF0aWNQcm9wZXJ0eV0gPT09XG4gICAgICAgIGAke2N0eC5jb250ZXh0TmFtZX0uJHtjbGFzc05hbWV9YFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBCYXNlQ2xhc3M7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xuXG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzdGF0aWMgW1N5bWJvbHMub3JpZ25hbENsYXNzXSA9IEJhc2VDbGFzcztcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHN0YXRpYyBbU3ltYm9scy5mdWxsQ2xhc3NOYW1lU3RhdGljUHJvcGVydHldID0gYCR7Y3R4LmNvbnRleHROYW1lfS4ke2NsYXNzTmFtZX1gO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc3RhdGljIFtTeW1ib2xzLmNsYXNzTmFtZVN0YXRpY1Byb3BlcnR5XSA9IGNsYXNzTmFtZTtcblxuICAgICAgICBzdGF0aWMgW1N5bWJvbHMuY3R4SW5DbGFzc09yQ2xhc3NPYmpdID0gY3R4O1xuXG4gICAgICAgIHN0YXRpYyBfX2dldEZ1bGxQYXRoRm9yQ2xhc3NfXyhhcnIgPSBbXSkge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzW1N5bWJvbHMuZnVsbENsYXNzTmFtZVN0YXRpY1Byb3BlcnR5XTtcbiAgICAgICAgICBhcnIucHVzaChuYW1lKTtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpc1tTeW1ib2xzLm9yaWduYWxDbGFzc10gJiYgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpc1tTeW1ib2xzLm9yaWduYWxDbGFzc10uX19nZXRGdWxsUGF0aEZvckNsYXNzX19cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXNbU3ltYm9scy5vcmlnbmFsQ2xhc3NdLl9fZ2V0RnVsbFBhdGhGb3JDbGFzc19fKGFycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhcnIuam9pbignLycpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXQgZnVsbFBhdGhGb3JDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9fZ2V0RnVsbFBhdGhGb3JDbGFzc19fKCk7XG4gICAgICAgIH1cbiAgICAgICAgW1N5bWJvbHMuY3R4SW5DbGFzc09yQ2xhc3NPYmpdID0gY3R4O1xuXG5cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNsb25lQ2xhc3NGdW5jdGlvbiA9IGNsb25lQ2xhc3MoKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgIHJldHVybiBjbG9uZUNsYXNzRnVuY3Rpb247XG4gIH07XG5cblxuXG5cblxuICBwcml2YXRlIGNsb25lQ2xhc3Nlc09ialdpdGhOZXdNZXRhZGF0YSA9ICh7XG4gICAgY2xhc3Nlc0lucHV0LFxuICAgIGNvbmZpZyxcbiAgICBjdHgsXG4gICAgY2xhc3NUeXBlLFxuICB9OiB7XG4gICAgY2xhc3Nlc0lucHV0OiBhbnk7XG4gICAgY29uZmlnOiBNb2RlbHMuQ29udGV4dE9wdGlvbnM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG4gICAgY3R4OiBFbmRwb2ludENvbnRleHQ7XG4gICAgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlO1xuICB9KSA9PiB7XG4gICAgY29uc3QgY2xhc3NlcyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY2xhc3Nlc0lucHV0IHx8IHt9KSkge1xuICAgICAgY29uc3QgQmFzZUNsYXNzID0gY2xhc3Nlc0lucHV0W2tleV07XG5cbiAgICAgIGlmICghQmFzZUNsYXNzKSB7XG4gICAgICAgIEhlbHBlcnMuZXJyb3IoYENsYXNzICR7a2V5fSBpcyBub3QgZGVmaW5lZCBpbiBjb250ZXh0ICR7Y3R4LmNvbnRleHROYW1lfVxuXG4gICAgICAgIFBsZWFzZSBjaGVjayBpZiB5b3UgaGF2ZSBjb3JyZWN0IGltcG9ydCBpbiBjb250ZXh0IGZpbGVcblxuICAgICAgICBgKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNsYXNzTmFtZSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFN5bWJvbHMubWV0YWRhdGEuY2xhc3NOYW1lLFxuICAgICAgICBCYXNlQ2xhc3MsXG4gICAgICApO1xuXG5cblxuXG5cbiAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBrZXk7XG4gICAgICBCYXNlQ2xhc3NbU3ltYm9scy5jbGFzc05hbWVTdGF0aWNQcm9wZXJ0eV0gPSBjbGFzc05hbWU7XG5cbiAgICAgIGNvbnN0IGNsb25lZENsYXNzID0gdGhpcy5jbG9uZUNsYXNzV2l0aE5ld01ldGFkYXRhKHtcbiAgICAgICAgQmFzZUNsYXNzLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY3R4LFxuICAgICAgICBjbGFzc1R5cGUsXG4gICAgICB9KTtcbiAgICAgIGNsYXNzZXNbY2xhc3NOYW1lXSA9IGNsb25lZENsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfTtcblxuXG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzT2JqKFxuICAgIGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSxcbiAgKSB7XG4gICAgY29uc3QgYXJyID0gYXdhaXQgdGhpcy5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzKGNsYXNzVHlwZSk7XG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoKGFjYywgYykgPT4ge1xuICAgICAgYWNjW0NsYXNzSGVscGVycy5nZXROYW1lKGMpXSA9IGM7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVjcnVzaXZlQ2xhc3Nlc2Zyb21Db250ZXh0cyhcbiAgICBjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUsXG4gICAgYXJyID0gW10sXG4gICkge1xuICAgIGNvbnN0IGNvbnRleHRzID0gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbmZpZy5jb250ZXh0cyB8fCB7fSkgYXMgUmV0dXJuVHlwZTxcbiAgICAgIHR5cGVvZiBjcmVhdGVDb250ZXh0XG4gICAgPltdO1xuXG5cblxuICAgIGZvciAoY29uc3QgY3R4IG9mIGNvbnRleHRzKSB7XG5cbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IGN0eC5fX3JlZigpO1xuXG4gICAgICBjb25zdCBjbGFzc2VzSW5wdXQgPSByZWYuZ2V0Q2xhc3NGdW5CeShjbGFzc1R5cGUpO1xuXG5cbiAgICAgIGNvbnN0IGNsb25lZENsYXNzZXMgPSBPYmplY3QudmFsdWVzKFxuICAgICAgICB0aGlzLmNsb25lQ2xhc3Nlc09ialdpdGhOZXdNZXRhZGF0YSh7XG4gICAgICAgICAgY2xhc3Nlc0lucHV0LFxuICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICAgICAgY3R4OiB0aGlzLFxuICAgICAgICAgIGNsYXNzVHlwZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICBjbG9uZWRDbGFzc2VzLmZvckVhY2goYyA9PiBhcnIucHVzaChjKSk7XG5cbiAgICAgIGF3YWl0IHJlZi5nZXRSZWNydXNpdmVDbGFzc2VzZnJvbUNvbnRleHRzKGNsYXNzVHlwZSwgYXJyKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyciBhcyBGdW5jdGlvbltdO1xuICB9XG5cblxuXG4gIGdldENsYXNzSW5zdGFuY2VPYmpCeShjbGFzc1R5cGU6IE1vZGVscy5DbGFzc1R5cGUpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNsYXNzSW5zdGFuY2VzQnlOYW1lT2JqW2NsYXNzVHlwZV07XG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBnZXRDbGFzc2VzSW5zdGFuY2VzQXJyQnkoY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLm9ialdpdGhDbGFzc2VzSW5zdGFuY2VzQXJyW2NsYXNzVHlwZV07XG4gIH1cblxuXG5cbiAgaW5qZWN0PFQ+KFxuICAgIGN0b3I6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGxvY2FsSW5zdGFuY2U/OiBib29sZWFuO1xuICAgICAgY29udGV4dENsYXNzSW5zdGFuY2U/OiBCYXNlQ2xhc3M7XG4gICAgICBsb2NhSW5zdGFuY2VDb25zdHJ1Y3RvckFyZ3M/OiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIGN0b3I+O1xuICAgIH0sXG4gICk6IFQge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9IGFzIGFueTtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NIZWxwZXJzLmdldE5hbWUoY3Rvcik7XG5cbiAgICBjb25zdCBsb2NhSW5zdGFuY2VDb25zdHJ1Y3RvckFyZ3MgPVxuICAgICAgb3B0aW9ucy5sb2NhSW5zdGFuY2VDb25zdHJ1Y3RvckFyZ3MgfHwgW107XG5cbiAgICBpZiAodGhpcy5pc0NMYXNzVHlwZShNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksIGN0b3IpKSB7XG4gICAgICBvcHRpb25zLmxvY2FsSW5zdGFuY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5sb2NhbEluc3RhbmNlKSB7XG4gICAgICBjb25zdCBjdHhDbGFzc0ZuID0gdGhpcy5nZXRDbGFzc0Z1bkJ5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG4gICAgICBsZXQgZW50aXR5TmFtZTogc3RyaW5nID0gJyc7XG5cbiAgICAgIGlmIChjbGFzc05hbWUgPT09ICdCYXNlUmVwb3NpdG9yeScpIHtcbiAgICAgICAgY29uc3QgZW50aXR5Rm4gPSBsb2NhSW5zdGFuY2VDb25zdHJ1Y3RvckFyZ3NbMF07XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0eUZuICYmIGVudGl0eUZuKCk7XG4gICAgICAgIGVudGl0eU5hbWUgPSBlbnRpdHkgJiYgQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHRDbGFzc0luc3RhbmNlW3RoaXMubG9jYWxJbnN0YWNlT2JqU3ltYm9sXSkge1xuICAgICAgICBvcHRpb25zLmNvbnRleHRDbGFzc0luc3RhbmNlW3RoaXMubG9jYWxJbnN0YWNlT2JqU3ltYm9sXSA9IHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgaW5zdGFuY2VLZXkgPSBjbGFzc05hbWUgKyAoZW50aXR5TmFtZSA/IGAuJHtlbnRpdHlOYW1lfWAgOiAnJyk7XG4gICAgICBjb25zdCBleGlzdGVkID1cbiAgICAgICAgb3B0aW9ucy5jb250ZXh0Q2xhc3NJbnN0YW5jZVt0aGlzLmxvY2FsSW5zdGFjZU9ialN5bWJvbF1baW5zdGFuY2VLZXldO1xuICAgICAgaWYgKGV4aXN0ZWQpIHtcblxuICAgICAgICByZXR1cm4gZXhpc3RlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjdHhDbGFzc0ZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGFibGUgdG8gaW5qZWN0IFwiJHtjbGFzc05hbWV9XCIgaW5zaWRlIGNvbnRleHQgXCIke3RoaXMuY29udGV4dE5hbWV9XCJcblxuICAgICAgICBNYWtlIHN1cmUgdGhleSBzaGFyZSB0aGUgc2FtZSBjb250ZXh0IG9yIGltcG9ydCBjb250ZXh0IHdoZXJlIFwiJHtjbGFzc05hbWV9XCIgaXMgZGVmaW5lZC5cblxuICAgICAgICBgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5qZWN0ZWRJbnN0YW5jZSA9IG5ldyAoY3R4Q2xhc3NGbiBhcyBhbnkpKFxuICAgICAgICAuLi5sb2NhSW5zdGFuY2VDb25zdHJ1Y3RvckFyZ3MsXG4gICAgICApO1xuICAgICAgb3B0aW9ucy5jb250ZXh0Q2xhc3NJbnN0YW5jZVt0aGlzLmxvY2FsSW5zdGFjZU9ialN5bWJvbF1baW5zdGFuY2VLZXldID1cbiAgICAgICAgaW5qZWN0ZWRJbnN0YW5jZTtcblxuICAgICAgcmV0dXJuIGluamVjdGVkSW5zdGFuY2U7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dFNjb3BlSW5zdGFuY2UgPSB0aGlzLmFsbENsYXNzZXNJbnN0YW5jZXNbY2xhc3NOYW1lXTtcblxuXG5cbiAgICByZXR1cm4gY29udGV4dFNjb3BlSW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogYWxpYXMgZm9yIGluamVjdFxuICAgKi9cbiAgZ2V0SW5zdGFuY2VCeTxUPihjdG9yOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0KGN0b3IsIHsgbG9jYWxJbnN0YW5jZTogZmFsc2UgfSk7XG4gIH1cblxuXG4gIGNoZWNrSWZDb250ZXh0SW5pdGlhbGl6ZWQoKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5jb25maWcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBjaGVjayBpZiB5b3VyIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG5cblxuICAgICAgYXdhaXQgQ29udGV4dC5pbml0aWFsaXplKCk7XG5cblxuXG4gICAgICBgKTtcbiAgICB9XG4gIH1cblxuXG4gIGdldENsYXNzRnVuQnkoY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlKSB7XG4gICAgdGhpcy5jaGVja0lmQ29udGV4dEluaXRpYWxpemVkKCk7XG4gICAgc3dpdGNoIChjbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5DT05UUk9MTEVSOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuY29udHJvbGxlcnM7XG4gICAgICBjYXNlIE1vZGVscy5DbGFzc1R5cGUuRU5USVRZOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuZW50aXRpZXM7XG4gICAgICBjYXNlIE1vZGVscy5DbGFzc1R5cGUuUFJPVklERVI6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5wcm92aWRlcnM7XG4gICAgICBjYXNlIE1vZGVscy5DbGFzc1R5cGUuUkVQT1NJVE9SWTpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcG9zaXRvcmllcztcbiAgICAgIGNhc2UgTW9kZWxzLkNsYXNzVHlwZS5TVUJTQ1JJQkVSOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuc3Vic2NyaWJlcnM7XG4gICAgfVxuICB9XG5cbiAgaXNDTGFzc1R5cGUoY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlLCBjbGFzc0ZuOiBGdW5jdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0Q2xhc3NGdW5CeShjbGFzc1R5cGUpW0NsYXNzSGVscGVycy5nZXROYW1lKGNsYXNzRm4pXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmx5IGZvciBpbmplY3RhYmxlIHR5cGVzXG4gICAqIE9ubHkgZm9yIGNsYXNzVHlwZTogQ09OVFJPTExFUiwgUkVQT1NJVE9SWSwgUFJPVklERVJcbiAgICovXG4gIGdldENsYXNzRnVuQnlDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiBGdW5jdGlvbiB7XG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIHRoaXMuYWxsVHlwZXNmcm9tQ29udGV4dHMpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXNGb3JJbmplY3RhYmxlVHlwZSA9XG4gICAgICAgIHRoaXMuY29uZmlnW01vZGVscy5DbGFzc1R5cGVLZXlbY2xhc3NUeXBlTmFtZV1dO1xuXG4gICAgICBpZiAoY2xhc3Nlc0ZvckluamVjdGFibGVUeXBlW2NsYXNzTmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXNGb3JJbmplY3RhYmxlVHlwZVtjbGFzc05hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldENsYXNzRnVuQnlDbGFzcyhjbGFzc0Z1bmN0aW9uOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc0hlbHBlcnMuZ2V0TmFtZShjbGFzc0Z1bmN0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5nZXRDbGFzc0Z1bkJ5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG4gIH1cblxuICBnZXRDbGFzc0Z1bkJ5QXJyKGNsYXNzVHlwZTogTW9kZWxzLkNsYXNzVHlwZSkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZ2V0Q2xhc3NGdW5CeShjbGFzc1R5cGUpIHx8IHt9KSBhcyBGdW5jdGlvbltdO1xuICB9XG5cblxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlSW5zdGFuY2VzKGNsYXNzZXM6IGFueSwgY2xhc3NUeXBlOiBNb2RlbHMuQ2xhc3NUeXBlKSB7XG5cblxuXG5cblxuICAgIGZvciAoY29uc3QgY2xhc3NGbiBvZiBbXG5cbiAgICAgIC4uLk9iamVjdC52YWx1ZXMoY2xhc3NlcyksXG4gICAgXSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBESVRhb25Db250YWluZXIucmVzb2x2ZShjbGFzc0ZuIGFzIGFueSkgYXMgYW55O1xuICAgICAgY29uc3QgY2xhc3NJbnN0YW5jZXNCeU5hbWVPYmogPSB0aGlzLmNsYXNzSW5zdGFuY2VzQnlOYW1lT2JqW2NsYXNzVHlwZV07XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc0hlbHBlcnMuZ2V0TmFtZShjbGFzc0ZuKTtcblxuICAgICAgY2xhc3NJbnN0YW5jZXNCeU5hbWVPYmpbY2xhc3NOYW1lXSA9IGluc3RhbmNlO1xuXG4gICAgICB0aGlzLmNvbmZpZ1tNb2RlbHMuQ2xhc3NUeXBlS2V5W2NsYXNzVHlwZV1dW2NsYXNzTmFtZV0gPSBjbGFzc0ZuO1xuICAgICAgdGhpcy5vYmpXaXRoQ2xhc3Nlc0luc3RhbmNlc0FycltjbGFzc1R5cGVdLnB1c2goaW5zdGFuY2UpO1xuICAgICAgdGhpcy5hbGxDbGFzc2VzSW5zdGFuY2VzW2NsYXNzTmFtZV0gPSBpbnN0YW5jZTtcbiAgICB9XG4gIH1cblxuXG5cbiAgYXN5bmMgcmVpbml0Q29udHJvbGxlcnMoKSB7XG4gICAgaWYodGhpcy5yZW1vdGVIb3N0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGNvbnN0IGNvbnRyb2xsZXJzID0gdGhpcy5nZXRDbGFzc2VzSW5zdGFuY2VzQXJyQnkoXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgY3RybCBvZiBjb250cm9sbGVycykge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjdHJsLmluaXRFeGFtcGxlRGJEYXRhKSkge1xuICAgICAgICBhd2FpdCBIZWxwZXJzLnJ1blN5bmNPckFzeW5jKHtcbiAgICAgICAgICBmdW5jdGlvbkZuOiBjdHJsLmluaXRFeGFtcGxlRGJEYXRhLFxuICAgICAgICAgIGNvbnRleHQ6IGN0cmwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuXG5cbiAgfVxuICBhc3luYyBpbml0Q2xhc3NlcygpIHtcbiAgICBpZih0aGlzLnJlbW90ZUhvc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIFtcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuUFJPVklERVIsXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLkVOVElUWSxcbiAgICBdKSB7XG5cblxuXG5cbiAgICAgIGZvciAoY29uc3QgY2xhc3NGdW4gb2YgdGhpcy5nZXRDbGFzc0Z1bkJ5QXJyKGNsYXNzVHlwZU5hbWUpIGFzIGFueVtdKSB7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY2xhc3NGdW4uXykpIHtcbiAgICAgICAgICBhd2FpdCBIZWxwZXJzLnJ1blN5bmNPckFzeW5jKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uRm46IGNsYXNzRnVuLl8sXG4gICAgICAgICAgICBjb250ZXh0OiBjbGFzc0Z1bixcbiAgICAgICAgICB9KTtcblxuXG5cblxuXG5cbiAgICAgICAgfVxuICAgICAgfVxuXG5cblxuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjbGFzc1R5cGVOYW1lIG9mIFtcbiAgICAgIE1vZGVscy5DbGFzc1R5cGUuUFJPVklERVIsXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLlJFUE9TSVRPUlksXG4gICAgICBNb2RlbHMuQ2xhc3NUeXBlLkNPTlRST0xMRVIsXG4gICAgXSkge1xuXG5cblxuXG4gICAgICBmb3IgKGNvbnN0IGN0cmwgb2YgdGhpcy5nZXRDbGFzc2VzSW5zdGFuY2VzQXJyQnkoY2xhc3NUeXBlTmFtZSkpIHtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjdHJsLl8pKSB7XG4gICAgICAgICAgYXdhaXQgSGVscGVycy5ydW5TeW5jT3JBc3luYyh7XG4gICAgICAgICAgICBmdW5jdGlvbkZuOiBjdHJsLl8sXG4gICAgICAgICAgICBjb250ZXh0OiBjdHJsLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cblxuXG5cbiAgICB9XG4gIH1cblxuXG5cbiAgaXNBY3RpdmVPbihjbGFzc0luc3RhbmNlOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICBsZXQgY29udGV4dFJlZjogRW5kcG9pbnRDb250ZXh0ID1cbiAgICAgIGNsYXNzSW5zdGFuY2VbU3ltYm9scy5jdHhJbkNsYXNzT3JDbGFzc09ial07XG4gICAgcmV0dXJuIHRoaXMgPT09IGNvbnRleHRSZWY7XG4gIH1cblxuXG5cbiAgZ2V0IHVyaSgpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmhvc3RcbiAgICAgID8gbmV3IFVSTCh0aGlzLmhvc3QpXG4gICAgICA6IHRoaXMucmVtb3RlSG9zdFxuICAgICAgICA/IG5ldyBVUkwodGhpcy5yZW1vdGVIb3N0KVxuICAgICAgICA6IHZvaWQgMDtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cblxuXG4gIGdldCBpc0h0dHBTZXJ2ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudXJpLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgfVxuXG5cblxuICAvKipcbiAgICogaXBjL3VkcCBuZWVkcyB0aGlzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbnRleHROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb250ZXh0TmFtZTtcbiAgfVxuXG5cblxuICBwdWJsaWMgZ2V0IHB1YmxpY0Fzc2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnB1YmxpY0Fzc2V0cyB8fCBbXTtcbiAgfVxuXG5cblxuICBnZXQgaXNQcm9kdWN0aW9uTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucHJvZHVjdGlvbk1vZGU7XG4gIH1cblxuXG5cbiAgZ2V0IHJlbW90ZUhvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlbW90ZUhvc3Q7XG4gIH1cblxuXG5cbiAgZ2V0IGhvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmhvc3Q7XG4gIH1cblxuXG5cbiAgZ2V0IG9yZ2luKCkge1xuICAgIHJldHVybiB0aGlzLnVyaT8ub3JpZ2luO1xuICB9XG5cblxuXG4gIGFzeW5jIGluaXRTdWJzY3JpYmVycygpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGFzeW5jIGluaXRFbnRpdGllcygpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuXG4gIGFzeW5jIGluaXREYXRhYmFzZUNvbm5lY3Rpb24oKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG5cbiAgaW5pdE1ldGFkYXRhKCkge1xuICAgIGNvbnN0IGFsbENvbnRyb2xsZXJzID0gdGhpcy5nZXRDbGFzc0Z1bkJ5QXJyKE1vZGVscy5DbGFzc1R5cGUuQ09OVFJPTExFUik7XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXJDbGFzc0ZuIG9mIGFsbENvbnRyb2xsZXJzKSB7XG4gICAgICBjb250cm9sbGVyQ2xhc3NGbltTeW1ib2xzLmNsYXNzTWV0aG9kc05hbWVzXSA9XG4gICAgICAgIENsYXNzSGVscGVycy5nZXRNZXRob2RzTmFtZXMoY29udHJvbGxlckNsYXNzRm4pO1xuICAgICAgY29uc3QgY29uZmlncyA9IENsYXNzSGVscGVycy5nZXRDb250cm9sbGVyQ29uZmlncyhjb250cm9sbGVyQ2xhc3NGbik7XG5cbiAgICAgIGNvbnN0IGNsYXNzQ29uZmlnOiBNb2RlbHMuUnVudGltZUNvbnRyb2xsZXJDb25maWcgPSBjb25maWdzWzBdO1xuXG4gICAgICBjb25zdCBwYXJlbnRzY2FsY3VsYXRlZFBhdGggPSBfLnNsaWNlKGNvbmZpZ3MsIDEpXG4gICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgLm1hcChiYyA9PiB7XG4gICAgICAgICAgaWYgKFRhb25IZWxwZXJzLmlzR29vZFBhdGgoYmMucGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBiYy5wYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYmMuY2xhc3NOYW1lO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignLycpO1xuXG4gICAgICBpZiAoVGFvbkhlbHBlcnMuaXNHb29kUGF0aChjbGFzc0NvbmZpZy5wYXRoKSkge1xuICAgICAgICBjbGFzc0NvbmZpZy5jYWxjdWxhdGVkUGF0aCA9IGNsYXNzQ29uZmlnLnBhdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGFzc0NvbmZpZy5jYWxjdWxhdGVkUGF0aCA9XG4gICAgICAgICAgYCR7cGFyZW50c2NhbGN1bGF0ZWRQYXRofS8ke0NsYXNzSGVscGVycy5nZXROYW1lKGNvbnRyb2xsZXJDbGFzc0ZuKX1gXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvXFwvL2csICcvJylcbiAgICAgICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGJjKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBfLmxhc3QoYWNjKSA9PT0gYmMgPyBhY2MgOiBbLi4uYWNjLCBiY107XG4gICAgICAgICAgICB9LCBbXSlcbiAgICAgICAgICAgIC5qb2luKCcvJyk7XG4gICAgICB9XG5cbiAgICAgIF8uc2xpY2UoY29uZmlncywgMSkuZm9yRWFjaChiYyA9PiB7XG4gICAgICAgIGNvbnN0IGFscmVhZHlJcyA9IGNsYXNzQ29uZmlnLm1ldGhvZHM7XG4gICAgICAgIGNvbnN0IHRvTWVyZ2UgPSBfLmNsb25lRGVlcChiYy5tZXRob2RzKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdG9NZXJnZSkge1xuICAgICAgICAgIGlmICh0b01lcmdlLmhhc093blByb3BlcnR5KGtleSkgJiYgIWFscmVhZHlJc1trZXldKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdG9NZXJnZVtrZXldO1xuICAgICAgICAgICAgYWxyZWFkeUlzW2tleV0gPSBlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbi8qICovXG4vKiAqL1xuICBcbiAgICAgICAgdGhpcy5sb2dIdHRwICYmXG4gICAgICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZChcbiAgICAgICAgICAgIGBbdGFvbl1bZXhwcmVzcy1zZXJ2ZXJdIHJvdXRlcyBbJHtjbGFzc0NvbmZpZy5jbGFzc05hbWV9XWAsXG4gICAgICAgICAgKTtcbi8qICovXG4vKiAqL1xuICBcblxuXG4gICAgICBPYmplY3Qua2V5cyhjbGFzc0NvbmZpZy5tZXRob2RzKS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBtZXRob2RDb25maWc6IE1vZGVscy5NZXRob2RDb25maWcgPVxuICAgICAgICAgIGNsYXNzQ29uZmlnLm1ldGhvZHNbbWV0aG9kTmFtZV07XG5cbiAgICAgICAgY29uc3QgdHlwZTogTW9kZWxzLkh0dHAuUmVzdC5IdHRwTWV0aG9kID0gbWV0aG9kQ29uZmlnLnR5cGU7XG4gICAgICAgIGNvbnN0IGV4cHJlc3NQYXRoID0gbWV0aG9kQ29uZmlnLmdsb2JhbFxuICAgICAgICAgID8gYC8ke21ldGhvZENvbmZpZy5wYXRoPy5yZXBsYWNlKC9cXC8vLCAnJyl9YFxuICAgICAgICAgIDogVGFvbkhlbHBlcnMuZ2V0RXhwcmVzc1BhdGgoY2xhc3NDb25maWcsIG1ldGhvZENvbmZpZyk7XG5cblxuICAgICAgICBpZiAoSGVscGVycy5pc05vZGUgfHwgSGVscGVycy5pc1dlYlNRTCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkSW5pdENsaWVudCA9XG4gICAgICAgICAgSGVscGVycy5pc0Jyb3dzZXIgfHwgdGhpcy5yZW1vdGVIb3N0IHx8IEhlbHBlcnMuaXNXZWJTUUw7XG5cbiAgICAgICAgaWYgKHNob3VsZEluaXRDbGllbnQpIHtcblxuXG5cblxuXG5cblxuICAgICAgICAgIHRoaXMuaW5pdENsaWVudChjb250cm9sbGVyQ2xhc3NGbiwgdHlwZSwgbWV0aG9kQ29uZmlnLCBleHByZXNzUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICAgIHRoaXMubG9nSHR0cCAmJiBjb25zb2xlLmdyb3VwRW5kKCk7XG4vKiAqL1xuLyogKi9cbiAgXG4gICAgfVxuICB9XG5cblxuXG4gIHB1YmxpYyB3cml0ZUFjdGl2ZVJvdXRlcygpIHtcbiAgICBpZih0aGlzLnJlbW90ZUhvc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dHM6IEVuZHBvaW50Q29udGV4dFtdID0gW3RoaXNdO1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgcHVibGljIGdldCBtaWRkbGV3YXJlcygpOiBNb2RlbHMuTWlkZGxld2FyZVR5cGVbXSB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBpbml0TWlkZGxld2FyZXMoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIHByaXZhdGUgaW5pdFNlcnZlcihcblxuICAgIHR5cGU6IE1vZGVscy5IdHRwLlJlc3QuSHR0cE1ldGhvZCxcbiAgICBtZXRob2RDb25maWc6IE1vZGVscy5NZXRob2RDb25maWcsXG4gICAgY2xhc3NDb25maWc6IE1vZGVscy5SdW50aW1lQ29udHJvbGxlckNvbmZpZyxcbiAgICBleHByZXNzUGF0aDogc3RyaW5nLFxuICAgIHRhcmdldDogRnVuY3Rpb24sXG5cbiAgKTogYW55IHtcblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG4gICAgY29uc3QgdXJsID0gdGhpcy51cmk7XG5cblxuICAgIGNvbnN0IGdldFJlc3VsdCA9IGFzeW5jIChyZXNvbHZlZFBhcmFtcywgcmVxLCByZXMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBNb2RlbHMuSHR0cC5SZXNwb25zZTxhbnk+ID1cbiAgICAgICAgbWV0aG9kQ29uZmlnLmRlc2NyaXB0b3IudmFsdWUuYXBwbHkoXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQ29udGV4dCBmb3IgbWV0aG9kIEBHRVQsQFBVVCBldGMuXG4gICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5nZXRJbnN0YW5jZUJ5KHRhcmdldCBhcyBhbnkpLFxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFBhcmFtcyBmb3IgbWV0am9kIEBHRVQsIEBQVVQgZXRjLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIHJlc29sdmVkUGFyYW1zLFxuICAgICAgICApO1xuICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGdldFJlc3BvbnNlVmFsdWUocmVzcG9uc2UsIHsgcmVxLCByZXMgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cblxuICAgIHVybC5wYXRobmFtZSA9IHVybC5wYXRobmFtZS5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgIGV4cHJlc3NQYXRoID0gdXJsLnBhdGhuYW1lLnN0YXJ0c1dpdGgoJy8nKVxuICAgICAgPyBgJHt1cmwucGF0aG5hbWV9JHtleHByZXNzUGF0aH1gXG4gICAgICA6IGV4cHJlc3NQYXRoO1xuICAgIGV4cHJlc3NQYXRoID0gZXhwcmVzc1BhdGgucmVwbGFjZSgvXFwvXFwvL2csICcvJyk7XG5cblxuXG4gICAgaWYgKEhlbHBlcnMuaXNFbGVjdHJvbikge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucmVtb3RlSG9zdCkge1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByb3V0ZVBhdGg6IGV4cHJlc3NQYXRoLFxuICAgICAgbWV0aG9kOiBtZXRob2RDb25maWcudHlwZSxcbiAgICB9O1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBjbGllbnQgY2FuIGJlIGJyb3dzZXIgb3Igbm9kZWpzICh3aGVuIHJlbW90ZSBob3N0KVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0Q2xpZW50KFxuXG4gICAgdGFyZ2V0OiBGdW5jdGlvbixcbiAgICB0eXBlOiBNb2RlbHMuSHR0cC5SZXN0Lkh0dHBNZXRob2QsXG4gICAgbWV0aG9kQ29uZmlnOiBNb2RlbHMuSHR0cC5SZXN0Lk1ldGhvZENvbmZpZyxcbiAgICBleHByZXNzUGF0aDogc3RyaW5nLFxuXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IHRoaXM7XG5cbiAgICB0aGlzLmxvZ0h0dHAgJiYgY29uc29sZS5sb2coYCR7dHlwZT8udG9VcHBlckNhc2UoKX0gJHtleHByZXNzUGF0aH0gYCk7XG5cblxuICAgIGxldCBzdG9yYWdlOiBhbnk7XG4gICAgaWYgKEhlbHBlcnMuaXNCcm93c2VyKSB7XG4gICAgICBzdG9yYWdlID0gd2luZG93O1xuICAgIH1cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cbiAgICBjb25zdCBvcmdNZXRob2RzID0gdGFyZ2V0LnByb3RvdHlwZVttZXRob2RDb25maWcubWV0aG9kTmFtZV07XG5cblxuXG4gICAgaWYgKEhlbHBlcnMuaXNFbGVjdHJvbikge1xuICAgICAgdGFyZ2V0LnByb3RvdHlwZVttZXRob2RDb25maWcubWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICBjb25zdCByZWNlaXZlZCA9IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICAgICAgY29uc3QgeyByZXF1ZXN0LCByZXNwb25zZSB9ID0gVGFvbkhlbHBlcnMud2Vic3FsTW9ja3MoaGVhZGVycyk7XG5cbiAgICAgICAgICBIZWxwZXJzLmlwY1JlbmRlcmVyLm9uY2UoXG4gICAgICAgICAgICBUYW9uSGVscGVycy5pcGNLZXlOYW1lUmVzcG9uc2UodGFyZ2V0LCBtZXRob2RDb25maWcsIGV4cHJlc3NQYXRoKSxcbiAgICAgICAgICAgIChldmVudCwgcmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGxldCByZXM6IGFueSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coeyByZXNwb25zZURhdGEgfSk7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHJlcztcbiAgICAgICAgICAgICAgICByZXMgPSBuZXcgTW9kZWxzTmcyUmVzdC5IdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgaXNBcnJheTogdm9pZCAwIGFzIGFueSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2RDb25maWcudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBgJHtjdHgudXJpLm9yaWdpbn0ke1xuICAgICAgICAgICAgICAgICAgICAgICcnIC8vIFRPRE8gZXhwcmVzcyBwYXRoXG4gICAgICAgICAgICAgICAgICAgIH0ke21ldGhvZENvbmZpZy5wYXRofSBgLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIEhlbHBlcnMuaXNCbG9iKGJvZHkpIHx8IF8uaXNTdHJpbmcoYm9keSlcbiAgICAgICAgICAgICAgICAgICAgPyBib2R5XG4gICAgICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICAgICAgICAgICAgICBSZXN0SGVhZGVycy5mcm9tKGhlYWRlcnMpLFxuICAgICAgICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgKCkgPT4gYm9keSxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBIZWxwZXJzLmlwY1JlbmRlcmVyLnNlbmQoXG4gICAgICAgICAgICBUYW9uSGVscGVycy5pcGNLZXlOYW1lUmVxdWVzdCh0YXJnZXQsIG1ldGhvZENvbmZpZywgZXhwcmVzc1BhdGgpLFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVjZWl2ZWRbJ29ic2VydmFibGUnXSA9IGZyb20ocmVjZWl2ZWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlY2VpdmVkLFxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuXG5cblxuICAgIHRhcmdldC5wcm90b3R5cGVbbWV0aG9kQ29uZmlnLm1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKHRoaXM6IHt9LCAuLi5hcmdzKSB7XG5cblxuXG5cblxuICAgICAgaWYgKCFzdG9yYWdlW1N5bWJvbHMub2xkLkVORFBPSU5UX01FVEFfQ09ORklHXSlcbiAgICAgICAgc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR10gPSB7fTtcbiAgICAgIGlmICghc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR11bY3R4LnVyaS5ocmVmXSlcbiAgICAgICAgc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR11bY3R4LnVyaS5ocmVmXSA9IHt9O1xuICAgICAgY29uc3QgZW5kcG9pbnRzID0gc3RvcmFnZVtTeW1ib2xzLm9sZC5FTkRQT0lOVF9NRVRBX0NPTkZJR107XG4gICAgICBsZXQgcmVzdDogTW9kZWxzTmcyUmVzdC5SZXNvdXJjZU1vZGVsPGFueSwgYW55PjtcbiAgICAgIGlmICghZW5kcG9pbnRzW2N0eC51cmkuaHJlZl1bZXhwcmVzc1BhdGhdKSB7XG4gICAgICAgIGxldCBoZWFkZXJzID0ge307XG4gICAgICAgIGlmIChtZXRob2RDb25maWcuY29udGVudFR5cGUgJiYgIW1ldGhvZENvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgICAgICByZXN0ID0gUmVzb3VyY2UuY3JlYXRlKFxuICAgICAgICAgICAgY3R4LnVyaS5ocmVmLFxuICAgICAgICAgICAgZXhwcmVzc1BhdGgsXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVIgYXMgYW55LFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSBhcyBhbnksXG4gICAgICAgICAgICBSZXN0SGVhZGVycy5mcm9tKHtcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgQWNjZXB0OiBtZXRob2RDb25maWcuY29udGVudFR5cGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZENvbmZpZy5jb250ZW50VHlwZSAmJiBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICAgICAgcmVzdCA9IFJlc291cmNlLmNyZWF0ZShcbiAgICAgICAgICAgIGN0eC51cmkuaHJlZixcbiAgICAgICAgICAgIGV4cHJlc3NQYXRoLFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSIGFzIGFueSxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLkNJUkNVUkFMX09CSkVDVFNfTUFQX0JPRFkgYXMgYW55LFxuICAgICAgICAgICAgUmVzdEhlYWRlcnMuZnJvbSh7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBtZXRob2RDb25maWcuY29udGVudFR5cGUsXG4gICAgICAgICAgICAgIEFjY2VwdDogbWV0aG9kQ29uZmlnLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICByZXNwb25zZXR5cGVheGlvczogbWV0aG9kQ29uZmlnLnJlc3BvbnNlVHlwZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW1ldGhvZENvbmZpZy5jb250ZW50VHlwZSAmJiBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICAgICAgcmVzdCA9IFJlc291cmNlLmNyZWF0ZShcbiAgICAgICAgICAgIGN0eC51cmkuaHJlZixcbiAgICAgICAgICAgIGV4cHJlc3NQYXRoLFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSIGFzIGFueSxcbiAgICAgICAgICAgIFN5bWJvbHMub2xkLkNJUkNVUkFMX09CSkVDVFNfTUFQX0JPRFkgYXMgYW55LFxuICAgICAgICAgICAgUmVzdEhlYWRlcnMuZnJvbSh7XG4gICAgICAgICAgICAgIHJlc3BvbnNldHlwZWF4aW9zOiBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0ID0gUmVzb3VyY2UuY3JlYXRlKFxuICAgICAgICAgICAgY3R4LnVyaS5ocmVmLFxuICAgICAgICAgICAgZXhwcmVzc1BhdGgsXG4gICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVIgYXMgYW55LFxuICAgICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSBhcyBhbnksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVuZHBvaW50c1tjdHgudXJpLmhyZWZdW2V4cHJlc3NQYXRoXSA9IHJlc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0ID0gZW5kcG9pbnRzW2N0eC51cmkuaHJlZl1bZXhwcmVzc1BhdGhdIGFzIGFueTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWV0aG9kID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgaXNXaXRoQm9keSA9IG1ldGhvZCA9PT0gJ3B1dCcgfHwgbWV0aG9kID09PSAncG9zdCc7XG4gICAgICBjb25zdCBwYXRoUHJhbXMgPSB7fTtcbiAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHt9O1xuICAgICAgbGV0IGJvZHlPYmplY3QgPSB7fTtcbiAgICAgIGFyZ3MuZm9yRWFjaCgocGFyYW0sIGkpID0+IHtcbiAgICAgICAgbGV0IGN1cnJlbnRQYXJhbTogTW9kZWxzLkh0dHAuUmVzdC5QYXJhbUNvbmZpZyA9IHZvaWQgMCBhcyBhbnk7XG5cbiAgICAgICAgZm9yIChsZXQgcHAgaW4gbWV0aG9kQ29uZmlnLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgICBsZXQgdiA9IG1ldGhvZENvbmZpZy5wYXJhbWV0ZXJzW3BwXTtcbiAgICAgICAgICBpZiAodi5pbmRleCA9PT0gaSkge1xuICAgICAgICAgICAgY3VycmVudFBhcmFtID0gdjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnUGF0aCcpIHtcbiAgICAgICAgICBwYXRoUHJhbXNbY3VycmVudFBhcmFtLnBhcmFtTmFtZV0gPSBwYXJhbTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtVHlwZSA9PT0gJ1F1ZXJ5Jykge1xuICAgICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gTWFwcGluZy5kZWNvZGUocGFyYW0sICFjdHguaXNQcm9kdWN0aW9uTW9kZSk7XG4gICAgICAgICAgICBpZiAobWFwcGluZykge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgIGAke1N5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUl9RVUVSWV9QQVJBTVN9JHtjdXJyZW50UGFyYW0ucGFyYW1OYW1lfSBgLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1hcHBpbmcpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlQYXJhbXNbY3VycmVudFBhcmFtLnBhcmFtTmFtZV0gPSBwYXJhbTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IE1hcHBpbmcuZGVjb2RlKHBhcmFtLCAhY3R4LmlzUHJvZHVjdGlvbk1vZGUpO1xuICAgICAgICAgICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICBTeW1ib2xzLm9sZC5NQVBQSU5HX0NPTkZJR19IRUFERVJfUVVFUllfUEFSQU1TLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1hcHBpbmcpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBfLmNsb25lRGVlcChwYXJhbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnSGVhZGVyJykge1xuICAgICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtTmFtZSA9PT0gU3ltYm9scy5vbGQuTURDX0tFWSkge1xuXG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmFtLnBhcmFtTmFtZSxcbiAgICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocGFyYW0pKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoY3VycmVudFBhcmFtLnBhcmFtTmFtZSwgcGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBoZWFkZXIgaW4gcGFyYW0pIHtcbiAgICAgICAgICAgICAgcmVzdC5oZWFkZXJzLnNldChoZWFkZXIsIHBhcmFtW2hlYWRlcl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtVHlwZSA9PT0gJ0Nvb2tpZScpIHtcbiAgICAgICAgICBSZXNvdXJjZS5Db29raWVzLndyaXRlKFxuICAgICAgICAgICAgY3VycmVudFBhcmFtLnBhcmFtTmFtZSxcbiAgICAgICAgICAgIHBhcmFtLFxuICAgICAgICAgICAgY3VycmVudFBhcmFtLmV4cGlyZUluU2Vjb25kcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW0ucGFyYW1UeXBlID09PSAnQm9keScpIHtcbiAgICAgICAgICBpZiAoY3VycmVudFBhcmFtLnBhcmFtTmFtZSkge1xuICAgICAgICAgICAgaWYgKENsYXNzSGVscGVycy5nZXROYW1lKGJvZHlPYmplY3QpID09PSAnRm9ybURhdGEnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW3Rhb24gLSBmcmFtZXdvcmtdIERvbiB1c2UgcGFyYW0gbmFtZXMgd2hlbiBwb3N0aW5nIC8gcHV0dGluZyBGb3JtRGF0YS5cbiAgICAgICAgICAgICAgVXNlIHRoaXM6XG5cbihAVGFvbi5IdHRwLlBhcmFtLkJvZHkoKSBmb3JtRGF0YTogRm9ybURhdGEpIC4uLlxuXG5cbmluc3RlYWRcblxuICAoQFRhb24uSHR0cC5QYXJhbS5Cb2R5KCcke2N1cnJlbnRQYXJhbS5wYXJhbU5hbWV9JykgZm9ybURhdGE6IEZvcm1EYXRhKSAuLi5cblxuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gTWFwcGluZy5kZWNvZGUocGFyYW0sICFjdHguaXNQcm9kdWN0aW9uTW9kZSk7XG4gICAgICAgICAgICBpZiAobWFwcGluZykge1xuICAgICAgICAgICAgICByZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgIGAke1N5bWJvbHMub2xkLk1BUFBJTkdfQ09ORklHX0hFQURFUl9CT0RZX1BBUkFNU30ke2N1cnJlbnRQYXJhbS5wYXJhbU5hbWV9IGAsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFwcGluZyksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5T2JqZWN0W2N1cnJlbnRQYXJhbS5wYXJhbU5hbWVdID0gcGFyYW07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSBNYXBwaW5nLmRlY29kZShwYXJhbSwgIWN0eC5pc1Byb2R1Y3Rpb25Nb2RlKTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgU3ltYm9scy5vbGQuTUFQUElOR19DT05GSUdfSEVBREVSX0JPRFlfUEFSQU1TLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1hcHBpbmcpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keU9iamVjdCA9IHBhcmFtO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGJvZHlPYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgICAgIENsYXNzSGVscGVycy5nZXROYW1lKGJvZHlPYmplY3QpICE9PSAnRm9ybURhdGEnXG4gICAgICApIHtcbiAgICAgICAgbGV0IGNpcmN1cmFsRnJvbUl0ZW0gPSBbXTtcbiAgICAgICAgYm9keU9iamVjdCA9IEpTT04xMC5wYXJzZShcbiAgICAgICAgICBKU09OMTAuc3RyaW5naWZ5KGJvZHlPYmplY3QsIHZvaWQgMCwgdm9pZCAwLCBjaXJjcyA9PiB7XG4gICAgICAgICAgICBjaXJjdXJhbEZyb21JdGVtID0gY2lyY3M7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHJlc3QuaGVhZGVycy5zZXQoXG4gICAgICAgICAgU3ltYm9scy5vbGQuQ0lSQ1VSQUxfT0JKRUNUU19NQVBfQk9EWSxcbiAgICAgICAgICBKU09OMTAuc3RyaW5naWZ5KGNpcmN1cmFsRnJvbUl0ZW0pLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHF1ZXJ5UGFyYW1zID09PSAnb2JqZWN0Jykge1xuICAgICAgICBsZXQgY2lyY3VyYWxGcm9tUXVlcnlQYXJhbXMgPSBbXTtcbiAgICAgICAgcXVlcnlQYXJhbXMgPSBKU09OMTAucGFyc2UoXG4gICAgICAgICAgSlNPTjEwLnN0cmluZ2lmeShxdWVyeVBhcmFtcywgdm9pZCAwLCB2b2lkIDAsIGNpcmNzID0+IHtcbiAgICAgICAgICAgIGNpcmN1cmFsRnJvbVF1ZXJ5UGFyYW1zID0gY2lyY3M7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVzdC5oZWFkZXJzLnNldChcbiAgICAgICAgICBTeW1ib2xzLm9sZC5DSVJDVVJBTF9PQkpFQ1RTX01BUF9RVUVSWV9QQVJBTSxcbiAgICAgICAgICBKU09OMTAuc3RyaW5naWZ5KGNpcmN1cmFsRnJvbVF1ZXJ5UGFyYW1zKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuXG4gICAgICBjb25zdCBodHRwUmVzdWx0T2JqID0ge1xuICAgICAgICByZWNlaXZlZDogaXNXaXRoQm9keVxuICAgICAgICAgID8gcmVzdC5tb2RlbChwYXRoUHJhbXMpW21ldGhvZF0oYm9keU9iamVjdCwgW3F1ZXJ5UGFyYW1zXSlcbiAgICAgICAgICA6IHJlc3QubW9kZWwocGF0aFByYW1zKVttZXRob2RdKFtxdWVyeVBhcmFtc10pLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBodHRwUmVzdWx0T2JqO1xuICAgIH07XG5cbiAgfVxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10YW9uIGxpYi9lbmRwb2ludC1jb250ZXh0LnRzIl19