@piserve-tech/form-submission 1.3.70 → 1.3.72

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 (309) hide show
  1. package/environment/environment.d.ts +5 -0
  2. package/esm2022/environment/environment.mjs +6 -0
  3. package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +302 -0
  4. package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +416 -0
  5. package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +251 -0
  6. package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +112 -0
  7. package/esm2022/form-fields/form-fields.module.mjs +154 -0
  8. package/esm2022/form-fields/location-fields/location-fields.component.mjs +79 -0
  9. package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +71 -0
  10. package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +176 -0
  11. package/esm2022/form-fields/number-fields/number-fields.component.mjs +126 -0
  12. package/esm2022/form-fields/password-fields/password-fields.component.mjs +195 -0
  13. package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +188 -0
  14. package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +88 -0
  15. package/esm2022/form-fields/section-fields/section-fields.component.mjs +29 -0
  16. package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +64 -0
  17. package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +29 -0
  18. package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +58 -0
  19. package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +63 -0
  20. package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +56 -0
  21. package/esm2022/form-fields/text-fields/text-fields.component.mjs +142 -0
  22. package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +70 -0
  23. package/esm2022/form-fields/url-fields/url-fields.component.mjs +60 -0
  24. package/esm2022/form-submission/form-submission.module.mjs +45 -0
  25. package/esm2022/form-submission/header/header.component.mjs +16 -0
  26. package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +58 -0
  27. package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +60 -0
  28. package/esm2022/form-submission/submission-container/submission-container.component.mjs +17 -0
  29. package/esm2022/form-submission/submit-form/submit-form.component.mjs +617 -0
  30. package/esm2022/lib/form-submission.component.mjs +66 -0
  31. package/esm2022/lib/form-submission.module.mjs +56 -0
  32. package/esm2022/lib/form-submission.service.mjs +14 -0
  33. package/esm2022/models/answer.model.mjs +2 -0
  34. package/esm2022/models/appearance.model.mjs +2 -0
  35. package/esm2022/models/attachment.model.mjs +2 -0
  36. package/esm2022/models/elementOptionAPI.model.mjs +2 -0
  37. package/esm2022/models/elementOptionAPIData.model.mjs +2 -0
  38. package/esm2022/models/elementOptionDB.model.mjs +2 -0
  39. package/esm2022/models/elementOptionDBCriteria.model.mjs +2 -0
  40. package/esm2022/models/enum/condition.enum.mjs +18 -0
  41. package/esm2022/models/enum/elementType .enum.mjs +24 -0
  42. package/esm2022/models/enum/entityType.enum.mjs +12 -0
  43. package/esm2022/models/formConfiguration.model.mjs +2 -0
  44. package/esm2022/models/formElement.model.mjs +2 -0
  45. package/esm2022/models/formElementType.model.mjs +2 -0
  46. package/esm2022/models/grid.model.mjs +2 -0
  47. package/esm2022/models/logic.model.mjs +2 -0
  48. package/esm2022/models/option.model.mjs +2 -0
  49. package/esm2022/models/page.model.mjs +2 -0
  50. package/esm2022/models/publicForm.model.mjs +2 -0
  51. package/esm2022/models/question.model.mjs +2 -0
  52. package/esm2022/models/questionAnswer.model.mjs +2 -0
  53. package/esm2022/models/row.model.mjs +2 -0
  54. package/esm2022/models/section.model.mjs +2 -0
  55. package/esm2022/models/subForm.model.mjs +2 -0
  56. package/esm2022/models/submission.model.mjs +2 -0
  57. package/esm2022/models/terms&condition.model.mjs +2 -0
  58. package/esm2022/models/validation.model.mjs +2 -0
  59. package/esm2022/piserve-tech-form-submission.mjs +5 -0
  60. package/esm2022/public-api.mjs +7 -0
  61. package/esm2022/question/form-elements/form-elements.component.mjs +37 -0
  62. package/esm2022/question/multiple-subform/multiple-subform.component.mjs +258 -0
  63. package/esm2022/question/question/question.component.mjs +83 -0
  64. package/esm2022/question/recursive-logic/recursive-logic.component.mjs +39 -0
  65. package/esm2022/question/sub-form/sub-form.component.mjs +107 -0
  66. package/esm2022/services/countryService.mjs +65 -0
  67. package/esm2022/services/data.service.mjs +31 -0
  68. package/esm2022/services/form.service.mjs +132 -0
  69. package/esm2022/services/mapper.service.mjs +309 -0
  70. package/esm2022/services/recaptcha.service.mjs +140 -0
  71. package/esm2022/shared/shared.module.mjs +65 -0
  72. package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +97 -0
  73. package/fesm2022/piserve-tech-form-submission.mjs +4795 -0
  74. package/fesm2022/piserve-tech-form-submission.mjs.map +1 -0
  75. package/form-fields/check-box-fields/check-box-fields.component.d.ts +44 -0
  76. package/form-fields/date-time-fields/date-time-fields.component.d.ts +53 -0
  77. package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +49 -0
  78. package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +39 -0
  79. package/form-fields/form-fields.module.d.ts +36 -0
  80. package/form-fields/location-fields/location-fields.component.d.ts +24 -0
  81. package/form-fields/mail-fields/mail-fields.component.d.ts +19 -0
  82. package/form-fields/mobile-fields/mobile-fields.component.d.ts +58 -0
  83. package/form-fields/number-fields/number-fields.component.d.ts +25 -0
  84. package/form-fields/password-fields/password-fields.component.d.ts +36 -0
  85. package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +40 -0
  86. package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +23 -0
  87. package/form-fields/section-fields/section-fields.component.d.ts +10 -0
  88. package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +20 -0
  89. package/form-fields/signature-fields/signature-fields.component.d.ts +12 -0
  90. package/form-fields/slider-fields/slider-fields.component.d.ts +24 -0
  91. package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +25 -0
  92. package/form-fields/text-area-fields/text-area-fields.component.d.ts +20 -0
  93. package/form-fields/text-fields/text-fields.component.d.ts +32 -0
  94. package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +20 -0
  95. package/form-fields/url-fields/url-fields.component.d.ts +20 -0
  96. package/form-submission/form-submission.module.d.ts +15 -0
  97. package/form-submission/header/header.component.d.ts +6 -0
  98. package/form-submission/navigation-tabs/navigation-tabs.component.d.ts +22 -0
  99. package/form-submission/next-prev-navigation/next-prev-navigation.component.d.ts +21 -0
  100. package/form-submission/submission-container/submission-container.component.d.ts +7 -0
  101. package/form-submission/submit-form/submit-form.component.d.ts +102 -0
  102. package/index.d.ts +5 -0
  103. package/lib/form-submission.component.d.ts +22 -0
  104. package/lib/form-submission.module.d.ts +16 -0
  105. package/lib/form-submission.service.d.ts +6 -0
  106. package/{src/models/answer.model.ts → models/answer.model.d.ts} +7 -8
  107. package/models/appearance.model.d.ts +50 -0
  108. package/{src/models/attachment.model.ts → models/attachment.model.d.ts} +5 -5
  109. package/models/elementOptionAPI.model.d.ts +11 -0
  110. package/models/elementOptionAPIData.model.d.ts +5 -0
  111. package/models/elementOptionDB.model.d.ts +7 -0
  112. package/models/elementOptionDBCriteria.model.d.ts +7 -0
  113. package/{src/models/enum/condition.enum.ts → models/enum/condition.enum.d.ts} +16 -16
  114. package/models/enum/elementType .enum.d.ts +22 -0
  115. package/models/enum/entityType.enum.d.ts +10 -0
  116. package/{src/models/formConfiguration.model.ts → models/formConfiguration.model.d.ts} +16 -16
  117. package/models/formElement.model.d.ts +14 -0
  118. package/{src/models/formElementType.model.ts → models/formElementType.model.d.ts} +5 -6
  119. package/{src/models/grid.model.ts → models/grid.model.d.ts} +8 -9
  120. package/models/logic.model.d.ts +9 -0
  121. package/{src/models/option.model.ts → models/option.model.d.ts} +11 -11
  122. package/{src/models/page.model.ts → models/page.model.d.ts} +5 -6
  123. package/{src/models/publicForm.model.ts → models/publicForm.model.d.ts} +10 -11
  124. package/models/question.model.d.ts +18 -0
  125. package/models/questionAnswer.model.d.ts +7 -0
  126. package/{src/models/row.model.ts → models/row.model.d.ts} +4 -5
  127. package/models/section.model.d.ts +5 -0
  128. package/models/subForm.model.d.ts +11 -0
  129. package/{src/models/submission.model.ts → models/submission.model.d.ts} +5 -7
  130. package/{src/models/terms&condition.model.ts → models/terms&condition.model.d.ts} +5 -5
  131. package/models/validation.model.d.ts +48 -0
  132. package/package.json +43 -30
  133. package/{src/public-api.ts → public-api.d.ts} +3 -7
  134. package/question/form-elements/form-elements.component.d.ts +14 -0
  135. package/question/multiple-subform/multiple-subform.component.d.ts +41 -0
  136. package/question/question/question.component.d.ts +23 -0
  137. package/question/recursive-logic/recursive-logic.component.d.ts +14 -0
  138. package/question/sub-form/sub-form.component.d.ts +19 -0
  139. package/services/countryService.d.ts +21 -0
  140. package/services/data.service.d.ts +16 -0
  141. package/services/form.service.d.ts +22 -0
  142. package/services/mapper.service.d.ts +10 -0
  143. package/services/recaptcha.service.d.ts +21 -0
  144. package/shared/shared.module.d.ts +18 -0
  145. package/sub-form/submission-modal/submission-modal.component.d.ts +20 -0
  146. package/ng-package.json +0 -22
  147. package/src/environment/environment.ts +0 -6
  148. package/src/form-fields/check-box-fields/check-box-fields.component.html +0 -101
  149. package/src/form-fields/check-box-fields/check-box-fields.component.scss +0 -4
  150. package/src/form-fields/check-box-fields/check-box-fields.component.spec.ts +0 -21
  151. package/src/form-fields/check-box-fields/check-box-fields.component.ts +0 -336
  152. package/src/form-fields/date-time-fields/date-time-fields.component.html +0 -308
  153. package/src/form-fields/date-time-fields/date-time-fields.component.scss +0 -57
  154. package/src/form-fields/date-time-fields/date-time-fields.component.spec.ts +0 -21
  155. package/src/form-fields/date-time-fields/date-time-fields.component.ts +0 -460
  156. package/src/form-fields/drop-down-fields/drop-down-fields.component.html +0 -95
  157. package/src/form-fields/drop-down-fields/drop-down-fields.component.scss +0 -2
  158. package/src/form-fields/drop-down-fields/drop-down-fields.component.spec.ts +0 -21
  159. package/src/form-fields/drop-down-fields/drop-down-fields.component.ts +0 -285
  160. package/src/form-fields/file-picker-fields/file-picker-fields.component.html +0 -91
  161. package/src/form-fields/file-picker-fields/file-picker-fields.component.scss +0 -22
  162. package/src/form-fields/file-picker-fields/file-picker-fields.component.spec.ts +0 -21
  163. package/src/form-fields/file-picker-fields/file-picker-fields.component.ts +0 -131
  164. package/src/form-fields/form-fields.module.ts +0 -99
  165. package/src/form-fields/location-fields/location-fields.component.html +0 -54
  166. package/src/form-fields/location-fields/location-fields.component.scss +0 -12
  167. package/src/form-fields/location-fields/location-fields.component.spec.ts +0 -21
  168. package/src/form-fields/location-fields/location-fields.component.ts +0 -80
  169. package/src/form-fields/mail-fields/mail-fields.component.html +0 -86
  170. package/src/form-fields/mail-fields/mail-fields.component.scss +0 -2
  171. package/src/form-fields/mail-fields/mail-fields.component.spec.ts +0 -21
  172. package/src/form-fields/mail-fields/mail-fields.component.ts +0 -67
  173. package/src/form-fields/mobile-fields/mobile-fields.component.html +0 -100
  174. package/src/form-fields/mobile-fields/mobile-fields.component.scss +0 -13
  175. package/src/form-fields/mobile-fields/mobile-fields.component.spec.ts +0 -21
  176. package/src/form-fields/mobile-fields/mobile-fields.component.ts +0 -208
  177. package/src/form-fields/number-fields/number-fields.component.html +0 -89
  178. package/src/form-fields/number-fields/number-fields.component.scss +0 -7
  179. package/src/form-fields/number-fields/number-fields.component.spec.ts +0 -21
  180. package/src/form-fields/number-fields/number-fields.component.ts +0 -134
  181. package/src/form-fields/password-fields/password-fields.component.html +0 -163
  182. package/src/form-fields/password-fields/password-fields.component.scss +0 -42
  183. package/src/form-fields/password-fields/password-fields.component.spec.ts +0 -21
  184. package/src/form-fields/password-fields/password-fields.component.ts +0 -211
  185. package/src/form-fields/radio-button-fields/radio-button-fields.component.html +0 -104
  186. package/src/form-fields/radio-button-fields/radio-button-fields.component.scss +0 -8
  187. package/src/form-fields/radio-button-fields/radio-button-fields.component.spec.ts +0 -21
  188. package/src/form-fields/radio-button-fields/radio-button-fields.component.ts +0 -210
  189. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.html +0 -84
  190. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.scss +0 -1
  191. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.spec.ts +0 -21
  192. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.ts +0 -88
  193. package/src/form-fields/section-fields/section-fields.component.html +0 -4
  194. package/src/form-fields/section-fields/section-fields.component.scss +0 -4
  195. package/src/form-fields/section-fields/section-fields.component.spec.ts +0 -21
  196. package/src/form-fields/section-fields/section-fields.component.ts +0 -25
  197. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.html +0 -114
  198. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.scss +0 -42
  199. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.spec.ts +0 -21
  200. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.ts +0 -60
  201. package/src/form-fields/signature-fields/signature-fields.component.html +0 -43
  202. package/src/form-fields/signature-fields/signature-fields.component.scss +0 -1
  203. package/src/form-fields/signature-fields/signature-fields.component.spec.ts +0 -21
  204. package/src/form-fields/signature-fields/signature-fields.component.ts +0 -23
  205. package/src/form-fields/slider-fields/slider-fields.component.html +0 -66
  206. package/src/form-fields/slider-fields/slider-fields.component.scss +0 -47
  207. package/src/form-fields/slider-fields/slider-fields.component.spec.ts +0 -21
  208. package/src/form-fields/slider-fields/slider-fields.component.ts +0 -57
  209. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.html +0 -52
  210. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.scss +0 -77
  211. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.spec.ts +0 -21
  212. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.ts +0 -60
  213. package/src/form-fields/text-area-fields/text-area-fields.component.html +0 -86
  214. package/src/form-fields/text-area-fields/text-area-fields.component.scss +0 -1
  215. package/src/form-fields/text-area-fields/text-area-fields.component.spec.ts +0 -21
  216. package/src/form-fields/text-area-fields/text-area-fields.component.ts +0 -53
  217. package/src/form-fields/text-fields/text-fields.component.html +0 -32
  218. package/src/form-fields/text-fields/text-fields.component.scss +0 -16
  219. package/src/form-fields/text-fields/text-fields.component.spec.ts +0 -21
  220. package/src/form-fields/text-fields/text-fields.component.ts +0 -146
  221. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.html +0 -60
  222. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.scss +0 -103
  223. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.spec.ts +0 -21
  224. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.ts +0 -68
  225. package/src/form-fields/url-fields/url-fields.component.html +0 -130
  226. package/src/form-fields/url-fields/url-fields.component.scss +0 -11
  227. package/src/form-fields/url-fields/url-fields.component.spec.ts +0 -21
  228. package/src/form-fields/url-fields/url-fields.component.ts +0 -61
  229. package/src/form-submission/form-submission.module.ts +0 -30
  230. package/src/form-submission/header/header.component.html +0 -6
  231. package/src/form-submission/header/header.component.scss +0 -22
  232. package/src/form-submission/header/header.component.spec.ts +0 -21
  233. package/src/form-submission/header/header.component.ts +0 -10
  234. package/src/form-submission/navigation-tabs/navigation-tabs.component.html +0 -66
  235. package/src/form-submission/navigation-tabs/navigation-tabs.component.scss +0 -69
  236. package/src/form-submission/navigation-tabs/navigation-tabs.component.spec.ts +0 -21
  237. package/src/form-submission/navigation-tabs/navigation-tabs.component.ts +0 -49
  238. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.html +0 -143
  239. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.scss +0 -106
  240. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.spec.ts +0 -21
  241. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.ts +0 -38
  242. package/src/form-submission/submission-container/submission-container.component.html +0 -30
  243. package/src/form-submission/submission-container/submission-container.component.scss +0 -67
  244. package/src/form-submission/submission-container/submission-container.component.spec.ts +0 -21
  245. package/src/form-submission/submission-container/submission-container.component.ts +0 -14
  246. package/src/form-submission/submit-form/submit-form.component.html +0 -37
  247. package/src/form-submission/submit-form/submit-form.component.scss +0 -26
  248. package/src/form-submission/submit-form/submit-form.component.spec.ts +0 -21
  249. package/src/form-submission/submit-form/submit-form.component.ts +0 -683
  250. package/src/lib/form-submission.component.html +0 -8
  251. package/src/lib/form-submission.component.scss +0 -0
  252. package/src/lib/form-submission.component.ts +0 -61
  253. package/src/lib/form-submission.module.ts +0 -31
  254. package/src/lib/form-submission.service.spec.ts +0 -16
  255. package/src/lib/form-submission.service.ts +0 -9
  256. package/src/models/appearance.model.ts +0 -50
  257. package/src/models/elementOptionAPI.model.ts +0 -12
  258. package/src/models/elementOptionAPIData.model.ts +0 -5
  259. package/src/models/elementOptionDB.model.ts +0 -8
  260. package/src/models/elementOptionDBCriteria.model.ts +0 -7
  261. package/src/models/enum/elementType .enum.ts +0 -22
  262. package/src/models/enum/entityType.enum.ts +0 -10
  263. package/src/models/formElement.model.ts +0 -14
  264. package/src/models/logic.model.ts +0 -11
  265. package/src/models/question.model.ts +0 -19
  266. package/src/models/questionAnswer.model.ts +0 -8
  267. package/src/models/response.model.ts +0 -9
  268. package/src/models/result.model.ts +0 -5
  269. package/src/models/section.model.ts +0 -5
  270. package/src/models/subForm.model.ts +0 -14
  271. package/src/models/validation.model.ts +0 -48
  272. package/src/question/form-elements/form-elements.component.html +0 -22
  273. package/src/question/form-elements/form-elements.component.scss +0 -0
  274. package/src/question/form-elements/form-elements.component.spec.ts +0 -21
  275. package/src/question/form-elements/form-elements.component.ts +0 -26
  276. package/src/question/multiple-subform/multiple-subform.component.html +0 -57
  277. package/src/question/multiple-subform/multiple-subform.component.scss +0 -43
  278. package/src/question/multiple-subform/multiple-subform.component.spec.ts +0 -21
  279. package/src/question/multiple-subform/multiple-subform.component.ts +0 -307
  280. package/src/question/question/question.component.html +0 -30
  281. package/src/question/question/question.component.scss +0 -0
  282. package/src/question/question/question.component.spec.ts +0 -21
  283. package/src/question/question/question.component.ts +0 -57
  284. package/src/question/question.module.ts +0 -17
  285. package/src/question/recursive-logic/recursive-logic.component.css +0 -0
  286. package/src/question/recursive-logic/recursive-logic.component.html +0 -11
  287. package/src/question/recursive-logic/recursive-logic.component.spec.ts +0 -21
  288. package/src/question/recursive-logic/recursive-logic.component.ts +0 -20
  289. package/src/question/sub-form/sub-form.component.html +0 -55
  290. package/src/question/sub-form/sub-form.component.scss +0 -25
  291. package/src/question/sub-form/sub-form.component.spec.ts +0 -21
  292. package/src/question/sub-form/sub-form.component.ts +0 -87
  293. package/src/services/countryService.ts +0 -75
  294. package/src/services/data.service.ts +0 -30
  295. package/src/services/form.service.spec.ts +0 -16
  296. package/src/services/form.service.ts +0 -140
  297. package/src/services/mapper.service.ts +0 -382
  298. package/src/services/recaptcha.service.spec.ts +0 -16
  299. package/src/services/recaptcha.service.ts +0 -155
  300. package/src/shared/shared.module.ts +0 -41
  301. package/src/styles/shared-style.scss +0 -74
  302. package/src/sub-form/sub-form.module.ts +0 -24
  303. package/src/sub-form/submission-modal/submission-modal.component.html +0 -140
  304. package/src/sub-form/submission-modal/submission-modal.component.scss +0 -54
  305. package/src/sub-form/submission-modal/submission-modal.component.spec.ts +0 -21
  306. package/src/sub-form/submission-modal/submission-modal.component.ts +0 -84
  307. package/tsconfig.lib.json +0 -14
  308. package/tsconfig.lib.prod.json +0 -10
  309. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,5 @@
