tango-app-ui-analyse-trax 3.9.2 → 3.9.3

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 (470) hide show
  1. package/.eslintrc.json +37 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +12 -25
  4. package/src/lib/components/action-centre/action-centre.component.html +607 -0
  5. package/src/lib/components/action-centre/action-centre.component.scss +185 -0
  6. package/src/lib/components/action-centre/action-centre.component.spec.ts +23 -0
  7. package/src/lib/components/action-centre/action-centre.component.ts +279 -0
  8. package/src/lib/components/activity-log/activity-log.component.html +84 -0
  9. package/src/lib/components/activity-log/activity-log.component.scss +33 -0
  10. package/src/lib/components/activity-log/activity-log.component.spec.ts +23 -0
  11. package/src/lib/components/activity-log/activity-log.component.ts +137 -0
  12. package/src/lib/components/activity-log-v2/activity-log-v2.component.html +189 -0
  13. package/src/lib/components/activity-log-v2/activity-log-v2.component.scss +162 -0
  14. package/src/lib/components/activity-log-v2/activity-log-v2.component.spec.ts +23 -0
  15. package/src/lib/components/activity-log-v2/activity-log-v2.component.ts +517 -0
  16. package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.html +19 -0
  17. package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.scss +148 -0
  18. package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.spec.ts +23 -0
  19. package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.ts +141 -0
  20. package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.html +42 -0
  21. package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.scss +49 -0
  22. package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.spec.ts +23 -0
  23. package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.ts +22 -0
  24. package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.html +724 -0
  25. package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.scss +217 -0
  26. package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.spec.ts +23 -0
  27. package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.ts +122 -0
  28. package/src/lib/components/add-checklist/add-checklist.component.html +1459 -0
  29. package/src/lib/components/add-checklist/add-checklist.component.scss +1205 -0
  30. package/src/lib/components/add-checklist/add-checklist.component.spec.ts +23 -0
  31. package/src/lib/components/add-checklist/add-checklist.component.ts +2460 -0
  32. package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.html +207 -0
  33. package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.scss +213 -0
  34. package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.spec.ts +23 -0
  35. package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.ts +621 -0
  36. package/src/lib/components/add-checklist/counter/counter.component.html +43 -0
  37. package/src/lib/components/add-checklist/counter/counter.component.scss +49 -0
  38. package/src/lib/components/add-checklist/counter/counter.component.spec.ts +23 -0
  39. package/src/lib/components/add-checklist/counter/counter.component.ts +123 -0
  40. package/src/lib/components/add-multitask/add-multitask.component.html +705 -0
  41. package/src/lib/components/add-multitask/add-multitask.component.scss +296 -0
  42. package/src/lib/components/add-multitask/add-multitask.component.spec.ts +23 -0
  43. package/src/lib/components/add-multitask/add-multitask.component.ts +611 -0
  44. package/src/lib/components/add-multitask/ascending-validator.ts +13 -0
  45. package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.html +197 -0
  46. package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.scss +31 -0
  47. package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.spec.ts +23 -0
  48. package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.ts +285 -0
  49. package/src/lib/components/add-multitask/create-task.data.ts +374 -0
  50. package/src/lib/components/add-multitask/create-task.interface.ts +177 -0
  51. package/src/lib/components/add-multitask/unique-string-validator.ts +13 -0
  52. package/src/lib/components/add-multitask/whitespace-validator.ts +11 -0
  53. package/src/lib/components/add-task/add-task.component.html +654 -0
  54. package/src/lib/components/add-task/add-task.component.scss +536 -0
  55. package/src/lib/components/add-task/add-task.component.spec.ts +23 -0
  56. package/src/lib/components/add-task/add-task.component.ts +569 -0
  57. package/src/lib/components/add-task/ascending-validator.ts +13 -0
  58. package/src/lib/components/add-task/create-task.data.ts +374 -0
  59. package/src/lib/components/add-task/create-task.interface.ts +192 -0
  60. package/src/lib/components/add-task/unique-string-validator.ts +13 -0
  61. package/src/lib/components/add-task/whitespace-validator.ts +11 -0
  62. package/src/lib/components/approval-popup/approval-popup.component.html +25 -0
  63. package/src/lib/components/approval-popup/approval-popup.component.scss +3 -0
  64. package/src/lib/components/approval-popup/approval-popup.component.spec.ts +23 -0
  65. package/src/lib/components/approval-popup/approval-popup.component.ts +26 -0
  66. package/src/lib/components/checklist/checklist.component.html +330 -0
  67. package/src/lib/components/checklist/checklist.component.scss +112 -0
  68. package/src/lib/components/checklist/checklist.component.spec.ts +23 -0
  69. package/src/lib/components/checklist/checklist.component.ts +344 -0
  70. package/src/lib/components/checklist-configure/assign/assign.component.html +665 -0
  71. package/src/lib/components/checklist-configure/assign/assign.component.scss +219 -0
  72. package/src/lib/components/checklist-configure/assign/assign.component.spec.ts +23 -0
  73. package/src/lib/components/checklist-configure/assign/assign.component.ts +932 -0
  74. package/src/lib/components/checklist-configure/checklist-configure.component.html +4340 -0
  75. package/src/lib/components/checklist-configure/checklist-configure.component.scss +2338 -0
  76. package/src/lib/components/checklist-configure/checklist-configure.component.spec.ts +23 -0
  77. package/src/lib/components/checklist-configure/checklist-configure.component.ts +4659 -0
  78. package/src/lib/components/checklistlayout/checklistlayout.component.html +30 -0
  79. package/src/lib/components/checklistlayout/checklistlayout.component.scss +15 -0
  80. package/src/lib/components/checklistlayout/checklistlayout.component.spec.ts +23 -0
  81. package/src/lib/components/checklistlayout/checklistlayout.component.ts +47 -0
  82. package/src/lib/components/chip-dropdown/chip-dropdown.component.html +36 -0
  83. package/src/lib/components/chip-dropdown/chip-dropdown.component.scss +97 -0
  84. package/src/lib/components/chip-dropdown/chip-dropdown.component.spec.ts +23 -0
  85. package/src/lib/components/chip-dropdown/chip-dropdown.component.ts +125 -0
  86. package/src/lib/components/create-task/create-task.component.html +2003 -0
  87. package/src/lib/components/create-task/create-task.component.scss +272 -0
  88. package/src/lib/components/create-task/create-task.component.spec.ts +23 -0
  89. package/src/lib/components/create-task/create-task.component.ts +614 -0
  90. package/src/lib/components/create-task/create-task.data.ts +372 -0
  91. package/src/lib/components/create-task/create-task.interface.ts +182 -0
  92. package/src/lib/components/create-task/validators/ascending-validator.ts +13 -0
  93. package/src/lib/components/create-task/validators/unique-string-validator.ts +13 -0
  94. package/src/lib/components/create-task/validators/whitespace-validator.ts +11 -0
  95. package/src/lib/components/custom-select/custom-select.component.html +44 -0
  96. package/src/lib/components/custom-select/custom-select.component.scss +144 -0
  97. package/src/lib/components/custom-select/custom-select.component.spec.ts +23 -0
  98. package/src/lib/components/custom-select/custom-select.component.ts +265 -0
  99. package/src/lib/components/dashboard/dashboard.component.html +1076 -0
  100. package/src/lib/components/dashboard/dashboard.component.scss +237 -0
  101. package/src/lib/components/dashboard/dashboard.component.spec.ts +23 -0
  102. package/src/lib/components/dashboard/dashboard.component.ts +539 -0
  103. package/src/lib/components/dashboard-info/dashboard-info.component.html +1420 -0
  104. package/src/lib/components/dashboard-info/dashboard-info.component.scss +409 -0
  105. package/src/lib/components/dashboard-info/dashboard-info.component.spec.ts +23 -0
  106. package/src/lib/components/dashboard-info/dashboard-info.component.ts +772 -0
  107. package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.html +110 -0
  108. package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.scss +260 -0
  109. package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.spec.ts +23 -0
  110. package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.ts +143 -0
  111. package/src/lib/components/dashboard-layout/dashboard-layout.component.html +1 -0
  112. package/src/lib/components/dashboard-layout/dashboard-layout.component.scss +0 -0
  113. package/src/lib/components/dashboard-layout/dashboard-layout.component.spec.ts +23 -0
  114. package/src/lib/components/dashboard-layout/dashboard-layout.component.ts +10 -0
  115. package/src/lib/components/disabled-select/disabled-select.component.html +44 -0
  116. package/src/lib/components/disabled-select/disabled-select.component.scss +149 -0
  117. package/src/lib/components/disabled-select/disabled-select.component.spec.ts +23 -0
  118. package/src/lib/components/disabled-select/disabled-select.component.ts +146 -0
  119. package/src/lib/components/export-gallery/export-gallery.component.html +175 -0
  120. package/src/lib/components/export-gallery/export-gallery.component.scss +200 -0
  121. package/src/lib/components/export-gallery/export-gallery.component.spec.ts +23 -0
  122. package/src/lib/components/export-gallery/export-gallery.component.ts +263 -0
  123. package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.html +36 -0
  124. package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.scss +97 -0
  125. package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.spec.ts +23 -0
  126. package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.ts +104 -0
  127. package/src/lib/components/eye-test-audit/custom-select/custom-select.component.html +44 -0
  128. package/src/lib/components/eye-test-audit/custom-select/custom-select.component.scss +144 -0
  129. package/src/lib/components/eye-test-audit/custom-select/custom-select.component.spec.ts +23 -0
  130. package/src/lib/components/eye-test-audit/custom-select/custom-select.component.ts +265 -0
  131. package/src/lib/components/eye-test-audit/eye-test/eye-test.component.html +1804 -0
  132. package/src/lib/components/eye-test-audit/eye-test/eye-test.component.scss +806 -0
  133. package/src/lib/components/eye-test-audit/eye-test/eye-test.component.spec.ts +23 -0
  134. package/src/lib/components/eye-test-audit/eye-test/eye-test.component.ts +1890 -0
  135. package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.html +25 -0
  136. package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.scss +0 -0
  137. package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.spec.ts +23 -0
  138. package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.ts +20 -0
  139. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit-routing.module.ts +26 -0
  140. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.html +1 -0
  141. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.scss +0 -0
  142. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.spec.ts +23 -0
  143. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.ts +24 -0
  144. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.module.ts +44 -0
  145. package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.html +490 -0
  146. package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.scss +721 -0
  147. package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.spec.ts +23 -0
  148. package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.ts +1017 -0
  149. package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.html +708 -0
  150. package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.scss +247 -0
  151. package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.spec.ts +23 -0
  152. package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.ts +446 -0
  153. package/src/lib/components/eye-test-audit/group-select/group-select.component.html +44 -0
  154. package/src/lib/components/eye-test-audit/group-select/group-select.component.scss +144 -0
  155. package/src/lib/components/eye-test-audit/group-select/group-select.component.spec.ts +23 -0
  156. package/src/lib/components/eye-test-audit/group-select/group-select.component.ts +147 -0
  157. package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.html +18 -0
  158. package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.scss +49 -0
  159. package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.spec.ts +23 -0
  160. package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.ts +104 -0
  161. package/src/lib/components/eye-test-audit/select-drop/select-drop.component.html +44 -0
  162. package/src/lib/components/eye-test-audit/select-drop/select-drop.component.scss +144 -0
  163. package/src/lib/components/eye-test-audit/select-drop/select-drop.component.spec.ts +23 -0
  164. package/src/lib/components/eye-test-audit/select-drop/select-drop.component.ts +152 -0
  165. package/src/lib/components/eye-test-audit/services/eye-test-audit.service.spec.ts +16 -0
  166. package/src/lib/components/eye-test-audit/services/eye-test-audit.service.ts +190 -0
  167. package/src/lib/components/flag-layout/flag-layout.component.html +1 -0
  168. package/src/lib/components/flag-layout/flag-layout.component.scss +0 -0
  169. package/src/lib/components/flag-layout/flag-layout.component.spec.ts +23 -0
  170. package/src/lib/components/flag-layout/flag-layout.component.ts +10 -0
  171. package/src/lib/components/flags/flags.component.html +473 -0
  172. package/src/lib/components/flags/flags.component.scss +86 -0
  173. package/src/lib/components/flags/flags.component.spec.ts +23 -0
  174. package/src/lib/components/flags/flags.component.ts +280 -0
  175. package/{lib/components/flags/flags.interface.d.ts → src/lib/components/flags/flags.interface.ts} +73 -65
  176. package/src/lib/components/flags-info/flags-info.component.html +6012 -0
  177. package/src/lib/components/flags-info/flags-info.component.scss +278 -0
  178. package/src/lib/components/flags-info/flags-info.component.spec.ts +23 -0
  179. package/src/lib/components/flags-info/flags-info.component.ts +490 -0
  180. package/src/lib/components/flags-info/flags-info.interface.ts +441 -0
  181. package/src/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.html +1 -0
  182. package/src/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.scss +4 -0
  183. package/src/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.ts +78 -0
  184. package/src/lib/components/flags-new/flags-new.component.html +904 -0
  185. package/src/lib/components/flags-new/flags-new.component.scss +121 -0
  186. package/src/lib/components/flags-new/flags-new.component.spec.ts +23 -0
  187. package/src/lib/components/flags-new/flags-new.component.ts +357 -0
  188. package/{lib/components/flags-new/flags-new.interface.d.ts → src/lib/components/flags-new/flags-new.interface.ts} +90 -81
  189. package/src/lib/components/gallery/gallery.component.html +3660 -0
  190. package/src/lib/components/gallery/gallery.component.scss +930 -0
  191. package/src/lib/components/gallery/gallery.component.ts +3527 -0
  192. package/src/lib/components/group-select/group-select.component.html +44 -0
  193. package/src/lib/components/group-select/group-select.component.scss +144 -0
  194. package/src/lib/components/group-select/group-select.component.spec.ts +23 -0
  195. package/src/lib/components/group-select/group-select.component.ts +145 -0
  196. package/src/lib/components/image-popup/image-popup.component.html +11 -0
  197. package/src/lib/components/image-popup/image-popup.component.scss +5 -0
  198. package/src/lib/components/image-popup/image-popup.component.ts +18 -0
  199. package/src/lib/components/lib/custom-select/custom-select.component.html +42 -0
  200. package/src/lib/components/lib/custom-select/custom-select.component.scss +131 -0
  201. package/src/lib/components/lib/custom-select/custom-select.component.spec.ts +23 -0
  202. package/src/lib/components/lib/custom-select/custom-select.component.ts +151 -0
  203. package/src/lib/components/manage-task/manage-task.component.html +265 -0
  204. package/src/lib/components/manage-task/manage-task.component.scss +69 -0
  205. package/src/lib/components/manage-task/manage-task.component.spec.ts +23 -0
  206. package/src/lib/components/manage-task/manage-task.component.ts +267 -0
  207. package/src/lib/components/managechecklist/managechecklist.component.html +176 -0
  208. package/src/lib/components/managechecklist/managechecklist.component.scss +43 -0
  209. package/src/lib/components/managechecklist/managechecklist.component.spec.ts +23 -0
  210. package/src/lib/components/managechecklist/managechecklist.component.ts +176 -0
  211. package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.html +46 -0
  212. package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.scss +181 -0
  213. package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.spec.ts +23 -0
  214. package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.ts +221 -0
  215. package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.html +36 -0
  216. package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.scss +89 -0
  217. package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.spec.ts +23 -0
  218. package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.ts +118 -0
  219. package/src/lib/components/orders/orders.component.html +203 -0
  220. package/src/lib/components/orders/orders.component.scss +180 -0
  221. package/src/lib/components/orders/orders.component.spec.ts +25 -0
  222. package/src/lib/components/orders/orders.component.ts +197 -0
  223. package/src/lib/components/pagination/pagination.component.html +28 -0
  224. package/src/lib/components/pagination/pagination.component.scss +6 -0
  225. package/src/lib/components/pagination/pagination.component.spec.ts +23 -0
  226. package/src/lib/components/pagination/pagination.component.ts +54 -0
  227. package/src/lib/components/reactive-select/reactive-select.component.html +18 -0
  228. package/src/lib/components/reactive-select/reactive-select.component.scss +48 -0
  229. package/src/lib/components/reactive-select/reactive-select.component.spec.ts +23 -0
  230. package/src/lib/components/reactive-select/reactive-select.component.ts +104 -0
  231. package/src/lib/components/reports/date-picker/date-picker.component.html +54 -0
  232. package/src/lib/components/reports/date-picker/date-picker.component.scss +156 -0
  233. package/src/lib/components/reports/date-picker/date-picker.component.spec.ts +23 -0
  234. package/src/lib/components/reports/date-picker/date-picker.component.ts +60 -0
  235. package/src/lib/components/reports/reports.component.html +225 -0
  236. package/src/lib/components/reports/reports.component.scss +69 -0
  237. package/src/lib/components/reports/reports.component.spec.ts +23 -0
  238. package/src/lib/components/reports/reports.component.ts +334 -0
  239. package/{lib/components/reports/reports.interface.d.ts → src/lib/components/reports/reports.interface.ts} +50 -46
  240. package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.html +1 -0
  241. package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.scss +15 -0
  242. package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.spec.ts +23 -0
  243. package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.ts +31 -0
  244. package/src/lib/components/task/task.component.html +322 -0
  245. package/src/lib/components/task/task.component.scss +169 -0
  246. package/src/lib/components/task/task.component.spec.ts +23 -0
  247. package/src/lib/components/task/task.component.ts +340 -0
  248. package/src/lib/components/task-configure/task-configure.component.html +737 -0
  249. package/src/lib/components/task-configure/task-configure.component.scss +569 -0
  250. package/src/lib/components/task-configure/task-configure.component.spec.ts +23 -0
  251. package/src/lib/components/task-configure/task-configure.component.ts +1603 -0
  252. package/src/lib/components/task-configure/task-configure.interface.ts +138 -0
  253. package/src/lib/components/task-info/task-info.component.html +390 -0
  254. package/src/lib/components/task-info/task-info.component.scss +56 -0
  255. package/src/lib/components/task-info/task-info.component.spec.ts +23 -0
  256. package/src/lib/components/task-info/task-info.component.ts +400 -0
  257. package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.html +141 -0
  258. package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.scss +460 -0
  259. package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.spec.ts +23 -0
  260. package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.ts +202 -0
  261. package/src/lib/components/task-layout/task-layout.component.html +1 -0
  262. package/src/lib/components/task-layout/task-layout.component.scss +0 -0
  263. package/src/lib/components/task-layout/task-layout.component.spec.ts +23 -0
  264. package/src/lib/components/task-layout/task-layout.component.ts +10 -0
  265. package/src/lib/components/task-logs/task-logs.component.html +97 -0
  266. package/src/lib/components/task-logs/task-logs.component.scss +301 -0
  267. package/src/lib/components/task-logs/task-logs.component.spec.ts +23 -0
  268. package/src/lib/components/task-logs/task-logs.component.ts +80 -0
  269. package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.html +84 -0
  270. package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.scss +229 -0
  271. package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.spec.ts +23 -0
  272. package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.ts +111 -0
  273. package/src/lib/components/trax-store/trax-store.component.html +78 -0
  274. package/src/lib/components/trax-store/trax-store.component.scss +134 -0
  275. package/src/lib/components/trax-store/trax-store.component.spec.ts +23 -0
  276. package/src/lib/components/trax-store/trax-store.component.ts +172 -0
  277. package/src/lib/components/traxpopup/traxpopup.component.html +130 -0
  278. package/src/lib/components/traxpopup/traxpopup.component.scss +225 -0
  279. package/src/lib/components/traxpopup/traxpopup.component.spec.ts +23 -0
  280. package/src/lib/components/traxpopup/traxpopup.component.ts +71 -0
  281. package/src/lib/services/trax.service.spec.ts +16 -0
  282. package/src/lib/services/trax.service.ts +789 -0
  283. package/src/lib/tango-analyse-trax-routing.module.ts +151 -0
  284. package/src/lib/tango-analyse-trax.module.ts +140 -0
  285. package/{public-api.d.ts → src/public-api.ts} +6 -2
  286. package/tsconfig.lib.json +14 -0
  287. package/tsconfig.lib.prod.json +10 -0
  288. package/tsconfig.spec.json +14 -0
  289. package/esm2022/lib/components/action-centre/action-centre.component.mjs +0 -288
  290. package/esm2022/lib/components/activity-log/activity-log.component.mjs +0 -150
  291. package/esm2022/lib/components/activity-log-v2/activity-log-v2.component.mjs +0 -502
  292. package/esm2022/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.mjs +0 -114
  293. package/esm2022/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.mjs +0 -24
  294. package/esm2022/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.mjs +0 -126
  295. package/esm2022/lib/components/add-checklist/add-checklist.component.mjs +0 -2352
  296. package/esm2022/lib/components/add-checklist/checklist-popup/checklist-popup.component.mjs +0 -612
  297. package/esm2022/lib/components/add-checklist/counter/counter.component.mjs +0 -138
  298. package/esm2022/lib/components/add-multitask/add-multitask.component.mjs +0 -604
  299. package/esm2022/lib/components/add-multitask/ascending-validator.mjs +0 -11
  300. package/esm2022/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.mjs +0 -297
  301. package/esm2022/lib/components/add-multitask/create-task.data.mjs +0 -372
  302. package/esm2022/lib/components/add-multitask/create-task.interface.mjs +0 -2
  303. package/esm2022/lib/components/add-multitask/unique-string-validator.mjs +0 -10
  304. package/esm2022/lib/components/add-multitask/whitespace-validator.mjs +0 -10
  305. package/esm2022/lib/components/add-task/add-task.component.mjs +0 -561
  306. package/esm2022/lib/components/add-task/ascending-validator.mjs +0 -11
  307. package/esm2022/lib/components/add-task/create-task.data.mjs +0 -372
  308. package/esm2022/lib/components/add-task/create-task.interface.mjs +0 -2
  309. package/esm2022/lib/components/add-task/unique-string-validator.mjs +0 -10
  310. package/esm2022/lib/components/add-task/whitespace-validator.mjs +0 -10
  311. package/esm2022/lib/components/approval-popup/approval-popup.component.mjs +0 -30
  312. package/esm2022/lib/components/checklist/checklist.component.mjs +0 -327
  313. package/esm2022/lib/components/checklist-configure/assign/assign.component.mjs +0 -912
  314. package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +0 -4161
  315. package/esm2022/lib/components/checklistlayout/checklistlayout.component.mjs +0 -44
  316. package/esm2022/lib/components/chip-dropdown/chip-dropdown.component.mjs +0 -120
  317. package/esm2022/lib/components/create-task/create-task.component.mjs +0 -585
  318. package/esm2022/lib/components/create-task/create-task.data.mjs +0 -372
  319. package/esm2022/lib/components/create-task/create-task.interface.mjs +0 -2
  320. package/esm2022/lib/components/create-task/validators/ascending-validator.mjs +0 -11
  321. package/esm2022/lib/components/create-task/validators/unique-string-validator.mjs +0 -10
  322. package/esm2022/lib/components/create-task/validators/whitespace-validator.mjs +0 -10
  323. package/esm2022/lib/components/custom-select/custom-select.component.mjs +0 -240
  324. package/esm2022/lib/components/dashboard/dashboard.component.mjs +0 -532
  325. package/esm2022/lib/components/dashboard-info/dashboard-info.component.mjs +0 -741
  326. package/esm2022/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.mjs +0 -155
  327. package/esm2022/lib/components/dashboard-layout/dashboard-layout.component.mjs +0 -12
  328. package/esm2022/lib/components/disabled-select/disabled-select.component.mjs +0 -158
  329. package/esm2022/lib/components/export-gallery/export-gallery.component.mjs +0 -266
  330. package/esm2022/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.mjs +0 -105
  331. package/esm2022/lib/components/eye-test-audit/custom-select/custom-select.component.mjs +0 -240
  332. package/esm2022/lib/components/eye-test-audit/eye-test/eye-test.component.mjs +0 -1733
  333. package/esm2022/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.mjs +0 -24
  334. package/esm2022/lib/components/eye-test-audit/eye-test-audit/eye-test-audit-routing.module.mjs +0 -34
  335. package/esm2022/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.mjs +0 -27
  336. package/esm2022/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.module.mjs +0 -71
  337. package/esm2022/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.mjs +0 -823
  338. package/esm2022/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.mjs +0 -412
  339. package/esm2022/lib/components/eye-test-audit/group-select/group-select.component.mjs +0 -157
  340. package/esm2022/lib/components/eye-test-audit/reactive-select/reactive-select.component.mjs +0 -105
  341. package/esm2022/lib/components/eye-test-audit/select-drop/select-drop.component.mjs +0 -162
  342. package/esm2022/lib/components/eye-test-audit/services/eye-test-audit.service.mjs +0 -166
  343. package/esm2022/lib/components/flag-layout/flag-layout.component.mjs +0 -12
  344. package/esm2022/lib/components/flags/flags.component.mjs +0 -263
  345. package/esm2022/lib/components/flags/flags.interface.mjs +0 -2
  346. package/esm2022/lib/components/flags-info/flags-info.component.mjs +0 -452
  347. package/esm2022/lib/components/flags-info/flags-info.interface.mjs +0 -2
  348. package/esm2022/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.mjs +0 -71
  349. package/esm2022/lib/components/flags-new/flags-new.component.mjs +0 -335
  350. package/esm2022/lib/components/flags-new/flags-new.interface.mjs +0 -2
  351. package/esm2022/lib/components/gallery/gallery.component.mjs +0 -3402
  352. package/esm2022/lib/components/group-select/group-select.component.mjs +0 -155
  353. package/esm2022/lib/components/image-popup/image-popup.component.mjs +0 -25
  354. package/esm2022/lib/components/lib/custom-select/custom-select.component.mjs +0 -158
  355. package/esm2022/lib/components/manage-task/manage-task.component.mjs +0 -264
  356. package/esm2022/lib/components/managechecklist/managechecklist.component.mjs +0 -186
  357. package/esm2022/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.mjs +0 -229
  358. package/esm2022/lib/components/multi-date-datepicker/multi-date-datepicker.component.mjs +0 -124
  359. package/esm2022/lib/components/orders/orders.component.mjs +0 -171
  360. package/esm2022/lib/components/pagination/pagination.component.mjs +0 -62
  361. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +0 -108
  362. package/esm2022/lib/components/reports/date-picker/date-picker.component.mjs +0 -60
  363. package/esm2022/lib/components/reports/reports.component.mjs +0 -300
  364. package/esm2022/lib/components/reports/reports.interface.mjs +0 -2
  365. package/esm2022/lib/components/tango-analyse-trax/tango-analyse-trax.component.mjs +0 -32
  366. package/esm2022/lib/components/task/task.component.mjs +0 -341
  367. package/esm2022/lib/components/task-configure/task-configure.component.mjs +0 -1532
  368. package/esm2022/lib/components/task-configure/task-configure.interface.mjs +0 -2
  369. package/esm2022/lib/components/task-info/task-info.component.mjs +0 -375
  370. package/esm2022/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.mjs +0 -208
  371. package/esm2022/lib/components/task-layout/task-layout.component.mjs +0 -12
  372. package/esm2022/lib/components/task-logs/task-logs.component.mjs +0 -104
  373. package/esm2022/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.mjs +0 -107
  374. package/esm2022/lib/components/trax-store/trax-store.component.mjs +0 -179
  375. package/esm2022/lib/components/traxpopup/traxpopup.component.mjs +0 -70
  376. package/esm2022/lib/services/trax.service.mjs +0 -559
  377. package/esm2022/lib/tango-analyse-trax-routing.module.mjs +0 -153
  378. package/esm2022/lib/tango-analyse-trax.module.mjs +0 -221
  379. package/esm2022/public-api.mjs +0 -6
  380. package/esm2022/tango-app-ui-analyse-trax.mjs +0 -5
  381. package/fesm2022/tango-app-ui-analyse-trax.mjs +0 -28896
  382. package/fesm2022/tango-app-ui-analyse-trax.mjs.map +0 -1
  383. package/index.d.ts +0 -5
  384. package/lib/components/action-centre/action-centre.component.d.ts +0 -68
  385. package/lib/components/activity-log/activity-log.component.d.ts +0 -39
  386. package/lib/components/activity-log-v2/activity-log-v2.component.d.ts +0 -78
  387. package/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.d.ts +0 -24
  388. package/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.d.ts +0 -9
  389. package/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.d.ts +0 -34
  390. package/lib/components/add-checklist/add-checklist.component.d.ts +0 -121
  391. package/lib/components/add-checklist/checklist-popup/checklist-popup.component.d.ts +0 -45
  392. package/lib/components/add-checklist/counter/counter.component.d.ts +0 -29
  393. package/lib/components/add-multitask/add-multitask.component.d.ts +0 -102
  394. package/lib/components/add-multitask/ascending-validator.d.ts +0 -2
  395. package/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.d.ts +0 -45
  396. package/lib/components/add-multitask/create-task.data.d.ts +0 -293
  397. package/lib/components/add-multitask/create-task.interface.d.ts +0 -159
  398. package/lib/components/add-multitask/unique-string-validator.d.ts +0 -2
  399. package/lib/components/add-multitask/whitespace-validator.d.ts +0 -2
  400. package/lib/components/add-task/add-task.component.d.ts +0 -89
  401. package/lib/components/add-task/ascending-validator.d.ts +0 -2
  402. package/lib/components/add-task/create-task.data.d.ts +0 -293
  403. package/lib/components/add-task/create-task.interface.d.ts +0 -161
  404. package/lib/components/add-task/unique-string-validator.d.ts +0 -2
  405. package/lib/components/add-task/whitespace-validator.d.ts +0 -2
  406. package/lib/components/approval-popup/approval-popup.component.d.ts +0 -14
  407. package/lib/components/checklist/checklist.component.d.ts +0 -40
  408. package/lib/components/checklist-configure/assign/assign.component.d.ts +0 -105
  409. package/lib/components/checklist-configure/checklist-configure.component.d.ts +0 -325
  410. package/lib/components/checklistlayout/checklistlayout.component.d.ts +0 -15
  411. package/lib/components/chip-dropdown/chip-dropdown.component.d.ts +0 -28
  412. package/lib/components/create-task/create-task.component.d.ts +0 -76
  413. package/lib/components/create-task/create-task.data.d.ts +0 -293
  414. package/lib/components/create-task/create-task.interface.d.ts +0 -163
  415. package/lib/components/create-task/validators/ascending-validator.d.ts +0 -2
  416. package/lib/components/create-task/validators/unique-string-validator.d.ts +0 -2
  417. package/lib/components/create-task/validators/whitespace-validator.d.ts +0 -2
  418. package/lib/components/custom-select/custom-select.component.d.ts +0 -35
  419. package/lib/components/dashboard/dashboard.component.d.ts +0 -80
  420. package/lib/components/dashboard-info/dashboard-info.component.d.ts +0 -117
  421. package/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.d.ts +0 -41
  422. package/lib/components/dashboard-layout/dashboard-layout.component.d.ts +0 -5
  423. package/lib/components/disabled-select/disabled-select.component.d.ts +0 -34
  424. package/lib/components/export-gallery/export-gallery.component.d.ts +0 -44
  425. package/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.d.ts +0 -26
  426. package/lib/components/eye-test-audit/custom-select/custom-select.component.d.ts +0 -35
  427. package/lib/components/eye-test-audit/eye-test/eye-test.component.d.ts +0 -218
  428. package/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.d.ts +0 -12
  429. package/lib/components/eye-test-audit/eye-test-audit/eye-test-audit-routing.module.d.ts +0 -7
  430. package/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.d.ts +0 -11
  431. package/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.module.d.ts +0 -21
  432. package/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.d.ts +0 -129
  433. package/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.d.ts +0 -86
  434. package/lib/components/eye-test-audit/group-select/group-select.component.d.ts +0 -33
  435. package/lib/components/eye-test-audit/reactive-select/reactive-select.component.d.ts +0 -32
  436. package/lib/components/eye-test-audit/select-drop/select-drop.component.d.ts +0 -33
  437. package/lib/components/eye-test-audit/services/eye-test-audit.service.d.ts +0 -47
  438. package/lib/components/flag-layout/flag-layout.component.d.ts +0 -5
  439. package/lib/components/flags/flags.component.d.ts +0 -52
  440. package/lib/components/flags-info/flags-info.component.d.ts +0 -73
  441. package/lib/components/flags-info/flags-info.interface.d.ts +0 -430
  442. package/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.d.ts +0 -13
  443. package/lib/components/flags-new/flags-new.component.d.ts +0 -60
  444. package/lib/components/gallery/gallery.component.d.ts +0 -261
  445. package/lib/components/group-select/group-select.component.d.ts +0 -33
  446. package/lib/components/image-popup/image-popup.component.d.ts +0 -11
  447. package/lib/components/lib/custom-select/custom-select.component.d.ts +0 -33
  448. package/lib/components/manage-task/manage-task.component.d.ts +0 -47
  449. package/lib/components/managechecklist/managechecklist.component.d.ts +0 -33
  450. package/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.d.ts +0 -40
  451. package/lib/components/multi-date-datepicker/multi-date-datepicker.component.d.ts +0 -27
  452. package/lib/components/orders/orders.component.d.ts +0 -38
  453. package/lib/components/pagination/pagination.component.d.ts +0 -16
  454. package/lib/components/reactive-select/reactive-select.component.d.ts +0 -32
  455. package/lib/components/reports/date-picker/date-picker.component.d.ts +0 -23
  456. package/lib/components/reports/reports.component.d.ts +0 -55
  457. package/lib/components/tango-analyse-trax/tango-analyse-trax.component.d.ts +0 -14
  458. package/lib/components/task/task.component.d.ts +0 -70
  459. package/lib/components/task-configure/task-configure.component.d.ts +0 -142
  460. package/lib/components/task-configure/task-configure.interface.d.ts +0 -128
  461. package/lib/components/task-info/task-info.component.d.ts +0 -76
  462. package/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.d.ts +0 -61
  463. package/lib/components/task-layout/task-layout.component.d.ts +0 -5
  464. package/lib/components/task-logs/task-logs.component.d.ts +0 -27
  465. package/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.d.ts +0 -26
  466. package/lib/components/trax-store/trax-store.component.d.ts +0 -45
  467. package/lib/components/traxpopup/traxpopup.component.d.ts +0 -24
  468. package/lib/services/trax.service.d.ts +0 -175
  469. package/lib/tango-analyse-trax-routing.module.d.ts +0 -7
  470. package/lib/tango-analyse-trax.module.d.ts +0 -68
