@lowcodeunit/applications-flow-common 1.33.142-angular-13 → 1.33.146-lets-get-social-ish

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 (267) hide show
  1. package/bundles/lowcodeunit-applications-flow-common.umd.js +6921 -0
  2. package/bundles/lowcodeunit-applications-flow-common.umd.js.map +1 -0
  3. package/bundles/lowcodeunit-applications-flow-common.umd.min.js +16 -0
  4. package/bundles/lowcodeunit-applications-flow-common.umd.min.js.map +1 -0
  5. package/esm2015/lcu.api.js +27 -0
  6. package/esm2015/lib/applications-flow.module.js +218 -0
  7. package/esm2015/lib/controls/build-pipeline-form/build-pipeline-form.component.js +213 -0
  8. package/esm2015/lib/controls/devops-source-control-form/devops-source-control-form.component.js +412 -0
  9. package/esm2015/lib/controls/edit-application-form/edit-application-form.component.js +60 -0
  10. package/esm2015/lib/controls/processor-details-form/processor-details-form.component.js +330 -0
  11. package/esm2015/lib/controls/security-toggle/security-toggle.component.js +51 -0
  12. package/esm2015/lib/controls/source-control-form/source-control-form.component.js +61 -0
  13. package/esm2015/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.js +25 -0
  14. package/esm2015/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.js +31 -0
  15. package/esm2015/lib/dialogs/edit-application-dialog/edit-application-dialog.component.js +29 -0
  16. package/esm2015/lib/dialogs/source-control-dialog/source-control-dialog.component.js +25 -0
  17. package/esm2015/lib/elements/analytics-card/analytics-card.component.js +21 -0
  18. package/esm2015/lib/elements/base-form/base-form.component.js +61 -0
  19. package/esm2015/lib/elements/breadcrumb/breadcrumb.component.js +115 -0
  20. package/esm2015/lib/elements/card-carousel/card-carousel.component.js +67 -0
  21. package/esm2015/lib/elements/dynamic-tabs/dynamic-tabs.component.js +69 -0
  22. package/esm2015/lib/elements/feed-card-sm/feed-card-sm.component.js +31 -0
  23. package/esm2015/lib/elements/form-card/form-card.component.js +22 -0
  24. package/esm2015/lib/elements/gh-control/gh-control.component.js +72 -0
  25. package/esm2015/lib/elements/main-feed-card/main-feed-card.component.js +24 -0
  26. package/esm2015/lib/elements/project-info-card/project-info-card.component.js +39 -0
  27. package/esm2015/lib/elements/projects/controls/builds/builds.component.js +26 -0
  28. package/esm2015/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.js +145 -0
  29. package/esm2015/lib/elements/projects/controls/forms/source-control/source-control.component.js +262 -0
  30. package/esm2015/lib/elements/projects/controls/git-auth/git-auth.component.js +25 -0
  31. package/esm2015/lib/elements/projects/controls/header/header.component.js +75 -0
  32. package/esm2015/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.js +102 -0
  33. package/esm2015/lib/elements/projects/controls/project-items/project-items.component.js +49 -0
  34. package/esm2015/lib/elements/projects/controls/project-tabs/project-tabs.component.js +91 -0
  35. package/esm2015/lib/elements/projects/controls/recent-activities/recent-activities.component.js +15 -0
  36. package/esm2015/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.js +590 -0
  37. package/esm2015/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.js +62 -0
  38. package/esm2015/lib/elements/projects/controls/tabs/devops/devops.component.js +202 -0
  39. package/esm2015/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.js +178 -0
  40. package/esm2015/lib/elements/projects/controls/tabs/domains/domains.component.js +133 -0
  41. package/esm2015/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.js +86 -0
  42. package/esm2015/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.js +129 -0
  43. package/esm2015/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.js +113 -0
  44. package/esm2015/lib/elements/projects/controls/tabs/general/general.component.js +46 -0
  45. package/esm2015/lib/elements/projects/projects.component.js +99 -0
  46. package/esm2015/lib/elements/slotted-card/slotted-card.component.js +30 -0
  47. package/esm2015/lib/elements/three-column/three-column.component.js +32 -0
  48. package/esm2015/lib/elements/two-column-header/two-column-header.component.js +15 -0
  49. package/esm2015/lib/models/actions.model.js +3 -0
  50. package/esm2015/lib/models/base-form-config.model.js +6 -0
  51. package/esm2015/lib/models/card-form-config.model.js +6 -0
  52. package/esm2015/lib/models/dev-settings-preset.model.js +3 -0
  53. package/esm2015/lib/models/domain.model.js +3 -0
  54. package/esm2015/lib/models/dynamic-tabs.model.js +6 -0
  55. package/esm2015/lib/models/form-actions.model.js +3 -0
  56. package/esm2015/lib/models/form.model.js +6 -0
  57. package/esm2015/lib/models/form.values.model.js +11 -0
  58. package/esm2015/lib/models/project-actions.model.js +6 -0
  59. package/{esm2020/lib/services/applications-flow.service.mjs → esm2015/lib/services/applications-flow.service.js} +13 -9
  60. package/esm2015/lib/services/eac.service.js +218 -0
  61. package/esm2015/lib/services/forms.service.js +131 -0
  62. package/esm2015/lib/services/npm.service.js +79 -0
  63. package/esm2015/lib/services/project.service.js +318 -0
  64. package/esm2015/lib/state/applications-flow-state.context.js +37 -0
  65. package/esm2015/lib/state/applications-flow.state.js +72 -0
  66. package/esm2015/lowcodeunit-applications-flow-common.js +39 -0
  67. package/fesm2015/lowcodeunit-applications-flow-common.js +5336 -0
  68. package/fesm2015/lowcodeunit-applications-flow-common.js.map +1 -0
  69. package/lcu.api.d.ts +2 -40
  70. package/lcu.api.d.ts.map +1 -0
  71. package/lib/applications-flow.module.d.ts +1 -53
  72. package/lib/applications-flow.module.d.ts.map +1 -0
  73. package/lib/controls/build-pipeline-form/build-pipeline-form.component.d.ts +1 -3
  74. package/lib/controls/build-pipeline-form/build-pipeline-form.component.d.ts.map +1 -0
  75. package/lib/controls/devops-source-control-form/devops-source-control-form.component.d.ts +1 -3
  76. package/lib/controls/devops-source-control-form/devops-source-control-form.component.d.ts.map +1 -0
  77. package/lib/controls/edit-application-form/edit-application-form.component.d.ts +1 -3
  78. package/lib/controls/edit-application-form/edit-application-form.component.d.ts.map +1 -0
  79. package/lib/controls/processor-details-form/processor-details-form.component.d.ts +4 -5
  80. package/lib/controls/processor-details-form/processor-details-form.component.d.ts.map +1 -0
  81. package/lib/controls/security-toggle/security-toggle.component.d.ts +2 -3
  82. package/lib/controls/security-toggle/security-toggle.component.d.ts.map +1 -0
  83. package/lib/controls/source-control-form/source-control-form.component.d.ts +1 -3
  84. package/lib/controls/source-control-form/source-control-form.component.d.ts.map +1 -0
  85. package/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.d.ts +1 -3
  86. package/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.d.ts.map +1 -0
  87. package/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.d.ts +1 -3
  88. package/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.d.ts.map +1 -0
  89. package/lib/dialogs/edit-application-dialog/edit-application-dialog.component.d.ts +2 -4
  90. package/lib/dialogs/edit-application-dialog/edit-application-dialog.component.d.ts.map +1 -0
  91. package/lib/dialogs/source-control-dialog/source-control-dialog.component.d.ts +1 -3
  92. package/lib/dialogs/source-control-dialog/source-control-dialog.component.d.ts.map +1 -0
  93. package/lib/elements/analytics-card/analytics-card.component.d.ts +1 -3
  94. package/lib/elements/analytics-card/analytics-card.component.d.ts.map +1 -0
  95. package/lib/elements/base-form/base-form.component.d.ts +1 -3
  96. package/lib/elements/base-form/base-form.component.d.ts.map +1 -0
  97. package/lib/elements/breadcrumb/breadcrumb.component.d.ts +1 -3
  98. package/lib/elements/breadcrumb/breadcrumb.component.d.ts.map +1 -0
  99. package/lib/elements/card-carousel/card-carousel.component.d.ts +1 -3
  100. package/lib/elements/card-carousel/card-carousel.component.d.ts.map +1 -0
  101. package/lib/elements/dynamic-tabs/dynamic-tabs.component.d.ts +1 -3
  102. package/lib/elements/dynamic-tabs/dynamic-tabs.component.d.ts.map +1 -0
  103. package/lib/elements/feed-card-sm/feed-card-sm.component.d.ts +1 -3
  104. package/lib/elements/feed-card-sm/feed-card-sm.component.d.ts.map +1 -0
  105. package/lib/elements/form-card/form-card.component.d.ts +1 -3
  106. package/lib/elements/form-card/form-card.component.d.ts.map +1 -0
  107. package/lib/elements/gh-control/gh-control.component.d.ts +1 -3
  108. package/lib/elements/gh-control/gh-control.component.d.ts.map +1 -0
  109. package/lib/elements/main-feed-card/main-feed-card.component.d.ts +1 -3
  110. package/lib/elements/main-feed-card/main-feed-card.component.d.ts.map +1 -0
  111. package/lib/elements/project-info-card/project-info-card.component.d.ts +4 -3
  112. package/lib/elements/project-info-card/project-info-card.component.d.ts.map +1 -0
  113. package/lib/elements/projects/controls/builds/builds.component.d.ts +1 -3
  114. package/lib/elements/projects/controls/builds/builds.component.d.ts.map +1 -0
  115. package/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.d.ts +1 -3
  116. package/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.d.ts.map +1 -0
  117. package/lib/elements/projects/controls/forms/source-control/source-control.component.d.ts +1 -3
  118. package/lib/elements/projects/controls/forms/source-control/source-control.component.d.ts.map +1 -0
  119. package/lib/elements/projects/controls/git-auth/git-auth.component.d.ts +1 -3
  120. package/lib/elements/projects/controls/git-auth/git-auth.component.d.ts.map +1 -0
  121. package/lib/elements/projects/controls/header/header.component.d.ts +1 -3
  122. package/lib/elements/projects/controls/header/header.component.d.ts.map +1 -0
  123. package/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.d.ts +1 -3
  124. package/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.d.ts.map +1 -0
  125. package/lib/elements/projects/controls/project-items/project-items.component.d.ts +1 -3
  126. package/lib/elements/projects/controls/project-items/project-items.component.d.ts.map +1 -0
  127. package/lib/elements/projects/controls/project-tabs/project-tabs.component.d.ts +1 -3
  128. package/lib/elements/projects/controls/project-tabs/project-tabs.component.d.ts.map +1 -0
  129. package/lib/elements/projects/controls/recent-activities/recent-activities.component.d.ts +1 -3
  130. package/lib/elements/projects/controls/recent-activities/recent-activities.component.d.ts.map +1 -0
  131. package/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.d.ts +1 -3
  132. package/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.d.ts.map +1 -0
  133. package/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.d.ts +1 -3
  134. package/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.d.ts.map +1 -0
  135. package/lib/elements/projects/controls/tabs/devops/devops.component.d.ts +1 -3
  136. package/lib/elements/projects/controls/tabs/devops/devops.component.d.ts.map +1 -0
  137. package/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.d.ts +1 -3
  138. package/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.d.ts.map +1 -0
  139. package/lib/elements/projects/controls/tabs/domains/domains.component.d.ts +1 -3
  140. package/lib/elements/projects/controls/tabs/domains/domains.component.d.ts.map +1 -0
  141. package/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.d.ts +1 -3
  142. package/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.d.ts.map +1 -0
  143. package/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.d.ts +1 -3
  144. package/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.d.ts.map +1 -0
  145. package/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.d.ts +1 -3
  146. package/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.d.ts.map +1 -0
  147. package/lib/elements/projects/controls/tabs/general/general.component.d.ts +1 -3
  148. package/lib/elements/projects/controls/tabs/general/general.component.d.ts.map +1 -0
  149. package/lib/elements/projects/projects.component.d.ts +1 -3
  150. package/lib/elements/projects/projects.component.d.ts.map +1 -0
  151. package/lib/elements/slotted-card/slotted-card.component.d.ts +2 -3
  152. package/lib/elements/slotted-card/slotted-card.component.d.ts.map +1 -0
  153. package/lib/elements/three-column/three-column.component.d.ts +1 -3
  154. package/lib/elements/three-column/three-column.component.d.ts.map +1 -0
  155. package/lib/elements/two-column-header/two-column-header.component.d.ts +1 -3
  156. package/lib/elements/two-column-header/two-column-header.component.d.ts.map +1 -0
  157. package/lib/models/actions.model.d.ts +1 -0
  158. package/lib/models/actions.model.d.ts.map +1 -0
  159. package/lib/models/base-form-config.model.d.ts +1 -0
  160. package/lib/models/base-form-config.model.d.ts.map +1 -0
  161. package/lib/models/card-form-config.model.d.ts +1 -0
  162. package/lib/models/card-form-config.model.d.ts.map +1 -0
  163. package/lib/models/dev-settings-preset.model.d.ts +1 -0
  164. package/lib/models/dev-settings-preset.model.d.ts.map +1 -0
  165. package/lib/models/domain.model.d.ts +1 -0
  166. package/lib/models/domain.model.d.ts.map +1 -0
  167. package/lib/models/dynamic-tabs.model.d.ts +1 -0
  168. package/lib/models/dynamic-tabs.model.d.ts.map +1 -0
  169. package/lib/models/form-actions.model.d.ts +1 -0
  170. package/lib/models/form-actions.model.d.ts.map +1 -0
  171. package/lib/models/form.model.d.ts +1 -0
  172. package/lib/models/form.model.d.ts.map +1 -0
  173. package/lib/models/form.values.model.d.ts +1 -0
  174. package/lib/models/form.values.model.d.ts.map +1 -0
  175. package/lib/models/project-actions.model.d.ts +1 -0
  176. package/lib/models/project-actions.model.d.ts.map +1 -0
  177. package/lib/services/applications-flow.service.d.ts +1 -3
  178. package/lib/services/applications-flow.service.d.ts.map +1 -0
  179. package/lib/services/eac.service.d.ts +1 -3
  180. package/lib/services/eac.service.d.ts.map +1 -0
  181. package/lib/services/forms.service.d.ts +1 -3
  182. package/lib/services/forms.service.d.ts.map +1 -0
  183. package/lib/services/npm.service.d.ts +1 -3
  184. package/lib/services/npm.service.d.ts.map +1 -0
  185. package/lib/services/project.service.d.ts +1 -3
  186. package/lib/services/project.service.d.ts.map +1 -0
  187. package/lib/state/applications-flow-state.context.d.ts +1 -3
  188. package/lib/state/applications-flow-state.context.d.ts.map +1 -0
  189. package/lib/state/applications-flow.state.d.ts +1 -0
  190. package/lib/state/applications-flow.state.d.ts.map +1 -0
  191. package/lowcodeunit-applications-flow-common.d.ts +35 -1
  192. package/lowcodeunit-applications-flow-common.d.ts.map +1 -0
  193. package/lowcodeunit-applications-flow-common.metadata.json +1 -0
  194. package/package.json +12 -20
  195. package/esm2020/lcu.api.mjs +0 -66
  196. package/esm2020/lib/applications-flow.module.mjs +0 -330
  197. package/esm2020/lib/controls/build-pipeline-form/build-pipeline-form.component.mjs +0 -245
  198. package/esm2020/lib/controls/devops-source-control-form/devops-source-control-form.component.mjs +0 -446
  199. package/esm2020/lib/controls/edit-application-form/edit-application-form.component.mjs +0 -67
  200. package/esm2020/lib/controls/processor-details-form/processor-details-form.component.mjs +0 -308
  201. package/esm2020/lib/controls/security-toggle/security-toggle.component.mjs +0 -54
  202. package/esm2020/lib/controls/source-control-form/source-control-form.component.mjs +0 -69
  203. package/esm2020/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.mjs +0 -29
  204. package/esm2020/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.mjs +0 -35
  205. package/esm2020/lib/dialogs/edit-application-dialog/edit-application-dialog.component.mjs +0 -33
  206. package/esm2020/lib/dialogs/source-control-dialog/source-control-dialog.component.mjs +0 -29
  207. package/esm2020/lib/elements/analytics-card/analytics-card.component.mjs +0 -28
  208. package/esm2020/lib/elements/base-form/base-form.component.mjs +0 -57
  209. package/esm2020/lib/elements/breadcrumb/breadcrumb.component.mjs +0 -117
  210. package/esm2020/lib/elements/card-carousel/card-carousel.component.mjs +0 -70
  211. package/esm2020/lib/elements/column-info-card/column-info-card.component.mjs +0 -50
  212. package/esm2020/lib/elements/dynamic-tabs/dynamic-tabs.component.mjs +0 -74
  213. package/esm2020/lib/elements/feed-card-sm/feed-card-sm.component.mjs +0 -40
  214. package/esm2020/lib/elements/flow-tool/flow-tool.component.mjs +0 -75
  215. package/esm2020/lib/elements/form-card/form-card.component.mjs +0 -33
  216. package/esm2020/lib/elements/gh-control/gh-control.component.mjs +0 -78
  217. package/esm2020/lib/elements/main-feed-card/main-feed-card.component.mjs +0 -34
  218. package/esm2020/lib/elements/project-info-card/project-info-card.component.mjs +0 -46
  219. package/esm2020/lib/elements/projects/controls/builds/builds.component.mjs +0 -32
  220. package/esm2020/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.mjs +0 -145
  221. package/esm2020/lib/elements/projects/controls/forms/source-control/source-control.component.mjs +0 -285
  222. package/esm2020/lib/elements/projects/controls/git-auth/git-auth.component.mjs +0 -26
  223. package/esm2020/lib/elements/projects/controls/header/header.component.mjs +0 -83
  224. package/esm2020/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.mjs +0 -118
  225. package/esm2020/lib/elements/projects/controls/project-items/project-items.component.mjs +0 -54
  226. package/esm2020/lib/elements/projects/controls/project-tabs/project-tabs.component.mjs +0 -103
  227. package/esm2020/lib/elements/projects/controls/recent-activities/recent-activities.component.mjs +0 -14
  228. package/esm2020/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.mjs +0 -561
  229. package/esm2020/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.mjs +0 -72
  230. package/esm2020/lib/elements/projects/controls/tabs/devops/devops.component.mjs +0 -242
  231. package/esm2020/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.mjs +0 -179
  232. package/esm2020/lib/elements/projects/controls/tabs/domains/domains.component.mjs +0 -137
  233. package/esm2020/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.mjs +0 -90
  234. package/esm2020/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.mjs +0 -142
  235. package/esm2020/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.mjs +0 -124
  236. package/esm2020/lib/elements/projects/controls/tabs/general/general.component.mjs +0 -40
  237. package/esm2020/lib/elements/projects/projects.component.mjs +0 -98
  238. package/esm2020/lib/elements/slotted-card/slotted-card.component.mjs +0 -45
  239. package/esm2020/lib/elements/three-column/three-column.component.mjs +0 -30
  240. package/esm2020/lib/elements/two-column-header/two-column-header.component.mjs +0 -15
  241. package/esm2020/lib/models/actions.model.mjs +0 -3
  242. package/esm2020/lib/models/base-form-config.model.mjs +0 -6
  243. package/esm2020/lib/models/card-form-config.model.mjs +0 -6
  244. package/esm2020/lib/models/card-slot.model.mjs +0 -3
  245. package/esm2020/lib/models/dev-settings-preset.model.mjs +0 -3
  246. package/esm2020/lib/models/domain.model.mjs +0 -3
  247. package/esm2020/lib/models/dynamic-tabs.model.mjs +0 -6
  248. package/esm2020/lib/models/form-actions.model.mjs +0 -3
  249. package/esm2020/lib/models/form.model.mjs +0 -6
  250. package/esm2020/lib/models/form.values.model.mjs +0 -11
  251. package/esm2020/lib/models/project-actions.model.mjs +0 -6
  252. package/esm2020/lib/models/slot-action.model.mjs +0 -3
  253. package/esm2020/lib/services/eac.service.mjs +0 -173
  254. package/esm2020/lib/services/forms.service.mjs +0 -132
  255. package/esm2020/lib/services/npm.service.mjs +0 -77
  256. package/esm2020/lib/services/project.service.mjs +0 -303
  257. package/esm2020/lib/state/applications-flow-state.context.mjs +0 -36
  258. package/esm2020/lib/state/applications-flow.state.mjs +0 -72
  259. package/esm2020/lowcodeunit-applications-flow-common.mjs +0 -5
  260. package/fesm2015/lowcodeunit-applications-flow-common.mjs +0 -5579
  261. package/fesm2015/lowcodeunit-applications-flow-common.mjs.map +0 -1
  262. package/fesm2020/lowcodeunit-applications-flow-common.mjs +0 -5459
  263. package/fesm2020/lowcodeunit-applications-flow-common.mjs.map +0 -1
  264. package/lib/elements/column-info-card/column-info-card.component.d.ts +0 -20
  265. package/lib/elements/flow-tool/flow-tool.component.d.ts +0 -28
  266. package/lib/models/card-slot.model.d.ts +0 -7
  267. package/lib/models/slot-action.model.d.ts +0 -8
