studiokit-scaffolding-js 7.0.12-next.2.9 → 7.0.13-alpha.1

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 (390) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +137 -137
  3. package/lib/components/ActionList.d.ts +2 -2
  4. package/lib/components/ActionList.js +87 -166
  5. package/lib/components/AlertDialog.d.ts +3 -3
  6. package/lib/components/AlertDialog.js +18 -133
  7. package/lib/components/AlertWithIcon.js +52 -93
  8. package/lib/components/ConnectedModal.d.ts +2 -1
  9. package/lib/components/ConnectedModal.js +37 -43
  10. package/lib/components/Dropdowns/GroupsDropdown.d.ts +4 -4
  11. package/lib/components/Dropdowns/GroupsDropdown.js +82 -69
  12. package/lib/components/Dropdowns/ManagedNavDropdown.d.ts +2 -2
  13. package/lib/components/Dropdowns/ManagedNavDropdown.js +111 -99
  14. package/lib/components/Dropdowns/UserDropdown.js +70 -109
  15. package/lib/components/Dropdowns/index.js +11 -27
  16. package/lib/components/EntityOwnerList.d.ts +3 -3
  17. package/lib/components/EntityOwnerList.js +60 -52
  18. package/lib/components/Error.js +27 -107
  19. package/lib/components/ErrorBoundary.js +94 -133
  20. package/lib/components/ErrorMessage.d.ts +2 -2
  21. package/lib/components/ErrorMessage.js +14 -44
  22. package/lib/components/Forms/DateField.d.ts +2 -2
  23. package/lib/components/Forms/DateField.js +95 -63
  24. package/lib/components/Forms/TimeField.d.ts +2 -2
  25. package/lib/components/Forms/TimeField.js +108 -84
  26. package/lib/components/Forms/index.js +13 -27
  27. package/lib/components/Groups/CreateEditCopySaveButtons.d.ts +2 -2
  28. package/lib/components/Groups/CreateEditCopySaveButtons.js +14 -102
  29. package/lib/components/Groups/ExternalGroups/Attach.d.ts +7 -6
  30. package/lib/components/Groups/ExternalGroups/Attach.js +188 -213
  31. package/lib/components/Groups/ExternalGroups/Table.js +76 -183
  32. package/lib/components/Groups/GroupCreateOrEditCommonProps.js +1 -5
  33. package/lib/components/Groups/RosterSyncInfo.js +49 -140
  34. package/lib/components/HOC/AccessibleAppComponent.d.ts +2 -2
  35. package/lib/components/HOC/AccessibleAppComponent.js +124 -101
  36. package/lib/components/HOC/ActivityRequiredComponent.d.ts +14 -14
  37. package/lib/components/HOC/ActivityRequiredComponent.js +107 -93
  38. package/lib/components/HOC/AsyncComponent.d.ts +9 -9
  39. package/lib/components/HOC/AsyncComponent.js +129 -53
  40. package/lib/components/HOC/AuthenticatedComponent.d.ts +4 -4
  41. package/lib/components/HOC/AuthenticatedComponent.js +96 -59
  42. package/lib/components/HOC/CollectionComponent.d.ts +12 -12
  43. package/lib/components/HOC/CollectionComponent.js +171 -171
  44. package/lib/components/HOC/CollectionFirstItemComponent.d.ts +13 -13
  45. package/lib/components/HOC/CollectionFirstItemComponent.js +94 -52
  46. package/lib/components/HOC/CollectionItemComponent.d.ts +9 -9
  47. package/lib/components/HOC/CollectionItemComponent.js +168 -169
  48. package/lib/components/HOC/ConnectedModalComponent.d.ts +9 -9
  49. package/lib/components/HOC/ConnectedModalComponent.js +140 -110
  50. package/lib/components/HOC/DataDependentComponent.d.ts +55 -3
  51. package/lib/components/HOC/DataDependentComponent.js +79 -30
  52. package/lib/components/HOC/EntityComponent.d.ts +13 -13
  53. package/lib/components/HOC/EntityComponent.js +112 -74
  54. package/lib/components/HOC/FullscreenModalComponent.d.ts +9 -9
  55. package/lib/components/HOC/FullscreenModalComponent.js +185 -165
  56. package/lib/components/HOC/GroupActivityRequiredComponent.d.ts +2 -2
  57. package/lib/components/HOC/GroupActivityRequiredComponent.js +47 -48
  58. package/lib/components/HOC/GuidComponent.d.ts +1 -1
  59. package/lib/components/HOC/GuidComponent.js +68 -29
  60. package/lib/components/HOC/ModelContextDependencyVerifyComponent.d.ts +29 -28
  61. package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +65 -42
  62. package/lib/components/HOC/ModelErrorRedirectComponent.d.ts +10 -10
  63. package/lib/components/HOC/ModelErrorRedirectComponent.js +94 -51
  64. package/lib/components/HOC/SearchPersistorComponent.d.ts +4 -4
  65. package/lib/components/HOC/SearchPersistorComponent.js +216 -243
  66. package/lib/components/HOC/UnauthenticatedComponent.d.ts +12 -12
  67. package/lib/components/HOC/UnauthenticatedComponent.js +82 -37
  68. package/lib/components/HOC/UserComponent.d.ts +1 -1
  69. package/lib/components/HOC/UserComponent.js +11 -12
  70. package/lib/components/Icons/IconAlphaList.js +20 -34
  71. package/lib/components/Icons/IconExternalUser.js +20 -34
  72. package/lib/components/Icons/IconImpersonation.js +20 -34
  73. package/lib/components/Icons/IconStopImpersonating.js +20 -34
  74. package/lib/components/Icons/IconTable.js +21 -35
  75. package/lib/components/Icons/IconTableDeleteCol.js +20 -34
  76. package/lib/components/Icons/IconTableDeleteRow.js +20 -34
  77. package/lib/components/Icons/IconTableInsertCol.js +20 -34
  78. package/lib/components/Icons/IconTableInsertRow.js +20 -34
  79. package/lib/components/Impersonation/Button.d.ts +2 -2
  80. package/lib/components/Impersonation/Button.js +56 -76
  81. package/lib/components/Impersonation/Link.d.ts +2 -2
  82. package/lib/components/Impersonation/Link.js +53 -76
  83. package/lib/components/Impersonation/UserDetail.css +22 -22
  84. package/lib/components/Impersonation/UserDetail.d.ts +2 -2
  85. package/lib/components/Impersonation/UserDetail.js +17 -66
  86. package/lib/components/Loading.js +21 -27
  87. package/lib/components/LockDownBrowser/Check.js +107 -194
  88. package/lib/components/LockDownBrowser/ExitButton.js +14 -27
  89. package/lib/components/LockDownBrowser/Launch.js +85 -70
  90. package/lib/components/Lti/Confirm.js +33 -152
  91. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.d.ts +2 -4
  92. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +78 -170
  93. package/lib/components/Lti/Launch.js +49 -105
  94. package/lib/components/Lti/LaunchGroup.js +39 -85
  95. package/lib/components/ManageTable.d.ts +2 -1
  96. package/lib/components/ManageTable.js +104 -309
  97. package/lib/components/ManageTableNoDataComponent.js +22 -42
  98. package/lib/components/NewVersionAlert.d.ts +2 -2
  99. package/lib/components/NewVersionAlert.js +91 -82
  100. package/lib/components/NotFound.js +28 -87
  101. package/lib/components/Notifications.d.ts +4 -4
  102. package/lib/components/Notifications.js +169 -187
  103. package/lib/components/PaginationNextButton.js +21 -33
  104. package/lib/components/PaginationPreviousButton.js +21 -33
  105. package/lib/components/Quill/CustomToolbar.d.ts +2 -2
  106. package/lib/components/Quill/CustomToolbar.js +257 -432
  107. package/lib/components/Quill/Formats/Image.d.ts +25 -10
  108. package/lib/components/Quill/Formats/Image.js +86 -80
  109. package/lib/components/Quill/Formats/List.d.ts +3 -6
  110. package/lib/components/Quill/Formats/List.js +74 -52
  111. package/lib/components/Quill/Formats/Video.d.ts +1 -2
  112. package/lib/components/Quill/Formats/Video.js +45 -31
  113. package/lib/components/Quill/ImageDropModule.d.ts +1 -1
  114. package/lib/components/Quill/ImageDropModule.js +122 -149
  115. package/lib/components/Quill/ImageWarning.d.ts +2 -2
  116. package/lib/components/Quill/ImageWarning.js +32 -45
  117. package/lib/components/Quill/ImageWithAltTextModal.d.ts +1 -0
  118. package/lib/components/Quill/ImageWithAltTextModal.js +141 -425
  119. package/lib/components/Quill/Specs/CustomImageSpec.d.ts +1 -1
  120. package/lib/components/Quill/Specs/CustomImageSpec.js +51 -43
  121. package/lib/components/Quill/Specs/CustomVideoSpec.d.ts +1 -1
  122. package/lib/components/Quill/Specs/CustomVideoSpec.js +44 -35
  123. package/lib/components/Quill/TableModule/Blots/BaseTableBlot.d.ts +1 -2
  124. package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +121 -105
  125. package/lib/components/Quill/TableModule/Blots/TableBlot.js +66 -53
  126. package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +67 -54
  127. package/lib/components/Quill/TableModule/Blots/TableCellBlot.d.ts +1 -1
  128. package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +241 -225
  129. package/lib/components/Quill/TableModule/Blots/TableContainer.js +99 -82
  130. package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +87 -76
  131. package/lib/components/Quill/TableModule/constants.js +41 -45
  132. package/lib/components/Quill/TableModule/index.css +171 -171
  133. package/lib/components/Quill/TableModule/index.d.ts +5 -14
  134. package/lib/components/Quill/TableModule/index.js +313 -373
  135. package/lib/components/Quill/TableModule/utils.js +45 -45
  136. package/lib/components/Quill/accessibilityFix.d.ts +1 -0
  137. package/lib/components/Quill/accessibilityFix.js +251 -235
  138. package/lib/components/Quill/index.js +32 -36
  139. package/lib/components/RefreshIndicator/Bordered.js +32 -48
  140. package/lib/components/RefreshIndicator/Inline.js +33 -48
  141. package/lib/components/RefreshIndicator/index.d.ts +2 -2
  142. package/lib/components/RefreshIndicator/index.js +113 -263
  143. package/lib/components/SearchControls.js +31 -216
  144. package/lib/components/SentryRoute.js +23 -10
  145. package/lib/components/Tables/RoleFilter.d.ts +4 -3
  146. package/lib/components/Tables/RoleFilter.js +46 -71
  147. package/lib/components/Tables/TextFilter.d.ts +3 -2
  148. package/lib/components/Tables/TextFilter.js +20 -62
  149. package/lib/components/UserRoles/Add.d.ts +3 -3
  150. package/lib/components/UserRoles/Add.js +161 -199
  151. package/lib/components/UserRoles/Context.js +9 -11
  152. package/lib/components/UserRoles/RoleCell.js +100 -180
  153. package/lib/components/UserRoles/Select.js +54 -157
  154. package/lib/components/UserRoles/Table.js +102 -221
  155. package/lib/components/UserRoles/index.d.ts +6 -6
  156. package/lib/components/UserRoles/index.js +466 -537
  157. package/lib/config/eslint/index.cjs +21 -0
  158. package/lib/config/eslint/lib/order.cjs +22 -0
  159. package/lib/config/eslint/lib/prettier.cjs +18 -0
  160. package/lib/config/eslint/lib/typescript.cjs +86 -0
  161. package/lib/config/eslint/react.cjs +9 -0
  162. package/lib/constants/baseActivity.js +26 -30
  163. package/lib/constants/baseRole.js +10 -14
  164. package/lib/constants/configuration.d.ts +1 -1
  165. package/lib/constants/configuration.js +39 -43
  166. package/lib/constants/externalProviderType.js +6 -10
  167. package/lib/constants/fetchErrorData.js +11 -15
  168. package/lib/constants/index.js +23 -137
  169. package/lib/constants/lockDownBrowser.js +24 -28
  170. package/lib/constants/mockData.d.ts +6 -4
  171. package/lib/constants/mockData.js +326 -385
  172. package/lib/constants/modelStatus.js +11 -15
  173. package/lib/constants/notificationType.js +8 -12
  174. package/lib/constants/operatingSystem.js +8 -12
  175. package/lib/constants/shard.js +7 -11
  176. package/lib/constants/table.js +21 -21
  177. package/lib/constants/tier.js +8 -12
  178. package/lib/constants/userRole.d.ts +2 -1
  179. package/lib/constants/userRole.js +17 -15
  180. package/lib/css/base/_base.css +98 -98
  181. package/lib/css/base/_typography.css +130 -130
  182. package/lib/css/components/_alert.css +86 -86
  183. package/lib/css/components/_bootstrap-grid.css +28 -28
  184. package/lib/css/components/_buttons.css +397 -397
  185. package/lib/css/components/_forms.css +101 -101
  186. package/lib/css/components/_menu.css +56 -56
  187. package/lib/css/components/_modals.css +46 -46
  188. package/lib/css/components/_quill.css +315 -315
  189. package/lib/css/components/_tables.css +497 -497
  190. package/lib/css/components/_tags.css +12 -12
  191. package/lib/css/index-with-variables.css +15 -15
  192. package/lib/css/index.css +14 -14
  193. package/lib/css/utils/_border.css +463 -463
  194. package/lib/css/utils/_color.css +317 -317
  195. package/lib/css/utils/_display.css +312 -305
  196. package/lib/css/utils/_general.css +48 -48
  197. package/lib/css/utils/_icon.css +16 -16
  198. package/lib/css/utils/_text.css +24 -25
  199. package/lib/css/utils/_width.css +60 -60
  200. package/lib/css/variables.css +84 -84
  201. package/lib/endpointMappings.js +193 -197
  202. package/lib/hooks/useCollection.js +65 -83
  203. package/lib/hooks/useCollectionConfiguration.d.ts +1 -0
  204. package/lib/hooks/useCollectionConfiguration.js +88 -185
  205. package/lib/hooks/useCollectionItem.js +58 -155
  206. package/lib/hooks/useGuid.js +10 -21
  207. package/lib/hooks/usePrevious.d.ts +1 -24
  208. package/lib/hooks/usePrevious.js +14 -84
  209. package/lib/index.js +36 -156
  210. package/lib/redux/actionCreator.d.ts +6 -6
  211. package/lib/redux/actionCreator.js +40 -51
  212. package/lib/redux/actions/AuthAction.js +31 -44
  213. package/lib/redux/actions/ModalAction.d.ts +1 -1
  214. package/lib/redux/actions/ModalAction.js +6 -10
  215. package/lib/redux/actions/ModelAction.d.ts +1 -1
  216. package/lib/redux/actions/ModelAction.js +49 -77
  217. package/lib/redux/actions/NotificationAction.js +6 -10
  218. package/lib/redux/actions/SearchAction.js +5 -9
  219. package/lib/redux/actions/index.js +16 -60
  220. package/lib/redux/configureReducers.d.ts +5 -2
  221. package/lib/redux/configureReducers.js +78 -67
  222. package/lib/redux/configureStore.d.ts +2 -2
  223. package/lib/redux/configureStore.js +115 -83
  224. package/lib/redux/helpers.js +2 -7
  225. package/lib/redux/reducers/authReducer.js +46 -52
  226. package/lib/redux/reducers/index.js +15 -41
  227. package/lib/redux/reducers/modalsReducer.js +52 -49
  228. package/lib/redux/reducers/modelsReducer.d.ts +2 -2
  229. package/lib/redux/reducers/modelsReducer.js +182 -183
  230. package/lib/redux/reducers/notificationsReducer.js +21 -26
  231. package/lib/redux/reducers/searchReducer.js +20 -26
  232. package/lib/redux/sagas/appInsightsSaga.js +62 -24
  233. package/lib/redux/sagas/authSaga.js +414 -287
  234. package/lib/redux/sagas/caliperSaga.js +263 -169
  235. package/lib/redux/sagas/clockOffsetSaga.js +77 -36
  236. package/lib/redux/sagas/configurationSaga.js +46 -13
  237. package/lib/redux/sagas/downtimeApiErrorSaga.d.ts +1 -0
  238. package/lib/redux/sagas/downtimeApiErrorSaga.js +64 -23
  239. package/lib/redux/sagas/errorSaga.d.ts +1 -0
  240. package/lib/redux/sagas/errorSaga.js +63 -29
  241. package/lib/redux/sagas/googleAnalyticsSaga.js +69 -29
  242. package/lib/redux/sagas/identityProviderSaga.js +69 -24
  243. package/lib/redux/sagas/initialDataLoadSaga.js +29 -38
  244. package/lib/redux/sagas/lockDownBrowserErrorSaga.d.ts +1 -0
  245. package/lib/redux/sagas/lockDownBrowserErrorSaga.js +81 -32
  246. package/lib/redux/sagas/modelFetchSaga.js +459 -379
  247. package/lib/redux/sagas/noStoreSaga.d.ts +1 -1
  248. package/lib/redux/sagas/noStoreSaga.js +101 -68
  249. package/lib/redux/sagas/postLoginDataSaga.js +79 -47
  250. package/lib/redux/sagas/postLoginRedirectSaga.js +71 -30
  251. package/lib/redux/sagas/rootSaga.js +137 -85
  252. package/lib/redux/sagas/sentrySaga.js +85 -29
  253. package/lib/redux/sagas/userIdSaga.js +54 -18
  254. package/lib/services/codeProviderService.js +29 -25
  255. package/lib/services/dateService.js +12 -14
  256. package/lib/services/documentService.js +13 -18
  257. package/lib/services/fetchService.js +168 -134
  258. package/lib/services/persistenceService.d.ts +4 -4
  259. package/lib/services/persistenceService.js +43 -45
  260. package/lib/services/ticketProviderService.js +33 -29
  261. package/lib/services/tokenPersistenceService.js +9 -13
  262. package/lib/services/windowService.js +17 -21
  263. package/lib/startup.d.ts +1 -1
  264. package/lib/startup.js +135 -132
  265. package/lib/types/AppConfiguration.js +1 -5
  266. package/lib/types/Artifact.js +7 -11
  267. package/lib/types/BaseReduxState.js +1 -5
  268. package/lib/types/Client.js +1 -5
  269. package/lib/types/Collection.d.ts +3 -3
  270. package/lib/types/Collection.js +1 -5
  271. package/lib/types/Configuration.js +1 -5
  272. package/lib/types/DeepLinkingResponseRequest.js +1 -5
  273. package/lib/types/DeletableModel.js +1 -5
  274. package/lib/types/Event.js +1 -5
  275. package/lib/types/ExternalGroup.js +1 -5
  276. package/lib/types/ExternalProvider.js +1 -5
  277. package/lib/types/ExternalTerm.js +1 -5
  278. package/lib/types/Group.js +1 -5
  279. package/lib/types/IdentityProvider.js +1 -5
  280. package/lib/types/LtiLaunch.js +1 -5
  281. package/lib/types/NameOnlyEntity.js +1 -5
  282. package/lib/types/Notification.d.ts +2 -2
  283. package/lib/types/Notification.js +1 -5
  284. package/lib/types/OptionalRecord.d.ts +1 -1
  285. package/lib/types/OptionalRecord.js +1 -5
  286. package/lib/types/OwnerSchedule.d.ts +1 -3
  287. package/lib/types/OwnerSchedule.js +1 -5
  288. package/lib/types/PropertyOfType.d.ts +3 -3
  289. package/lib/types/PropertyOfType.js +1 -5
  290. package/lib/types/Quill.js +1 -5
  291. package/lib/types/RoleDescription.d.ts +1 -0
  292. package/lib/types/RoleDescription.js +1 -5
  293. package/lib/types/Search.js +1 -5
  294. package/lib/types/SimpleLocation.js +1 -5
  295. package/lib/types/UniTime.js +1 -5
  296. package/lib/types/User.js +1 -5
  297. package/lib/types/UserRole.js +1 -5
  298. package/lib/types/auth/AuthState.js +1 -5
  299. package/lib/types/auth/CasV1LoginRequestBody.js +1 -5
  300. package/lib/types/auth/ClientCredentials.js +1 -5
  301. package/lib/types/auth/CodeProviderService.js +1 -5
  302. package/lib/types/auth/LocalLoginRequestBody.js +1 -5
  303. package/lib/types/auth/TicketProviderService.js +1 -5
  304. package/lib/types/auth/TokenPersistenceService.js +1 -5
  305. package/lib/types/auth/index.js +18 -82
  306. package/lib/types/index.js +39 -313
  307. package/lib/types/net/EndpointConfig.js +1 -5
  308. package/lib/types/net/EndpointMapping.js +1 -5
  309. package/lib/types/net/EndpointMappings.js +1 -5
  310. package/lib/types/net/ErrorHandler.d.ts +1 -1
  311. package/lib/types/net/ErrorHandler.js +1 -5
  312. package/lib/types/net/FetchConfig.d.ts +1 -1
  313. package/lib/types/net/FetchConfig.js +1 -5
  314. package/lib/types/net/FetchErrorData.js +6 -10
  315. package/lib/types/net/FetchResult.d.ts +2 -2
  316. package/lib/types/net/FetchResult.js +1 -5
  317. package/lib/types/net/HTTPMethod.d.ts +1 -1
  318. package/lib/types/net/HTTPMethod.js +1 -5
  319. package/lib/types/net/HTTPStatusCode.js +12 -16
  320. package/lib/types/net/Metadata.js +1 -5
  321. package/lib/types/net/Model.js +1 -5
  322. package/lib/types/net/ModelCollection.js +1 -5
  323. package/lib/types/net/ModelsState.js +1 -5
  324. package/lib/types/net/OAuthToken.js +1 -5
  325. package/lib/types/net/OAuthTokenOrNull.d.ts +1 -1
  326. package/lib/types/net/OAuthTokenOrNull.js +1 -5
  327. package/lib/types/net/TokenAccessFunction.d.ts +1 -1
  328. package/lib/types/net/TokenAccessFunction.js +1 -5
  329. package/lib/types/net/index.js +27 -181
  330. package/lib/utils/baseActivity.d.ts +2 -2
  331. package/lib/utils/baseActivity.js +136 -138
  332. package/lib/utils/baseRole.js +33 -37
  333. package/lib/utils/collection.js +310 -432
  334. package/lib/utils/cookies.js +37 -22
  335. package/lib/utils/date.js +320 -320
  336. package/lib/utils/dom.js +174 -186
  337. package/lib/utils/domainIdentifier.js +9 -9
  338. package/lib/utils/entityUserRole.js +2 -6
  339. package/lib/utils/error.d.ts +1 -1
  340. package/lib/utils/error.js +16 -18
  341. package/lib/utils/events.js +33 -40
  342. package/lib/utils/externalGroup.js +21 -25
  343. package/lib/utils/externalProviders.js +4 -8
  344. package/lib/utils/externalTerms.js +6 -9
  345. package/lib/utils/fetch.d.ts +1 -1
  346. package/lib/utils/fetch.js +185 -188
  347. package/lib/utils/group.js +9 -17
  348. package/lib/utils/groupDates.d.ts +1 -1
  349. package/lib/utils/groupDates.js +39 -43
  350. package/lib/utils/groupRoles.js +28 -28
  351. package/lib/utils/lockDownBrowser.js +12 -16
  352. package/lib/utils/logger.js +25 -30
  353. package/lib/utils/lti.js +5 -10
  354. package/lib/utils/model.d.ts +2 -2
  355. package/lib/utils/model.js +48 -39
  356. package/lib/utils/number.js +26 -23
  357. package/lib/utils/promise.d.ts +1 -6
  358. package/lib/utils/promise.js +15 -34
  359. package/lib/utils/quill.js +77 -66
  360. package/lib/utils/route.d.ts +2 -2
  361. package/lib/utils/route.js +60 -61
  362. package/lib/utils/search.d.ts +1 -1
  363. package/lib/utils/search.js +85 -78
  364. package/lib/utils/shard.js +41 -38
  365. package/lib/utils/sort.d.ts +3 -3
  366. package/lib/utils/sort.js +58 -62
  367. package/lib/utils/string.js +10 -14
  368. package/lib/utils/table.d.ts +3 -3
  369. package/lib/utils/table.js +36 -39
  370. package/lib/utils/timezone.js +26 -12
  371. package/lib/utils/url.d.ts +1 -2
  372. package/lib/utils/url.js +201 -146
  373. package/lib/utils/user.js +61 -59
  374. package/lib/utils/userAgent.js +11 -11
  375. package/lib/utils/userRole.d.ts +3 -3
  376. package/lib/utils/userRole.js +56 -58
  377. package/package.json +207 -226
  378. package/lib/config/eslint/index.d.ts +0 -2
  379. package/lib/config/eslint/index.js +0 -36
  380. package/lib/config/eslint/lib/order.d.ts +0 -3
  381. package/lib/config/eslint/lib/order.js +0 -30
  382. package/lib/config/eslint/lib/prettier.d.ts +0 -3
  383. package/lib/config/eslint/lib/prettier.js +0 -23
  384. package/lib/config/eslint/lib/typescript.d.ts +0 -2
  385. package/lib/config/eslint/lib/typescript.js +0 -98
  386. package/lib/config/eslint/react.d.ts +0 -2
  387. package/lib/config/eslint/react.js +0 -30
  388. package/lib/hooks/useEventCalback.d.ts +0 -14
  389. package/lib/hooks/useEventCalback.js +0 -51
  390. package/lib/types/externals.d.js +0 -2
