@ukhomeoffice/cop-react-form-renderer 7.3.2-alpha.5 → 8.0.0-alpha

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 (761) hide show
  1. package/README.md +106 -32
  2. package/dist/components/CheckYourAnswers/Answer.d.ts +10 -0
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.d.ts +35 -0
  4. package/dist/components/CheckYourAnswers/index.d.ts +2 -0
  5. package/dist/components/CollectionPage/CollectionPage.d.ts +24 -0
  6. package/dist/components/CollectionPage/index.d.ts +1 -0
  7. package/dist/components/CollectionSummary/BannerStrip.d.ts +9 -0
  8. package/dist/components/CollectionSummary/CollectionSummary.d.ts +53 -0
  9. package/dist/components/CollectionSummary/Confirmation.d.ts +15 -0
  10. package/dist/components/CollectionSummary/RenderListView.d.ts +42 -0
  11. package/dist/components/CollectionSummary/SummaryCard.d.ts +62 -0
  12. package/dist/components/CollectionSummary/SummaryCardButtons.d.ts +21 -0
  13. package/dist/components/CollectionSummary/SummaryCardDetails.d.ts +14 -0
  14. package/dist/components/CollectionSummary/SummaryCardValidationContext.d.ts +9 -0
  15. package/dist/components/CollectionSummary/index.d.ts +2 -0
  16. package/dist/components/FormComponent/Collection.d.ts +39 -0
  17. package/dist/components/FormComponent/Container.d.ts +26 -0
  18. package/dist/components/FormComponent/FormComponent.d.ts +39 -0
  19. package/dist/components/FormComponent/helpers/addLabel.d.ts +7 -0
  20. package/dist/components/FormComponent/helpers/getComponentDisabled.d.ts +2 -0
  21. package/dist/components/FormComponent/helpers/getComponentError.d.ts +4 -0
  22. package/dist/components/FormComponent/helpers/getComponentFieldSet.d.ts +2 -0
  23. package/dist/components/FormComponent/helpers/index.d.ts +5 -0
  24. package/dist/components/FormComponent/index.d.ts +2 -0
  25. package/dist/components/FormPage/FormPage.d.ts +36 -0
  26. package/dist/components/FormPage/index.d.ts +2 -0
  27. package/dist/components/FormRenderer/FormRenderer.d.ts +39 -0
  28. package/dist/components/FormRenderer/handlers/cyaAction.d.ts +9 -0
  29. package/dist/components/FormRenderer/handlers/getPageId.d.ts +8 -0
  30. package/dist/components/FormRenderer/handlers/index.d.ts +6 -0
  31. package/dist/components/FormRenderer/handlers/navigate.d.ts +10 -0
  32. package/dist/components/FormRenderer/handlers/submissionError.d.ts +7 -0
  33. package/dist/components/FormRenderer/helpers/canActionProceed.d.ts +12 -0
  34. package/dist/components/FormRenderer/helpers/canCYASubmit.d.ts +10 -0
  35. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.d.ts +2 -0
  36. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.d.ts +51 -0
  37. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.d.ts +179 -0
  38. package/dist/components/FormRenderer/helpers/getCYA.d.ts +20 -0
  39. package/dist/components/FormRenderer/helpers/getFormState.d.ts +25 -0
  40. package/dist/components/FormRenderer/helpers/getNextPageId.d.ts +2 -0
  41. package/dist/components/FormRenderer/helpers/getPage.d.ts +9 -0
  42. package/dist/components/FormRenderer/helpers/getRelevantPages.d.ts +2 -0
  43. package/dist/components/FormRenderer/helpers/getSubmissionStatus.d.ts +2 -0
  44. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.d.ts +10 -0
  45. package/dist/components/FormRenderer/helpers/index.d.ts +29 -0
  46. package/dist/components/FormRenderer/index.d.ts +2 -0
  47. package/dist/components/FormRenderer/onCYAAction.d.ts +6 -0
  48. package/dist/components/FormRenderer/onPageAction.d.ts +2 -0
  49. package/dist/components/FormRenderer/onTaskAction.d.ts +2 -0
  50. package/dist/components/PageActions/ActionButton.d.ts +7 -0
  51. package/dist/components/PageActions/PageActions.d.ts +7 -0
  52. package/dist/components/PageActions/index.d.ts +2 -0
  53. package/dist/components/SummaryList/GroupAction.d.ts +12 -0
  54. package/dist/components/SummaryList/RowAction.d.ts +12 -0
  55. package/dist/components/SummaryList/SummaryList.d.ts +28 -0
  56. package/dist/components/SummaryList/SummaryList.stories.d.ts +10 -0
  57. package/dist/components/SummaryList/SummaryListHeadingRow.d.ts +7 -0
  58. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.d.ts +16 -0
  59. package/dist/components/SummaryList/SummaryListRow.d.ts +19 -0
  60. package/dist/components/SummaryList/SummaryListTitleRow.d.ts +7 -0
  61. package/dist/components/SummaryList/helpers/getGroupActionAttributes.d.ts +17 -0
  62. package/dist/components/SummaryList/helpers/getRowActionAttributes.d.ts +17 -0
  63. package/dist/components/SummaryList/helpers/index.d.ts +2 -0
  64. package/dist/components/SummaryList/index.d.ts +2 -0
  65. package/dist/components/TaskList/Task.d.ts +12 -0
  66. package/dist/components/TaskList/TaskList.d.ts +40 -0
  67. package/dist/components/TaskList/TaskState.d.ts +6 -0
  68. package/dist/components/TaskList/index.d.ts +2 -0
  69. package/dist/components/index.d.ts +8 -0
  70. package/dist/context/HooksContext/HooksContext.d.ts +23 -0
  71. package/dist/context/HooksContext/index.d.ts +3 -0
  72. package/dist/context/ValidationContext/ValidationContext.d.ts +7 -0
  73. package/dist/context/ValidationContext/index.d.ts +3 -0
  74. package/dist/context/index.d.ts +3 -0
  75. package/dist/hooks/index.d.ts +6 -0
  76. package/dist/hooks/useAxios.d.ts +2 -0
  77. package/dist/hooks/useGetRequest.d.ts +12 -0
  78. package/dist/hooks/useHooks.d.ts +2 -0
  79. package/dist/hooks/useRefData.d.ts +7 -0
  80. package/dist/hooks/useValidation.d.ts +2 -0
  81. package/dist/index.cjs +5 -0
  82. package/dist/index.css +1 -0
  83. package/dist/index.d.ts +6 -0
  84. package/dist/index.js +6124 -81
  85. package/dist/models/CollectionLabels.d.ts +7 -0
  86. package/dist/models/ComponentTypes.d.ts +27 -0
  87. package/dist/models/EventTypes.d.ts +6 -0
  88. package/dist/models/FormPages.d.ts +6 -0
  89. package/dist/models/FormTypes.d.ts +10 -0
  90. package/dist/models/HubFormats.d.ts +5 -0
  91. package/dist/models/PageAction.d.ts +89 -0
  92. package/dist/models/TaskStates.d.ts +39 -0
  93. package/dist/models/index.d.ts +143 -0
  94. package/dist/setupTests.d.ts +14 -0
  95. package/dist/utils/CheckYourAnswers/getCYAAction.d.ts +20 -0
  96. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.d.ts +22 -0
  97. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.d.ts +22 -0
  98. package/dist/utils/CheckYourAnswers/getCYARow.d.ts +26 -0
  99. package/dist/utils/CheckYourAnswers/getCYARowForGroup.d.ts +17 -0
  100. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.d.ts +2 -0
  101. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.d.ts +23 -0
  102. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.d.ts +2 -0
  103. package/dist/utils/CheckYourAnswers/getCYARowsForPage.d.ts +11 -0
  104. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.d.ts +3 -0
  105. package/dist/utils/CheckYourAnswers/index.d.ts +5 -0
  106. package/dist/utils/CheckYourAnswers/showComponentCYA.d.ts +11 -0
  107. package/dist/utils/CollectionPage/addCollectionPageEntry.d.ts +12 -0
  108. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.d.ts +13 -0
  109. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.d.ts +13 -0
  110. package/dist/utils/CollectionPage/getCollectionPageActiveId.d.ts +14 -0
  111. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.d.ts +15 -0
  112. package/dist/utils/CollectionPage/getCollectionPageData.d.ts +15 -0
  113. package/dist/utils/CollectionPage/getErrorsForCollection.d.ts +2 -0
  114. package/dist/utils/CollectionPage/getQuickEditPage.d.ts +40 -0
  115. package/dist/utils/CollectionPage/index.d.ts +13 -0
  116. package/dist/utils/CollectionPage/mergeCollectionPages.d.ts +13 -0
  117. package/dist/utils/CollectionPage/removeCollectionPageEntry.d.ts +11 -0
  118. package/dist/utils/CollectionPage/setCollectionPageData.d.ts +16 -0
  119. package/dist/utils/Component/addShowWhen.d.ts +13 -0
  120. package/dist/utils/Component/applyToComponentTree.d.ts +15 -0
  121. package/dist/utils/Component/cleanAttributes.d.ts +14 -0
  122. package/dist/utils/Component/elevateNestedComponents.d.ts +28 -0
  123. package/dist/utils/Component/getDefaultValue.d.ts +2 -0
  124. package/dist/utils/Component/getDefaultValueFromConfig.d.ts +2 -0
  125. package/dist/utils/Component/index.d.ts +12 -0
  126. package/dist/utils/Component/isEditable.d.ts +3 -0
  127. package/dist/utils/Component/optionIsSelected.d.ts +10 -0
  128. package/dist/utils/Component/setupContainerComponentsPath.d.ts +2 -0
  129. package/dist/utils/Component/showComponent.d.ts +2 -0
  130. package/dist/utils/Condition/index.d.ts +6 -0
  131. package/dist/utils/Condition/meetsAllConditions.d.ts +8 -0
  132. package/dist/utils/Condition/meetsCondition.d.ts +14 -0
  133. package/dist/utils/Condition/meetsOneCondition.d.ts +8 -0
  134. package/dist/utils/Condition/setupConditions.d.ts +2 -0
  135. package/dist/utils/Container/getEditableComponents.d.ts +7 -0
  136. package/dist/utils/Container/index.d.ts +6 -0
  137. package/dist/utils/Container/setupNesting.d.ts +2 -0
  138. package/dist/utils/Container/showContainer.d.ts +8 -0
  139. package/dist/utils/Data/applyFormula.d.ts +2 -0
  140. package/dist/utils/Data/deleteValues.d.ts +8 -0
  141. package/dist/utils/Data/getAutocompleteSource.d.ts +2 -0
  142. package/dist/utils/Data/getDataPath.d.ts +21 -0
  143. package/dist/utils/Data/getOptions.d.ts +2 -0
  144. package/dist/utils/Data/getSourceData.d.ts +17 -0
  145. package/dist/utils/Data/index.d.ts +15 -0
  146. package/dist/utils/Data/nestInRefdataOptions.d.ts +10 -0
  147. package/dist/utils/Data/refDataToOptions.d.ts +8 -0
  148. package/dist/utils/Data/setDataItem.d.ts +2 -0
  149. package/dist/utils/Data/setupFormData.d.ts +15 -0
  150. package/dist/utils/Data/setupRefDataUrlForComponent.d.ts +2 -0
  151. package/dist/utils/FormPage/applyConditionalProperties.d.ts +8 -0
  152. package/dist/utils/FormPage/getConditionalText.d.ts +23 -0
  153. package/dist/utils/FormPage/getFormPage.d.ts +9 -0
  154. package/dist/utils/FormPage/getFormPages.d.ts +9 -0
  155. package/dist/utils/FormPage/getPageActions.d.ts +13 -0
  156. package/dist/utils/FormPage/getParagraphFromText.d.ts +11 -0
  157. package/dist/utils/FormPage/index.d.ts +10 -0
  158. package/dist/utils/FormPage/showFormPage.d.ts +8 -0
  159. package/dist/utils/FormPage/showFormPageCYA.d.ts +8 -0
  160. package/dist/utils/FormPage/useComponent.d.ts +9 -0
  161. package/dist/utils/Format/formatData.d.ts +8 -0
  162. package/dist/utils/Format/formatDataForComponent.d.ts +15 -0
  163. package/dist/utils/Format/formatDataForForm.d.ts +8 -0
  164. package/dist/utils/Format/formatDataForPage.d.ts +15 -0
  165. package/dist/utils/Format/index.d.ts +7 -0
  166. package/dist/utils/Hub/getFormHub.d.ts +15 -0
  167. package/dist/utils/Hub/index.d.ts +4 -0
  168. package/dist/utils/Meta/constants.d.ts +2 -0
  169. package/dist/utils/Meta/documents/getDocuments.d.ts +2 -0
  170. package/dist/utils/Meta/documents/index.d.ts +6 -0
  171. package/dist/utils/Meta/documents/setDocumentsForField.d.ts +2 -0
  172. package/dist/utils/Meta/index.d.ts +9 -0
  173. package/dist/utils/Operate/checkValueIsTruthy.d.ts +9 -0
  174. package/dist/utils/Operate/deleteValueInFormData.d.ts +8 -0
  175. package/dist/utils/Operate/doesContainValue.d.ts +11 -0
  176. package/dist/utils/Operate/getFirstOf.d.ts +2 -0
  177. package/dist/utils/Operate/getIndexOfMatchingValueIn.d.ts +11 -0
  178. package/dist/utils/Operate/getLength.d.ts +11 -0
  179. package/dist/utils/Operate/index.d.ts +4 -0
  180. package/dist/utils/Operate/persistValueInFormData.d.ts +9 -0
  181. package/dist/utils/Operate/runPageOperations.d.ts +19 -0
  182. package/dist/utils/Operate/setValueInFormData.d.ts +2 -0
  183. package/dist/utils/Operate/shouldRun.d.ts +9 -0
  184. package/dist/utils/Validate/additional/conditionallyPermittedChange.d.ts +14 -0
  185. package/dist/utils/Validate/additional/conditionallyRequired.d.ts +11 -0
  186. package/dist/utils/Validate/additional/index.d.ts +2 -0
  187. package/dist/utils/Validate/additional/mustBeAfter.d.ts +14 -0
  188. package/dist/utils/Validate/additional/mustBeBefore.d.ts +14 -0
  189. package/dist/utils/Validate/additional/mustBeEarlierDateTime.d.ts +15 -0
  190. package/dist/utils/Validate/additional/mustBeGreaterThan.d.ts +7 -0
  191. package/dist/utils/Validate/additional/mustBeInTheFuture.d.ts +8 -0
  192. package/dist/utils/Validate/additional/mustBeInThePast.d.ts +9 -0
  193. package/dist/utils/Validate/additional/mustBeLessThan.d.ts +7 -0
  194. package/dist/utils/Validate/additional/mustBeLongerThan.d.ts +9 -0
  195. package/dist/utils/Validate/additional/mustBeNumbersOnly.d.ts +9 -0
  196. package/dist/utils/Validate/additional/mustBeOneOf.d.ts +8 -0
  197. package/dist/utils/Validate/additional/mustBeShorterThan.d.ts +9 -0
  198. package/dist/utils/Validate/additional/mustBeUniqueInCollection.d.ts +10 -0
  199. package/dist/utils/Validate/additional/mustEnterAtLeastOne.d.ts +9 -0
  200. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.d.ts +7 -0
  201. package/dist/utils/Validate/additional/mustNotContainSql.d.ts +2 -0
  202. package/dist/utils/Validate/additional/mustSelectOnlyOne.d.ts +8 -0
  203. package/dist/utils/Validate/additional/utils.d.ts +4 -0
  204. package/dist/utils/Validate/index.d.ts +42 -0
  205. package/dist/utils/Validate/validateCollection.d.ts +9 -0
  206. package/dist/utils/Validate/validateComponent.d.ts +16 -0
  207. package/dist/utils/Validate/validateContainer.d.ts +12 -0
  208. package/dist/utils/Validate/validateDate.d.ts +29 -0
  209. package/dist/utils/Validate/validateEmail.d.ts +13 -0
  210. package/dist/utils/Validate/validateMultifile.d.ts +3 -0
  211. package/dist/utils/Validate/validateOnPageLoad.d.ts +1 -0
  212. package/dist/utils/Validate/validatePage.d.ts +8 -0
  213. package/dist/utils/Validate/validateRegex.d.ts +13 -0
  214. package/dist/utils/Validate/validateRequired.d.ts +9 -0
  215. package/dist/utils/Validate/validateTextArea.d.ts +13 -0
  216. package/dist/utils/Validate/validateTime.d.ts +20 -0
  217. package/dist/utils/canOverrideFieldRequired.d.ts +9 -0
  218. package/dist/utils/index.d.ts +140 -0
  219. package/package.json +81 -170
  220. package/LICENCE.md +0 -21
  221. package/dist/components/CheckYourAnswers/Answer.js +0 -59
  222. package/dist/components/CheckYourAnswers/Answer.test.js +0 -142
  223. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +0 -252
  224. package/dist/components/CheckYourAnswers/CheckYourAnswers.scss +0 -43
  225. package/dist/components/CheckYourAnswers/CheckYourAnswers.stories.mdx +0 -409
  226. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +0 -603
  227. package/dist/components/CheckYourAnswers/index.js +0 -10
  228. package/dist/components/CollectionPage/CollectionPage.js +0 -178
  229. package/dist/components/CollectionPage/CollectionPage.test.js +0 -507
  230. package/dist/components/CollectionPage/index.js +0 -10
  231. package/dist/components/CollectionSummary/BannerStrip.js +0 -65
  232. package/dist/components/CollectionSummary/BannerStrip.scss +0 -60
  233. package/dist/components/CollectionSummary/BannerStrip.test.js +0 -167
  234. package/dist/components/CollectionSummary/CollectionSummary.js +0 -362
  235. package/dist/components/CollectionSummary/CollectionSummary.scss +0 -26
  236. package/dist/components/CollectionSummary/CollectionSummary.test.js +0 -368
  237. package/dist/components/CollectionSummary/Confirmation.js +0 -65
  238. package/dist/components/CollectionSummary/Confirmation.scss +0 -26
  239. package/dist/components/CollectionSummary/Confirmation.test.js +0 -109
  240. package/dist/components/CollectionSummary/RenderListView.js +0 -162
  241. package/dist/components/CollectionSummary/RenderListView.scss +0 -295
  242. package/dist/components/CollectionSummary/RenderListView.test.js +0 -303
  243. package/dist/components/CollectionSummary/SummaryCard.js +0 -277
  244. package/dist/components/CollectionSummary/SummaryCard.scss +0 -114
  245. package/dist/components/CollectionSummary/SummaryCard.test.js +0 -1442
  246. package/dist/components/CollectionSummary/SummaryCardButtons.js +0 -76
  247. package/dist/components/CollectionSummary/SummaryCardButtons.test.js +0 -87
  248. package/dist/components/CollectionSummary/SummaryCardDetails.js +0 -206
  249. package/dist/components/CollectionSummary/SummaryCardDetails.scss +0 -216
  250. package/dist/components/CollectionSummary/SummaryCardDetails.test.js +0 -654
  251. package/dist/components/CollectionSummary/SummaryCardValidationContext.js +0 -79
  252. package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +0 -104
  253. package/dist/components/CollectionSummary/index.js +0 -10
  254. package/dist/components/FormComponent/Collection.js +0 -234
  255. package/dist/components/FormComponent/Collection.scss +0 -24
  256. package/dist/components/FormComponent/Collection.test.js +0 -934
  257. package/dist/components/FormComponent/Container.js +0 -130
  258. package/dist/components/FormComponent/Container.scss +0 -15
  259. package/dist/components/FormComponent/Container.test.js +0 -456
  260. package/dist/components/FormComponent/FormComponent.js +0 -238
  261. package/dist/components/FormComponent/FormComponent.stories.mdx +0 -186
  262. package/dist/components/FormComponent/FormComponent.test.js +0 -436
  263. package/dist/components/FormComponent/helpers/addLabel.js +0 -25
  264. package/dist/components/FormComponent/helpers/getComponentDisabled.js +0 -15
  265. package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +0 -27
  266. package/dist/components/FormComponent/helpers/getComponentError.js +0 -23
  267. package/dist/components/FormComponent/helpers/getComponentError.test.js +0 -51
  268. package/dist/components/FormComponent/helpers/getComponentFieldSet.js +0 -11
  269. package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +0 -30
  270. package/dist/components/FormComponent/helpers/index.js +0 -35
  271. package/dist/components/FormComponent/index.js +0 -10
  272. package/dist/components/FormPage/FormPage.js +0 -212
  273. package/dist/components/FormPage/FormPage.scss +0 -7
  274. package/dist/components/FormPage/FormPage.stories.mdx +0 -157
  275. package/dist/components/FormPage/FormPage.test.js +0 -454
  276. package/dist/components/FormPage/index.js +0 -10
  277. package/dist/components/FormRenderer/FormRenderer.js +0 -426
  278. package/dist/components/FormRenderer/FormRenderer.scss +0 -5
  279. package/dist/components/FormRenderer/FormRenderer.stories.mdx +0 -178
  280. package/dist/components/FormRenderer/FormRenderer.test.js +0 -799
  281. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/cop-reassign-task-to-rcc.json +0 -446
  282. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-containerised.json +0 -120
  283. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested-block.json +0 -113
  284. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested.json +0 -106
  285. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-refdata.json +0 -106
  286. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-target-component-nested.json +0 -99
  287. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens.json +0 -106
  288. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-show-whens-page-hidden.json +0 -113
  289. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-airpax.json +0 -26408
  290. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-mandec.json +0 -9405
  291. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component-dependent-on-external-data.json +0 -158
  292. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component.json +0 -86
  293. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-collection.json +0 -173
  294. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-hidden-collection.json +0 -202
  295. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-show-when-in-component-and-page.json +0 -63
  296. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-with-nested-questions-visible-elsewhere.json +0 -118
  297. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-with-nested-questions.json +0 -112
  298. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component.json +0 -58
  299. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-containerised-component.json +0 -97
  300. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-collection-component.json +0 -83
  301. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-component.json +0 -55
  302. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-entire-collection.json +0 -114
  303. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component-leaf-hidden.json +0 -106
  304. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component.json +0 -106
  305. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-options.json +0 -99
  306. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-collection.json +0 -128
  307. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-component-used-elsewhere.json +0 -109
  308. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-same-component-reused.json +0 -62
  309. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page.json +0 -96
  310. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-nested-answers-hidden-by-option-visible-elsewhere.json +0 -113
  311. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-nested-answers-hidden-by-option.json +0 -112
  312. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-nested-component.json +0 -26003
  313. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-nested-radio-component.json +0 -201
  314. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-same-component-reused-one-shown.json +0 -75
  315. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-variance-breach.json +0 -4272
  316. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-carrier.json +0 -407
  317. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-change-what-happened-before.json +0 -300
  318. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-remove-photos-before.json +0 -384
  319. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-business-interests-before.json +0 -140
  320. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-criminality-before.json +0 -186
  321. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-unspent-convictions-before.json +0 -143
  322. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-variance-breach-with-upload-files.json +0 -1264
  323. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-containerised.json +0 -11
  324. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested-block.json +0 -10
  325. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested.json +0 -9
  326. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-refdata.json +0 -11
  327. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-target-component-nested.json +0 -9
  328. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens.json +0 -9
  329. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-show-whens-page-hidden.json +0 -9
  330. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component-dependent-on-external-data.json +0 -26
  331. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component.json +0 -15
  332. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-collection.json +0 -25
  333. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-hidden-collection.json +0 -26
  334. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-show-when-in-component-and-page.json +0 -6
  335. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-with-nested-questions-visible-elsewhere.json +0 -12
  336. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-with-nested-questions.json +0 -12
  337. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component.json +0 -5
  338. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-containerised-component.json +0 -11
  339. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-collection-component.json +0 -15
  340. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-component.json +0 -5
  341. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-entire-collection.json +0 -20
  342. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component-leaf-hidden.json +0 -14
  343. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component.json +0 -14
  344. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-options.json +0 -10
  345. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-collection.json +0 -18
  346. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-component-used-elsewhere.json +0 -9
  347. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-same-component-reused.json +0 -6
  348. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page.json +0 -9
  349. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-nested-answers-hidden-by-option-visible-elsewhere.json +0 -12
  350. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-nested-answers-hidden-by-option.json +0 -12
  351. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-nested-component.json +0 -63
  352. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-nested-radio-component.json +0 -45
  353. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-same-component-reused-one-shown.json +0 -8
  354. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/reassign-to-rcc.json +0 -72
  355. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-change-what-happened-after.json +0 -280
  356. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-remove-photos-after.json +0 -355
  357. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-base-file.json +0 -80
  358. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-business-interests-after.json +0 -122
  359. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-criminality-after.json +0 -86
  360. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-unspent-convictions-after.json +0 -127
  361. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-containerised-removed.json +0 -11
  362. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-block-removed.json +0 -7
  363. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-removed.json +0 -7
  364. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-refdata-removed.json +0 -7
  365. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-removed.json +0 -7
  366. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-target-component-nested-removed.json +0 -6
  367. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-show-whens-page-hidden-removed.json +0 -6
  368. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-dependent-on-external-data-removed.json +0 -23
  369. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-removed.json +0 -4
  370. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-collection-removed.json +0 -21
  371. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-hidden-collection-removed.json +0 -6
  372. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-removed.json +0 -4
  373. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-show-when-in-component-and-page-removed.json +0 -5
  374. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-with-nested-questions-removed.json +0 -10
  375. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-with-nested-questions-visible-elsewhere-removed.json +0 -11
  376. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-containerised-component-removed.json +0 -10
  377. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-collection-component-removed.json +0 -4
  378. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-component-removed.json +0 -4
  379. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-entire-collection-removed.json +0 -3
  380. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-leaf-hidden-removed.json +0 -13
  381. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-removed.json +0 -10
  382. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-options-removed.json +0 -8
  383. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-collection-removed.json +0 -15
  384. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-component-used-elsewhere-removed.json +0 -5
  385. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-removed.json +0 -4
  386. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-same-component-reused-removed.json +0 -5
  387. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-nested-answers-hidden-by-option-removed.json +0 -11
  388. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-nested-answers-hidden-by-option-visible-elsewhere-removed.json +0 -12
  389. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-nested-component.json +0 -63
  390. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-nested-radio-component-removed.json +0 -45
  391. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-same-component-reused-one-shown-removed.json +0 -7
  392. package/dist/components/FormRenderer/handlers/cyaAction.js +0 -23
  393. package/dist/components/FormRenderer/handlers/getPageId.js +0 -15
  394. package/dist/components/FormRenderer/handlers/getPageId.test.js +0 -35
  395. package/dist/components/FormRenderer/handlers/handlers.test.js +0 -81
  396. package/dist/components/FormRenderer/handlers/index.js +0 -17
  397. package/dist/components/FormRenderer/handlers/navigate.js +0 -25
  398. package/dist/components/FormRenderer/handlers/submissionError.js +0 -18
  399. package/dist/components/FormRenderer/helpers/canActionProceed.js +0 -27
  400. package/dist/components/FormRenderer/helpers/canActionProceed.test.js +0 -84
  401. package/dist/components/FormRenderer/helpers/canCYASubmit.js +0 -17
  402. package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +0 -75
  403. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +0 -63
  404. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +0 -191
  405. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +0 -338
  406. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +0 -434
  407. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.js +0 -399
  408. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.test.js +0 -559
  409. package/dist/components/FormRenderer/helpers/getCYA.js +0 -42
  410. package/dist/components/FormRenderer/helpers/getCYA.test.js +0 -46
  411. package/dist/components/FormRenderer/helpers/getFormState.js +0 -25
  412. package/dist/components/FormRenderer/helpers/getFormState.test.js +0 -60
  413. package/dist/components/FormRenderer/helpers/getNextPageId.js +0 -76
  414. package/dist/components/FormRenderer/helpers/getNextPageId.test.js +0 -292
  415. package/dist/components/FormRenderer/helpers/getPage.js +0 -27
  416. package/dist/components/FormRenderer/helpers/getPage.test.js +0 -45
  417. package/dist/components/FormRenderer/helpers/getRelevantPages.js +0 -27
  418. package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +0 -70
  419. package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +0 -65
  420. package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +0 -309
  421. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +0 -201
  422. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +0 -473
  423. package/dist/components/FormRenderer/helpers/index.js +0 -33
  424. package/dist/components/FormRenderer/index.js +0 -10
  425. package/dist/components/FormRenderer/onCYAAction.js +0 -150
  426. package/dist/components/FormRenderer/onCYAAction.test.js +0 -741
  427. package/dist/components/FormRenderer/onPageAction.js +0 -227
  428. package/dist/components/FormRenderer/onPageAction.test.js +0 -960
  429. package/dist/components/FormRenderer/onTaskAction.js +0 -47
  430. package/dist/components/FormRenderer/onTaskAction.test.js +0 -247
  431. package/dist/components/PageActions/ActionButton.js +0 -48
  432. package/dist/components/PageActions/ActionButton.test.js +0 -73
  433. package/dist/components/PageActions/PageActions.js +0 -37
  434. package/dist/components/PageActions/PageActions.stories.mdx +0 -74
  435. package/dist/components/PageActions/PageActions.test.js +0 -106
  436. package/dist/components/PageActions/index.js +0 -10
  437. package/dist/components/SummaryList/GroupAction.js +0 -50
  438. package/dist/components/SummaryList/GroupAction.test.js +0 -86
  439. package/dist/components/SummaryList/RowAction.js +0 -48
  440. package/dist/components/SummaryList/RowAction.test.js +0 -86
  441. package/dist/components/SummaryList/SummaryList.js +0 -128
  442. package/dist/components/SummaryList/SummaryList.scss +0 -79
  443. package/dist/components/SummaryList/SummaryList.stories.mdx +0 -84
  444. package/dist/components/SummaryList/SummaryList.test.js +0 -504
  445. package/dist/components/SummaryList/SummaryListHeadingRow.js +0 -39
  446. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.js +0 -65
  447. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.scss +0 -38
  448. package/dist/components/SummaryList/SummaryListRow.js +0 -58
  449. package/dist/components/SummaryList/SummaryListTitleRow.js +0 -32
  450. package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +0 -29
  451. package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +0 -72
  452. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +0 -29
  453. package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +0 -72
  454. package/dist/components/SummaryList/helpers/index.js +0 -14
  455. package/dist/components/SummaryList/index.js +0 -10
  456. package/dist/components/TaskList/Task.js +0 -62
  457. package/dist/components/TaskList/Task.test.js +0 -176
  458. package/dist/components/TaskList/TaskList.js +0 -175
  459. package/dist/components/TaskList/TaskList.scss +0 -123
  460. package/dist/components/TaskList/TaskList.stories.mdx +0 -164
  461. package/dist/components/TaskList/TaskList.test.js +0 -535
  462. package/dist/components/TaskList/TaskState.js +0 -37
  463. package/dist/components/TaskList/TaskState.test.js +0 -95
  464. package/dist/components/TaskList/index.js +0 -10
  465. package/dist/components/index.js +0 -56
  466. package/dist/context/HooksContext/HooksContext.js +0 -122
  467. package/dist/context/HooksContext/HooksContext.test.js +0 -45
  468. package/dist/context/HooksContext/index.js +0 -16
  469. package/dist/context/ValidationContext/ValidationContext.js +0 -98
  470. package/dist/context/ValidationContext/ValidationContext.test.js +0 -107
  471. package/dist/context/ValidationContext/index.js +0 -16
  472. package/dist/context/index.js +0 -21
  473. package/dist/hooks/index.js +0 -55
  474. package/dist/hooks/useAxios.js +0 -36
  475. package/dist/hooks/useGetRequest.js +0 -89
  476. package/dist/hooks/useHooks.js +0 -15
  477. package/dist/hooks/useRefData.js +0 -62
  478. package/dist/hooks/useValidation.js +0 -15
  479. package/dist/json/actions.json +0 -17
  480. package/dist/json/actionsNoSave.json +0 -17
  481. package/dist/json/addressDetails.json +0 -149
  482. package/dist/json/areYouACivilServant.json +0 -7
  483. package/dist/json/firstForm.json +0 -94
  484. package/dist/json/grade.json +0 -108
  485. package/dist/json/group.data.json +0 -21
  486. package/dist/json/group.json +0 -402
  487. package/dist/json/groupOfRow.json +0 -137
  488. package/dist/json/groupOfRowData.json +0 -15
  489. package/dist/json/port.json +0 -346
  490. package/dist/json/saveAndContinue.json +0 -98
  491. package/dist/json/sublocation.json +0 -859
  492. package/dist/json/taskList.json +0 -265
  493. package/dist/json/team.json +0 -17351
  494. package/dist/json/terminal.json +0 -81
  495. package/dist/json/userProfile.data.json +0 -21
  496. package/dist/json/userProfile.json +0 -276
  497. package/dist/models/CollectionLabels.js +0 -15
  498. package/dist/models/ComponentTypes.js +0 -58
  499. package/dist/models/EventTypes.js +0 -16
  500. package/dist/models/FormPages.js +0 -16
  501. package/dist/models/FormTypes.js +0 -24
  502. package/dist/models/HubFormats.js +0 -14
  503. package/dist/models/PageAction.js +0 -65
  504. package/dist/models/TaskStates.js +0 -46
  505. package/dist/models/index.js +0 -77
  506. package/dist/setupTests.js +0 -54
  507. package/dist/utils/CheckYourAnswers/getCYAAction.js +0 -44
  508. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +0 -120
  509. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +0 -57
  510. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +0 -162
  511. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +0 -66
  512. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +0 -198
  513. package/dist/utils/CheckYourAnswers/getCYARow.js +0 -58
  514. package/dist/utils/CheckYourAnswers/getCYARow.test.js +0 -373
  515. package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +0 -69
  516. package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +0 -70
  517. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +0 -71
  518. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +0 -285
  519. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +0 -237
  520. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +0 -844
  521. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +0 -45
  522. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +0 -535
  523. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +0 -72
  524. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +0 -343
  525. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.js +0 -42
  526. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.test.js +0 -56
  527. package/dist/utils/CheckYourAnswers/index.js +0 -15
  528. package/dist/utils/CheckYourAnswers/showComponentCYA.js +0 -53
  529. package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +0 -149
  530. package/dist/utils/CollectionPage/addCollectionPageEntry.js +0 -23
  531. package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +0 -17
  532. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +0 -26
  533. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +0 -70
  534. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +0 -51
  535. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +0 -125
  536. package/dist/utils/CollectionPage/getCollectionPageActiveId.js +0 -24
  537. package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +0 -26
  538. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +0 -44
  539. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +0 -88
  540. package/dist/utils/CollectionPage/getCollectionPageData.js +0 -53
  541. package/dist/utils/CollectionPage/getCollectionPageData.test.js +0 -103
  542. package/dist/utils/CollectionPage/getErrorsForCollection.js +0 -55
  543. package/dist/utils/CollectionPage/getErrorsForCollection.test.js +0 -154
  544. package/dist/utils/CollectionPage/getQuickEditPage.js +0 -122
  545. package/dist/utils/CollectionPage/getQuickEditPage.test.js +0 -143
  546. package/dist/utils/CollectionPage/index.js +0 -33
  547. package/dist/utils/CollectionPage/mergeCollectionPages.js +0 -128
  548. package/dist/utils/CollectionPage/mergeCollectionPages.test.js +0 -198
  549. package/dist/utils/CollectionPage/removeCollectionPageEntry.js +0 -36
  550. package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +0 -62
  551. package/dist/utils/CollectionPage/setCollectionPageData.js +0 -60
  552. package/dist/utils/CollectionPage/setCollectionPageData.test.js +0 -182
  553. package/dist/utils/Component/addShowWhen.js +0 -43
  554. package/dist/utils/Component/addShowWhen.test.js +0 -217
  555. package/dist/utils/Component/applyToComponentTree.js +0 -68
  556. package/dist/utils/Component/applyToComponentTree.test.js +0 -125
  557. package/dist/utils/Component/cleanAttributes.js +0 -42
  558. package/dist/utils/Component/cleanAttributes.test.js +0 -67
  559. package/dist/utils/Component/elevateNestedComponents.js +0 -58
  560. package/dist/utils/Component/elevateNestedComponents.test.js +0 -305
  561. package/dist/utils/Component/getComponent.js +0 -305
  562. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +0 -73
  563. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +0 -251
  564. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +0 -156
  565. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +0 -104
  566. package/dist/utils/Component/getComponentTests/getComponent.details.test.js +0 -56
  567. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +0 -60
  568. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +0 -60
  569. package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +0 -31
  570. package/dist/utils/Component/getComponentTests/getComponent.html.test.js +0 -42
  571. package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +0 -29
  572. package/dist/utils/Component/getComponentTests/getComponent.list.test.js +0 -47
  573. package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +0 -66
  574. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +0 -211
  575. package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +0 -46
  576. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +0 -60
  577. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +0 -221
  578. package/dist/utils/Component/getComponentTests/getComponent.select.test.js +0 -62
  579. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +0 -60
  580. package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +0 -104
  581. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +0 -80
  582. package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +0 -14
  583. package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +0 -29
  584. package/dist/utils/Component/getDefaultValue.js +0 -22
  585. package/dist/utils/Component/getDefaultValue.test.js +0 -62
  586. package/dist/utils/Component/getDefaultValueFromConfig.js +0 -106
  587. package/dist/utils/Component/getDefaultValueFromConfig.test.js +0 -141
  588. package/dist/utils/Component/index.js +0 -29
  589. package/dist/utils/Component/isEditable.js +0 -13
  590. package/dist/utils/Component/isEditable.test.js +0 -42
  591. package/dist/utils/Component/optionIsSelected.js +0 -25
  592. package/dist/utils/Component/optionIsSelected.test.js +0 -69
  593. package/dist/utils/Component/setupContainerComponentsPath.js +0 -35
  594. package/dist/utils/Component/setupContainerComponentsPath.test.js +0 -79
  595. package/dist/utils/Component/showComponent.js +0 -25
  596. package/dist/utils/Component/showComponent.test.js +0 -157
  597. package/dist/utils/Component/wrapInFormGroup.js +0 -26
  598. package/dist/utils/Condition/index.js +0 -17
  599. package/dist/utils/Condition/meetsAllConditions.js +0 -44
  600. package/dist/utils/Condition/meetsAllConditions.test.js +0 -109
  601. package/dist/utils/Condition/meetsCondition.js +0 -165
  602. package/dist/utils/Condition/meetsCondition.test.js +0 -899
  603. package/dist/utils/Condition/meetsOneCondition.js +0 -32
  604. package/dist/utils/Condition/meetsOneCondition.test.js +0 -101
  605. package/dist/utils/Condition/setupConditions.js +0 -36
  606. package/dist/utils/Condition/setupConditions.test.js +0 -34
  607. package/dist/utils/Container/getEditableComponents.js +0 -29
  608. package/dist/utils/Container/getEditableComponents.test.js +0 -134
  609. package/dist/utils/Container/index.js +0 -17
  610. package/dist/utils/Container/setupNesting.js +0 -53
  611. package/dist/utils/Container/setupNesting.test.js +0 -143
  612. package/dist/utils/Container/showContainer.js +0 -52
  613. package/dist/utils/Container/showContainer.test.js +0 -179
  614. package/dist/utils/Data/applyFormula.js +0 -90
  615. package/dist/utils/Data/applyFormula.test.js +0 -264
  616. package/dist/utils/Data/deleteValues.js +0 -19
  617. package/dist/utils/Data/deleteValues.test.js +0 -58
  618. package/dist/utils/Data/getAutocompleteSource.js +0 -87
  619. package/dist/utils/Data/getAutocompleteSource.test.js +0 -335
  620. package/dist/utils/Data/getDataPath.js +0 -66
  621. package/dist/utils/Data/getDataPath.test.js +0 -49
  622. package/dist/utils/Data/getOptions.js +0 -86
  623. package/dist/utils/Data/getOptions.test.js +0 -279
  624. package/dist/utils/Data/getSourceData.js +0 -44
  625. package/dist/utils/Data/getSourceData.test.js +0 -158
  626. package/dist/utils/Data/index.js +0 -35
  627. package/dist/utils/Data/nestInRefdataOptions.js +0 -47
  628. package/dist/utils/Data/nestInRefdataOptions.test.js +0 -237
  629. package/dist/utils/Data/refDataToOptions.js +0 -44
  630. package/dist/utils/Data/refDataToOptions.test.js +0 -197
  631. package/dist/utils/Data/setDataItem.js +0 -26
  632. package/dist/utils/Data/setDataItem.test.js +0 -136
  633. package/dist/utils/Data/setupFormData.js +0 -49
  634. package/dist/utils/Data/setupFormData.test.js +0 -215
  635. package/dist/utils/Data/setupRefDataUrlForComponent.js +0 -44
  636. package/dist/utils/Data/setupRefDataUrlForComponent.test.js +0 -150
  637. package/dist/utils/FormPage/applyConditionalProperties.js +0 -34
  638. package/dist/utils/FormPage/applyConditionalProperties.test.js +0 -61
  639. package/dist/utils/FormPage/getConditionalText.js +0 -55
  640. package/dist/utils/FormPage/getConditionalText.test.js +0 -163
  641. package/dist/utils/FormPage/getFormPage.js +0 -54
  642. package/dist/utils/FormPage/getFormPage.test.js +0 -206
  643. package/dist/utils/FormPage/getFormPages.js +0 -30
  644. package/dist/utils/FormPage/getFormPages.test.js +0 -97
  645. package/dist/utils/FormPage/getPageActions.js +0 -58
  646. package/dist/utils/FormPage/getPageActions.test.js +0 -115
  647. package/dist/utils/FormPage/getParagraphFromText.js +0 -21
  648. package/dist/utils/FormPage/getParagraphFromText.test.js +0 -28
  649. package/dist/utils/FormPage/index.js +0 -24
  650. package/dist/utils/FormPage/showFormPage.js +0 -52
  651. package/dist/utils/FormPage/showFormPage.test.js +0 -181
  652. package/dist/utils/FormPage/showFormPageCYA.js +0 -23
  653. package/dist/utils/FormPage/showFormPageCYA.test.js +0 -29
  654. package/dist/utils/FormPage/useComponent.js +0 -83
  655. package/dist/utils/FormPage/useComponent.test.js +0 -216
  656. package/dist/utils/Format/formatData.js +0 -27
  657. package/dist/utils/Format/formatData.test.js +0 -46
  658. package/dist/utils/Format/formatDataForComponent.js +0 -35
  659. package/dist/utils/Format/formatDataForComponent.test.js +0 -114
  660. package/dist/utils/Format/formatDataForForm.js +0 -27
  661. package/dist/utils/Format/formatDataForForm.test.js +0 -79
  662. package/dist/utils/Format/formatDataForPage.js +0 -31
  663. package/dist/utils/Format/formatDataForPage.test.js +0 -94
  664. package/dist/utils/Format/index.js +0 -21
  665. package/dist/utils/Hub/getFormHub.js +0 -40
  666. package/dist/utils/Hub/getFormHub.test.js +0 -105
  667. package/dist/utils/Hub/index.js +0 -15
  668. package/dist/utils/Meta/constants.js +0 -9
  669. package/dist/utils/Meta/documents/getDocuments.js +0 -15
  670. package/dist/utils/Meta/documents/getDocuments.test.js +0 -46
  671. package/dist/utils/Meta/documents/index.js +0 -19
  672. package/dist/utils/Meta/documents/setDocumentsForField.js +0 -30
  673. package/dist/utils/Meta/documents/setDocumentsForField.test.js +0 -97
  674. package/dist/utils/Meta/index.js +0 -17
  675. package/dist/utils/Operate/checkValueIsTruthy.js +0 -29
  676. package/dist/utils/Operate/checkValueIsTruthy.test.js +0 -43
  677. package/dist/utils/Operate/deleteValueInFormData.js +0 -27
  678. package/dist/utils/Operate/deleteValueInFormData.test.js +0 -61
  679. package/dist/utils/Operate/doesContainValue.js +0 -35
  680. package/dist/utils/Operate/doesContainValue.test.js +0 -76
  681. package/dist/utils/Operate/getFirstOf.js +0 -31
  682. package/dist/utils/Operate/getFirstOf.test.js +0 -87
  683. package/dist/utils/Operate/getIndexOfMatchingValueIn.js +0 -68
  684. package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +0 -158
  685. package/dist/utils/Operate/getLength.js +0 -51
  686. package/dist/utils/Operate/getLength.test.js +0 -90
  687. package/dist/utils/Operate/index.js +0 -13
  688. package/dist/utils/Operate/persistValueInFormData.js +0 -40
  689. package/dist/utils/Operate/persistValueInFormData.test.js +0 -118
  690. package/dist/utils/Operate/runPageOperations.js +0 -75
  691. package/dist/utils/Operate/runPageOperations.test.js +0 -105
  692. package/dist/utils/Operate/setValueInFormData.js +0 -22
  693. package/dist/utils/Operate/setValueInFormData.test.js +0 -45
  694. package/dist/utils/Operate/shouldRun.js +0 -57
  695. package/dist/utils/Operate/shouldRun.test.js +0 -65
  696. package/dist/utils/Validate/additional/conditionallyPermittedChange.js +0 -26
  697. package/dist/utils/Validate/additional/conditionallyPermittedChange.test.js +0 -34
  698. package/dist/utils/Validate/additional/conditionallyRequired.js +0 -24
  699. package/dist/utils/Validate/additional/conditionallyRequired.test.js +0 -74
  700. package/dist/utils/Validate/additional/index.js +0 -74
  701. package/dist/utils/Validate/additional/index.test.js +0 -130
  702. package/dist/utils/Validate/additional/mustBeAfter.js +0 -34
  703. package/dist/utils/Validate/additional/mustBeAfter.test.js +0 -109
  704. package/dist/utils/Validate/additional/mustBeBefore.js +0 -34
  705. package/dist/utils/Validate/additional/mustBeBefore.test.js +0 -77
  706. package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +0 -57
  707. package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +0 -128
  708. package/dist/utils/Validate/additional/mustBeGreaterThan.js +0 -22
  709. package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +0 -57
  710. package/dist/utils/Validate/additional/mustBeInTheFuture.js +0 -33
  711. package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +0 -32
  712. package/dist/utils/Validate/additional/mustBeInThePast.js +0 -36
  713. package/dist/utils/Validate/additional/mustBeInThePast.test.js +0 -32
  714. package/dist/utils/Validate/additional/mustBeLessThan.js +0 -22
  715. package/dist/utils/Validate/additional/mustBeLessThan.test.js +0 -53
  716. package/dist/utils/Validate/additional/mustBeLongerThan.js +0 -23
  717. package/dist/utils/Validate/additional/mustBeLongerThan.test.js +0 -49
  718. package/dist/utils/Validate/additional/mustBeNumbersOnly.js +0 -24
  719. package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +0 -45
  720. package/dist/utils/Validate/additional/mustBeOneOf.js +0 -22
  721. package/dist/utils/Validate/additional/mustBeOneOf.test.js +0 -37
  722. package/dist/utils/Validate/additional/mustBeShorterThan.js +0 -23
  723. package/dist/utils/Validate/additional/mustBeShorterThan.test.js +0 -49
  724. package/dist/utils/Validate/additional/mustBeUniqueInCollection.js +0 -40
  725. package/dist/utils/Validate/additional/mustBeUniqueInCollection.test.js +0 -163
  726. package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +0 -26
  727. package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +0 -37
  728. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +0 -19
  729. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +0 -37
  730. package/dist/utils/Validate/additional/mustNotContainSql.js +0 -19
  731. package/dist/utils/Validate/additional/mustNotContainSql.test.js +0 -33
  732. package/dist/utils/Validate/additional/mustSelectOnlyOne.js +0 -29
  733. package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +0 -55
  734. package/dist/utils/Validate/additional/utils.js +0 -35
  735. package/dist/utils/Validate/index.js +0 -33
  736. package/dist/utils/Validate/validateCollection.js +0 -50
  737. package/dist/utils/Validate/validateCollection.test.js +0 -134
  738. package/dist/utils/Validate/validateComponent.js +0 -126
  739. package/dist/utils/Validate/validateComponent.test.js +0 -435
  740. package/dist/utils/Validate/validateContainer.js +0 -52
  741. package/dist/utils/Validate/validateContainer.test.js +0 -115
  742. package/dist/utils/Validate/validateDate.js +0 -112
  743. package/dist/utils/Validate/validateDate.test.js +0 -133
  744. package/dist/utils/Validate/validateEmail.js +0 -45
  745. package/dist/utils/Validate/validateEmail.test.js +0 -78
  746. package/dist/utils/Validate/validateMultifile.js +0 -29
  747. package/dist/utils/Validate/validateMultifile.test.js +0 -46
  748. package/dist/utils/Validate/validateOnPageLoad.js +0 -24
  749. package/dist/utils/Validate/validateOnPageLoad.test.js +0 -89
  750. package/dist/utils/Validate/validatePage.js +0 -56
  751. package/dist/utils/Validate/validatePage.test.js +0 -795
  752. package/dist/utils/Validate/validateRegex.js +0 -41
  753. package/dist/utils/Validate/validateRegex.test.js +0 -43
  754. package/dist/utils/Validate/validateRequired.js +0 -37
  755. package/dist/utils/Validate/validateRequired.test.js +0 -64
  756. package/dist/utils/Validate/validateTextArea.js +0 -36
  757. package/dist/utils/Validate/validateTextArea.test.js +0 -71
  758. package/dist/utils/Validate/validateTime.js +0 -76
  759. package/dist/utils/Validate/validateTime.test.js +0 -116
  760. package/dist/utils/canOverrideFieldRequired.js +0 -23
  761. package/dist/utils/index.js +0 -42