1
+ export declare let environment: {
2
+ production: boolean;
3
+ googleRecaptchaSiteKey: string;
4
+ htmlDirection: string;
5
+ };
@@ -0,0 +1,6 @@
1
+ export let environment = {
2
+ production: false,
3
+ googleRecaptchaSiteKey: '',
4
+ htmlDirection: 'ltr'
5
+ };
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Vudmlyb25tZW50L2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxJQUFJLFdBQVcsR0FBRztJQUNyQixVQUFVLEVBQUUsS0FBSztJQUNqQixzQkFBc0IsRUFBRSxFQUFFO0lBQ3pCLGFBQWEsRUFBRSxLQUFLO0NBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgbGV0IGVudmlyb25tZW50ID0ge1xyXG4gICAgcHJvZHVjdGlvbjogZmFsc2UsXHJcbiAgICBnb29nbGVSZWNhcHRjaGFTaXRlS2V5OiAnJyxcclxuICAgICBodG1sRGlyZWN0aW9uOiAnbHRyJ1xyXG4gIH07XHJcbiAgIl19
@@ -0,0 +1,302 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/form.service";
4
+ import * as i2 from "@angular/common";
5
+ export class CheckBoxFieldsComponent {
6
+ constructor(formService) {
7
+ this.formService = formService;
8
+ this.question = {};
9
+ this.count = 0;
10
+ this.required = false;
11
+ this.hint = '';
12
+ this.selectionType = '';
13
+ this.optionType = '';
14
+ this.lookupTable = {};
15
+ this.customOptions = [];
16
+ this.database = {};
17
+ this.api = {};
18
+ this.apiOptions = [];
19
+ this.selectedOptions = [];
20
+ this.validationFailed = false;
21
+ this.validationMessage = '';
22
+ }
23
+ ngOnInit() {
24
+ this.valueAssigned();
25
+ }
26
+ valueAssigned() {
27
+ this.count = this.question.count;
28
+ this.required = this.question.required;
29
+ this.hint = this.question.hint;
30
+ this.selectionType = this.question.formElement.appearance.selectionType;
31
+ this.minimumSelection =
32
+ this.question.formElement.validation.minimumSelection;
33
+ this.maximumSelection =
34
+ this.question.formElement.validation.maximumSelection;
35
+ this.optionType = this.question.formElement.option.optionType;
36
+ switch (this.optionType) {
37
+ case 'OPTION':
38
+ this.customOptions = this.question.formElement.option.customOptions;
39
+ if (this.question.answer) {
40
+ this.initializeCustomOption();
41
+ }
42
+ break;
43
+ case 'LOOKUP':
44
+ this.lookupTable = this.question.formElement.option.lookupTable;
45
+ this.fetchDataFromLookup();
46
+ break;
47
+ case 'DATABASE':
48
+ this.database = this.question.formElement.option.database;
49
+ this.fetchDataFromDatabase();
50
+ break;
51
+ case 'API':
52
+ this.api = this.question.formElement.option.api;
53
+ this.fetchDataFromAPI();
54
+ break;
55
+ default:
56
+ console.warn('Unknown option type:', this.optionType);
57
+ }
58
+ // If selectionType is 'SINGLE', set minimumSelection and maximumSelection to 1
59
+ if (this.selectionType === 'SINGLE') {
60
+ this.minimumSelection = 1;
61
+ this.maximumSelection = 1;
62
+ }
63
+ // If selectionType is 'MULTIPLE' and minSelection and maxSelection are not specified, set them to undefined
64
+ if (this.selectionType === 'MULTIPLE' &&
65
+ !this.minimumSelection &&
66
+ !this.maximumSelection) {
67
+ this.minimumSelection = undefined;
68
+ this.maximumSelection = undefined;
69
+ }
70
+ if (this.question.childLogics && this.question.answer) {
71
+ this.updateChildLogics(this.question);
72
+ }
73
+ }
74
+ initializeCustomOption() {
75
+ this.customOptions?.forEach((option) => {
76
+ if (this.question?.answer?.find((a) => a.toString() === option.value.toString())) {
77
+ this.selectedOptions.push(option);
78
+ }
79
+ });
80
+ }
81
+ onCheckboxChange(option, event) {
82
+ if (this.selectionType === 'SINGLE') {
83
+ if (event.target.checked) {
84
+ this.selectedOptions = [option];
85
+ this.question.answer = [option.value];
86
+ }
87
+ else {
88
+ this.selectedOptions = [];
89
+ this.question.answer = [];
90
+ }
91
+ this.isMinimumSelectionValid();
92
+ }
93
+ else if (this.selectionType === 'MULTIPLE') {
94
+ if (event.target.checked) {
95
+ if (!this.selectedOptions.includes(option)) {
96
+ this.selectedOptions.push(option);
97
+ }
98
+ }
99
+ else {
100
+ this.selectedOptions = this.selectedOptions.filter((item) => item !== option);
101
+ }
102
+ this.question.answer = this.selectedOptions.map((item) => item.value);
103
+ this.isMinimumSelectionValid();
104
+ }
105
+ // Check if the number of selected options exceeds the maximum allowed
106
+ if (this.maximumSelection !== undefined &&
107
+ this.selectedOptions.length > this.maximumSelection) {
108
+ // If exceeded, uncheck the last selected option
109
+ event.target.checked = false;
110
+ this.selectedOptions = this.selectedOptions.filter((item) => item !== option);
111
+ this.question.answer = this.selectedOptions.map((item) => item.value);
112
+ this.isMinimumSelectionValid();
113
+ }
114
+ if (this.question.childLogics) {
115
+ this.updateChildLogics(this.question);
116
+ }
117
+ }
118
+ updateChildLogics(question) {
119
+ if (question.childLogics && Array.isArray(question.childLogics)) {
120
+ question.childLogics.forEach((childLogic) => {
121
+ if (this.selectionType == 'SINGLE') {
122
+ if (this.selectedOptions.length == 0) {
123
+ childLogic.showLogic = false;
124
+ }
125
+ else {
126
+ childLogic.showLogic = this.evaluateCondition(this.selectedOptions[0]?.value, childLogic.condition, childLogic.inputValue);
127
+ }
128
+ }
129
+ else if (this.selectionType === 'MULTIPLE') {
130
+ if (this.selectedOptions.length == 0) {
131
+ childLogic.show = false;
132
+ }
133
+ else {
134
+ const selectedValues = this.selectedOptions.map((item) => item.value);
135
+ childLogic.showLogic = this.evaluateMultipleCondition(selectedValues, childLogic.condition, childLogic.inputValue);
136
+ }
137
+ }
138
+ });
139
+ }
140
+ }
141
+ evaluateCondition(answer, condition, inputValue) {
142
+ const stringInputValue = Array.isArray(inputValue) ? inputValue.map(val => val.toString()) : inputValue;
143
+ switch (condition) {
144
+ case "!=":
145
+ return answer != stringInputValue;
146
+ case "=":
147
+ return answer == stringInputValue;
148
+ case "IN":
149
+ return stringInputValue.includes(answer);
150
+ case "NOT IN":
151
+ return !(stringInputValue.includes(answer));
152
+ default:
153
+ return false;
154
+ }
155
+ }
156
+ evaluateMultipleCondition(answers, condition, inputValue) {
157
+ const stringInputValue = Array.isArray(inputValue) ? inputValue.map(val => val.toString()) : inputValue.toString();
158
+ switch (condition) {
159
+ case "!=":
160
+ return answers.every(answer => answer != stringInputValue);
161
+ case "=":
162
+ return answers.some(answer => answer == stringInputValue);
163
+ case "IN":
164
+ return answers.some(answer => stringInputValue.includes(answer));
165
+ case "NOT IN":
166
+ return answers.every(answer => !stringInputValue.includes(answer));
167
+ default:
168
+ return false;
169
+ }
170
+ }
171
+ fetchDataFromLookup() {
172
+ this.formService.fetchDataFromLookup(this.lookupTable).subscribe((response) => {
173
+ this.customOptions = response.result.values.map((item) => ({
174
+ value: item.value,
175
+ label: item.label,
176
+ }));
177
+ if (this.question.answer) {
178
+ this.initializeCustomOption();
179
+ }
180
+ }, (error) => {
181
+ console.error('HTTP Error:', error);
182
+ });
183
+ }
184
+ fetchDataFromDatabase() {
185
+ const transformedDatabase = this.transformDatabaseObject(this.database);
186
+ this.formService.fetchDataFromDatabase(transformedDatabase).subscribe((response) => {
187
+ if (response.success) {
188
+ this.customOptions = response.result.map((item) => ({
189
+ value: item.value,
190
+ label: item.label,
191
+ }));
192
+ if (this.question.answer) {
193
+ this.initializeCustomOption();
194
+ }
195
+ }
196
+ else {
197
+ console.error('Error fetching data from database:', response.message);
198
+ }
199
+ }, (error) => {
200
+ console.error('HTTP Error:', error);
201
+ });
202
+ }
203
+ transformDatabaseObject(database) {
204
+ return {
205
+ tableName: database.tableName,
206
+ valueField: database.valueField,
207
+ labelField: database.labelField,
208
+ criteria: database.criteria.map((criteria) => ({
209
+ field: criteria?.field,
210
+ valueSource: criteria?.valueSource,
211
+ condition: criteria?.condition,
212
+ value: criteria?.inputValue,
213
+ logicalOperator: criteria?.logicalOperator,
214
+ })),
215
+ };
216
+ }
217
+ fetchDataFromAPI() {
218
+ const apiConfig = this.api;
219
+ this.formService.fetchDataFromExternalAPI(apiConfig).subscribe((response) => {
220
+ let data;
221
+ if (apiConfig.pathToValue) {
222
+ data = this.extractDataByPath(response, apiConfig.pathToValue);
223
+ }
224
+ else {
225
+ data = response;
226
+ }
227
+ this.customOptions = data.map((item) => ({
228
+ value: item[apiConfig.valueField],
229
+ label: item[apiConfig.labelField],
230
+ }));
231
+ if (this.question.answer) {
232
+ this.initializeCustomOption();
233
+ }
234
+ }, (error) => {
235
+ console.error('HTTP Error:', error);
236
+ });
237
+ }
238
+ extractDataByPath(data, path) {
239
+ return path.split('.').reduce((acc, part) => acc && acc[part], data);
240
+ }
241
+ isMinimumSelectionValid() {
242
+ this.validationFailed = false;
243
+ if (this.selectedOptions.length == 0 && this.required) {
244
+ this.validationFailed = true;
245
+ this.validationMessage = 'This is a required question';
246
+ this.question.validation = false;
247
+ }
248
+ else if (this.minimumSelection !== undefined) {
249
+ if (this.selectionType == 'SINGLE') {
250
+ if (this.selectedOptions.length < this.minimumSelection && this.required) {
251
+ this.validationFailed = true;
252
+ this.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;
253
+ this.question.validation = false;
254
+ }
255
+ else {
256
+ this.question.validation = true;
257
+ }
258
+ }
259
+ else {
260
+ if (this.selectedOptions.length < this.minimumSelection) {
261
+ this.validationFailed = true;
262
+ this.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;
263
+ this.question.validation = false;
264
+ }
265
+ else {
266
+ this.question.validation = true;
267
+ }
268
+ }
269
+ }
270
+ else {
271
+ this.question.validation = true;
272
+ }
273
+ }
274
+ getOptions() {
275
+ if (this.optionType === 'OPTION') {
276
+ return this.customOptions;
277
+ }
278
+ else if (this.optionType === 'LOOKUP') {
279
+ return Object.values(this.lookupTable);
280
+ }
281
+ else if (this.optionType === 'API') {
282
+ return this.apiOptions.map((option) => option.valueField);
283
+ }
284
+ else {
285
+ return [];
286
+ }
287
+ }
288
+ isOptionDisabled(option) {
289
+ return (this.maximumSelection !== undefined &&
290
+ this.selectedOptions.length >= this.maximumSelection &&
291
+ !this.selectedOptions.includes(option));
292
+ }
293
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CheckBoxFieldsComponent, deps: [{ token: i1.FormService }], target: i0.ɵɵFactoryTarget.Component }); }
294
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CheckBoxFieldsComponent, selector: "lib-check-box-fields", inputs: { question: "question" }, ngImport: i0, template: "<div class=\"mb-5 px-3\">\r\n <div class=\"input-wrapper mb-2\">\r\n <div [innerHTML]=\"question.questionNumber\"></div>\r\n &nbsp;&nbsp; <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"form-check\" *ngFor=\"let option of customOptions\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [id]=\"option.value + question?.id\"\r\n [name]=\"option.value + 'Checkbox'\"\r\n [value]=\"option.value\"\r\n (change)=\"onCheckboxChange(option, $event)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n [checked]=\"selectedOptions.includes(option)\"\r\n />\r\n <label\r\n class=\"formCheckLabel ms-2 me-4 mb-2\"\r\n [for]=\"option.value + question?.id\"\r\n *ngIf=\"optionType == 'OPTION'\"\r\n >{{ option.value }}</label\r\n >\r\n <label\r\n class=\"formCheckLabel ms-2 me-4\"\r\n [for]=\"option.value + question?.id\"\r\n *ngIf=\"optionType == 'LOOKUP' || 'DATABASE' || 'API'\"\r\n >{{ option.label }}</label\r\n >\r\n </div>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger\">\r\n <svg\r\n class=\"validationSvg\"\r\n viewBox=\"0 0 24 24\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\r\n fill=\"#FF0000\"\r\n stroke=\"#FF0000\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 12.75L12 7.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\r\n </svg>\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}:root{--library-font-family: Roboto, \"Helvetica Neue\", sans-serif;--library-font-size: 14px}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}.form-check-input,.form-check-label{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
295
+ }
296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CheckBoxFieldsComponent, decorators: [{
297
+ type: Component,
298
+ args: [{ selector: 'lib-check-box-fields', template: "<div class=\"mb-5 px-3\">\r\n <div class=\"input-wrapper mb-2\">\r\n <div [innerHTML]=\"question.questionNumber\"></div>\r\n &nbsp;&nbsp; <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"form-check\" *ngFor=\"let option of customOptions\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [id]=\"option.value + question?.id\"\r\n [name]=\"option.value + 'Checkbox'\"\r\n [value]=\"option.value\"\r\n (change)=\"onCheckboxChange(option, $event)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n [checked]=\"selectedOptions.includes(option)\"\r\n />\r\n <label\r\n class=\"formCheckLabel ms-2 me-4 mb-2\"\r\n [for]=\"option.value + question?.id\"\r\n *ngIf=\"optionType == 'OPTION'\"\r\n >{{ option.value }}</label\r\n >\r\n <label\r\n class=\"formCheckLabel ms-2 me-4\"\r\n [for]=\"option.value + question?.id\"\r\n *ngIf=\"optionType == 'LOOKUP' || 'DATABASE' || 'API'\"\r\n >{{ option.label }}</label\r\n >\r\n </div>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger\">\r\n <svg\r\n class=\"validationSvg\"\r\n viewBox=\"0 0 24 24\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\r\n fill=\"#FF0000\"\r\n stroke=\"#FF0000\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 12.75L12 7.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\r\n </svg>\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}:root{--library-font-family: Roboto, \"Helvetica Neue\", sans-serif;--library-font-size: 14px}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}.form-check-input,.form-check-label{cursor:pointer}\n"] }]
299
+ }], ctorParameters: function () { return [{ type: i1.FormService }]; }, propDecorators: { question: [{
300
+ type: Input
301
+ }] } });
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2NoZWNrLWJveC1maWVsZHMvY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2NoZWNrLWJveC1maWVsZHMvY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVFqRCxNQUFNLE9BQU8sdUJBQXVCO0lBa0JsQyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWpCbkMsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUM1QixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUczQixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQzFCLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsUUFBRyxHQUFRLEVBQUUsQ0FBQztRQUNkLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFDdkIsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztJQUVpQixDQUFDO0lBRWpELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsS0FB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QUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDM0Q7YUFBTTtZQUNMLE9BQU8sRUFBRSxDQUFDO1NBQ1g7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBVztRQUMxQixPQUFPLENBQ0wsSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVM7WUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQjtZQUNwRCxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUN2QyxDQUFDO0lBQ0osQ0FBQzsrR0F0VVUsdUJBQXVCO21HQUF2Qix1QkFBdUIsOEZDUnBDLHV3SEFxR0E7OzRGRDdGYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usc0JBQXNCO2tHQUt2QixRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jaGVjay1ib3gtZmllbGRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hlY2tCb3hGaWVsZHNDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnkgPSB7fTtcclxuICBjb3VudDogbnVtYmVyID0gMDtcclxuICByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhpbnQ6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGlvblR5cGU6IHN0cmluZyA9ICcnO1xyXG4gIG1pbmltdW1TZWxlY3Rpb24/OiBudW1iZXI7XHJcbiAgbWF4aW11bVNlbGVjdGlvbj86IG51bWJlcjtcclxuICBvcHRpb25UeXBlOiBzdHJpbmcgPSAnJztcclxuICBsb29rdXBUYWJsZTogYW55ID0ge307XHJcbiAgY3VzdG9tT3B0aW9uczogYW55W10gPSBbXTtcclxuICBkYXRhYmFzZTogYW55ID0ge307XHJcbiAgYXBpOiBhbnkgPSB7fTtcclxuICBhcGlPcHRpb25zOiBhbnlbXSA9IFtdOyBcclxuICBzZWxlY3RlZE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgdmFsaWRhdGlvbkZhaWxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudmFsdWVBc3NpZ25lZCgpO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVBc3NpZ25lZCgpIHtcclxuICAgIHRoaXMuY291bnQgPSB0aGlzLnF1ZXN0aW9uLmNvdW50O1xyXG4gICAgdGhpcy5yZXF1aXJlZCA9IHRoaXMucXVlc3Rpb24ucmVxdWlyZWQ7XHJcbiAgICB0aGlzLmhpbnQgPSB0aGlzLnF1ZXN0aW9uLmhpbnQ7XHJcbiAgICB0aGlzLnNlbGVjdGlvblR5cGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LmFwcGVhcmFuY2Uuc2VsZWN0aW9uVHlwZTtcclxuICAgIHRoaXMubWluaW11bVNlbGVjdGlvbiA9XHJcbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5taW5pbXVtU2VsZWN0aW9uO1xyXG4gICAgdGhpcy5tYXhpbXVtU2VsZWN0aW9uID1cclxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLm1heGltdW1TZWxlY3Rpb247XHJcbiAgICB0aGlzLm9wdGlvblR5cGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5vcHRpb25UeXBlO1xyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSAnT1BUSU9OJzpcclxuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5jdXN0b21PcHRpb25zO1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmFuc3dlcikge1xyXG4gICAgICAgICAgdGhpcy5pbml0aWFsaXplQ3VzdG9tT3B0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdMT09LVVAnOlxyXG4gICAgICAgIHRoaXMubG9va3VwVGFibGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5sb29rdXBUYWJsZTtcclxuICAgICAgICB0aGlzLmZldGNoRGF0YUZyb21Mb29rdXAoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnREFUQUJBU0UnOlxyXG4gICAgICAgIHRoaXMuZGF0YWJhc2UgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5kYXRhYmFzZTtcclxuICAgICAgICB0aGlzLmZldGNoRGF0YUZyb21EYXRhYmFzZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBUEknOlxyXG4gICAgICAgIHRoaXMuYXBpID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24uYXBpO1xyXG4gICAgICAgIHRoaXMuZmV0Y2hEYXRhRnJvbUFQSSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBvcHRpb24gdHlwZTonLCB0aGlzLm9wdGlvblR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHNlbGVjdGlvblR5cGUgaXMgJ1NJTkdMRScsIHNldCBtaW5pbXVtU2VsZWN0aW9uIGFuZCBtYXhpbXVtU2VsZWN0aW9uIHRvIDFcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdTSU5HTEUnKSB7XHJcbiAgICAgIHRoaXMubWluaW11bVNlbGVjdGlvbiA9IDE7XHJcbiAgICAgIHRoaXMubWF4aW11bVNlbGVjdGlvbiA9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgc2VsZWN0aW9uVHlwZSBpcyAnTVVMVElQTEUnIGFuZCBtaW5TZWxlY3Rpb24gYW5kIG1heFNlbGVjdGlvbiBhcmUgbm90IHNwZWNpZmllZCwgc2V0IHRoZW0gdG8gdW5kZWZpbmVkXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gJ01VTFRJUExFJyAmJlxyXG4gICAgICAhdGhpcy5taW5pbXVtU2VsZWN0aW9uICYmXHJcbiAgICAgICF0aGlzLm1heGltdW1TZWxlY3Rpb25cclxuICAgICkge1xyXG4gICAgICB0aGlzLm1pbmltdW1TZWxlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMubWF4aW11bVNlbGVjdGlvbiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLnF1ZXN0aW9uLmNoaWxkTG9naWNzICYmIHRoaXMucXVlc3Rpb24uYW5zd2VyKXtcclxuICAgICAgdGhpcy51cGRhdGVDaGlsZExvZ2ljcyh0aGlzLnF1ZXN0aW9uKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZUN1c3RvbU9wdGlvbigpIHtcclxuICAgIHRoaXMuY3VzdG9tT3B0aW9ucz8uZm9yRWFjaCgob3B0aW9uOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb24/LmFuc3dlcj8uZmluZCgoYTogYW55KSA9PiBhLnRvU3RyaW5nKCkgPT09IG9wdGlvbi52YWx1ZS50b1N0cmluZygpKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tib3hDaGFuZ2Uob3B0aW9uOiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdTSU5HTEUnKSB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gW29wdGlvbl07XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPSBbb3B0aW9uLnZhbHVlXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24uYW5zd2VyID0gW107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc01pbmltdW1TZWxlY3Rpb25WYWxpZCgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdNVUxUSVBMRScpIHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0gIT09IG9wdGlvblxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpO1xyXG4gICAgICB0aGlzLmlzTWluaW11bVNlbGVjdGlvblZhbGlkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBvcHRpb25zIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZFxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm1heGltdW1TZWxlY3Rpb24gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiB0aGlzLm1heGltdW1TZWxlY3Rpb25cclxuICAgICkge1xyXG4gICAgICAvLyBJZiBleGNlZWRlZCwgdW5jaGVjayB0aGUgbGFzdCBzZWxlY3RlZCBvcHRpb25cclxuICAgICAgZXZlbnQudGFyZ2V0LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgKGl0ZW0pID0+IGl0ZW0gIT09IG9wdGlvblxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSk7XHJcbiAgICAgIHRoaXMuaXNNaW5pbXVtU2VsZWN0aW9uVmFsaWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLnF1ZXN0aW9uLmNoaWxkTG9naWNzKXtcclxuICAgICAgICAgIHRoaXMudXBkYXRlQ2hpbGRMb2dpY3ModGhpcy5xdWVzdGlvbik7XHJcbiAgICAgICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2hpbGRMb2dpY3MocXVlc3Rpb246IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLmNoaWxkTG9naWNzICYmIEFycmF5LmlzQXJyYXkocXVlc3Rpb24uY2hpbGRMb2dpY3MpKSB7XHJcbiAgICAgIHF1ZXN0aW9uLmNoaWxkTG9naWNzLmZvckVhY2goKGNoaWxkTG9naWM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0aW9uVHlwZT09J1NJTkdMRScpe1xyXG4gICAgICAgICAgaWYodGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgY2hpbGRMb2dpYy5zaG93TG9naWM9ZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBjaGlsZExvZ2ljLnNob3dMb2dpYyA9IHRoaXMuZXZhbHVhdGVDb25kaXRpb24odGhpcy5zZWxlY3RlZE9wdGlvbnNbMF0/LnZhbHVlLCBjaGlsZExvZ2ljLmNvbmRpdGlvbiwgY2hpbGRMb2dpYy5pbnB1dFZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSAnTVVMVElQTEUnKSB7XHJcbiAgICAgICAgICBpZih0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgICBjaGlsZExvZ2ljLnNob3c9ZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLnZhbHVlKTtcclxuICAgICAgICAgIGNoaWxkTG9naWMuc2hvd0xvZ2ljID0gdGhpcy5ldmFsdWF0ZU11bHRpcGxlQ29uZGl0aW9uKHNlbGVjdGVkVmFsdWVzLCBjaGlsZExvZ2ljLmNvbmRpdGlvbiwgY2hpbGRMb2dpYy5pbnB1dFZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBldmFsdWF0ZUNvbmRpdGlvbihhbnN3ZXI6IGFueVtdLCBjb25kaXRpb246IHN0cmluZywgaW5wdXRWYWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzdHJpbmdJbnB1dFZhbHVlID0gQXJyYXkuaXNBcnJheShpbnB1dFZhbHVlKSA/IGlucHV0VmFsdWUubWFwKHZhbCA9PiB2YWwudG9TdHJpbmcoKSkgOiBpbnB1dFZhbHVlO1xyXG5cclxuICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7ICAgICAgXHJcbiAgICAgIGNhc2UgXCIhPVwiOlxyXG4gICAgICAgIHJldHVybiBhbnN3ZXIgIT1zdHJpbmdJbnB1dFZhbHVlO1xyXG4gICAgICBjYXNlIFwiPVwiOlxyXG4gICAgICAgIHJldHVybiBhbnN3ZXIgPT1zdHJpbmdJbnB1dFZhbHVlO1xyXG4gICAgICBjYXNlIFwiSU5cIjpcclxuICAgICAgICByZXR1cm4gc3RyaW5nSW5wdXRWYWx1ZS5pbmNsdWRlcyhhbnN3ZXIpO1xyXG4gICAgICBjYXNlIFwiTk9UIElOXCI6XHJcbiAgICAgICAgcmV0dXJuICEoc3RyaW5nSW5wdXRWYWx1ZS5pbmNsdWRlcyhhbnN3ZXIpKVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV2YWx1YXRlTXVsdGlwbGVDb25kaXRpb24oYW5zd2VyczogYW55W10sIGNvbmRpdGlvbjogc3RyaW5nLCBpbnB1dFZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHN0cmluZ0lucHV0VmFsdWUgPSBBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpID8gaW5wdXRWYWx1ZS5tYXAodmFsID0+IHZhbC50b1N0cmluZygpKSA6IGlucHV0VmFsdWUudG9TdHJpbmcoKTtcclxuICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7XHJcbiAgICAgIGNhc2UgXCIhPVwiOlxyXG4gICAgICAgIHJldHVybiBhbnN3ZXJzLmV2ZXJ5KGFuc3dlciA9PiBhbnN3ZXIgIT0gc3RyaW5nSW5wdXRWYWx1ZSk7XHJcbiAgICAgIGNhc2UgXCI9XCI6XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcnMuc29tZShhbnN3ZXIgPT4gYW5zd2VyID09IHN0cmluZ0lucHV0VmFsdWUpO1xyXG4gICAgICBjYXNlIFwiSU5cIjpcclxuICAgICAgICByZXR1cm4gYW5zd2Vycy5zb21lKGFuc3dlciA9PiBzdHJpbmdJbnB1dFZhbHVlLmluY2x1ZGVzKGFuc3dlcikpO1xyXG4gICAgICBjYXNlIFwiTk9UIElOXCI6XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcnMuZXZlcnkoYW5zd2VyID0+ICFzdHJpbmdJbnB1dFZhbHVlLmluY2x1ZGVzKGFuc3dlcikpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZldGNoRGF0YUZyb21Mb29rdXAoKSB7XHJcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZldGNoRGF0YUZyb21Mb29rdXAodGhpcy5sb29rdXBUYWJsZSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSByZXNwb25zZS5yZXN1bHQudmFsdWVzLm1hcChcclxuICAgICAgICAgIChpdGVtOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfSkgPT4gKHtcclxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXHJcbiAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmFuc3dlcikge1xyXG4gICAgICAgICAgdGhpcy5pbml0aWFsaXplQ3VzdG9tT3B0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdIVFRQIEVycm9yOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZldGNoRGF0YUZyb21EYXRhYmFzZSgpIHtcclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YWJhc2UgPSB0aGlzLnRyYW5zZm9ybURhdGFiYXNlT2JqZWN0KHRoaXMuZGF0YWJhc2UpO1xyXG4gICAgdGhpcy5mb3JtU2VydmljZS5mZXRjaERhdGFGcm9tRGF0YWJhc2UodHJhbnNmb3JtZWREYXRhYmFzZSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gcmVzcG9uc2UucmVzdWx0Lm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9KSA9PiAoe1xyXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxyXG4gICAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmFuc3dlcikge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDdXN0b21PcHRpb24oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgZGF0YSBmcm9tIGRhdGFiYXNlOicsIHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignSFRUUCBFcnJvcjonLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1EYXRhYmFzZU9iamVjdChkYXRhYmFzZTogYW55KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0YWJsZU5hbWU6IGRhdGFiYXNlLnRhYmxlTmFtZSxcclxuICAgICAgdmFsdWVGaWVsZDogZGF0YWJhc2UudmFsdWVGaWVsZCxcclxuICAgICAgbGFiZWxGaWVsZDogZGF0YWJhc2UubGFiZWxGaWVsZCxcclxuICAgICAgY3JpdGVyaWE6IGRhdGFiYXNlLmNyaXRlcmlhLm1hcCgoY3JpdGVyaWE6IGFueSkgPT4gKHtcclxuICAgICAgICBmaWVsZDogY3JpdGVyaWE/LmZpZWxkLFxyXG4gICAgICAgIHZhbHVlU291cmNlOmNyaXRlcmlhPy52YWx1ZVNvdXJjZSxcclxuICAgICAgICBjb25kaXRpb246IGNyaXRlcmlhPy5jb25kaXRpb24sXHJcbiAgICAgICAgdmFsdWU6IGNyaXRlcmlhPy5pbnB1dFZhbHVlLFxyXG4gICAgICAgIGxvZ2ljYWxPcGVyYXRvcjogY3JpdGVyaWE/LmxvZ2ljYWxPcGVyYXRvcixcclxuICAgICAgfSkpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZldGNoRGF0YUZyb21BUEkoKSB7XHJcbiAgICBjb25zdCBhcGlDb25maWcgPSB0aGlzLmFwaTtcclxuICAgIHRoaXMuZm9ybVNlcnZpY2UuZmV0Y2hEYXRhRnJvbUV4dGVybmFsQVBJKGFwaUNvbmZpZykuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICBpZihhcGlDb25maWcucGF0aFRvVmFsdWUpIHtcclxuICAgICAgICAgIGRhdGEgPSB0aGlzLmV4dHJhY3REYXRhQnlQYXRoKHJlc3BvbnNlLCBhcGlDb25maWcucGF0aFRvVmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhID0gcmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucyA9IGRhdGEubWFwKChpdGVtOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICB2YWx1ZTogaXRlbVthcGlDb25maWcudmFsdWVGaWVsZF0sXHJcbiAgICAgICAgICBsYWJlbDogaXRlbVthcGlDb25maWcubGFiZWxGaWVsZF0sXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmFuc3dlcikge1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLmluaXRpYWxpemVDdXN0b21PcHRpb24oKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignSFRUUCBFcnJvcjonLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBleHRyYWN0RGF0YUJ5UGF0aChkYXRhOiBhbnksIHBhdGg6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgcGFydCkgPT4gYWNjICYmIGFjY1twYXJ0XSwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBpc01pbmltdW1TZWxlY3Rpb25WYWxpZCgpIHtcclxuICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09IDAgJiYgdGhpcy5yZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJ1RoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbic7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1pbmltdW1TZWxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZih0aGlzLnNlbGVjdGlvblR5cGU9PSdTSU5HTEUnKXtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoIDwgdGhpcy5taW5pbXVtU2VsZWN0aW9uICYmIHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gYE1pbmltdW0gJHt0aGlzLm1pbmltdW1TZWxlY3Rpb259ICBzZWxlY3Rpb24ocykgcmVxdWlyZWQuYDtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA8IHRoaXMubWluaW11bVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgTWluaW11bSAke3RoaXMubWluaW11bVNlbGVjdGlvbn0gIHNlbGVjdGlvbihzKSByZXF1aXJlZC5gO1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRPcHRpb25zKCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9uVHlwZSA9PT0gJ09QVElPTicpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tT3B0aW9ucztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25UeXBlID09PSAnTE9PS1VQJykge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmxvb2t1cFRhYmxlKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25UeXBlID09PSAnQVBJJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5hcGlPcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWVGaWVsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc09wdGlvbkRpc2FibGVkKG9wdGlvbjogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLm1heGltdW1TZWxlY3Rpb24gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPj0gdGhpcy5tYXhpbXVtU2VsZWN0aW9uICYmXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICBjbGFzcz1cIm1iLTUgcHgtM1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyIG1iLTJcIj5cclxuICAgIDxkaXYgW2lubmVySFRNTF09XCJxdWVzdGlvbi5xdWVzdGlvbk51bWJlclwiPjwvZGl2PlxyXG4gICAgJm5ic3A7Jm5ic3A7IDxsYWJlbD57eyBxdWVzdGlvbi5xdWVzdGlvbiB9fTwvbGFiZWxcclxuICAgID4mbmJzcDtcclxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJzdmctd3JhcHBlciBtYi0yIGhpbnRJY29uXCJcclxuICAgICAgW2F0dHIuZGF0YS10aXRsZV09XCJoaW50XCJcclxuICAgICAgKm5nSWY9XCJoaW50XCJcclxuICAgID5cclxuICAgICAgPHN2Z1xyXG4gICAgICAgIGNsYXNzPVwiaGludFN2Z1wiXHJcbiAgICAgICAgdmlld0JveD1cIjAgMCAzMCAzMFwiXHJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgID5cclxuICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgIGQ9XCJNMTUgMjYuMjVWMjYuMjVDOC43ODYyNSAyNi4yNSAzLjc1IDIxLjIxMzggMy43NSAxNVYxNUMzLjc1IDguNzg2MjUgOC43ODYyNSAzLjc1IDE1IDMuNzVWMy43NUMyMS4yMTM4IDMuNzUgMjYuMjUgOC43ODYyNSAyNi4yNSAxNVYxNUMyNi4yNSAyMS4yMTM4IDIxLjIxMzggMjYuMjUgMTUgMjYuMjVaXCJcclxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxyXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNMTUgMTYuNTYyM1YxNi4yNDk4QzE1IDE1LjIyODUgMTUuNjMxMiAxNC42NzQ4IDE2LjI2MzcgMTQuMjQ5OEMxNi44ODEyIDEzLjgzMzUgMTcuNSAxMy4yOTEgMTcuNSAxMi4yOTFDMTcuNSAxMC45MDk4IDE2LjM4MTMgOS43OTEwMiAxNSA5Ljc5MTAyQzEzLjYxODcgOS43OTEwMiAxMi41IDEwLjkwOTggMTIuNSAxMi4yOTFcIlxyXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXHJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgZD1cIk0xNC45OTg4IDIwQzE0LjgyNjMgMjAgMTQuNjg2MyAyMC4xNCAxNC42ODc1IDIwLjMxMjVDMTQuNjg3NSAyMC40ODUgMTQuODI3NSAyMC42MjUgMTUgMjAuNjI1QzE1LjE3MjUgMjAuNjI1IDE1LjMxMjUgMjAuNDg1IDE1LjMxMjUgMjAuMzEyNUMxNS4zMTI1IDIwLjE0IDE1LjE3MjUgMjAgMTQuOTk4OCAyMFwiXHJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcclxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjdXN0b21PcHRpb25zXCI+XHJcbiAgICA8aW5wdXRcclxuICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgW2lkXT1cIm9wdGlvbi52YWx1ZSArIHF1ZXN0aW9uPy5pZFwiXHJcbiAgICAgIFtuYW1lXT1cIm9wdGlvbi52YWx1ZSArICdDaGVja2JveCdcIlxyXG4gICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcclxuICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKG9wdGlvbiwgJGV2ZW50KVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc09wdGlvbkRpc2FibGVkKG9wdGlvbilcIlxyXG4gICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZE9wdGlvbnMuaW5jbHVkZXMob3B0aW9uKVwiXHJcbiAgICAvPlxyXG4gICAgPGxhYmVsXHJcbiAgICAgIGNsYXNzPVwiZm9ybUNoZWNrTGFiZWwgbXMtMiBtZS00IG1iLTJcIlxyXG4gICAgICBbZm9yXT1cIm9wdGlvbi52YWx1ZSArIHF1ZXN0aW9uPy5pZFwiXHJcbiAgICAgICpuZ0lmPVwib3B0aW9uVHlwZSA9PSAnT1BUSU9OJ1wiXHJcbiAgICAgID57eyBvcHRpb24udmFsdWUgfX08L2xhYmVsXHJcbiAgICA+XHJcbiAgICA8bGFiZWxcclxuICAgICAgY2xhc3M9XCJmb3JtQ2hlY2tMYWJlbCBtcy0yIG1lLTRcIlxyXG4gICAgICBbZm9yXT1cIm9wdGlvbi52YWx1ZSArIHF1ZXN0aW9uPy5pZFwiXHJcbiAgICAgICpuZ0lmPVwib3B0aW9uVHlwZSA9PSAnTE9PS1VQJyB8fCAnREFUQUJBU0UnIHx8ICdBUEknXCJcclxuICAgICAgPnt7IG9wdGlvbi5sYWJlbCB9fTwvbGFiZWxcclxuICAgID5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwidmFsaWRhdGlvbkZhaWxlZFwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj5cclxuICAgIDxzdmdcclxuICAgICAgY2xhc3M9XCJ2YWxpZGF0aW9uU3ZnXCJcclxuICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgPlxyXG4gICAgICA8cGF0aFxyXG4gICAgICAgIGQ9XCJNMTIuMDAxIDE2Ljc1QzEyLjEzOSAxNi43NSAxMi4yNTEgMTYuNjM4IDEyLjI1IDE2LjVDMTIuMjUgMTYuMzYyIDEyLjEzOCAxNi4yNSAxMiAxNi4yNUMxMS44NjIgMTYuMjUgMTEuNzUgMTYuMzYyIDExLjc1IDE2LjVDMTEuNzUgMTYuNjM4IDExLjg2MiAxNi43NSAxMi4wMDEgMTYuNzVcIlxyXG4gICAgICAgIHN0cm9rZT1cIndoaXRlXCJcclxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgLz5cclxuICAgICAgPHBhdGhcclxuICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICBkPVwiTTEyIDIxQzcuMDI5IDIxIDMgMTYuOTcxIDMgMTJDMyA3LjAyOSA3LjAyOSAzIDEyIDNDMTYuOTcxIDMgMjEgNy4wMjkgMjEgMTJDMjEgMTYuOTcxIDE2Ljk3MSAyMSAxMiAyMVpcIlxyXG4gICAgICAgIGZpbGw9XCIjRkYwMDAwXCJcclxuICAgICAgICBzdHJva2U9XCIjRkYwMDAwXCJcclxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgLz5cclxuICAgICAgPHBhdGhcclxuICAgICAgICBkPVwiTTEyIDEyLjc1TDEyIDcuNzVcIlxyXG4gICAgICAgIHN0cm9rZT1cIndoaXRlXCJcclxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgLz5cclxuICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxNlwiIHI9XCIxXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgIDwvc3ZnPlxyXG4gICAge3sgdmFsaWRhdGlvbk1lc3NhZ2UgfX1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==