@@ -1,251 +1,267 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.applyAccessibilityHacks = applyAccessibilityHacks;
7
- exports.applyAccessibilityToIcons = applyAccessibilityToIcons;
8
- var _lodash = require("lodash");
9
- var _constants = require("./TableModule/constants");
10
- /**
11
- * Apply aria-labels to the icons from the quill text editor
12
- * Imports the icons from Quill, recursively go through each icon and get the <svg /> html.
13
- * Then it sets a <label /> between the <svg />
14
- * Using css, it hides the label content.
15
- *
16
- * @param {*} icons The object that includes all the icons from Quill
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyAccessibilityHacks = exports.applyAccessibilityToIcons = void 0;
4
+ var lodash_1 = require("lodash");
5
+ var constants_1 = require("./TableModule/constants");
6
+ /**
7
+ * Apply aria-labels to the icons from the quill text editor
8
+ * Imports the icons from Quill, recursively go through each icon and get the <svg /> html.
9
+ * Then it sets a <label /> between the <svg />
10
+ * Using css, it hides the label content.
11
+ *
12
+ * @param {*} icons The object that includes all the icons from Quill
17
13
  */
18
14
  function applyAccessibilityToIcons(icons) {
19
- (0, _lodash.forEach)(icons, (value, key) => {
20
- // if the value is an object, recursively call this function
21
- if ((0, _lodash.isPlainObject)(value)) {
22
- applyAccessibilityToIcons(value);
23
- }
24
- // if the value is a string, i.e, "<svg></svg>", then it adds the label
25
- if ((0, _lodash.isString)(value)) {
26
- const regex = /^(.*) <\/svg>/g;
27
- const match = regex.exec(value);
28
- if (!match) {
29
- return;
30
- }
31
- let iconName;
32
- if (key) {
33
- iconName = key;
34
- } else {
35
- iconName = 'left';
36
- }
37
- const label = `<label class="hidden" aria-label="${iconName}">${iconName}</label>`;
38
- icons[key] = match[1] + label + '</svg>';
39
- }
40
- });
15
+ lodash_1.forEach(icons, function (value, key) {
16
+ // if the value is an object, recursively call this function
17
+ if (lodash_1.isPlainObject(value)) {
18
+ applyAccessibilityToIcons(value);
19
+ }
20
+ // if the value is a string, i.e, "<svg></svg>", then it adds the label
21
+ if (lodash_1.isString(value)) {
22
+ var regex = /^(.*) <\/svg>/g;
23
+ var match = regex.exec(value);
24
+ if (!match) {
25
+ return;
26
+ }
27
+ var iconName = void 0;
28
+ if (key) {
29
+ iconName = key;
30
+ }
31
+ else {
32
+ iconName = 'left';
33
+ }
34
+ var label = "<label class=\"hidden\" aria-label=\"" + iconName + "\">" + iconName + "</label>";
35
+ icons[key] = match[1] + label + '</svg>';
36
+ }
37
+ });
41
38
  }
