@researchdatabox/redbox-core 0.0.1-beta.9228 → 0.0.1-beta.9474

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 (347) hide show
  1. package/dist/CoreController.d.ts +4 -0
  2. package/dist/CoreController.d.ts.map +1 -1
  3. package/dist/CoreController.js +33 -1
  4. package/dist/DatastreamService.d.ts +5 -2
  5. package/dist/DatastreamService.d.ts.map +1 -1
  6. package/dist/QueueService.d.ts +1 -1
  7. package/dist/QueueService.d.ts.map +1 -1
  8. package/dist/RecordsService.d.ts +38 -2
  9. package/dist/RecordsService.d.ts.map +1 -1
  10. package/dist/StorageService.d.ts +2 -1
  11. package/dist/StorageService.d.ts.map +1 -1
  12. package/dist/api-routes/apib.d.ts +7 -0
  13. package/dist/api-routes/apib.d.ts.map +1 -0
  14. package/dist/api-routes/apib.js +43 -0
  15. package/dist/api-routes/define.d.ts +4 -0
  16. package/dist/api-routes/define.d.ts.map +1 -0
  17. package/dist/api-routes/define.js +29 -0
  18. package/dist/api-routes/groups/admin.d.ts +6 -0
  19. package/dist/api-routes/groups/admin.d.ts.map +1 -0
  20. package/dist/api-routes/groups/admin.js +53 -0
  21. package/dist/api-routes/groups/appconfig.d.ts +4 -0
  22. package/dist/api-routes/groups/appconfig.d.ts.map +1 -0
  23. package/dist/api-routes/groups/appconfig.js +33 -0
  24. package/dist/api-routes/groups/branding.d.ts +8 -0
  25. package/dist/api-routes/groups/branding.d.ts.map +1 -0
  26. package/dist/api-routes/groups/branding.js +61 -0
  27. package/dist/api-routes/groups/dashboard-config.d.ts +11 -0
  28. package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -0
  29. package/dist/api-routes/groups/dashboard-config.js +90 -0
  30. package/dist/api-routes/groups/export.d.ts +3 -0
  31. package/dist/api-routes/groups/export.d.ts.map +1 -0
  32. package/dist/api-routes/groups/export.js +30 -0
  33. package/dist/api-routes/groups/forms.d.ts +4 -0
  34. package/dist/api-routes/groups/forms.d.ts.map +1 -0
  35. package/dist/api-routes/groups/forms.js +29 -0
  36. package/dist/api-routes/groups/integration-audit.d.ts +3 -0
  37. package/dist/api-routes/groups/integration-audit.d.ts.map +1 -0
  38. package/dist/api-routes/groups/integration-audit.js +35 -0
  39. package/dist/api-routes/groups/notifications.d.ts +3 -0
  40. package/dist/api-routes/groups/notifications.d.ts.map +1 -0
  41. package/dist/api-routes/groups/notifications.js +20 -0
  42. package/dist/api-routes/groups/records.d.ts +28 -0
  43. package/dist/api-routes/groups/records.d.ts.map +1 -0
  44. package/dist/api-routes/groups/records.js +349 -0
  45. package/dist/api-routes/groups/recordtypes.d.ts +4 -0
  46. package/dist/api-routes/groups/recordtypes.d.ts.map +1 -0
  47. package/dist/api-routes/groups/recordtypes.js +27 -0
  48. package/dist/api-routes/groups/reports.d.ts +3 -0
  49. package/dist/api-routes/groups/reports.d.ts.map +1 -0
  50. package/dist/api-routes/groups/reports.js +20 -0
  51. package/dist/api-routes/groups/search-query.d.ts +4 -0
  52. package/dist/api-routes/groups/search-query.d.ts.map +1 -0
  53. package/dist/api-routes/groups/search-query.js +51 -0
  54. package/dist/api-routes/groups/search.d.ts +6 -0
  55. package/dist/api-routes/groups/search.d.ts.map +1 -0
  56. package/dist/api-routes/groups/search.js +31 -0
  57. package/dist/api-routes/groups/translation.d.ts +8 -0
  58. package/dist/api-routes/groups/translation.d.ts.map +1 -0
  59. package/dist/api-routes/groups/translation.js +78 -0
  60. package/dist/api-routes/groups/users.d.ts +17 -0
  61. package/dist/api-routes/groups/users.d.ts.map +1 -0
  62. package/dist/api-routes/groups/users.js +149 -0
  63. package/dist/api-routes/groups/vocabulary.d.ts +10 -0
  64. package/dist/api-routes/groups/vocabulary.d.ts.map +1 -0
  65. package/dist/api-routes/groups/vocabulary.js +97 -0
  66. package/dist/api-routes/helpers.d.ts +29 -0
  67. package/dist/api-routes/helpers.d.ts.map +1 -0
  68. package/dist/api-routes/helpers.js +486 -0
  69. package/dist/api-routes/index.d.ts +25 -0
  70. package/dist/api-routes/index.d.ts.map +1 -0
  71. package/dist/api-routes/index.js +41 -0
  72. package/dist/api-routes/openapi.d.ts +27 -0
  73. package/dist/api-routes/openapi.d.ts.map +1 -0
  74. package/dist/api-routes/openapi.js +273 -0
  75. package/dist/api-routes/request-extraction.d.ts +14 -0
  76. package/dist/api-routes/request-extraction.d.ts.map +1 -0
  77. package/dist/api-routes/request-extraction.js +100 -0
  78. package/dist/api-routes/route-factory.d.ts +3 -0
  79. package/dist/api-routes/route-factory.d.ts.map +1 -0
  80. package/dist/api-routes/route-factory.js +30 -0
  81. package/dist/api-routes/route-registry.d.ts +24 -0
  82. package/dist/api-routes/route-registry.d.ts.map +1 -0
  83. package/dist/api-routes/route-registry.js +113 -0
  84. package/dist/api-routes/route-resolution.d.ts +4 -0
  85. package/dist/api-routes/route-resolution.d.ts.map +1 -0
  86. package/dist/api-routes/route-resolution.js +57 -0
  87. package/dist/api-routes/schemas/common.d.ts +37 -0
  88. package/dist/api-routes/schemas/common.d.ts.map +1 -0
  89. package/dist/api-routes/schemas/common.js +147 -0
  90. package/dist/api-routes/schemas/responses.d.ts +2904 -0
  91. package/dist/api-routes/schemas/responses.d.ts.map +1 -0
  92. package/dist/api-routes/schemas/responses.js +417 -0
  93. package/dist/api-routes/types.d.ts +70 -0
  94. package/dist/api-routes/types.d.ts.map +1 -0
  95. package/dist/api-routes/types.js +3 -0
  96. package/dist/api-routes/validation.d.ts +32 -0
  97. package/dist/api-routes/validation.d.ts.map +1 -0
  98. package/dist/api-routes/validation.js +142 -0
  99. package/dist/bootstrap.d.ts.map +1 -1
  100. package/dist/bootstrap.js +10 -10
  101. package/dist/config/agendaQueue.config.d.ts +25 -1
  102. package/dist/config/agendaQueue.config.d.ts.map +1 -1
  103. package/dist/config/agendaQueue.config.js +19 -2
  104. package/dist/config/auth.config.d.ts.map +1 -1
  105. package/dist/config/auth.config.js +21 -2
  106. package/dist/config/brandingConfigurationDefaults.config.js +3 -3
  107. package/dist/config/dashboardtype.config.d.ts +5 -0
  108. package/dist/config/dashboardtype.config.d.ts.map +1 -1
  109. package/dist/config/dashboardtype.config.js +1 -1
  110. package/dist/config/dashboardview.config.d.ts +24 -0
  111. package/dist/config/dashboardview.config.d.ts.map +1 -0
  112. package/dist/config/dashboardview.config.js +137 -0
  113. package/dist/config/dompurify.config.d.ts.map +1 -1
  114. package/dist/config/dompurify.config.js +2 -2
  115. package/dist/config/http.config.d.ts.map +1 -1
  116. package/dist/config/http.config.js +5 -3
  117. package/dist/config/index.d.ts +6 -0
  118. package/dist/config/index.d.ts.map +1 -1
  119. package/dist/config/index.js +4 -1
  120. package/dist/config/namedQuery.config.d.ts +10 -2
  121. package/dist/config/namedQuery.config.d.ts.map +1 -1
  122. package/dist/config/namedQuery.config.js +17 -17
  123. package/dist/config/policies.config.d.ts +3 -0
  124. package/dist/config/policies.config.d.ts.map +1 -1
  125. package/dist/config/policies.config.js +35 -1
  126. package/dist/config/record.config.d.ts.map +1 -1
  127. package/dist/config/record.config.js +2 -1
  128. package/dist/config/recordtype.config.d.ts +28 -0
  129. package/dist/config/recordtype.config.d.ts.map +1 -1
  130. package/dist/config/recordtype.config.js +85 -9
  131. package/dist/config/routes.config.d.ts +5 -2
  132. package/dist/config/routes.config.d.ts.map +1 -1
  133. package/dist/config/routes.config.js +24 -110
  134. package/dist/config/storage.config.d.ts +20 -2
  135. package/dist/config/storage.config.d.ts.map +1 -1
  136. package/dist/config/storage.config.js +2 -1
  137. package/dist/config/vocab.config.d.ts +30 -0
  138. package/dist/config/vocab.config.d.ts.map +1 -1
  139. package/dist/config/vocab.config.js +21 -1
  140. package/dist/config/webpack.config.d.ts.map +1 -1
  141. package/dist/config/webpack.config.js +13 -7
  142. package/dist/config/workflow.config.d.ts +0 -1
  143. package/dist/config/workflow.config.d.ts.map +1 -1
  144. package/dist/config/workflow.config.js +1 -137
  145. package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
  146. package/dist/configmodels/AdminSidebarConfig.js +1 -2
  147. package/dist/configmodels/ConfigModels.d.ts +1 -1
  148. package/dist/configmodels/ConfigModels.d.ts.map +1 -1
  149. package/dist/configmodels/ConfigModels.js +9 -1
  150. package/dist/configmodels/DashboardTableOverrideConfig.d.ts +1011 -0
  151. package/dist/configmodels/DashboardTableOverrideConfig.d.ts.map +1 -0
  152. package/dist/configmodels/DashboardTableOverrideConfig.js +138 -0
  153. package/dist/controllers/AdminController.d.ts +0 -1
  154. package/dist/controllers/AdminController.d.ts.map +1 -1
  155. package/dist/controllers/AdminController.js +2 -32
  156. package/dist/controllers/BrandingController.d.ts +3 -5
  157. package/dist/controllers/BrandingController.d.ts.map +1 -1
  158. package/dist/controllers/BrandingController.js +29 -21
  159. package/dist/controllers/DashboardConfigController.d.ts +8 -0
  160. package/dist/controllers/DashboardConfigController.d.ts.map +1 -0
  161. package/dist/controllers/DashboardConfigController.js +17 -0
  162. package/dist/controllers/DynamicAssetController.d.ts +1 -0
  163. package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
  164. package/dist/controllers/DynamicAssetController.js +20 -1
  165. package/dist/controllers/EmailController.d.ts.map +1 -1
  166. package/dist/controllers/EmailController.js +16 -12
  167. package/dist/controllers/FormVocabularyController.d.ts +1 -0
  168. package/dist/controllers/FormVocabularyController.d.ts.map +1 -1
  169. package/dist/controllers/FormVocabularyController.js +94 -4
  170. package/dist/controllers/RecordController.d.ts +18 -1
  171. package/dist/controllers/RecordController.d.ts.map +1 -1
  172. package/dist/controllers/RecordController.js +274 -124
  173. package/dist/controllers/RenderViewController.d.ts.map +1 -1
  174. package/dist/controllers/RenderViewController.js +4 -2
  175. package/dist/controllers/TranslationController.d.ts.map +1 -1
  176. package/dist/controllers/TranslationController.js +3 -2
  177. package/dist/controllers/WorkspaceTypesController.d.ts +3 -2
  178. package/dist/controllers/WorkspaceTypesController.d.ts.map +1 -1
  179. package/dist/controllers/WorkspaceTypesController.js +120 -31
  180. package/dist/controllers/index.d.ts.map +1 -1
  181. package/dist/controllers/index.js +7 -4
  182. package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
  183. package/dist/controllers/webservice/AdminController.js +15 -16
  184. package/dist/controllers/webservice/AppConfigController.d.ts.map +1 -1
  185. package/dist/controllers/webservice/AppConfigController.js +19 -20
  186. package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
  187. package/dist/controllers/webservice/BrandingController.js +101 -48
  188. package/dist/controllers/webservice/DashboardConfigController.d.ts +26 -0
  189. package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -0
  190. package/dist/controllers/webservice/DashboardConfigController.js +241 -0
  191. package/dist/controllers/webservice/ExportController.d.ts.map +1 -1
  192. package/dist/controllers/webservice/ExportController.js +11 -11
  193. package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
  194. package/dist/controllers/webservice/FormManagementController.js +11 -13
  195. package/dist/controllers/webservice/RecordController.d.ts +4 -0
  196. package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
  197. package/dist/controllers/webservice/RecordController.js +428 -257
  198. package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
  199. package/dist/controllers/webservice/RecordTypeController.js +9 -10
  200. package/dist/controllers/webservice/ReportController.d.ts.map +1 -1
  201. package/dist/controllers/webservice/ReportController.js +18 -20
  202. package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
  203. package/dist/controllers/webservice/SearchController.js +28 -35
  204. package/dist/controllers/webservice/TranslationController.d.ts.map +1 -1
  205. package/dist/controllers/webservice/TranslationController.js +61 -39
  206. package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -1
  207. package/dist/controllers/webservice/UserManagementController.js +112 -99
  208. package/dist/controllers/webservice/VocabularyController.d.ts.map +1 -1
  209. package/dist/controllers/webservice/VocabularyController.js +76 -28
  210. package/dist/hooks/defineRedboxHook.d.ts +3 -0
  211. package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
  212. package/dist/hooks/defineRedboxHook.js +4 -1
  213. package/dist/index.d.ts +2 -0
  214. package/dist/index.d.ts.map +1 -1
  215. package/dist/index.js +2 -1
  216. package/dist/loader/index.d.ts +6 -0
  217. package/dist/loader/index.d.ts.map +1 -1
  218. package/dist/loader/index.js +57 -10
  219. package/dist/middleware/redboxSession.js +1 -1
  220. package/dist/model/DashboardTypeResponseModel.d.ts +13 -1
  221. package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
  222. package/dist/model/DashboardTypeResponseModel.js +12 -4
  223. package/dist/model/DashboardViewResponseModel.d.ts +20 -0
  224. package/dist/model/DashboardViewResponseModel.d.ts.map +1 -0
  225. package/dist/model/DashboardViewResponseModel.js +38 -0
  226. package/dist/model/RecordTypeResponseModel.d.ts +3 -1
  227. package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
  228. package/dist/model/RecordTypeResponseModel.js +4 -2
  229. package/dist/model/index.d.ts +1 -0
  230. package/dist/model/index.d.ts.map +1 -1
  231. package/dist/model/index.js +5 -2
  232. package/dist/model/storage/BrandingModel.d.ts +0 -16
  233. package/dist/model/storage/BrandingModel.d.ts.map +1 -1
  234. package/dist/model/storage/BrandingModel.js +2 -51
  235. package/dist/model/storage/DashboardTypeModel.d.ts +4 -0
  236. package/dist/model/storage/DashboardTypeModel.d.ts.map +1 -1
  237. package/dist/model/storage/RecordTypeModel.d.ts +16 -0
  238. package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
  239. package/dist/model/storage/RecordTypeModel.js +9 -1
  240. package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
  241. package/dist/policies/contentSecurityPolicy.js +23 -2
  242. package/dist/policies/index.d.ts +3 -0
  243. package/dist/policies/index.d.ts.map +1 -1
  244. package/dist/policies/index.js +6 -2
  245. package/dist/policies/validateApiContractRequest.d.ts +3 -0
  246. package/dist/policies/validateApiContractRequest.d.ts.map +1 -0
  247. package/dist/policies/validateApiContractRequest.js +74 -0
  248. package/dist/responses/badRequest.d.ts.map +1 -1
  249. package/dist/responses/badRequest.js +5 -3
  250. package/dist/responses/created.d.ts.map +1 -1
  251. package/dist/responses/created.js +5 -3
  252. package/dist/responses/forbidden.d.ts.map +1 -1
  253. package/dist/responses/forbidden.js +5 -3
  254. package/dist/responses/ok.d.ts.map +1 -1
  255. package/dist/responses/ok.js +5 -3
  256. package/dist/responses/serverError.d.ts.map +1 -1
  257. package/dist/responses/serverError.js +5 -3
  258. package/dist/responses/siteTitle.d.ts +6 -0
  259. package/dist/responses/siteTitle.d.ts.map +1 -0
  260. package/dist/responses/siteTitle.js +28 -0
  261. package/dist/sails.d.ts +7 -0
  262. package/dist/sails.d.ts.map +1 -1
  263. package/dist/services/AgendaQueueService.d.ts +38 -17
  264. package/dist/services/AgendaQueueService.d.ts.map +1 -1
  265. package/dist/services/AgendaQueueService.js +311 -81
  266. package/dist/services/AttachmentMetadataService.d.ts +34 -0
  267. package/dist/services/AttachmentMetadataService.d.ts.map +1 -0
  268. package/dist/services/AttachmentMetadataService.js +133 -0
  269. package/dist/services/BrandingLogoService.d.ts +6 -8
  270. package/dist/services/BrandingLogoService.d.ts.map +1 -1
  271. package/dist/services/BrandingLogoService.js +66 -72
  272. package/dist/services/DashboardConfigService.d.ts +71 -0
  273. package/dist/services/DashboardConfigService.d.ts.map +1 -0
  274. package/dist/services/DashboardConfigService.js +309 -0
  275. package/dist/services/DashboardTypesService.d.ts +61 -63
  276. package/dist/services/DashboardTypesService.d.ts.map +1 -1
  277. package/dist/services/DashboardTypesService.js +361 -198
  278. package/dist/services/DoiService.d.ts +11 -0
  279. package/dist/services/DoiService.d.ts.map +1 -1
  280. package/dist/services/DoiService.js +206 -1
  281. package/dist/services/FigshareService.d.ts.map +1 -1
  282. package/dist/services/FigshareService.js +5 -1
  283. package/dist/services/FormVocabularyService.d.ts +45 -0
  284. package/dist/services/FormVocabularyService.d.ts.map +1 -0
  285. package/dist/services/FormVocabularyService.js +326 -0
  286. package/dist/services/I18nEntriesService.d.ts +3 -0
  287. package/dist/services/I18nEntriesService.d.ts.map +1 -1
  288. package/dist/services/I18nEntriesService.js +14 -2
  289. package/dist/services/NamedQueryService.d.ts +27 -9
  290. package/dist/services/NamedQueryService.d.ts.map +1 -1
  291. package/dist/services/NamedQueryService.js +223 -55
  292. package/dist/services/RDMPService.d.ts.map +1 -1
  293. package/dist/services/RDMPService.js +3 -2
  294. package/dist/services/RecordsService.d.ts +8 -2
  295. package/dist/services/RecordsService.d.ts.map +1 -1
  296. package/dist/services/RecordsService.js +64 -16
  297. package/dist/services/ReportsService.d.ts.map +1 -1
  298. package/dist/services/ReportsService.js +7 -1
  299. package/dist/services/StandardDatastreamService.d.ts +32 -5
  300. package/dist/services/StandardDatastreamService.d.ts.map +1 -1
  301. package/dist/services/StandardDatastreamService.js +490 -38
  302. package/dist/services/StorageManagerService.d.ts +12 -1
  303. package/dist/services/StorageManagerService.d.ts.map +1 -1
  304. package/dist/services/StorageManagerService.js +72 -7
  305. package/dist/services/index.d.ts +9 -3
  306. package/dist/services/index.d.ts.map +1 -1
  307. package/dist/services/index.js +17 -7
  308. package/dist/storage/GridFSDriver.d.ts +101 -0
  309. package/dist/storage/GridFSDriver.d.ts.map +1 -0
  310. package/dist/storage/GridFSDriver.js +291 -0
  311. package/dist/storage/TusStorageManagerDataStore.d.ts +49 -0
  312. package/dist/storage/TusStorageManagerDataStore.d.ts.map +1 -0
  313. package/dist/storage/TusStorageManagerDataStore.js +300 -0
  314. package/dist/visitor/construct.visitor.d.ts.map +1 -1
  315. package/dist/visitor/construct.visitor.js +6 -3
  316. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
  317. package/dist/visitor/migrate-config-v4-v5.visitor.js +19 -1
  318. package/dist/visitor/validator.visitor.d.ts.map +1 -1
  319. package/dist/visitor/validator.visitor.js +11 -3
  320. package/dist/waterline-models/AttachmentAccessAudit.d.ts +26 -0
  321. package/dist/waterline-models/AttachmentAccessAudit.d.ts.map +1 -0
  322. package/dist/waterline-models/AttachmentAccessAudit.js +63 -0
  323. package/dist/waterline-models/AttachmentMetadata.d.ts +40 -0
  324. package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -0
  325. package/dist/waterline-models/AttachmentMetadata.js +147 -0
  326. package/dist/waterline-models/BrandingConfig.d.ts +0 -2
  327. package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
  328. package/dist/waterline-models/BrandingConfig.js +1 -6
  329. package/dist/waterline-models/DashboardType.d.ts +7 -0
  330. package/dist/waterline-models/DashboardType.d.ts.map +1 -1
  331. package/dist/waterline-models/DashboardType.js +16 -1
  332. package/dist/waterline-models/I18nTranslation.d.ts +2 -0
  333. package/dist/waterline-models/I18nTranslation.d.ts.map +1 -1
  334. package/dist/waterline-models/I18nTranslation.js +6 -1
  335. package/dist/waterline-models/NamedQuery.d.ts +6 -0
  336. package/dist/waterline-models/NamedQuery.d.ts.map +1 -1
  337. package/dist/waterline-models/NamedQuery.js +16 -1
  338. package/dist/waterline-models/index.d.ts +4 -0
  339. package/dist/waterline-models/index.d.ts.map +1 -1
  340. package/dist/waterline-models/index.js +7 -1
  341. package/package.json +31 -21
  342. package/dist/controllers/VocabController.d.ts +0 -43
  343. package/dist/controllers/VocabController.d.ts.map +0 -1
  344. package/dist/controllers/VocabController.js +0 -190
  345. package/dist/services/VocabService.d.ts +0 -81
  346. package/dist/services/VocabService.d.ts.map +0 -1
  347. package/dist/services/VocabService.js +0 -424