@@ -1,612 +0,0 @@
1
- import { Component, Input, ViewChild } from "@angular/core";
2
- import * as XLSX from 'xlsx';
3
- import { takeUntil, Subject } from 'rxjs';
4
- import dayjs from 'dayjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/forms";
7
- import * as i2 from "tango-app-ui-shared";
8
- import * as i3 from "../../../services/trax.service";
9
- import * as i4 from "@angular/router";
10
- import * as i5 from "@ng-bootstrap/ng-bootstrap";
11
- import * as i6 from "@angular/common";
12
- export class ChecklistPopupComponent {
13
- fb;
14
- toast;
15
- sopService;
16
- router;
17
- dialogRef;
18
- dialog;
19
- cd;
20
- checklistForm;
21
- clientId;
22
- type;
23
- checklistData;
24
- afterValidation;
25
- fileInput;
26
- fileInput1;
27
- fileName;
28
- fileSize;
29
- sectionDetails = [
30
- {
31
- name: "Section 1",
32
- sectionNumber: 1,
33
- questions: [],
34
- },
35
- ];
36
- detach = new Subject();
37
- excelData = [];
38
- excelError;
39
- dayjs = dayjs;
40
- constructor(fb, toast, sopService, router, dialogRef, dialog, cd) {
41
- this.fb = fb;
42
- this.toast = toast;
43
- this.sopService = sopService;
44
- this.router = router;
45
- this.dialogRef = dialogRef;
46
- this.dialog = dialog;
47
- this.cd = cd;
48
- this.checklistForm = this.fb.group({
49
- name: [""],
50
- description: [""],
51
- mode: ["individual"],
52
- });
53
- }
54
- ngOnInit() {
55
- if (this.type != "create") {
56
- this.checklistForm.get("mode")?.setValue("bulk");
57
- }
58
- }
59
- get mode() {
60
- return this.checklistForm.value.mode;
61
- }
62
- selectMode(mode) {
63
- this.checklistForm.patchValue({ mode });
64
- }
65
- onFileSelected(event) {
66
- this.excelData = [];
67
- this.excelError = null;
68
- this.sectionDetails = [];
69
- const file = event.target.files[0];
70
- const target = event.target;
71
- let isExcelFile = !!target.files[0].name.match(/(.xls|.xlsx)/);
72
- if (!isExcelFile) {
73
- this.toast.getErrorToast("Please Upload a valid xlsx file");
74
- }
75
- if (isExcelFile) {
76
- const reader = new FileReader();
77
- reader.readAsBinaryString(target.files[0]);
78
- reader.onload = (e) => {
79
- const bstr = e.target.result;
80
- const wb = XLSX.read(bstr, { type: "binary" });
81
- const wsname = wb.SheetNames[0];
82
- const ws = wb.Sheets[wsname];
83
- let data = XLSX.utils.sheet_to_json(ws, { defval: "" });
84
- if (!data.length) {
85
- this.toast.getErrorToast("Please upload a valid file");
86
- }
87
- this.excelData = data;
88
- let error = [];
89
- let questionList = [];
90
- this.excelData.forEach((ele, index) => {
91
- if (!ele?.["Section Name"]?.toString()?.trim()) {
92
- error.push(`Invalid Section Name - A${index + 2}`);
93
- }
94
- if (!ele?.["Question"]?.toString()?.trim()) {
95
- error.push(`Invalid Question Name - B${index + 2}`);
96
- }
97
- if (!ele?.["Answer Type"]?.trim()) {
98
- error.push(`Invalid Answer Type - C${index + 2}`);
99
- }
100
- if (ele?.["Answer Type"]?.trim() &&
101
- [
102
- "Multiple Choice Single",
103
- "Multiple Choice Multiple",
104
- "Dropdown",
105
- ].includes(ele?.["Answer Type"]) &&
106
- !ele?.["Answer Options"]?.toString()?.trim()) {
107
- error.push(`Invalid Answer Options - D${index + 2}`);
108
- }
109
- let qName = ele?.["Section Name"]?.toString()?.trim().toLowerCase() +
110
- ele?.["Question"]?.toString()?.trim().toLowerCase();
111
- if (!questionList.includes(qName)) {
112
- questionList.push(qName);
113
- }
114
- else {
115
- error.push(`${ele?.["Question"]?.trim()} question is Duplicated`);
116
- }
117
- });
118
- if (error.length) {
119
- const popupcontent = {
120
- displayprop: false,
121
- imagesrc: `<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>`,
122
- title: `Invalid details!`,
123
- content: `Please provide correct and complete store information.`,
124
- buttontype: "error",
125
- error: error,
126
- };
127
- this.excelError = popupcontent;
128
- return;
129
- }
130
- let sectionNumber = 0;
131
- let answerType = {
132
- "Descriptive Answer": "descriptive",
133
- "A/B Question": "yes/no",
134
- "Multiple Choice Single": "multiplechoicesingle",
135
- "Multiple Choice Multiple": "multiplechoicemultiple",
136
- "Capture Image with Description": "descriptiveImage",
137
- "Capture Image as answer": "image",
138
- "Capture video as answer": "video",
139
- "Capture Multiple Image": "multipleImage",
140
- Date: "date",
141
- "Linear Scale": "linearscale",
142
- "Capture Image/Video as Answer": "image/video",
143
- Time: "time",
144
- Dropdown: "dropdown",
145
- };
146
- let secDetails = data.reduce((acc, ele) => {
147
- let sectionName = ele["Section Name"]?.toString()?.trim().toLowerCase();
148
- if (!acc?.[sectionName]) {
149
- sectionNumber++;
150
- acc[`${sectionName}`] = {
151
- name: ele["Section Name"]?.toString()?.trim(),
152
- sectionNumber: sectionNumber,
153
- questions: [
154
- {
155
- qno: 1,
156
- qname: ele["Question"]?.toString()?.trim(),
157
- oldQname: ele["Question"]?.toString()?.trim(),
158
- answerType: answerType[`${ele["Answer Type"]}`],
159
- answers: this.findAnswer(answerType[`${ele["Answer Type"]}`], ele["Answer Options"]),
160
- runAI: false,
161
- runAIDefault: false,
162
- allowUploadfromGallery: false,
163
- linkType: false,
164
- multiQuestionReferenceImage: [],
165
- questionReferenceImage: "",
166
- runAIFeatures: [],
167
- disableRunAI: false,
168
- runAIDescription: "",
169
- allowMultiple: false,
170
- compliance: false,
171
- descriptivetype: "text",
172
- },
173
- ],
174
- };
175
- }
176
- else {
177
- acc[`${sectionName}`].questions.push({
178
- qno: acc[`${sectionName}`].questions.length + 1,
179
- qname: ele["Question"]?.toString()?.trim(),
180
- oldQname: ele["Question"]?.toString()?.trim(),
181
- answerType: answerType[`${ele["Answer Type"]}`],
182
- answers: this.findAnswer(answerType[`${ele["Answer Type"]}`], ele["Answer Options"]),
183
- runAI: false,
184
- runAIDefault: false,
185
- allowUploadfromGallery: false,
186
- linkType: false,
187
- multiQuestionReferenceImage: [],
188
- questionReferenceImage: "",
189
- runAIFeatures: [],
190
- disableRunAI: false,
191
- runAIDescription: "",
192
- allowMultiple: false,
193
- compliance: false,
194
- descriptivetype: "text",
195
- });
196
- }
197
- return acc;
198
- }, {});
199
- this.sectionDetails = Object.values(secDetails);
200
- if (this.fileInput) {
201
- this.fileInput.nativeElement.value = "";
202
- }
203
- if (this.fileInput1) {
204
- this.fileInput1.nativeElement.value = "";
205
- }
206
- };
207
- }
208
- if (file) {
209
- this.fileName = file.name;
210
- this.fileSize = Math.round(file.size / 1024);
211
- }
212
- }
213
- onDragOver(event) {
214
- event.preventDefault();
215
- }
216
- onDrop(event) {
217
- event.preventDefault();
218
- const file = event.dataTransfer.files[0];
219
- if (file) {
220
- this.fileName = file.name;
221
- this.fileSize = Math.round(file.size / 1024);
222
- }
223
- }
224
- Reupload() {
225
- if (this.fileInput) {
226
- this.fileInput.nativeElement.value = "";
227
- }
228
- if (this.fileInput1) {
229
- this.fileInput1.nativeElement.value = "";
230
- }
231
- let ele = document.getElementById("kt_account_team_size_select_2");
232
- ele?.click();
233
- this.cd.detectChanges();
234
- }
235
- createChecklist() {
236
- if (!this.checklistForm.value.name) {
237
- this.toast.getErrorToast("Checklist Name is missing");
238
- return;
239
- }
240
- if (!this.excelData.length && this.mode == "bulk") {
241
- this.toast.getErrorToast("Please upload a valid file");
242
- return;
243
- }
244
- let params = {
245
- checklistName: this.checklistForm.value.name?.trim(),
246
- checklistDescription: this.checklistForm.value.description?.trim(),
247
- sections: this.sectionDetails,
248
- clientId: this.clientId,
249
- submitType: "save",
250
- };
251
- this.sopService
252
- .createChecklist(params)
253
- .pipe(takeUntil(this.detach))
254
- .subscribe((res) => {
255
- if (res) {
256
- if (res?.code == 200) {
257
- this.toast.getSuccessToast("Checklist created successfully");
258
- this.router.navigateByUrl(`/manage/trax/createChecklist?checklistId=${res.data.checklistId}`);
259
- this.dialogRef.dismiss();
260
- }
261
- else {
262
- this.toast.getErrorToast("Unable to create checklist!");
263
- }
264
- }
265
- else {
266
- this.toast.getErrorToast("Unable to create checklist!");
267
- }
268
- }, (error) => {
269
- let err = error?.error?.error?.message ||
270
- "Unable to create checklist!Server Error!";
271
- this.toast.getErrorToast(err);
272
- });
273
- }
274
- findAnswer(type, options) {
275
- let answer = [];
276
- switch (type) {
277
- case "yes/no":
278
- answer = [
279
- {
280
- answer: "Yes",
281
- answeroptionNumber: 1,
282
- sopFlag: false,
283
- validation: false,
284
- validationType: "Capture Image",
285
- linkedQuestion: 0,
286
- showLinked: false,
287
- referenceImage: "",
288
- runAI: false,
289
- allowUploadfromGallery: false,
290
- complianceScore: 0,
291
- },
292
- {
293
- answer: "No",
294
- answeroptionNumber: 2,
295
- sopFlag: false,
296
- validation: false,
297
- validationType: "Capture Image",
298
- linkedQuestion: 0,
299
- showLinked: false,
300
- referenceImage: "",
301
- runAI: false,
302
- allowUploadfromGallery: false,
303
- complianceScore: 0,
304
- },
305
- ];
306
- return answer;
307
- break;
308
- case "descriptive":
309
- answer = [
310
- {
311
- answer: "",
312
- sopFlag: false,
313
- validation: false,
314
- validationType: "",
315
- validationAnswer: "",
316
- referenceImage: [],
317
- showLinked: false,
318
- linkedQuestion: 0,
319
- nestedQuestion: [],
320
- descriptivetype: "text",
321
- },
322
- ];
323
- return answer;
324
- break;
325
- case "multiplechoicesingle":
326
- answer = [];
327
- options.split(",").forEach((ele) => {
328
- if (ele.trim()) {
329
- answer.push({
330
- answer: ele,
331
- sopFlag: false,
332
- validation: false,
333
- validationType: "Capture Image",
334
- linkedQuestion: 0,
335
- showLinked: false,
336
- referenceImage: [],
337
- runAI: false,
338
- allowUploadfromGallery: false,
339
- nestedQuestion: [],
340
- complianceScore: 0,
341
- });
342
- }
343
- });
344
- return answer;
345
- break;
346
- case "multiplechoicemultiple":
347
- answer = [];
348
- options.split(",").forEach((ele) => {
349
- if (ele?.trim()) {
350
- answer.push({
351
- answer: ele,
352
- sopFlag: false,
353
- validation: false,
354
- validationType: "Capture Image",
355
- linkedQuestion: 0,
356
- showLinked: false,
357
- referenceImage: [],
358
- runAI: false,
359
- allowUploadfromGallery: false,
360
- nestedQuestion: [],
361
- complianceScore: 0,
362
- });
363
- }
364
- });
365
- return answer;
366
- break;
367
- case "descriptiveImage":
368
- answer = [
369
- {
370
- answer: "",
371
- sopFlag: false,
372
- validation: false,
373
- validationType: "",
374
- validationAnswer: "",
375
- referenceImage: [],
376
- showLinked: false,
377
- linkedQuestion: 0,
378
- nestedQuestion: [],
379
- },
380
- ];
381
- return answer;
382
- break;
383
- case "image":
384
- answer = [
385
- {
386
- answer: "",
387
- sopFlag: false,
388
- validation: false,
389
- validationType: "",
390
- validationAnswer: "",
391
- referenceImage: [],
392
- showLinked: false,
393
- linkedQuestion: 0,
394
- nestedQuestion: [],
395
- matchedCount: 0,
396
- notMatchedCount: 0,
397
- },
398
- ];
399
- return answer;
400
- break;
401
- case "video":
402
- answer = [
403
- {
404
- answer: "",
405
- sopFlag: false,
406
- validation: false,
407
- validationType: "",
408
- validationAnswer: "",
409
- referenceImage: [],
410
- showLinked: false,
411
- linkedQuestion: 0,
412
- nestedQuestion: [],
413
- },
414
- ];
415
- return answer;
416
- break;
417
- case "multipleImage":
418
- answer = [
419
- {
420
- answer: "",
421
- sopFlag: false,
422
- validation: false,
423
- validationType: "",
424
- validationAnswer: "",
425
- referenceImage: [],
426
- showLinked: false,
427
- linkedQuestion: 0,
428
- nestedQuestion: [],
429
- },
430
- ];
431
- return answer;
432
- break;
433
- case "date":
434
- answer = [
435
- {
436
- answer: "",
437
- sopFlag: false,
438
- validation: false,
439
- validationType: "",
440
- validationAnswer: "",
441
- referenceImage: [],
442
- showLinked: false,
443
- linkedQuestion: 0,
444
- nestedQuestion: [],
445
- historicDate: false,
446
- startDate: this.dayjs().format("DD-MM-YYYY"),
447
- endDate: this.dayjs().format("DD-MM-YYYY"),
448
- matchedCount: 0,
449
- notMatchedCount: 0,
450
- },
451
- ];
452
- return answer;
453
- break;
454
- case "linearscale":
455
- answer = [
456
- {
457
- answer: "",
458
- sopFlag: false,
459
- validation: false,
460
- validationType: "",
461
- validationAnswer: "",
462
- referenceImage: [],
463
- showLinked: false,
464
- linkedQuestion: 0,
465
- rangeStart: 0,
466
- rangeEnd: 100,
467
- nestedQuestion: [],
468
- linearType: "number",
469
- minValue: 0,
470
- maxValue: 100,
471
- matchedCount: 0,
472
- notMatchedCount: 0,
473
- },
474
- ];
475
- return answer;
476
- break;
477
- case "time":
478
- answer = [
479
- {
480
- answer: "",
481
- sopFlag: false,
482
- validation: false,
483
- validationType: "",
484
- validationAnswer: "",
485
- referenceImage: [],
486
- showLinked: false,
487
- linkedQuestion: 0,
488
- nestedQuestion: [],
489
- },
490
- ];
491
- return answer;
492
- break;
493
- case "image/video":
494
- answer = [
495
- {
496
- answer: "",
497
- sopFlag: false,
498
- validation: false,
499
- validationType: "",
500
- validationAnswer: "",
501
- referenceImage: [],
502
- showLinked: false,
503
- linkedQuestion: 0,
504
- nestedQuestion: [],
505
- limit: false,
506
- videoLimit: 0,
507
- imageLimit: 0,
508
- },
509
- ];
510
- return answer;
511
- break;
512
- case "dropdown":
513
- answer = [];
514
- options.split(",").forEach((ele) => {
515
- if (ele?.trim()) {
516
- answer.push({
517
- answer: ele,
518
- sopFlag: false,
519
- validation: false,
520
- validationType: "Capture Image",
521
- linkedQuestion: 0,
522
- showLinked: false,
523
- referenceImage: [],
524
- runAI: false,
525
- allowUploadfromGallery: false,
526
- nestedQuestion: [],
527
- complianceScore: 0,
528
- });
529
- }
530
- });
531
- return answer;
532
- break;
533
- default:
534
- return [];
535
- }
536
- }
537
- downloadTemplate() {
538
- this.sopService
539
- .downloadQuestion(this.checklistData.checklistId)
540
- .pipe(takeUntil(this.detach))
541
- .subscribe((res) => {
542
- if (res) {
543
- this.sopService.saveAsExcelFile(res, "Checklist Question");
544
- }
545
- else {
546
- this.toast.getErrorToast("Unable to download template!");
547
- }
548
- }, (error) => {
549
- this.toast.getErrorToast("Unable to download template!");
550
- });
551
- }
552
- updateChecklist() {
553
- if (!this.checklistData.checkListName) {
554
- this.toast.getErrorToast("Checklist Name is missing");
555
- return;
556
- }
557
- if (!this.excelData.length) {
558
- this.toast.getErrorToast("Please upload a valid file");
559
- return;
560
- }
561
- let params = {
562
- checklistName: this.checklistData.checkListName?.trim(),
563
- checklistDescription: this.checklistData.checkListDescription?.trim(),
564
- sections: this.sectionDetails,
565
- clientId: this.checklistData.clientId,
566
- submitType: "save",
567
- };
568
- this.sopService
569
- .getUpdateChecklist(this.checklistData.checklistId, params)
570
- .pipe(takeUntil(this.detach))
571
- .subscribe((res) => {
572
- if (res) {
573
- if (res?.code == 200) {
574
- this.dialogRef.close("reload");
575
- this.toast.getSuccessToast("Checklist updated successfully");
576
- }
577
- else {
578
- this.toast.getErrorToast("Unable to update checklist!");
579
- }
580
- }
581
- else {
582
- this.toast.getErrorToast("Unable to update checklist!");
583
- }
584
- }, (error) => {
585
- let err = error?.error?.error?.message ||
586
- "Unable to update checklist!Server Error!";
587
- this.toast.getErrorToast(err);
588
- });
589
- }
590
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChecklistPopupComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ToastService }, { token: i3.TraxService }, { token: i4.Router }, { token: i5.NgbActiveModal }, { token: i5.NgbModal }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
591
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ChecklistPopupComponent, selector: "lib-checklist-popup", inputs: { clientId: "clientId", type: "type", checklistData: "checklistData" }, viewQueries: [{ propertyName: "afterValidation", first: true, predicate: ["afterValidation"], descendants: true }, { propertyName: "fileInput", first: true, predicate: ["file"], descendants: true }, { propertyName: "fileInput1", first: true, predicate: ["file1"], descendants: true }], ngImport: i0, template: "<div class=\"checklist-card\">\r\n\r\n <!-- Header -->\r\n <div *ngIf=\"!excelData.length\">\r\n <div class=\"d-flex align-items-center mb-3\">\r\n <div class=\"title-icon me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M28 21V35M21 28H35\" stroke=\"#009BF3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"mb-0 titleText\">{{type == 'create' ? 'Create Checklist' : 'Bulk Upload'}}</div>\r\n </div>\r\n \r\n <form [formGroup]=\"checklistForm\">\r\n \r\n <!-- Checklist Name -->\r\n <div class=\"mb-3\" *ngIf=\"type == 'create'\">\r\n <label class=\"form-label\">Checklist Name</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"name\">\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"mb-3\" *ngIf=\"type == 'create'\">\r\n <label class=\"form-label\">Description</label>\r\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"></textarea>\r\n </div>\r\n \r\n <!-- Mode Selection -->\r\n <div class=\"row g-2 my-3\" *ngIf=\"type == 'create'\">\r\n \r\n <div class=\"col-md-6\">\r\n <div\r\n class=\"option-box\"\r\n [class.option-active]=\"mode==='individual'\"\r\n (click)=\"selectMode('individual')\">\r\n \r\n <span>Add questions individually</span>\r\n <input type=\"radio\" value=\"individual\" formControlName=\"mode\" style=\"width:15px;height:15px\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-md-6\">\r\n <div\r\n class=\"option-box\"\r\n [class.option-active]=\"mode==='bulk'\"\r\n (click)=\"selectMode('bulk')\">\r\n \r\n <span>Add questions in bulk</span>\r\n <input type=\"radio\" value=\"bulk\" formControlName=\"mode\" style=\"width:15px;height:15px\">\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <!-- Bulk Upload Section -->\r\n <div *ngIf=\"mode === 'bulk'\" class=\"bulkText\">\r\n \r\n <div class=\"my-5\">\r\n \r\n <div class=\"mb-2\">1. Use the template to upload multiple questions at once</div>\r\n \r\n <div class=\"mb-2\">\r\n 2. Download the template here -\r\n @if(type == 'create') {\r\n <a class=\"download-link\" href=\"/assets/files/checklistQuestion.xlsx\" download>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n <path d=\"M15.8359 10.8359V14.1693C15.8359 14.6113 15.6603 15.0352 15.3478 15.3478C15.0352 15.6603 14.6113 15.8359 14.1693 15.8359H2.5026C2.06058 15.8359 1.63665 15.6603 1.32409 15.3478C1.01153 15.0352 0.835938 14.6113 0.835938 14.1693V10.8359M4.16927 6.66927L8.33594 10.8359M8.33594 10.8359L12.5026 6.66927M8.33594 10.8359V0.835938\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Download Template\r\n </a>\r\n }\r\n @else {\r\n <span class=\"download-link\" (click)=\"downloadTemplate()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n <path d=\"M15.8359 10.8359V14.1693C15.8359 14.6113 15.6603 15.0352 15.3478 15.3478C15.0352 15.6603 14.6113 15.8359 14.1693 15.8359H2.5026C2.06058 15.8359 1.63665 15.6603 1.32409 15.3478C1.01153 15.0352 0.835938 14.6113 0.835938 14.1693V10.8359M4.16927 6.66927L8.33594 10.8359M8.33594 10.8359L12.5026 6.66927M8.33594 10.8359V0.835938\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Download Template\r\n </span>\r\n }\r\n </div>\r\n \r\n <div class=\"mb-2\">3. Add your data to the template</div>\r\n <div class=\"mb-2\">4. Upload it for processing</div>\r\n \r\n </div>\r\n \r\n <!-- Upload Area -->\r\n <div class=\"upload-box cursor-pointer\" (click)=\"fileInput.click()\">\r\n \r\n <div class=\"upload-icon mb-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#EAF8FF\" stroke-width=\"6\"/>\r\n <g clip-path=\"url(#clip0_19034_66996)\">\r\n <path d=\"M26.3326 26.3313L22.9992 22.998M22.9992 22.998L19.6659 26.3313M22.9992 22.998V30.498M29.9909 28.323C30.8037 27.8798 31.4458 27.1787 31.8158 26.3301C32.1858 25.4816 32.2627 24.534 32.0344 23.6369C31.8061 22.7397 31.2855 21.9442 30.5548 21.3758C29.8241 20.8074 28.925 20.4986 27.9992 20.498H26.9492C26.697 19.5223 26.2269 18.6166 25.5742 17.8488C24.9215 17.081 24.1033 16.4712 23.181 16.0651C22.2587 15.6591 21.2564 15.4674 20.2493 15.5045C19.2423 15.5416 18.2568 15.8065 17.3669 16.2793C16.477 16.7521 15.7058 17.4205 15.1114 18.2343C14.517 19.048 14.1148 19.9859 13.9351 20.9774C13.7553 21.969 13.8027 22.9884 14.0736 23.959C14.3445 24.9296 14.8319 25.8262 15.4992 26.5813\" stroke=\"#009BF3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_19034_66996\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(13 13)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n \r\n <div class=\"text-primary fw-semibold uploadText\">Click To Upload</div>\r\n \r\n <!-- Hidden File Input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n hidden\r\n (change)=\"onFileSelected($event)\"\r\n >\r\n \r\n </div>\r\n \r\n <!-- Uploaded File -->\r\n <div *ngIf=\"fileName\" class=\"upload-file\">\r\n \r\n <div class=\"d-flex align-items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\">\r\n <rect x=\"2\" y=\"2\" width=\"32\" height=\"32\" rx=\"16\" fill=\"#DAF1FF\"/>\r\n <rect x=\"2\" y=\"2\" width=\"32\" height=\"32\" rx=\"16\" stroke=\"#EAF8FF\" stroke-width=\"4\"/>\r\n <path d=\"M18.668 11.3359H14.0013C13.6477 11.3359 13.3085 11.4764 13.0585 11.7265C12.8084 11.9765 12.668 12.3156 12.668 12.6693V23.3359C12.668 23.6896 12.8084 24.0287 13.0585 24.2787C13.3085 24.5288 13.6477 24.6693 14.0013 24.6693H22.0013C22.3549 24.6693 22.6941 24.5288 22.9441 24.2787C23.1942 24.0287 23.3346 23.6896 23.3346 23.3359V16.0026M18.668 11.3359L23.3346 16.0026M18.668 11.3359V16.0026H23.3346\" stroke=\"#00A3FF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n <div class=\"d-flex flex-column align-items-start ms-5\">\r\n <div>{{fileName}}</div>\r\n <div class=\"successText\">\r\n {{fileSize}} KB \u2013 Uploaded\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\r\n <path d=\"M29.3346 14.7705V15.9972C29.333 18.8724 28.402 21.6701 26.6804 23.973C24.9589 26.2758 22.539 27.9605 19.7818 28.7757C17.0245 29.591 14.0776 29.4931 11.3806 28.4967C8.68354 27.5002 6.38084 25.6587 4.81592 23.2466C3.25099 20.8346 2.50769 17.9813 2.69687 15.1123C2.88605 12.2433 3.99758 9.51232 5.86568 7.32665C7.73377 5.14097 10.2583 3.61772 13.0629 2.98408C15.8674 2.35043 18.8017 2.64033 21.428 3.81055M29.3346 5.33055L16.0013 18.6772L12.0013 14.6772\" stroke=\"#12B76A\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n <!-- Buttons -->\r\n <div class=\"d-flex justify-content-end mt-4\">\r\n \r\n <button type=\"button\" class=\"btn btn-light me-2\" (click)=\"dialogRef.close()\">\r\n Cancel\r\n </button>\r\n \r\n <button class=\"btn btn-primary\" (click)=\"type == 'create' ? createChecklist() : updateChecklist()\">\r\n Proceed\r\n </button>\r\n \r\n </div>\r\n \r\n </form>\r\n </div>\r\n\r\n <div class=\"border-0 validateBox\" *ngIf=\"excelData.length\">\r\n <div class=\"card-header border-0 mt-0\">\r\n <div class=\"card-title mt-3\"><span class=\"config-heading fw-semibold w-auto\">Assign Stores</span></div>\r\n </div>\r\n <div class=\"card-body pt-0\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Total Records</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Rows processed</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div [ngClass]=\"excelError ? 'error-heading':''\" class=\"fw-semibold config-heading w-100\">{{excelError?.error?.length || 0}}</div>\r\n <div [ngClass]=\"excelError ? 'excel-error':''\" class=\"fw-semibold subtitle mt-1\">Error</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!excelError\" class=\"table-header mt-5\" style=\"font-weight: 400;\">\r\n <div>You're about to assign {{excelData?.length}} stores to the checklist. Are you sure want to proceed?</div>\r\n </div>\r\n <div *ngIf=\"excelError\" class=\"flex-column mt-5\">\r\n <div class=\"config-heading fw-bold\">Invalid Details !</div>\r\n <div class=\"subtitle mt-5\">Please provide correct and complete layout information.</div>\r\n <div class=\"p-5 w-100 rounded-3 border-error mt-5 flex-column\">\r\n <div *ngFor=\"let error of excelError?.error; let i = index; let last = last\" [ngClass]=\"!last ? 'mb-2' : ''\" class=\"text-error\">{{i + 1}}) {{error}}</div>\r\n </div>\r\n </div>\r\n\r\n <input style=\"visibility: hidden;\" #fileInput1 type=\"file\" id=\"kt_account_team_size_select_2\" (change)=\"onFileSelected($event)\" />\r\n </div>\r\n \r\n <div class=\"d-flex justify-content-end mt-4\">\r\n <button type=\"button\" class=\"btn btn-light me-2\" (click)=\"dialogRef.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!excelError\" (click)=\"type == 'create' ? createChecklist() : updateChecklist()\">\r\n Proceed\r\n </button>\r\n <button type=\"button\" *ngIf=\"excelError\" class=\"btn py-3 ms-3 btn-danger\" (click)=\"Reupload();\">Reupload</button>\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [".checklist-card{margin:auto;background:#fff;padding:25px}.titleText{font-family:Inter;font-weight:600;font-size:18px;line-height:28px;letter-spacing:0%;color:#101828}.option-box{border:1px solid #dee2e6;border-radius:8px;padding:20px;display:flex;justify-content:space-between;align-items:center;cursor:pointer;font-family:Inter;font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%}.option-active{border:1px solid #6BCAFF;background:#eaf8ff;color:#009bf3}.upload-box{border:2px dashed #dee2e6;border-radius:10px;padding:35px;text-align:center;background:#fafafa}.bulkText{font-family:Inter;font-weight:400!important;font-size:14px!important;line-height:20px!important;letter-spacing:0%!important;color:#344054!important;text-align:center!important}.upload-icon{width:50px;height:50px;border-radius:50%;background:#eaf3ff;display:flex;align-items:center;justify-content:center;margin:auto;color:#0d6efd;font-size:22px}.upload-file{border:1px solid #e4e4e4;border-radius:8px;padding:10px 15px;margin-top:15px;display:flex;justify-content:space-between;align-items:center}.download-link{color:#009bf3;cursor:pointer;font-family:Inter;font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize}.uploadText{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize;text-decoration:underline;text-decoration-style:solid;text-decoration-thickness:0%;color:#009bf3}::ng-deep .validateBox .successText{font-family:Inter;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#667085}::ng-deep .validateBox .text-light-primary{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;text-transform:capitalize}::ng-deep .validateBox .bg-light-primary{border-radius:8px!important;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}::ng-deep .validateBox .selectstore{color:var(--primary-700, #009BF3);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}::ng-deep .validateBox .headeralign{color:var(--gray-500, #667085);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .validateBox .assignpadding{padding:0 40px}::ng-deep .validateBox .uploadpadding{padding:0 20% 9px}::ng-deep .validateBox .subtext{color:var(--gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px;align-items:center;gap:8px;align-self:stretch}::ng-deep .validateBox .text-primary{color:var(--primary-700, #009BF3)!important}::ng-deep .validateBox .border-primary{border:1px dashed var(--Primary-500, #33B5FF)!important;background:var(--Primary-25, #F6FCFF)!important}::ng-deep .validateBox .bg-light{background:var(--Primary-25, #F6FCFF)!important}::ng-deep .validateBox .table-header{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:600;line-height:24px}::ng-deep .validateBox .text-error{color:var(--Error-700, #B42318)!important;font-size:14px;font-weight:500;line-height:20px}::ng-deep .validateBox .excel-error{color:var(--Error-600, #D92D20);font-size:14px;font-weight:500;line-height:20px}::ng-deep .validateBox .error-heading{color:var(--Error-600, #D92D20);font-size:20px;font-weight:500;line-height:30px}::ng-deep .validateBox .border-error{border:1px solid var(--Error-300, #FDA29B)!important;background:var(--Error-25, #FFFBFA)!important}::ng-deep .validateBox .popup-card{border-radius:6px;border:1px solid var(--Gray-300, #D0D5DD);background:#fff;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
592
- }
593
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChecklistPopupComponent, decorators: [{
594
- type: Component,
595
- args: [{ selector: "lib-checklist-popup", template: "<div class=\"checklist-card\">\r\n\r\n <!-- Header -->\r\n <div *ngIf=\"!excelData.length\">\r\n <div class=\"d-flex align-items-center mb-3\">\r\n <div class=\"title-icon me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M28 21V35M21 28H35\" stroke=\"#009BF3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"mb-0 titleText\">{{type == 'create' ? 'Create Checklist' : 'Bulk Upload'}}</div>\r\n </div>\r\n \r\n <form [formGroup]=\"checklistForm\">\r\n \r\n <!-- Checklist Name -->\r\n <div class=\"mb-3\" *ngIf=\"type == 'create'\">\r\n <label class=\"form-label\">Checklist Name</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"name\">\r\n </div>\r\n \r\n <!-- Description -->\r\n <div class=\"mb-3\" *ngIf=\"type == 'create'\">\r\n <label class=\"form-label\">Description</label>\r\n <textarea class=\"form-control\" rows=\"3\" formControlName=\"description\"></textarea>\r\n </div>\r\n \r\n <!-- Mode Selection -->\r\n <div class=\"row g-2 my-3\" *ngIf=\"type == 'create'\">\r\n \r\n <div class=\"col-md-6\">\r\n <div\r\n class=\"option-box\"\r\n [class.option-active]=\"mode==='individual'\"\r\n (click)=\"selectMode('individual')\">\r\n \r\n <span>Add questions individually</span>\r\n <input type=\"radio\" value=\"individual\" formControlName=\"mode\" style=\"width:15px;height:15px\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-md-6\">\r\n <div\r\n class=\"option-box\"\r\n [class.option-active]=\"mode==='bulk'\"\r\n (click)=\"selectMode('bulk')\">\r\n \r\n <span>Add questions in bulk</span>\r\n <input type=\"radio\" value=\"bulk\" formControlName=\"mode\" style=\"width:15px;height:15px\">\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <!-- Bulk Upload Section -->\r\n <div *ngIf=\"mode === 'bulk'\" class=\"bulkText\">\r\n \r\n <div class=\"my-5\">\r\n \r\n <div class=\"mb-2\">1. Use the template to upload multiple questions at once</div>\r\n \r\n <div class=\"mb-2\">\r\n 2. Download the template here -\r\n @if(type == 'create') {\r\n <a class=\"download-link\" href=\"/assets/files/checklistQuestion.xlsx\" download>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n <path d=\"M15.8359 10.8359V14.1693C15.8359 14.6113 15.6603 15.0352 15.3478 15.3478C15.0352 15.6603 14.6113 15.8359 14.1693 15.8359H2.5026C2.06058 15.8359 1.63665 15.6603 1.32409 15.3478C1.01153 15.0352 0.835938 14.6113 0.835938 14.1693V10.8359M4.16927 6.66927L8.33594 10.8359M8.33594 10.8359L12.5026 6.66927M8.33594 10.8359V0.835938\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Download Template\r\n </a>\r\n }\r\n @else {\r\n <span class=\"download-link\" (click)=\"downloadTemplate()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\">\r\n <path d=\"M15.8359 10.8359V14.1693C15.8359 14.6113 15.6603 15.0352 15.3478 15.3478C15.0352 15.6603 14.6113 15.8359 14.1693 15.8359H2.5026C2.06058 15.8359 1.63665 15.6603 1.32409 15.3478C1.01153 15.0352 0.835938 14.6113 0.835938 14.1693V10.8359M4.16927 6.66927L8.33594 10.8359M8.33594 10.8359L12.5026 6.66927M8.33594 10.8359V0.835938\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Download Template\r\n </span>\r\n }\r\n </div>\r\n \r\n <div class=\"mb-2\">3. Add your data to the template</div>\r\n <div class=\"mb-2\">4. Upload it for processing</div>\r\n \r\n </div>\r\n \r\n <!-- Upload Area -->\r\n <div class=\"upload-box cursor-pointer\" (click)=\"fileInput.click()\">\r\n \r\n <div class=\"upload-icon mb-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#EAF8FF\" stroke-width=\"6\"/>\r\n <g clip-path=\"url(#clip0_19034_66996)\">\r\n <path d=\"M26.3326 26.3313L22.9992 22.998M22.9992 22.998L19.6659 26.3313M22.9992 22.998V30.498M29.9909 28.323C30.8037 27.8798 31.4458 27.1787 31.8158 26.3301C32.1858 25.4816 32.2627 24.534 32.0344 23.6369C31.8061 22.7397 31.2855 21.9442 30.5548 21.3758C29.8241 20.8074 28.925 20.4986 27.9992 20.498H26.9492C26.697 19.5223 26.2269 18.6166 25.5742 17.8488C24.9215 17.081 24.1033 16.4712 23.181 16.0651C22.2587 15.6591 21.2564 15.4674 20.2493 15.5045C19.2423 15.5416 18.2568 15.8065 17.3669 16.2793C16.477 16.7521 15.7058 17.4205 15.1114 18.2343C14.517 19.048 14.1148 19.9859 13.9351 20.9774C13.7553 21.969 13.8027 22.9884 14.0736 23.959C14.3445 24.9296 14.8319 25.8262 15.4992 26.5813\" stroke=\"#009BF3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_19034_66996\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(13 13)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n \r\n <div class=\"text-primary fw-semibold uploadText\">Click To Upload</div>\r\n \r\n <!-- Hidden File Input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n hidden\r\n (change)=\"onFileSelected($event)\"\r\n >\r\n \r\n </div>\r\n \r\n <!-- Uploaded File -->\r\n <div *ngIf=\"fileName\" class=\"upload-file\">\r\n \r\n <div class=\"d-flex align-items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\">\r\n <rect x=\"2\" y=\"2\" width=\"32\" height=\"32\" rx=\"16\" fill=\"#DAF1FF\"/>\r\n <rect x=\"2\" y=\"2\" width=\"32\" height=\"32\" rx=\"16\" stroke=\"#EAF8FF\" stroke-width=\"4\"/>\r\n <path d=\"M18.668 11.3359H14.0013C13.6477 11.3359 13.3085 11.4764 13.0585 11.7265C12.8084 11.9765 12.668 12.3156 12.668 12.6693V23.3359C12.668 23.6896 12.8084 24.0287 13.0585 24.2787C13.3085 24.5288 13.6477 24.6693 14.0013 24.6693H22.0013C22.3549 24.6693 22.6941 24.5288 22.9441 24.2787C23.1942 24.0287 23.3346 23.6896 23.3346 23.3359V16.0026M18.668 11.3359L23.3346 16.0026M18.668 11.3359V16.0026H23.3346\" stroke=\"#00A3FF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n <div class=\"d-flex flex-column align-items-start ms-5\">\r\n <div>{{fileName}}</div>\r\n <div class=\"successText\">\r\n {{fileSize}} KB \u2013 Uploaded\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\r\n <path d=\"M29.3346 14.7705V15.9972C29.333 18.8724 28.402 21.6701 26.6804 23.973C24.9589 26.2758 22.539 27.9605 19.7818 28.7757C17.0245 29.591 14.0776 29.4931 11.3806 28.4967C8.68354 27.5002 6.38084 25.6587 4.81592 23.2466C3.25099 20.8346 2.50769 17.9813 2.69687 15.1123C2.88605 12.2433 3.99758 9.51232 5.86568 7.32665C7.73377 5.14097 10.2583 3.61772 13.0629 2.98408C15.8674 2.35043 18.8017 2.64033 21.428 3.81055M29.3346 5.33055L16.0013 18.6772L12.0013 14.6772\" stroke=\"#12B76A\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n <!-- Buttons -->\r\n <div class=\"d-flex justify-content-end mt-4\">\r\n \r\n <button type=\"button\" class=\"btn btn-light me-2\" (click)=\"dialogRef.close()\">\r\n Cancel\r\n </button>\r\n \r\n <button class=\"btn btn-primary\" (click)=\"type == 'create' ? createChecklist() : updateChecklist()\">\r\n Proceed\r\n </button>\r\n \r\n </div>\r\n \r\n </form>\r\n </div>\r\n\r\n <div class=\"border-0 validateBox\" *ngIf=\"excelData.length\">\r\n <div class=\"card-header border-0 mt-0\">\r\n <div class=\"card-title mt-3\"><span class=\"config-heading fw-semibold w-auto\">Assign Stores</span></div>\r\n </div>\r\n <div class=\"card-body pt-0\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Total Records</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Rows processed</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-80px\">\r\n <div [ngClass]=\"excelError ? 'error-heading':''\" class=\"fw-semibold config-heading w-100\">{{excelError?.error?.length || 0}}</div>\r\n <div [ngClass]=\"excelError ? 'excel-error':''\" class=\"fw-semibold subtitle mt-1\">Error</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!excelError\" class=\"table-header mt-5\" style=\"font-weight: 400;\">\r\n <div>You're about to assign {{excelData?.length}} stores to the checklist. Are you sure want to proceed?</div>\r\n </div>\r\n <div *ngIf=\"excelError\" class=\"flex-column mt-5\">\r\n <div class=\"config-heading fw-bold\">Invalid Details !</div>\r\n <div class=\"subtitle mt-5\">Please provide correct and complete layout information.</div>\r\n <div class=\"p-5 w-100 rounded-3 border-error mt-5 flex-column\">\r\n <div *ngFor=\"let error of excelError?.error; let i = index; let last = last\" [ngClass]=\"!last ? 'mb-2' : ''\" class=\"text-error\">{{i + 1}}) {{error}}</div>\r\n </div>\r\n </div>\r\n\r\n <input style=\"visibility: hidden;\" #fileInput1 type=\"file\" id=\"kt_account_team_size_select_2\" (change)=\"onFileSelected($event)\" />\r\n </div>\r\n \r\n <div class=\"d-flex justify-content-end mt-4\">\r\n <button type=\"button\" class=\"btn btn-light me-2\" (click)=\"dialogRef.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!excelError\" (click)=\"type == 'create' ? createChecklist() : updateChecklist()\">\r\n Proceed\r\n </button>\r\n <button type=\"button\" *ngIf=\"excelError\" class=\"btn py-3 ms-3 btn-danger\" (click)=\"Reupload();\">Reupload</button>\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [".checklist-card{margin:auto;background:#fff;padding:25px}.titleText{font-family:Inter;font-weight:600;font-size:18px;line-height:28px;letter-spacing:0%;color:#101828}.option-box{border:1px solid #dee2e6;border-radius:8px;padding:20px;display:flex;justify-content:space-between;align-items:center;cursor:pointer;font-family:Inter;font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%}.option-active{border:1px solid #6BCAFF;background:#eaf8ff;color:#009bf3}.upload-box{border:2px dashed #dee2e6;border-radius:10px;padding:35px;text-align:center;background:#fafafa}.bulkText{font-family:Inter;font-weight:400!important;font-size:14px!important;line-height:20px!important;letter-spacing:0%!important;color:#344054!important;text-align:center!important}.upload-icon{width:50px;height:50px;border-radius:50%;background:#eaf3ff;display:flex;align-items:center;justify-content:center;margin:auto;color:#0d6efd;font-size:22px}.upload-file{border:1px solid #e4e4e4;border-radius:8px;padding:10px 15px;margin-top:15px;display:flex;justify-content:space-between;align-items:center}.download-link{color:#009bf3;cursor:pointer;font-family:Inter;font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize}.uploadText{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize;text-decoration:underline;text-decoration-style:solid;text-decoration-thickness:0%;color:#009bf3}::ng-deep .validateBox .successText{font-family:Inter;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#667085}::ng-deep .validateBox .text-light-primary{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;text-transform:capitalize}::ng-deep .validateBox .bg-light-primary{border-radius:8px!important;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}::ng-deep .validateBox .selectstore{color:var(--primary-700, #009BF3);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}::ng-deep .validateBox .headeralign{color:var(--gray-500, #667085);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .validateBox .assignpadding{padding:0 40px}::ng-deep .validateBox .uploadpadding{padding:0 20% 9px}::ng-deep .validateBox .subtext{color:var(--gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px;align-items:center;gap:8px;align-self:stretch}::ng-deep .validateBox .text-primary{color:var(--primary-700, #009BF3)!important}::ng-deep .validateBox .border-primary{border:1px dashed var(--Primary-500, #33B5FF)!important;background:var(--Primary-25, #F6FCFF)!important}::ng-deep .validateBox .bg-light{background:var(--Primary-25, #F6FCFF)!important}::ng-deep .validateBox .table-header{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:600;line-height:24px}::ng-deep .validateBox .text-error{color:var(--Error-700, #B42318)!important;font-size:14px;font-weight:500;line-height:20px}::ng-deep .validateBox .excel-error{color:var(--Error-600, #D92D20);font-size:14px;font-weight:500;line-height:20px}::ng-deep .validateBox .error-heading{color:var(--Error-600, #D92D20);font-size:20px;font-weight:500;line-height:30px}::ng-deep .validateBox .border-error{border:1px solid var(--Error-300, #FDA29B)!important;background:var(--Error-25, #FFFBFA)!important}::ng-deep .validateBox .popup-card{border-radius:6px;border:1px solid var(--Gray-300, #D0D5DD);background:#fff;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}\n"] }]
596
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ToastService }, { type: i3.TraxService }, { type: i4.Router }, { type: i5.NgbActiveModal }, { type: i5.NgbModal }, { type: i0.ChangeDetectorRef }], propDecorators: { clientId: [{
597
- type: Input
598
- }], type: [{
599
- type: Input
600
- }], checklistData: [{
601
- type: Input
602
- }], afterValidation: [{
603
- type: ViewChild,
604
- args: ["afterValidation"]
605
- }], fileInput: [{
606
- type: ViewChild,
607
- args: ["file"]
608
- }], fileInput1: [{
609
- type: ViewChild,
610
- args: ["file1"]
611
- }] } });
612
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tsaXN0LXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtdHJheC9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWNoZWNrbGlzdC9jaGVja2xpc3QtcG9wdXAvY2hlY2tsaXN0LXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtdHJheC9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWNoZWNrbGlzdC9jaGVja2xpc3QtcG9wdXAvY2hlY2tsaXN0LXBvcHVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBbUUsTUFBTSxlQUFlLENBQUM7QUFHN0gsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFFLFNBQVMsRUFBQyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHekMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDOzs7Ozs7OztBQU8xQixNQUFNLE9BQU8sdUJBQXVCO0lBd0J4QjtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFDQTtJQTdCVixhQUFhLENBQVk7SUFDaEIsUUFBUSxDQUFTO0lBQ2pCLElBQUksQ0FBUztJQUNiLGFBQWEsQ0FBTTtJQUNFLGVBQWUsQ0FBTTtJQUNoQyxTQUFTLENBQWM7SUFDdEIsVUFBVSxDQUFjO0lBRTVDLFFBQVEsQ0FBTTtJQUNkLFFBQVEsQ0FBTTtJQUNkLGNBQWMsR0FBUTtRQUNwQjtZQUNFLElBQUksRUFBRSxXQUFXO1lBQ2pCLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLFNBQVMsRUFBRSxFQUFFO1NBQ2Q7S0FDRixDQUFDO0lBQ00sTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDL0IsU0FBUyxHQUFRLEVB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QUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2lCQUN6RDthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDZCQUE2QixDQUFDLENBQUM7YUFDekQ7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLElBQUksR0FBRyxHQUNMLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU87Z0JBQzVCLDBDQUEwQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FDRixDQUFDO0lBQ04sQ0FBQzt3R0E1bEJVLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLHlhQ2ZwQyxnMFlBOE1NOzs0RkQvTE8sdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjs4T0FNdEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDd0IsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ1QsU0FBUztzQkFBM0IsU0FBUzt1QkFBQyxNQUFNO2dCQUNHLFVBQVU7c0JBQTdCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3RyYXguc2VydmljZVwiO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi1jaGVja2xpc3QtcG9wdXBcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2NoZWNrbGlzdC1wb3B1cC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vY2hlY2tsaXN0LXBvcHVwLmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGVja2xpc3RQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY2hlY2tsaXN0Rm9ybTogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdHlwZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNoZWNrbGlzdERhdGE6IGFueTtcclxuICBAVmlld0NoaWxkKFwiYWZ0ZXJWYWxpZGF0aW9uXCIpIGFmdGVyVmFsaWRhdGlvbjogYW55O1xyXG4gIEBWaWV3Q2hpbGQoXCJmaWxlXCIpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcImZpbGUxXCIpIGZpbGVJbnB1dDEhOiBFbGVtZW50UmVmO1xyXG5cclxuICBmaWxlTmFtZTogYW55O1xyXG4gIGZpbGVTaXplOiBhbnk7XHJcbiAgc2VjdGlvbkRldGFpbHM6IGFueSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogXCJTZWN0aW9uIDFcIixcclxuICAgICAgc2VjdGlvbk51bWJlcjogMSxcclxuICAgICAgcXVlc3Rpb25zOiBbXSxcclxuICAgIH0sXHJcbiAgXTtcclxuICBwcml2YXRlIGRldGFjaCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZXhjZWxEYXRhOiBhbnkgPSBbXTtcclxuICBleGNlbEVycm9yOiBhbnk7XHJcbiAgZGF5anMgPSBkYXlqcztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgc29wU2VydmljZTogVHJheFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHtcclxuICAgIHRoaXMuY2hlY2tsaXN0Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lOiBbXCJcIl0sXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBbXCJcIl0sXHJcbiAgICAgIG1vZGU6IFtcImluZGl2aWR1YWxcIl0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudHlwZSAhPSBcImNyZWF0ZVwiKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tsaXN0Rm9ybS5nZXQoXCJtb2RlXCIpPy5zZXRWYWx1ZShcImJ1bGtcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrbGlzdEZvcm0udmFsdWUubW9kZTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE1vZGUobW9kZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNoZWNrbGlzdEZvcm0ucGF0Y2hWYWx1ZSh7IG1vZGUgfSk7XHJcbiAgfVxyXG5cclxuICBvbkZpbGVTZWxlY3RlZChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV4Y2VsRGF0YSA9IFtdO1xyXG4gICAgdGhpcy5leGNlbEVycm9yID0gbnVsbDtcclxuICAgIHRoaXMuc2VjdGlvbkRldGFpbHMgPSBbXTtcclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IDxEYXRhVHJhbnNmZXI+ZXZlbnQudGFyZ2V0O1xyXG4gICAgbGV0IGlzRXhjZWxGaWxlID0gISF0YXJnZXQuZmlsZXNbMF0ubmFtZS5tYXRjaCgvKC54bHN8Lnhsc3gpLyk7XHJcbiAgICBpZiAoIWlzRXhjZWxGaWxlKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIlBsZWFzZSBVcGxvYWQgYSB2YWxpZCB4bHN4IGZpbGVcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNFeGNlbEZpbGUpIHtcclxuICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJzdHI6IHN0cmluZyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6IFwiYmluYXJ5XCIgfSk7XHJcbiAgICAgICAgY29uc3Qgd3NuYW1lOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgIGxldCBkYXRhID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHdzLCB7IGRlZnZhbDogXCJcIiB9KTtcclxuICAgICAgICBpZiAoIWRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJQbGVhc2UgdXBsb2FkIGEgdmFsaWQgZmlsZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5leGNlbERhdGEgPSBkYXRhO1xyXG4gICAgICAgIGxldCBlcnJvcjogYW55ID0gW107XHJcbiAgICAgICAgbGV0IHF1ZXN0aW9uTGlzdDogYW55ID0gW107XHJcbiAgICAgICAgdGhpcy5leGNlbERhdGEuZm9yRWFjaCgoZWxlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGlmICghZWxlPy5bXCJTZWN0aW9uIE5hbWVcIl0/LnRvU3RyaW5nKCk/LnRyaW0oKSkge1xyXG4gICAgICAgICAgICBlcnJvci5wdXNoKGBJbnZhbGlkIFNlY3Rpb24gTmFtZSAtIEEke2luZGV4ICsgMn1gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghZWxlPy5bXCJRdWVzdGlvblwiXT8udG9TdHJpbmcoKT8udHJpbSgpKSB7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgUXVlc3Rpb24gTmFtZSAtIEIke2luZGV4ICsgMn1gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghZWxlPy5bXCJBbnN3ZXIgVHlwZVwiXT8udHJpbSgpKSB7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgQW5zd2VyIFR5cGUgLSBDJHtpbmRleCArIDJ9YCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGVsZT8uW1wiQW5zd2VyIFR5cGVcIl0/LnRyaW0oKSAmJlxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgXCJNdWx0aXBsZSBDaG9pY2UgU2luZ2xlXCIsXHJcbiAgICAgICAgICAgICAgXCJNdWx0aXBsZSBDaG9pY2UgTXVsdGlwbGVcIixcclxuICAgICAgICAgICAgICBcIkRyb3Bkb3duXCIsXHJcbiAgICAgICAgICAgIF0uaW5jbHVkZXMoZWxlPy5bXCJBbnN3ZXIgVHlwZVwiXSkgJiZcclxuICAgICAgICAgICAgIWVsZT8uW1wiQW5zd2VyIE9wdGlvbnNcIl0/LnRvU3RyaW5nKCk/LnRyaW0oKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgQW5zd2VyIE9wdGlvbnMgLSBEJHtpbmRleCArIDJ9YCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IHFOYW1lOiBzdHJpbmcgPVxyXG4gICAgICAgICAgICBlbGU/LltcIlNlY3Rpb24gTmFtZVwiXT8udG9TdHJpbmcoKT8udHJpbSgpLnRvTG93ZXJDYXNlKCkgK1xyXG4gICAgICAgICAgICBlbGU/LltcIlF1ZXN0aW9uXCJdPy50b1N0cmluZygpPy50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGlmICghcXVlc3Rpb25MaXN0LmluY2x1ZGVzKHFOYW1lKSkge1xyXG4gICAgICAgICAgICBxdWVzdGlvbkxpc3QucHVzaChxTmFtZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlcnJvci5wdXNoKGAke2VsZT8uW1wiUXVlc3Rpb25cIl0/LnRyaW0oKX0gcXVlc3Rpb24gaXMgRHVwbGljYXRlZGApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChlcnJvci5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IHBvcHVwY29udGVudCA9IHtcclxuICAgICAgICAgICAgZGlzcGxheXByb3A6IGZhbHNlLFxyXG4gICAgICAgICAgICBpbWFnZXNyYzogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNGRUYwQzdcIi8+PHBhdGggZD1cIk0yNy45OTk4IDI0LjAwMTJWMjguMDAxMk0yNy45OTk4IDMyLjAwMTJIMjguMDA5OE0yNi4yODk4IDE4Ljg2MTJMMTcuODE5OCAzMy4wMDEyQzE3LjY0NTEgMzMuMzAzNiAxNy41NTI3IDMzLjY0NjUgMTcuNTUxOCAzMy45OTU3QzE3LjU1MDggMzQuMzQ0OSAxNy42NDEzIDM0LjY4ODMgMTcuODE0MiAzNC45OTE3QzE3Ljk4NzEgMzUuMjk1MSAxOC4yMzY1IDM1LjU0NzkgMTguNTM3NSAzNS43MjVDMTguODM4NSAzNS45MDIxIDE5LjE4MDYgMzUuOTk3MyAxOS41Mjk4IDM2LjAwMTJIMzYuNDY5OEMzNi44MTkgMzUuOTk3MyAzNy4xNjExIDM1LjkwMjEgMzcuNDYyMSAzNS43MjVDMzcuNzYzMSAzNS41NDc5IDM4LjAxMjQgMzUuMjk1MSAzOC4xODU0IDM0Ljk5MTdDMzguMzU4MyAzNC42ODgzIDM4LjQ0ODggMzQuMzQ0OSAzOC40NDc4IDMzLjk5NTdDMzguNDQ2OCAzMy42NDY1IDM4LjM1NDQgMzMuMzAzNiAzOC4xNzk4IDMzLjAwMTJMMjkuNzA5OCAxOC44NjEyQzI5LjUzMTUgMTguNTY3MyAyOS4yODA1IDE4LjMyNDMgMjguOTgxIDE4LjE1NTdDMjguNjgxNCAxNy45ODcgMjguMzQzNSAxNy44OTg0IDI3Ljk5OTggMTcuODk4NEMyNy42NTYgMTcuODk4NCAyNy4zMTgxIDE3Ljk4NyAyNy4wMTg2IDE4LjE1NTdDMjYuNzE5MSAxOC4zMjQzIDI2LjQ2OCAxOC41NjczIDI2LjI4OTggMTguODYxMlpcIiBzdHJva2U9XCIjREM2ODAzXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNGRkZBRUJcIiBzdHJva2Utd2lkdGg9XCI4XCIvPjwvc3ZnPmAsXHJcbiAgICAgICAgICAgIHRpdGxlOiBgSW52YWxpZCBkZXRhaWxzIWAsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGBQbGVhc2UgcHJvdmlkZSBjb3JyZWN0IGFuZCBjb21wbGV0ZSBzdG9yZSBpbmZvcm1hdGlvbi5gLFxyXG4gICAgICAgICAgICBidXR0b250eXBlOiBcImVycm9yXCIsXHJcbiAgICAgICAgICAgIGVycm9yOiBlcnJvcixcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmV4Y2VsRXJyb3IgPSBwb3B1cGNvbnRlbnQ7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzZWN0aW9uTnVtYmVyID0gMDtcclxuICAgICAgICBsZXQgYW5zd2VyVHlwZTogYW55ID0ge1xyXG4gICAgICAgICAgXCJEZXNjcmlwdGl2ZSBBbnN3ZXJcIjogXCJkZXNjcmlwdGl2ZVwiLFxyXG4gICAgICAgICAgXCJBL0IgUXVlc3Rpb25cIjogXCJ5ZXMvbm9cIixcclxuICAgICAgICAgIFwiTXVsdGlwbGUgQ2hvaWNlIFNpbmdsZVwiOiBcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXHJcbiAgICAgICAgICBcIk11bHRpcGxlIENob2ljZSBNdWx0aXBsZVwiOiBcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcclxuICAgICAgICAgIFwiQ2FwdHVyZSBJbWFnZSB3aXRoIERlc2NyaXB0aW9uXCI6IFwiZGVzY3JpcHRpdmVJbWFnZVwiLFxyXG4gICAgICAgICAgXCJDYXB0dXJlIEltYWdlIGFzIGFuc3dlclwiOiBcImltYWdlXCIsXHJcbiAgICAgICAgICBcIkNhcHR1cmUgdmlkZW8gYXMgYW5zd2VyXCI6IFwidmlkZW9cIixcclxuICAgICAgICAgIFwiQ2FwdHVyZSBNdWx0aXBsZSBJbWFnZVwiOiBcIm11bHRpcGxlSW1hZ2VcIixcclxuICAgICAgICAgIERhdGU6IFwiZGF0ZVwiLFxyXG4gICAgICAgICAgXCJMaW5lYXIgU2NhbGVcIjogXCJsaW5lYXJzY2FsZVwiLFxyXG4gICAgICAgICAgXCJDYXB0dXJlIEltYWdlL1ZpZGVvIGFzIEFuc3dlclwiOiBcImltYWdlL3ZpZGVvXCIsXHJcbiAgICAgICAgICBUaW1lOiBcInRpbWVcIixcclxuICAgICAgICAgIERyb3Bkb3duOiBcImRyb3Bkb3duXCIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgc2VjRGV0YWlsczogYW55ID0gZGF0YS5yZWR1Y2UoKGFjYzogYW55LCBlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHNlY3Rpb25OYW1lID0gZWxlW1wiU2VjdGlvbiBOYW1lXCJdPy50b1N0cmluZygpPy50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGlmICghYWNjPy5bc2VjdGlvbk5hbWVdKSB7XHJcbiAgICAgICAgICAgIHNlY3Rpb25OdW1iZXIrKztcclxuICAgICAgICAgICAgYWNjW2Ake3NlY3Rpb25OYW1lfWBdID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IGVsZVtcIlNlY3Rpb24gTmFtZVwiXT8udG9TdHJpbmcoKT8udHJpbSgpLFxyXG4gICAgICAgICAgICAgIHNlY3Rpb25OdW1iZXI6IHNlY3Rpb25OdW1iZXIsXHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25zOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHFubzogMSxcclxuICAgICAgICAgICAgICAgICAgcW5hbWU6IGVsZVtcIlF1ZXN0aW9uXCJdPy50b1N0cmluZygpPy50cmltKCksXHJcbiAgICAgICAgICAgICAgICAgIG9sZFFuYW1lOiBlbGVbXCJRdWVzdGlvblwiXT8udG9TdHJpbmcoKT8udHJpbSgpLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXJUeXBlOiBhbnN3ZXJUeXBlW2Ake2VsZVtcIkFuc3dlciBUeXBlXCJdfWBdLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXJzOiB0aGlzLmZpbmRBbnN3ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgYW5zd2VyVHlwZVtgJHtlbGVbXCJBbnN3ZXIgVHlwZVwiXX1gXSxcclxuICAgICAgICAgICAgICAgICAgICBlbGVbXCJBbnN3ZXIgT3B0aW9uc1wiXSxcclxuICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgcnVuQUk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBydW5BSURlZmF1bHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBhbGxvd1VwbG9hZGZyb21HYWxsZXJ5OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgbGlua1R5cGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBtdWx0aVF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblJlZmVyZW5jZUltYWdlOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBydW5BSUZlYXR1cmVzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZVJ1bkFJOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgcnVuQUlEZXNjcmlwdGlvbjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgYWxsb3dNdWx0aXBsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBsaWFuY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGl2ZXR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYWNjW2Ake3NlY3Rpb25OYW1lfWBdLnF1ZXN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICBxbm86IGFjY1tgJHtzZWN0aW9uTmFtZX1gXS5xdWVzdGlvbnMubGVuZ3RoICsgMSxcclxuICAgICAgICAgICAgICBxbmFtZTogZWxlW1wiUXVlc3Rpb25cIl0/LnRvU3RyaW5nKCk/LnRyaW0oKSxcclxuICAgICAgICAgICAgICBvbGRRbmFtZTogZWxlW1wiUXVlc3Rpb25cIl0/LnRvU3RyaW5nKCk/LnRyaW0oKSxcclxuICAgICAgICAgICAgICBhbnN3ZXJUeXBlOiBhbnN3ZXJUeXBlW2Ake2VsZVtcIkFuc3dlciBUeXBlXCJdfWBdLFxyXG4gICAgICAgICAgICAgIGFuc3dlcnM6IHRoaXMuZmluZEFuc3dlcihcclxuICAgICAgICAgICAgICAgIGFuc3dlclR5cGVbYCR7ZWxlW1wiQW5zd2VyIFR5cGVcIl19YF0sXHJcbiAgICAgICAgICAgICAgICBlbGVbXCJBbnN3ZXIgT3B0aW9uc1wiXSxcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJ1bkFJOiBmYWxzZSxcclxuICAgICAgICAgICAgICBydW5BSURlZmF1bHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGFsbG93VXBsb2FkZnJvbUdhbGxlcnk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGxpbmtUeXBlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBtdWx0aVF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2U6IFwiXCIsXHJcbiAgICAgICAgICAgICAgcnVuQUlGZWF0dXJlczogW10sXHJcbiAgICAgICAgICAgICAgZGlzYWJsZVJ1bkFJOiBmYWxzZSxcclxuICAgICAgICAgICAgICBydW5BSURlc2NyaXB0aW9uOiBcIlwiLFxyXG4gICAgICAgICAgICAgIGFsbG93TXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGNvbXBsaWFuY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGRlc2NyaXB0aXZldHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uRGV0YWlscyA9IE9iamVjdC52YWx1ZXMoc2VjRGV0YWlscyk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlucHV0KSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlucHV0MSkge1xyXG4gICAgICAgICAgdGhpcy5maWxlSW5wdXQxLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICB0aGlzLmZpbGVOYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICB0aGlzLmZpbGVTaXplID0gTWF0aC5yb3VuZChmaWxlLnNpemUgLyAxMDI0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChldmVudDogYW55KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC5kYXRhVHJhbnNmZXIuZmlsZXNbMF07XHJcblxyXG4gICAgaWYgKGZpbGUpIHtcclxuICAgICAgdGhpcy5maWxlTmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgdGhpcy5maWxlU2l6ZSA9IE1hdGgucm91bmQoZmlsZS5zaXplIC8gMTAyNCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBSZXVwbG9hZCgpIHtcclxuICAgIGlmICh0aGlzLmZpbGVJbnB1dCkge1xyXG4gICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbGVJbnB1dDEpIHtcclxuICAgICAgdGhpcy5maWxlSW5wdXQxLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwia3RfYWNjb3VudF90ZWFtX3NpemVfc2VsZWN0XzJcIik7XHJcbiAgICBlbGU/LmNsaWNrKCk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUNoZWNrbGlzdCgpIHtcclxuICAgIGlmICghdGhpcy5jaGVja2xpc3RGb3JtLnZhbHVlLm5hbWUpIHtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiQ2hlY2tsaXN0IE5hbWUgaXMgbWlzc2luZ1wiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmV4Y2VsRGF0YS5sZW5ndGggJiYgdGhpcy5tb2RlID09IFwiYnVsa1wiKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIlBsZWFzZSB1cGxvYWQgYSB2YWxpZCBmaWxlXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBjaGVja2xpc3ROYW1lOiB0aGlzLmNoZWNrbGlzdEZvcm0udmFsdWUubmFtZT8udHJpbSgpLFxyXG4gICAgICBjaGVja2xpc3REZXNjcmlwdGlvbjogdGhpcy5jaGVja2xpc3RGb3JtLnZhbHVlLmRlc2NyaXB0aW9uPy50cmltKCksXHJcbiAgICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25EZXRhaWxzLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgc3VibWl0VHlwZTogXCJzYXZlXCIsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zb3BTZXJ2aWNlXHJcbiAgICAgIC5jcmVhdGVDaGVja2xpc3QocGFyYW1zKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICBpZiAocmVzPy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiQ2hlY2tsaXN0IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXHJcbiAgICAgICAgICAgICAgICBgL21hbmFnZS90cmF4L2NyZWF0ZUNoZWNrbGlzdD9jaGVja2xpc3RJZD0ke3Jlcy5kYXRhLmNoZWNrbGlzdElkfWAsXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5kaXNtaXNzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiVW5hYmxlIHRvIGNyZWF0ZSBjaGVja2xpc3QhXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gY3JlYXRlIGNoZWNrbGlzdCFcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVyciA9XHJcbiAgICAgICAgICAgIGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgXCJVbmFibGUgdG8gY3JlYXRlIGNoZWNrbGlzdCFTZXJ2ZXIgRXJyb3IhXCI7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyKTtcclxuICAgICAgICB9LFxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZmluZEFuc3dlcih0eXBlOiBzdHJpbmcsIG9wdGlvbnM6IHN0cmluZykge1xyXG4gICAgbGV0IGFuc3dlcjogYW55ID0gW107XHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJ5ZXMvbm9cIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuc3dlcjogXCJZZXNcIixcclxuICAgICAgICAgICAgYW5zd2Vyb3B0aW9uTnVtYmVyOiAxLFxyXG4gICAgICAgICAgICBzb3BGbGFnOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25UeXBlOiBcIkNhcHR1cmUgSW1hZ2VcIixcclxuICAgICAgICAgICAgbGlua2VkUXVlc3Rpb246IDAsXHJcbiAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VJbWFnZTogXCJcIixcclxuICAgICAgICAgICAgcnVuQUk6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbGxvd1VwbG9hZGZyb21HYWxsZXJ5OiBmYWxzZSxcclxuICAgICAgICAgICAgY29tcGxpYW5jZVNjb3JlOiAwLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYW5zd2VyOiBcIk5vXCIsXHJcbiAgICAgICAgICAgIGFuc3dlcm9wdGlvbk51bWJlcjogMixcclxuICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uVHlwZTogXCJDYXB0dXJlIEltYWdlXCIsXHJcbiAgICAgICAgICAgIGxpbmtlZFF1ZXN0aW9uOiAwLFxyXG4gICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVmZXJlbmNlSW1hZ2U6IFwiXCIsXHJcbiAgICAgICAgICAgIHJ1bkFJOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dVcGxvYWRmcm9tR2FsbGVyeTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbXBsaWFuY2VTY29yZTogMCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiZGVzY3JpcHRpdmVcIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uVHlwZTogXCJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGlvbkFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgcmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgbGlua2VkUXVlc3Rpb246IDAsXHJcbiAgICAgICAgICAgIG5lc3RlZFF1ZXN0aW9uOiBbXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpdmV0eXBlOiBcInRleHRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXTtcclxuICAgICAgICBvcHRpb25zLnNwbGl0KFwiLFwiKS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsZS50cmltKCkpIHtcclxuICAgICAgICAgICAgYW5zd2VyLnB1c2goe1xyXG4gICAgICAgICAgICAgIGFuc3dlcjogZWxlLFxyXG4gICAgICAgICAgICAgIHNvcEZsYWc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb25UeXBlOiBcIkNhcHR1cmUgSW1hZ2VcIixcclxuICAgICAgICAgICAgICBsaW5rZWRRdWVzdGlvbjogMCxcclxuICAgICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgICByZWZlcmVuY2VJbWFnZTogW10sXHJcbiAgICAgICAgICAgICAgcnVuQUk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGFsbG93VXBsb2FkZnJvbUdhbGxlcnk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIG5lc3RlZFF1ZXN0aW9uOiBbXSxcclxuICAgICAgICAgICAgICBjb21wbGlhbmNlU2NvcmU6IDAsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCI6XHJcbiAgICAgICAgYW5zd2VyID0gW107XHJcbiAgICAgICAgb3B0aW9ucy5zcGxpdChcIixcIikuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChlbGU/LnRyaW0oKSkge1xyXG4gICAgICAgICAgICBhbnN3ZXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgYW5zd2VyOiBlbGUsXHJcbiAgICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvblR5cGU6IFwiQ2FwdHVyZSBJbWFnZVwiLFxyXG4gICAgICAgICAgICAgIGxpbmtlZFF1ZXN0aW9uOiAwLFxyXG4gICAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHJlZmVyZW5jZUltYWdlOiBbXSxcclxuICAgICAgICAgICAgICBydW5BSTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgYWxsb3dVcGxvYWRmcm9tR2FsbGVyeTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgbmVzdGVkUXVlc3Rpb246IFtdLFxyXG4gICAgICAgICAgICAgIGNvbXBsaWFuY2VTY29yZTogMCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImRlc2NyaXB0aXZlSW1hZ2VcIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uVHlwZTogXCJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGlvbkFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgcmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgbGlua2VkUXVlc3Rpb246IDAsXHJcbiAgICAgICAgICAgIG5lc3RlZFF1ZXN0aW9uOiBbXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiaW1hZ2VcIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uVHlwZTogXCJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGlvbkFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgcmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgbGlua2VkUXVlc3Rpb246IDAsXHJcbiAgICAgICAgICAgIG5lc3RlZFF1ZXN0aW9uOiBbXSxcclxuICAgICAgICAgICAgbWF0Y2hlZENvdW50OiAwLFxyXG4gICAgICAgICAgICBub3RNYXRjaGVkQ291bnQ6IDAsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInZpZGVvXCI6XHJcbiAgICAgICAgYW5zd2VyID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhbnN3ZXI6IFwiXCIsXHJcbiAgICAgICAgICAgIHNvcEZsYWc6IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvblR5cGU6IFwiXCIsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25BbnN3ZXI6IFwiXCIsXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZUltYWdlOiBbXSxcclxuICAgICAgICAgICAgc2hvd0xpbmtlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGxpbmtlZFF1ZXN0aW9uOiAwLFxyXG4gICAgICAgICAgICBuZXN0ZWRRdWVzdGlvbjogW10sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIm11bHRpcGxlSW1hZ2VcIjpcclxuICAgICAgICBhbnN3ZXIgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uVHlwZTogXCJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGlvbkFuc3dlcjogXCJcIixcclxuICAgICAgICAgICAgcmVmZXJlbmNlSW1hZ2U6IFtdLFxyXG4gICAgICAgICAgICBzaG93TGlua2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgbGlua2VkUXVlc3Rpb246IDAsXHJcbiAgICAgICAgICAgIG5lc3RlZFF1ZXN0aW9uOiBbXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiZGF0ZVwiOlxyXG4gICAgICAgIGFuc3dlciA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICBzb3BGbGFnOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25UeXBlOiBcIlwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VJbWFnZTogW10sXHJcbiAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBsaW5rZWRRdWVzdGlvbjogMCxcclxuICAgICAgICAgICAgbmVzdGVkUXVlc3Rpb246IFtdLFxyXG4gICAgICAgICAgICBoaXN0b3JpY0RhdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBzdGFydERhdGU6IHRoaXMuZGF5anMoKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpLFxyXG4gICAgICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKCkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSxcclxuICAgICAgICAgICAgbWF0Y2hlZENvdW50OiAwLFxyXG4gICAgICAgICAgICBub3RNYXRjaGVkQ291bnQ6IDAsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImxpbmVhcnNjYWxlXCI6XHJcbiAgICAgICAgYW5zd2VyID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhbnN3ZXI6IFwiXCIsXHJcbiAgICAgICAgICAgIHNvcEZsYWc6IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvblR5cGU6IFwiXCIsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25BbnN3ZXI6IFwiXCIsXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZUltYWdlOiBbXSxcclxuICAgICAgICAgICAgc2hvd0xpbmtlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGxpbmtlZFF1ZXN0aW9uOiAwLFxyXG4gICAgICAgICAgICByYW5nZVN0YXJ0OiAwLFxyXG4gICAgICAgICAgICByYW5nZUVuZDogMTAwLFxyXG4gICAgICAgICAgICBuZXN0ZWRRdWVzdGlvbjogW10sXHJcbiAgICAgICAgICAgIGxpbmVhclR5cGU6IFwibnVtYmVyXCIsXHJcbiAgICAgICAgICAgIG1pblZhbHVlOiAwLFxyXG4gICAgICAgICAgICBtYXhWYWx1ZTogMTAwLFxyXG4gICAgICAgICAgICBtYXRjaGVkQ291bnQ6IDAsXHJcbiAgICAgICAgICAgIG5vdE1hdGNoZWRDb3VudDogMCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwidGltZVwiOlxyXG4gICAgICAgIGFuc3dlciA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICBzb3BGbGFnOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25UeXBlOiBcIlwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VJbWFnZTogW10sXHJcbiAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBsaW5rZWRRdWVzdGlvbjogMCxcclxuICAgICAgICAgICAgbmVzdGVkUXVlc3Rpb246IFtdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJpbWFnZS92aWRlb1wiOlxyXG4gICAgICAgIGFuc3dlciA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICBzb3BGbGFnOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25UeXBlOiBcIlwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5zd2VyOiBcIlwiLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VJbWFnZTogW10sXHJcbiAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBsaW5rZWRRdWVzdGlvbjogMCxcclxuICAgICAgICAgICAgbmVzdGVkUXVlc3Rpb246IFtdLFxyXG4gICAgICAgICAgICBsaW1pdDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpZGVvTGltaXQ6IDAsXHJcbiAgICAgICAgICAgIGltYWdlTGltaXQ6IDAsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImRyb3Bkb3duXCI6XHJcbiAgICAgICAgYW5zd2VyID0gW107XHJcbiAgICAgICAgb3B0aW9ucy5zcGxpdChcIixcIikuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChlbGU/LnRyaW0oKSkge1xyXG4gICAgICAgICAgICBhbnN3ZXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgYW5zd2VyOiBlbGUsXHJcbiAgICAgICAgICAgICAgc29wRmxhZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvblR5cGU6IFwiQ2FwdHVyZSBJbWFnZVwiLFxyXG4gICAgICAgICAgICAgIGxpbmtlZFF1ZXN0aW9uOiAwLFxyXG4gICAgICAgICAgICAgIHNob3dMaW5rZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHJlZmVyZW5jZUltYWdlOiBbXSxcclxuICAgICAgICAgICAgICBydW5BSTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgYWxsb3dVcGxvYWRmcm9tR2FsbGVyeTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgbmVzdGVkUXVlc3Rpb246IFtdLFxyXG4gICAgICAgICAgICAgIGNvbXBsaWFuY2VTY29yZTogMCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFRlbXBsYXRlKCkge1xyXG4gICAgdGhpcy5zb3BTZXJ2aWNlXHJcbiAgICAgIC5kb3dubG9hZFF1ZXN0aW9uKHRoaXMuY2hlY2tsaXN0RGF0YS5jaGVja2xpc3RJZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSlcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3BTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsIFwiQ2hlY2tsaXN0IFF1ZXN0aW9uXCIpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiVW5hYmxlIHRvIGRvd25sb2FkIHRlbXBsYXRlIVwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gZG93bmxvYWQgdGVtcGxhdGUhXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDaGVja2xpc3QoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tsaXN0RGF0YS5jaGVja0xpc3ROYW1lKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIkNoZWNrbGlzdCBOYW1lIGlzIG1pc3NpbmdcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5leGNlbERhdGEubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIlBsZWFzZSB1cGxvYWQgYSB2YWxpZCBmaWxlXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBjaGVja2xpc3ROYW1lOiB0aGlzLmNoZWNrbGlzdERhdGEuY2hlY2tMaXN0TmFtZT8udHJpbSgpLFxyXG4gICAgICBjaGVja2xpc3REZXNjcmlwdGlvbjogdGhpcy5jaGVja2xpc3REYXRhLmNoZWNrTGlzdERlc2NyaXB0aW9uPy50cmltKCksXHJcbiAgICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25EZXRhaWxzLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5jaGVja2xpc3REYXRhLmNsaWVudElkLFxyXG4gICAgICBzdWJtaXRUeXBlOiBcInNhdmVcIixcclxuICAgIH07XHJcbiAgICB0aGlzLnNvcFNlcnZpY2VcclxuICAgICAgLmdldFVwZGF0ZUNoZWNrbGlzdCh0aGlzLmNoZWNrbGlzdERhdGEuY2hlY2tsaXN0SWQsIHBhcmFtcylcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSlcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShcInJlbG9hZFwiKTtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChcIkNoZWNrbGlzdCB1cGRhdGVkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gdXBkYXRlIGNoZWNrbGlzdCFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIlVuYWJsZSB0byB1cGRhdGUgY2hlY2tsaXN0IVwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgbGV0IGVyciA9XHJcbiAgICAgICAgICAgIGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgXCJVbmFibGUgdG8gdXBkYXRlIGNoZWNrbGlzdCFTZXJ2ZXIgRXJyb3IhXCI7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyKTtcclxuICAgICAgICB9LFxyXG4gICAgICApO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0LWNhcmRcIj5cclxuXHJcbiAgPCEtLSBIZWFkZXIgLS0+XHJcbiAgIDxkaXYgKm5nSWY9XCIhZXhjZWxEYXRhLmxlbmd0aFwiPlxyXG4gICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtaWNvbiBtZS0yXCI+XHJcbiAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjREFGMUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0VBRjhGRlwiIHN0cm9rZS13aWR0aD1cIjhcIi8+XHJcbiAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yOCAyMVYzNU0yMSAyOEgzNVwiIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwibWItMCB0aXRsZVRleHRcIj57e3R5cGUgPT0gJ2NyZWF0ZScgPyAnQ3JlYXRlIENoZWNrbGlzdCcgOiAnQnVsayBVcGxvYWQnfX08L2Rpdj5cclxuICAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjaGVja2xpc3RGb3JtXCI+XHJcbiAgICAgXHJcbiAgICAgICAgIDwhLS0gQ2hlY2tsaXN0IE5hbWUgLS0+XHJcbiAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCJ0eXBlID09ICdjcmVhdGUnXCI+XHJcbiAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNoZWNrbGlzdCBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cclxuICAgICAgICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICAgICAgIDwhLS0gRGVzY3JpcHRpb24gLS0+XHJcbiAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCJ0eXBlID09ICdjcmVhdGUnXCI+XHJcbiAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiM1wiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICAgICAgIDwhLS0gTW9kZSBTZWxlY3Rpb24gLS0+XHJcbiAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0yIG15LTNcIiAqbmdJZj1cInR5cGUgPT0gJ2NyZWF0ZSdcIj5cclxuICAgICBcclxuICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24tYm94XCJcclxuICAgICAgICAgICAgICAgW2NsYXNzLm9wdGlvbi1hY3RpdmVdPVwibW9kZT09PSdpbmRpdmlkdWFsJ1wiXHJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RNb2RlKCdpbmRpdmlkdWFsJylcIj5cclxuICAgICBcclxuICAgICAgICAgICAgICAgPHNwYW4+QWRkIHF1ZXN0aW9ucyBpbmRpdmlkdWFsbHk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiB2YWx1ZT1cImluZGl2aWR1YWxcIiBmb3JtQ29udHJvbE5hbWU9XCJtb2RlXCIgc3R5bGU9XCJ3aWR0aDoxNXB4O2hlaWdodDoxNXB4XCI+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICA8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24tYm94XCJcclxuICAgICAgICAgICAgICAgW2NsYXNzLm9wdGlvbi1hY3RpdmVdPVwibW9kZT09PSdidWxrJ1wiXHJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RNb2RlKCdidWxrJylcIj5cclxuICAgICBcclxuICAgICAgICAgICAgICAgPHNwYW4+QWRkIHF1ZXN0aW9ucyBpbiBidWxrPC9zcGFuPlxyXG4gICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJidWxrXCIgZm9ybUNvbnRyb2xOYW1lPVwibW9kZVwiIHN0eWxlPVwid2lkdGg6MTVweDtoZWlnaHQ6MTVweFwiPlxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgICA8IS0tIEJ1bGsgVXBsb2FkIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgIDxkaXYgKm5nSWY9XCJtb2RlID09PSAnYnVsaydcIiBjbGFzcz1cImJ1bGtUZXh0XCI+XHJcbiAgICAgXHJcbiAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTVcIj5cclxuICAgICBcclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+MS4gVXNlIHRoZSB0ZW1wbGF0ZSB0byB1cGxvYWQgbXVsdGlwbGUgcXVlc3Rpb25zIGF0IG9uY2U8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XHJcbiAgICAgICAgICAgICAgIDIuIERvd25sb2FkIHRoZSB0ZW1wbGF0ZSBoZXJlIC1cclxuICAgICAgICAgICAgICAgQGlmKHR5cGUgPT0gJ2NyZWF0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZG93bmxvYWQtbGlua1wiIGhyZWY9XCIvYXNzZXRzL2ZpbGVzL2NoZWNrbGlzdFF1ZXN0aW9uLnhsc3hcIiBkb3dubG9hZD5cclxuICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjE3XCIgdmlld0JveD1cIjAgMCAxNyAxN1wiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1LjgzNTkgMTAuODM1OVYxNC4xNjkzQzE1LjgzNTkgMTQuNjExMyAxNS42NjAzIDE1LjAzNTIgMTUuMzQ3OCAxNS4zNDc4QzE1LjAzNTIgMTUuNjYwMyAxNC42MTEzIDE1LjgzNTkgMTQuMTY5MyAxNS44MzU5SDIuNTAyNkMyLjA2MDU4IDE1LjgzNTkgMS42MzY2NSAxNS42NjAzIDEuMzI0MDkgMTUuMzQ3OEMxLjAxMTUzIDE1LjAzNTIgMC44MzU5MzggMTQuNjExMyAwLjgzNTkzOCAxNC4xNjkzVjEwLjgzNTlNNC4xNjkyNyA2LjY2OTI3TDguMzM1OTQgMTAuODM1OU04LjMzNTk0IDEwLjgzNTlMMTIuNTAyNiA2LjY2OTI3TTguMzM1OTQgMTAuODM1OVYwLjgzNTkzOFwiIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gRG93bmxvYWQgVGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3dubG9hZC1saW5rXCIgKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxN1wiIHZpZXdCb3g9XCIwIDAgMTcgMTdcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1LjgzNTkgMTAuODM1OVYxNC4xNjkzQzE1LjgzNTkgMTQuNjExMyAxNS42NjAzIDE1LjAzNTIgMTUuMzQ3OCAxNS4zNDc4QzE1LjAzNTIgMTUuNjYwMyAxNC42MTEzIDE1LjgzNTkgMTQuMTY5MyAxNS44MzU5SDIuNTAyNkMyLjA2MDU4IDE1LjgzNTkgMS42MzY2NSAxNS42NjAzIDEuMzI0MDkgMTUuMzQ3OEMxLjAxMTUzIDE1LjAzNTIgMC44MzU5MzggMTQuNjExMyAwLjgzNTkzOCAxNC4xNjkzVjEwLjgzNTlNNC4xNjkyNyA2LjY2OTI3TDguMzM1OTQgMTAuODM1OU04LjMzNTk0IDEwLjgzNTlMMTIuNTAyNiA2LjY2OTI3TTguMzM1OTQgMTAuODM1OVYwLjgzNTkzOFwiIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgIDwvc3ZnPiBEb3dubG9hZCBUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPjMuIEFkZCB5b3VyIGRhdGEgdG8gdGhlIHRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPjQuIFVwbG9hZCBpdCBmb3IgcHJvY2Vzc2luZzwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgICAgIDwhLS0gVXBsb2FkIEFyZWEgLS0+XHJcbiAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1ib3ggY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cclxuICAgICBcclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtaWNvbiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0NlwiIGhlaWdodD1cIjQ2XCIgdmlld0JveD1cIjAgMCA0NiA0NlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjNcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjIwXCIgZmlsbD1cIiNEQUYxRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjNcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjIwXCIgc3Ryb2tlPVwiI0VBRjhGRlwiIHN0cm9rZS13aWR0aD1cIjZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTkwMzRfNjY5OTYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjYuMzMyNiAyNi4zMzEzTDIyLjk5OTIgMjIuOTk4TTIyLjk5OTIgMjIuOTk4TDE5LjY2NTkgMjYuMzMxM00yMi45OTkyIDIyLjk5OFYzMC40OThNMjkuOTkwOSAyOC4zMjNDMzAuODAzNyAyNy44Nzk4IDMxLjQ0NTggMjcuMTc4NyAzMS44MTU4IDI2LjMzMDFDMzIuMTg1OCAyNS40ODE2IDMyLjI2MjcgMjQuNTM0IDMyLjAzNDQgMjMuNjM2OUMzMS44MDYxIDIyLjczOTcgMzEuMjg1NSAyMS45NDQyIDMwLjU1NDggMjEuMzc1OEMyOS44MjQxIDIwLjgwNzQgMjguOTI1IDIwLjQ5ODYgMjcuOTk5MiAyMC40OThIMjYuOTQ5MkMyNi42OTcgMTkuNTIyMyAyNi4yMjY5IDE4LjYxNjYgMjUuNTc0MiAxNy44NDg4QzI0LjkyMTUgMTcuMDgxIDI0LjEwMzMgMTYuNDcxMiAyMy4xODEgMTYuMDY1MUMyMi4yNTg3IDE1LjY1OTEgMjEuMjU2NCAxNS40Njc0IDIwLjI0OTMgMTUuNTA0NUMxOS4yNDIzIDE1LjU0MTYgMTguMjU2OCAxNS44MDY1IDE3LjM2NjkgMTYuMjc5M0MxNi40NzcgMTYuNzUyMSAxNS43MDU4IDE3LjQyMDUgMTUuMTExNCAxOC4yMzQzQzE0LjUxNyAxOS4wNDggMTQuMTE0OCAxOS45ODU5IDEzLjkzNTEgMjAuOTc3NEMxMy43NTUzIDIxLjk2OSAxMy44MDI3IDIyLjk4ODQgMTQuMDczNiAyMy45NTlDMTQuMzQ0NSAyNC45Mjk2IDE0LjgzMTkgMjUuODI2MiAxNS40OTkyIDI2LjU4MTNcIiBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTkwMzRfNjY5OTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEzIDEzKVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wcmltYXJ5IGZ3LXNlbWlib2xkIHVwbG9hZFRleHRcIj5DbGljayBUbyBVcGxvYWQ8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgICAgIDwhLS0gSGlkZGVuIEZpbGUgSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAjZmlsZUlucHV0XHJcbiAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgICAgICAgICAgIGhpZGRlblxyXG4gICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICA+XHJcbiAgICAgXHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgICA8IS0tIFVwbG9hZGVkIEZpbGUgLS0+XHJcbiAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbGVOYW1lXCIgY2xhc3M9XCJ1cGxvYWQtZmlsZVwiPlxyXG4gICAgIFxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMlwiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHJ4PVwiMTZcIiBmaWxsPVwiI0RBRjFGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMlwiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHJ4PVwiMTZcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiNFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOC42NjggMTEuMzM1OUgxNC4wMDEzQzEzLjY0NzcgMTEuMzM1OSAxMy4zMDg1IDExLjQ3NjQgMTMuMDU4NSAxMS43MjY1QzEyLjgwODQgMTEuOTc2NSAxMi42NjggMTIuMzE1NiAxMi42NjggMTIuNjY5M1YyMy4zMzU5QzEyLjY2OCAyMy42ODk2IDEyLjgwODQgMjQuMDI4NyAxMy4wNTg1IDI0LjI3ODdDMTMuMzA4NSAyNC41Mjg4IDEzLjY0NzcgMjQuNjY5MyAxNC4wMDEzIDI0LjY2OTNIMjIuMDAxM0MyMi4zNTQ5IDI0LjY2OTMgMjIuNjk0MSAyNC41Mjg4IDIyLjk0NDEgMjQuMjc4N0MyMy4xOTQyIDI0LjAyODcgMjMuMzM0NiAyMy42ODk2IDIzLjMzNDYgMjMuMzM1OVYxNi4wMDI2TTE4LjY2OCAxMS4zMzU5TDIzLjMzNDYgMTYuMDAyNk0xOC42NjggMTEuMzM1OVYxNi4wMDI2SDIzLjMzNDZcIiBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICBcclxuICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1zdGFydCBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgPGRpdj57e2ZpbGVOYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VjY2Vzc1RleHRcIj5cclxuICAgICAgICAgICAgICAgICAgIHt7ZmlsZVNpemV9fSBLQiDigJMgVXBsb2FkZWRcclxuICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjkuMzM0NiAxNC43NzA1VjE1Ljk5NzJDMjkuMzMzIDE4Ljg3MjQgMjguNDAyIDIxLjY3MDEgMjYuNjgwNCAyMy45NzNDMjQuOTU4OSAyNi4yNzU4IDIyLjUzOSAyNy45NjA1IDE5Ljc4MTggMjguNzc1N0MxNy4wMjQ1IDI5LjU5MSAxNC4wNzc2IDI5LjQ5MzEgMTEuMzgwNiAyOC40OTY3QzguNjgzNTQgMjcuNTAwMiA2LjM4MDg0IDI1LjY1ODcgNC44MTU5MiAyMy4yNDY2QzMuMjUwOTkgMjAuODM0NiAyLjUwNzY5IDE3Ljk4MTMgMi42OTY4NyAxNS4xMTIzQzIuODg2MDUgMTIuMjQzMyAzLjk5NzU4IDkuNTEyMzIgNS44NjU2OCA3LjMyNjY1QzcuNzMzNzcgNS4xNDA5NyAxMC4yNTgzIDMuNjE3NzIgMTMuMDYyOSAyLjk4NDA4QzE1Ljg2NzQgMi4zNTA0MyAxOC44MDE3IDIuNjQwMzMgMjEuNDI4IDMuODEwNTVNMjkuMzM0NiA1LjMzMDU1TDE2LjAwMTMgMTguNjc3MkwxMi4wMDEzIDE0LjY3NzJcIiBzdHJva2U9XCIjMTJCNzZBXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgIFxyXG4gICAgICAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICBcclxuICAgICAgICAgPCEtLSBCdXR0b25zIC0tPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtNFwiPlxyXG4gICAgIFxyXG4gICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0yXCIgKGNsaWNrKT1cImRpYWxvZ1JlZi5jbG9zZSgpXCI+XHJcbiAgICAgICAgICAgICBDYW5jZWxcclxuICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICBcclxuICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInR5cGUgPT0gJ2NyZWF0ZScgPyBjcmVhdGVDaGVja2xpc3QoKSA6IHVwZGF0ZUNoZWNrbGlzdCgpXCI+XHJcbiAgICAgICAgICAgICBQcm9jZWVkXHJcbiAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgXHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgICAgPC9mb3JtPlxyXG4gICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLTAgdmFsaWRhdGVCb3hcIiAqbmdJZj1cImV4Y2VsRGF0YS5sZW5ndGhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgbXQtMFwiPlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgbXQtM1wiPjxzcGFuIGNsYXNzPVwiY29uZmlnLWhlYWRpbmcgZnctc2VtaWJvbGQgdy1hdXRvXCI+QXNzaWduIFN0b3Jlczwvc3Bhbj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB0LTBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY2FyZCByb3VuZGVkLTMgcC0zIGZsZXgtY29sdW1uIGgtODBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIGNvbmZpZy1oZWFkaW5nIHctMTAwXCI+e3tleGNlbERhdGE/Lmxlbmd0aH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgc3VidGl0bGUgbXQtMVwiPlRvdGFsIFJlY29yZHM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY2FyZCByb3VuZGVkLTMgcC0zIGZsZXgtY29sdW1uIGgtODBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgY29uZmlnLWhlYWRpbmcgdy0xMDBcIj57e2V4Y2VsRGF0YT8ubGVuZ3RofX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIHN1YnRpdGxlIG10LTFcIj5Sb3dzIHByb2Nlc3NlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNhcmQgcm91bmRlZC0zIHAtMyBmbGV4LWNvbHVtbiBoLTgwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJleGNlbEVycm9yID8gJ2Vycm9yLWhlYWRpbmcnOicnXCIgY2xhc3M9XCJmdy1zZW1pYm9sZCBjb25maWctaGVhZGluZyB3LTEwMFwiPnt7ZXhjZWxFcnJvcj8uZXJyb3I/Lmxlbmd0aCB8fCAwfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJleGNlbEVycm9yID8gJ2V4Y2VsLWVycm9yJzonJ1wiIGNsYXNzPVwiZnctc2VtaWJvbGQgc3VidGl0bGUgbXQtMVwiPkVycm9yPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWV4Y2VsRXJyb3JcIiBjbGFzcz1cInRhYmxlLWhlYWRlciBtdC01XCIgc3R5bGU9XCJmb250LXdlaWdodDogNDAwO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5Zb3UncmUgYWJvdXQgdG8gYXNzaWduIHt7ZXhjZWxEYXRhPy5sZW5ndGh9fSBzdG9yZXMgdG8gdGhlIGNoZWNrbGlzdC4gQXJlIHlvdSBzdXJlIHdhbnQgdG8gcHJvY2VlZD88L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJleGNlbEVycm9yXCIgY2xhc3M9XCJmbGV4LWNvbHVtbiBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWhlYWRpbmcgZnctYm9sZFwiPkludmFsaWQgRGV0YWlscyAhPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGUgbXQtNVwiPlBsZWFzZSBwcm92aWRlIGNvcnJlY3QgYW5kIGNvbXBsZXRlIGxheW91dCBpbmZvcm1hdGlvbi48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTUgdy0xMDAgcm91bmRlZC0zIGJvcmRlci1lcnJvciBtdC01IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlcnJvciBvZiBleGNlbEVycm9yPy5lcnJvcjsgbGV0IGkgPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0XCIgW25nQ2xhc3NdPVwiIWxhc3QgPyAnbWItMicgOiAnJ1wiIGNsYXNzPVwidGV4dC1lcnJvclwiPnt7aSArIDF9fSkge3tlcnJvcn19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIgI2ZpbGVJbnB1dDEgdHlwZT1cImZpbGVcIiBpZD1cImt0X2FjY291bnRfdGVhbV9zaXplX3NlbGVjdF8yXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtNFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMlwiIChjbGljayk9XCJkaWFsb2dSZWYuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKm5nSWY9XCIhZXhjZWxFcnJvclwiIChjbGljayk9XCJ0eXBlID09ICdjcmVhdGUnID8gY3JlYXRlQ2hlY2tsaXN0KCkgOiB1cGRhdGVDaGVja2xpc3QoKVwiPlxyXG4gICAgICAgIFByb2NlZWRcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJleGNlbEVycm9yXCIgY2xhc3M9XCJidG4gcHktMyBtcy0zIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwiUmV1cGxvYWQoKTtcIj5SZXVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj4iXX0=