42
-
43
- /**
44
- * Grabs the DOM from the toolbar reference and loop through each button, picker, and dropdowns adding accessibility values
45
- * Help from: https://github.com/quilljs/quill/issues/1173
46
- *
47
- * @param toolbarRef: reference to the div containing our custom Quill toolbar
48
- * @param editor: reference to the Quill editor
39
+ exports.applyAccessibilityToIcons = applyAccessibilityToIcons;
40
+ /**
41
+ * Grabs the DOM from the toolbar reference and loop through each button, picker, and dropdowns adding accessibility values
42
+ * Help from: https://github.com/quilljs/quill/issues/1173
43
+ *
44
+ * @param toolbarRef: reference to the div containing our custom Quill toolbar
45
+ * @param editor: reference to the Quill editor
49
46
  */
50
47
  function applyAccessibilityHacks(toolbarRef, editor) {
51
- // Get ref to the toolbar, its not available through the quill api ughh
52
- if (!toolbarRef.current) {
53
- return;
54
- }
55
- const toolbar = toolbarRef.current;
56
- // apply aria labels to base buttons
57
- const buttons = toolbar.getElementsByTagName('button');
58
- for (const button of Array.from(buttons)) {
59
- const className = button.classList.value.split(' ').filter(v => v.includes('ql-')).map(v => v.replace('ql-', ''))[0];
60
- switch (className) {
61
- case 'bold':
62
- button.setAttribute('aria-label', 'Toggle bold text');
63
- break;
64
- case 'italic':
65
- button.setAttribute('aria-label', 'Toggle italic text');
66
- break;
67
- case 'underline':
68
- button.setAttribute('aria-label', 'Toggle underline text');
69
- break;
70
- case 'script':
71
- if (button.value === 'sub') {
72
- button.setAttribute('aria-label', 'Toggle subscript');
73
- }
74
- if (button.value === 'super') {
75
- button.setAttribute('aria-label', 'Toggle superscript');
76
- }
77
- break;
78
- case 'blockquote':
79
- button.setAttribute('aria-label', 'Toggle blockquote text');
80
- break;
81
- case 'list':
82
- if (button.value === 'ordered') {
83
- button.setAttribute('aria-label', 'Toggle ordered list');
84
- }
85
- if (button.value === 'bullet') {
86
- button.setAttribute('aria-label', 'Toggle bulleted list');
87
- }
88
- break;
89
- case 'header':
90
- if (button.value === '1') {
91
- button.setAttribute('aria-label', 'Toggle heading 1');
92
- }
93
- if (button.value === '2') {
94
- button.setAttribute('aria-label', 'Toggle heading 2');
95
- }
96
- break;
97
- case 'strike':
98
- button.setAttribute('aria-label', 'Toggle strike text');
99
- break;
100
- case 'code-block':
101
- button.setAttribute('aria-label', 'Toggle code block text');
102
- break;
103
- case 'indent':
104
- if (button.value === '-1') {
105
- button.setAttribute('aria-label', 'Indent left');
106
- }
107
- if (button.value === '+1') {
108
- button.setAttribute('aria-label', 'Indent right');
48
+ // Get ref to the toolbar, its not available through the quill api ughh
49
+ if (!toolbarRef.current) {
50
+ return;
51
+ }
52
+ var toolbar = toolbarRef.current;
53
+ // apply aria labels to base buttons
54
+ var buttons = toolbar.getElementsByTagName('button');
55
+ for (var _i = 0, _a = Array.from(buttons); _i < _a.length; _i++) {
56
+ var button = _a[_i];
57
+ var className = button.classList.value
58
+ .split(' ')
59
+ .filter(function (v) { return v.includes('ql-'); })
60
+ .map(function (v) { return v.replace('ql-', ''); })[0];
61
+ switch (className) {
62
+ case 'bold':
63
+ button.setAttribute('aria-label', 'Toggle bold text');
64
+ break;
65
+ case 'italic':
66
+ button.setAttribute('aria-label', 'Toggle italic text');
67
+ break;
68
+ case 'underline':
69
+ button.setAttribute('aria-label', 'Toggle underline text');
70
+ break;
71
+ case 'script':
72
+ if (button.value === 'sub') {
73
+ button.setAttribute('aria-label', 'Toggle subscript');
74
+ }
75
+ if (button.value === 'super') {
76
+ button.setAttribute('aria-label', 'Toggle superscript');
77
+ }
78
+ break;
79
+ case 'blockquote':
80
+ button.setAttribute('aria-label', 'Toggle blockquote text');
81
+ break;
82
+ case 'list':
83
+ if (button.value === 'ordered') {
84
+ button.setAttribute('aria-label', 'Toggle ordered list');
85
+ }
86
+ if (button.value === 'bullet') {
87
+ button.setAttribute('aria-label', 'Toggle bulleted list');
88
+ }
89
+ break;
90
+ case 'header':
91
+ if (button.value === '1') {
92
+ button.setAttribute('aria-label', 'Toggle heading 1');
93
+ }
94
+ if (button.value === '2') {
95
+ button.setAttribute('aria-label', 'Toggle heading 2');
96
+ }
97
+ break;
98
+ case 'strike':
99
+ button.setAttribute('aria-label', 'Toggle strike text');
100
+ break;
101
+ case 'code-block':
102
+ button.setAttribute('aria-label', 'Toggle code block text');
103
+ break;
104
+ case 'indent':
105
+ if (button.value === '-1') {
106
+ button.setAttribute('aria-label', 'Indent left');
107
+ }
108
+ if (button.value === '+1') {
109
+ button.setAttribute('aria-label', 'Indent right');
110
+ }
111
+ break;
112
+ case 'link':
113
+ button.setAttribute('aria-label', 'Insert link');
114
+ break;
115
+ case 'image':
116
+ button.setAttribute('aria-label', 'Insert image');
117
+ break;
118
+ case 'video':
119
+ button.setAttribute('aria-label', 'Insert video');
120
+ break;
121
+ case 'formula':
122
+ button.setAttribute('aria-label', 'Insert formula');
123
+ break;
124
+ case 'clean':
125
+ button.setAttribute('aria-label', 'Clear formatting');
126
+ break;
127
+ case 'table':
128
+ switch (button.value) {
129
+ case constants_1.TABLE_ACTION.INSERT_ROW:
130
+ button.setAttribute('aria-label', 'Insert row');
131
+ break;
132
+ case constants_1.TABLE_ACTION.DELETE_ROW:
133
+ button.setAttribute('aria-label', 'Delete row');
134
+ break;
135
+ case constants_1.TABLE_ACTION.INSERT_COL:
136
+ button.setAttribute('aria-label', 'Insert column');
137
+ break;
138
+ case constants_1.TABLE_ACTION.DELETE_COL:
139
+ button.setAttribute('aria-label', 'Delete column');
140
+ break;
141
+ }
142
+ break;
143
+ default:
144
+ break;
109
145
  }
110
- break;
111
- case 'link':
112
- button.setAttribute('aria-label', 'Insert link');
113
- break;
114
- case 'image':
115
- button.setAttribute('aria-label', 'Insert image');
116
- break;
117
- case 'video':
118
- button.setAttribute('aria-label', 'Insert video');
119
- break;
120
- case 'formula':
121
- button.setAttribute('aria-label', 'Insert formula');
122
- break;
123
- case 'clean':
124
- button.setAttribute('aria-label', 'Clear formatting');
125
- break;
126
- case 'table':
127
- switch (button.value) {
128
- case _constants.TABLE_ACTION.INSERT_ROW:
129
- button.setAttribute('aria-label', 'Insert row');
130
- break;
131
- case _constants.TABLE_ACTION.DELETE_ROW:
132
- button.setAttribute('aria-label', 'Delete row');
133
- break;
134
- case _constants.TABLE_ACTION.INSERT_COL:
135
- button.setAttribute('aria-label', 'Insert column');
136
- break;
137
- case _constants.TABLE_ACTION.DELETE_COL:
138
- button.setAttribute('aria-label', 'Delete column');
139
- break;
146
+ var ariaLabel = button.getAttribute('aria-label');
147
+ if (ariaLabel) {
148
+ button.setAttribute('title', ariaLabel);
140
149
  }
141
- break;
142
- default:
143
- break;
144
- }
145
- const ariaLabel = button.getAttribute('aria-label');
146
- if (ariaLabel) {
147
- button.setAttribute('title', ariaLabel);
148
- }
149
-
150
- // Put title tags to the dropdowns
151
- const dropdowns = toolbar.getElementsByTagName('select');
152
- for (const dropdown of Array.from(dropdowns)) {
153
- const classNameAttribute = dropdown.getAttribute('class');
154
- if (classNameAttribute) {
155
- dropdown.setAttribute('title', classNameAttribute.toLowerCase());
156
- }
157
- }
158
-
159
- // Make pickers work with keyboard and apply aria labels
160
- const pickers = toolbar.getElementsByClassName('ql-picker');
161
- for (const picker of Array.from(pickers)) {
162
- const label = picker.getElementsByClassName('ql-picker-label')[0];
163
- const optionsContainer = picker.getElementsByClassName('ql-picker-options')[0];
164
- const options = optionsContainer.getElementsByClassName('ql-picker-item');
165
- label.setAttribute('role', 'button');
166
- label.setAttribute('aria-haspopup', 'true');
167
- label.setAttribute('tabindex', '0');
168
- if (!!label.parentElement && label.parentElement.classList.contains('ql-font')) {
169
- label.setAttribute('title', 'Font face');
170
- }
171
- if (!!label.parentElement && label.parentElement.classList.contains('ql-size')) {
172
- label.setAttribute('title', 'Font size');
173
- }
174
- if (!!label.parentElement && label.parentElement.classList.contains('ql-align')) {
175
- label.setAttribute('title', 'Alignment');
176
- }
177
- if (!!label.parentElement && label.parentElement.classList.contains('ql-table')) {
178
- label.setAttribute('title', 'Insert table');
179
- }
180
- optionsContainer.setAttribute('aria-hidden', 'true');
181
- optionsContainer.setAttribute('aria-label', 'submenu');
182
- for (const item of Array.from(options)) {
183
- item.setAttribute('tabindex', '0');
184
- item.setAttribute('role', 'button');
185
- if (!(0, _lodash.includes)(picker.classList, 'ql-align')) {
186
- // Read the css 'content' values and generate aria labels for font face/size
187
- const content = window.getComputedStyle(item, ':before').content;
188
- if (content) {
189
- const contentLabels = content.split('"').join('');
190
- item.setAttribute('aria-label', contentLabels);
191
- }
192
- } else {
193
- // Add the title labels to the justification icons
194
- const iconLabels = item.getElementsByTagName('label');
195
- if (iconLabels.length === 1) {
196
- const iconLabel = iconLabels[0].getAttribute('aria-label');
197
- if (iconLabel) {
198
- const iconTitle = iconLabel.charAt(0).toUpperCase() + iconLabel.slice(1);
199
- item.setAttribute('title', iconTitle);
200
- item.setAttribute('aria-label', iconLabel);
150
+ // Put title tags to the dropdowns
151
+ var dropdowns = toolbar.getElementsByTagName('select');
152
+ for (var _b = 0, _c = Array.from(dropdowns); _b < _c.length; _b++) {
153
+ var dropdown = _c[_b];
154
+ var classNameAttribute = dropdown.getAttribute('class');
155
+ if (classNameAttribute) {
156
+ dropdown.setAttribute('title', classNameAttribute.toLowerCase());
201
157
  }
202
- }
203
158
  }
204
- item.addEventListener('keyup', e => {
205
- if (e.keyCode === 13) {
206
- ;
207
- item.click();
159
+ // Make pickers work with keyboard and apply aria labels
160
+ var pickers = toolbar.getElementsByClassName('ql-picker');
161
+ var _loop_1 = function (picker) {
162
+ var label = picker.getElementsByClassName('ql-picker-label')[0];
163
+ var optionsContainer = picker.getElementsByClassName('ql-picker-options')[0];
164
+ var options = optionsContainer.getElementsByClassName('ql-picker-item');
165
+ label.setAttribute('role', 'button');
166
+ label.setAttribute('aria-haspopup', 'true');
167
+ label.setAttribute('tabindex', '0');
168
+ if (!!label.parentElement && label.parentElement.classList.contains('ql-font')) {
169
+ label.setAttribute('title', 'Font face');
170
+ }
171
+ if (!!label.parentElement && label.parentElement.classList.contains('ql-size')) {
172
+ label.setAttribute('title', 'Font size');
173
+ }
174
+ if (!!label.parentElement && label.parentElement.classList.contains('ql-align')) {
175
+ label.setAttribute('title', 'Alignment');
176
+ }
177
+ if (!!label.parentElement && label.parentElement.classList.contains('ql-table')) {
178
+ label.setAttribute('title', 'Insert table');
179
+ }
208
180
  optionsContainer.setAttribute('aria-hidden', 'true');
209
- picker.classList.remove('ql-expanded');
210
- editor.focus();
211
- }
212
- });
213
- }
214
- label.addEventListener('keyup', e => {
215
- if (e.keyCode === 13) {
216
- ;
217
- label.click();
218
- picker.classList.add('ql-expanded');
219
- optionsContainer.setAttribute('aria-hidden', 'false');
181
+ optionsContainer.setAttribute('aria-label', 'submenu');
182
+ var _loop_3 = function (item) {
183
+ item.setAttribute('tabindex', '0');
184
+ item.setAttribute('role', 'button');
185
+ if (!lodash_1.includes(picker.classList, 'ql-align')) {
186
+ // Read the css 'content' values and generate aria labels for font face/size
187
+ var content = window.getComputedStyle(item, ':before').content;
188
+ if (content) {
189
+ var contentLabels = content.split('"').join('');
190
+ item.setAttribute('aria-label', contentLabels);
191
+ }
192
+ }
193
+ else {
194
+ // Add the title labels to the justification icons
195
+ var iconLabels = item.getElementsByTagName('label');
196
+ if (iconLabels.length === 1) {
197
+ var iconLabel = iconLabels[0].getAttribute('aria-label');
198
+ if (iconLabel) {
199
+ var iconTitle = iconLabel.charAt(0).toUpperCase() + iconLabel.slice(1);
200
+ item.setAttribute('title', iconTitle);
201
+ item.setAttribute('aria-label', iconLabel);
202
+ }
203
+ }
204
+ }
205
+ item.addEventListener('keyup', function (e) {
206
+ if (e.keyCode === 13) {
207
+ ;
208
+ item.click();
209
+ optionsContainer.setAttribute('aria-hidden', 'true');
210
+ picker.classList.remove('ql-expanded');
211
+ editor.focus();
212
+ }
213
+ });
214
+ };
215
+ for (var _i = 0, _a = Array.from(options); _i < _a.length; _i++) {
216
+ var item = _a[_i];
217
+ _loop_3(item);
218
+ }
219
+ label.addEventListener('keyup', function (e) {
220
+ if (e.keyCode === 13) {
221
+ ;
222
+ label.click();
223
+ picker.classList.add('ql-expanded');
224
+ optionsContainer.setAttribute('aria-hidden', 'false');
225
+ }
226
+ });
227
+ };
228
+ for (var _d = 0, _e = Array.from(pickers); _d < _e.length; _d++) {
229
+ var picker = _e[_d];
230
+ _loop_1(picker);
220
231
  }
221
- });
222
- }
223
- }
224
- const tooltips = editor.container.getElementsByClassName('ql-tooltip');
225
- for (const tooltip of Array.from(tooltips)) {
226
- tooltip.setAttribute('tabindex', '-1');
227
- const embedUrls = tooltip.getElementsByTagName('input');
228
- for (const embedUrl of Array.from(embedUrls)) {
229
- embedUrl.setAttribute('aria-label', 'Embed Url');
230
232
  }
231
- const previews = tooltip.getElementsByClassName('ql-preview');
232
- for (const preview of Array.from(previews)) {
233
- preview.setAttribute('aria-label', 'Preview');
234
- preview.setAttribute('tabindex', '0');
235
- }
236
- const actions = tooltip.getElementsByClassName('ql-action');
237
- const remove = tooltip.getElementsByClassName('ql-remove');
238
- const allActions = Array.from(actions).concat(Array.from(remove));
239
- for (const action of allActions) {
240
- action.setAttribute('tabindex', '0');
241
- action.setAttribute('role', 'button');
242
- action.addEventListener('keyup', e => {
243
- if (e.keyCode === 13) {
244
- ;
245
- action.click();
233
+ var tooltips = editor.container.getElementsByClassName('ql-tooltip');
234
+ for (var _f = 0, _g = Array.from(tooltips); _f < _g.length; _f++) {
235
+ var tooltip = _g[_f];
236
+ tooltip.setAttribute('tabindex', '-1');
237
+ var embedUrls = tooltip.getElementsByTagName('input');
238
+ for (var _h = 0, _j = Array.from(embedUrls); _h < _j.length; _h++) {
239
+ var embedUrl = _j[_h];
240
+ embedUrl.setAttribute('aria-label', 'Embed Url');
241
+ }
242
+ var previews = tooltip.getElementsByClassName('ql-preview');
243
+ for (var _k = 0, _l = Array.from(previews); _k < _l.length; _k++) {
244
+ var preview = _l[_k];
245
+ preview.setAttribute('aria-label', 'Preview');
246
+ preview.setAttribute('tabindex', '0');
247
+ }
248
+ var actions = tooltip.getElementsByClassName('ql-action');
249
+ var remove = tooltip.getElementsByClassName('ql-remove');
250
+ var allActions = Array.from(actions).concat(Array.from(remove));
251
+ var _loop_2 = function (action) {
252
+ action.setAttribute('tabindex', '0');
253
+ action.setAttribute('role', 'button');
254
+ action.addEventListener('keyup', function (e) {
255
+ if (e.keyCode === 13) {
256
+ ;
257
+ action.click();
258
+ }
259
+ });
260
+ };
261
+ for (var _m = 0, allActions_1 = allActions; _m < allActions_1.length; _m++) {
262
+ var action = allActions_1[_m];
263
+ _loop_2(action);
246
264
  }
247
- });
248
265
  }
249
- }
250
266
  }
251
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJhcHBseUFjY2Vzc2liaWxpdHlUb0ljb25zIiwiaWNvbnMiLCJmb3JFYWNoIiwidmFsdWUiLCJrZXkiLCJpc1BsYWluT2JqZWN0IiwiaXNTdHJpbmciLCJyZWdleCIsIm1hdGNoIiwiZXhlYyIsImljb25OYW1lIiwibGFiZWwiLCJhcHBseUFjY2Vzc2liaWxpdHlIYWNrcyIsInRvb2xiYXJSZWYiLCJlZGl0b3IiLCJjdXJyZW50IiwidG9vbGJhciIsImJ1dHRvbnMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImJ1dHRvbiIsIkFycmF5IiwiZnJvbSIsImNsYXNzTmFtZSIsImNsYXNzTGlzdCIsInNwbGl0IiwiZmlsdGVyIiwidiIsImluY2x1ZGVzIiwibWFwIiwicmVwbGFjZSIsInNldEF0dHJpYnV0ZSIsIlRBQkxFX0FDVElPTiIsIklOU0VSVF9ST1ciLCJERUxFVEVfUk9XIiwiSU5TRVJUX0NPTCIsIkRFTEVURV9DT0wiLCJhcmlhTGFiZWwiLCJnZXRBdHRyaWJ1dGUiLCJkcm9wZG93bnMiLCJkcm9wZG93biIsImNsYXNzTmFtZUF0dHJpYnV0ZSIsInRvTG93ZXJDYXNlIiwicGlja2VycyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJwaWNrZXIiLCJvcHRpb25zQ29udGFpbmVyIiwib3B0aW9ucyIsInBhcmVudEVsZW1lbnQiLCJjb250YWlucyIsIml0ZW0iLCJjb250ZW50Iiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImNvbnRlbnRMYWJlbHMiLCJqb2luIiwiaWNvbkxhYmVscyIsImxlbmd0aCIsImljb25MYWJlbCIsImljb25UaXRsZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsImtleUNvZGUiLCJjbGljayIsInJlbW92ZSIsImZvY3VzIiwiYWRkIiwidG9vbHRpcHMiLCJjb250YWluZXIiLCJ0b29sdGlwIiwiZW1iZWRVcmxzIiwiZW1iZWRVcmwiLCJwcmV2aWV3cyIsInByZXZpZXciLCJhY3Rpb25zIiwiYWxsQWN0aW9ucyIsImNvbmNhdCIsImFjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1F1aWxsL2FjY2Vzc2liaWxpdHlGaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9yRWFjaCwgaW5jbHVkZXMsIGlzUGxhaW5PYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgeyBRdWlsbCB9IGZyb20gJ3JlYWN0LXF1aWxsJ1xyXG5pbXBvcnQgeyBUQUJMRV9BQ1RJT04gfSBmcm9tICcuL1RhYmxlTW9kdWxlL2NvbnN0YW50cydcclxuXHJcbi8qKlxyXG4gKiBBcHBseSBhcmlhLWxhYmVscyB0byB0aGUgaWNvbnMgZnJvbSB0aGUgcXVpbGwgdGV4dCBlZGl0b3JcclxuICogSW1wb3J0cyB0aGUgaWNvbnMgZnJvbSBRdWlsbCwgcmVjdXJzaXZlbHkgZ28gdGhyb3VnaCBlYWNoIGljb24gYW5kIGdldCB0aGUgPHN2ZyAvPiBodG1sLlxyXG4gKiBUaGVuIGl0IHNldHMgYSA8bGFiZWwgLz4gYmV0d2VlbiB0aGUgPHN2ZyAvPlxyXG4gKiBVc2luZyBjc3MsIGl0IGhpZGVzIHRoZSBsYWJlbCBjb250ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IGljb25zIFRoZSBvYmplY3QgdGhhdCBpbmNsdWRlcyBhbGwgdGhlIGljb25zIGZyb20gUXVpbGxcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUFjY2Vzc2liaWxpdHlUb0ljb25zKGljb25zOiBhbnkpIHtcclxuXHRmb3JFYWNoKGljb25zLCAodmFsdWUsIGtleSkgPT4ge1xyXG5cdFx0Ly8gaWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgcmVjdXJzaXZlbHkgY2FsbCB0aGlzIGZ1bmN0aW9uXHJcblx0XHRpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcclxuXHRcdFx0YXBwbHlBY2Nlc3NpYmlsaXR5VG9JY29ucyh2YWx1ZSlcclxuXHRcdH1cclxuXHRcdC8vIGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZywgaS5lLCBcIjxzdmc+PC9zdmc+XCIsIHRoZW4gaXQgYWRkcyB0aGUgbGFiZWxcclxuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuXHRcdFx0Y29uc3QgcmVnZXggPSAvXiguKikgPFxcL3N2Zz4vZ1xyXG5cdFx0XHRjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWModmFsdWUpXHJcblx0XHRcdGlmICghbWF0Y2gpIHtcclxuXHRcdFx0XHRyZXR1cm5cclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgaWNvbk5hbWVcclxuXHRcdFx0aWYgKGtleSkge1xyXG5cdFx0XHRcdGljb25OYW1lID0ga2V5XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWNvbk5hbWUgPSAnbGVmdCdcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBsYWJlbCA9IGA8bGFiZWwgY2xhc3M9XCJoaWRkZW5cIiBhcmlhLWxhYmVsPVwiJHtpY29uTmFtZX1cIj4ke2ljb25OYW1lfTwvbGFiZWw+YFxyXG5cdFx0XHRpY29uc1trZXldID0gbWF0Y2hbMV0gKyBsYWJlbCArICc8L3N2Zz4nXHJcblx0XHR9XHJcblx0fSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEdyYWJzIHRoZSBET00gZnJvbSB0aGUgdG9vbGJhciByZWZlcmVuY2UgYW5kIGxvb3AgdGhyb3VnaCBlYWNoIGJ1dHRvbiwgcGlja2VyLCBhbmQgZHJvcGRvd25zIGFkZGluZyBhY2Nlc3NpYmlsaXR5IHZhbHVlc1xyXG4gKiBIZWxwIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9xdWlsbGpzL3F1aWxsL2lzc3Vlcy8xMTczXHJcbiAqXHJcbiAqIEBwYXJhbSB0b29sYmFyUmVmOiByZWZlcmVuY2UgdG8gdGhlIGRpdiBjb250YWluaW5nIG91ciBjdXN0b20gUXVpbGwgdG9vbGJhclxyXG4gKiBAcGFyYW0gZWRpdG9yOiByZWZlcmVuY2UgdG8gdGhlIFF1aWxsIGVkaXRvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5QWNjZXNzaWJpbGl0eUhhY2tzKHRvb2xiYXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD4sIGVkaXRvcjogUXVpbGwpIHtcclxuXHQvLyBHZXQgcmVmIHRvIHRoZSB0b29sYmFyLCBpdHMgbm90IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBxdWlsbCBhcGkgdWdoaFxyXG5cdGlmICghdG9vbGJhclJlZi5jdXJyZW50KSB7XHJcblx0XHRyZXR1cm5cclxuXHR9XHJcblx0Y29uc3QgdG9vbGJhciA9IHRvb2xiYXJSZWYuY3VycmVudFxyXG5cdC8vIGFwcGx5IGFyaWEgbGFiZWxzIHRvIGJhc2UgYnV0dG9uc1xyXG5cdGNvbnN0IGJ1dHRvbnMgPSB0b29sYmFyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVxyXG5cclxuXHRmb3IgKGNvbnN0IGJ1dHRvbiBvZiBBcnJheS5mcm9tKGJ1dHRvbnMpKSB7XHJcblx0XHRjb25zdCBjbGFzc05hbWUgPSBidXR0b24uY2xhc3NMaXN0LnZhbHVlXHJcblx0XHRcdC5zcGxpdCgnICcpXHJcblx0XHRcdC5maWx0ZXIodiA9PiB2LmluY2x1ZGVzKCdxbC0nKSlcclxuXHRcdFx0Lm1hcCh2ID0+IHYucmVwbGFjZSgncWwtJywgJycpKVswXVxyXG5cdFx0c3dpdGNoIChjbGFzc05hbWUpIHtcclxuXHRcdFx0Y2FzZSAnYm9sZCc6XHJcblx0XHRcdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdUb2dnbGUgYm9sZCB0ZXh0JylcclxuXHRcdFx0XHRicmVha1xyXG5cdFx0XHRjYXNlICdpdGFsaWMnOlxyXG5cdFx0XHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnVG9nZ2xlIGl0YWxpYyB0ZXh0JylcclxuXHRcdFx0XHRicmVha1xyXG5cdFx0XHRjYXNlICd1bmRlcmxpbmUnOlxyXG5cdFx0XHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnVG9nZ2xlIHVuZGVybGluZSB0ZXh0JylcclxuXHRcdFx0XHRicmVha1xyXG5cdFx0XHRjYXNlICdzY3JpcHQnOlxyXG5cdFx0XHRcdGlmIChidXR0b24udmFsdWUgPT09ICdzdWInKSB7XHJcblx0XHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ1RvZ2dsZSBzdWJzY3JpcHQnKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYnV0dG9uLnZhbHVlID09PSAnc3VwZXInKSB7XHJcblx0XHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ1RvZ2dsZSBzdXBlcnNjcmlwdCcpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrXHJcblx0XHRcdGNhc2UgJ2Jsb2NrcXVvdGUnOlxyXG5cdFx0XHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnVG9nZ2xlIGJsb2NrcXVvdGUgdGV4dCcpXHJcblx0XHRcdFx0YnJlYWtcclxuXHRcdFx0Y2FzZSAnbGlzdCc6XHJcblx0XHRcdFx0aWYgKGJ1dHRvbi52YWx1ZSA9PT0gJ29yZGVyZWQnKSB7XHJcblx0XHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ1RvZ2dsZSBvcmRlcmVkIGxpc3QnKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYnV0dG9uLnZhbHVlID09PSAnYnVsbGV0Jykge1xyXG5cdFx0XHRcdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdUb2dnbGUgYnVsbGV0ZWQgbGlzdCcpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrXHJcblx0XHRcdGNhc2UgJ2hlYWRlcic6XHJcblx0XHRcdFx0aWYgKGJ1dHRvbi52YWx1ZSA9PT0gJzEnKSB7XHJcblx0XHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ1RvZ2dsZSBoZWFkaW5nIDEnKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYnV0dG9uLnZhbHVlID09PSAnMicpIHtcclxuXHRcdFx0XHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnVG9nZ2xlIGhlYWRpbmcgMicpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrXHJcblx0XHRcdGNhc2UgJ3N0cmlrZSc6XHJcblx0XHRcdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdUb2dnbGUgc3RyaWtlIHRleHQnKVxyXG5cdFx0XHRcdGJyZWFrXHJcblx0XHRcdGNhc2UgJ2NvZGUtYmxvY2snOlxyXG5cdFx0XHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnVG9nZ2xlIGNvZGUgYmxvY2sgdGV4dCcpXHJcblx0XHRcdFx0YnJlYWtcclxuXHRcdFx0Y2FzZSAnaW5kZW50JzpcclxuXHRcdFx0XHRpZiAoYnV0dG9uLnZhbHVlID09PSAnLTEnKSB7XHJcblx0XHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0luZGVudCBsZWZ0JylcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGJ1dHRvbi52YWx1ZSA9PT0gJysxJykge1xyXG5cdFx0XHRcdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdJbmRlbnQgcmlnaHQnKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRicmVha1xyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0luc2VydCBsaW5rJylcclxuXHRcdFx0XHRicmVha1xyXG5cdFx0XHRjYXNlICdpbWFnZSc6XHJcblx0XHRcdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdJbnNlcnQgaW1hZ2UnKVxyXG5cdFx0XHRcdGJyZWFrXHJcblx0XHRcdGNhc2UgJ3ZpZGVvJzpcclxuXHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0luc2VydCB2aWRlbycpXHJcblx0XHRcdFx0YnJlYWtcclxuXHRcdFx0Y2FzZSAnZm9ybXVsYSc6XHJcblx0XHRcdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdJbnNlcnQgZm9ybXVsYScpXHJcblx0XHRcdFx0YnJlYWtcclxuXHRcdFx0Y2FzZSAnY2xlYW4nOlxyXG5cdFx0XHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnQ2xlYXIgZm9ybWF0dGluZycpXHJcblx0XHRcdFx0YnJlYWtcclxuXHRcdFx0Y2FzZSAndGFibGUnOlxyXG5cdFx0XHRcdHN3aXRjaCAoYnV0dG9uLnZhbHVlKSB7XHJcblx0XHRcdFx0XHRjYXNlIFRBQkxFX0FDVElPTi5JTlNFUlRfUk9XOlxyXG5cdFx0XHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0luc2VydCByb3cnKVxyXG5cdFx0XHRcdFx0XHRicmVha1xyXG5cdFx0XHRcdFx0Y2FzZSBUQUJMRV9BQ1RJT04uREVMRVRFX1JPVzpcclxuXHRcdFx0XHRcdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdEZWxldGUgcm93JylcclxuXHRcdFx0XHRcdFx0YnJlYWtcclxuXHRcdFx0XHRcdGNhc2UgVEFCTEVfQUNUSU9OLklOU0VSVF9DT0w6XHJcblx0XHRcdFx0XHRcdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnSW5zZXJ0IGNvbHVtbicpXHJcblx0XHRcdFx0XHRcdGJyZWFrXHJcblx0XHRcdFx0XHRjYXNlIFRBQkxFX0FDVElPTi5ERUxFVEVfQ09MOlxyXG5cdFx0XHRcdFx0XHRidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0RlbGV0ZSBjb2x1bW4nKVxyXG5cdFx0XHRcdFx0XHRicmVha1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRicmVha1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdGJyZWFrXHJcblx0XHR9XHJcblx0XHRjb25zdCBhcmlhTGFiZWwgPSBidXR0b24uZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJylcclxuXHRcdGlmIChhcmlhTGFiZWwpIHtcclxuXHRcdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSgndGl0bGUnLCBhcmlhTGFiZWwpXHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUHV0IHRpdGxlIHRhZ3MgdG8gdGhlIGRyb3Bkb3duc1xyXG5cdFx0Y29uc3QgZHJvcGRvd25zID0gdG9vbGJhci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0JylcclxuXHRcdGZvciAoY29uc3QgZHJvcGRvd24gb2YgQXJyYXkuZnJvbShkcm9wZG93bnMpKSB7XHJcblx0XHRcdGNvbnN0IGNsYXNzTmFtZUF0dHJpYnV0ZSA9IGRyb3Bkb3duLmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxyXG5cdFx0XHRpZiAoY2xhc3NOYW1lQXR0cmlidXRlKSB7XHJcblx0XHRcdFx0ZHJvcGRvd24uc2V0QXR0cmlidXRlKCd0aXRsZScsIGNsYXNzTmFtZUF0dHJpYnV0ZS50b0xvd2VyQ2FzZSgpKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTWFrZSBwaWNrZXJzIHdvcmsgd2l0aCBrZXlib2FyZCBhbmQgYXBwbHkgYXJpYSBsYWJlbHNcclxuXHRcdGNvbnN0IHBpY2tlcnMgPSB0b29sYmFyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3FsLXBpY2tlcicpXHJcblx0XHRmb3IgKGNvbnN0IHBpY2tlciBvZiBBcnJheS5mcm9tKHBpY2tlcnMpKSB7XHJcblx0XHRcdGNvbnN0IGxhYmVsID0gcGlja2VyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3FsLXBpY2tlci1sYWJlbCcpWzBdXHJcblx0XHRcdGNvbnN0IG9wdGlvbnNDb250YWluZXIgPSBwaWNrZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncWwtcGlja2VyLW9wdGlvbnMnKVswXVxyXG5cdFx0XHRjb25zdCBvcHRpb25zID0gb3B0aW9uc0NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxbC1waWNrZXItaXRlbScpXHJcblx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgncm9sZScsICdidXR0b24nKVxyXG5cdFx0XHRsYWJlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGFzcG9wdXAnLCAndHJ1ZScpXHJcblx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpXHJcblx0XHRcdGlmICghIWxhYmVsLnBhcmVudEVsZW1lbnQgJiYgbGFiZWwucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3FsLWZvbnQnKSkge1xyXG5cdFx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgndGl0bGUnLCAnRm9udCBmYWNlJylcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoISFsYWJlbC5wYXJlbnRFbGVtZW50ICYmIGxhYmVsLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdxbC1zaXplJykpIHtcclxuXHRcdFx0XHRsYWJlbC5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgJ0ZvbnQgc2l6ZScpXHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCEhbGFiZWwucGFyZW50RWxlbWVudCAmJiBsYWJlbC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygncWwtYWxpZ24nKSkge1xyXG5cdFx0XHRcdGxhYmVsLnNldEF0dHJpYnV0ZSgndGl0bGUnLCAnQWxpZ25tZW50JylcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoISFsYWJlbC5wYXJlbnRFbGVtZW50ICYmIGxhYmVsLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdxbC10YWJsZScpKSB7XHJcblx0XHRcdFx0bGFiZWwuc2V0QXR0cmlidXRlKCd0aXRsZScsICdJbnNlcnQgdGFibGUnKVxyXG5cdFx0XHR9XHJcblx0XHRcdG9wdGlvbnNDb250YWluZXIuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuXHRcdFx0b3B0aW9uc0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnc3VibWVudScpXHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgQXJyYXkuZnJvbShvcHRpb25zKSkge1xyXG5cdFx0XHRcdGl0ZW0uc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJylcclxuXHRcdFx0XHRpdGVtLnNldEF0dHJpYnV0ZSgncm9sZScsICdidXR0b24nKVxyXG5cclxuXHRcdFx0XHRpZiAoIWluY2x1ZGVzKHBpY2tlci5jbGFzc0xpc3QsICdxbC1hbGlnbicpKSB7XHJcblx0XHRcdFx0XHQvLyBSZWFkIHRoZSBjc3MgJ2NvbnRlbnQnIHZhbHVlcyBhbmQgZ2VuZXJhdGUgYXJpYSBsYWJlbHMgZm9yIGZvbnQgZmFjZS9zaXplXHJcblx0XHRcdFx0XHRjb25zdCBjb250ZW50ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaXRlbSwgJzpiZWZvcmUnKS5jb250ZW50XHJcblx0XHRcdFx0XHRpZiAoY29udGVudCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBjb250ZW50TGFiZWxzID0gY29udGVudC5zcGxpdCgnXCInKS5qb2luKCcnKVxyXG5cdFx0XHRcdFx0XHRpdGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGNvbnRlbnRMYWJlbHMpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIEFkZCB0aGUgdGl0bGUgbGFiZWxzIHRvIHRoZSBqdXN0aWZpY2F0aW9uIGljb25zXHJcblx0XHRcdFx0XHRjb25zdCBpY29uTGFiZWxzID0gaXRlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGFiZWwnKVxyXG5cdFx0XHRcdFx0aWYgKGljb25MYWJlbHMubGVuZ3RoID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGljb25MYWJlbCA9IGljb25MYWJlbHNbMF0uZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJylcclxuXHRcdFx0XHRcdFx0aWYgKGljb25MYWJlbCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGljb25UaXRsZSA9IGljb25MYWJlbC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGljb25MYWJlbC5zbGljZSgxKVxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0uc2V0QXR0cmlidXRlKCd0aXRsZScsIGljb25UaXRsZSlcclxuXHRcdFx0XHRcdFx0XHRpdGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGljb25MYWJlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aXRlbS5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIChlOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdGlmIChlLmtleUNvZGUgPT09IDEzKSB7XHJcblx0XHRcdFx0XHRcdDsoaXRlbSBhcyBIVE1MRWxlbWVudCkuY2xpY2soKVxyXG5cdFx0XHRcdFx0XHRvcHRpb25zQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXHJcblx0XHRcdFx0XHRcdHBpY2tlci5jbGFzc0xpc3QucmVtb3ZlKCdxbC1leHBhbmRlZCcpXHJcblx0XHRcdFx0XHRcdGVkaXRvci5mb2N1cygpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bGFiZWwuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAoZTogYW55KSA9PiB7XHJcblx0XHRcdFx0aWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcclxuXHRcdFx0XHRcdDsobGFiZWwgYXMgSFRNTEVsZW1lbnQpLmNsaWNrKClcclxuXHRcdFx0XHRcdHBpY2tlci5jbGFzc0xpc3QuYWRkKCdxbC1leHBhbmRlZCcpXHJcblx0XHRcdFx0XHRvcHRpb25zQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbnN0IHRvb2x0aXBzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+ID0gKGVkaXRvciBhcyBhbnkpLmNvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxbC10b29sdGlwJylcclxuXHRmb3IgKGNvbnN0IHRvb2x0aXAgb2YgQXJyYXkuZnJvbSh0b29sdGlwcykpIHtcclxuXHRcdHRvb2x0aXAuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpXHJcblx0XHRjb25zdCBlbWJlZFVybHMgPSB0b29sdGlwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpXHJcblx0XHRmb3IgKGNvbnN0IGVtYmVkVXJsIG9mIEFycmF5LmZyb20oZW1iZWRVcmxzKSkge1xyXG5cdFx0XHRlbWJlZFVybC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnRW1iZWQgVXJsJylcclxuXHRcdH1cclxuXHRcdGNvbnN0IHByZXZpZXdzID0gdG9vbHRpcC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxbC1wcmV2aWV3JylcclxuXHRcdGZvciAoY29uc3QgcHJldmlldyBvZiBBcnJheS5mcm9tKHByZXZpZXdzKSkge1xyXG5cdFx0XHRwcmV2aWV3LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdQcmV2aWV3JylcclxuXHRcdFx0cHJldmlldy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKVxyXG5cdFx0fVxyXG5cdFx0Y29uc3QgYWN0aW9ucyA9IHRvb2x0aXAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncWwtYWN0aW9uJylcclxuXHRcdGNvbnN0IHJlbW92ZSA9IHRvb2x0aXAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncWwtcmVtb3ZlJylcclxuXHRcdGNvbnN0IGFsbEFjdGlvbnMgPSBBcnJheS5mcm9tKGFjdGlvbnMpLmNvbmNhdChBcnJheS5mcm9tKHJlbW92ZSkpXHJcblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhbGxBY3Rpb25zKSB7XHJcblx0XHRcdGFjdGlvbi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKVxyXG5cdFx0XHRhY3Rpb24uc2V0QXR0cmlidXRlKCdyb2xlJywgJ2J1dHRvbicpXHJcblx0XHRcdGFjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIChlOiBhbnkpID0+IHtcclxuXHRcdFx0XHRpZiAoZS5rZXlDb2RlID09PSAxMykge1xyXG5cdFx0XHRcdFx0OyhhY3Rpb24gYXMgSFRNTEVsZW1lbnQpLmNsaWNrKClcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRSx5QkFBeUJBLENBQUNDLEtBQVUsRUFBRTtFQUNyRCxJQUFBQyxlQUFPLEVBQUNELEtBQUssRUFBRSxDQUFDRSxLQUFLLEVBQUVDLEdBQUcsS0FBSztJQUM5QjtJQUNBLElBQUksSUFBQUMscUJBQWEsRUFBQ0YsS0FBSyxDQUFDLEVBQUU7TUFDekJILHlCQUF5QixDQUFDRyxLQUFLLENBQUM7SUFDakM7SUFDQTtJQUNBLElBQUksSUFBQUcsZ0JBQVEsRUFBQ0gsS0FBSyxDQUFDLEVBQUU7TUFDcEIsTUFBTUksS0FBSyxHQUFHLGdCQUFnQjtNQUM5QixNQUFNQyxLQUFLLEdBQUdELEtBQUssQ0FBQ0UsSUFBSSxDQUFDTixLQUFLLENBQUM7TUFDL0IsSUFBSSxDQUFDSyxLQUFLLEVBQUU7UUFDWDtNQUNEO01BQ0EsSUFBSUUsUUFBUTtNQUNaLElBQUlOLEdBQUcsRUFBRTtRQUNSTSxRQUFRLEdBQUdOLEdBQUc7TUFDZixDQUFDLE1BQU07UUFDTk0sUUFBUSxHQUFHLE1BQU07TUFDbEI7TUFDQSxNQUFNQyxLQUFLLEdBQUcscUNBQXFDRCxRQUFRLEtBQUtBLFFBQVEsVUFBVTtNQUNsRlQsS0FBSyxDQUFDRyxHQUFHLENBQUMsR0FBR0ksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHRyxLQUFLLEdBQUcsUUFBUTtJQUN6QztFQUNELENBQUMsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsdUJBQXVCQSxDQUFDQyxVQUEyQyxFQUFFQyxNQUFhLEVBQUU7RUFDbkc7RUFDQSxJQUFJLENBQUNELFVBQVUsQ0FBQ0UsT0FBTyxFQUFFO0lBQ3hCO0VBQ0Q7RUFDQSxNQUFNQyxPQUFPLEdBQUdILFVBQVUsQ0FBQ0UsT0FBTztFQUNsQztFQUNBLE1BQU1FLE9BQU8sR0FBR0QsT0FBTyxDQUFDRSxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7RUFFdEQsS0FBSyxNQUFNQyxNQUFNLElBQUlDLEtBQUssQ0FBQ0MsSUFBSSxDQUFDSixPQUFPLENBQUMsRUFBRTtJQUN6QyxNQUFNSyxTQUFTLEdBQUdILE1BQU0sQ0FBQ0ksU0FBUyxDQUFDcEIsS0FBSyxDQUN0Q3FCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FDVkMsTUFBTSxDQUFDQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzlCQyxHQUFHLENBQUNGLENBQUMsSUFBSUEsQ0FBQyxDQUFDRyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLFFBQVFQLFNBQVM7TUFDaEIsS0FBSyxNQUFNO1FBQ1ZILE1BQU0sQ0FBQ1csWUFBWSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQztRQUNyRDtNQUNELEtBQUssUUFBUTtRQUNaWCxNQUFNLENBQUNXLFlBQVksQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLENBQUM7UUFDdkQ7TUFDRCxLQUFLLFdBQVc7UUFDZlgsTUFBTSxDQUFDVyxZQUFZLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDO1FBQzFEO01BQ0QsS0FBSyxRQUFRO1FBQ1osSUFBSVgsTUFBTSxDQUFDaEIsS0FBSyxLQUFLLEtBQUssRUFBRTtVQUMzQmdCLE1BQU0sQ0FBQ1csWUFBWSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQztRQUN0RDtRQUNBLElBQUlYLE1BQU0sQ0FBQ2hCLEtBQUssS0FBSyxPQUFPLEVBQUU7VUFDN0JnQixNQUFNLENBQUNXLFlBQVksQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLENBQUM7UUFDeEQ7UUFDQTtNQUNELEtBQUssWUFBWTtRQUNoQlgsTUFBTSxDQUFDVyxZQUFZLENBQUMsWUFBWSxFQUFFLHdCQUF3QixDQUFDO1FBQzNEO01BQ0QsS0FBSyxNQUFNO1FBQ1YsSUFBSVgsTUFBTSxDQUFDaEIsS0FBSyxLQUFLLFNBQVMsRUFBRTtVQUMvQmdCLE1BQU0sQ0FBQ1csWUFBWSxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQztRQUN6RDtRQUNBLElBQUlYLE1BQU0sQ0FBQ2hCLEtBQUssS0FBSyxRQUFRLEVBQUU7VUFDOUJnQixNQUFNLENBQUNXLFlBQVksQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLENBQUM7UUFDMUQ7UUFDQTtNQUNELEtBQUssUUFBUTtRQUNaLElBQUlYLE1BQU0sQ0FBQ2hCLEtBQUssS0FBSyxHQUFHLEVBQUU7VUFDekJnQixNQUFNLENBQUNXLFlBQVksQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUM7UUFDdEQ7UUFDQSxJQUFJWCxNQUFNLENBQUNoQixLQUFLLEtBQUssR0FBRyxFQUFFO1VBQ3pCZ0IsTUFBTSxDQUFDVyxZQUFZLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDO1FBQ3REO1FBQ0E7TUFDRCxLQUFLLFFBQVE7UUFDWlgsTUFBTSxDQUFDVyxZQUFZLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDO1FBQ3ZEO01BQ0QsS0FBSyxZQUFZO1FBQ2hCWCxNQUFNLENBQUNXLFlBQVksQ0FBQyxZQUFZLEVBQUUsd0JBQXdCLENBQUM7UUFDM0Q7TUFDRCxLQUFLLFFBQVE7UUFDWixJQUFJWCxNQUFNLENBQUNoQixLQUFLLEtBQUssSUFBSSxFQUFFO1VBQzFCZ0IsTUFBTSxDQUFDVyxZQUFZLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztRQUNqRDtRQUNBLElBQUlYLE1BQU0sQ0FBQ2hCLEtBQUssS0FBSyxJQUFJLEVBQUU7VUFDMUJnQixNQUFNLENBQUNXLFlBQVksQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDO1FBQ2xEO1FBQ0E7TUFDRCxLQUFLLE1BQU07UUFDVlgsTUFBTSxDQUFDVyxZQUFZLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztRQUNoRDtNQUNELEtBQUssT0FBTztRQUNYWCxNQUFNLENBQUNXLFlBQVksQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDO1FBQ2pEO01BQ0QsS0FBSyxPQUFPO1FBQ1hYLE1BQU0sQ0FBQ1csWUFBWSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUM7UUFDakQ7TUFDRCxLQUFLLFNBQVM7UUFDYlgsTUFBTSxDQUFDVyxZQUFZLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDO1FBQ25EO01BQ0QsS0FBSyxPQUFPO1FBQ1hYLE1BQU0sQ0FBQ1csWUFBWSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQztRQUNyRDtNQUNELEtBQUssT0FBTztRQUNYLFFBQVFYLE1BQU0sQ0FBQ2hCLEtBQUs7VUFDbkIsS0FBSzRCLHVCQUFZLENBQUNDLFVBQVU7WUFDM0JiLE1BQU0sQ0FBQ1csWUFBWSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7WUFDL0M7VUFDRCxLQUFLQyx1QkFBWSxDQUFDRSxVQUFVO1lBQzNCZCxNQUFNLENBQUNXLFlBQVksQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDO1lBQy9DO1VBQ0QsS0FBS0MsdUJBQVksQ0FBQ0csVUFBVTtZQUMzQmYsTUFBTSxDQUFDVyxZQUFZLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQztZQUNsRDtVQUNELEtBQUtDLHVCQUFZLENBQUNJLFVBQVU7WUFDM0JoQixNQUFNLENBQUNXLFlBQVksQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDO1lBQ2xEO1FBQ0Y7UUFDQTtNQUNEO1FBQ0M7SUFDRjtJQUNBLE1BQU1NLFNBQVMsR0FBR2pCLE1BQU0sQ0FBQ2tCLFlBQVksQ0FBQyxZQUFZLENBQUM7SUFDbkQsSUFBSUQsU0FBUyxFQUFFO01BQ2RqQixNQUFNLENBQUNXLFlBQVksQ0FBQyxPQUFPLEVBQUVNLFNBQVMsQ0FBQztJQUN4Qzs7SUFFQTtJQUNBLE1BQU1FLFNBQVMsR0FBR3RCLE9BQU8sQ0FBQ0Usb0JBQW9CLENBQUMsUUFBUSxDQUFDO0lBQ3hELEtBQUssTUFBTXFCLFFBQVEsSUFBSW5CLEtBQUssQ0FBQ0MsSUFBSSxDQUFDaUIsU0FBUyxDQUFDLEVBQUU7TUFDN0MsTUFBTUUsa0JBQWtCLEdBQUdELFFBQVEsQ0FBQ0YsWUFBWSxDQUFDLE9BQU8sQ0FBQztNQUN6RCxJQUFJRyxrQkFBa0IsRUFBRTtRQUN2QkQsUUFBUSxDQUFDVCxZQUFZLENBQUMsT0FBTyxFQUFFVSxrQkFBa0IsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQztNQUNqRTtJQUNEOztJQUVBO0lBQ0EsTUFBTUMsT0FBTyxHQUFHMUIsT0FBTyxDQUFDMkIsc0JBQXNCLENBQUMsV0FBVyxDQUFDO0lBQzNELEtBQUssTUFBTUMsTUFBTSxJQUFJeEIsS0FBSyxDQUFDQyxJQUFJLENBQUNxQixPQUFPLENBQUMsRUFBRTtNQUN6QyxNQUFNL0IsS0FBSyxHQUFHaUMsTUFBTSxDQUFDRCxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNqRSxNQUFNRSxnQkFBZ0IsR0FBR0QsTUFBTSxDQUFDRCxzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM5RSxNQUFNRyxPQUFPLEdBQUdELGdCQUFnQixDQUFDRixzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQztNQUN6RWhDLEtBQUssQ0FBQ21CLFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO01BQ3BDbkIsS0FBSyxDQUFDbUIsWUFBWSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUM7TUFDM0NuQixLQUFLLENBQUNtQixZQUFZLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQztNQUNuQyxJQUFJLENBQUMsQ0FBQ25CLEtBQUssQ0FBQ29DLGFBQWEsSUFBSXBDLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ3hCLFNBQVMsQ0FBQ3lCLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUMvRXJDLEtBQUssQ0FBQ21CLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDO01BQ3pDO01BQ0EsSUFBSSxDQUFDLENBQUNuQixLQUFLLENBQUNvQyxhQUFhLElBQUlwQyxLQUFLLENBQUNvQyxhQUFhLENBQUN4QixTQUFTLENBQUN5QixRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDL0VyQyxLQUFLLENBQUNtQixZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQztNQUN6QztNQUNBLElBQUksQ0FBQyxDQUFDbkIsS0FBSyxDQUFDb0MsYUFBYSxJQUFJcEMsS0FBSyxDQUFDb0MsYUFBYSxDQUFDeEIsU0FBUyxDQUFDeUIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ2hGckMsS0FBSyxDQUFDbUIsWUFBWSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7TUFDekM7TUFDQSxJQUFJLENBQUMsQ0FBQ25CLEtBQUssQ0FBQ29DLGFBQWEsSUFBSXBDLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ3hCLFNBQVMsQ0FBQ3lCLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNoRnJDLEtBQUssQ0FBQ21CLFlBQVksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDO01BQzVDO01BQ0FlLGdCQUFnQixDQUFDZixZQUFZLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztNQUNwRGUsZ0JBQWdCLENBQUNmLFlBQVksQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDO01BRXRELEtBQUssTUFBTW1CLElBQUksSUFBSTdCLEtBQUssQ0FBQ0MsSUFBSSxDQUFDeUIsT0FBTyxDQUFDLEVBQUU7UUFDdkNHLElBQUksQ0FBQ25CLFlBQVksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDO1FBQ2xDbUIsSUFBSSxDQUFDbkIsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7UUFFbkMsSUFBSSxDQUFDLElBQUFILGdCQUFRLEVBQUNpQixNQUFNLENBQUNyQixTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7VUFDNUM7VUFDQSxNQUFNMkIsT0FBTyxHQUFHQyxNQUFNLENBQUNDLGdCQUFnQixDQUFDSCxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUNDLE9BQU87VUFDaEUsSUFBSUEsT0FBTyxFQUFFO1lBQ1osTUFBTUcsYUFBYSxHQUFHSCxPQUFPLENBQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM4QixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pETCxJQUFJLENBQUNuQixZQUFZLENBQUMsWUFBWSxFQUFFdUIsYUFBYSxDQUFDO1VBQy9DO1FBQ0QsQ0FBQyxNQUFNO1VBQ047VUFDQSxNQUFNRSxVQUFVLEdBQUdOLElBQUksQ0FBQy9CLG9CQUFvQixDQUFDLE9BQU8sQ0FBQztVQUNyRCxJQUFJcUMsVUFBVSxDQUFDQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE1BQU1DLFNBQVMsR0FBR0YsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDbEIsWUFBWSxDQUFDLFlBQVksQ0FBQztZQUMxRCxJQUFJb0IsU0FBUyxFQUFFO2NBQ2QsTUFBTUMsU0FBUyxHQUFHRCxTQUFTLENBQUNFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsR0FBR0gsU0FBUyxDQUFDSSxLQUFLLENBQUMsQ0FBQyxDQUFDO2NBQ3hFWixJQUFJLENBQUNuQixZQUFZLENBQUMsT0FBTyxFQUFFNEIsU0FBUyxDQUFDO2NBQ3JDVCxJQUFJLENBQUNuQixZQUFZLENBQUMsWUFBWSxFQUFFMkIsU0FBUyxDQUFDO1lBQzNDO1VBQ0Q7UUFDRDtRQUVBUixJQUFJLENBQUNhLGdCQUFnQixDQUFDLE9BQU8sRUFBR0MsQ0FBTSxJQUFLO1VBQzFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBTyxLQUFLLEVBQUUsRUFBRTtZQUNyQjtZQUFFZixJQUFJLENBQWlCZ0IsS0FBSyxDQUFDLENBQUM7WUFDOUJwQixnQkFBZ0IsQ0FBQ2YsWUFBWSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7WUFDcERjLE1BQU0sQ0FBQ3JCLFNBQVMsQ0FBQzJDLE1BQU0sQ0FBQyxhQUFhLENBQUM7WUFDdENwRCxNQUFNLENBQUNxRCxLQUFLLENBQUMsQ0FBQztVQUNmO1FBQ0QsQ0FBQyxDQUFDO01BQ0g7TUFFQXhELEtBQUssQ0FBQ21ELGdCQUFnQixDQUFDLE9BQU8sRUFBR0MsQ0FBTSxJQUFLO1FBQzNDLElBQUlBLENBQUMsQ0FBQ0MsT0FBTyxLQUFLLEVBQUUsRUFBRTtVQUNyQjtVQUFFckQsS0FBSyxDQUFpQnNELEtBQUssQ0FBQyxDQUFDO1VBQy9CckIsTUFBTSxDQUFDckIsU0FBUyxDQUFDNkMsR0FBRyxDQUFDLGFBQWEsQ0FBQztVQUNuQ3ZCLGdCQUFnQixDQUFDZixZQUFZLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQztRQUN0RDtNQUNELENBQUMsQ0FBQztJQUNIO0VBQ0Q7RUFFQSxNQUFNdUMsUUFBbUMsR0FBSXZELE1BQU0sQ0FBU3dELFNBQVMsQ0FBQzNCLHNCQUFzQixDQUFDLFlBQVksQ0FBQztFQUMxRyxLQUFLLE1BQU00QixPQUFPLElBQUluRCxLQUFLLENBQUNDLElBQUksQ0FBQ2dELFFBQVEsQ0FBQyxFQUFFO0lBQzNDRSxPQUFPLENBQUN6QyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztJQUN0QyxNQUFNMEMsU0FBUyxHQUFHRCxPQUFPLENBQUNyRCxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7SUFDdkQsS0FBSyxNQUFNdUQsUUFBUSxJQUFJckQsS0FBSyxDQUFDQyxJQUFJLENBQUNtRCxTQUFTLENBQUMsRUFBRTtNQUM3Q0MsUUFBUSxDQUFDM0MsWUFBWSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7SUFDakQ7SUFDQSxNQUFNNEMsUUFBUSxHQUFHSCxPQUFPLENBQUM1QixzQkFBc0IsQ0FBQyxZQUFZLENBQUM7SUFDN0QsS0FBSyxNQUFNZ0MsT0FBTyxJQUFJdkQsS0FBSyxDQUFDQyxJQUFJLENBQUNxRCxRQUFRLENBQUMsRUFBRTtNQUMzQ0MsT0FBTyxDQUFDN0MsWUFBWSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUM7TUFDN0M2QyxPQUFPLENBQUM3QyxZQUFZLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQztJQUN0QztJQUNBLE1BQU04QyxPQUFPLEdBQUdMLE9BQU8sQ0FBQzVCLHNCQUFzQixDQUFDLFdBQVcsQ0FBQztJQUMzRCxNQUFNdUIsTUFBTSxHQUFHSyxPQUFPLENBQUM1QixzQkFBc0IsQ0FBQyxXQUFXLENBQUM7SUFDMUQsTUFBTWtDLFVBQVUsR0FBR3pELEtBQUssQ0FBQ0MsSUFBSSxDQUFDdUQsT0FBTyxDQUFDLENBQUNFLE1BQU0sQ0FBQzFELEtBQUssQ0FBQ0MsSUFBSSxDQUFDNkMsTUFBTSxDQUFDLENBQUM7SUFDakUsS0FBSyxNQUFNYSxNQUFNLElBQUlGLFVBQVUsRUFBRTtNQUNoQ0UsTUFBTSxDQUFDakQsWUFBWSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUM7TUFDcENpRCxNQUFNLENBQUNqRCxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztNQUNyQ2lELE1BQU0sQ0FBQ2pCLGdCQUFnQixDQUFDLE9BQU8sRUFBR0MsQ0FBTSxJQUFLO1FBQzVDLElBQUlBLENBQUMsQ0FBQ0MsT0FBTyxLQUFLLEVBQUUsRUFBRTtVQUNyQjtVQUFFZSxNQUFNLENBQWlCZCxLQUFLLENBQUMsQ0FBQztRQUNqQztNQUNELENBQUMsQ0FBQztJQUNIO0VBQ0Q7QUFDRCIsImlnbm9yZUxpc3QiOltdfQ==
267
+ exports.applyAccessibilityHacks = applyAccessibilityHacks;