@@ -1,81 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { VocabQueryConfig } from '../model/config/VocabQueryConfig';
3
- import { BrandingModel } from '../model/storage/BrandingModel';
4
- import { Services as services } from '../CoreService';
5
- import { AxiosResponse } from 'axios';
6
- export declare namespace Services {
7
- type AdditionalInfoRecord = {
8
- message: string;
9
- isSuccess: boolean;
10
- };
11
- type VocabUserContext = Record<string, unknown> & {
12
- additionalInfoFound?: AdditionalInfoRecord[];
13
- additionalAttributes?: Record<string, unknown>;
14
- name?: string;
15
- };
16
- type MintTriggerOptions = {
17
- sourceType?: string;
18
- queryString?: string;
19
- fieldsToMap?: string[];
20
- };
21
- type ExternalServiceParams = {
22
- options: Record<string, unknown>;
23
- postBody?: unknown;
24
- };
25
- /**
26
- * Vocab related services...
27
- *
28
- *
29
- * Author: <a href='https://github.com/shilob' target='_blank'>Shilo Banihit</a>
30
- *
31
- */
32
- export class Vocab extends services.Core.Service {
33
- protected _exportedMethods: string[];
34
- /** @deprecated Legacy bootstrap flow for deprecated vocab API. */
35
- bootstrap(): Observable<unknown>;
36
- /** @deprecated Legacy Mint trigger wrapper. */
37
- findInMintTriggerWrapper(user: VocabUserContext, options: MintTriggerOptions, failureMode: string): Promise<VocabUserContext>;
38
- private setSuccessOrFailure;
39
- /** @deprecated Legacy Mint integration. */
40
- findInMint(sourceType: string, queryString: string): Promise<Record<string, unknown>>;
41
- /** @deprecated Legacy record query implementation. */
42
- findRecords(sourceType: string, brand: BrandingModel, searchString: string, start: number, rows: number, user: VocabUserContext): Promise<Record<string, unknown> | Array<Record<string, unknown>>>;
43
- buildNamedQueryParamMap(queryConfig: VocabQueryConfig, searchString: string, user: VocabUserContext): Record<string, unknown>;
44
- private buildSolrParams;
45
- getResultObjectMappings(results: Record<string, unknown>, queryConfig: VocabQueryConfig): Array<Record<string, unknown>>;
46
- private getSearchService;
47
- private runTemplate;
48
- /** @deprecated Legacy external service proxy. */
49
- findInExternalService(providerName: string, params: ExternalServiceParams): Promise<Record<string, unknown>>;
50
- private getTemplateStringFunction;
51
- /** @deprecated Use VocabularyService.getEntries() or FormVocabularyController endpoints. */
52
- getVocab: (vocabId: string) => Observable<Array<{
53
- uri: string;
54
- notation: string;
55
- label: string;
56
- }> | unknown>;
57
- private getManagedVocabulary;
58
- protected getConcepts(url: string, rawItems: Array<unknown>): Observable<Array<unknown>>;
59
- protected getNonAndsVocab(vocabId: string): Observable<AxiosResponse<unknown>>;
60
- /** @deprecated Managed via Vocabulary admin. */
61
- loadCollection(collectionId: string, progressId?: string | null, force?: boolean): Observable<Record<string, unknown>[] | null>;
62
- protected saveCollectionChunk(methodName: string, buffer: unknown, _i: number): Observable<unknown>;
63
- /** @deprecated Managed via Vocabulary admin. */
64
- findCollection(collectionId: string, searchString: string): Observable<unknown>;
65
- /** @deprecated Legacy ANDS/RVA lookup. */
66
- rvaGetResourceDetails(uri: string, vocab: string): Observable<AxiosResponse<unknown>>;
67
- protected getMintOptions(url: string, method: string, contentType?: string): {
68
- method: string;
69
- url: string;
70
- headers: {
71
- Authorization: string;
72
- 'Content-Type': string;
73
- };
74
- };
75
- }
76
- export {};
77
- }
78
- declare global {
79
- let VocabService: Services.Vocab;
80
- }
81
- //# sourceMappingURL=VocabService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"VocabService.d.ts","sourceRoot":"","sources":["../../src/services/VocabService.ts"],"names":[],"mappings":"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"}
@@ -1,424 +0,0 @@
1
- "use strict";
2
- // Copyright (c) 2017 Queensland Cyber Infrastructure Foundation (http://www.qcif.edu.au/)
3
- //
4
- // GNU GENERAL PUBLIC LICENSE
5
- // Version 2, June 1991
6
- //
7
- // This program is free software; you can redistribute it and/or modify
8
- // it under the terms of the GNU General Public License as published by
9
- // the Free Software Foundation; either version 2 of the License, or
10
- // (at your option) any later version.
11
- //
12
- // This program is distributed in the hope that it will be useful,
13
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- // GNU General Public License for more details.
16
- //
17
- // You should have received a copy of the GNU General Public License along
18
- // with this program; if not, write to the Free Software Foundation, Inc.,
19
- // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
- var __importDefault = (this && this.__importDefault) || function (mod) {
21
- return (mod && mod.__esModule) ? mod : { "default": mod };
22
- };
23
- Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.Services = void 0;
25
- const rxjs_1 = require("rxjs");
26
- const operators_1 = require("rxjs/operators");
27
- const CoreService_1 = require("../CoreService");
28
- const axios_1 = __importDefault(require("axios"));
29
- const sails_ng_common_1 = require("@researchdatabox/sails-ng-common");
30
- var Services;
31
- (function (Services) {
32
- /**
33
- * Vocab related services...
34
- *
35
- *
36
- * Author: <a href='https://github.com/shilob' target='_blank'>Shilo Banihit</a>
37
- *
38
- */
39
- class Vocab extends CoreService_1.Services.Core.Service {
40
- _exportedMethods = [
41
- 'bootstrap',
42
- 'getVocab',
43
- 'loadCollection',
44
- 'findCollection',
45
- 'findInMint',
46
- 'findInExternalService',
47
- 'rvaGetResourceDetails',
48
- 'findInMintTriggerWrapper',
49
- 'findRecords'
50
- ];
51
- /** @deprecated Legacy bootstrap flow for deprecated vocab API. */
52
- bootstrap() {
53
- return _.isEmpty(sails.config.vocab.bootStrapVocabs) ?
54
- (0, rxjs_1.of)(null)
55
- : (0, rxjs_1.from)(sails.config.vocab.bootStrapVocabs).pipe((0, operators_1.mergeMap)((vocabId) => {
56
- return this.getVocab(vocabId);
57
- }), (0, operators_1.last)());
58
- }
59
- /** @deprecated Legacy Mint trigger wrapper. */
60
- async findInMintTriggerWrapper(user, options, failureMode) {
61
- let additionalInfoFound = _.get(user, 'additionalInfoFound');
62
- if (!_.isArray(additionalInfoFound)) {
63
- additionalInfoFound = [];
64
- }
65
- try {
66
- const sourceType = _.get(options, 'sourceType', '');
67
- const queryStringTmp = _.get(options, 'queryString', '');
68
- const compiledTemplate = _.template(queryStringTmp, {});
69
- const fieldsToMap = _.get(options, 'fieldsToMap', []);
70
- const queryString = compiledTemplate({ user: user });
71
- const mintResponse = await this.findInMint(sourceType, queryString);
72
- const responseDocs = _.get(mintResponse, 'response.docs');
73
- if (_.isArray(responseDocs) && responseDocs.length > 0) {
74
- for (const fieldName of fieldsToMap) {
75
- const sourceField = _.get(responseDocs[0], fieldName);
76
- if (!_.isUndefined(sourceField) && !_.isEmpty(sourceField) && !_.isNull(sourceField)) {
77
- _.set(user, 'additionalAttributes.' + fieldName, sourceField);
78
- }
79
- }
80
- this.setSuccessOrFailure(user, additionalInfoFound, '', true);
81
- }
82
- else {
83
- this.setSuccessOrFailure(user, additionalInfoFound, failureMode);
84
- }
85
- return user;
86
- }
87
- catch (err) {
88
- sails.log.error(`findInMintTriggerWrapper failed to complete. Additional info for user ${_.get(user, 'name')} not found`);
89
- sails.log.error(err);
90
- sails.log.error(options);
91
- this.setSuccessOrFailure(user, additionalInfoFound, failureMode);
92
- return user;
93
- }
94
- }
95
- setSuccessOrFailure(user, additionalInfoFound, failureMode, forceSuccess = false) {
96
- if (forceSuccess) {
97
- const successResponse = {
98
- message: `Additional info for user ${_.get(user, 'name')} found.`,
99
- isSuccess: true
100
- };
101
- additionalInfoFound.push(successResponse);
102
- _.set(user, 'additionalInfoFound', additionalInfoFound);
103
- }
104
- else if (failureMode == 'continue') {
105
- const successResponse = {
106
- message: `Additional info for user ${_.get(user, 'name')} not found. Ignore because failure mode is set to ${failureMode}`,
107
- isSuccess: true
108
- };
109
- additionalInfoFound.push(successResponse);
110
- _.set(user, 'additionalInfoFound', additionalInfoFound);
111
- }
112
- else {
113
- const errorResponse = {
114
- message: `Additional info for user ${_.get(user, 'name')} not found`,
115
- isSuccess: false
116
- };
117
- additionalInfoFound.push(errorResponse);
118
- _.set(user, 'additionalInfoFound', additionalInfoFound);
119
- }
120
- }
121
- /** @deprecated Legacy Mint integration. */
122
- async findInMint(sourceType, queryString) {
123
- queryString = _.trim(queryString);
124
- let searchString = '';
125
- if (!_.isEmpty(queryString)) {
126
- searchString = ` AND (${queryString})`;
127
- }
128
- const mintUrl = `${sails.config.record.baseUrl.mint}${sails.config.mint.api.search.url}?q=repository_type:${sourceType}${searchString}&version=2.2&wt=json&start=0`;
129
- sails.log.info(mintUrl);
130
- const options = this.getMintOptions(mintUrl, sails.config.record.api.search.method);
131
- sails.log.verbose(options);
132
- const response = await (0, axios_1.default)(options);
133
- return response.data;
134
- }
135
- /** @deprecated Legacy record query implementation. */
136
- async findRecords(sourceType, brand, searchString, start, rows, user) {
137
- const queryConfig = sails.config.vocab.queries[sourceType];
138
- if (queryConfig.querySource == 'database') {
139
- const namedQueryConfig = await NamedQueryService.getNamedQueryConfig(brand, queryConfig.databaseQuery.queryName);
140
- const paramMap = this.buildNamedQueryParamMap(queryConfig, searchString, user);
141
- const dbResults = await NamedQueryService.performNamedQueryFromConfig(namedQueryConfig, paramMap, brand, start, rows);
142
- if (queryConfig.resultObjectMapping) {
143
- return this.getResultObjectMappings(dbResults, queryConfig);
144
- }
145
- else {
146
- return dbResults;
147
- }
148
- }
149
- else if (queryConfig.querySource == 'solr') {
150
- const solrQuery = this.buildSolrParams(brand, searchString, queryConfig, start, rows, 'json', user);
151
- const solrResults = await this.getSearchService().searchAdvanced(queryConfig.searchQuery.searchCore, '', solrQuery);
152
- if (queryConfig.resultObjectMapping) {
153
- return this.getResultObjectMappings(solrResults, queryConfig);
154
- }
155
- else {
156
- return solrResults;
157
- }
158
- }
159
- return {};
160
- }
161
- buildNamedQueryParamMap(queryConfig, searchString, user) {
162
- const paramMap = {};
163
- if (queryConfig.queryField.type == 'text') {
164
- paramMap[queryConfig.queryField.property] = searchString;
165
- }
166
- if (queryConfig.userQueryFields != null) {
167
- for (const userQueryField of queryConfig.userQueryFields) {
168
- paramMap[userQueryField.property] = _.get(user, userQueryField.userValueProperty, null);
169
- }
170
- }
171
- return paramMap;
172
- }
173
- buildSolrParams(brand, searchString, queryConfig, start, rows, format = 'json', user) {
174
- let query = `${queryConfig.searchQuery.baseQuery}&sort=date_object_modified desc&version=2.2&start=${start}&rows=${rows}`;
175
- query = query + `&fq=metaMetadata_brandId:${brand.id}&wt=${format}`;
176
- if (queryConfig.queryField.type == 'text') {
177
- const value = searchString;
178
- if (!_.isEmpty(value)) {
179
- const searchProperty = queryConfig.queryField.property;
180
- query = query + '&fq=' + searchProperty + ':';
181
- if (value.indexOf('*') != -1) {
182
- query = query + value.replaceAll('*', '') + '*';
183
- }
184
- else {
185
- query = query + value + '*';
186
- }
187
- }
188
- }
189
- if (queryConfig.userQueryFields != null) {
190
- for (const userQueryField of queryConfig.userQueryFields) {
191
- const searchProperty = userQueryField.property;
192
- query = query + '&fq=' + searchProperty + ':' + _.get(user, userQueryField.userValueProperty, null);
193
- }
194
- }
195
- return query;
196
- }
197
- getResultObjectMappings(results, queryConfig) {
198
- let responseRecords = _.get(results, 'response.docs', '');
199
- if (responseRecords == '') {
200
- responseRecords = results.records ?? [];
201
- }
202
- const response = [];
203
- const that = this;
204
- const resultObjectMapping = queryConfig.resultObjectMapping;
205
- for (const record of responseRecords) {
206
- try {
207
- const variables = {
208
- record: record,
209
- _: _
210
- };
211
- let defaultMetadata = {};
212
- if (!_.isEmpty(resultObjectMapping)) {
213
- const resultMetadata = _.cloneDeep(resultObjectMapping);
214
- _.forOwn(resultObjectMapping, function (value, key) {
215
- _.set(resultMetadata, key, that.runTemplate(value, variables));
216
- });
217
- defaultMetadata = resultMetadata;
218
- response.push(defaultMetadata);
219
- }
220
- }
221
- catch (_error) {
222
- //This is required because the records retrieved from the solr index can have different structure and runTemplate method
223
- //cannot handle this .i.e if there are records type rdmp thar normal rdmp records and there are mock mint records that
224
- //are also rdmp type when the mock mint records are set to a different record type this should not happen
225
- continue;
226
- }
227
- }
228
- return response;
229
- }
230
- getSearchService() {
231
- return sails.services[sails.config.search.serviceName];
232
- }
233
- runTemplate(templateOrPath, variables) {
234
- if (templateOrPath && templateOrPath.indexOf('<%') != -1) {
235
- return _.template(templateOrPath)(variables);
236
- }
237
- return _.get(variables, templateOrPath);
238
- }
239
- /** @deprecated Legacy external service proxy. */
240
- async findInExternalService(providerName, params) {
241
- const method = sails.config.vocab.external[providerName].method;
242
- let url = sails.config.vocab.external[providerName].url;
243
- const templateFunction = this.getTemplateStringFunction(url);
244
- url = templateFunction(params.options);
245
- sails.log.info(url);
246
- const options = sails.config.vocab.external[providerName].options;
247
- if (method == 'post') {
248
- const post = {
249
- method: method,
250
- url: url,
251
- data: params.postBody,
252
- params: options
253
- };
254
- sails.log.verbose(post);
255
- const response = await (0, axios_1.default)(post);
256
- return response.data;
257
- }
258
- else {
259
- const getSearch = {
260
- method: method,
261
- url: url,
262
- params: options
263
- };
264
- sails.log.verbose(getSearch);
265
- const response = await (0, axios_1.default)(getSearch);
266
- return response.data;
267
- }
268
- }
269
- getTemplateStringFunction(template) {
270
- const sanitized = template
271
- .replace(/\$\{([\s]*[^;\s{]+[\s]*)\}/g, function (_, match) {
272
- return `\${map.${match.trim()}}`;
273
- })
274
- // Afterwards, replace anything that's not ${map.expressions}' (etc) with a blank string.
275
- .replace(/(\$\{(?!map\.)[^}]+\})/g, '');
276
- return Function('map', `return \`${sanitized}\``);
277
- }
278
- /** @deprecated Use VocabularyService.getEntries() or FormVocabularyController endpoints. */
279
- getVocab = (vocabId) => {
280
- // Check cache
281
- return (0, rxjs_1.from)(CacheService.get(vocabId)).pipe((0, operators_1.mergeMap)(data => {
282
- if (data) {
283
- sails.log.verbose(`Returning cached vocab: ${vocabId}`);
284
- return (0, rxjs_1.of)(data);
285
- }
286
- return (0, rxjs_1.from)(this.getManagedVocabulary(vocabId)).pipe((0, operators_1.mergeMap)((managedVocabulary) => {
287
- if (managedVocabulary) {
288
- CacheService.set(vocabId, managedVocabulary);
289
- return (0, rxjs_1.of)(managedVocabulary);
290
- }
291
- if (sails.config.vocab.nonAnds && sails.config.vocab.nonAnds[vocabId]) {
292
- return this.getNonAndsVocab(vocabId);
293
- }
294
- const url = `${sails.config.vocab.rootUrl}${vocabId}/${sails.config.vocab.conceptUri}`;
295
- let items = null; // a flat array containing all the entries
296
- const rawItems = [];
297
- return this.getConcepts(url, rawItems).pipe((0, operators_1.mergeMap)(allRawItems => {
298
- // we only are interested in notation, label and the uri
299
- items = _.map(allRawItems, (rawItem) => {
300
- const rawItemObj = rawItem;
301
- const prefLabel = rawItemObj.prefLabel;
302
- return { uri: rawItemObj._about, notation: rawItemObj.notation, label: prefLabel?._value ?? '' };
303
- });
304
- CacheService.set(vocabId, items);
305
- return (0, rxjs_1.of)(items);
306
- }));
307
- }));
308
- }));
309
- };
310
- async getManagedVocabulary(vocabId) {
311
- const normalizedId = String(vocabId ?? '').trim();
312
- if (!normalizedId) {
313
- return null;
314
- }
315
- const vocabulary = await Vocabulary.findOne({
316
- or: [{ id: normalizedId }, { slug: normalizedId }, { name: normalizedId }]
317
- });
318
- if (!vocabulary?.id) {
319
- return null;
320
- }
321
- const entries = await VocabularyEntry
322
- .find({ vocabulary: vocabulary.id })
323
- .sort([{ order: "ASC" }, { label: "ASC" }]);
324
- return entries.map((entry) => ({
325
- uri: String(entry.identifier ?? entry.value ?? ''),
326
- notation: String(entry.value ?? ''),
327
- label: String(entry.label ?? ''),
328
- historical: (0, sails_ng_common_1.toBoolean)(entry.historical)
329
- }));
330
- }
331
- // have to do this since ANDS endpoint ignores _pageSize
332
- getConcepts(url, rawItems) {
333
- console.log(`Getting concepts....${url}`);
334
- return (0, rxjs_1.from)(axios_1.default.get(url)).pipe((0, operators_1.mergeMap)((resp) => {
335
- const response = resp.data;
336
- rawItems = rawItems.concat(response.result?.items ?? []);
337
- if (response.result && response.result.next) {
338
- return this.getConcepts(response.result.next, rawItems);
339
- }
340
- return (0, rxjs_1.of)(rawItems);
341
- }));
342
- }
343
- getNonAndsVocab(vocabId) {
344
- const url = sails.config.vocab.nonAnds[vocabId].url;
345
- return (0, rxjs_1.from)(axios_1.default.get(url)).pipe((0, operators_1.mergeMap)(response => {
346
- CacheService.set(vocabId, response.data);
347
- return (0, rxjs_1.of)(response);
348
- }));
349
- }
350
- /** @deprecated Managed via Vocabulary admin. */
351
- loadCollection(collectionId, progressId = null, force = false) {
352
- const progressKey = progressId ?? '';
353
- const getMethod = sails.config.vocab.collection[collectionId].getMethod;
354
- const bufferCount = sails.config.vocab.collection[collectionId].processingBuffer;
355
- const processWindow = sails.config.vocab.collection[collectionId].processingTime;
356
- let collectionData = null;
357
- return this[getMethod](collectionId).pipe((0, operators_1.mergeMap)((data) => {
358
- if (_.isEmpty(data) || force) {
359
- // return a receipt and then start the process of loading...
360
- const url = sails.config.vocab.collection[collectionId].url;
361
- sails.log.verbose(`Loading collection: ${collectionId}, using url: ${url}`);
362
- const methodName = sails.config.vocab.collection[collectionId].saveMethod;
363
- return (0, rxjs_1.from)(axios_1.default.get(url)).pipe((0, operators_1.mergeMap)(resp => {
364
- const response = resp.data;
365
- sails.log.verbose(`Got response retrieving data for collection: ${collectionId}, saving...`);
366
- sails.log.verbose(`Number of items: ${response.length}`);
367
- const itemsToSave = _.chunk(response, bufferCount);
368
- collectionData = itemsToSave;
369
- // sails.log.verbose(collectionData);
370
- const updateObj = { currentIdx: 0, targetIdx: (collectionData || []).length };
371
- return AsynchsService.update({ id: progressKey }, updateObj);
372
- }), (0, operators_1.mergeMap)(_updateResp => {
373
- sails.log.verbose(`Updated asynch progress...`);
374
- return (0, rxjs_1.from)(collectionData || []);
375
- }), (0, operators_1.concatMap)((buffer, i) => {
376
- sails.log.verbose(`Processing chunk: ${i}`);
377
- return (0, rxjs_1.of)(buffer).pipe((0, operators_1.delay)(i * processWindow), (0, operators_1.mergeMap)(() => this.saveCollectionChunk(methodName, buffer, i).pipe((0, operators_1.mergeMap)(_saveResp => {
378
- sails.log.verbose(`Updating chunk progress...${i}`);
379
- if (i === (collectionData || []).length - 1) {
380
- sails.log.verbose(`Asynch completed.`);
381
- return AsynchsService.finish(progressKey);
382
- }
383
- else {
384
- return AsynchsService.update({ id: progressKey }, { currentIdx: i + 1, status: 'processing' });
385
- }
386
- }))));
387
- }));
388
- }
389
- else {
390
- sails.log.verbose(`Collection already loaded: ${collectionId}`);
391
- return (0, rxjs_1.of)(null);
392
- }
393
- }));
394
- }
395
- saveCollectionChunk(methodName, buffer, _i) {
396
- return this[methodName](buffer);
397
- }
398
- /** @deprecated Managed via Vocabulary admin. */
399
- findCollection(collectionId, searchString) {
400
- return this[sails.config.vocab.collection[collectionId].searchMethod](searchString);
401
- }
402
- /** @deprecated Legacy ANDS/RVA lookup. */
403
- rvaGetResourceDetails(uri, vocab) {
404
- const url = sails.config.vocab.rootUrl + `${vocab}/resource.json?uri=${uri}`;
405
- return (0, rxjs_1.from)(axios_1.default.get(url)).pipe((0, operators_1.mergeMap)(response => {
406
- CacheService.set(vocab, response.data);
407
- return (0, rxjs_1.of)(response);
408
- }));
409
- }
410
- getMintOptions(url, method, contentType = 'application/json; charset=utf-8') {
411
- const opts = {
412
- method: method,
413
- url: url,
414
- headers: {
415
- 'Authorization': `Bearer ${sails.config.mint.apiKey}`,
416
- 'Content-Type': contentType
417
- }
418
- };
419
- return opts;
420
- }
421
- }
422
- Services.Vocab = Vocab;
423
- })(Services || (exports.Services = Services = {}));
424
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm9jYWJTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL1ZvY2FiU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEZBQTBGO0FBQzFGLEVBQUU7QUFDRiw2QkFBNkI7QUFDN0IsMEJBQTBCO0FBQzFCLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSxzQ0FBc0M7QUFDdEMsRUFBRTtBQUNGLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSw4REFBOEQ7Ozs7OztBQUU5RCwrQkFBNEM7QUFDNUMsOENBQTZFO0FBSTdFLGdEQUFzRDtBQUN0RCxrREFBNkM7QUFDN0Msc0VBQTJEO0FBRzNELElBQWlCLFFBQVEsQ0FzZHhCO0FBdGRELFdBQWlCLFFBQVE7SUFhdkI7Ozs7OztPQU1HO0lBQ0gsTUFBYSxLQUFNLFNBQVEsc0JBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTztRQUUzQixnQkFBZ0IsR0FBYTtZQUM5QyxXQUFXO1lBQ1gsVUFBVTtZQUNWLGdCQUFnQjtZQUNoQixnQkFBZ0I7WUFDaEIsWUFBWTtZQUNaLHVCQUF1QjtZQUN2Qix1QkFBdUI7WUFDdkIsMEJBQTBCO1lBQzFCLGFBQWE7U0FDZCxDQUFDO1FBRUYsa0VBQWtFO1FBQzNELFNBQVM7WUFDZCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDcEQsSUFBQSxTQUFFLEVBQUMsSUFBSSxDQUFDO2dCQUNSLENBQUMsQ0FBQyxJQUFBLFdBQUksRUFBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUEyQixDQUFDLENBQUMsSUFBSSxDQUN6RCxJQUFBLG9CQUFPLEVBQUMsQ0FBQyxPQUFlLEVBQUUsRUFBRTtvQkFDMUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsRUFDRixJQUFBLGdCQUFJLEdBQUUsQ0FDUCxDQUFDO1FBQ04sQ0FBQztRQUVELCtDQUErQztRQUN4QyxLQUFLLENBQUMsd0JBQXdCLENBQUMsSUFBc0IsRUFBRSxPQUEyQixFQUFFLFdBQW1CO1lBQzVHLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLENBQTRDLENBQUM7WUFDeEcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7WUFDM0IsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDekQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDeEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUV0RCxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBRXZELEtBQUssTUFBTSxTQUFTLElBQUksV0FBVyxFQUFFLENBQUM7d0JBQ3BDLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3dCQUN0RCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7NEJBQ3JGLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLHVCQUF1QixHQUFHLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQzt3QkFDaEUsQ0FBQztvQkFDSCxDQUFDO29CQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUVoRSxDQUFDO3FCQUFNLENBQUM7b0JBRU4sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztnQkFFRCxPQUFPLElBQUksQ0FBQztZQUVkLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHlFQUF5RSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzFILEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDakUsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUVPLG1CQUFtQixDQUFDLElBQXNCLEVBQUUsbUJBQWdELEVBQUUsV0FBbUIsRUFBRSxlQUF3QixLQUFLO1lBRXRKLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBRWpCLE1BQU0sZUFBZSxHQUF5QjtvQkFDNUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsU0FBUztvQkFDakUsU0FBUyxFQUFFLElBQUk7aUJBQ2hCLENBQUM7Z0JBQ0YsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBRTFELENBQUM7aUJBQU0sSUFBSSxXQUFXLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBRXJDLE1BQU0sZUFBZSxHQUF5QjtvQkFDNUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMscURBQXFELFdBQVcsRUFBRTtvQkFDMUgsU0FBUyxFQUFFLElBQUk7aUJBQ2hCLENBQUM7Z0JBQ0YsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBRTFELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLGFBQWEsR0FBeUI7b0JBQzFDLE9BQU8sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFlBQVk7b0JBQ3BFLFNBQVMsRUFBRSxLQUFLO2lCQUNqQixDQUFDO2dCQUNGLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQztRQUVELDJDQUEyQztRQUNwQyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQWtCLEVBQUUsV0FBbUI7WUFDN0QsV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEMsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLFlBQVksR0FBRyxTQUFTLFdBQVcsR0FBRyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLHNCQUFzQixVQUFVLEdBQUcsWUFBWSw4QkFBOEIsQ0FBQztZQUNwSyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BGLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTNCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxlQUFLLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsT0FBTyxRQUFRLENBQUMsSUFBK0IsQ0FBQztRQUNsRCxDQUFDO1FBRUQsc0RBQXNEO1FBQy9DLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBa0IsRUFBRSxLQUFvQixFQUFFLFlBQW9CLEVBQUUsS0FBYSxFQUFFLElBQVksRUFBRSxJQUFzQjtZQUUxSSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFnQyxDQUFDO1lBRTFGLElBQUksV0FBVyxDQUFDLFdBQVcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFFMUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNqSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0UsTUFBTSxTQUFTLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztvQkFDcEMsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBK0MsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDcEcsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sU0FBK0MsQ0FBQztnQkFDekQsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxXQUFXLENBQUMsV0FBVyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUM3QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNwRyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3BILElBQUksV0FBVyxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQ3BDLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDaEUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sV0FBVyxDQUFDO2dCQUNyQixDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELHVCQUF1QixDQUFDLFdBQTZCLEVBQUUsWUFBb0IsRUFBRSxJQUFzQjtZQUNqRyxNQUFNLFFBQVEsR0FBNEIsRUFBRSxDQUFBO1lBQzVDLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFlBQVksQ0FBQztZQUMzRCxDQUFDO1lBQ0QsSUFBSSxXQUFXLENBQUMsZUFBZSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN4QyxLQUFLLE1BQU0sY0FBYyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDekQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzFGLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVPLGVBQWUsQ0FBQyxLQUFvQixFQUFFLFlBQW9CLEVBQUUsV0FBNkIsRUFBRSxLQUFhLEVBQUUsSUFBWSxFQUFFLFNBQWlCLE1BQU0sRUFBRSxJQUFzQjtZQUM3SyxJQUFJLEtBQUssR0FBRyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxxREFBcUQsS0FBSyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQzFILEtBQUssR0FBRyxLQUFLLEdBQUcsNEJBQTRCLEtBQUssQ0FBQyxFQUFFLE9BQU8sTUFBTSxFQUFFLENBQUM7WUFFcEUsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDO2dCQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN0QixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztvQkFDdkQsS0FBSyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsY0FBYyxHQUFHLEdBQUcsQ0FBQztvQkFDOUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzdCLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUNsRCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO29CQUM5QixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxXQUFXLENBQUMsZUFBZSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN4QyxLQUFLLE1BQU0sY0FBYyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDekQsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDL0MsS0FBSyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsY0FBYyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3RHLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsdUJBQXVCLENBQUMsT0FBZ0MsRUFBRSxXQUE2QjtZQUVyRixJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUF3QyxDQUFDO1lBQ2pHLElBQUksZUFBZSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUMxQixlQUFlLEdBQUksT0FBd0QsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1lBQzVGLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBbUMsRUFBRSxDQUFDO1lBQ3BELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztZQUNsQixNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztZQUM1RCxLQUFLLE1BQU0sTUFBTSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUM7b0JBQ0gsTUFBTSxTQUFTLEdBQUc7d0JBQ2hCLE1BQU0sRUFBRSxNQUFNO3dCQUNkLENBQUMsRUFBRSxDQUFDO3FCQUNMLENBQUM7b0JBQ0YsSUFBSSxlQUFlLEdBQTRCLEVBQUUsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO3dCQUNwQyxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7d0JBQ3hELENBQUMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxLQUFjLEVBQUUsR0FBVzs0QkFDakUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQzNFLENBQUMsQ0FBQyxDQUFDO3dCQUNILGVBQWUsR0FBRyxjQUF5QyxDQUFDO3dCQUM1RCxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNqQyxDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxNQUFNLEVBQUUsQ0FBQztvQkFDaEIseUhBQXlIO29CQUN6SCx1SEFBdUg7b0JBQ3ZILDBHQUEwRztvQkFDMUcsU0FBUztnQkFDWCxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFTyxnQkFBZ0I7WUFDdEIsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBNkIsQ0FBQztRQUNyRixDQUFDO1FBRU8sV0FBVyxDQUFDLGNBQXNCLEVBQUUsU0FBa0M7WUFDNUUsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELGlEQUFpRDtRQUMxQyxLQUFLLENBQUMscUJBQXFCLENBQUMsWUFBb0IsRUFBRSxNQUE2QjtZQUNwRixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2hFLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFFeEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0QsR0FBRyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV2QyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBRWxFLElBQUksTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNyQixNQUFNLElBQUksR0FBRztvQkFDWCxNQUFNLEVBQUUsTUFBTTtvQkFDZCxHQUFHLEVBQUUsR0FBRztvQkFDUixJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0JBQ3JCLE1BQU0sRUFBRSxPQUFPO2lCQUNoQixDQUFDO2dCQUNGLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV4QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsZUFBSyxFQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxPQUFPLFFBQVEsQ0FBQyxJQUErQixDQUFDO1lBQ2xELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLFNBQVMsR0FBRztvQkFDaEIsTUFBTSxFQUFFLE1BQU07b0JBQ2QsR0FBRyxFQUFFLEdBQUc7b0JBQ1IsTUFBTSxFQUFFLE9BQU87aUJBQ2hCLENBQUM7Z0JBQ0YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRTdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxlQUFLLEVBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hDLE9BQU8sUUFBUSxDQUFDLElBQStCLENBQUM7WUFDbEQsQ0FBQztRQUNILENBQUM7UUFFTyx5QkFBeUIsQ0FBQyxRQUFnQjtZQUNoRCxNQUFNLFNBQVMsR0FBRyxRQUFRO2lCQUN2QixPQUFPLENBQUMsNkJBQTZCLEVBQUUsVUFBVSxDQUFTLEVBQUUsS0FBYTtnQkFDeEUsT0FBTyxVQUFVLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQ25DLENBQUMsQ0FBQztnQkFDRix5RkFBeUY7aUJBQ3hGLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUUxQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFHRCw0RkFBNEY7UUFDckYsUUFBUSxHQUFHLENBQUMsT0FBZSxFQUFpRixFQUFFO1lBQ25ILGNBQWM7WUFDZCxPQUFPLElBQUEsV0FBSSxFQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3pDLElBQUEsb0JBQU8sRUFBQyxJQUFJLENBQUMsRUFBRTtnQkFDYixJQUFJLElBQUksRUFBRSxDQUFDO29CQUNULEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLDJCQUEyQixPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUN4RCxPQUFPLElBQUEsU0FBRSxFQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixDQUFDO2dCQUNELE9BQU8sSUFBQSxXQUFJLEVBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRCxJQUFBLG9CQUFPLEVBQUMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO29CQUM1QixJQUFJLGlCQUFpQixFQUFFLENBQUM7d0JBQ3RCLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7d0JBQzdDLE9BQU8sSUFBQSxTQUFFLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDL0IsQ0FBQztvQkFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN2QyxDQUFDO29CQUNELE1BQU0sR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDdkYsSUFBSSxLQUFLLEdBQW1FLElBQUksQ0FBQyxDQUFDLDBDQUEwQztvQkFDNUgsTUFBTSxRQUFRLEdBQW1CLEVBQUUsQ0FBQztvQkFDcEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ3pDLElBQUEsb0JBQU8sRUFBQyxXQUFXLENBQUMsRUFBRTt3QkFDcEIsd0RBQXdEO3dCQUN4RCxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFnQixFQUFFLEVBQUU7NEJBQzlDLE1BQU0sVUFBVSxHQUFHLE9BQWtDLENBQUM7NEJBQ3RELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUE0QyxDQUFDOzRCQUMxRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxNQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBa0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQzt3QkFDdkgsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ2pDLE9BQU8sSUFBQSxTQUFFLEVBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUE7UUFFTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsT0FBZTtZQUtoRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDO2dCQUMxQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQzthQUMzRSxDQUE2QixDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sZUFBZTtpQkFDbEMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztpQkFDbkMsSUFBSSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBNkIsQ0FBQztZQUVuRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbEQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbkMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDaEMsVUFBVSxFQUFFLElBQUEsMkJBQVMsRUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUVELHdEQUF3RDtRQUM5QyxXQUFXLENBQUMsR0FBVyxFQUFFLFFBQXdCO1lBQ3pELE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUMsT0FBTyxJQUFBLFdBQUksRUFBQyxlQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM5QixJQUFBLG9CQUFPLEVBQUMsQ0FBQyxJQUFJLEVBQThCLEVBQUU7Z0JBQzNDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUE4RCxDQUFDO2dCQUNyRixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDekQsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzVDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFDRCxPQUFPLElBQUEsU0FBRSxFQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBRVMsZUFBZSxDQUFDLE9BQWU7WUFDdkMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNwRCxPQUFPLElBQUEsV0FBSSxFQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBQSxvQkFBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNsRCxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLE9BQU8sSUFBQSxTQUFFLEVBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsY0FBYyxDQUFDLFlBQW9CLEVBQUUsYUFBNEIsSUFBSSxFQUFFLEtBQUssR0FBRyxLQUFLO1lBQ2xGLE1BQU0sV0FBVyxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDckMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN4RSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsZ0JBQWdCLENBQUM7WUFDakYsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUNqRixJQUFJLGNBQWMsR0FBMEIsSUFBSSxDQUFDO1lBQ2pELE9BQVEsSUFBdUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBQSxvQkFBTyxFQUFDLENBQUMsSUFBYSxFQUFFLEVBQUU7Z0JBQ3RJLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDN0IsNERBQTREO29CQUM1RCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDO29CQUM1RCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsWUFBWSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDNUUsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQztvQkFDMUUsT0FBTyxJQUFBLFdBQUksRUFBQyxlQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM5QixJQUFBLG9CQUFPLEVBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ2IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQXNCLENBQUM7d0JBQzdDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGdEQUFnRCxZQUFZLGFBQWEsQ0FBQyxDQUFDO3dCQUM3RixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7d0JBQ3pELE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO3dCQUNuRCxjQUFjLEdBQUcsV0FBVyxDQUFDO3dCQUM3QixxQ0FBcUM7d0JBQ3JDLE1BQU0sU0FBUyxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQzlFLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDL0QsQ0FBQyxDQUFDLEVBQ0YsSUFBQSxvQkFBTyxFQUFDLFdBQVcsQ0FBQyxFQUFFO3dCQUNwQixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO3dCQUNoRCxPQUFPLElBQUEsV0FBSSxFQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDcEMsQ0FBQyxDQUFDLEVBQ0YsSUFBQSxxQkFBUyxFQUFDLENBQUMsTUFBZSxFQUFFLENBQVMsRUFBRSxFQUFFO3dCQUN2QyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDNUMsT0FBTyxJQUFBLFNBQUUsRUFBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3BCLElBQUEsaUJBQUssRUFBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQ3hCLElBQUEsb0JBQU8sRUFBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2hFLElBQUEsb0JBQU8sRUFBQyxTQUFTLENBQUMsRUFBRTs0QkFDbEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQ0FDNUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQ0FDdkMsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUM1QyxDQUFDO2lDQUFNLENBQUM7Z0NBQ04sT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7NEJBQ2pHLENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUNILENBQUM7b0JBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQTtnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsOEJBQThCLFlBQVksRUFBRSxDQUFDLENBQUM7b0JBQ2hFLE9BQU8sSUFBQSxTQUFFLEVBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUVTLG1CQUFtQixDQUFDLFVBQWtCLEVBQUUsTUFBZSxFQUFFLEVBQVU7WUFDM0UsT0FBUSxJQUF5RSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsY0FBYyxDQUFDLFlBQW9CLEVBQUUsWUFBb0I7WUFDdkQsT0FBUSxJQUEwRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3SixDQUFDO1FBRUQsMENBQTBDO1FBQ25DLHFCQUFxQixDQUFDLEdBQVcsRUFBRSxLQUFhO1lBQ3JELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLEtBQUssc0JBQXNCLEdBQUcsRUFBRSxDQUFDO1lBQzdFLE9BQU8sSUFBQSxXQUFJLEVBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFBLG9CQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2xELFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxJQUFBLFNBQUUsRUFBQyxRQUFRLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUVTLGNBQWMsQ0FBQyxHQUFXLEVBQUUsTUFBYyxFQUFFLFdBQVcsR0FBRyxpQ0FBaUM7WUFFbkcsTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsR0FBRyxFQUFFLEdBQUc7Z0JBQ1IsT0FBTyxFQUFFO29CQUNQLGVBQWUsRUFBRSxVQUFVLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDckQsY0FBYyxFQUFFLFdBQVc7aUJBQzVCO2FBQ0YsQ0FBQztZQUVGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztLQUNGO0lBamNZLGNBQUssUUFpY2pCLENBQUE7QUFDSCxDQUFDLEVBdGRnQixRQUFRLHdCQUFSLFFBQVEsUUFzZHhCIn0=