@@ -1,245 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { Validators } from '@angular/forms';
3
- import { Guid } from '@lcu/common';
4
- import { ProjectHostingDetails } from '../../state/applications-flow.state';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../services/eac.service";
7
- import * as i2 from "@angular/forms";
8
- import * as i3 from "../../services/applications-flow.service";
9
- import * as i4 from "@angular/material/card";
10
- import * as i5 from "@angular/material/form-field";
11
- import * as i6 from "@angular/material/select";
12
- import * as i7 from "@angular/material/core";
13
- import * as i8 from "@angular/material/icon";
14
- import * as i9 from "@lowcodeunit/app-host-common";
15
- import * as i10 from "@angular/material/button";
16
- import * as i11 from "@angular/common";
17
- import * as i12 from "@angular/material/input";
18
- import * as i13 from "@angular/flex-layout/flex";
19
- export class BuildPipelineFormComponent {
20
- constructor(eacSvc, formBuilder, appsFlowSvc) {
21
- this.eacSvc = eacSvc;
22
- this.formBuilder = formBuilder;
23
- this.appsFlowSvc = appsFlowSvc;
24
- this.HostingDetails = new ProjectHostingDetails();
25
- }
26
- get Artifact() {
27
- // console.log("ARTIFACT: ", this.Environment?.Artifacts[this.ArtifactLookup]);
28
- return this.Environment?.Artifacts && this.ArtifactLookup
29
- ? this.Environment?.Artifacts[this.ArtifactLookup] || {}
30
- : {};
31
- }
32
- get ArtifactLookup() {
33
- const artLookup = this.DevOpsAction?.ArtifactLookups
34
- ? this.DevOpsAction?.ArtifactLookups[0]
35
- : null;
36
- return artLookup;
37
- }
38
- get BuildPipelineFormControl() {
39
- return this.BuildPipelineFormGroup?.get('buildPipeline');
40
- }
41
- get DevOpsAction() {
42
- return this.Environment.DevOpsActions && this.DevOpsActionLookup
43
- ? this.Environment.DevOpsActions[this.DevOpsActionLookup] || {}
44
- : {};
45
- }
46
- get DevOpsActions() {
47
- return this.Environment.DevOpsActions || {};
48
- }
49
- get DevOpsActionNameFormControl() {
50
- return this.BuildPipelineFormGroup.get('devOpsActionName');
51
- }
52
- get NPMTokenFormControl() {
53
- return this.BuildPipelineFormGroup.get('npmToken');
54
- }
55
- // (ho) => ho.Lookup === this.BuildPipeline
56
- get SelectedHostingOption() {
57
- return this.HostingDetails?.HostingOptions?.find((ho) => ho.Lookup === this.BuildPipeline);
58
- }
59
- get SelectedHostingOptionInputControlValues() {
60
- return this.SelectedHostingOption?.Inputs?.reduce((prev, cur) => {
61
- const res = {
62
- ...prev,
63
- };
64
- res[cur.Lookup] = this.BuildPipelineFormGroup.controls[cur.Lookup].value;
65
- return res;
66
- }, {});
67
- }
68
- get SourceControlLookups() {
69
- return Object.keys(this.SourceControls || {});
70
- }
71
- get SourceControls() {
72
- return this.Environment.Sources || {};
73
- }
74
- ngOnInit() {
75
- // console.log('BuildPipeline = ', this.BuildPipeline)
76
- // this.BuildPipelineFormGroup = this.formBuilder.group({});
77
- // if (this.BuildPipelineFormGroup != null) {
78
- // this.BuildPipelineFormGroup.removeControl('hostingDetails');
79
- // }
80
- // this.BuildPipelineFormGroup.addControl(
81
- // 'hostingDetails',
82
- this.BuildPipelineFormGroup = this.formBuilder.group({
83
- buildPipeline: [this.BuildPipeline, [Validators.required]],
84
- });
85
- // );
86
- this.loadProjectHostingDetails();
87
- // this.setupControlsForForm();
88
- }
89
- //API METHODS
90
- BuildPipelineChanged() {
91
- //for some reason this value is coming back undefined
92
- // console.log("build pipeline value: ", this.BuildPipelineFormControl?.value)
93
- this.BuildPipeline = this.BuildPipelineFormControl?.value;
94
- this.setupControlsForForm();
95
- }
96
- SubmitBuildPipeline() {
97
- // console.log("submitting build pipeline: ", this.BuildPipelineFormGroup.value);
98
- this.SaveEnvironment();
99
- }
100
- SaveEnvironment() {
101
- const saveEnvReq = {
102
- Environment: {
103
- ...this.Environment,
104
- Artifacts: this.Environment.Artifacts || {},
105
- DevOpsActions: this.Environment.DevOpsActions || {},
106
- Secrets: this.Environment.Secrets || {},
107
- Sources: this.Environment.Sources || {},
108
- },
109
- EnvironmentLookup: this.EnvironmentLookup,
110
- EnterpriseDataTokens: {},
111
- };
112
- let artifactLookup;
113
- let artifact = {
114
- ...this.Artifact,
115
- ...this.SelectedHostingOptionInputControlValues,
116
- };
117
- if (!this.ArtifactLookup) {
118
- artifactLookup = Guid.CreateRaw();
119
- artifact = {
120
- ...artifact,
121
- Type: this.SelectedHostingOption
122
- .ArtifactType,
123
- Name: this.SelectedHostingOption.Name,
124
- NPMRegistry: 'https://registry.npmjs.org/',
125
- };
126
- }
127
- else {
128
- artifactLookup = this.ArtifactLookup;
129
- }
130
- saveEnvReq.Environment.Artifacts[artifactLookup] = artifact;
131
- let devOpsActionLookup;
132
- if (!this.DevOpsActionLookup) {
133
- devOpsActionLookup = Guid.CreateRaw();
134
- const doa = {
135
- ...this.DevOpsAction,
136
- ArtifactLookups: [artifactLookup],
137
- Name: this.DevOpsActionNameFormControl.value,
138
- Path: this.SelectedHostingOption.Path,
139
- Templates: this.SelectedHostingOption.Templates,
140
- };
141
- if (this.NPMTokenFormControl?.value) {
142
- const secretLookup = 'npm-access-token';
143
- doa.SecretLookups = [secretLookup];
144
- saveEnvReq.Environment.Secrets[secretLookup] = {
145
- Name: 'NPM Access Token',
146
- DataTokenLookup: secretLookup,
147
- KnownAs: 'NPM_TOKEN',
148
- };
149
- saveEnvReq.EnterpriseDataTokens[secretLookup] = {
150
- Name: saveEnvReq.Environment.Secrets[secretLookup].Name,
151
- Description: saveEnvReq.Environment.Secrets[secretLookup].Name,
152
- Value: this.NPMTokenFormControl.value,
153
- };
154
- }
155
- saveEnvReq.Environment.DevOpsActions[devOpsActionLookup] = doa;
156
- }
157
- else {
158
- devOpsActionLookup = this.DevOpsActionLookup;
159
- const doa = {
160
- ...this.DevOpsAction,
161
- Name: this.DevOpsActionNameFormControl.value,
162
- };
163
- saveEnvReq.Environment.DevOpsActions[devOpsActionLookup] = doa;
164
- }
165
- this.eacSvc.SaveEnvironmentAsCode(saveEnvReq);
166
- }
167
- // Helpers
168
- setupControlsForForm() {
169
- // this.BuildPipeline =
170
- // this.BuildPipeline || this.HostingDetails?.HostingOptions
171
- // ? this.HostingDetails?.HostingOptions[0]?.Lookup
172
- // : '';
173
- // console.log("hosting details: ", this.HostingDetails)
174
- for (const ctrlName in this.BuildPipelineFormGroup.controls) {
175
- //devOpsAction doesn't exist
176
- //removes hosting details
177
- if (ctrlName !== 'buildPipeline' && ctrlName !== 'devOpsAction') {
178
- // console.log("removing control: ", ctrlName)
179
- this.BuildPipelineFormGroup.removeControl(ctrlName);
180
- }
181
- }
182
- this.BuildPipelineFormGroup.addControl('devOpsActionName', this.formBuilder.control(this.DevOpsAction?.Name || this.SelectedHostingOption?.Name || '', [Validators.required]));
183
- // console.log("selected hosting options: ", this.SelectedHostingOption.Inputs);
184
- this.SelectedHostingOption?.Inputs?.forEach((input) => {
185
- const validators = input.Required ? [Validators.required] : [];
186
- this.BuildPipelineFormGroup.addControl(input.Lookup, this.formBuilder.control(this.Artifact[input.Lookup] || input.DefaultValue || '', validators));
187
- // if (this.Disabled) {
188
- // this.FormGroup.controls[input.Lookup].disable();
189
- // }
190
- });
191
- if (this.BuildPipelineFormControl?.value === 'npm-release') {
192
- if (!this.BuildPipelineFormGroup.controls.npmToken) {
193
- this.BuildPipelineFormGroup.addControl('npmToken', this.formBuilder.control('', this.Disabled ? [] : [Validators.required]));
194
- if (this.Disabled) {
195
- this.BuildPipelineFormGroup.controls.npmToken.disable();
196
- }
197
- }
198
- }
199
- else if (this.BuildPipelineFormControl?.value === 'github-artifacts-release') {
200
- if (this.BuildPipelineFormGroup.controls.npmToken) {
201
- this.BuildPipelineFormGroup.removeControl('npmToken');
202
- }
203
- }
204
- }
205
- loadProjectHostingDetails() {
206
- this.HostingDetails.Loading = true;
207
- this.appsFlowSvc
208
- .NewLoadProjectHostingDetails()
209
- .subscribe((response) => {
210
- this.HostingDetails = response.Model;
211
- // console.log("response: ", response);
212
- this.HostingDetails.Loading = false;
213
- const hostOption = this.HostingDetails?.HostingOptions?.find((ho) => ho.Path === this.DevOpsAction.Path);
214
- this.BuildPipeline = hostOption.Lookup;
215
- // console.log("Build Pipeline HERE= ", this.BuildPipeline);
216
- this.setupControlsForForm();
217
- }, (err) => {
218
- console.log("ERR: ", err);
219
- this.HostingDetails.Loading = false;
220
- });
221
- console.log("HOSTING DETAILS: ", this.HostingDetails);
222
- }
223
- }
224
- BuildPipelineFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BuildPipelineFormComponent, deps: [{ token: i1.EaCService }, { token: i2.FormBuilder }, { token: i3.ApplicationsFlowService }], target: i0.ɵɵFactoryTarget.Component });
225
- BuildPipelineFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BuildPipelineFormComponent, selector: "lcu-build-pipeline-form", inputs: { DevOpsActionLookup: ["devops-action-lookup", "DevOpsActionLookup"], Disabled: ["disabled", "Disabled"], Environment: ["environment", "Environment"], EnvironmentLookup: ["environment-lookup", "EnvironmentLookup"], HostingDetails: ["hosting-details", "HostingDetails"] }, ngImport: i0, template: "<form class=\"form-card\" [formGroup]=\"BuildPipelineFormGroup\" (ngSubmit)=\"SubmitBuildPipeline()\">\n <mat-card\n class=\"spread\" \n >\n <mat-card-header>\n <mat-card-title> Build Pipeline </mat-card-title>\n\n <mat-hint>\n Changes made here are reflected for all sources using this\n DevOpsAction\n </mat-hint>\n </mat-card-header>\n\n <mat-card-content>\n\n\n <div *ngIf=\"!HostingDetails?.Loading\">\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n formControlName=\"buildPipeline\"\n placeholder=\"Build Pipeline\"\n [disabled]=\"Disabled\"\n (selectionChange)=\"BuildPipelineChanged()\"\n required\n >\n <ng-container\n *ngFor=\"let hostOption of HostingDetails?.HostingOptions; let i = index\"\n >\n <mat-option [value]=\"hostOption.Lookup\">\n {{ hostOption.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n <span *ngIf=\"BuildPipeline == hostOption?.Lookup\">\n {{ hostOption.Description }}\n </span>\n </ng-container>\n </mat-hint>\n </mat-form-field>\n \n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n formControlName=\"devOpsActionName\"\n placeholder=\"Name of DevOps Action\"\n required=\"true\"\n />\n </mat-form-field>\n \n <ng-container *ngFor=\"let input of SelectedHostingOption?.Inputs\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n [formControlName]=\"input.Lookup\"\n [placeholder]=\"input.Placeholder\"\n [required]=\"input.Required\"\n />\n \n <mat-hint>{{ input.Hint }}</mat-hint>\n </mat-form-field>\n </ng-container>\n \n <div *ngIf=\"BuildPipeline == 'npm-release'\">\n <mat-form-field class=\"mat-full-width with-hint padding-bottom-4\">\n <mat-icon matPrefix>security</mat-icon>\n \n <input\n id=\"npm-token\"\n matInput\n type=\"text\"\n formControlName=\"npmToken\"\n placeholder=\"NPM token\"\n [required]=\"!Disabled\"\n style=\"-webkit-text-security: disc;\"\n />\n <mat-hint>\n Securely publish to NPM, provide an NPM Personal Access Token (PAT) with publish access to the organization used for your NPM packages. \n Learn how to create and view access tokens \n <a\n href=\"https://docs.npmjs.com/creating-and-viewing-access-tokens\"\n target=\"_blank\"\n >\n here.\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n </div>\n \n <div *ngIf=\"HostingDetails?.Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n \n <div class=\"margin-3\">\n <h4 class=\"mat-title\">Loading hosting details</h4>\n </div>\n </div>\n </div>\n </mat-card-content>\n <mat-card-actions fxLayoutAlign=\"center center\">\n\n <button \n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!BuildPipelineFormGroup.valid || !BuildPipelineFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Build Pipeline\n </button>\n \n </mat-card-actions>\n </mat-card>\n</form>\n", styles: [""], components: [{ type: i4.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i4.MatCardHeader, selector: "mat-card-header" }, { type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i9.LoaderComponent, selector: "lcu-loader", inputs: ["diameter", "hide-inner", "loading"] }, { type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i4.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.MatPrefix, selector: "[matPrefix]" }, { type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i13.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i13.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
226
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BuildPipelineFormComponent, decorators: [{
227
- type: Component,
228
- args: [{ selector: 'lcu-build-pipeline-form', template: "<form class=\"form-card\" [formGroup]=\"BuildPipelineFormGroup\" (ngSubmit)=\"SubmitBuildPipeline()\">\n <mat-card\n class=\"spread\" \n >\n <mat-card-header>\n <mat-card-title> Build Pipeline </mat-card-title>\n\n <mat-hint>\n Changes made here are reflected for all sources using this\n DevOpsAction\n </mat-hint>\n </mat-card-header>\n\n <mat-card-content>\n\n\n <div *ngIf=\"!HostingDetails?.Loading\">\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n formControlName=\"buildPipeline\"\n placeholder=\"Build Pipeline\"\n [disabled]=\"Disabled\"\n (selectionChange)=\"BuildPipelineChanged()\"\n required\n >\n <ng-container\n *ngFor=\"let hostOption of HostingDetails?.HostingOptions; let i = index\"\n >\n <mat-option [value]=\"hostOption.Lookup\">\n {{ hostOption.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n <span *ngIf=\"BuildPipeline == hostOption?.Lookup\">\n {{ hostOption.Description }}\n </span>\n </ng-container>\n </mat-hint>\n </mat-form-field>\n \n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n formControlName=\"devOpsActionName\"\n placeholder=\"Name of DevOps Action\"\n required=\"true\"\n />\n </mat-form-field>\n \n <ng-container *ngFor=\"let input of SelectedHostingOption?.Inputs\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n [formControlName]=\"input.Lookup\"\n [placeholder]=\"input.Placeholder\"\n [required]=\"input.Required\"\n />\n \n <mat-hint>{{ input.Hint }}</mat-hint>\n </mat-form-field>\n </ng-container>\n \n <div *ngIf=\"BuildPipeline == 'npm-release'\">\n <mat-form-field class=\"mat-full-width with-hint padding-bottom-4\">\n <mat-icon matPrefix>security</mat-icon>\n \n <input\n id=\"npm-token\"\n matInput\n type=\"text\"\n formControlName=\"npmToken\"\n placeholder=\"NPM token\"\n [required]=\"!Disabled\"\n style=\"-webkit-text-security: disc;\"\n />\n <mat-hint>\n Securely publish to NPM, provide an NPM Personal Access Token (PAT) with publish access to the organization used for your NPM packages. \n Learn how to create and view access tokens \n <a\n href=\"https://docs.npmjs.com/creating-and-viewing-access-tokens\"\n target=\"_blank\"\n >\n here.\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n </div>\n \n <div *ngIf=\"HostingDetails?.Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n \n <div class=\"margin-3\">\n <h4 class=\"mat-title\">Loading hosting details</h4>\n </div>\n </div>\n </div>\n </mat-card-content>\n <mat-card-actions fxLayoutAlign=\"center center\">\n\n <button \n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!BuildPipelineFormGroup.valid || !BuildPipelineFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Build Pipeline\n </button>\n \n </mat-card-actions>\n </mat-card>\n</form>\n", styles: [""] }]
229
- }], ctorParameters: function () { return [{ type: i1.EaCService }, { type: i2.FormBuilder }, { type: i3.ApplicationsFlowService }]; }, propDecorators: { DevOpsActionLookup: [{
230
- type: Input,
231
- args: ['devops-action-lookup']
232
- }], Disabled: [{
233
- type: Input,
234
- args: ['disabled']
235
- }], Environment: [{
236
- type: Input,
237
- args: ['environment']
238
- }], EnvironmentLookup: [{
239
- type: Input,
240
- args: ['environment-lookup']
241
- }], HostingDetails: [{
242
- type: Input,
243
- args: ['hosting-details']
244
- }] } });
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtcGlwZWxpbmUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9jb250cm9scy9idWlsZC1waXBlbGluZS1mb3JtL2J1aWxkLXBpcGVsaW5lLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvY29udHJvbHMvYnVpbGQtcGlwZWxpbmUtZm9ybS9idWlsZC1waXBlbGluZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBMkMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckYsT0FBTyxFQUF1QixJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJeEQsT0FBTyxFQUFFLHFCQUFxQixFQUF3QixNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFPbEcsTUFBTSxPQUFPLDBCQUEwQjtJQXFHckMsWUFBc0IsTUFBa0IsRUFDNUIsV0FBd0IsRUFDeEIsV0FBb0M7UUFGMUIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQWpGRCxJQUFXLFFBQVE7UUFDakIsK0VBQStFO1FBQy9FLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWM7WUFDdkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQ3hELENBQUMsQ0FBQyxF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SXBCLGNBQWM7c0JBRHBCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlTW9kZWxlZFJlc3BvbnNlLCBHdWlkIH0gZnJvbSAnQGxjdS9jb21tb24nO1xuaW1wb3J0IHsgRWFDQXJ0aWZhY3QsIEVhQ0Rldk9wc0FjdGlvbiwgRWFDRW52aXJvbm1lbnRBc0NvZGUsIEVhQ1NvdXJjZUNvbnRyb2wgfSBmcm9tICdAc2VtYW50aWNqcy9jb21tb24nO1xuaW1wb3J0IHsgQXBwbGljYXRpb25zRmxvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbnMtZmxvdy5zZXJ2aWNlJztcbmltcG9ydCB7IEVhQ1NlcnZpY2UsIFNhdmVFbnZpcm9ubWVudEFzQ29kZUV2ZW50UmVxdWVzdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VhYy5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RIb3N0aW5nRGV0YWlscywgUHJvamVjdEhvc3RpbmdPcHRpb24gfSBmcm9tICcuLi8uLi9zdGF0ZS9hcHBsaWNhdGlvbnMtZmxvdy5zdGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xjdS1idWlsZC1waXBlbGluZS1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1aWxkLXBpcGVsaW5lLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9idWlsZC1waXBlbGluZS1mb3JtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQnVpbGRQaXBlbGluZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG5cbiAgLy9QUk9QRVJUSUVTXG5cbiAgLy8gQElucHV0KCdidWlsZC1waXBlbGluZScpXG4gIHB1YmxpYyBCdWlsZFBpcGVsaW5lOiBzdHJpbmc7XG5cbiAgQElucHV0KCdkZXZvcHMtYWN0aW9uLWxvb2t1cCcpXG4gIHB1YmxpYyBEZXZPcHNBY3Rpb25Mb29rdXA6IHN0cmluZztcblxuICBASW5wdXQoJ2Rpc2FibGVkJylcbiAgcHVibGljIERpc2FibGVkOiBib29sZWFuO1xuXG4gIEBJbnB1dCgnZW52aXJvbm1lbnQnKVxuICBwdWJsaWMgRW52aXJvbm1lbnQ6IEVhQ0Vudmlyb25tZW50QXNDb2RlO1xuXG4gIEBJbnB1dCgnZW52aXJvbm1lbnQtbG9va3VwJylcbiAgcHVibGljIEVudmlyb25tZW50TG9va3VwOiBzdHJpbmc7XG5cbiAgQElucHV0KCdob3N0aW5nLWRldGFpbHMnKVxuICBwdWJsaWMgSG9zdGluZ0RldGFpbHM6IFByb2plY3RIb3N0aW5nRGV0YWlscztcblxuXG4gIHB1YmxpYyBnZXQgQXJ0aWZhY3QoKTogRWFDQXJ0aWZhY3Qge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiQVJUSUZBQ1Q6IFwiLCB0aGlzLkVudmlyb25tZW50Py5BcnRpZmFjdHNbdGhpcy5BcnRpZmFjdExvb2t1cF0pO1xuICAgIHJldHVybiB0aGlzLkVudmlyb25tZW50Py5BcnRpZmFjdHMgJiYgdGhpcy5BcnRpZmFjdExvb2t1cFxuICAgICAgPyB0aGlzLkVudmlyb25tZW50Py5BcnRpZmFjdHNbdGhpcy5BcnRpZmFjdExvb2t1cF0gfHwge31cbiAgICAgIDoge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IEFydGlmYWN0TG9va3VwKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYXJ0TG9va3VwID0gdGhpcy5EZXZPcHNBY3Rpb24/LkFydGlmYWN0TG9va3Vwc1xuICAgICAgPyB0aGlzLkRldk9wc0FjdGlvbj8uQXJ0aWZhY3RMb29rdXBzWzBdXG4gICAgICA6IG51bGw7XG5cbiAgICByZXR1cm4gYXJ0TG9va3VwO1xuICB9XG5cbiAgXG5cbiAgcHVibGljIGdldCBCdWlsZFBpcGVsaW5lRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcblxuICAgIHJldHVybiB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXA/LmdldCgnYnVpbGRQaXBlbGluZScpO1xuICB9XG5cblxuICBwdWJsaWMgZ2V0IERldk9wc0FjdGlvbigpOiBFYUNEZXZPcHNBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLkVudmlyb25tZW50LkRldk9wc0FjdGlvbnMgJiYgdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXBcbiAgICAgID8gdGhpcy5FbnZpcm9ubWVudC5EZXZPcHNBY3Rpb25zW3RoaXMuRGV2T3BzQWN0aW9uTG9va3VwXSB8fCB7fVxuICAgICAgOiB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRGV2T3BzQWN0aW9ucygpOiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0Rldk9wc0FjdGlvbiB9IHtcbiAgICByZXR1cm4gdGhpcy5FbnZpcm9ubWVudC5EZXZPcHNBY3Rpb25zIHx8IHt9O1xuICB9XG5cbiAgcHVibGljIGdldCBEZXZPcHNBY3Rpb25OYW1lRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmdldCgnZGV2T3BzQWN0aW9uTmFtZScpO1xuICB9XG5cbiAgXG5cblxuICBwdWJsaWMgZ2V0IE5QTVRva2VuRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmdldCgnbnBtVG9rZW4nKTtcbiAgfVxuXG4gIC8vIChobykgPT4gaG8uTG9va3VwID09PSB0aGlzLkJ1aWxkUGlwZWxpbmVcbiAgcHVibGljIGdldCBTZWxlY3RlZEhvc3RpbmdPcHRpb24oKTogUHJvamVjdEhvc3RpbmdPcHRpb24ge1xuICAgIHJldHVybiB0aGlzLkhvc3RpbmdEZXRhaWxzPy5Ib3N0aW5nT3B0aW9ucz8uZmluZChcbiAgICAgIChobykgPT4gaG8uTG9va3VwID09PSB0aGlzLkJ1aWxkUGlwZWxpbmVcbiAgICApO1xuICB9XG5cblxuICBwdWJsaWMgZ2V0IFNlbGVjdGVkSG9zdGluZ09wdGlvbklucHV0Q29udHJvbFZhbHVlcygpOiB7XG4gICAgW2xvb2t1cDogc3RyaW5nXTogYW55O1xuICB9IHtcbiAgICByZXR1cm4gdGhpcy5TZWxlY3RlZEhvc3RpbmdPcHRpb24/LklucHV0cz8ucmVkdWNlKChwcmV2LCBjdXIpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgIH07XG5cbiAgICAgIHJlc1tjdXIuTG9va3VwXSA9IHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5jb250cm9sc1tjdXIuTG9va3VwXS52YWx1ZTtcblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFNvdXJjZUNvbnRyb2xMb29rdXBzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLlNvdXJjZUNvbnRyb2xzIHx8IHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU291cmNlQ29udHJvbHMoKTogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNTb3VyY2VDb250cm9sIH0ge1xuICAgIHJldHVybiB0aGlzLkVudmlyb25tZW50LlNvdXJjZXMgfHwge307XG4gIH1cblxuICBwdWJsaWMgQnVpbGRQaXBlbGluZUZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVhY1N2YzogRWFDU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByb3RlY3RlZCBhcHBzRmxvd1N2YzogQXBwbGljYXRpb25zRmxvd1NlcnZpY2UpIHtcbiAgICB0aGlzLkhvc3RpbmdEZXRhaWxzID0gbmV3IFByb2plY3RIb3N0aW5nRGV0YWlscygpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gICAgICBcblxuICAgICAgLy8gY29uc29sZS5sb2coJ0J1aWxkUGlwZWxpbmUgPSAnLCB0aGlzLkJ1aWxkUGlwZWxpbmUpXG5cbiAgICBcbiAgICAvLyB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHt9KTtcblxuICAgIC8vIGlmICh0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAgIT0gbnVsbCkge1xuICAgIC8vICAgdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ2hvc3RpbmdEZXRhaWxzJyk7XG4gICAgLy8gfVxuXG4gICAgXG4gICAgLy8gdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgLy8gICAnaG9zdGluZ0RldGFpbHMnLFxuICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICBidWlsZFBpcGVsaW5lOiBbdGhpcy5CdWlsZFBpcGVsaW5lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgfSlcbiAgICAvLyApO1xuXG4gICAgdGhpcy5sb2FkUHJvamVjdEhvc3RpbmdEZXRhaWxzKCk7XG4gICAgLy8gdGhpcy5zZXR1cENvbnRyb2xzRm9yRm9ybSgpO1xuXG4gIH1cblxuICAvL0FQSSBNRVRIT0RTXG5cbiAgcHVibGljIEJ1aWxkUGlwZWxpbmVDaGFuZ2VkKCk6IHZvaWQge1xuICAgIC8vZm9yIHNvbWUgcmVhc29uIHRoaXMgdmFsdWUgaXMgY29taW5nIGJhY2sgdW5kZWZpbmVkXG4gICAgLy8gY29uc29sZS5sb2coXCJidWlsZCBwaXBlbGluZSB2YWx1ZTogXCIsIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Db250cm9sPy52YWx1ZSlcbiAgICB0aGlzLkJ1aWxkUGlwZWxpbmUgPSB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtQ29udHJvbD8udmFsdWU7XG5cbiAgICB0aGlzLnNldHVwQ29udHJvbHNGb3JGb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgU3VibWl0QnVpbGRQaXBlbGluZSgpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInN1Ym1pdHRpbmcgYnVpbGQgcGlwZWxpbmU6IFwiLCB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAudmFsdWUpO1xuICAgIHRoaXMuU2F2ZUVudmlyb25tZW50KCk7XG4gIH1cblxuICBwdWJsaWMgU2F2ZUVudmlyb25tZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IHNhdmVFbnZSZXE6IFNhdmVFbnZpcm9ubWVudEFzQ29kZUV2ZW50UmVxdWVzdCA9IHtcbiAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgIC4uLnRoaXMuRW52aXJvbm1lbnQsXG4gICAgICAgIEFydGlmYWN0czogdGhpcy5FbnZpcm9ubWVudC5BcnRpZmFjdHMgfHwge30sXG4gICAgICAgIERldk9wc0FjdGlvbnM6IHRoaXMuRW52aXJvbm1lbnQuRGV2T3BzQWN0aW9ucyB8fCB7fSxcbiAgICAgICAgU2VjcmV0czogdGhpcy5FbnZpcm9ubWVudC5TZWNyZXRzIHx8IHt9LFxuICAgICAgICBTb3VyY2VzOiB0aGlzLkVudmlyb25tZW50LlNvdXJjZXMgfHwge30sXG4gICAgICB9LFxuICAgICAgRW52aXJvbm1lbnRMb29rdXA6IHRoaXMuRW52aXJvbm1lbnRMb29rdXAsXG4gICAgICBFbnRlcnByaXNlRGF0YVRva2Vuczoge30sXG4gICAgfTtcblxuICAgIGxldCBhcnRpZmFjdExvb2t1cDogc3RyaW5nO1xuXG4gICAgbGV0IGFydGlmYWN0OiBFYUNBcnRpZmFjdCA9IHtcbiAgICAgIC4uLnRoaXMuQXJ0aWZhY3QsXG4gICAgICAuLi50aGlzLlNlbGVjdGVkSG9zdGluZ09wdGlvbklucHV0Q29udHJvbFZhbHVlcyxcbiAgICB9O1xuXG4gICAgaWYgKCF0aGlzLkFydGlmYWN0TG9va3VwKSB7XG4gICAgICBhcnRpZmFjdExvb2t1cCA9IEd1aWQuQ3JlYXRlUmF3KCk7XG5cbiAgICAgIGFydGlmYWN0ID0ge1xuICAgICAgICAuLi5hcnRpZmFjdCxcbiAgICAgICAgVHlwZTogdGhpcy5TZWxlY3RlZEhvc3RpbmdPcHRpb25cbiAgICAgICAgICAuQXJ0aWZhY3RUeXBlLFxuICAgICAgICBOYW1lOiB0aGlzLlNlbGVjdGVkSG9zdGluZ09wdGlvbi5OYW1lLFxuICAgICAgICBOUE1SZWdpc3RyeTogJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLycsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBhcnRpZmFjdExvb2t1cCA9IHRoaXMuQXJ0aWZhY3RMb29rdXA7XG4gICAgfVxuXG4gICAgc2F2ZUVudlJlcS5FbnZpcm9ubWVudC5BcnRpZmFjdHNbYXJ0aWZhY3RMb29rdXBdID0gYXJ0aWZhY3Q7XG5cbiAgICBsZXQgZGV2T3BzQWN0aW9uTG9va3VwOiBzdHJpbmc7XG5cbiAgICBpZiAoIXRoaXMuRGV2T3BzQWN0aW9uTG9va3VwKSB7XG4gICAgICBkZXZPcHNBY3Rpb25Mb29rdXAgPSBHdWlkLkNyZWF0ZVJhdygpO1xuXG4gICAgICBjb25zdCBkb2E6IEVhQ0Rldk9wc0FjdGlvbiA9IHtcbiAgICAgICAgLi4udGhpcy5EZXZPcHNBY3Rpb24sXG4gICAgICAgIEFydGlmYWN0TG9va3VwczogW2FydGlmYWN0TG9va3VwXSxcbiAgICAgICAgTmFtZTogdGhpcy5EZXZPcHNBY3Rpb25OYW1lRm9ybUNvbnRyb2wudmFsdWUsXG4gICAgICAgIFBhdGg6IHRoaXMuU2VsZWN0ZWRIb3N0aW5nT3B0aW9uLlBhdGgsXG4gICAgICAgIFRlbXBsYXRlczpcbiAgICAgICAgICB0aGlzLlNlbGVjdGVkSG9zdGluZ09wdGlvbi5UZW1wbGF0ZXMsXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5OUE1Ub2tlbkZvcm1Db250cm9sPy52YWx1ZSkge1xuICAgICAgICBjb25zdCBzZWNyZXRMb29rdXAgPSAnbnBtLWFjY2Vzcy10b2tlbic7XG5cbiAgICAgICAgZG9hLlNlY3JldExvb2t1cHMgPSBbc2VjcmV0TG9va3VwXTtcblxuICAgICAgICBzYXZlRW52UmVxLkVudmlyb25tZW50LlNlY3JldHNbc2VjcmV0TG9va3VwXSA9IHtcbiAgICAgICAgICBOYW1lOiAnTlBNIEFjY2VzcyBUb2tlbicsXG4gICAgICAgICAgRGF0YVRva2VuTG9va3VwOiBzZWNyZXRMb29rdXAsXG4gICAgICAgICAgS25vd25BczogJ05QTV9UT0tFTicsXG4gICAgICAgIH07XG5cbiAgICAgICAgc2F2ZUVudlJlcS5FbnRlcnByaXNlRGF0YVRva2Vuc1tzZWNyZXRMb29rdXBdID0ge1xuICAgICAgICAgIE5hbWU6IHNhdmVFbnZSZXEuRW52aXJvbm1lbnQuU2VjcmV0c1tzZWNyZXRMb29rdXBdLk5hbWUsXG4gICAgICAgICAgRGVzY3JpcHRpb246IHNhdmVFbnZSZXEuRW52aXJvbm1lbnQuU2VjcmV0c1tzZWNyZXRMb29rdXBdLk5hbWUsXG4gICAgICAgICAgVmFsdWU6IHRoaXMuTlBNVG9rZW5Gb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgc2F2ZUVudlJlcS5FbnZpcm9ubWVudC5EZXZPcHNBY3Rpb25zW2Rldk9wc0FjdGlvbkxvb2t1cF0gPSBkb2E7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRldk9wc0FjdGlvbkxvb2t1cCA9IHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwO1xuXG4gICAgICBjb25zdCBkb2E6IEVhQ0Rldk9wc0FjdGlvbiA9IHtcbiAgICAgICAgLi4udGhpcy5EZXZPcHNBY3Rpb24sXG4gICAgICAgIE5hbWU6IHRoaXMuRGV2T3BzQWN0aW9uTmFtZUZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgfTtcblxuICAgICAgc2F2ZUVudlJlcS5FbnZpcm9ubWVudC5EZXZPcHNBY3Rpb25zW2Rldk9wc0FjdGlvbkxvb2t1cF0gPSBkb2E7XG4gICAgfVxuXG4gICAgdGhpcy5lYWNTdmMuU2F2ZUVudmlyb25tZW50QXNDb2RlKHNhdmVFbnZSZXEpO1xuICB9XG5cbiAgLy8gIEhlbHBlcnNcbiAgcHJvdGVjdGVkIHNldHVwQ29udHJvbHNGb3JGb3JtKCk6IHZvaWQge1xuXG4gICAgLy8gdGhpcy5CdWlsZFBpcGVsaW5lID1cbiAgICAvLyAgICAgICAgIHRoaXMuQnVpbGRQaXBlbGluZSB8fCB0aGlzLkhvc3RpbmdEZXRhaWxzPy5Ib3N0aW5nT3B0aW9uc1xuICAgIC8vICAgICAgICAgICA/IHRoaXMuSG9zdGluZ0RldGFpbHM/Lkhvc3RpbmdPcHRpb25zWzBdPy5Mb29rdXBcbiAgICAvLyAgICAgICAgICAgOiAnJztcblxuICAgIC8vIGNvbnNvbGUubG9nKFwiaG9zdGluZyBkZXRhaWxzOiBcIiwgdGhpcy5Ib3N0aW5nRGV0YWlscylcblxuICAgIGZvciAoY29uc3QgY3RybE5hbWUgaW4gdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmNvbnRyb2xzKSB7XG4gICAgICAvL2Rldk9wc0FjdGlvbiBkb2Vzbid0IGV4aXN0XG4gICAgICAvL3JlbW92ZXMgaG9zdGluZyBkZXRhaWxzXG4gICAgICBpZiAoY3RybE5hbWUgIT09ICdidWlsZFBpcGVsaW5lJyAmJiBjdHJsTmFtZSAhPT0gJ2Rldk9wc0FjdGlvbicpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZW1vdmluZyBjb250cm9sOiBcIiwgY3RybE5hbWUpXG4gICAgICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5yZW1vdmVDb250cm9sKGN0cmxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdkZXZPcHNBY3Rpb25OYW1lJyxcbiAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgICAgdGhpcy5EZXZPcHNBY3Rpb24/Lk5hbWUgfHwgdGhpcy5TZWxlY3RlZEhvc3RpbmdPcHRpb24/Lk5hbWUgfHwgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcInNlbGVjdGVkIGhvc3Rpbmcgb3B0aW9uczogXCIsIHRoaXMuU2VsZWN0ZWRIb3N0aW5nT3B0aW9uLklucHV0cyk7XG5cbiAgICB0aGlzLlNlbGVjdGVkSG9zdGluZ09wdGlvbj8uSW5wdXRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IGlucHV0LlJlcXVpcmVkID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW107XG5cbiAgICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgICBpbnB1dC5Mb29rdXAsXG4gICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgICAgICB0aGlzLkFydGlmYWN0W2lucHV0Lkxvb2t1cF0gfHwgaW5wdXQuRGVmYXVsdFZhbHVlIHx8ICcnLFxuICAgICAgICAgIHZhbGlkYXRvcnNcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgLy8gaWYgKHRoaXMuRGlzYWJsZWQpIHtcbiAgICAgIC8vICAgdGhpcy5Gb3JtR3JvdXAuY29udHJvbHNbaW5wdXQuTG9va3VwXS5kaXNhYmxlKCk7XG4gICAgICAvLyB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5CdWlsZFBpcGVsaW5lRm9ybUNvbnRyb2w/LnZhbHVlID09PSAnbnBtLXJlbGVhc2UnKSB7XG5cbiAgICAgIGlmICghdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmNvbnRyb2xzLm5wbVRva2VuKSB7XG4gICAgICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgICAgICducG1Ub2tlbicsXG4gICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICB0aGlzLkRpc2FibGVkID8gW10gOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMuRGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAuY29udHJvbHMubnBtVG9rZW4uZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Db250cm9sPy52YWx1ZSA9PT0gJ2dpdGh1Yi1hcnRpZmFjdHMtcmVsZWFzZSdcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAuY29udHJvbHMubnBtVG9rZW4pIHtcbiAgICAgICAgdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ25wbVRva2VuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgXG5cbiAgcHJvdGVjdGVkIGxvYWRQcm9qZWN0SG9zdGluZ0RldGFpbHMoKTogdm9pZCB7XG4gICAgdGhpcy5Ib3N0aW5nRGV0YWlscy5Mb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmFwcHNGbG93U3ZjXG4gICAgICAuTmV3TG9hZFByb2plY3RIb3N0aW5nRGV0YWlscygpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAocmVzcG9uc2U6IEJhc2VNb2RlbGVkUmVzcG9uc2U8UHJvamVjdEhvc3RpbmdEZXRhaWxzPikgPT4ge1xuICAgICAgICAgIHRoaXMuSG9zdGluZ0RldGFpbHMgPSByZXNwb25zZS5Nb2RlbDtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJlc3BvbnNlOiBcIiwgcmVzcG9uc2UpO1xuICAgICAgICAgIHRoaXMuSG9zdGluZ0RldGFpbHMuTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgY29uc3QgaG9zdE9wdGlvbiA9IHRoaXMuSG9zdGluZ0RldGFpbHM/Lkhvc3RpbmdPcHRpb25zPy5maW5kKFxuICAgICAgICAgICAgKGhvKSA9PiBoby5QYXRoID09PSB0aGlzLkRldk9wc0FjdGlvbi5QYXRoXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLkJ1aWxkUGlwZWxpbmUgPSAgaG9zdE9wdGlvbi5Mb29rdXA7XG5cbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkJ1aWxkIFBpcGVsaW5lIEhFUkU9IFwiLCB0aGlzLkJ1aWxkUGlwZWxpbmUpO1xuXG4gICAgICAgICAgdGhpcy5zZXR1cENvbnRyb2xzRm9yRm9ybSgpO1xuXG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiRVJSOiBcIiwgZXJyKTtcbiAgICAgICAgICB0aGlzLkhvc3RpbmdEZXRhaWxzLkxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICB9XG4gICAgICApO1xuICAgIGNvbnNvbGUubG9nKFwiSE9TVElORyBERVRBSUxTOiBcIiwgdGhpcy5Ib3N0aW5nRGV0YWlscyk7XG5cbiAgfVxuXG59XG4iLCI8Zm9ybSBjbGFzcz1cImZvcm0tY2FyZFwiIFtmb3JtR3JvdXBdPVwiQnVpbGRQaXBlbGluZUZvcm1Hcm91cFwiIChuZ1N1Ym1pdCk9XCJTdWJtaXRCdWlsZFBpcGVsaW5lKClcIj5cbiAgICA8bWF0LWNhcmRcbiAgICAgIGNsYXNzPVwic3ByZWFkXCIgIFxuICAgID5cbiAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgIDxtYXQtY2FyZC10aXRsZT4gQnVpbGQgUGlwZWxpbmUgPC9tYXQtY2FyZC10aXRsZT5cblxuICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgQ2hhbmdlcyBtYWRlIGhlcmUgYXJlIHJlZmxlY3RlZCBmb3IgYWxsIHNvdXJjZXMgdXNpbmcgdGhpc1xuICAgICAgICAgIERldk9wc0FjdGlvblxuICAgICAgICA8L21hdC1oaW50PlxuICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XG5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuXG5cbiAgICAgICAgPGRpdiAgKm5nSWY9XCIhSG9zdGluZ0RldGFpbHM/LkxvYWRpbmdcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYnVpbGRQaXBlbGluZVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQnVpbGQgUGlwZWxpbmVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIkJ1aWxkUGlwZWxpbmVDaGFuZ2VkKClcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGhvc3RPcHRpb24gb2YgSG9zdGluZ0RldGFpbHM/Lkhvc3RpbmdPcHRpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJob3N0T3B0aW9uLkxvb2t1cFwiPlxuICAgICAgICAgICAgICAgICAge3sgaG9zdE9wdGlvbi5OYW1lIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgXG4gICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhvc3RPcHRpb24gb2YgSG9zdGluZ0RldGFpbHM/Lkhvc3RpbmdPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJCdWlsZFBpcGVsaW5lID09IGhvc3RPcHRpb24/Lkxvb2t1cFwiPlxuICAgICAgICAgICAgICAgICAge3sgaG9zdE9wdGlvbi5EZXNjcmlwdGlvbiB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIFxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGV2T3BzQWN0aW9uTmFtZVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZSBvZiBEZXZPcHMgQWN0aW9uXCJcbiAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW5wdXQgb2YgU2VsZWN0ZWRIb3N0aW5nT3B0aW9uPy5JbnB1dHNcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJpbnB1dC5Mb29rdXBcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpbnB1dC5QbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlucHV0LlJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgXG4gICAgICAgICAgICAgIDxtYXQtaGludD57eyBpbnB1dC5IaW50IH19PC9tYXQtaGludD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJCdWlsZFBpcGVsaW5lID09ICducG0tcmVsZWFzZSdcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoIHdpdGgtaGludCBwYWRkaW5nLWJvdHRvbS00XCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+c2VjdXJpdHk8L21hdC1pY29uPlxuICAgICAgICBcbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJucG0tdG9rZW5cIlxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5wbVRva2VuXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5QTSB0b2tlblwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIiFEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCItd2Via2l0LXRleHQtc2VjdXJpdHk6IGRpc2M7XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPG1hdC1oaW50PlxuICAgICAgICAgICAgICAgIFNlY3VyZWx5IHB1Ymxpc2ggdG8gTlBNLCBwcm92aWRlIGFuIE5QTSBQZXJzb25hbCBBY2Nlc3MgVG9rZW4gKFBBVCkgd2l0aCBwdWJsaXNoIGFjY2VzcyB0byB0aGUgb3JnYW5pemF0aW9uIHVzZWQgZm9yIHlvdXIgTlBNIHBhY2thZ2VzLiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgTGVhcm4gaG93IHRvIGNyZWF0ZSBhbmQgdmlldyBhY2Nlc3MgdG9rZW5zIFxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9kb2NzLm5wbWpzLmNvbS9jcmVhdGluZy1hbmQtdmlld2luZy1hY2Nlc3MtdG9rZW5zXCJcbiAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgaGVyZS5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgKm5nSWY9XCJIb3N0aW5nRGV0YWlscz8uTG9hZGluZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcHJlYWRcIj5cbiAgICAgICAgICAgIDxsY3UtbG9hZGVyIHN0eWxlPVwibWFyZ2luOiBhdXRvXCIgW2xvYWRpbmddPVwidHJ1ZVwiPjwvbGN1LWxvYWRlcj5cbiAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFyZ2luLTNcIj5cbiAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibWF0LXRpdGxlXCI+TG9hZGluZyBob3N0aW5nIGRldGFpbHM8L2g0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgPG1hdC1jYXJkLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cblxuICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIiBcbiAgICAgICAgICBmeEZsZXg9XCIxMDAlXCIgXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFCdWlsZFBpcGVsaW5lRm9ybUdyb3VwLnZhbGlkIHx8ICFCdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmRpcnR5XCI+XG4gICAgICAgICAgPG1hdC1pY29uPnNhdmU8L21hdC1pY29uPlxuICAgICAgICAgIFNhdmUgQnVpbGQgUGlwZWxpbmVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIFxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cbiAgICA8L21hdC1jYXJkPlxuPC9mb3JtPlxuIl19