@@ -1,338 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _mergeCollectionPages = _interopRequireDefault(require("../../../utils/CollectionPage/mergeCollectionPages"));
8
- var Utils = _interopRequireWildcard(require("./clearOutUncompletedRoutesUtils"));
9
- var _optionIsSelected = _interopRequireDefault(require("../../../utils/Component/optionIsSelected"));
10
- var _getSourceData = _interopRequireDefault(require("../../../utils/Data/getSourceData"));
11
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
16
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
17
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint-disable no-param-reassign */
18
- /**
19
- *
20
- * This function recursively reads in the non-collection pages and components and builds lists from it:
21
- *
22
- * 1: allComponents. This is a map of all components in the form, keyed by the fully qualified component path.
23
- * If the component belongs to a page (or other parent entity) that has its own show_when rule, then this rule
24
- * is combined with the show_when rule of the component, so the decision as to whether the component's data should
25
- * exist can be made just by processing the component.
26
- * The main purpose of this map is to allow us to build a dependency graph in the function createComponentDependenciesGraph
27
- *
28
- * 2: componentsToKeep: This is an object containing a count of how many times each component is defined. This is to support the
29
- * fact that a component can be used more than once in a form (but with mutually exclusive show_when rules so only used
30
- * once with the same path).
31
- *
32
- * @param {Array} condensedPages All pages in the form, with the collection pages collated into a single object per collection
33
- * @param {Object} formData The form payload
34
- * @param {Map} componentByIdMap Map of all components, to enable performant lookup by id
35
- * @param {Map} componentByFieldIdMap Map of all components, to enable performant lookup by fieldId
36
- * @param {Object}
37
- * @return {Map, Object, Map} allComponents All components in form (including nested), keyed by path:
38
- * componentsToKeep A count of how many times each component is used, to prevent us deleting components defined > 1 times
39
- * allCollections A map of collection objects, which are a grouping of the pages that make up a single collection
40
- */
41
- const createComponentMapsFromForm = (condensedPages, componentByIdMap, componentByFieldIdMap, formData) => {
42
- const allComponents = new Map();
43
- const componentsToKeep = {};
44
- const unselectedOptionsNestedPaths = [];
45
- const allCollections = new Map();
46
-
47
- /*
48
- * Inner function to support the recursion required to traverse through the nested structures of the form
49
- */
50
- const recursivelyMapFieldsAndDeleteHiddenNested = (page, component, path) => {
51
- var _component$data;
52
- if (!component.fieldId) return; // Many component, such as warnings, html and details do not have data so we can ignore them
53
- path = path ? "".concat(path, ".").concat(component.fieldId) : component.fieldId; // Build up the path to reflect nested components
54
- componentsToKeep[path] = (componentsToKeep[path] || 0) + 1; // We need to keep track of the count of each component path, to avoid pruning paths that exist elsewhere
55
- component.path = path; // Add the fully qualified path to the component, which will be required when resolving the dependencies later
56
-
57
- // If the parent page has a rule, combine it with any component rule as we will be resolving dependencies for components only
58
- if (page.show_when) {
59
- component.show_when = component.show_when ? [].concat(Utils.toArray(page.show_when), Utils.toArray(component.show_when)) : page.show_when;
60
- }
61
- Utils.addValue(path, component, allComponents); // There can be more than one component per path, so keep a map of <path, array>
62
- // recurse if there is nesting
63
- if (component.components) {
64
- component.components.forEach(c => {
65
- recursivelyMapFieldsAndDeleteHiddenNested(page, c, path, allComponents, componentsToKeep, formData);
66
- });
67
- } else if (component !== null && component !== void 0 && (_component$data = component.data) !== null && _component$data !== void 0 && _component$data.options) {
68
- var _component$data2;
69
- component === null || component === void 0 || (_component$data2 = component.data) === null || _component$data2 === void 0 || (_component$data2 = _component$data2.options) === null || _component$data2 === void 0 || _component$data2.forEach(option => {
70
- if (option.nested) {
71
- const unselectedOption = !(0, _optionIsSelected.default)((0, _getSourceData.default)(formData, path), option);
72
- const blockShowWhen = option.show_when;
73
- option.nested.forEach(nestedComponent => {
74
- // prepare to delete hidden nested question payload items when the parent option is not selected
75
- if (unselectedOption) unselectedOptionsNestedPaths.push(Utils.getNestedQuestionPath(path, nestedComponent.fieldId));
76
- if (blockShowWhen) nestedComponent.show_when = blockShowWhen;
77
- recursivelyMapFieldsAndDeleteHiddenNested(page, nestedComponent, Utils.getImmediateParent(path), allComponents, componentsToKeep, formData);
78
- });
79
- }
80
- });
81
- }
82
- };
83
-
84
- // Entry point for the recursive traverse of the form specification.
85
- condensedPages === null || condensedPages === void 0 || condensedPages.forEach(page => {
86
- // Make the distinction between collections (which will be processed separately) and non-collections, which will be processed here.
87
- if (page.childPages) {
88
- allCollections.set(page.collection.name, page);
89
- } else {
90
- var _page$components;
91
- (_page$components = page.components) === null || _page$components === void 0 || _page$components.forEach(useComponentInPage => {
92
- const componentObj = Utils.findComponentDefinitionInForm(useComponentInPage, componentByIdMap, componentByFieldIdMap);
93
- recursivelyMapFieldsAndDeleteHiddenNested(page, componentObj, null, allComponents, componentsToKeep, formData);
94
- });
95
- }
96
- });
97
- // Now delete all the unselected options, if they are not used elsewhere
98
- unselectedOptionsNestedPaths.forEach(path => {
99
- if (componentsToKeep[path] > 1) {
100
- componentsToKeep[path] -= 1;
101
- } else {
102
- Utils.deleteNodeByPath(formData, path);
103
- }
104
- });
105
- return {
106
- allComponents,
107
- componentsToKeep,
108
- allCollections
109
- };
110
- };
111
- /**
112
- *
113
- * This function iterates through the allComponents list. For each component, it will derive all payload paths
114
- * that this component is dependent on. The same component might be defined more than once in the form, so add the dependencies
115
- * for all the component definitions.
116
- *
117
- * @param {Map} allDependencyRelationships A map of each component with dependencies. The key is the fully qualified path and the value is a Set of all the paths that this component is dependent on.
118
- * @param {Map} allComponents All components in form (including nested), keyed by path. Used to build the allDependencyRelationships
119
- * @return {Map }allDependencyRelationships graph of the relationships between all entities
120
- */
121
- const createComponentDependenciesGraph = allComponents => {
122
- const allDependencyRelationships = new Map();
123
- allComponents === null || allComponents === void 0 || allComponents.forEach(componentArray => {
124
- componentArray === null || componentArray === void 0 || componentArray.forEach(component => {
125
- if (!component.fieldId) return;
126
- const componentDependencies = Utils.getDependencies(component);
127
- if (componentDependencies) {
128
- if (allDependencyRelationships.has(component.path)) {
129
- const existingSet = allDependencyRelationships.get(component.path);
130
- componentDependencies.forEach(dep => existingSet.add(dep));
131
- } else {
132
- allDependencyRelationships.set(component.path, new Set(componentDependencies));
133
- }
134
- }
135
- });
136
- });
137
- return allDependencyRelationships;
138
- };
139
-
140
- /**
141
- *
142
- * This function loops through each entry in the allDependencyRelationships map. Each entry will contain a Set of all
143
- * paths that the key path is dependent on. Recursively delve into each dependency path and repeat the process until we
144
- * have reached an entry that has no dependencies. At this point we can safely resolve the dependency using its show_when rule,
145
- * and unwind the recursion.
146
- *
147
- * Because all the components are inter-connected, this could result in resolving the same entry repeatedly, so keep a 'visited'
148
- * array to prevent this.
149
- *
150
- * @param {Object} formData The form payload
151
- * @param {Map} allComponents All components in form (including nested), keyed by path
152
- * @param {Object} componentsToKeep A count of how many times each component is used, to prevent us deleting components defined > 1 times
153
- * @param {Map} allDependencyRelationships A map of each component with dependencies. The key is the fully qualified path and the value is a Set of all the paths that this component is dependent on.
154
- * @param {Map} allCollections A map of collection objects, which are a grouping of the pages that make up a single collection
155
- * @param {Object} form The form specification
156
- */
157
- const resolveComponentDependenciesGraph = (allDependencyRelationships, allComponents, componentsToKeep, allCollections, form, formData) => {
158
- /*
159
- * Inner function to support the recursion required to traverse through the nested nature of the allDependencyRelationships
160
- */
161
- const recursivelyResolveDependencies = (visited, dependentComponent, dependencyRelationships) => {
162
- if (visited.has(dependentComponent)) return;
163
- visited.add(dependentComponent);
164
- const dependencies = dependencyRelationships.get(dependentComponent.path);
165
- dependencies === null || dependencies === void 0 || dependencies.forEach(dependencyPath => {
166
- const dependencyComponents = Utils.getDependencyObjectFromPath(dependencyPath, allComponents);
167
- if (dependencyComponents) {
168
- dependencyComponents.forEach(dependency => {
169
- if (!visited.has(dependency)) {
170
- recursivelyResolveDependencies(visited, dependency, dependencyRelationships);
171
- }
172
- });
173
- } else {
174
- // We are here if the dependency path was not found in the list of allComponents. This is valid and can happen when
175
- // a component is dependent on a field that was generated by cop-ui, e.g. jobHolderStaffDetails.linemanagerEmail.
176
- // However, there is an edge case (described in the message below) that we need to validate for.
177
- const arrayNamePattern = /([a-zA-Z_$][\w$]*)\[\d+\]/;
178
- const match = dependencyPath.match(arrayNamePattern);
179
- if (match) {
180
- const collectionName = match[1];
181
- const collection = allCollections.get(collectionName);
182
- if (collection) {
183
- var _collection$childPage;
184
- (_collection$childPage = collection.childPages) === null || _collection$childPage === void 0 || _collection$childPage.forEach(childPage => {
185
- if (childPage.show_when) {
186
- const message = "It is not possible to reliably clean hidden data when a component is dependent on a \n collection's data, and that collection is itself dependent on data elsewhere in the form.\n The dependency path is ".concat(dependencyPath, ", and the chained show_when is ").concat(JSON.stringify(childPage.show_when), ".\n The form will need to be changed to break this chained dependency");
187
- throw new Error(message);
188
- }
189
- ;
190
- });
191
- }
192
- }
193
- }
194
- });
195
- // Whilst unravelling the recursion, we can start deleting from the leaf upwards
196
- if (!Utils.isShowEntity(dependentComponent, formData)) {
197
- Utils.deleteComponentData(formData, dependentComponent.path, dependentComponent, componentsToKeep);
198
- }
199
- };
200
- const visited = new Set();
201
- allDependencyRelationships === null || allDependencyRelationships === void 0 || allDependencyRelationships.forEach((dependencies, dependentComponentPath) => {
202
- // Each path that a component is dependent on may have > 1 possible dependent components, if a field is used twice
203
- const dependentComponents = allComponents.get(dependentComponentPath);
204
- dependentComponents === null || dependentComponents === void 0 || dependentComponents.forEach(dependentComponent => {
205
- if (!visited.has(dependentComponent)) {
206
- recursivelyResolveDependencies(visited, dependentComponent, allDependencyRelationships, form, formData, allComponents, componentsToKeep, allCollections);
207
- }
208
- });
209
- });
210
- };
211
-
212
- /**
213
- * For each collection, iterate through the payload array's objects, and apply the collections show_when
214
- * rules for each payload object.
215
- *
216
- * Some of the rules may be dependent on payload items outside the collection. These will already have been cleansed
217
- * so will be in a reliable state.
218
- *
219
- * It is possible in the form spec to specify in the master page that the whole collection has a show_when rule.
220
- * If this is the case, evaluate the rule and if false delete the entire collection array.
221
- *
222
- * @param {Map} allCollections A map of collection objects, which are a grouping of the pages that make up a single collection
223
- * @param {Object} formData The form payload
224
- * @param {Map} componentByIdMap Map of all components, to enable performant lookup by id
225
- * @param {Map} componentByFieldIdMap Map of all components, to enable performant lookup by fieldId
226
- */
227
- const cleanseCollectionData = (allCollections, formData, componentByIdMap, componentByFieldIdMap) => {
228
- allCollections === null || allCollections === void 0 || allCollections.forEach((collection, collectionName) => {
229
- if (!Utils.isShowEntity(collection, formData)) {
230
- // Delete the entire collection array (including activeId) if the master page has an unmet rule
231
- delete formData[collectionName];
232
- delete formData["".concat(collectionName, "ActiveId")];
233
- }
234
- const collectionDataArray = formData[collectionName];
235
- collectionDataArray === null || collectionDataArray === void 0 || collectionDataArray.forEach(collectionDataEntry => {
236
- var _collection$childPage2;
237
- // The forms are written such that a show_when in a collection array object can be evaluated against the data relative to that data object
238
- // OR against the data relative to the root of the form. To achieve that, we'll copy the collection object to the root of the form before evaluating
239
- const dataForEvaluation = _objectSpread(_objectSpread({}, formData), collectionDataEntry);
240
- const pathsToKeep = new Set();
241
- const componentsToPrune = new Map();
242
- (_collection$childPage2 = collection.childPages) === null || _collection$childPage2 === void 0 || _collection$childPage2.forEach(childPage => {
243
- var _childPage$components;
244
- const showPage = Utils.isShowEntity(childPage, dataForEvaluation);
245
- (_childPage$components = childPage.components) === null || _childPage$components === void 0 || _childPage$components.forEach(useComponentInPage => {
246
- const componentObj = Utils.findComponentDefinitionInForm(useComponentInPage, componentByIdMap, componentByFieldIdMap);
247
- // Non-data components can be ignored (eg html)
248
- if (!componentObj.fieldId) return;
249
- const showComponentOnPage = Utils.isShowEntity(useComponentInPage, dataForEvaluation);
250
- if (showPage && showComponentOnPage && Utils.isShowEntity(componentObj, dataForEvaluation)) {
251
- // There may be >1 components with the same path (eg quantity in EAB2), so don't delete hidden components if they are required elsewhere
252
- pathsToKeep.add(componentObj.fieldId);
253
- } else {
254
- componentsToPrune.set(componentObj.id, componentObj);
255
- }
256
- });
257
- });
258
- Utils.pruneCollectionEntry(pathsToKeep, componentsToPrune, collectionDataEntry, formData);
259
- });
260
- //
261
- if (collectionDataArray) Utils.removeObjectWithOnlySingleIdField(collectionDataArray);
262
- });
263
- };
264
-
265
- /**
266
- *
267
- * The purpose of this function is to apply the show_when rules defined in the form specification to the
268
- * form payload (formData), and remove any data that should not be shown according to those rules.
269
- * (the reason this data exists in the payload is that users can answer a question in such a way that
270
- * other questions are 'shown' to them, which are then complete. The user can then go back and change the original
271
- * question to then 'hide' those questions, but the answers they gave persist in the payload. The must be cleansed
272
- * before being submitted.
273
- *
274
- * There are 2 types of payload data that have to be treated differently by this function for it to work.
275
- *
276
- * 1. Data from non-repeating pages, containing components.
277
- *
278
- * Each data item captured will be written to the payload as a field with the name of the fieldId of the payload.
279
- * In the case of components that are nested within 'container' components, the payload will reflect the nesting.
280
- * There is no limit to the level of nesting in a form.
281
- *
282
- * To cleanse the payload for this type of data, we do the following (high level description, see method comments for detail):
283
- *
284
- * - build a map of all components, keyed by their payload path (required for the next step)
285
- * - for all of these components that have dependencies (show_when rules), create a graph datastructure to show all components
286
- * on which a component is dependent, and then all components that those components may be dependent on. There is no limit to
287
- * the depth of these chained dependencies.
288
- * - the reason for building a graph of these dependency chains is so we know the sequence in which we must resolve the dependencies.
289
- * For any given chain of dependencies it is essential that we resolve the dependencies starting at the end of the chains, and work our way
290
- * back up the chain. If not, we could be resolving a dependency based on a payload item that itself will later be deleted.
291
- * Therefore, the final step is to recursively traverse the dependency graph, resolving the dependency rule for the components in
292
- * the chain from the leaf back up to the parent node.
293
- *
294
- * 2. Page collection data
295
- *
296
- * A page collection is a set of one or more pages which (as a group) can be filled in as many times is required
297
- * by the user. For example, in EAB, you can add as many item-seal-details to an EAB form as are required. An item-seal-detail
298
- * is made up of several different pages, all grouped. The data saved will be an array representing the whole collection, with
299
- * each object in the array representing a single collection entry (a single item-seal-detail in this example).
300
- *
301
- * Cleanse collection data has to be driven from the payload rather than the form, as there are repeated objects in an array
302
- * representing the data. Each one has to be treated independently as the data to be cleansed can be different in each one.
303
- *
304
- * - For each collection type, iterate through each payload object and treat it like an independent payload..
305
- * - For each collection payload object, iterate through the collection's pages and components, and apply all the show_when rules
306
- * found at both page and component level to the payload.
307
- * - Repeat for each payload object
308
- * - Repeat for all collections
309
- *
310
- * @param {*} form
311
- * @param {*} formData
312
- * @returns {*} cleansed form data
313
- */
314
- const clearOutUncompletedRoutes = (cleanseHiddenData, form, formData) => {
315
- if (!cleanseHiddenData) return formData;
316
-
317
- // Load components into maps keyed on id and field for subsequent performant access
318
- const componentByIdMap = new Map(form.components.map(c => [c.id, c]));
319
- const componentByFieldIdMap = new Map(form.components.map(c => [c.fieldId, c]));
320
-
321
- // Group all pages relating to a page-collection into a single object to aid collection
322
- // processing, and to allow us to differentiate between a collection and non-collection page.
323
- const condensedPages = (0, _mergeCollectionPages.default)(form.pages);
324
- const {
325
- allComponents,
326
- componentsToKeep,
327
- allCollections
328
- } = createComponentMapsFromForm(condensedPages, componentByIdMap, componentByFieldIdMap, formData);
329
- const allDependencyRelationships = createComponentDependenciesGraph(allComponents);
330
- resolveComponentDependenciesGraph(allDependencyRelationships, allComponents, componentsToKeep, allCollections, form, formData);
331
- cleanseCollectionData(allCollections, formData, componentByIdMap, componentByFieldIdMap);
332
-
333
- // The cleansing above may have left empty arrays and collection IDs. Tidy these up.
334
- Utils.removeEmptyArraysAndUnusedCollectionIDs(formData);
335
- return formData;
336
- };
337
- var _default = exports.default = clearOutUncompletedRoutes;
338
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWVyZ2VDb2xsZWN0aW9uUGFnZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIlV0aWxzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfb3B0aW9uSXNTZWxlY3RlZCIsIl9nZXRTb3VyY2VEYXRhIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiY3JlYXRlQ29tcG9uZW50TWFwc0Zyb21Gb3JtIiwiY29uZGVuc2VkUGFnZXMiLCJjb21wb25lbnRCeUlkTWFwIiwiY29tcG9uZW50QnlGaWVsZElkTWFwIiwiZm9ybURhdGEiLCJhbGxDb21wb25lbnRzIiwiTWFwIiwiY29tcG9uZW50c1RvS2VlcCIsInVuc2VsZWN0ZWRPcHRpb25zTmVzdGVkUGF0aHMiLCJhbGxDb2xsZWN0aW9ucyIsInJlY3Vyc2l2ZWx5TWFwRmllbGRzQW5kRGVsZXRlSGlkZGVuTmVzdGVkIiwicGFnZSIsImNvbXBvbmVudCIsInBhdGgiLCJfY29tcG9uZW50JGRhdGEiLCJmaWVsZElkIiwiY29uY2F0Iiwic2hvd193aGVuIiwidG9BcnJheSIsImFkZFZhbHVlIiwiY29tcG9uZW50cyIsImMiLCJkYXRhIiwib3B0aW9ucyIsIl9jb21wb25lbnQkZGF0YTIiLCJvcHRpb24iLCJuZXN0ZWQiLCJ1bnNlbGVjdGVkT3B0aW9uIiwib3B0aW9uSXNTZWxlY3RlZCIsImdldFNvdXJjZURhdGEiLCJibG9ja1Nob3dXaGVuIiwibmVzdGVkQ29tcG9uZW50IiwiZ2V0TmVzdGVkUXVlc3Rpb25QYXRoIiwiZ2V0SW1tZWRpYXRlUGFyZW50IiwiY2hpbGRQYWdlcyIsImNvbGxlY3Rpb24iLCJuYW1lIiwiX3BhZ2UkY29tcG9uZW50cyIsInVzZUNvbXBvbmVudEluUGFnZSIsImNvbXBvbmVudE9iaiIsImZpbmRDb21wb25lbnREZWZpbml0aW9uSW5Gb3JtIiwiZGVsZXRlTm9kZUJ5UGF0aCIsImNyZWF0ZUNvbXBvbmVudERlcGVuZGVuY2llc0dyYXBoIiwiYWxsRGVwZW5kZW5jeVJlbGF0aW9uc2hpcHMiLCJjb21wb25lbnRBcnJheSIsImNvbXBvbmVudERlcGVuZGVuY2llcyIsImdldERlcGVuZGVuY2llcyIsImV4aXN0aW5nU2V0IiwiZGVwIiwiYWRkIiwiU2V0IiwicmVzb2x2ZUNvbXBvbmVudERlcGVuZGVuY2llc0dyYXBoIiwiZm9ybSIsInJlY3Vyc2l2ZWx5UmVzb2x2ZURlcGVuZGVuY2llcyIsInZpc2l0ZWQiLCJkZXBlbmRlbnRDb21wb25lbnQiLCJkZXBlbmRlbmN5UmVsYXRpb25zaGlwcyIsImRlcGVuZGVuY2llcyIsImRlcGVuZGVuY3lQYXRoIiwiZGVwZW5kZW5jeUNvbXBvbmVudHMiLCJnZXREZXBlbmRlbmN5T2JqZWN0RnJvbVBhdGgiLCJkZXBlbmRlbmN5IiwiYXJyYXlOYW1lUGF0dGVybiIsIm1hdGNoIiwiY29sbGVjdGlvbk5hbWUiLCJfY29sbGVjdGlvbiRjaGlsZFBhZ2UiLCJjaGlsZFBhZ2UiLCJtZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsIkVycm9yIiwiaXNTaG93RW50aXR5IiwiZGVsZXRlQ29tcG9uZW50RGF0YSIsImRlcGVuZGVudENvbXBvbmVudFBhdGgiLCJkZXBlbmRlbnRDb21wb25lbnRzIiwiY2xlYW5zZUNvbGxlY3Rpb25EYXRhIiwiY29sbGVjdGlvbkRhdGFBcnJheSIsImNvbGxlY3Rpb25EYXRhRW50cnkiLCJfY29sbGVjdGlvbiRjaGlsZFBhZ2UyIiwiZGF0YUZvckV2YWx1YXRpb24iLCJwYXRoc1RvS2VlcCIsImNvbXBvbmVudHNUb1BydW5lIiwiX2NoaWxkUGFnZSRjb21wb25lbnRzIiwic2hvd1BhZ2UiLCJzaG93Q29tcG9uZW50T25QYWdlIiwiaWQiLCJwcnVuZUNvbGxlY3Rpb25FbnRyeSIsInJlbW92ZU9iamVjdFdpdGhPbmx5U2luZ2xlSWRGaWVsZCIsImNsZWFyT3V0VW5jb21wbGV0ZWRSb3V0ZXMiLCJjbGVhbnNlSGlkZGVuRGF0YSIsIm1hcCIsIm1lcmdlQ29sbGVjdGlvblBhZ2VzIiwicGFnZXMiLCJyZW1vdmVFbXB0eUFycmF5c0FuZFVudXNlZENvbGxlY3Rpb25JRHMiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9Gb3JtUmVuZGVyZXIvaGVscGVycy9jbGVhck91dFVuY29tcGxldGVkUm91dGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5pbXBvcnQgbWVyZ2VDb2xsZWN0aW9uUGFnZXMgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL0NvbGxlY3Rpb25QYWdlL21lcmdlQ29sbGVjdGlvblBhZ2VzXCI7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tIFwiLi9jbGVhck91dFVuY29tcGxldGVkUm91dGVzVXRpbHNcIjtcbmltcG9ydCBvcHRpb25Jc1NlbGVjdGVkIGZyb20gXCIuLi8uLi8uLi91dGlscy9Db21wb25lbnQvb3B0aW9uSXNTZWxlY3RlZFwiO1xuaW1wb3J0IGdldFNvdXJjZURhdGEgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL0RhdGEvZ2V0U291cmNlRGF0YVwiO1xuXG4vKipcbiAqICBcbiAqIFRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgcmVhZHMgaW4gdGhlIG5vbi1jb2xsZWN0aW9uIHBhZ2VzIGFuZCBjb21wb25lbnRzIGFuZCBidWlsZHMgbGlzdHMgZnJvbSBpdDpcbiAqIFxuICogMTogYWxsQ29tcG9uZW50cy4gVGhpcyBpcyBhIG1hcCBvZiBhbGwgY29tcG9uZW50cyBpbiB0aGUgZm9ybSwga2V5ZWQgYnkgdGhlIGZ1bGx5IHF1YWxpZmllZCBjb21wb25lbnQgcGF0aC5cbiAqICAgICAgSWYgdGhlIGNvbXBvbmVudCBiZWxvbmdzIHRvIGEgcGFnZSAob3Igb3RoZXIgcGFyZW50IGVudGl0eSkgdGhhdCBoYXMgaXRzIG93biBzaG93X3doZW4gcnVsZSwgdGhlbiB0aGlzIHJ1bGVcbiAqICAgICAgaXMgY29tYmluZWQgd2l0aCB0aGUgc2hvd193aGVuIHJ1bGUgb2YgdGhlIGNvbXBvbmVudCwgc28gdGhlIGRlY2lzaW9uIGFzIHRvIHdoZXRoZXIgdGhlIGNvbXBvbmVudCdzIGRhdGEgc2hvdWxkXG4gKiAgICAgIGV4aXN0IGNhbiBiZSBtYWRlIGp1c3QgYnkgcHJvY2Vzc2luZyB0aGUgY29tcG9uZW50LlxuICogICAgICBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgbWFwIGlzIHRvIGFsbG93IHVzIHRvIGJ1aWxkIGEgZGVwZW5kZW5jeSBncmFwaCBpbiB0aGUgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50RGVwZW5kZW5jaWVzR3JhcGhcbiAqIFxuICogMjogY29tcG9uZW50c1RvS2VlcDogVGhpcyBpcyBhbiBvYmplY3QgY29udGFpbmluZyBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzIGVhY2ggY29tcG9uZW50IGlzIGRlZmluZWQuIFRoaXMgaXMgdG8gc3VwcG9ydCB0aGVcbiAqICAgICAgZmFjdCB0aGF0IGEgY29tcG9uZW50IGNhbiBiZSB1c2VkIG1vcmUgdGhhbiBvbmNlIGluIGEgZm9ybSAoYnV0IHdpdGggbXV0dWFsbHkgZXhjbHVzaXZlIHNob3dfd2hlbiBydWxlcyBzbyBvbmx5IHVzZWQgXG4gKiAgICAgIG9uY2Ugd2l0aCB0aGUgc2FtZSBwYXRoKS4gXG4gKiBcbiAqIEBwYXJhbSB7QXJyYXl9IGNvbmRlbnNlZFBhZ2VzIEFsbCBwYWdlcyBpbiB0aGUgZm9ybSwgd2l0aCB0aGUgY29sbGVjdGlvbiBwYWdlcyBjb2xsYXRlZCBpbnRvIGEgc2luZ2xlIG9iamVjdCBwZXIgY29sbGVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhIFRoZSBmb3JtIHBheWxvYWRcbiAqIEBwYXJhbSB7TWFwfSBjb21wb25lbnRCeUlkTWFwIE1hcCBvZiBhbGwgY29tcG9uZW50cywgdG8gZW5hYmxlIHBlcmZvcm1hbnQgbG9va3VwIGJ5IGlkXG4gKiBAcGFyYW0ge01hcH0gY29tcG9uZW50QnlGaWVsZElkTWFwIE1hcCBvZiBhbGwgY29tcG9uZW50cywgdG8gZW5hYmxlIHBlcmZvcm1hbnQgbG9va3VwIGJ5IGZpZWxkSWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBcbiAqIEByZXR1cm4ge01hcCwgT2JqZWN0LCBNYXB9IGFsbENvbXBvbmVudHMgQWxsIGNvbXBvbmVudHMgaW4gZm9ybSAoaW5jbHVkaW5nIG5lc3RlZCksIGtleWVkIGJ5IHBhdGg6IFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzVG9LZWVwIEEgY291bnQgb2YgaG93IG1hbnkgdGltZXMgZWFjaCBjb21wb25lbnQgaXMgdXNlZCwgdG8gcHJldmVudCB1cyBkZWxldGluZyBjb21wb25lbnRzIGRlZmluZWQgPiAxIHRpbWVzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbGxlY3Rpb25zIEEgbWFwIG9mIGNvbGxlY3Rpb24gb2JqZWN0cywgd2hpY2ggYXJlIGEgZ3JvdXBpbmcgb2YgdGhlIHBhZ2VzIHRoYXQgbWFrZSB1cCBhIHNpbmdsZSBjb2xsZWN0aW9uIFxuICovXG5jb25zdCBjcmVhdGVDb21wb25lbnRNYXBzRnJvbUZvcm0gPSAoY29uZGVuc2VkUGFnZXMsIGNvbXBvbmVudEJ5SWRNYXAsIGNvbXBvbmVudEJ5RmllbGRJZE1hcCwgZm9ybURhdGEpID0+IHtcblxuICAgIGNvbnN0IGFsbENvbXBvbmVudHMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgY29tcG9uZW50c1RvS2VlcCA9IHt9O1xuICAgIGNvbnN0IHVuc2VsZWN0ZWRPcHRpb25zTmVzdGVkUGF0aHMgPSBbXTtcbiAgICBjb25zdCBhbGxDb2xsZWN0aW9ucyA9IG5ldyBNYXAoKTtcblxuICAgIC8qXG4gICAgICogSW5uZXIgZnVuY3Rpb24gdG8gc3VwcG9ydCB0aGUgcmVjdXJzaW9uIHJlcXVpcmVkIHRvIHRyYXZlcnNlIHRocm91Z2ggdGhlIG5lc3RlZCBzdHJ1Y3R1cmVzIG9mIHRoZSBmb3JtXG4gICAgICovXG4gICAgY29uc3QgcmVjdXJzaXZlbHlNYXBGaWVsZHNBbmREZWxldGVIaWRkZW5OZXN0ZWQgPSAocGFnZSwgY29tcG9uZW50LCBwYXRoKSA9PiB7XG5cbiAgICAgICAgaWYgKCFjb21wb25lbnQuZmllbGRJZCkgcmV0dXJuOyAvLyBNYW55IGNvbXBvbmVudCwgc3VjaCBhcyB3YXJuaW5ncywgaHRtbCBhbmQgZGV0YWlscyBkbyBub3QgaGF2ZSBkYXRhIHNvIHdlIGNhbiBpZ25vcmUgdGhlbSAgICAgICAgXG4gICAgICAgIHBhdGggPSBwYXRoID8gYCR7cGF0aH0uJHtjb21wb25lbnQuZmllbGRJZH1gIDogY29tcG9uZW50LmZpZWxkSWQ7IC8vIEJ1aWxkIHVwIHRoZSBwYXRoIHRvIHJlZmxlY3QgbmVzdGVkIGNvbXBvbmVudHNcbiAgICAgICAgY29tcG9uZW50c1RvS2VlcFtwYXRoXSA9IChjb21wb25lbnRzVG9LZWVwW3BhdGhdIHx8IDApICsgMTsgIC8vIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY291bnQgb2YgZWFjaCBjb21wb25lbnQgcGF0aCwgdG8gYXZvaWQgcHJ1bmluZyBwYXRocyB0aGF0IGV4aXN0IGVsc2V3aGVyZSAgICAgICAgXG4gICAgICAgIGNvbXBvbmVudC5wYXRoID0gcGF0aDsgLy8gQWRkIHRoZSBmdWxseSBxdWFsaWZpZWQgcGF0aCB0byB0aGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHJlcXVpcmVkIHdoZW4gcmVzb2x2aW5nIHRoZSBkZXBlbmRlbmNpZXMgbGF0ZXJcblxuICAgICAgICAvLyBJZiB0aGUgcGFyZW50IHBhZ2UgaGFzIGEgcnVsZSwgY29tYmluZSBpdCB3aXRoIGFueSBjb21wb25lbnQgcnVsZSBhcyB3ZSB3aWxsIGJlIHJlc29sdmluZyBkZXBlbmRlbmNpZXMgZm9yIGNvbXBvbmVudHMgb25seVxuICAgICAgICBpZiAocGFnZS5zaG93X3doZW4pIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5zaG93X3doZW4gPSBjb21wb25lbnQuc2hvd193aGVuID9cbiAgICAgICAgICAgICAgICBbLi4uVXRpbHMudG9BcnJheShwYWdlLnNob3dfd2hlbiksIC4uLlV0aWxzLnRvQXJyYXkoY29tcG9uZW50LnNob3dfd2hlbildIDogcGFnZS5zaG93X3doZW47XG4gICAgICAgIH1cblxuICAgICAgICBVdGlscy5hZGRWYWx1ZShwYXRoLCBjb21wb25lbnQsIGFsbENvbXBvbmVudHMpOyAvLyBUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBjb21wb25lbnQgcGVyIHBhdGgsIHNvIGtlZXAgYSBtYXAgb2YgPHBhdGgsIGFycmF5PlxuICAgICAgICAvLyByZWN1cnNlIGlmIHRoZXJlIGlzIG5lc3RpbmdcbiAgICAgICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICBjb21wb25lbnQuY29tcG9uZW50cy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlNYXBGaWVsZHNBbmREZWxldGVIaWRkZW5OZXN0ZWQocGFnZSwgYywgcGF0aCwgYWxsQ29tcG9uZW50cywgY29tcG9uZW50c1RvS2VlcCwgZm9ybURhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50Py5kYXRhPy5vcHRpb25zKSB7XG4gICAgICAgICAgICBjb21wb25lbnQ/LmRhdGE/Lm9wdGlvbnM/LmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24ubmVzdGVkKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zZWxlY3RlZE9wdGlvbiA9ICFvcHRpb25Jc1NlbGVjdGVkKGdldFNvdXJjZURhdGEoZm9ybURhdGEsIHBhdGgpLCBvcHRpb24pOyAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja1Nob3dXaGVuID0gb3B0aW9uLnNob3dfd2hlbjtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLm5lc3RlZC5mb3JFYWNoKChuZXN0ZWRDb21wb25lbnQpID0+IHsgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdG8gZGVsZXRlIGhpZGRlbiBuZXN0ZWQgcXVlc3Rpb24gcGF5bG9hZCBpdGVtcyB3aGVuIHRoZSBwYXJlbnQgb3B0aW9uIGlzIG5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuc2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zZWxlY3RlZE9wdGlvbnNOZXN0ZWRQYXRocy5wdXNoKFV0aWxzLmdldE5lc3RlZFF1ZXN0aW9uUGF0aChwYXRoLCBuZXN0ZWRDb21wb25lbnQuZmllbGRJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrU2hvd1doZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkQ29tcG9uZW50LnNob3dfd2hlbiA9IGJsb2NrU2hvd1doZW47XG4gICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVseU1hcEZpZWxkc0FuZERlbGV0ZUhpZGRlbk5lc3RlZChwYWdlLCBuZXN0ZWRDb21wb25lbnQsIFV0aWxzLmdldEltbWVkaWF0ZVBhcmVudChwYXRoKSwgYWxsQ29tcG9uZW50cywgY29tcG9uZW50c1RvS2VlcCwgZm9ybURhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVudHJ5IHBvaW50IGZvciB0aGUgcmVjdXJzaXZlIHRyYXZlcnNlIG9mIHRoZSBmb3JtIHNwZWNpZmljYXRpb24uIFxuICAgIGNvbmRlbnNlZFBhZ2VzPy5mb3JFYWNoKChwYWdlKSA9PiB7XG4gICAgICAgIC8vIE1ha2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gY29sbGVjdGlvbnMgKHdoaWNoIHdpbGwgYmUgcHJvY2Vzc2VkIHNlcGFyYXRlbHkpIGFuZCBub24tY29sbGVjdGlvbnMsIHdoaWNoIHdpbGwgYmUgcHJvY2Vzc2VkIGhlcmUuXG4gICAgICAgIGlmIChwYWdlLmNoaWxkUGFnZXMpIHtcbiAgICAgICAgICAgIGFsbENvbGxlY3Rpb25zLnNldChwYWdlLmNvbGxlY3Rpb24ubmFtZSwgcGFnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWdlLmNvbXBvbmVudHM/LmZvckVhY2goKHVzZUNvbXBvbmVudEluUGFnZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudE9iaiA9IFV0aWxzLmZpbmRDb21wb25lbnREZWZpbml0aW9uSW5Gb3JtKHVzZUNvbXBvbmVudEluUGFnZSwgY29tcG9uZW50QnlJZE1hcCwgY29tcG9uZW50QnlGaWVsZElkTWFwKTtcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVseU1hcEZpZWxkc0FuZERlbGV0ZUhpZGRlbk5lc3RlZChwYWdlLCBjb21wb25lbnRPYmosIG51bGwsIGFsbENvbXBvbmVudHMsIGNvbXBvbmVudHNUb0tlZXAsIGZvcm1EYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gTm93IGRlbGV0ZSBhbGwgdGhlIHVuc2VsZWN0ZWQgb3B0aW9ucywgaWYgdGhleSBhcmUgbm90IHVzZWQgZWxzZXdoZXJlXG4gICAgdW5zZWxlY3RlZE9wdGlvbnNOZXN0ZWRQYXRocy5mb3JFYWNoKHBhdGggPT4ge1xuICAgICAgICBpZiAoY29tcG9uZW50c1RvS2VlcFtwYXRoXSA+IDEpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHNUb0tlZXBbcGF0aF0gLT0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFV0aWxzLmRlbGV0ZU5vZGVCeVBhdGgoZm9ybURhdGEsIHBhdGgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgYWxsQ29tcG9uZW50cywgY29tcG9uZW50c1RvS2VlcCwgYWxsQ29sbGVjdGlvbnMgfTtcbn1cbi8qKlxuICogIFxuICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIHRoZSBhbGxDb21wb25lbnRzIGxpc3QuIEZvciBlYWNoIGNvbXBvbmVudCwgaXQgd2lsbCBkZXJpdmUgYWxsIHBheWxvYWQgcGF0aHMgXG4gKiB0aGF0IHRoaXMgY29tcG9uZW50IGlzIGRlcGVuZGVudCBvbi4gVGhlIHNhbWUgY29tcG9uZW50IG1pZ2h0IGJlIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIGZvcm0sIHNvIGFkZCB0aGUgZGVwZW5kZW5jaWVzXG4gKiBmb3IgYWxsIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbnMuXG4gKiBcbiAqIEBwYXJhbSB7TWFwfSBhbGxEZXBlbmRlbmN5UmVsYXRpb25zaGlwcyBBIG1hcCBvZiBlYWNoIGNvbXBvbmVudCB3aXRoIGRlcGVuZGVuY2llcy4gVGhlIGtleSBpcyB0aGUgZnVsbHkgcXVhbGlmaWVkIHBhdGggYW5kIHRoZSB2YWx1ZSBpcyBhIFNldCBvZiBhbGwgdGhlIHBhdGhzIHRoYXQgdGhpcyBjb21wb25lbnQgaXMgZGVwZW5kZW50IG9uLiAgIFxuICogQHBhcmFtIHtNYXB9IGFsbENvbXBvbmVudHMgQWxsIGNvbXBvbmVudHMgaW4gZm9ybSAoaW5jbHVkaW5nIG5lc3RlZCksIGtleWVkIGJ5IHBhdGguIFVzZWQgdG8gYnVpbGQgdGhlIGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzXG4gKiBAcmV0dXJuIHtNYXAgfWFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzIGdyYXBoIG9mIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYWxsIGVudGl0aWVzXG4gKi9cbmNvbnN0IGNyZWF0ZUNvbXBvbmVudERlcGVuZGVuY2llc0dyYXBoID0gKGFsbENvbXBvbmVudHMpID0+IHtcblxuICAgIGNvbnN0IGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzID0gbmV3IE1hcCgpO1xuXG4gICAgYWxsQ29tcG9uZW50cz8uZm9yRWFjaCgoY29tcG9uZW50QXJyYXkpID0+IHtcbiAgICAgICAgY29tcG9uZW50QXJyYXk/LmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQuZmllbGRJZCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50RGVwZW5kZW5jaWVzID0gVXRpbHMuZ2V0RGVwZW5kZW5jaWVzKGNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50RGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzLmhhcyhjb21wb25lbnQucGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdTZXQgPSBhbGxEZXBlbmRlbmN5UmVsYXRpb25zaGlwcy5nZXQoY29tcG9uZW50LnBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnREZXBlbmRlbmNpZXMuZm9yRWFjaChkZXAgPT4gZXhpc3RpbmdTZXQuYWRkKGRlcCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzLnNldChjb21wb25lbnQucGF0aCwgbmV3IFNldChjb21wb25lbnREZXBlbmRlbmNpZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzO1xufVxuXG4vKipcbiAqIFxuICogVGhpcyBmdW5jdGlvbiBsb29wcyB0aHJvdWdoIGVhY2ggZW50cnkgaW4gdGhlIGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzIG1hcC4gRWFjaCBlbnRyeSB3aWxsIGNvbnRhaW4gYSBTZXQgb2YgYWxsXG4gKiBwYXRocyB0aGF0IHRoZSBrZXkgcGF0aCBpcyBkZXBlbmRlbnQgb24uIFJlY3Vyc2l2ZWx5IGRlbHZlIGludG8gZWFjaCBkZXBlbmRlbmN5IHBhdGggYW5kIHJlcGVhdCB0aGUgcHJvY2VzcyB1bnRpbCB3ZVxuICogaGF2ZSByZWFjaGVkIGFuIGVudHJ5IHRoYXQgaGFzIG5vIGRlcGVuZGVuY2llcy4gQXQgdGhpcyBwb2ludCB3ZSBjYW4gc2FmZWx5IHJlc29sdmUgdGhlIGRlcGVuZGVuY3kgdXNpbmcgaXRzIHNob3dfd2hlbiBydWxlLCBcbiAqIGFuZCB1bndpbmQgdGhlIHJlY3Vyc2lvbi4gXG4gKiBcbiAqIEJlY2F1c2UgYWxsIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlci1jb25uZWN0ZWQsIHRoaXMgY291bGQgcmVzdWx0IGluIHJlc29sdmluZyB0aGUgc2FtZSBlbnRyeSByZXBlYXRlZGx5LCBzbyBrZWVwIGEgJ3Zpc2l0ZWQnIFxuICogYXJyYXkgdG8gcHJldmVudCB0aGlzLlxuICogICBcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtRGF0YSBUaGUgZm9ybSBwYXlsb2FkXG4gKiBAcGFyYW0ge01hcH0gYWxsQ29tcG9uZW50cyBBbGwgY29tcG9uZW50cyBpbiBmb3JtIChpbmNsdWRpbmcgbmVzdGVkKSwga2V5ZWQgYnkgcGF0aFxuICogQHBhcmFtIHtPYmplY3R9IGNvbXBvbmVudHNUb0tlZXAgQSBjb3VudCBvZiBob3cgbWFueSB0aW1lcyBlYWNoIGNvbXBvbmVudCBpcyB1c2VkLCB0byBwcmV2ZW50IHVzIGRlbGV0aW5nIGNvbXBvbmVudHMgZGVmaW5lZCA+IDEgdGltZXNcbiAqIEBwYXJhbSB7TWFwfSBhbGxEZXBlbmRlbmN5UmVsYXRpb25zaGlwcyBBIG1hcCBvZiBlYWNoIGNvbXBvbmVudCB3aXRoIGRlcGVuZGVuY2llcy4gVGhlIGtleSBpcyB0aGUgZnVsbHkgcXVhbGlmaWVkIHBhdGggYW5kIHRoZSB2YWx1ZSBpcyBhIFNldCBvZiBhbGwgdGhlIHBhdGhzIHRoYXQgdGhpcyBjb21wb25lbnQgaXMgZGVwZW5kZW50IG9uLiAgIFxuICogQHBhcmFtIHtNYXB9IGFsbENvbGxlY3Rpb25zIEEgbWFwIG9mIGNvbGxlY3Rpb24gb2JqZWN0cywgd2hpY2ggYXJlIGEgZ3JvdXBpbmcgb2YgdGhlIHBhZ2VzIHRoYXQgbWFrZSB1cCBhIHNpbmdsZSBjb2xsZWN0aW9uICBcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtIFRoZSBmb3JtIHNwZWNpZmljYXRpb25cbiAqL1xuY29uc3QgcmVzb2x2ZUNvbXBvbmVudERlcGVuZGVuY2llc0dyYXBoID0gKGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzLCBhbGxDb21wb25lbnRzLCBjb21wb25lbnRzVG9LZWVwLCBhbGxDb2xsZWN0aW9ucywgZm9ybSwgZm9ybURhdGEpID0+IHtcbiAgICAvKlxuICAgICAqIElubmVyIGZ1bmN0aW9uIHRvIHN1cHBvcnQgdGhlIHJlY3Vyc2lvbiByZXF1aXJlZCB0byB0cmF2ZXJzZSB0aHJvdWdoIHRoZSBuZXN0ZWQgbmF0dXJlIG9mIHRoZSBhbGxEZXBlbmRlbmN5UmVsYXRpb25zaGlwc1xuICAgICAqL1xuICAgIGNvbnN0IHJlY3Vyc2l2ZWx5UmVzb2x2ZURlcGVuZGVuY2llcyA9ICh2aXNpdGVkLCBkZXBlbmRlbnRDb21wb25lbnQsIGRlcGVuZGVuY3lSZWxhdGlvbnNoaXBzKSA9PiB7XG5cbiAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKGRlcGVuZGVudENvbXBvbmVudCkpIHJldHVybjtcbiAgICAgICAgdmlzaXRlZC5hZGQoZGVwZW5kZW50Q29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jeVJlbGF0aW9uc2hpcHMuZ2V0KGRlcGVuZGVudENvbXBvbmVudC5wYXRoKTtcblxuICAgICAgICBkZXBlbmRlbmNpZXM/LmZvckVhY2goKGRlcGVuZGVuY3lQYXRoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5Q29tcG9uZW50cyA9IFV0aWxzLmdldERlcGVuZGVuY3lPYmplY3RGcm9tUGF0aChkZXBlbmRlbmN5UGF0aCwgYWxsQ29tcG9uZW50cyk7XG4gICAgICAgICAgICBpZiAoZGVwZW5kZW5jeUNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmN5Q29tcG9uZW50cy5mb3JFYWNoKChkZXBlbmRlbmN5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwZW5kZW5jeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5UmVzb2x2ZURlcGVuZGVuY2llcyh2aXNpdGVkLCBkZXBlbmRlbmN5LCBkZXBlbmRlbmN5UmVsYXRpb25zaGlwcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIGhlcmUgaWYgdGhlIGRlcGVuZGVuY3kgcGF0aCB3YXMgbm90IGZvdW5kIGluIHRoZSBsaXN0IG9mIGFsbENvbXBvbmVudHMuIFRoaXMgaXMgdmFsaWQgYW5kIGNhbiBoYXBwZW4gd2hlbiBcbiAgICAgICAgICAgICAgICAvLyBhIGNvbXBvbmVudCBpcyBkZXBlbmRlbnQgb24gYSBmaWVsZCB0aGF0IHdhcyBnZW5lcmF0ZWQgYnkgY29wLXVpLCBlLmcuIGpvYkhvbGRlclN0YWZmRGV0YWlscy5saW5lbWFuYWdlckVtYWlsLlxuICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHRoZXJlIGlzIGFuIGVkZ2UgY2FzZSAoZGVzY3JpYmVkIGluIHRoZSBtZXNzYWdlIGJlbG93KSB0aGF0IHdlIG5lZWQgdG8gdmFsaWRhdGUgZm9yLiAgXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlOYW1lUGF0dGVybiA9IC8oW2EtekEtWl8kXVtcXHckXSopXFxbXFxkK1xcXS87XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBkZXBlbmRlbmN5UGF0aC5tYXRjaChhcnJheU5hbWVQYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGFsbENvbGxlY3Rpb25zLmdldChjb2xsZWN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmNoaWxkUGFnZXM/LmZvckVhY2goY2hpbGRQYWdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRQYWdlLnNob3dfd2hlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYEl0IGlzIG5vdCBwb3NzaWJsZSB0byByZWxpYWJseSBjbGVhbiBoaWRkZW4gZGF0YSB3aGVuIGEgY29tcG9uZW50IGlzIGRlcGVuZGVudCBvbiBhIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uJ3MgZGF0YSwgYW5kIHRoYXQgY29sbGVjdGlvbiBpcyBpdHNlbGYgZGVwZW5kZW50IG9uIGRhdGEgZWxzZXdoZXJlIGluIHRoZSBmb3JtLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVwZW5kZW5jeSBwYXRoIGlzICR7ZGVwZW5kZW5jeVBhdGh9LCBhbmQgdGhlIGNoYWluZWQgc2hvd193aGVuIGlzICR7SlNPTi5zdHJpbmdpZnkoY2hpbGRQYWdlLnNob3dfd2hlbil9LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9ybSB3aWxsIG5lZWQgdG8gYmUgY2hhbmdlZCB0byBicmVhayB0aGlzIGNoYWluZWQgZGVwZW5kZW5jeWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IChuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFdoaWxzdCB1bnJhdmVsbGluZyB0aGUgcmVjdXJzaW9uLCB3ZSBjYW4gc3RhcnQgZGVsZXRpbmcgZnJvbSB0aGUgbGVhZiB1cHdhcmRzXG4gICAgICAgIGlmICghVXRpbHMuaXNTaG93RW50aXR5KGRlcGVuZGVudENvbXBvbmVudCwgZm9ybURhdGEpKSB7XG4gICAgICAgICAgICBVdGlscy5kZWxldGVDb21wb25lbnREYXRhKGZvcm1EYXRhLCBkZXBlbmRlbnRDb21wb25lbnQucGF0aCwgZGVwZW5kZW50Q29tcG9uZW50LCBjb21wb25lbnRzVG9LZWVwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgYWxsRGVwZW5kZW5jeVJlbGF0aW9uc2hpcHM/LmZvckVhY2goKGRlcGVuZGVuY2llcywgZGVwZW5kZW50Q29tcG9uZW50UGF0aCkgPT4ge1xuICAgICAgICAvLyBFYWNoIHBhdGggdGhhdCBhIGNvbXBvbmVudCBpcyBkZXBlbmRlbnQgb24gbWF5IGhhdmUgPiAxIHBvc3NpYmxlIGRlcGVuZGVudCBjb21wb25lbnRzLCBpZiBhIGZpZWxkIGlzIHVzZWQgdHdpY2VcbiAgICAgICAgY29uc3QgZGVwZW5kZW50Q29tcG9uZW50cyA9IGFsbENvbXBvbmVudHMuZ2V0KGRlcGVuZGVudENvbXBvbmVudFBhdGgpO1xuICAgICAgICBkZXBlbmRlbnRDb21wb25lbnRzPy5mb3JFYWNoKChkZXBlbmRlbnRDb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwZW5kZW50Q29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5UmVzb2x2ZURlcGVuZGVuY2llcyh2aXNpdGVkLCBkZXBlbmRlbnRDb21wb25lbnQsIGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzLCBmb3JtLCBmb3JtRGF0YSwgYWxsQ29tcG9uZW50cywgY29tcG9uZW50c1RvS2VlcCwgYWxsQ29sbGVjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBGb3IgZWFjaCBjb2xsZWN0aW9uLCBpdGVyYXRlIHRocm91Z2ggdGhlIHBheWxvYWQgYXJyYXkncyBvYmplY3RzLCBhbmQgYXBwbHkgdGhlIGNvbGxlY3Rpb25zIHNob3dfd2hlblxuICogcnVsZXMgZm9yIGVhY2ggcGF5bG9hZCBvYmplY3QuXG4gKiBcbiAqIFNvbWUgb2YgdGhlIHJ1bGVzIG1heSBiZSBkZXBlbmRlbnQgb24gcGF5bG9hZCBpdGVtcyBvdXRzaWRlIHRoZSBjb2xsZWN0aW9uLiBUaGVzZSB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGNsZWFuc2VkXG4gKiBzbyB3aWxsIGJlIGluIGEgcmVsaWFibGUgc3RhdGUuIFxuICogXG4gKiBJdCBpcyBwb3NzaWJsZSBpbiB0aGUgZm9ybSBzcGVjIHRvIHNwZWNpZnkgaW4gdGhlIG1hc3RlciBwYWdlIHRoYXQgdGhlIHdob2xlIGNvbGxlY3Rpb24gaGFzIGEgc2hvd193aGVuIHJ1bGUuXG4gKiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBldmFsdWF0ZSB0aGUgcnVsZSBhbmQgaWYgZmFsc2UgZGVsZXRlIHRoZSBlbnRpcmUgY29sbGVjdGlvbiBhcnJheS4gIFxuICogXG4gKiBAcGFyYW0ge01hcH0gYWxsQ29sbGVjdGlvbnMgQSBtYXAgb2YgY29sbGVjdGlvbiBvYmplY3RzLCB3aGljaCBhcmUgYSBncm91cGluZyBvZiB0aGUgcGFnZXMgdGhhdCBtYWtlIHVwIGEgc2luZ2xlIGNvbGxlY3Rpb24gIFxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhIFRoZSBmb3JtIHBheWxvYWRcbiAqIEBwYXJhbSB7TWFwfSBjb21wb25lbnRCeUlkTWFwIE1hcCBvZiBhbGwgY29tcG9uZW50cywgdG8gZW5hYmxlIHBlcmZvcm1hbnQgbG9va3VwIGJ5IGlkXG4gKiBAcGFyYW0ge01hcH0gY29tcG9uZW50QnlGaWVsZElkTWFwIE1hcCBvZiBhbGwgY29tcG9uZW50cywgdG8gZW5hYmxlIHBlcmZvcm1hbnQgbG9va3VwIGJ5IGZpZWxkSWRcbiAqL1xuY29uc3QgY2xlYW5zZUNvbGxlY3Rpb25EYXRhID0gKGFsbENvbGxlY3Rpb25zLCBmb3JtRGF0YSwgY29tcG9uZW50QnlJZE1hcCwgY29tcG9uZW50QnlGaWVsZElkTWFwKSA9PiB7XG4gICAgYWxsQ29sbGVjdGlvbnM/LmZvckVhY2goKGNvbGxlY3Rpb24sIGNvbGxlY3Rpb25OYW1lKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNTaG93RW50aXR5KGNvbGxlY3Rpb24sIGZvcm1EYXRhKSkge1xuICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBlbnRpcmUgY29sbGVjdGlvbiBhcnJheSAoaW5jbHVkaW5nIGFjdGl2ZUlkKSBpZiB0aGUgbWFzdGVyIHBhZ2UgaGFzIGFuIHVubWV0IHJ1bGVcbiAgICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtjb2xsZWN0aW9uTmFtZV07XG4gICAgICAgICAgICBkZWxldGUgZm9ybURhdGFbYCR7Y29sbGVjdGlvbk5hbWV9QWN0aXZlSWRgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uRGF0YUFycmF5ID0gZm9ybURhdGFbY29sbGVjdGlvbk5hbWVdO1xuICAgICAgICBjb2xsZWN0aW9uRGF0YUFycmF5Py5mb3JFYWNoKGNvbGxlY3Rpb25EYXRhRW50cnkgPT4ge1xuICAgICAgICAgICAgLy8gVGhlIGZvcm1zIGFyZSB3cml0dGVuIHN1Y2ggdGhhdCBhIHNob3dfd2hlbiBpbiBhIGNvbGxlY3Rpb24gYXJyYXkgb2JqZWN0IGNhbiBiZSBldmFsdWF0ZWQgYWdhaW5zdCB0aGUgZGF0YSByZWxhdGl2ZSB0byB0aGF0IGRhdGEgb2JqZWN0XG4gICAgICAgICAgICAvLyBPUiBhZ2FpbnN0IHRoZSBkYXRhIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBmb3JtLiBUbyBhY2hpZXZlIHRoYXQsIHdlJ2xsIGNvcHkgdGhlIGNvbGxlY3Rpb24gb2JqZWN0IHRvIHRoZSByb290IG9mIHRoZSBmb3JtIGJlZm9yZSBldmFsdWF0aW5nXG4gICAgICAgICAgICBjb25zdCBkYXRhRm9yRXZhbHVhdGlvbiA9IHsgLi4uZm9ybURhdGEsIC4uLmNvbGxlY3Rpb25EYXRhRW50cnkgfTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhzVG9LZWVwID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50c1RvUHJ1bmUgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBjb2xsZWN0aW9uLmNoaWxkUGFnZXM/LmZvckVhY2goY2hpbGRQYWdlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG93UGFnZSA9IFV0aWxzLmlzU2hvd0VudGl0eShjaGlsZFBhZ2UsIGRhdGFGb3JFdmFsdWF0aW9uKTtcbiAgICAgICAgICAgICAgICBjaGlsZFBhZ2UuY29tcG9uZW50cz8uZm9yRWFjaCh1c2VDb21wb25lbnRJblBhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRPYmogPSBVdGlscy5maW5kQ29tcG9uZW50RGVmaW5pdGlvbkluRm9ybSh1c2VDb21wb25lbnRJblBhZ2UsIGNvbXBvbmVudEJ5SWRNYXAsIGNvbXBvbmVudEJ5RmllbGRJZE1hcCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vbi1kYXRhIGNvbXBvbmVudHMgY2FuIGJlIGlnbm9yZWQgKGVnIGh0bWwpXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tcG9uZW50T2JqLmZpZWxkSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvd0NvbXBvbmVudE9uUGFnZSA9IFV0aWxzLmlzU2hvd0VudGl0eSh1c2VDb21wb25lbnRJblBhZ2UsIGRhdGFGb3JFdmFsdWF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dQYWdlICYmIHNob3dDb21wb25lbnRPblBhZ2UgJiYgVXRpbHMuaXNTaG93RW50aXR5KGNvbXBvbmVudE9iaiwgZGF0YUZvckV2YWx1YXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBtYXkgYmUgPjEgY29tcG9uZW50cyB3aXRoIHRoZSBzYW1lIHBhdGggKGVnIHF1YW50aXR5IGluIEVBQjIpLCBzbyBkb24ndCBkZWxldGUgaGlkZGVuIGNvbXBvbmVudHMgaWYgdGhleSBhcmUgcmVxdWlyZWQgZWxzZXdoZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoc1RvS2VlcC5hZGQoY29tcG9uZW50T2JqLmZpZWxkSWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1RvUHJ1bmUuc2V0KGNvbXBvbmVudE9iai5pZCwgY29tcG9uZW50T2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBVdGlscy5wcnVuZUNvbGxlY3Rpb25FbnRyeShwYXRoc1RvS2VlcCwgY29tcG9uZW50c1RvUHJ1bmUsIGNvbGxlY3Rpb25EYXRhRW50cnksIGZvcm1EYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFxuICAgICAgICBpZiAoY29sbGVjdGlvbkRhdGFBcnJheSkgVXRpbHMucmVtb3ZlT2JqZWN0V2l0aE9ubHlTaW5nbGVJZEZpZWxkKGNvbGxlY3Rpb25EYXRhQXJyYXkpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFxuICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBhcHBseSB0aGUgc2hvd193aGVuIHJ1bGVzIGRlZmluZWQgaW4gdGhlIGZvcm0gc3BlY2lmaWNhdGlvbiB0byB0aGUgXG4gKiBmb3JtIHBheWxvYWQgKGZvcm1EYXRhKSwgYW5kIHJlbW92ZSBhbnkgZGF0YSB0aGF0IHNob3VsZCBub3QgYmUgc2hvd24gYWNjb3JkaW5nIHRvIHRob3NlIHJ1bGVzLlxuICogKHRoZSByZWFzb24gdGhpcyBkYXRhIGV4aXN0cyBpbiB0aGUgcGF5bG9hZCBpcyB0aGF0IHVzZXJzIGNhbiBhbnN3ZXIgYSBxdWVzdGlvbiBpbiBzdWNoIGEgd2F5IHRoYXQgXG4gKiBvdGhlciBxdWVzdGlvbnMgYXJlICdzaG93bicgdG8gdGhlbSwgd2hpY2ggYXJlIHRoZW4gY29tcGxldGUuIFRoZSB1c2VyIGNhbiB0aGVuIGdvIGJhY2sgYW5kIGNoYW5nZSB0aGUgb3JpZ2luYWxcbiAqIHF1ZXN0aW9uIHRvIHRoZW4gJ2hpZGUnIHRob3NlIHF1ZXN0aW9ucywgYnV0IHRoZSBhbnN3ZXJzIHRoZXkgZ2F2ZSBwZXJzaXN0IGluIHRoZSBwYXlsb2FkLiBUaGUgbXVzdCBiZSBjbGVhbnNlZFxuICogYmVmb3JlIGJlaW5nIHN1Ym1pdHRlZC5cbiAqIFxuICogVGhlcmUgYXJlIDIgdHlwZXMgb2YgcGF5bG9hZCBkYXRhIHRoYXQgaGF2ZSB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5IGJ5IHRoaXMgZnVuY3Rpb24gZm9yIGl0IHRvIHdvcmsuXG4gKiBcbiAqIDEuIERhdGEgZnJvbSBub24tcmVwZWF0aW5nIHBhZ2VzLCBjb250YWluaW5nIGNvbXBvbmVudHMuXG4gKiBcbiAqIEVhY2ggZGF0YSBpdGVtIGNhcHR1cmVkIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgcGF5bG9hZCBhcyBhIGZpZWxkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpZWxkSWQgb2YgdGhlIHBheWxvYWQuXG4gKiBJbiB0aGUgY2FzZSBvZiBjb21wb25lbnRzIHRoYXQgYXJlIG5lc3RlZCB3aXRoaW4gJ2NvbnRhaW5lcicgY29tcG9uZW50cywgdGhlIHBheWxvYWQgd2lsbCByZWZsZWN0IHRoZSBuZXN0aW5nLlxuICogVGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIGxldmVsIG9mIG5lc3RpbmcgaW4gYSBmb3JtLlxuICogXG4gKiBUbyBjbGVhbnNlIHRoZSBwYXlsb2FkIGZvciB0aGlzIHR5cGUgb2YgZGF0YSwgd2UgZG8gdGhlIGZvbGxvd2luZyAoaGlnaCBsZXZlbCBkZXNjcmlwdGlvbiwgc2VlIG1ldGhvZCBjb21tZW50cyBmb3IgZGV0YWlsKTpcbiAqIFxuICogLSBidWlsZCBhIG1hcCBvZiBhbGwgY29tcG9uZW50cywga2V5ZWQgYnkgdGhlaXIgcGF5bG9hZCBwYXRoIChyZXF1aXJlZCBmb3IgdGhlIG5leHQgc3RlcClcbiAqIC0gZm9yIGFsbCBvZiB0aGVzZSBjb21wb25lbnRzIHRoYXQgaGF2ZSBkZXBlbmRlbmNpZXMgKHNob3dfd2hlbiBydWxlcyksIGNyZWF0ZSBhIGdyYXBoIGRhdGFzdHJ1Y3R1cmUgdG8gc2hvdyBhbGwgY29tcG9uZW50c1xuICogICBvbiB3aGljaCBhIGNvbXBvbmVudCBpcyBkZXBlbmRlbnQsIGFuZCB0aGVuIGFsbCBjb21wb25lbnRzIHRoYXQgdGhvc2UgY29tcG9uZW50cyBtYXkgYmUgZGVwZW5kZW50IG9uLiBUaGVyZSBpcyBubyBsaW1pdCB0byBcbiAqICAgdGhlIGRlcHRoIG9mIHRoZXNlIGNoYWluZWQgZGVwZW5kZW5jaWVzLlxuICogLSB0aGUgcmVhc29uIGZvciBidWlsZGluZyBhIGdyYXBoIG9mIHRoZXNlIGRlcGVuZGVuY3kgY2hhaW5zIGlzIHNvIHdlIGtub3cgdGhlIHNlcXVlbmNlIGluIHdoaWNoIHdlIG11c3QgcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzLiBcbiAqICAgRm9yIGFueSBnaXZlbiBjaGFpbiBvZiBkZXBlbmRlbmNpZXMgaXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzIHN0YXJ0aW5nIGF0IHRoZSBlbmQgb2YgdGhlIGNoYWlucywgYW5kIHdvcmsgb3VyIHdheVxuICogICBiYWNrIHVwIHRoZSBjaGFpbi4gSWYgbm90LCB3ZSBjb3VsZCBiZSByZXNvbHZpbmcgYSBkZXBlbmRlbmN5IGJhc2VkIG9uIGEgcGF5bG9hZCBpdGVtIHRoYXQgaXRzZWxmIHdpbGwgbGF0ZXIgYmUgZGVsZXRlZC5cbiAqICAgVGhlcmVmb3JlLCB0aGUgZmluYWwgc3RlcCBpcyB0byByZWN1cnNpdmVseSB0cmF2ZXJzZSB0aGUgZGVwZW5kZW5jeSBncmFwaCwgcmVzb2x2aW5nIHRoZSBkZXBlbmRlbmN5IHJ1bGUgZm9yIHRoZSBjb21wb25lbnRzIGluIFxuICogICB0aGUgY2hhaW4gZnJvbSB0aGUgbGVhZiBiYWNrIHVwIHRvIHRoZSBwYXJlbnQgbm9kZS4gXG4gKiBcbiAqIDIuIFBhZ2UgY29sbGVjdGlvbiBkYXRhXG4gKiBcbiAqIEEgcGFnZSBjb2xsZWN0aW9uIGlzIGEgc2V0IG9mIG9uZSBvciBtb3JlIHBhZ2VzIHdoaWNoIChhcyBhIGdyb3VwKSBjYW4gYmUgZmlsbGVkIGluIGFzIG1hbnkgdGltZXMgaXMgcmVxdWlyZWRcbiAqIGJ5IHRoZSB1c2VyLiBGb3IgZXhhbXBsZSwgaW4gRUFCLCB5b3UgY2FuIGFkZCBhcyBtYW55IGl0ZW0tc2VhbC1kZXRhaWxzIHRvIGFuIEVBQiBmb3JtIGFzIGFyZSByZXF1aXJlZC4gQW4gaXRlbS1zZWFsLWRldGFpbFxuICogaXMgbWFkZSB1cCBvZiBzZXZlcmFsIGRpZmZlcmVudCBwYWdlcywgYWxsIGdyb3VwZWQuIFRoZSBkYXRhIHNhdmVkIHdpbGwgYmUgYW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSB3aG9sZSBjb2xsZWN0aW9uLCB3aXRoXG4gKiBlYWNoIG9iamVjdCBpbiB0aGUgYXJyYXkgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGNvbGxlY3Rpb24gZW50cnkgKGEgc2luZ2xlIGl0ZW0tc2VhbC1kZXRhaWwgaW4gdGhpcyBleGFtcGxlKS5cbiAqIFxuICogQ2xlYW5zZSBjb2xsZWN0aW9uIGRhdGEgaGFzIHRvIGJlIGRyaXZlbiBmcm9tIHRoZSBwYXlsb2FkIHJhdGhlciB0aGFuIHRoZSBmb3JtLCBhcyB0aGVyZSBhcmUgcmVwZWF0ZWQgb2JqZWN0cyBpbiBhbiBhcnJheVxuICogcmVwcmVzZW50aW5nIHRoZSBkYXRhLiBFYWNoIG9uZSBoYXMgdG8gYmUgdHJlYXRlZCBpbmRlcGVuZGVudGx5IGFzIHRoZSBkYXRhIHRvIGJlIGNsZWFuc2VkIGNhbiBiZSBkaWZmZXJlbnQgaW4gZWFjaCBvbmUuXG4gKiAgXG4gKiAtIEZvciBlYWNoIGNvbGxlY3Rpb24gdHlwZSwgaXRlcmF0ZSB0aHJvdWdoIGVhY2ggcGF5bG9hZCBvYmplY3QgYW5kIHRyZWF0IGl0IGxpa2UgYW4gaW5kZXBlbmRlbnQgcGF5bG9hZC4uXG4gKiAtIEZvciBlYWNoIGNvbGxlY3Rpb24gcGF5bG9hZCBvYmplY3QsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY29sbGVjdGlvbidzIHBhZ2VzIGFuZCBjb21wb25lbnRzLCBhbmQgYXBwbHkgYWxsIHRoZSBzaG93X3doZW4gcnVsZXNcbiAqICAgZm91bmQgYXQgYm90aCBwYWdlIGFuZCBjb21wb25lbnQgbGV2ZWwgdG8gdGhlIHBheWxvYWQuIFxuICogLSBSZXBlYXQgZm9yIGVhY2ggcGF5bG9hZCBvYmplY3RcbiAqIC0gUmVwZWF0IGZvciBhbGwgY29sbGVjdGlvbnNcbiAqIFxuICogQHBhcmFtIHsqfSBmb3JtIFxuICogQHBhcmFtIHsqfSBmb3JtRGF0YSBcbiAqIEByZXR1cm5zIHsqfSBjbGVhbnNlZCBmb3JtIGRhdGEgXG4gKi9cbmNvbnN0IGNsZWFyT3V0VW5jb21wbGV0ZWRSb3V0ZXMgPSAoY2xlYW5zZUhpZGRlbkRhdGEsIGZvcm0sIGZvcm1EYXRhKSA9PiB7XG5cbiAgICBpZiAoIWNsZWFuc2VIaWRkZW5EYXRhKSByZXR1cm4gZm9ybURhdGE7XG5cbiAgICAvLyBMb2FkIGNvbXBvbmVudHMgaW50byBtYXBzIGtleWVkIG9uIGlkIGFuZCBmaWVsZCBmb3Igc3Vic2VxdWVudCBwZXJmb3JtYW50IGFjY2Vzc1xuICAgIGNvbnN0IGNvbXBvbmVudEJ5SWRNYXAgPSBuZXcgTWFwKGZvcm0uY29tcG9uZW50cy5tYXAoYyA9PiBbYy5pZCwgY10pKTtcbiAgICBjb25zdCBjb21wb25lbnRCeUZpZWxkSWRNYXAgPSBuZXcgTWFwKGZvcm0uY29tcG9uZW50cy5tYXAoYyA9PiBbYy5maWVsZElkLCBjXSkpO1xuXG4gICAgLy8gR3JvdXAgYWxsIHBhZ2VzIHJlbGF0aW5nIHRvIGEgcGFnZS1jb2xsZWN0aW9uIGludG8gYSBzaW5nbGUgb2JqZWN0IHRvIGFpZCBjb2xsZWN0aW9uIFxuICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB0byBhbGxvdyB1cyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYSBjb2xsZWN0aW9uIGFuZCBub24tY29sbGVjdGlvbiBwYWdlLlxuICAgIGNvbnN0IGNvbmRlbnNlZFBhZ2VzID0gbWVyZ2VDb2xsZWN0aW9uUGFnZXMoZm9ybS5wYWdlcyk7XG5cbiAgICBjb25zdCB7IGFsbENvbXBvbmVudHMsIGNvbXBvbmVudHNUb0tlZXAsIGFsbENvbGxlY3Rpb25zIH0gPSBjcmVhdGVDb21wb25lbnRNYXBzRnJvbUZvcm0oY29uZGVuc2VkUGFnZXMsIGNvbXBvbmVudEJ5SWRNYXAsIGNvbXBvbmVudEJ5RmllbGRJZE1hcCwgZm9ybURhdGEpO1xuICAgIGNvbnN0IGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzID0gY3JlYXRlQ29tcG9uZW50RGVwZW5kZW5jaWVzR3JhcGgoYWxsQ29tcG9uZW50cyk7XG4gICAgcmVzb2x2ZUNvbXBvbmVudERlcGVuZGVuY2llc0dyYXBoKGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzLCBhbGxDb21wb25lbnRzLCBjb21wb25lbnRzVG9LZWVwLCBhbGxDb2xsZWN0aW9ucywgZm9ybSwgZm9ybURhdGEpO1xuICAgIGNsZWFuc2VDb2xsZWN0aW9uRGF0YShhbGxDb2xsZWN0aW9ucywgZm9ybURhdGEsIGNvbXBvbmVudEJ5SWRNYXAsIGNvbXBvbmVudEJ5RmllbGRJZE1hcCk7XG5cbiAgICAvLyBUaGUgY2xlYW5zaW5nIGFib3ZlIG1heSBoYXZlIGxlZnQgZW1wdHkgYXJyYXlzIGFuZCBjb2xsZWN0aW9uIElEcy4gVGlkeSB0aGVzZSB1cC5cbiAgICBVdGlscy5yZW1vdmVFbXB0eUFycmF5c0FuZFVudXNlZENvbGxlY3Rpb25JRHMoZm9ybURhdGEpO1xuXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xlYXJPdXRVbmNvbXBsZXRlZFJvdXRlcztcblxuXG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLHFCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksY0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQThELFNBQUFFLHdCQUFBRyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBTCx1QkFBQSxZQUFBQSxDQUFBRyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxD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