@alfresco/adf-content-services 8.1.0-15280782128 → 8.1.0-15319410336

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 (406) hide show
  1. package/esm2022/adf-content-services.mjs +5 -0
  2. package/esm2022/lib/agent/index.mjs +18 -0
  3. package/esm2022/lib/agent/public-api.mjs +18 -0
  4. package/esm2022/lib/agent/services/agent.service.mjs +60 -0
  5. package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +27 -0
  6. package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +42 -0
  7. package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +74 -0
  8. package/esm2022/lib/api-factories/index.mjs +18 -0
  9. package/esm2022/lib/api-factories/public-api.mjs +19 -0
  10. package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +18 -0
  11. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +78 -0
  12. package/esm2022/lib/aspect-list/aspect-list.component.mjs +140 -0
  13. package/esm2022/lib/aspect-list/aspect-list.module.mjs +35 -0
  14. package/esm2022/lib/aspect-list/index.mjs +18 -0
  15. package/esm2022/lib/aspect-list/public-api.mjs +24 -0
  16. package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +83 -0
  17. package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +86 -0
  18. package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +52 -0
  19. package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +26 -0
  20. package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +42 -0
  21. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +167 -0
  22. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +35 -0
  23. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +66 -0
  24. package/esm2022/lib/breadcrumb/index.mjs +18 -0
  25. package/esm2022/lib/breadcrumb/public-api.mjs +20 -0
  26. package/esm2022/lib/category/categories-management/categories-management-mode.mjs +22 -0
  27. package/esm2022/lib/category/categories-management/categories-management.component.mjs +309 -0
  28. package/esm2022/lib/category/category.module.mjs +33 -0
  29. package/esm2022/lib/category/index.mjs +18 -0
  30. package/esm2022/lib/category/models/category-node.interface.mjs +18 -0
  31. package/esm2022/lib/category/public-api.mjs +23 -0
  32. package/esm2022/lib/category/services/category-tree-datasource.service.mjs +80 -0
  33. package/esm2022/lib/category/services/category.service.mjs +159 -0
  34. package/esm2022/lib/common/events/file.event.mjs +46 -0
  35. package/esm2022/lib/common/index.mjs +18 -0
  36. package/esm2022/lib/common/interfaces/saved-search.interface.mjs +18 -0
  37. package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +18 -0
  38. package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +37 -0
  39. package/esm2022/lib/common/models/allowable-operations.enum.mjs +30 -0
  40. package/esm2022/lib/common/models/ecm-company.model.mjs +19 -0
  41. package/esm2022/lib/common/models/ecm-user.model.mjs +45 -0
  42. package/esm2022/lib/common/models/file.model.mjs +53 -0
  43. package/esm2022/lib/common/models/node-metadata.model.mjs +23 -0
  44. package/esm2022/lib/common/models/permissions.enum.mjs +32 -0
  45. package/esm2022/lib/common/public-api.mjs +37 -0
  46. package/esm2022/lib/common/services/card-view-content-update.service.mjs +55 -0
  47. package/esm2022/lib/common/services/content.service.mjs +180 -0
  48. package/esm2022/lib/common/services/discovery-api.service.mjs +79 -0
  49. package/esm2022/lib/common/services/favorites-api.service.mjs +84 -0
  50. package/esm2022/lib/common/services/nodes-api.service.mjs +251 -0
  51. package/esm2022/lib/common/services/people-content.service.mjs +138 -0
  52. package/esm2022/lib/common/services/rendition.service.mjs +270 -0
  53. package/esm2022/lib/common/services/saved-searches.service.mjs +206 -0
  54. package/esm2022/lib/common/services/sites.service.mjs +243 -0
  55. package/esm2022/lib/common/services/upload.service.mjs +391 -0
  56. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +55 -0
  57. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +491 -0
  58. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +129 -0
  59. package/esm2022/lib/content-metadata/content-metadata.module.mjs +36 -0
  60. package/esm2022/lib/content-metadata/index.mjs +18 -0
  61. package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +18 -0
  62. package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +18 -0
  63. package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +18 -0
  64. package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +18 -0
  65. package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +18 -0
  66. package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +28 -0
  67. package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +18 -0
  68. package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +18 -0
  69. package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +18 -0
  70. package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +18 -0
  71. package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +18 -0
  72. package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +18 -0
  73. package/esm2022/lib/content-metadata/public-api.mjs +31 -0
  74. package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +107 -0
  75. package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +106 -0
  76. package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +76 -0
  77. package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +40 -0
  78. package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +108 -0
  79. package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +33 -0
  80. package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +99 -0
  81. package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +134 -0
  82. package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +52 -0
  83. package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +169 -0
  84. package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +256 -0
  85. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +618 -0
  86. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +66 -0
  87. package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +18 -0
  88. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +206 -0
  89. package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +50 -0
  90. package/esm2022/lib/content-node-selector/index.mjs +18 -0
  91. package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +48 -0
  92. package/esm2022/lib/content-node-selector/public-api.mjs +25 -0
  93. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +168 -0
  94. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +288 -0
  95. package/esm2022/lib/content-node-share/content-node-share.directive.mjs +102 -0
  96. package/esm2022/lib/content-node-share/content-node-share.module.mjs +35 -0
  97. package/esm2022/lib/content-node-share/content-node-share.settings.mjs +18 -0
  98. package/esm2022/lib/content-node-share/index.mjs +18 -0
  99. package/esm2022/lib/content-node-share/public-api.mjs +22 -0
  100. package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +83 -0
  101. package/esm2022/lib/content-type/content-type-dialog.component.mjs +58 -0
  102. package/esm2022/lib/content-type/content-type-metadata.interface.mjs +18 -0
  103. package/esm2022/lib/content-type/content-type.service.mjs +52 -0
  104. package/esm2022/lib/content-type/index.mjs +20 -0
  105. package/esm2022/lib/content.module.mjs +277 -0
  106. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +52 -0
  107. package/esm2022/lib/dialogs/dialog.module.mjs +52 -0
  108. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +111 -0
  109. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +38 -0
  110. package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +66 -0
  111. package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +44 -0
  112. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +147 -0
  113. package/esm2022/lib/dialogs/index.mjs +18 -0
  114. package/esm2022/lib/dialogs/library/library.dialog.mjs +225 -0
  115. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +116 -0
  116. package/esm2022/lib/dialogs/public-api.mjs +25 -0
  117. package/esm2022/lib/directives/auto-focus.directive.mjs +38 -0
  118. package/esm2022/lib/directives/check-allowable-operation.directive.mjs +126 -0
  119. package/esm2022/lib/directives/content-directive.module.mjs +75 -0
  120. package/esm2022/lib/directives/index.mjs +18 -0
  121. package/esm2022/lib/directives/library-favorite.directive.mjs +119 -0
  122. package/esm2022/lib/directives/library-membership.directive.mjs +202 -0
  123. package/esm2022/lib/directives/node-counter.directive.mjs +60 -0
  124. package/esm2022/lib/directives/node-delete.directive.mjs +177 -0
  125. package/esm2022/lib/directives/node-download.directive.mjs +138 -0
  126. package/esm2022/lib/directives/node-favorite.directive.mjs +193 -0
  127. package/esm2022/lib/directives/node-lock.directive.mjs +57 -0
  128. package/esm2022/lib/directives/node-restore.directive.mjs +218 -0
  129. package/esm2022/lib/directives/public-api.mjs +28 -0
  130. package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +60 -0
  131. package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +196 -0
  132. package/esm2022/lib/document-list/components/document-list.component.mjs +964 -0
  133. package/esm2022/lib/document-list/components/document-list.token.mjs +21 -0
  134. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +43 -0
  135. package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +107 -0
  136. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +133 -0
  137. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +93 -0
  138. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +88 -0
  139. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +120 -0
  140. package/esm2022/lib/document-list/components/node.event.mjs +30 -0
  141. package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +83 -0
  142. package/esm2022/lib/document-list/data/image-resolver.model.mjs +18 -0
  143. package/esm2022/lib/document-list/data/row-filter.model.mjs +18 -0
  144. package/esm2022/lib/document-list/data/share-data-row.model.mjs +102 -0
  145. package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +258 -0
  146. package/esm2022/lib/document-list/document-list.module.mjs +79 -0
  147. package/esm2022/lib/document-list/index.mjs +18 -0
  148. package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +18 -0
  149. package/esm2022/lib/document-list/models/content-action.model.mjs +59 -0
  150. package/esm2022/lib/document-list/models/document-folder.model.mjs +23 -0
  151. package/esm2022/lib/document-list/models/node-action.enum.mjs +27 -0
  152. package/esm2022/lib/document-list/models/permissions-style.model.mjs +27 -0
  153. package/esm2022/lib/document-list/models/permissions.model.mjs +26 -0
  154. package/esm2022/lib/document-list/models/preset.model.mjs +257 -0
  155. package/esm2022/lib/document-list/public-api.mjs +47 -0
  156. package/esm2022/lib/document-list/services/custom-resources.service.mjs +377 -0
  157. package/esm2022/lib/document-list/services/document-actions.service.mjs +142 -0
  158. package/esm2022/lib/document-list/services/document-list.service.mjs +175 -0
  159. package/esm2022/lib/document-list/services/folder-actions.service.mjs +137 -0
  160. package/esm2022/lib/document-list/services/lock.service.mjs +72 -0
  161. package/esm2022/lib/document-list/services/node-actions.service.mjs +122 -0
  162. package/esm2022/lib/group/index.mjs +18 -0
  163. package/esm2022/lib/group/public-api.mjs +18 -0
  164. package/esm2022/lib/group/services/group.service.mjs +84 -0
  165. package/esm2022/lib/infinite-scroll-datasource/index.mjs +18 -0
  166. package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +69 -0
  167. package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +18 -0
  168. package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +18 -0
  169. package/esm2022/lib/interfaces/index.mjs +18 -0
  170. package/esm2022/lib/interfaces/library-entity.interface.mjs +18 -0
  171. package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +18 -0
  172. package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +18 -0
  173. package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +18 -0
  174. package/esm2022/lib/interfaces/public-api.mjs +23 -0
  175. package/esm2022/lib/interfaces/restore-message-model.interface.mjs +19 -0
  176. package/esm2022/lib/legal-hold/index.mjs +18 -0
  177. package/esm2022/lib/legal-hold/public-api.mjs +18 -0
  178. package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +136 -0
  179. package/esm2022/lib/material.module.mjs +183 -0
  180. package/esm2022/lib/mock/alfresco-api.service.mock.mjs +43 -0
  181. package/esm2022/lib/mock/date-range-search-filter.mock.mjs +65 -0
  182. package/esm2022/lib/mock/document-library.model.mock.mjs +84 -0
  183. package/esm2022/lib/mock/document-list.component.mock.mjs +364 -0
  184. package/esm2022/lib/mock/index.mjs +18 -0
  185. package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +161 -0
  186. package/esm2022/lib/mock/public-api.mjs +27 -0
  187. package/esm2022/lib/mock/search-filter-mock.mjs +637 -0
  188. package/esm2022/lib/mock/search-query.mock.mjs +40 -0
  189. package/esm2022/lib/mock/search.component.mock.mjs +165 -0
  190. package/esm2022/lib/mock/search.service.mock.mjs +61 -0
  191. package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +281 -0
  192. package/esm2022/lib/new-version-uploader/index.mjs +18 -0
  193. package/esm2022/lib/new-version-uploader/models/index.mjs +18 -0
  194. package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +24 -0
  195. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +75 -0
  196. package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +33 -0
  197. package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +103 -0
  198. package/esm2022/lib/new-version-uploader/public-api.mjs +21 -0
  199. package/esm2022/lib/node-comments/index.mjs +18 -0
  200. package/esm2022/lib/node-comments/node-comments.component.mjs +44 -0
  201. package/esm2022/lib/node-comments/node-comments.module.mjs +33 -0
  202. package/esm2022/lib/node-comments/public-api.mjs +20 -0
  203. package/esm2022/lib/node-comments/services/node-comments.service.mjs +85 -0
  204. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +18 -0
  205. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +124 -0
  206. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +103 -0
  207. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +70 -0
  208. package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +45 -0
  209. package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +67 -0
  210. package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +56 -0
  211. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +103 -0
  212. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +88 -0
  213. package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +219 -0
  214. package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +134 -0
  215. package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +88 -0
  216. package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +82 -0
  217. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +112 -0
  218. package/esm2022/lib/permission-manager/index.mjs +18 -0
  219. package/esm2022/lib/permission-manager/models/member.model.mjs +59 -0
  220. package/esm2022/lib/permission-manager/models/permission.model.mjs +29 -0
  221. package/esm2022/lib/permission-manager/models/role.model.mjs +18 -0
  222. package/esm2022/lib/permission-manager/permission-manager.module.mjs +84 -0
  223. package/esm2022/lib/permission-manager/public-api.mjs +36 -0
  224. package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +78 -0
  225. package/esm2022/lib/permission-manager/services/node-permission.service.mjs +299 -0
  226. package/esm2022/lib/pipes/content-pipe.module.mjs +37 -0
  227. package/esm2022/lib/pipes/index.mjs +18 -0
  228. package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +69 -0
  229. package/esm2022/lib/pipes/public-api.mjs +19 -0
  230. package/esm2022/lib/prediction/index.mjs +18 -0
  231. package/esm2022/lib/prediction/public-api.mjs +18 -0
  232. package/esm2022/lib/prediction/services/index.mjs +18 -0
  233. package/esm2022/lib/prediction/services/prediction.service.mjs +57 -0
  234. package/esm2022/lib/search/components/empty-search-result.component.mjs +27 -0
  235. package/esm2022/lib/search/components/index.mjs +43 -0
  236. package/esm2022/lib/search/components/reset-search.directive.mjs +41 -0
  237. package/esm2022/lib/search/components/search-check-list/index.mjs +18 -0
  238. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +159 -0
  239. package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +18 -0
  240. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +170 -0
  241. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +47 -0
  242. package/esm2022/lib/search/components/search-control.component.mjs +181 -0
  243. package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +22 -0
  244. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +23 -0
  245. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +23 -0
  246. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +197 -0
  247. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +18 -0
  248. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +201 -0
  249. package/esm2022/lib/search/components/search-datetime-range/index.mjs +18 -0
  250. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +224 -0
  251. package/esm2022/lib/search/components/search-facet-field/index.mjs +18 -0
  252. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +133 -0
  253. package/esm2022/lib/search/components/search-filter/index.mjs +19 -0
  254. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +46 -0
  255. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +81 -0
  256. package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +18 -0
  257. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +155 -0
  258. package/esm2022/lib/search/components/search-filter-chips/index.mjs +23 -0
  259. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +105 -0
  260. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +110 -0
  261. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +129 -0
  262. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +64 -0
  263. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +44 -0
  264. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +110 -0
  265. package/esm2022/lib/search/components/search-filter-container/index.mjs +18 -0
  266. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +123 -0
  267. package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +19 -0
  268. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +36 -0
  269. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +64 -0
  270. package/esm2022/lib/search/components/search-form/index.mjs +18 -0
  271. package/esm2022/lib/search/components/search-form/search-form.component.mjs +53 -0
  272. package/esm2022/lib/search/components/search-input/index.mjs +18 -0
  273. package/esm2022/lib/search/components/search-input/search-input.component.mjs +109 -0
  274. package/esm2022/lib/search/components/search-logical-filter/index.mjs +18 -0
  275. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +164 -0
  276. package/esm2022/lib/search/components/search-number-range/index.mjs +18 -0
  277. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +155 -0
  278. package/esm2022/lib/search/components/search-panel/index.mjs +18 -0
  279. package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +44 -0
  280. package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +18 -0
  281. package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +23 -0
  282. package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +26 -0
  283. package/esm2022/lib/search/components/search-properties/index.mjs +22 -0
  284. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +244 -0
  285. package/esm2022/lib/search/components/search-properties/search-properties.mjs +18 -0
  286. package/esm2022/lib/search/components/search-radio/index.mjs +18 -0
  287. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +146 -0
  288. package/esm2022/lib/search/components/search-slider/index.mjs +18 -0
  289. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +120 -0
  290. package/esm2022/lib/search/components/search-sorting-picker/index.mjs +18 -0
  291. package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +77 -0
  292. package/esm2022/lib/search/components/search-text/index.mjs +18 -0
  293. package/esm2022/lib/search/components/search-text/search-text.component.mjs +135 -0
  294. package/esm2022/lib/search/components/search-widget-container/index.mjs +18 -0
  295. package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +113 -0
  296. package/esm2022/lib/search/components/search.component.mjs +153 -0
  297. package/esm2022/lib/search/forms/index.mjs +19 -0
  298. package/esm2022/lib/search/forms/live-error-state-matcher.mjs +23 -0
  299. package/esm2022/lib/search/forms/search-term-validator.mjs +26 -0
  300. package/esm2022/lib/search/index.mjs +18 -0
  301. package/esm2022/lib/search/mocks/index.mjs +18 -0
  302. package/esm2022/lib/search/mocks/search.service.mock.mjs +56 -0
  303. package/esm2022/lib/search/models/autocomplete-option.interface.mjs +22 -0
  304. package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +18 -0
  305. package/esm2022/lib/search/models/facet-field.interface.mjs +29 -0
  306. package/esm2022/lib/search/models/facet-query.interface.mjs +18 -0
  307. package/esm2022/lib/search/models/facet-widget.interface.mjs +18 -0
  308. package/esm2022/lib/search/models/filter-query.interface.mjs +18 -0
  309. package/esm2022/lib/search/models/filter-search.interface.mjs +18 -0
  310. package/esm2022/lib/search/models/index.mjs +34 -0
  311. package/esm2022/lib/search/models/response-facet-query-list.model.mjs +31 -0
  312. package/esm2022/lib/search/models/search-category.interface.mjs +18 -0
  313. package/esm2022/lib/search/models/search-configuration.interface.mjs +18 -0
  314. package/esm2022/lib/search/models/search-filter-list.model.mjs +148 -0
  315. package/esm2022/lib/search/models/search-form.interface.mjs +18 -0
  316. package/esm2022/lib/search/models/search-range.interface.mjs +18 -0
  317. package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +18 -0
  318. package/esm2022/lib/search/models/search-widget-settings.interface.mjs +18 -0
  319. package/esm2022/lib/search/models/search-widget.interface.mjs +18 -0
  320. package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +18 -0
  321. package/esm2022/lib/search/public-api.mjs +24 -0
  322. package/esm2022/lib/search/search-configuration.token.mjs +19 -0
  323. package/esm2022/lib/search/search.module.mjs +192 -0
  324. package/esm2022/lib/search/services/base-query-builder.service.mjs +509 -0
  325. package/esm2022/lib/search/services/index.mjs +24 -0
  326. package/esm2022/lib/search/services/search-configuration.service.mjs +50 -0
  327. package/esm2022/lib/search/services/search-facet-filters.service.mjs +374 -0
  328. package/esm2022/lib/search/services/search-filter.service.mjs +56 -0
  329. package/esm2022/lib/search/services/search-header-query-builder.service.mjs +136 -0
  330. package/esm2022/lib/search/services/search-query-builder.service.mjs +48 -0
  331. package/esm2022/lib/search/services/search.service.mjs +89 -0
  332. package/esm2022/lib/search-ai/index.mjs +18 -0
  333. package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +18 -0
  334. package/esm2022/lib/search-ai/public-api.mjs +19 -0
  335. package/esm2022/lib/search-ai/services/search-ai.service.mjs +103 -0
  336. package/esm2022/lib/security/index.mjs +18 -0
  337. package/esm2022/lib/security/public-api.mjs +18 -0
  338. package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +18 -0
  339. package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +18 -0
  340. package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +274 -0
  341. package/esm2022/lib/services/alfresco-api.interface.mjs +18 -0
  342. package/esm2022/lib/services/alfresco-api.service.mjs +120 -0
  343. package/esm2022/lib/services/index.mjs +18 -0
  344. package/esm2022/lib/services/public-api.mjs +18 -0
  345. package/esm2022/lib/tag/index.mjs +18 -0
  346. package/esm2022/lib/tag/public-api.mjs +24 -0
  347. package/esm2022/lib/tag/services/tag.service.mjs +171 -0
  348. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +115 -0
  349. package/esm2022/lib/tag/tag-list/tag-list.component.mjs +98 -0
  350. package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +80 -0
  351. package/esm2022/lib/tag/tag.module.mjs +37 -0
  352. package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +27 -0
  353. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +371 -0
  354. package/esm2022/lib/testing/content.testing.module.mjs +56 -0
  355. package/esm2022/lib/tree/components/tree.component.mjs +313 -0
  356. package/esm2022/lib/tree/index.mjs +18 -0
  357. package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +18 -0
  358. package/esm2022/lib/tree/models/tree-node.interface.mjs +22 -0
  359. package/esm2022/lib/tree/models/tree-response.interface.mjs +18 -0
  360. package/esm2022/lib/tree/public-api.mjs +23 -0
  361. package/esm2022/lib/tree/services/tree.service.mjs +134 -0
  362. package/esm2022/lib/tree/tree.module.mjs +33 -0
  363. package/esm2022/lib/tree-view/components/tree-view.component.mjs +76 -0
  364. package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +99 -0
  365. package/esm2022/lib/tree-view/index.mjs +18 -0
  366. package/esm2022/lib/tree-view/models/tree-view.model.mjs +28 -0
  367. package/esm2022/lib/tree-view/public-api.mjs +22 -0
  368. package/esm2022/lib/tree-view/services/tree-view.service.mjs +38 -0
  369. package/esm2022/lib/tree-view/tree-view.module.mjs +33 -0
  370. package/esm2022/lib/upload/components/base-upload/upload-base.mjs +176 -0
  371. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +191 -0
  372. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +93 -0
  373. package/esm2022/lib/upload/components/file-uploading-list.component.mjs +124 -0
  374. package/esm2022/lib/upload/components/upload-button.component.mjs +134 -0
  375. package/esm2022/lib/upload/components/upload-drag-area.component.mjs +112 -0
  376. package/esm2022/lib/upload/components/upload-files.event.mjs +41 -0
  377. package/esm2022/lib/upload/components/upload-version-button.component.mjs +55 -0
  378. package/esm2022/lib/upload/directives/file-draggable.directive.mjs +154 -0
  379. package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +75 -0
  380. package/esm2022/lib/upload/index.mjs +18 -0
  381. package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +39 -0
  382. package/esm2022/lib/upload/public-api.mjs +29 -0
  383. package/esm2022/lib/upload/upload.module.mjs +72 -0
  384. package/esm2022/lib/version-compatibility/index.mjs +18 -0
  385. package/esm2022/lib/version-compatibility/public-api.mjs +20 -0
  386. package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +26 -0
  387. package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +53 -0
  388. package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +33 -0
  389. package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +76 -0
  390. package/esm2022/lib/version-manager/content-version.service.mjs +53 -0
  391. package/esm2022/lib/version-manager/index.mjs +18 -0
  392. package/esm2022/lib/version-manager/public-api.mjs +23 -0
  393. package/esm2022/lib/version-manager/version-comparison.component.mjs +43 -0
  394. package/esm2022/lib/version-manager/version-list.component.mjs +216 -0
  395. package/esm2022/lib/version-manager/version-manager.component.mjs +146 -0
  396. package/esm2022/lib/version-manager/version-manager.module.mjs +48 -0
  397. package/esm2022/lib/version-manager/version-upload.component.mjs +155 -0
  398. package/esm2022/lib/viewer/alfresco-viewer.module.mjs +33 -0
  399. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +401 -0
  400. package/esm2022/lib/viewer/index.mjs +18 -0
  401. package/esm2022/lib/viewer/public-api.mjs +19 -0
  402. package/esm2022/public-api.mjs +56 -0
  403. package/fesm2022/adf-content-services.mjs +796 -783
  404. package/fesm2022/adf-content-services.mjs.map +1 -1
  405. package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
  406. package/package.json +5 -3
@@ -0,0 +1,964 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /* eslint-disable rxjs/no-subject-value */
18
+ /* eslint-disable @typescript-eslint/naming-convention */
19
+ import { AppConfigService, ColumnsSelectorComponent, CustomEmptyContentTemplateDirective, CustomLoadingContentTemplateDirective, CustomNoPermissionTemplateDirective, DataColumnListComponent, DataSorting, DataTableComponent, DataTableSchema, DataTableService, EmptyListComponent, LoadingContentTemplateDirective, MainMenuDataTableTemplateDirective, NoContentTemplateDirective, NoPermissionTemplateDirective, ShowHeaderMode, ThumbnailService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
20
+ import { NodePaging, NodesApi, Pagination } from '@alfresco/js-api';
21
+ import { Component, ContentChild, DestroyRef, ElementRef, EventEmitter, HostListener, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
22
+ import { MatDialog } from '@angular/material/dialog';
23
+ import { BehaviorSubject, of, Subject } from 'rxjs';
24
+ import { ContentService, NodesApiService } from '../../common';
25
+ import { ShareDataTableAdapter } from '../data/share-datatable-adapter';
26
+ import { ContentActionModel } from '../models/content-action.model';
27
+ import { presetsDefaultModel } from '../models/preset.model';
28
+ import { DocumentListService } from '../services/document-list.service';
29
+ import { LockService } from '../services/lock.service';
30
+ import { ADF_DOCUMENT_PARENT_COMPONENT } from './document-list.token';
31
+ import { FileAutoDownloadComponent } from './file-auto-download/file-auto-download.component';
32
+ import { NodeEntityEvent, NodeEntryEvent } from './node.event';
33
+ import { CommonModule } from '@angular/common';
34
+ import { FilterHeaderComponent } from './filter-header/filter-header.component';
35
+ import { TranslateModule } from '@ngx-translate/core';
36
+ import { MatIconModule } from '@angular/material/icon';
37
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
38
+ import { AlfrescoApiService } from '../../services/alfresco-api.service';
39
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
40
+ import * as i0 from "@angular/core";
41
+ import * as i1 from "../services/document-list.service";
42
+ import * as i2 from "@alfresco/adf-core";
43
+ import * as i3 from "../../common";
44
+ import * as i4 from "../../services/alfresco-api.service";
45
+ import * as i5 from "../services/lock.service";
46
+ import * as i6 from "@angular/material/dialog";
47
+ import * as i7 from "@angular/common";
48
+ import * as i8 from "@ngx-translate/core";
49
+ import * as i9 from "@angular/material/icon";
50
+ import * as i10 from "@angular/material/progress-spinner";
51
+ const BYTES_TO_MB_CONVERSION_VALUE = 1048576;
52
+ export class DocumentListComponent extends DataTableSchema {
53
+ static { this.SINGLE_CLICK_NAVIGATION = 'click'; }
54
+ static { this.DOUBLE_CLICK_NAVIGATION = 'dblclick'; }
55
+ /**
56
+ * Custom function to choose whether to show or hide rows.
57
+ * See the [Row Filter Model](row-filter.model.md) page for
58
+ * more information.
59
+ */
60
+ set rowFilter(rowFilter) {
61
+ this._rowFilter = rowFilter;
62
+ if (this.data) {
63
+ this.data.setFilter(this._rowFilter);
64
+ if (this.currentFolderId) {
65
+ this.reload();
66
+ }
67
+ }
68
+ }
69
+ get rowFilter() {
70
+ return this._rowFilter;
71
+ }
72
+ /** Sets columns visibility for DataTableSchema */
73
+ set setColumnsVisibility(columnsVisibility) {
74
+ this.columnsVisibility = columnsVisibility;
75
+ }
76
+ /** Sets columns width for DataTableSchema */
77
+ set setColumnsWidths(columnsWidths) {
78
+ this.columnsWidths = columnsWidths;
79
+ }
80
+ /** Sets columns order for DataTableSchema */
81
+ set setColumnsOrder(columnsOrder) {
82
+ this.columnsOrder = columnsOrder;
83
+ }
84
+ get nodesApi() {
85
+ this._nodesApi = this._nodesApi ?? new NodesApi(this.alfrescoApiService.getInstance());
86
+ return this._nodesApi;
87
+ }
88
+ constructor(documentListService, elementRef, appConfig, userPreferencesService, contentService, thumbnailService, alfrescoApiService, nodeService, dataTableService, lockService, dialog) {
89
+ super(appConfig, 'default', presetsDefaultModel);
90
+ this.documentListService = documentListService;
91
+ this.elementRef = elementRef;
92
+ this.appConfig = appConfig;
93
+ this.userPreferencesService = userPreferencesService;
94
+ this.contentService = contentService;
95
+ this.thumbnailService = thumbnailService;
96
+ this.alfrescoApiService = alfrescoApiService;
97
+ this.nodeService = nodeService;
98
+ this.dataTableService = dataTableService;
99
+ this.lockService = lockService;
100
+ this.dialog = dialog;
101
+ this.DEFAULT_PAGINATION = new Pagination({
102
+ hasMoreItems: false,
103
+ skipCount: 0,
104
+ maxItems: 25,
105
+ totalItems: 0
106
+ });
107
+ this.DEFAULT_SORTING = [new DataSorting('name', 'asc'), new DataSorting('isFolder', 'desc')];
108
+ /**
109
+ * Define a set of CSS styles to apply depending on the permission
110
+ * of the user on that node. See the Permission Style model
111
+ * page for further details and examples.
112
+ */
113
+ this.permissionsStyle = [];
114
+ /** The default route for all the location-based columns (if declared). */
115
+ this.locationFormat = '/';
116
+ /** Toggles navigation to folder content or file preview */
117
+ this.navigate = true;
118
+ /** Toggles the header */
119
+ this.showHeader = ShowHeaderMode.Data;
120
+ /**
121
+ * User interaction for folder navigation or file preview.
122
+ * Valid values are "click" and "dblclick". Default value: "dblclick"
123
+ */
124
+ this.navigationMode = DocumentListComponent.DOUBLE_CLICK_NAVIGATION; // click|dblclick
125
+ /** Show document thumbnails rather than icons */
126
+ this.thumbnails = false;
127
+ /**
128
+ * Row selection mode. Can be null, `single` or `multiple`. For `multiple` mode,
129
+ * you can use Cmd (macOS) or Ctrl (Win) modifier key to toggle selection for multiple rows.
130
+ */
131
+ this.selectionMode = 'single'; // null|single|multiple
132
+ /** Toggles multiselect mode */
133
+ this.multiselect = false;
134
+ /** Toggles content actions for each row */
135
+ this.contentActions = false;
136
+ /** Position of the content actions dropdown menu. Can be set to "left" or "right". */
137
+ this.contentActionsPosition = 'right'; // left|right
138
+ /** Toggles context menus for each row */
139
+ this.contextMenuActions = false;
140
+ /** Custom image for empty folder. Default value: './assets/images/empty_doc_lib.svg' */
141
+ this.emptyFolderImageUrl = './assets/images/empty_doc_lib.svg';
142
+ /**
143
+ * When true, this enables you to drop files directly into subfolders shown
144
+ * as items in the list or into another file to trigger updating it's version.
145
+ * When false, the dropped file will be added to the
146
+ * current folder (ie, the one containing all the items shown in the list).
147
+ * See the Upload directive for further details about how the file drop is
148
+ * handled.
149
+ */
150
+ this.allowDropFiles = false;
151
+ /**
152
+ * Defines default sorting. The format is an array of 2 strings `[key, direction]`
153
+ * i.e. `['name', 'desc']` or `['name', 'asc']`. Set this value only if you want to
154
+ * override the default sorting detected by the component based on columns.
155
+ */
156
+ this.sorting = ['name', 'asc'];
157
+ /**
158
+ * Defines default sorting. The format is an array of strings `[key direction, otherKey otherDirection]`
159
+ * i.e. `['name desc', 'nodeType asc']` or `['name asc']`. Set this value if you want a base
160
+ * rule to be added to the sorting apart from the one driven by the header.
161
+ */
162
+ this.additionalSorting = new DataSorting('isFolder', 'desc');
163
+ /**
164
+ * Defines sorting mode. Can be either `client` (items in the list
165
+ * are sorted client-side) or `server` (the ordering supplied by the
166
+ * server is used without further client-side sorting).
167
+ * Note that the `server` option *does not* request the server to sort the data
168
+ * before delivering it.
169
+ */
170
+ this.sortingMode = 'server';
171
+ /**
172
+ * Toggles the loading state and animated spinners for the component. Used in
173
+ * combination with `navigate=false` to perform custom navigation and loading
174
+ * state indication.
175
+ */
176
+ this.loading = false;
177
+ this._rowFilter = null;
178
+ /**
179
+ * Custom function to choose image file paths to show. See the
180
+ * [Image Resolver Model](image-resolver.model.md) page for
181
+ * more information.
182
+ */
183
+ this.imageResolver = null;
184
+ /** Toggles the sticky header mode. */
185
+ this.stickyHeader = false;
186
+ /** Toggles the header filters mode. */
187
+ this.headerFilters = false;
188
+ /** The ID of the folder node to display or a reserved string alias for special sources */
189
+ this.currentFolderId = null;
190
+ /**
191
+ * Array of nodes to be pre-selected. All nodes in the
192
+ * array are pre-selected in multi selection mode, but only the first node
193
+ * is pre-selected in single selection mode.
194
+ */
195
+ this.preselectNodes = [];
196
+ /** The Document list will show all the nodes contained in the NodePaging entity */
197
+ this.node = null;
198
+ /** Default value is stored in the user preference settings. Use this only if you are not using pagination. */
199
+ this.maxItems = this.DEFAULT_PAGINATION.maxItems;
200
+ /** Enables column resizing for datatable */
201
+ this.isResizingEnabled = false;
202
+ /** Enables blur when resizing datatable columns */
203
+ this.blurOnResize = true;
204
+ /** Display checkboxes in datatable rows on hover only */
205
+ this.displayCheckboxesOnHover = false;
206
+ /** Display drag and drop hint. */
207
+ this.displayDragAndDropHint = true;
208
+ /** Emitted when the user clicks a list node */
209
+ this.nodeClick = new EventEmitter();
210
+ /** Emitted when the user double-clicks a list node */
211
+ this.nodeDblClick = new EventEmitter();
212
+ /** Emitted when the current display folder changes */
213
+ this.folderChange = new EventEmitter();
214
+ /**
215
+ * Emitted when the user acts upon files with either single or double click
216
+ * (depends on `navigation-mode`). Useful for integration with the
217
+ * Viewer component.
218
+ */
219
+ this.preview = new EventEmitter();
220
+ /** Emitted when the Document List has loaded all items and is ready for use */
221
+ this.ready = new EventEmitter();
222
+ /** Emitted when the API fails to get the Document List data */
223
+ this.error = new EventEmitter();
224
+ /** Emitted when the node selection change */
225
+ this.nodeSelected = new EventEmitter();
226
+ /** Emitted when a filter value is selected */
227
+ this.filterSelection = new EventEmitter();
228
+ /** Emitted when column widths change */
229
+ this.columnsWidthChanged = new EventEmitter();
230
+ /** Emitted when columns visibility change */
231
+ this.columnsVisibilityChanged = new EventEmitter();
232
+ /** Emitted when columns order change */
233
+ this.columnsOrderChanged = new EventEmitter();
234
+ /** Emitted when the selected row items count in the table changed. */
235
+ this.selectedItemsCountChanged = new EventEmitter();
236
+ this.actions = [];
237
+ this.contextActionHandler = new Subject();
238
+ this.noPermission = false;
239
+ this.selection = new Array();
240
+ this.$folderNode = new Subject();
241
+ this.allowFiltering = true;
242
+ this.orderBy = null;
243
+ this.preselectedRows = [];
244
+ this._pagination = this.DEFAULT_PAGINATION;
245
+ this.pagination = new BehaviorSubject(this.DEFAULT_PAGINATION);
246
+ this.sortingSubject = new BehaviorSubject(this.DEFAULT_SORTING);
247
+ this.rowMenuCache = {};
248
+ this.destroyRef = inject(DestroyRef);
249
+ this.nodeService.nodeUpdated.pipe(takeUntilDestroyed()).subscribe((node) => {
250
+ this.dataTableService.rowUpdate.next({ id: node.id, obj: { entry: node } });
251
+ });
252
+ this.userPreferencesService
253
+ .select(UserPreferenceValues.PaginationSize)
254
+ .pipe(takeUntilDestroyed())
255
+ .subscribe((pagSize) => {
256
+ this.maxItems = this._pagination.maxItems = pagSize;
257
+ });
258
+ }
259
+ getContextActions(node) {
260
+ if (node?.entry) {
261
+ const actions = this.getNodeActions(node);
262
+ if (actions && actions.length > 0) {
263
+ return actions.map((currentAction) => ({
264
+ model: currentAction,
265
+ node,
266
+ subject: this.contextActionHandler
267
+ }));
268
+ }
269
+ }
270
+ return null;
271
+ }
272
+ getDefaultSorting() {
273
+ let defaultSorting;
274
+ if (Array.isArray(this.sorting)) {
275
+ const [key, direction] = this.sorting;
276
+ defaultSorting = new DataSorting(key, direction);
277
+ }
278
+ else {
279
+ defaultSorting = new DataSorting(this.sorting.key, this.sorting.direction);
280
+ }
281
+ return defaultSorting;
282
+ }
283
+ isMobile() {
284
+ return !!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
285
+ }
286
+ isEmpty() {
287
+ return !this.data || this.data.getRows().length === 0;
288
+ }
289
+ ngOnInit() {
290
+ this.rowMenuCache = {};
291
+ this.loadLayoutPresets();
292
+ this.data = new ShareDataTableAdapter(this.thumbnailService, this.contentService, null, this.getDefaultSorting(), this.sortingMode, this.allowDropFiles);
293
+ this.data.thumbnails = this.thumbnails;
294
+ this.data.permissionsStyle = this.permissionsStyle;
295
+ if (this._rowFilter) {
296
+ this.data.setFilter(this._rowFilter);
297
+ }
298
+ if (this.imageResolver) {
299
+ this.data.setImageResolver(this.imageResolver);
300
+ }
301
+ this.contextActionHandler.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((val) => this.contextActionCallback(val));
302
+ this.enforceSingleClickNavigationForMobile();
303
+ if (this.filterValue && Object.keys(this.filterValue).length > 0) {
304
+ this.showHeader = ShowHeaderMode.Always;
305
+ }
306
+ if (this.columnsPresetKey) {
307
+ this.setPresetKey(this.columnsPresetKey);
308
+ }
309
+ this.documentListService.reload$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
310
+ this.resetSelection();
311
+ this.reload();
312
+ });
313
+ this.documentListService.resetSelection$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
314
+ this.resetSelection();
315
+ });
316
+ }
317
+ ngAfterContentInit() {
318
+ if (this.columnList) {
319
+ this.columnList.columns.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
320
+ this.createColumns();
321
+ this.data.setColumns(this.columns);
322
+ });
323
+ }
324
+ this.createDatatableSchema();
325
+ this.data.setColumns(this.columns);
326
+ }
327
+ ngOnChanges(changes) {
328
+ if (!changes['preselectNodes']) {
329
+ this.resetSelection();
330
+ }
331
+ if (Array.isArray(this.sorting)) {
332
+ const [key, direction] = this.sorting;
333
+ this.orderBy = this.buildOrderByArray(key, direction);
334
+ }
335
+ else {
336
+ this.orderBy = this.buildOrderByArray(this.sorting.key, this.sorting.direction);
337
+ }
338
+ if (this.data) {
339
+ this.data.thumbnails = this.thumbnails;
340
+ }
341
+ if (changes.sortingMode && !changes.sortingMode.firstChange && this.data) {
342
+ this.data.sortingMode = changes.sortingMode.currentValue;
343
+ }
344
+ if (changes.sorting && !changes.sorting.firstChange && this.data) {
345
+ const newValue = changes.sorting.currentValue;
346
+ if (newValue && newValue.length > 0) {
347
+ const [key, direction] = newValue;
348
+ this.data.setSorting(new DataSorting(key, direction));
349
+ }
350
+ }
351
+ if (this.currentFolderId && changes['currentFolderId']?.currentValue !== changes['currentFolderId']?.previousValue) {
352
+ this.loadFolder();
353
+ }
354
+ if (this.data) {
355
+ if (changes.node?.currentValue) {
356
+ const merge = this._pagination ? this._pagination.merge : false;
357
+ this.data.loadPage(changes.node.currentValue, merge, null);
358
+ this.preserveExistingSelection();
359
+ this.onPreselectNodes();
360
+ this.onDataReady(changes.node.currentValue);
361
+ }
362
+ else if (changes.imageResolver) {
363
+ this.data.setImageResolver(changes.imageResolver.currentValue);
364
+ }
365
+ }
366
+ }
367
+ reload(hideLoadingSpinner = false) {
368
+ this.resetSelection();
369
+ this.reloadWithoutResettingSelection(hideLoadingSpinner);
370
+ }
371
+ reloadWithoutResettingSelection(hideLoadingSpinner = false) {
372
+ if (this.node) {
373
+ if (this.data) {
374
+ this.data.loadPage(this.node, this._pagination.merge, null);
375
+ this.preserveExistingSelection();
376
+ }
377
+ this.onPreselectNodes();
378
+ this.syncPagination();
379
+ this.onDataReady(this.node);
380
+ }
381
+ else {
382
+ this.loadFolder(hideLoadingSpinner);
383
+ }
384
+ }
385
+ contextActionCallback(action) {
386
+ if (action) {
387
+ this.executeContentAction(action.node, action.model);
388
+ }
389
+ }
390
+ getNodeActions(node) {
391
+ if (node?.entry) {
392
+ let target = null;
393
+ if (node.entry.isFile) {
394
+ target = 'document';
395
+ }
396
+ else if (node.entry.isFolder) {
397
+ target = 'folder';
398
+ }
399
+ if (target) {
400
+ const actions = this.rowMenuCache[node.entry.id];
401
+ if (actions) {
402
+ actions.forEach((action) => {
403
+ this.refreshAction(action, node);
404
+ });
405
+ return actions;
406
+ }
407
+ const actionsByTarget = this.actions
408
+ .filter((entry) => {
409
+ const isVisible = typeof entry.visible === 'function' ? entry.visible(node) : entry.visible;
410
+ return isVisible && entry.target.toLowerCase() === target;
411
+ })
412
+ .map((action) => new ContentActionModel(action));
413
+ actionsByTarget.forEach((action) => {
414
+ this.refreshAction(action, node);
415
+ });
416
+ this.rowMenuCache[node.entry.id] = actionsByTarget;
417
+ return actionsByTarget;
418
+ }
419
+ }
420
+ return [];
421
+ }
422
+ refreshAction(action, node) {
423
+ action.disabled = this.isActionDisabled(action, node);
424
+ action.visible = this.isActionVisible(action, node);
425
+ }
426
+ isActionVisible(action, node) {
427
+ if (typeof action.visible === 'function') {
428
+ return action.visible(node);
429
+ }
430
+ return action.visible;
431
+ }
432
+ isActionDisabled(action, node) {
433
+ if (typeof action.disabled === 'function') {
434
+ return action.disabled(node);
435
+ }
436
+ if ((action.permission && action.disableWithNoPermission && !this.contentService.hasAllowableOperations(node.entry, action.permission)) ||
437
+ this.lockService.isLocked(node.entry)) {
438
+ return true;
439
+ }
440
+ else {
441
+ return action.disabled;
442
+ }
443
+ }
444
+ onShowContextMenu(e) {
445
+ if (e && this.contextMenuActions) {
446
+ e.preventDefault();
447
+ }
448
+ }
449
+ navigateTo(node) {
450
+ if (typeof node === 'string') {
451
+ this.resetNewFolderPagination();
452
+ this.currentFolderId = node;
453
+ this.folderChange.emit(new NodeEntryEvent({ id: node }));
454
+ this.reload();
455
+ return true;
456
+ }
457
+ else {
458
+ if (this.canNavigateFolder(node)) {
459
+ this.resetNewFolderPagination();
460
+ this.currentFolderId = this.getNodeFolderDestinationId(node);
461
+ this.folderChange.emit(new NodeEntryEvent({ id: this.currentFolderId }));
462
+ this.reload();
463
+ return true;
464
+ }
465
+ }
466
+ return false;
467
+ }
468
+ getNodeFolderDestinationId(node) {
469
+ return this.isLinkFolder(node) ? node.properties['cm:destination'] : node.id;
470
+ }
471
+ isLinkFolder(node) {
472
+ return node.nodeType === 'app:folderlink' && node.properties?.['cm:destination'];
473
+ }
474
+ updateCustomSourceData(nodeId) {
475
+ this.currentFolderId = nodeId;
476
+ }
477
+ /**
478
+ * Invoked when executing content action for a document or folder.
479
+ *
480
+ * @param node Node to be the context of the execution.
481
+ * @param action Action to be executed against the context.
482
+ */
483
+ executeContentAction(node, action) {
484
+ if (node?.entry && action) {
485
+ const handlerSub = typeof action.handler === 'function' ? action.handler(node, this, action.permission) : of(true);
486
+ if (typeof action.execute === 'function' && handlerSub) {
487
+ handlerSub.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => action.execute(node));
488
+ }
489
+ }
490
+ }
491
+ setLoadingState(value) {
492
+ if (this.data?.getRows().length > 0) {
493
+ if (value) {
494
+ clearTimeout(this.loadingTimeout);
495
+ this.loadingTimeout = setTimeout(() => {
496
+ this.loading = true;
497
+ }, 1000);
498
+ }
499
+ else {
500
+ clearTimeout(this.loadingTimeout);
501
+ this.loading = false;
502
+ }
503
+ }
504
+ else {
505
+ clearTimeout(this.loadingTimeout);
506
+ this.loading = value;
507
+ }
508
+ }
509
+ loadFolder(hideLoadingSpinner = false) {
510
+ if (!hideLoadingSpinner) {
511
+ this.setLoadingState(true);
512
+ }
513
+ if (this.documentListService.isCustomSourceService(this.currentFolderId)) {
514
+ this.updateCustomSourceData(this.currentFolderId);
515
+ }
516
+ this.documentListService.loadFolderByNodeId(this.currentFolderId, this._pagination, this.includeFields, this.where, this.orderBy).subscribe((documentNode) => {
517
+ if (documentNode.currentNode) {
518
+ this.folderNode = documentNode.currentNode.entry;
519
+ this.$folderNode.next(documentNode.currentNode.entry);
520
+ }
521
+ this.onPageLoaded(documentNode.children);
522
+ }, (err) => {
523
+ this.handleError(err);
524
+ });
525
+ }
526
+ resetSelection() {
527
+ this.dataTable.resetSelection();
528
+ this.selection = [];
529
+ this.noPermission = false;
530
+ }
531
+ onPageLoaded(nodePaging) {
532
+ if (nodePaging) {
533
+ if (this.data) {
534
+ this.data.loadPage(nodePaging, this._pagination.merge, this.allowDropFiles);
535
+ this.preserveExistingSelection();
536
+ }
537
+ this.onPreselectNodes();
538
+ this.setLoadingState(false);
539
+ this.onDataReady(nodePaging);
540
+ }
541
+ }
542
+ onSortingChanged(event) {
543
+ this.orderBy = this.buildOrderByArray(event.detail.sortingKey, event.detail.direction);
544
+ this.sorting = [event.detail.sortingKey, event.detail.direction];
545
+ this.sortingSubject.next([this.additionalSorting, event.detail]);
546
+ if (this.sortingMode === 'server') {
547
+ this.reload();
548
+ }
549
+ }
550
+ buildOrderByArray(currentKey, currentDirection) {
551
+ return [`${this.additionalSorting.key} ${this.additionalSorting.direction}`, `${currentKey} ${currentDirection}`];
552
+ }
553
+ onPreviewFile(node) {
554
+ if (node) {
555
+ const sizeInMB = node.entry?.content?.sizeInBytes / BYTES_TO_MB_CONVERSION_VALUE;
556
+ const fileAutoDownloadFlag = this.appConfig.get('viewer.enableFileAutoDownload', true);
557
+ const sizeThreshold = this.appConfig.get('viewer.fileAutoDownloadSizeThresholdInMB', 15);
558
+ if (fileAutoDownloadFlag && sizeInMB && sizeInMB > sizeThreshold) {
559
+ this.dialog.open(FileAutoDownloadComponent, { disableClose: true, data: node });
560
+ }
561
+ else {
562
+ this.preview.emit(new NodeEntityEvent(node));
563
+ }
564
+ }
565
+ }
566
+ onColumnsVisibilityChange(columns) {
567
+ this.columnsVisibility = columns.reduce((visibleColumnsMap, column) => {
568
+ if (column.isHidden !== undefined) {
569
+ visibleColumnsMap[column.id] = !column.isHidden;
570
+ }
571
+ return visibleColumnsMap;
572
+ }, {});
573
+ this.createColumns();
574
+ this.data.setColumns(this.columns);
575
+ this.columnsVisibilityChanged.emit(this.columnsVisibility);
576
+ }
577
+ onColumnOrderChange(columnsWithNewOrder) {
578
+ this.columnsOrder = columnsWithNewOrder.map((column) => column.id);
579
+ this.createColumns();
580
+ this.columnsOrderChanged.emit(this.columnsOrder);
581
+ }
582
+ onColumnsWidthChange(columns) {
583
+ const newColumnsWidths = columns.reduce((widthsColumnsMap, column) => {
584
+ if (column.width) {
585
+ widthsColumnsMap[column.id] = Math.ceil(column.width);
586
+ }
587
+ return widthsColumnsMap;
588
+ }, {});
589
+ this.columnsWidths = { ...this.columnsWidths, ...newColumnsWidths };
590
+ this.createColumns();
591
+ this.columnsWidthChanged.emit(this.columnsWidths);
592
+ }
593
+ onSelectedItemsCountChanged(count) {
594
+ this.selectedItemsCountChanged.emit(count);
595
+ }
596
+ onNodeClick(nodeEntry) {
597
+ const domEvent = new CustomEvent('node-click', {
598
+ detail: {
599
+ sender: this,
600
+ node: nodeEntry
601
+ },
602
+ bubbles: true
603
+ });
604
+ this.elementRef.nativeElement.dispatchEvent(domEvent);
605
+ const event = new NodeEntityEvent(nodeEntry);
606
+ this.nodeClick.emit(event);
607
+ if (!event.defaultPrevented) {
608
+ if (this.navigate && this.navigationMode === DocumentListComponent.SINGLE_CLICK_NAVIGATION) {
609
+ this.executeActionClick(nodeEntry);
610
+ }
611
+ }
612
+ }
613
+ onNodeDblClick(nodeEntry) {
614
+ const domEvent = new CustomEvent('node-dblclick', {
615
+ detail: {
616
+ sender: this,
617
+ node: nodeEntry
618
+ },
619
+ bubbles: true
620
+ });
621
+ this.elementRef.nativeElement.dispatchEvent(domEvent);
622
+ const event = new NodeEntityEvent(nodeEntry);
623
+ this.nodeDblClick.emit(event);
624
+ if (!event.defaultPrevented) {
625
+ if (this.navigate && this.navigationMode === DocumentListComponent.DOUBLE_CLICK_NAVIGATION) {
626
+ this.executeActionClick(nodeEntry);
627
+ }
628
+ }
629
+ }
630
+ executeActionClick(nodeEntry) {
631
+ if (nodeEntry?.entry) {
632
+ if (nodeEntry.entry.isFile) {
633
+ this.onPreviewFile(nodeEntry);
634
+ }
635
+ if (nodeEntry.entry.isFolder) {
636
+ this.navigateTo(nodeEntry.entry);
637
+ }
638
+ if (nodeEntry.entry['guid']) {
639
+ const options = {
640
+ include: this.includeFields
641
+ };
642
+ this.nodesApi.getNode(nodeEntry.entry['guid'], options).then((node) => {
643
+ this.navigateTo(node.entry);
644
+ });
645
+ }
646
+ }
647
+ }
648
+ onNodeSelect(event) {
649
+ this.selection = event.selection.map((entry) => entry.node);
650
+ const domEvent = new CustomEvent('node-select', {
651
+ detail: {
652
+ node: event.row ? event.row.node : null,
653
+ selection: this.selection
654
+ },
655
+ bubbles: true
656
+ });
657
+ this.nodeSelected.emit(this.selection);
658
+ this.elementRef.nativeElement.dispatchEvent(domEvent);
659
+ }
660
+ onNodeUnselect(event) {
661
+ this.selection = event.selection.map((entry) => entry.node);
662
+ const domEvent = new CustomEvent('node-unselect', {
663
+ detail: {
664
+ node: event.row ? event.row.node : null,
665
+ selection: this.selection
666
+ },
667
+ bubbles: true
668
+ });
669
+ this.nodeSelected.emit(this.selection);
670
+ this.elementRef.nativeElement.dispatchEvent(domEvent);
671
+ }
672
+ onShowRowContextMenu(event) {
673
+ if (this.contextMenuActions) {
674
+ const args = event.value;
675
+ const node = args.row.node;
676
+ if (node) {
677
+ args.actions = this.getContextActions(node) || [];
678
+ }
679
+ }
680
+ }
681
+ onShowRowActionsMenu(event) {
682
+ if (this.contentActions) {
683
+ const args = event.value;
684
+ const node = args.row.node;
685
+ if (node) {
686
+ args.actions = this.getNodeActions(node) || [];
687
+ }
688
+ }
689
+ }
690
+ onExecuteRowAction(event) {
691
+ if (this.contentActions) {
692
+ const args = event.value;
693
+ const node = args.row.node;
694
+ const action = args.action;
695
+ this.executeContentAction(node, action);
696
+ }
697
+ }
698
+ enforceSingleClickNavigationForMobile() {
699
+ if (this.isMobile()) {
700
+ this.navigationMode = DocumentListComponent.SINGLE_CLICK_NAVIGATION;
701
+ }
702
+ }
703
+ canNavigateFolder(node) {
704
+ let canNavigateFolder = false;
705
+ if (node?.isFolder) {
706
+ canNavigateFolder = true;
707
+ }
708
+ return canNavigateFolder;
709
+ }
710
+ onDataReady(nodePaging) {
711
+ this.ready.emit(nodePaging);
712
+ this.pagination.next(nodePaging.list.pagination);
713
+ }
714
+ updatePagination(requestPaginationModel) {
715
+ this._pagination.maxItems = requestPaginationModel.maxItems;
716
+ this._pagination.skipCount = requestPaginationModel.skipCount;
717
+ this.reload(requestPaginationModel.merge);
718
+ }
719
+ syncPagination() {
720
+ this.node.list.pagination.maxItems = this._pagination.maxItems;
721
+ this.node.list.pagination.skipCount = this._pagination.skipCount;
722
+ }
723
+ onFilterSelectionChange(activeFilters) {
724
+ this.filterSelection.emit(activeFilters);
725
+ }
726
+ resetNewFolderPagination() {
727
+ this._pagination.skipCount = 0;
728
+ this._pagination.maxItems = this.maxItems;
729
+ }
730
+ handleError(err) {
731
+ if (err.message) {
732
+ try {
733
+ if (JSON.parse(err.message).error.statusCode === 403) {
734
+ this.noPermission = true;
735
+ }
736
+ }
737
+ catch (error) {
738
+ /* empty */
739
+ }
740
+ }
741
+ this.setLoadingState(false);
742
+ this.error.emit(err);
743
+ }
744
+ getPreselectedNodesBasedOnSelectionMode() {
745
+ return this.hasPreselectedNodes() ? (this.isSingleSelectionMode() ? [this.preselectNodes[0]] : this.preselectNodes) : [];
746
+ }
747
+ getPreselectedRowsBasedOnSelectionMode() {
748
+ return this.hasPreselectedRows() ? (this.isSingleSelectionMode() ? [this.preselectedRows[0]] : this.preselectedRows) : [];
749
+ }
750
+ getSelectionBasedOnSelectionMode() {
751
+ return this.hasPreselectedRows()
752
+ ? this.isSingleSelectionMode()
753
+ ? [this.preselectedRows[0]]
754
+ : this.data.getSelectedRows()
755
+ : this.data.getSelectedRows();
756
+ }
757
+ onPreselectNodes() {
758
+ if (this.hasPreselectedNodes()) {
759
+ this.preselectRowsOfPreselectedNodes();
760
+ const preselectedRows = this.getPreselectedRowsBasedOnSelectionMode();
761
+ const selection = this.data.getSelectedRows();
762
+ for (const node of preselectedRows) {
763
+ this.dataTable.selectRow(node, true);
764
+ }
765
+ this.onNodeSelect({ row: undefined, selection });
766
+ }
767
+ }
768
+ preserveExistingSelection() {
769
+ if (this.isMultipleSelectionMode()) {
770
+ for (const selection of this.selection) {
771
+ const rowOfSelection = this.data.getRowByNodeId(selection.entry.id);
772
+ if (rowOfSelection) {
773
+ rowOfSelection.isSelected = true;
774
+ }
775
+ }
776
+ }
777
+ }
778
+ preselectRowsOfPreselectedNodes() {
779
+ this.preselectedRows = [];
780
+ const preselectedNodes = this.getPreselectedNodesBasedOnSelectionMode();
781
+ preselectedNodes.forEach((preselectedNode) => {
782
+ const rowOfPreselectedNode = this.data.getRowByNodeId(preselectedNode.entry.id);
783
+ if (rowOfPreselectedNode) {
784
+ rowOfPreselectedNode.isSelected = true;
785
+ this.preselectedRows.push(rowOfPreselectedNode);
786
+ }
787
+ });
788
+ }
789
+ unselectRowFromNodeId(nodeId) {
790
+ const rowToUnselect = this.data.getRowByNodeId(nodeId);
791
+ if (rowToUnselect?.isSelected) {
792
+ rowToUnselect.isSelected = false;
793
+ this.dataTable.selectRow(rowToUnselect, false);
794
+ const selection = this.getSelectionBasedOnSelectionMode();
795
+ this.onNodeUnselect({ row: undefined, selection });
796
+ }
797
+ }
798
+ isSingleSelectionMode() {
799
+ return this.selectionMode === 'single';
800
+ }
801
+ isMultipleSelectionMode() {
802
+ return this.selectionMode === 'multiple';
803
+ }
804
+ hasPreselectedNodes() {
805
+ return this.preselectNodes?.length > 0;
806
+ }
807
+ hasPreselectedRows() {
808
+ return this.preselectedRows?.length > 0;
809
+ }
810
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentListComponent, deps: [{ token: i1.DocumentListService }, { token: i0.ElementRef }, { token: i2.AppConfigService }, { token: i2.UserPreferencesService }, { token: i3.ContentService }, { token: i2.ThumbnailService }, { token: i4.AlfrescoApiService }, { token: i3.NodesApiService }, { token: i2.DataTableService }, { token: i5.LockService }, { token: i6.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
811
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentListComponent, isStandalone: true, selector: "adf-document-list", inputs: { includeFields: "includeFields", where: "where", permissionsStyle: "permissionsStyle", locationFormat: "locationFormat", navigate: "navigate", showHeader: "showHeader", navigationMode: "navigationMode", thumbnails: "thumbnails", selectionMode: "selectionMode", multiselect: "multiselect", contentActions: "contentActions", contentActionsPosition: "contentActionsPosition", contextMenuActions: "contextMenuActions", emptyFolderImageUrl: "emptyFolderImageUrl", allowDropFiles: "allowDropFiles", sorting: "sorting", additionalSorting: "additionalSorting", sortingMode: "sortingMode", rowStyle: "rowStyle", rowStyleClass: "rowStyleClass", loading: "loading", _rowFilter: "_rowFilter", rowFilter: "rowFilter", imageResolver: "imageResolver", stickyHeader: "stickyHeader", headerFilters: "headerFilters", filterValue: "filterValue", currentFolderId: "currentFolderId", preselectNodes: "preselectNodes", node: "node", maxItems: "maxItems", columnsPresetKey: "columnsPresetKey", setColumnsVisibility: "setColumnsVisibility", setColumnsWidths: "setColumnsWidths", setColumnsOrder: "setColumnsOrder", maxColumnsVisible: "maxColumnsVisible", isResizingEnabled: "isResizingEnabled", blurOnResize: "blurOnResize", displayCheckboxesOnHover: "displayCheckboxesOnHover", displayDragAndDropHint: "displayDragAndDropHint" }, outputs: { nodeClick: "nodeClick", nodeDblClick: "nodeDblClick", folderChange: "folderChange", preview: "preview", ready: "ready", error: "error", nodeSelected: "nodeSelected", filterSelection: "filterSelection", columnsWidthChanged: "columnsWidthChanged", columnsVisibilityChanged: "columnsVisibilityChanged", columnsOrderChanged: "columnsOrderChanged", selectedItemsCountChanged: "selectedItemsCountChanged" }, host: { listeners: { "contextmenu": "onShowContextMenu($event)" }, classAttribute: "adf-document-list" }, providers: [
812
+ {
813
+ provide: ADF_DOCUMENT_PARENT_COMPONENT,
814
+ useExisting: DocumentListComponent
815
+ },
816
+ DataTableService
817
+ ], queries: [{ propertyName: "columnList", first: true, predicate: DataColumnListComponent, descendants: true }, { propertyName: "customLoadingContent", first: true, predicate: CustomLoadingContentTemplateDirective, descendants: true }, { propertyName: "customNoPermissionsTemplate", first: true, predicate: CustomNoPermissionTemplateDirective, descendants: true }, { propertyName: "customNoContentTemplate", first: true, predicate: CustomEmptyContentTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "dataTable", first: true, predicate: ["dataTable"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<adf-datatable\n #dataTable\n [selectionMode]=\"selectionMode\"\n [data]=\"data\"\n [actions]=\"contentActions\"\n [actionsPosition]=\"contentActionsPosition\"\n [multiselect]=\"multiselect\"\n [contextMenu]=\"contextMenuActions\"\n [rowStyle]=\"rowStyle\"\n [rowStyleClass]=\"rowStyleClass\"\n [showMainDatatableActions]=\"true\"\n [loading]=\"loading\"\n [noPermission]=\"noPermission\"\n [showHeader]=\"showHeader\"\n [rowMenuCacheEnabled]=\"false\"\n [stickyHeader]=\"stickyHeader\"\n [allowFiltering]=\"allowFiltering\"\n [isResizingEnabled]=\"isResizingEnabled\"\n [blurOnResize]=\"blurOnResize\"\n [displayCheckboxesOnHover]=\"displayCheckboxesOnHover\"\n (showRowContextMenu)=\"onShowRowContextMenu($event)\"\n (showRowActionsMenu)=\"onShowRowActionsMenu($event)\"\n (executeRowAction)=\"onExecuteRowAction($event)\"\n (columnsWidthChanged)=\"onColumnsWidthChange($event)\"\n (columnOrderChanged)=\"onColumnOrderChange($event)\"\n (selectedItemsCountChanged)=\"onSelectedItemsCountChanged($event)\"\n (rowClick)=\"onNodeClick($event.value?.node)\"\n (rowDblClick)=\"onNodeDblClick($event.value?.node)\"\n (row-select)=\"onNodeSelect($any($event).detail)\"\n (row-unselect)=\"onNodeUnselect($any($event).detail)\"\n (sorting-changed)=\"onSortingChanged($any($event))\"\n [class.adf-datatable-gallery-thumbnails]=\"data.thumbnails\">\n\n <div *ngIf=\"headerFilters\">\n <adf-filter-header\n [currentFolderId]=\"currentFolderId\"\n [value]=\"filterValue\"\n (filterSelection)=\"onFilterSelectionChange($event)\" />\n </div>\n\n <adf-no-content-template>\n <ng-template>\n <adf-empty-list *ngIf=\"!customNoContentTemplate\">\n <div class=\"adf-empty-list_template adf-empty-folder\">\n <div class=\"adf-empty-folder-this-space-is-empty\">{{'ADF-DOCUMENT-LIST.EMPTY.HEADER' | translate}}</div>\n <ng-container *ngIf=\"displayDragAndDropHint\">\n <div class=\"adf-empty-folder-drag-drop\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate }}</div>\n <div class=\"adf-empty-folder-any-files-here-to-add\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.SUBTITLE' | translate }}</div>\n </ng-container>\n <img [alt]=\"'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate\" class=\"adf-empty-folder-image\" [src]=\"emptyFolderImageUrl\">\n </div>\n </adf-empty-list>\n <ng-content select=\"adf-custom-empty-content-template, empty-folder-content\" />\n </ng-template>\n </adf-no-content-template>\n\n <adf-no-permission-template>\n <ng-template>\n <div class=\"adf-no-permission__template\" *ngIf=\"!customNoPermissionsTemplate\">\n <mat-icon>error</mat-icon>\n <p class=\"adf-no-permission__template--text\">{{ 'ADF-DOCUMENT-LIST.NO_PERMISSION' | translate }}</p>\n </div>\n <ng-content select=\"adf-custom-no-permission-template, no-permission-content\" />\n </ng-template>\n </adf-no-permission-template>\n\n <adf-loading-content-template>\n <ng-template>\n <div class=\"adf-document-list-loading-container\" *ngIf=\"!customLoadingContent\">\n <mat-progress-spinner\n id=\"adf-document-list-loading\"\n class=\"adf-document-list-loading-margin\"\n [attr.aria-label]=\"'ADF-DOCUMENT-LIST.LOADER_LABEL' | translate\"\n [color]=\"'primary'\"\n [mode]=\"'indeterminate'\" />\n </div>\n <ng-content select=\"adf-custom-loading-content-template\" />\n </ng-template>\n </adf-loading-content-template>\n\n <adf-main-menu-datatable-template>\n <ng-template let-mainMenuTrigger>\n <adf-datatable-column-selector\n [columns]=\"columns\"\n [mainMenuTrigger]=\"mainMenuTrigger\"\n [columnsSorting]=\"false\"\n [maxColumnsVisible]=\"maxColumnsVisible\"\n (submitColumnsVisibility)=\"onColumnsVisibilityChange($event)\" />\n </ng-template>\n </adf-main-menu-datatable-template>\n\n</adf-datatable>\n", styles: [".adf-document-list{min-height:0;height:100%;background-color:var(--theme-background-color)}.adf-sticky-document-list{height:310px;overflow-y:auto}.adf-datatable-card .adf-datatable-selected>svg{fill:var(--theme-accent-color);width:30px;height:30px;position:absolute;top:10px}.adf-datatable-list .adf-datatable-selected{display:inline-table}.adf-datatable-list .adf-datatable-selected>svg{fill:var(--theme-accent-color);width:30px;height:30px}.adf-document-list_empty_template{text-align:center;margin-top:20px;margin-bottom:20px}.adf-no-permission__template{display:flex;align-items:center;justify-content:center;flex-direction:column;width:100%;height:100%;min-height:300px}.adf-no-permission__template mat-icon{font-size:52px;height:52px;width:52px}.adf-no-permission__template--text{color:var(--adf-theme-foreground-text-color);font-size:var(--theme-subheading-2-font-size)}.adf-document-list__this-space-is-empty{height:32px;opacity:.26;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color)}.adf-document-list__drag-drop{height:56px;opacity:.54;font-size:56px;line-height:1;letter-spacing:-2px;color:var(--adf-theme-foreground-text-color);margin-top:40px}.adf-document-list__any-files-here-to-add{height:24px;opacity:.54;font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color);margin-top:17px}.adf-document-list__empty_doc_lib{width:565px;height:161px;object-fit:contain;margin-top:17px}.adf-document-list-loading-margin{margin:auto}.adf-document-list-loading-container{min-height:300px;display:flex;flex-direction:row;height:100%}.adf-empty-list-header{height:32px;opacity:.26;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color)}.adf-documentlist-pagination{color:var(--adf-theme-foreground-text-color)}.adf-documentlist-pagination .adf-pagination__block{border-right:none}.adf-empty-folder-this-space-is-empty{height:32px;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color-054)}.adf-empty-folder-drag-drop{min-height:56px;font-size:53px;line-height:1;letter-spacing:-2px;color:var(--adf-theme-foreground-text-color);margin-top:40px;word-break:break-all;white-space:pre-line}@media (max-width: 599.9px){.adf-empty-folder-drag-drop{font-size:48px}}.adf-empty-folder-any-files-here-to-add{min-height:24px;font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color);margin-top:17px;word-break:break-all;white-space:pre-line}.adf-empty-folder-image{width:565px;max-width:100%;object-fit:contain;margin-top:17px}@media (max-width: 599.9px){.adf-empty-folder-image{width:250px}}@media (max-width: 959.9px){.adf-empty-folder-drag-drop,.adf-empty-folder-any-files-here-to-add{display:none}}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row){height:300px}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) img{height:130px}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell{overflow:visible}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell.adf-datatable-cell--image{flex:0 0 auto;display:flex;flex-direction:column-reverse;justify-content:space-between}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell.adf-datatable-cell--image .adf-cell-value{display:flex;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DataTableComponent, selector: "adf-datatable", inputs: ["data", "rows", "sorting", "columns", "selectionMode", "multiselect", "mainTableAction", "actions", "showMainDatatableActions", "showProvidedActions", "actionsPosition", "actionsVisibleOnHover", "fallbackThumbnail", "contextMenu", "rowStyle", "rowStyleClass", "showHeader", "stickyHeader", "loading", "noPermission", "rowMenuCacheEnabled", "resolverFn", "allowFiltering", "isResizingEnabled", "blurOnResize", "displayCheckboxesOnHover", "enableDragRows"], outputs: ["rowClick", "rowDblClick", "showRowContextMenu", "showRowActionsMenu", "executeRowAction", "columnOrderChanged", "columnsWidthChanged", "selectedItemsCountChanged", "dragDropped"] }, { kind: "component", type: FilterHeaderComponent, selector: "adf-filter-header", inputs: ["value", "currentFolderId"], outputs: ["filterSelection"] }, { kind: "directive", type: NoContentTemplateDirective, selector: "adf-no-content-template, no-content-template" }, { kind: "component", type: EmptyListComponent, selector: "adf-empty-list" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "directive", type: NoPermissionTemplateDirective, selector: "adf-no-permission-template, no-permission-template" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: LoadingContentTemplateDirective, selector: "adf-loading-content-template, loading-content-template" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: MainMenuDataTableTemplateDirective, selector: "adf-main-menu-datatable-template" }, { kind: "component", type: ColumnsSelectorComponent, selector: "adf-datatable-column-selector", inputs: ["columns", "mainMenuTrigger", "columnsSorting", "maxColumnsVisible"], outputs: ["submitColumnsVisibility"] }], encapsulation: i0.ViewEncapsulation.None }); }
818
+ }
819
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentListComponent, decorators: [{
820
+ type: Component,
821
+ args: [{ selector: 'adf-document-list', standalone: true, imports: [
822
+ CommonModule,
823
+ DataTableComponent,
824
+ FilterHeaderComponent,
825
+ NoContentTemplateDirective,
826
+ EmptyListComponent,
827
+ TranslateModule,
828
+ NoPermissionTemplateDirective,
829
+ MatIconModule,
830
+ LoadingContentTemplateDirective,
831
+ MatProgressSpinnerModule,
832
+ MainMenuDataTableTemplateDirective,
833
+ ColumnsSelectorComponent
834
+ ], providers: [
835
+ {
836
+ provide: ADF_DOCUMENT_PARENT_COMPONENT,
837
+ useExisting: DocumentListComponent
838
+ },
839
+ DataTableService
840
+ ], encapsulation: ViewEncapsulation.None, host: { class: 'adf-document-list' }, template: "<adf-datatable\n #dataTable\n [selectionMode]=\"selectionMode\"\n [data]=\"data\"\n [actions]=\"contentActions\"\n [actionsPosition]=\"contentActionsPosition\"\n [multiselect]=\"multiselect\"\n [contextMenu]=\"contextMenuActions\"\n [rowStyle]=\"rowStyle\"\n [rowStyleClass]=\"rowStyleClass\"\n [showMainDatatableActions]=\"true\"\n [loading]=\"loading\"\n [noPermission]=\"noPermission\"\n [showHeader]=\"showHeader\"\n [rowMenuCacheEnabled]=\"false\"\n [stickyHeader]=\"stickyHeader\"\n [allowFiltering]=\"allowFiltering\"\n [isResizingEnabled]=\"isResizingEnabled\"\n [blurOnResize]=\"blurOnResize\"\n [displayCheckboxesOnHover]=\"displayCheckboxesOnHover\"\n (showRowContextMenu)=\"onShowRowContextMenu($event)\"\n (showRowActionsMenu)=\"onShowRowActionsMenu($event)\"\n (executeRowAction)=\"onExecuteRowAction($event)\"\n (columnsWidthChanged)=\"onColumnsWidthChange($event)\"\n (columnOrderChanged)=\"onColumnOrderChange($event)\"\n (selectedItemsCountChanged)=\"onSelectedItemsCountChanged($event)\"\n (rowClick)=\"onNodeClick($event.value?.node)\"\n (rowDblClick)=\"onNodeDblClick($event.value?.node)\"\n (row-select)=\"onNodeSelect($any($event).detail)\"\n (row-unselect)=\"onNodeUnselect($any($event).detail)\"\n (sorting-changed)=\"onSortingChanged($any($event))\"\n [class.adf-datatable-gallery-thumbnails]=\"data.thumbnails\">\n\n <div *ngIf=\"headerFilters\">\n <adf-filter-header\n [currentFolderId]=\"currentFolderId\"\n [value]=\"filterValue\"\n (filterSelection)=\"onFilterSelectionChange($event)\" />\n </div>\n\n <adf-no-content-template>\n <ng-template>\n <adf-empty-list *ngIf=\"!customNoContentTemplate\">\n <div class=\"adf-empty-list_template adf-empty-folder\">\n <div class=\"adf-empty-folder-this-space-is-empty\">{{'ADF-DOCUMENT-LIST.EMPTY.HEADER' | translate}}</div>\n <ng-container *ngIf=\"displayDragAndDropHint\">\n <div class=\"adf-empty-folder-drag-drop\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate }}</div>\n <div class=\"adf-empty-folder-any-files-here-to-add\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.SUBTITLE' | translate }}</div>\n </ng-container>\n <img [alt]=\"'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate\" class=\"adf-empty-folder-image\" [src]=\"emptyFolderImageUrl\">\n </div>\n </adf-empty-list>\n <ng-content select=\"adf-custom-empty-content-template, empty-folder-content\" />\n </ng-template>\n </adf-no-content-template>\n\n <adf-no-permission-template>\n <ng-template>\n <div class=\"adf-no-permission__template\" *ngIf=\"!customNoPermissionsTemplate\">\n <mat-icon>error</mat-icon>\n <p class=\"adf-no-permission__template--text\">{{ 'ADF-DOCUMENT-LIST.NO_PERMISSION' | translate }}</p>\n </div>\n <ng-content select=\"adf-custom-no-permission-template, no-permission-content\" />\n </ng-template>\n </adf-no-permission-template>\n\n <adf-loading-content-template>\n <ng-template>\n <div class=\"adf-document-list-loading-container\" *ngIf=\"!customLoadingContent\">\n <mat-progress-spinner\n id=\"adf-document-list-loading\"\n class=\"adf-document-list-loading-margin\"\n [attr.aria-label]=\"'ADF-DOCUMENT-LIST.LOADER_LABEL' | translate\"\n [color]=\"'primary'\"\n [mode]=\"'indeterminate'\" />\n </div>\n <ng-content select=\"adf-custom-loading-content-template\" />\n </ng-template>\n </adf-loading-content-template>\n\n <adf-main-menu-datatable-template>\n <ng-template let-mainMenuTrigger>\n <adf-datatable-column-selector\n [columns]=\"columns\"\n [mainMenuTrigger]=\"mainMenuTrigger\"\n [columnsSorting]=\"false\"\n [maxColumnsVisible]=\"maxColumnsVisible\"\n (submitColumnsVisibility)=\"onColumnsVisibilityChange($event)\" />\n </ng-template>\n </adf-main-menu-datatable-template>\n\n</adf-datatable>\n", styles: [".adf-document-list{min-height:0;height:100%;background-color:var(--theme-background-color)}.adf-sticky-document-list{height:310px;overflow-y:auto}.adf-datatable-card .adf-datatable-selected>svg{fill:var(--theme-accent-color);width:30px;height:30px;position:absolute;top:10px}.adf-datatable-list .adf-datatable-selected{display:inline-table}.adf-datatable-list .adf-datatable-selected>svg{fill:var(--theme-accent-color);width:30px;height:30px}.adf-document-list_empty_template{text-align:center;margin-top:20px;margin-bottom:20px}.adf-no-permission__template{display:flex;align-items:center;justify-content:center;flex-direction:column;width:100%;height:100%;min-height:300px}.adf-no-permission__template mat-icon{font-size:52px;height:52px;width:52px}.adf-no-permission__template--text{color:var(--adf-theme-foreground-text-color);font-size:var(--theme-subheading-2-font-size)}.adf-document-list__this-space-is-empty{height:32px;opacity:.26;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color)}.adf-document-list__drag-drop{height:56px;opacity:.54;font-size:56px;line-height:1;letter-spacing:-2px;color:var(--adf-theme-foreground-text-color);margin-top:40px}.adf-document-list__any-files-here-to-add{height:24px;opacity:.54;font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color);margin-top:17px}.adf-document-list__empty_doc_lib{width:565px;height:161px;object-fit:contain;margin-top:17px}.adf-document-list-loading-margin{margin:auto}.adf-document-list-loading-container{min-height:300px;display:flex;flex-direction:row;height:100%}.adf-empty-list-header{height:32px;opacity:.26;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color)}.adf-documentlist-pagination{color:var(--adf-theme-foreground-text-color)}.adf-documentlist-pagination .adf-pagination__block{border-right:none}.adf-empty-folder-this-space-is-empty{height:32px;font-size:var(--theme-headline-font-size);line-height:1.33;letter-spacing:-1px;color:var(--adf-theme-foreground-text-color-054)}.adf-empty-folder-drag-drop{min-height:56px;font-size:53px;line-height:1;letter-spacing:-2px;color:var(--adf-theme-foreground-text-color);margin-top:40px;word-break:break-all;white-space:pre-line}@media (max-width: 599.9px){.adf-empty-folder-drag-drop{font-size:48px}}.adf-empty-folder-any-files-here-to-add{min-height:24px;font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color);margin-top:17px;word-break:break-all;white-space:pre-line}.adf-empty-folder-image{width:565px;max-width:100%;object-fit:contain;margin-top:17px}@media (max-width: 599.9px){.adf-empty-folder-image{width:250px}}@media (max-width: 959.9px){.adf-empty-folder-drag-drop,.adf-empty-folder-any-files-here-to-add{display:none}}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row){height:300px}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) img{height:130px}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell{overflow:visible}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell.adf-datatable-cell--image{flex:0 0 auto;display:flex;flex-direction:column-reverse;justify-content:space-between}.adf-datatable-gallery-thumbnails .adf-datatable-card .adf-datatable-row:is(adf-datatable-row) .adf-datatable-cell.adf-datatable-cell--image .adf-cell-value{display:flex;justify-content:center}\n"] }]
841
+ }], ctorParameters: () => [{ type: i1.DocumentListService }, { type: i0.ElementRef }, { type: i2.AppConfigService }, { type: i2.UserPreferencesService }, { type: i3.ContentService }, { type: i2.ThumbnailService }, { type: i4.AlfrescoApiService }, { type: i3.NodesApiService }, { type: i2.DataTableService }, { type: i5.LockService }, { type: i6.MatDialog }], propDecorators: { columnList: [{
842
+ type: ContentChild,
843
+ args: [DataColumnListComponent]
844
+ }], customLoadingContent: [{
845
+ type: ContentChild,
846
+ args: [CustomLoadingContentTemplateDirective]
847
+ }], customNoPermissionsTemplate: [{
848
+ type: ContentChild,
849
+ args: [CustomNoPermissionTemplateDirective]
850
+ }], customNoContentTemplate: [{
851
+ type: ContentChild,
852
+ args: [CustomEmptyContentTemplateDirective]
853
+ }], includeFields: [{
854
+ type: Input
855
+ }], where: [{
856
+ type: Input
857
+ }], permissionsStyle: [{
858
+ type: Input
859
+ }], locationFormat: [{
860
+ type: Input
861
+ }], navigate: [{
862
+ type: Input
863
+ }], showHeader: [{
864
+ type: Input
865
+ }], navigationMode: [{
866
+ type: Input
867
+ }], thumbnails: [{
868
+ type: Input
869
+ }], selectionMode: [{
870
+ type: Input
871
+ }], multiselect: [{
872
+ type: Input
873
+ }], contentActions: [{
874
+ type: Input
875
+ }], contentActionsPosition: [{
876
+ type: Input
877
+ }], contextMenuActions: [{
878
+ type: Input
879
+ }], emptyFolderImageUrl: [{
880
+ type: Input
881
+ }], allowDropFiles: [{
882
+ type: Input
883
+ }], sorting: [{
884
+ type: Input
885
+ }], additionalSorting: [{
886
+ type: Input
887
+ }], sortingMode: [{
888
+ type: Input
889
+ }], rowStyle: [{
890
+ type: Input
891
+ }], rowStyleClass: [{
892
+ type: Input
893
+ }], loading: [{
894
+ type: Input
895
+ }], _rowFilter: [{
896
+ type: Input
897
+ }], rowFilter: [{
898
+ type: Input
899
+ }], imageResolver: [{
900
+ type: Input
901
+ }], stickyHeader: [{
902
+ type: Input
903
+ }], headerFilters: [{
904
+ type: Input
905
+ }], filterValue: [{
906
+ type: Input
907
+ }], currentFolderId: [{
908
+ type: Input
909
+ }], preselectNodes: [{
910
+ type: Input
911
+ }], node: [{
912
+ type: Input
913
+ }], maxItems: [{
914
+ type: Input
915
+ }], columnsPresetKey: [{
916
+ type: Input
917
+ }], setColumnsVisibility: [{
918
+ type: Input
919
+ }], setColumnsWidths: [{
920
+ type: Input
921
+ }], setColumnsOrder: [{
922
+ type: Input
923
+ }], maxColumnsVisible: [{
924
+ type: Input
925
+ }], isResizingEnabled: [{
926
+ type: Input
927
+ }], blurOnResize: [{
928
+ type: Input
929
+ }], displayCheckboxesOnHover: [{
930
+ type: Input
931
+ }], displayDragAndDropHint: [{
932
+ type: Input
933
+ }], nodeClick: [{
934
+ type: Output
935
+ }], nodeDblClick: [{
936
+ type: Output
937
+ }], folderChange: [{
938
+ type: Output
939
+ }], preview: [{
940
+ type: Output
941
+ }], ready: [{
942
+ type: Output
943
+ }], error: [{
944
+ type: Output
945
+ }], nodeSelected: [{
946
+ type: Output
947
+ }], filterSelection: [{
948
+ type: Output
949
+ }], columnsWidthChanged: [{
950
+ type: Output
951
+ }], columnsVisibilityChanged: [{
952
+ type: Output
953
+ }], columnsOrderChanged: [{
954
+ type: Output
955
+ }], selectedItemsCountChanged: [{
956
+ type: Output
957
+ }], dataTable: [{
958
+ type: ViewChild,
959
+ args: ['dataTable', { static: true }]
960
+ }], onShowContextMenu: [{
961
+ type: HostListener,
962
+ args: ['contextmenu', ['$event']]
963
+ }] } });
964
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2RvY3VtZW50LWxpc3QvY29tcG9uZW50cy9kb2N1bWVudC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvZG9jdW1lbnQtbGlzdC9jb21wb25lbnRzL2RvY3VtZW50LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsMENBQTBDO0FBQzFDLHlEQUF5RDtBQUV6RCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixtQ0FBbUMsRUFDbkMscUNBQXFDLEVBQ3JDLG1DQUFtQyxFQUduQyx1QkFBdUIsRUFHdkIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQiwrQkFBK0IsRUFDL0Isa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQiw2QkFBNkIsRUFJN0IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3ZCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFtQixVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JGLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFB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O3NCQURiLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFLRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBT0YsZ0JBQWdCO3NCQURuQixLQUFLO2dCQU9GLGVBQWU7c0JBRGxCLEtBQUs7Z0JBT04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sd0JBQXdCO3NCQUR2QixLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixTQUFTO3NCQURSLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFTUCxPQUFPO3NCQUROLE1BQU07Z0JBS1AsS0FBSztzQkFESixNQUFNO2dCQUtQLEtBQUs7c0JBREosTUFBTTtnQkFLUCxZQUFZO3NCQURYLE1BQU07Z0JBS1AsZUFBZTtzQkFEZCxNQUFNO2dCQUtQLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFLUCx3QkFBd0I7c0JBRHZCLE1BQU07Z0JBS1AsbUJBQW1CO3NCQURsQixNQUFNO2dCQUtQLHlCQUF5QjtzQkFEeEIsTUFBTTtnQkFJUCxTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkEwUnhDLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIHJ4anMvbm8tc3ViamVjdC12YWx1ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbmltcG9ydCB7XG4gICAgQXBwQ29uZmlnU2VydmljZSxcbiAgICBDb2x1bW5zU2VsZWN0b3JDb21wb25lbnQsXG4gICAgQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgQ3VzdG9tTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBDdXN0b21Ob1Blcm1pc3Npb25UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBEYXRhQ2VsbEV2ZW50LFxuICAgIERhdGFDb2x1bW4sXG4gICAgRGF0YUNvbHVtbkxpc3RDb21wb25lbnQsXG4gICAgRGF0YVJvdyxcbiAgICBEYXRhUm93QWN0aW9uRXZlbnQsXG4gICAgRGF0YVNvcnRpbmcsXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICAgIERhdGFUYWJsZVNjaGVtYSxcbiAgICBEYXRhVGFibGVTZXJ2aWNlLFxuICAgIEVtcHR5TGlzdENvbXBvbmVudCxcbiAgICBMb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE1haW5NZW51RGF0YVRhYmxlVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTm9Db250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTm9QZXJtaXNzaW9uVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgUGFnaW5hdGVkQ29tcG9uZW50LFxuICAgIFBhZ2luYXRpb25Nb2RlbCxcbiAgICBSZXF1ZXN0UGFnaW5hdGlvbk1vZGVsLFxuICAgIFNob3dIZWFkZXJNb2RlLFxuICAgIFRodW1ibmFpbFNlcnZpY2UsXG4gICAgVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICBVc2VyUHJlZmVyZW5jZVZhbHVlc1xufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgTm9kZSwgTm9kZUVudHJ5LCBOb2RlUGFnaW5nLCBOb2Rlc0FwaSwgUGFnaW5hdGlvbiB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbnRlbnRTZXJ2aWNlLCBOb2Rlc0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgRmlsdGVyU2VhcmNoIH0gZnJvbSAnLi4vLi4vc2VhcmNoJztcbmltcG9ydCB7IFJvd0ZpbHRlciB9IGZyb20gJy4uL2RhdGEvcm93LWZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBTaGFyZURhdGFSb3cgfSBmcm9tICcuLi9kYXRhL3NoYXJlLWRhdGEtcm93Lm1vZGVsJztcbmltcG9ydCB7IFNoYXJlRGF0YVRhYmxlQWRhcHRlciB9IGZyb20gJy4uL2RhdGEvc2hhcmUtZGF0YXRhYmxlLWFkYXB0ZXInO1xuaW1wb3J0IHsgQ29udGVudEFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NvbnRlbnQtYWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IERvY3VtZW50TG9hZGVyTm9kZSB9IGZyb20gJy4uL21vZGVscy9kb2N1bWVudC1mb2xkZXIubW9kZWwnO1xuaW1wb3J0IHsgUGVybWlzc2lvblN0eWxlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbnMtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgcHJlc2V0c0RlZmF1bHRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9wcmVzZXQubW9kZWwnO1xuaW1wb3J0IHsgRG9jdW1lbnRMaXN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RvY3VtZW50LWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBMb2NrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2suc2VydmljZSc7XG5pbXBvcnQgeyBBREZfRE9DVU1FTlRfUEFSRU5UX0NPTVBPTkVOVCB9IGZyb20gJy4vZG9jdW1lbnQtbGlzdC50b2tlbic7XG5pbXBvcnQgeyBGaWxlQXV0b0Rvd25sb2FkQ29tcG9uZW50IH0gZnJvbSAnLi9maWxlLWF1dG8tZG93bmxvYWQvZmlsZS1hdXRvLWRvd25sb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlRW50aXR5RXZlbnQsIE5vZGVFbnRyeUV2ZW50IH0gZnJvbSAnLi9ub2RlLmV2ZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGaWx0ZXJIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2ZpbHRlci1oZWFkZXIvZmlsdGVyLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsZnJlc2NvLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuY29uc3QgQllURVNfVE9fTUJfQ09OVkVSU0lPTl9WQUxVRSA9IDEwNDg1NzY7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWRvY3VtZW50LWxpc3QnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgRmlsdGVySGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBOb0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgRW1wdHlMaXN0Q29tcG9uZW50LFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE5vUGVybWlzc2lvblRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBMb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIE1haW5NZW51RGF0YVRhYmxlVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIENvbHVtbnNTZWxlY3RvckNvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RvY3VtZW50LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RvY3VtZW50LWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQURGX0RPQ1VNRU5UX1BBUkVOVF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogRG9jdW1lbnRMaXN0Q29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIERhdGFUYWJsZVNlcnZpY2VcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi1kb2N1bWVudC1saXN0JyB9XG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50TGlzdENvbXBvbmVudCBleHRlbmRzIERhdGFUYWJsZVNjaGVtYSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRJbml0LCBQYWdpbmF0ZWRDb21wb25lbnQge1xuICAgIHN0YXRpYyBTSU5HTEVfQ0xJQ0tfTkFWSUdBVElPTjogc3RyaW5nID0gJ2NsaWNrJztcbiAgICBzdGF0aWMgRE9VQkxFX0NMSUNLX05BVklHQVRJT046IHN0cmluZyA9ICdkYmxjbGljayc7XG5cbiAgICBERUZBVUxUX1BBR0lOQVRJT046IFBhZ2luYXRpb24gPSBuZXcgUGFnaW5hdGlvbih7XG4gICAgICAgIGhhc01vcmVJdGVtczogZmFsc2UsXG4gICAgICAgIHNraXBDb3VudDogMCxcbiAgICAgICAgbWF4SXRlbXM6IDI1LFxuICAgICAgICB0b3RhbEl0ZW1zOiAwXG4gICAgfSk7XG5cbiAgICBERUZBVUxUX1NPUlRJTkc6IERhdGFTb3J0aW5nW10gPSBbbmV3IERhdGFTb3J0aW5nKCduYW1lJywgJ2FzYycpLCBuZXcgRGF0YVNvcnRpbmcoJ2lzRm9sZGVyJywgJ2Rlc2MnKV07XG5cbiAgICBAQ29udGVudENoaWxkKERhdGFDb2x1bW5MaXN0Q29tcG9uZW50KVxuICAgIGNvbHVtbkxpc3Q6IERhdGFDb2x1bW5MaXN0Q29tcG9uZW50O1xuXG4gICAgQENvbnRlbnRDaGlsZChDdXN0b21Mb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIGN1c3RvbUxvYWRpbmdDb250ZW50OiBDdXN0b21Mb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChDdXN0b21Ob1Blcm1pc3Npb25UZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBjdXN0b21Ob1Blcm1pc3Npb25zVGVtcGxhdGU6IEN1c3RvbU5vUGVybWlzc2lvblRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChDdXN0b21FbXB0eUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBjdXN0b21Ob0NvbnRlbnRUZW1wbGF0ZTogQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKiogSW5jbHVkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBub2RlIGluIHRoZSBzZXJ2ZXIgcmVxdWVzdC4gRm9yIGV4YW1wbGU6IGFzc29jaWF0aW9uLCBpc0xpbmssIGlzTG9ja2VkIGFuZCBvdGhlcnMuICovXG4gICAgQElucHV0KClcbiAgICBpbmNsdWRlRmllbGRzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgdGhlIE5vZGUgbGlzdCB1c2luZyB0aGUgKndoZXJlKiBjb25kaXRpb24gb2YgdGhlIFJFU1QgQVBJXG4gICAgICogKGZvciBleGFtcGxlLCBpc0ZvbGRlcj10cnVlKS4gU2VlIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgd2hlcmU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIERlZmluZSBhIHNldCBvZiBDU1Mgc3R5bGVzIHRvIGFwcGx5IGRlcGVuZGluZyBvbiB0aGUgcGVybWlzc2lvblxuICAgICAqIG9mIHRoZSB1c2VyIG9uIHRoYXQgbm9kZS4gU2VlIHRoZSBQZXJtaXNzaW9uIFN0eWxlIG1vZGVsXG4gICAgICogcGFnZSBmb3IgZnVydGhlciBkZXRhaWxzIGFuZCBleGFtcGxlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBlcm1pc3Npb25zU3R5bGU6IFBlcm1pc3Npb25TdHlsZU1vZGVsW10gPSBbXTtcblxuICAgIC8qKiBUaGUgZGVmYXVsdCByb3V0ZSBmb3IgYWxsIHRoZSBsb2NhdGlvbi1iYXNlZCBjb2x1bW5zIChpZiBkZWNsYXJlZCkuICovXG4gICAgQElucHV0KClcbiAgICBsb2NhdGlvbkZvcm1hdDogc3RyaW5nID0gJy8nO1xuXG4gICAgLyoqIFRvZ2dsZXMgbmF2aWdhdGlvbiB0byBmb2xkZXIgY29udGVudCBvciBmaWxlIHByZXZpZXcgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBoZWFkZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dIZWFkZXIgPSBTaG93SGVhZGVyTW9kZS5EYXRhO1xuXG4gICAgLyoqXG4gICAgICogVXNlciBpbnRlcmFjdGlvbiBmb3IgZm9sZGVyIG5hdmlnYXRpb24gb3IgZmlsZSBwcmV2aWV3LlxuICAgICAqIFZhbGlkIHZhbHVlcyBhcmUgXCJjbGlja1wiIGFuZCBcImRibGNsaWNrXCIuIERlZmF1bHQgdmFsdWU6IFwiZGJsY2xpY2tcIlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGlvbk1vZGU6IHN0cmluZyA9IERvY3VtZW50TGlzdENvbXBvbmVudC5ET1VCTEVfQ0xJQ0tfTkFWSUdBVElPTjsgLy8gY2xpY2t8ZGJsY2xpY2tcblxuICAgIC8qKiBTaG93IGRvY3VtZW50IHRodW1ibmFpbHMgcmF0aGVyIHRoYW4gaWNvbnMgKi9cbiAgICBASW5wdXQoKVxuICAgIHRodW1ibmFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFJvdyBzZWxlY3Rpb24gbW9kZS4gQ2FuIGJlIG51bGwsIGBzaW5nbGVgIG9yIGBtdWx0aXBsZWAuIEZvciBgbXVsdGlwbGVgIG1vZGUsXG4gICAgICogeW91IGNhbiB1c2UgQ21kIChtYWNPUykgb3IgQ3RybCAoV2luKSBtb2RpZmllciBrZXkgdG8gdG9nZ2xlIHNlbGVjdGlvbiBmb3IgbXVsdGlwbGUgcm93cy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbk1vZGU6IHN0cmluZyA9ICdzaW5nbGUnOyAvLyBudWxsfHNpbmdsZXxtdWx0aXBsZVxuXG4gICAgLyoqIFRvZ2dsZXMgbXVsdGlzZWxlY3QgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbXVsdGlzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIGNvbnRlbnQgYWN0aW9ucyBmb3IgZWFjaCByb3cgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRlbnRBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogUG9zaXRpb24gb2YgdGhlIGNvbnRlbnQgYWN0aW9ucyBkcm9wZG93biBtZW51LiBDYW4gYmUgc2V0IHRvIFwibGVmdFwiIG9yIFwicmlnaHRcIi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRlbnRBY3Rpb25zUG9zaXRpb246IHN0cmluZyA9ICdyaWdodCc7IC8vIGxlZnR8cmlnaHRcblxuICAgIC8qKiBUb2dnbGVzIGNvbnRleHQgbWVudXMgZm9yIGVhY2ggcm93ICovXG4gICAgQElucHV0KClcbiAgICBjb250ZXh0TWVudUFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBDdXN0b20gaW1hZ2UgZm9yIGVtcHR5IGZvbGRlci4gRGVmYXVsdCB2YWx1ZTogJy4vYXNzZXRzL2ltYWdlcy9lbXB0eV9kb2NfbGliLnN2ZycgKi9cbiAgICBASW5wdXQoKVxuICAgIGVtcHR5Rm9sZGVySW1hZ2VVcmw6IHN0cmluZyA9ICcuL2Fzc2V0cy9pbWFnZXMvZW1wdHlfZG9jX2xpYi5zdmcnO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiB0cnVlLCB0aGlzIGVuYWJsZXMgeW91IHRvIGRyb3AgZmlsZXMgZGlyZWN0bHkgaW50byBzdWJmb2xkZXJzIHNob3duXG4gICAgICogYXMgaXRlbXMgaW4gdGhlIGxpc3Qgb3IgaW50byBhbm90aGVyIGZpbGUgdG8gdHJpZ2dlciB1cGRhdGluZyBpdCdzIHZlcnNpb24uXG4gICAgICogV2hlbiBmYWxzZSwgdGhlIGRyb3BwZWQgZmlsZSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAgICAqIGN1cnJlbnQgZm9sZGVyIChpZSwgdGhlIG9uZSBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgc2hvd24gaW4gdGhlIGxpc3QpLlxuICAgICAqIFNlZSB0aGUgVXBsb2FkIGRpcmVjdGl2ZSBmb3IgZnVydGhlciBkZXRhaWxzIGFib3V0IGhvdyB0aGUgZmlsZSBkcm9wIGlzXG4gICAgICogaGFuZGxlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93RHJvcEZpbGVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGRlZmF1bHQgc29ydGluZy4gVGhlIGZvcm1hdCBpcyBhbiBhcnJheSBvZiAyIHN0cmluZ3MgYFtrZXksIGRpcmVjdGlvbl1gXG4gICAgICogaS5lLiBgWyduYW1lJywgJ2Rlc2MnXWAgb3IgYFsnbmFtZScsICdhc2MnXWAuIFNldCB0aGlzIHZhbHVlIG9ubHkgaWYgeW91IHdhbnQgdG9cbiAgICAgKiBvdmVycmlkZSB0aGUgZGVmYXVsdCBzb3J0aW5nIGRldGVjdGVkIGJ5IHRoZSBjb21wb25lbnQgYmFzZWQgb24gY29sdW1ucy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNvcnRpbmc6IHN0cmluZ1tdIHwgRGF0YVNvcnRpbmcgPSBbJ25hbWUnLCAnYXNjJ107XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGRlZmF1bHQgc29ydGluZy4gVGhlIGZvcm1hdCBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIGBba2V5IGRpcmVjdGlvbiwgb3RoZXJLZXkgb3RoZXJEaXJlY3Rpb25dYFxuICAgICAqIGkuZS4gYFsnbmFtZSBkZXNjJywgJ25vZGVUeXBlIGFzYyddYCBvciBgWyduYW1lIGFzYyddYC4gU2V0IHRoaXMgdmFsdWUgaWYgeW91IHdhbnQgYSBiYXNlXG4gICAgICogcnVsZSB0byBiZSBhZGRlZCB0byB0aGUgc29ydGluZyBhcGFydCBmcm9tIHRoZSBvbmUgZHJpdmVuIGJ5IHRoZSBoZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhZGRpdGlvbmFsU29ydGluZzogRGF0YVNvcnRpbmcgPSBuZXcgRGF0YVNvcnRpbmcoJ2lzRm9sZGVyJywgJ2Rlc2MnKTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgc29ydGluZyBtb2RlLiBDYW4gYmUgZWl0aGVyIGBjbGllbnRgIChpdGVtcyBpbiB0aGUgbGlzdFxuICAgICAqIGFyZSBzb3J0ZWQgY2xpZW50LXNpZGUpIG9yIGBzZXJ2ZXJgICh0aGUgb3JkZXJpbmcgc3VwcGxpZWQgYnkgdGhlXG4gICAgICogc2VydmVyIGlzIHVzZWQgd2l0aG91dCBmdXJ0aGVyIGNsaWVudC1zaWRlIHNvcnRpbmcpLlxuICAgICAqIE5vdGUgdGhhdCB0aGUgYHNlcnZlcmAgb3B0aW9uICpkb2VzIG5vdCogcmVxdWVzdCB0aGUgc2VydmVyIHRvIHNvcnQgdGhlIGRhdGFcbiAgICAgKiBiZWZvcmUgZGVsaXZlcmluZyBpdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNvcnRpbmdNb2RlOiAnc2VydmVyJyB8ICdjbGllbnQnID0gJ3NlcnZlcic7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5saW5lIHN0eWxlIHRvIGFwcGx5IHRvIGV2ZXJ5IHJvdy4gU2VlXG4gICAgICogdGhlIEFuZ3VsYXIgTmdTdHlsZVxuICAgICAqIGRvY3MgZm9yIG1vcmUgZGV0YWlscyBhbmQgdXNhZ2UgZXhhbXBsZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dTdHlsZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAgIC8qKiBUaGUgQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIGV2ZXJ5IHJvdyAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93U3R5bGVDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgbG9hZGluZyBzdGF0ZSBhbmQgYW5pbWF0ZWQgc3Bpbm5lcnMgZm9yIHRoZSBjb21wb25lbnQuIFVzZWQgaW5cbiAgICAgKiBjb21iaW5hdGlvbiB3aXRoIGBuYXZpZ2F0ZT1mYWxzZWAgdG8gcGVyZm9ybSBjdXN0b20gbmF2aWdhdGlvbiBhbmQgbG9hZGluZ1xuICAgICAqIHN0YXRlIGluZGljYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIF9yb3dGaWx0ZXI6IFJvd0ZpbHRlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGZ1bmN0aW9uIHRvIGNob29zZSB3aGV0aGVyIHRvIHNob3cgb3IgaGlkZSByb3dzLlxuICAgICAqIFNlZSB0aGUgW1JvdyBGaWx0ZXIgTW9kZWxdKHJvdy1maWx0ZXIubW9kZWwubWQpIHBhZ2UgZm9yXG4gICAgICogbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByb3dGaWx0ZXIocm93RmlsdGVyOiBSb3dGaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5fcm93RmlsdGVyID0gcm93RmlsdGVyO1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0RmlsdGVyKHRoaXMuX3Jvd0ZpbHRlcik7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Rm9sZGVySWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHJvd0ZpbHRlcigpOiBSb3dGaWx0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93RmlsdGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBmdW5jdGlvbiB0byBjaG9vc2UgaW1hZ2UgZmlsZSBwYXRocyB0byBzaG93LiBTZWUgdGhlXG4gICAgICogW0ltYWdlIFJlc29sdmVyIE1vZGVsXShpbWFnZS1yZXNvbHZlci5tb2RlbC5tZCkgcGFnZSBmb3JcbiAgICAgKiBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW1hZ2VSZXNvbHZlcjogYW55IHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgc3RpY2t5IGhlYWRlciBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgaGVhZGVyIGZpbHRlcnMgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhlYWRlckZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBJbml0aWFsIHZhbHVlIGZvciBmaWx0ZXIuICovXG4gICAgQElucHV0KClcbiAgICBmaWx0ZXJWYWx1ZTogYW55O1xuXG4gICAgLyoqIFRoZSBJRCBvZiB0aGUgZm9sZGVyIG5vZGUgdG8gZGlzcGxheSBvciBhIHJlc2VydmVkIHN0cmluZyBhbGlhcyBmb3Igc3BlY2lhbCBzb3VyY2VzICovXG4gICAgQElucHV0KClcbiAgICBjdXJyZW50Rm9sZGVySWQ6IHN0cmluZyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiBub2RlcyB0byBiZSBwcmUtc2VsZWN0ZWQuIEFsbCBub2RlcyBpbiB0aGVcbiAgICAgKiBhcnJheSBhcmUgcHJlLXNlbGVjdGVkIGluIG11bHRpIHNlbGVjdGlvbiBtb2RlLCBidXQgb25seSB0aGUgZmlyc3Qgbm9kZVxuICAgICAqIGlzIHByZS1zZWxlY3RlZCBpbiBzaW5nbGUgc2VsZWN0aW9uIG1vZGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcmVzZWxlY3ROb2RlczogTm9kZUVudHJ5W10gPSBbXTtcblxuICAgIC8qKiBUaGUgRG9jdW1lbnQgbGlzdCB3aWxsIHNob3cgYWxsIHRoZSBub2RlcyBjb250YWluZWQgaW4gdGhlIE5vZGVQYWdpbmcgZW50aXR5ICovXG4gICAgQElucHV0KClcbiAgICBub2RlOiBOb2RlUGFnaW5nID0gbnVsbDtcblxuICAgIC8qKiBEZWZhdWx0IHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgdXNlciBwcmVmZXJlbmNlIHNldHRpbmdzLiBVc2UgdGhpcyBvbmx5IGlmIHlvdSBhcmUgbm90IHVzaW5nIHBhZ2luYXRpb24uICovXG4gICAgQElucHV0KClcbiAgICBtYXhJdGVtczogbnVtYmVyID0gdGhpcy5ERUZBVUxUX1BBR0lOQVRJT04ubWF4SXRlbXM7XG5cbiAgICAvKiogS2V5IG9mIGNvbHVtbnMgcHJlc2V0IHNldCBpbiBleHRlbnNpb24uanNvbiAgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbHVtbnNQcmVzZXRLZXk/OiBzdHJpbmc7XG5cbiAgICAvKiogU2V0cyBjb2x1bW5zIHZpc2liaWxpdHkgZm9yIERhdGFUYWJsZVNjaGVtYSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNldENvbHVtbnNWaXNpYmlsaXR5KGNvbHVtbnNWaXNpYmlsaXR5OiB7IFtjb2x1bW5JZDogc3RyaW5nXTogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29sdW1uc1Zpc2liaWxpdHkgPSBjb2x1bW5zVmlzaWJpbGl0eTtcbiAgICB9XG5cbiAgICAvKiogU2V0cyBjb2x1bW5zIHdpZHRoIGZvciBEYXRhVGFibGVTY2hlbWEgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZXRDb2x1bW5zV2lkdGhzKGNvbHVtbnNXaWR0aHM6IHsgW2NvbHVtbklkOiBzdHJpbmddOiBudW1iZXIgfSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbHVtbnNXaWR0aHMgPSBjb2x1bW5zV2lkdGhzO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIGNvbHVtbnMgb3JkZXIgZm9yIERhdGFUYWJsZVNjaGVtYSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNldENvbHVtbnNPcmRlcihjb2x1bW5zT3JkZXI6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29sdW1uc09yZGVyID0gY29sdW1uc09yZGVyO1xuICAgIH1cblxuICAgIC8qKiBMaW1pdCBvZiBwb3NzaWJsZSB2aXNpYmxlIGNvbHVtbnMsIGluY2x1ZGluZyBcIiR0aHVtYm5haWxcIiBjb2x1bW4gaWYgcHJvdmlkZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIG1heENvbHVtbnNWaXNpYmxlPzogbnVtYmVyO1xuXG4gICAgLyoqIEVuYWJsZXMgY29sdW1uIHJlc2l6aW5nIGZvciBkYXRhdGFibGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzUmVzaXppbmdFbmFibGVkID0gZmFsc2U7XG5cbiAgICAvKiogRW5hYmxlcyBibHVyIHdoZW4gcmVzaXppbmcgZGF0YXRhYmxlIGNvbHVtbnMgKi9cbiAgICBASW5wdXQoKVxuICAgIGJsdXJPblJlc2l6ZSA9IHRydWU7XG5cbiAgICAvKiogRGlzcGxheSBjaGVja2JveGVzIGluIGRhdGF0YWJsZSByb3dzIG9uIGhvdmVyIG9ubHkgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlDaGVja2JveGVzT25Ib3ZlciA9IGZhbHNlO1xuXG4gICAgLyoqIERpc3BsYXkgZHJhZyBhbmQgZHJvcCBoaW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheURyYWdBbmREcm9wSGludCA9IHRydWU7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBhIGxpc3Qgbm9kZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudGl0eUV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBkb3VibGUtY2xpY2tzIGEgbGlzdCBub2RlICovXG4gICAgQE91dHB1dCgpXG4gICAgbm9kZURibENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlRW50aXR5RXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBjdXJyZW50IGRpc3BsYXkgZm9sZGVyIGNoYW5nZXMgKi9cbiAgICBAT3V0cHV0KClcbiAgICBmb2xkZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVFbnRyeUV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGFjdHMgdXBvbiBmaWxlcyB3aXRoIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIGNsaWNrXG4gICAgICogKGRlcGVuZHMgb24gYG5hdmlnYXRpb24tbW9kZWApLiBVc2VmdWwgZm9yIGludGVncmF0aW9uIHdpdGggdGhlXG4gICAgICogVmlld2VyIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwcmV2aWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlRW50aXR5RXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBEb2N1bWVudCBMaXN0IGhhcyBsb2FkZWQgYWxsIGl0ZW1zIGFuZCBpcyByZWFkeSBmb3IgdXNlICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVQYWdpbmc+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBBUEkgZmFpbHMgdG8gZ2V0IHRoZSBEb2N1bWVudCBMaXN0IGRhdGEgKi9cbiAgICBAT3V0cHV0KClcbiAgICBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgbm9kZSBzZWxlY3Rpb24gY2hhbmdlICovXG4gICAgQE91dHB1dCgpXG4gICAgbm9kZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlRW50cnlbXT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBmaWx0ZXIgdmFsdWUgaXMgc2VsZWN0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBmaWx0ZXJTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlclNlYXJjaFtdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBjb2x1bW4gd2lkdGhzIGNoYW5nZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNvbHVtbnNXaWR0aENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgW2NvbHVtbklkOiBzdHJpbmddOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gY29sdW1ucyB2aXNpYmlsaXR5IGNoYW5nZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNvbHVtbnNWaXNpYmlsaXR5Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBbY29sdW1uSWQ6IHN0cmluZ106IGJvb2xlYW4gfSB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gY29sdW1ucyBvcmRlciBjaGFuZ2UgKi9cbiAgICBAT3V0cHV0KClcbiAgICBjb2x1bW5zT3JkZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXSB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIHJvdyBpdGVtcyBjb3VudCBpbiB0aGUgdGFibGUgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWxlY3RlZEl0ZW1zQ291bnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdkYXRhVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGRhdGFUYWJsZTogRGF0YVRhYmxlQ29tcG9uZW50O1xuXG4gICAgYWN0aW9uczogQ29udGVudEFjdGlvbk1vZGVsW10gPSBbXTtcbiAgICBjb250ZXh0QWN0aW9uSGFuZGxlcjogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBkYXRhOiBTaGFyZURhdGFUYWJsZUFkYXB0ZXI7XG4gICAgbm9QZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG4gICAgc2VsZWN0aW9uID0gbmV3IEFycmF5PE5vZGVFbnRyeT4oKTtcbiAgICAkZm9sZGVyTm9kZTogU3ViamVjdDxOb2RlPiA9IG5ldyBTdWJqZWN0PE5vZGU+KCk7XG4gICAgYWxsb3dGaWx0ZXJpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICAgIG9yZGVyQnk6IHN0cmluZ1tdID0gbnVsbDtcbiAgICBwcmVzZWxlY3RlZFJvd3M6IERhdGFSb3dbXSA9IFtdO1xuXG4gICAgLy8gQGRlcHJlY2F0ZWQgMy4wLjBcbiAgICBmb2xkZXJOb2RlOiBOb2RlO1xuXG4gICAgcHJpdmF0ZSBfcGFnaW5hdGlvbjogUGFnaW5hdGlvbk1vZGVsID0gdGhpcy5ERUZBVUxUX1BBR0lOQVRJT047XG4gICAgcGFnaW5hdGlvbjogQmVoYXZpb3JTdWJqZWN0PFBhZ2luYXRpb25Nb2RlbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhZ2luYXRpb25Nb2RlbD4odGhpcy5ERUZBVUxUX1BBR0lOQVRJT04pO1xuICAgIHNvcnRpbmdTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8RGF0YVNvcnRpbmdbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFTb3J0aW5nW10+KHRoaXMuREVGQVVMVF9TT1JUSU5HKTtcblxuICAgIHByaXZhdGUgcm93TWVudUNhY2hlOiB7IFtrZXk6IHN0cmluZ106IENvbnRlbnRBY3Rpb25Nb2RlbFtdIH0gPSB7fTtcbiAgICBwcml2YXRlIGxvYWRpbmdUaW1lb3V0OiBhbnk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBwcml2YXRlIF9ub2Rlc0FwaTogTm9kZXNBcGk7XG4gICAgZ2V0IG5vZGVzQXBpKCk6IE5vZGVzQXBpIHtcbiAgICAgICAgdGhpcy5fbm9kZXNBcGkgPSB0aGlzLl9ub2Rlc0FwaSA/PyBuZXcgTm9kZXNBcGkodGhpcy5hbGZyZXNjb0FwaVNlcnZpY2UuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc0FwaTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkb2N1bWVudExpc3RTZXJ2aWNlOiBEb2N1bWVudExpc3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlc1NlcnZpY2U6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29udGVudFNlcnZpY2U6IENvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRodW1ibmFpbFNlcnZpY2U6IFRodW1ibmFpbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWxmcmVzY29BcGlTZXJ2aWNlOiBBbGZyZXNjb0FwaVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IE5vZGVzQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkYXRhVGFibGVTZXJ2aWNlOiBEYXRhVGFibGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZ1xuICAgICkge1xuICAgICAgICBzdXBlcihhcHBDb25maWcsICdkZWZhdWx0JywgcHJlc2V0c0RlZmF1bHRNb2RlbCk7XG4gICAgICAgIHRoaXMubm9kZVNlcnZpY2Uubm9kZVVwZGF0ZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChub2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFUYWJsZVNlcnZpY2Uucm93VXBkYXRlLm5leHQoeyBpZDogbm9kZS5pZCwgb2JqOiB7IGVudHJ5OiBub2RlIH0gfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXNlclByZWZlcmVuY2VzU2VydmljZVxuICAgICAgICAgICAgLnNlbGVjdChVc2VyUHJlZmVyZW5jZVZhbHVlcy5QYWdpbmF0aW9uU2l6ZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocGFnU2l6ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubWF4SXRlbXMgPSB0aGlzLl9wYWdpbmF0aW9uLm1heEl0ZW1zID0gcGFnU2l6ZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldENvbnRleHRBY3Rpb25zKG5vZGU6IE5vZGVFbnRyeSkge1xuICAgICAgICBpZiAobm9kZT8uZW50cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLmdldE5vZGVBY3Rpb25zKG5vZGUpO1xuICAgICAgICAgICAgaWYgKGFjdGlvbnMgJiYgYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnMubWFwKChjdXJyZW50QWN0aW9uOiBDb250ZW50QWN0aW9uTW9kZWwpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiBjdXJyZW50QWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0OiB0aGlzLmNvbnRleHRBY3Rpb25IYW5kbGVyXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGVmYXVsdFNvcnRpbmcoKTogRGF0YVNvcnRpbmcge1xuICAgICAgICBsZXQgZGVmYXVsdFNvcnRpbmc6IERhdGFTb3J0aW5nO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnNvcnRpbmcpKSB7XG4gICAgICAgICAgICBjb25zdCBba2V5LCBkaXJlY3Rpb25dID0gdGhpcy5zb3J0aW5nO1xuICAgICAgICAgICAgZGVmYXVsdFNvcnRpbmcgPSBuZXcgRGF0YVNvcnRpbmcoa2V5LCBkaXJlY3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVmYXVsdFNvcnRpbmcgPSBuZXcgRGF0YVNvcnRpbmcodGhpcy5zb3J0aW5nLmtleSwgdGhpcy5zb3J0aW5nLmRpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmYXVsdFNvcnRpbmc7XG4gICAgfVxuXG4gICAgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIS9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuZGF0YSB8fCB0aGlzLmRhdGEuZ2V0Um93cygpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5yb3dNZW51Q2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5sb2FkTGF5b3V0UHJlc2V0cygpO1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgU2hhcmVEYXRhVGFibGVBZGFwdGVyKFxuICAgICAgICAgICAgdGhpcy50aHVtYm5haWxTZXJ2aWNlLFxuICAgICAgICAgICAgdGhpcy5jb250ZW50U2VydmljZSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB0aGlzLmdldERlZmF1bHRTb3J0aW5nKCksXG4gICAgICAgICAgICB0aGlzLnNvcnRpbmdNb2RlLFxuICAgICAgICAgICAgdGhpcy5hbGxvd0Ryb3BGaWxlc1xuICAgICAgICApO1xuICAgICAgICB0aGlzLmRhdGEudGh1bWJuYWlscyA9IHRoaXMudGh1bWJuYWlscztcbiAgICAgICAgdGhpcy5kYXRhLnBlcm1pc3Npb25zU3R5bGUgPSB0aGlzLnBlcm1pc3Npb25zU3R5bGU7XG5cbiAgICAgICAgaWYgKHRoaXMuX3Jvd0ZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldEZpbHRlcih0aGlzLl9yb3dGaWx0ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VSZXNvbHZlcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldEltYWdlUmVzb2x2ZXIodGhpcy5pbWFnZVJlc29sdmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udGV4dEFjdGlvbkhhbmRsZXIucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCh2YWwpID0+IHRoaXMuY29udGV4dEFjdGlvbkNhbGxiYWNrKHZhbCkpO1xuXG4gICAgICAgIHRoaXMuZW5mb3JjZVNpbmdsZUNsaWNrTmF2aWdhdGlvbkZvck1vYmlsZSgpO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJWYWx1ZSAmJiBPYmplY3Qua2V5cyh0aGlzLmZpbHRlclZhbHVlKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dIZWFkZXIgPSBTaG93SGVhZGVyTW9kZS5BbHdheXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uc1ByZXNldEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcmVzZXRLZXkodGhpcy5jb2x1bW5zUHJlc2V0S2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0U2VydmljZS5yZWxvYWQkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50TGlzdFNlcnZpY2UucmVzZXRTZWxlY3Rpb24kLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5MaXN0LmNvbHVtbnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZURhdGF0YWJsZVNjaGVtYSgpO1xuICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKCFjaGFuZ2VzWydwcmVzZWxlY3ROb2RlcyddKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnNvcnRpbmcpKSB7XG4gICAgICAgICAgICBjb25zdCBba2V5LCBkaXJlY3Rpb25dID0gdGhpcy5zb3J0aW5nO1xuICAgICAgICAgICAgdGhpcy5vcmRlckJ5ID0gdGhpcy5idWlsZE9yZGVyQnlBcnJheShrZXksIGRpcmVjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9yZGVyQnkgPSB0aGlzLmJ1aWxkT3JkZXJCeUFycmF5KHRoaXMuc29ydGluZy5rZXksIHRoaXMuc29ydGluZy5kaXJlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnRodW1ibmFpbHMgPSB0aGlzLnRodW1ibmFpbHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5zb3J0aW5nTW9kZSAmJiAhY2hhbmdlcy5zb3J0aW5nTW9kZS5maXJzdENoYW5nZSAmJiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zb3J0aW5nTW9kZSA9IGNoYW5nZXMuc29ydGluZ01vZGUuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuc29ydGluZyAmJiAhY2hhbmdlcy5zb3J0aW5nLmZpcnN0Q2hhbmdlICYmIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjaGFuZ2VzLnNvcnRpbmcuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICYmIG5ld1ZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBba2V5LCBkaXJlY3Rpb25dID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnNldFNvcnRpbmcobmV3IERhdGFTb3J0aW5nKGtleSwgZGlyZWN0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Rm9sZGVySWQgJiYgY2hhbmdlc1snY3VycmVudEZvbGRlcklkJ10/LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snY3VycmVudEZvbGRlcklkJ10/LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZEZvbGRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMubm9kZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVyZ2UgPSB0aGlzLl9wYWdpbmF0aW9uID8gdGhpcy5fcGFnaW5hdGlvbi5tZXJnZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5sb2FkUGFnZShjaGFuZ2VzLm5vZGUuY3VycmVudFZhbHVlLCBtZXJnZSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZUV4aXN0aW5nU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblByZXNlbGVjdE5vZGVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFSZWFkeShjaGFuZ2VzLm5vZGUuY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlcy5pbWFnZVJlc29sdmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnNldEltYWdlUmVzb2x2ZXIoY2hhbmdlcy5pbWFnZVJlc29sdmVyLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWxvYWQoaGlkZUxvYWRpbmdTcGlubmVyID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnJlbG9hZFdpdGhvdXRSZXNldHRpbmdTZWxlY3Rpb24oaGlkZUxvYWRpbmdTcGlubmVyKTtcbiAgICB9XG5cbiAgICByZWxvYWRXaXRob3V0UmVzZXR0aW5nU2VsZWN0aW9uKGhpZGVMb2FkaW5nU3Bpbm5lciA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLm5vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEubG9hZFBhZ2UodGhpcy5ub2RlLCB0aGlzLl9wYWdpbmF0aW9uLm1lcmdlLCBudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlRXhpc3RpbmdTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25QcmVzZWxlY3ROb2RlcygpO1xuICAgICAgICAgICAgdGhpcy5zeW5jUGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFSZWFkeSh0aGlzLm5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkRm9sZGVyKGhpZGVMb2FkaW5nU3Bpbm5lcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb250ZXh0QWN0aW9uQ2FsbGJhY2soYWN0aW9uKSB7XG4gICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUNvbnRlbnRBY3Rpb24oYWN0aW9uLm5vZGUsIGFjdGlvbi5tb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXROb2RlQWN0aW9ucyhub2RlOiBOb2RlRW50cnkgfCBhbnkpOiBDb250ZW50QWN0aW9uTW9kZWxbXSB7XG4gICAgICAgIGlmIChub2RlPy5lbnRyeSkge1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChub2RlLmVudHJ5LmlzRmlsZSkge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9ICdkb2N1bWVudCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuZW50cnkuaXNGb2xkZXIpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSAnZm9sZGVyJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLnJvd01lbnVDYWNoZVtub2RlLmVudHJ5LmlkXTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoQWN0aW9uKGFjdGlvbiwgbm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9ucztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zQnlUYXJnZXQgPSB0aGlzLmFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IHR5cGVvZiBlbnRyeS52aXNpYmxlID09PSAnZnVuY3Rpb24nID8gZW50cnkudmlzaWJsZShub2RlKSA6IGVudHJ5LnZpc2libGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgZW50cnkudGFyZ2V0LnRvTG93ZXJDYXNlKCkgPT09IHRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoYWN0aW9uKSA9PiBuZXcgQ29udGVudEFjdGlvbk1vZGVsKGFjdGlvbikpO1xuXG4gICAgICAgICAgICAgICAgYWN0aW9uc0J5VGFyZ2V0LmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hBY3Rpb24oYWN0aW9uLCBub2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMucm93TWVudUNhY2hlW25vZGUuZW50cnkuaWRdID0gYWN0aW9uc0J5VGFyZ2V0O1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zQnlUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoQWN0aW9uKGFjdGlvbjogQ29udGVudEFjdGlvbk1vZGVsLCBub2RlOiBOb2RlRW50cnkpIHtcbiAgICAgICAgYWN0aW9uLmRpc2FibGVkID0gdGhpcy5pc0FjdGlvbkRpc2FibGVkKGFjdGlvbiwgbm9kZSk7XG4gICAgICAgIGFjdGlvbi52aXNpYmxlID0gdGhpcy5pc0FjdGlvblZpc2libGUoYWN0aW9uLCBub2RlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWN0aW9uVmlzaWJsZShhY3Rpb246IENvbnRlbnRBY3Rpb25Nb2RlbCwgbm9kZTogTm9kZUVudHJ5KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLnZpc2libGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24udmlzaWJsZShub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY3Rpb24udmlzaWJsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWN0aW9uRGlzYWJsZWQoYWN0aW9uOiBDb250ZW50QWN0aW9uTW9kZWwsIG5vZGU6IE5vZGVFbnRyeSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZChub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChhY3Rpb24ucGVybWlzc2lvbiAmJiBhY3Rpb24uZGlzYWJsZVdpdGhOb1Blcm1pc3Npb24gJiYgIXRoaXMuY29udGVudFNlcnZpY2UuaGFzQWxsb3dhYmxlT3BlcmF0aW9ucyhub2RlLmVudHJ5LCBhY3Rpb24ucGVybWlzc2lvbikpIHx8XG4gICAgICAgICAgICB0aGlzLmxvY2tTZXJ2aWNlLmlzTG9ja2VkKG5vZGUuZW50cnkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc2FibGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY29udGV4dG1lbnUnLCBbJyRldmVudCddKVxuICAgIG9uU2hvd0NvbnRleHRNZW51KGU/OiBFdmVudCkge1xuICAgICAgICBpZiAoZSAmJiB0aGlzLmNvbnRleHRNZW51QWN0aW9ucykge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmF2aWdhdGVUbyhub2RlOiBOb2RlIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXROZXdGb2xkZXJQYWdpbmF0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2xkZXJJZCA9IG5vZGU7XG4gICAgICAgICAgICB0aGlzLmZvbGRlckNoYW5nZS5lbWl0KG5ldyBOb2RlRW50cnlFdmVudCh7IGlkOiBub2RlIH0gYXMgTm9kZSkpO1xuICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FuTmF2aWdhdGVGb2xkZXIobm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0TmV3Rm9sZGVyUGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvbGRlcklkID0gdGhpcy5nZXROb2RlRm9sZGVyRGVzdGluYXRpb25JZChub2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRlckNoYW5nZS5lbWl0KG5ldyBOb2RlRW50cnlFdmVudCh7IGlkOiB0aGlzLmN1cnJlbnRGb2xkZXJJZCB9IGFzIE5vZGUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vZGVGb2xkZXJEZXN0aW5hdGlvbklkKG5vZGU6IE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaW5rRm9sZGVyKG5vZGUpID8gbm9kZS5wcm9wZXJ0aWVzWydjbTpkZXN0aW5hdGlvbiddIDogbm9kZS5pZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTGlua0ZvbGRlcihub2RlOiBOb2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAnYXBwOmZvbGRlcmxpbmsnICYmIG5vZGUucHJvcGVydGllcz8uWydjbTpkZXN0aW5hdGlvbiddO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ3VzdG9tU291cmNlRGF0YShub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnRGb2xkZXJJZCA9IG5vZGVJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gZXhlY3V0aW5nIGNvbnRlbnQgYWN0aW9uIGZvciBhIGRvY3VtZW50IG9yIGZvbGRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdG8gYmUgdGhlIGNvbnRleHQgb2YgdGhlIGV4ZWN1dGlvbi5cbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiB0byBiZSBleGVjdXRlZCBhZ2FpbnN0IHRoZSBjb250ZXh0LlxuICAgICAqL1xuICAgIGV4ZWN1dGVDb250ZW50QWN0aW9uKG5vZGU6IE5vZGVFbnRyeSwgYWN0aW9uOiBDb250ZW50QWN0aW9uTW9kZWwpIHtcbiAgICAgICAgaWYgKG5vZGU/LmVudHJ5ICYmIGFjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlclN1YiA9IHR5cGVvZiBhY3Rpb24uaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbi5oYW5kbGVyKG5vZGUsIHRoaXMsIGFjdGlvbi5wZXJtaXNzaW9uKSA6IG9mKHRydWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5leGVjdXRlID09PSAnZnVuY3Rpb24nICYmIGhhbmRsZXJTdWIpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyU3ViLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiBhY3Rpb24uZXhlY3V0ZShub2RlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExvYWRpbmdTdGF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5kYXRhPy5nZXRSb3dzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkRm9sZGVyKGhpZGVMb2FkaW5nU3Bpbm5lciA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghaGlkZUxvYWRpbmdTcGlubmVyKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvYWRpbmdTdGF0ZSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TGlzdFNlcnZpY2UuaXNDdXN0b21Tb3VyY2VTZXJ2aWNlKHRoaXMuY3VycmVudEZvbGRlcklkKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDdXN0b21Tb3VyY2VEYXRhKHRoaXMuY3VycmVudEZvbGRlcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0U2VydmljZS5sb2FkRm9sZGVyQnlOb2RlSWQodGhpcy5jdXJyZW50Rm9sZGVySWQsIHRoaXMuX3BhZ2luYXRpb24sIHRoaXMuaW5jbHVkZUZpZWxkcywgdGhpcy53aGVyZSwgdGhpcy5vcmRlckJ5KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoZG9jdW1lbnROb2RlOiBEb2N1bWVudExvYWRlck5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnROb2RlLmN1cnJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sZGVyTm9kZSA9IGRvY3VtZW50Tm9kZS5jdXJyZW50Tm9kZS5lbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZm9sZGVyTm9kZS5uZXh0KGRvY3VtZW50Tm9kZS5jdXJyZW50Tm9kZS5lbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlTG9hZGVkKGRvY3VtZW50Tm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNldFNlbGVjdGlvbigpIHtcbiAgICAgICAgdGhpcy5kYXRhVGFibGUucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgdGhpcy5ub1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvblBhZ2VMb2FkZWQobm9kZVBhZ2luZzogTm9kZVBhZ2luZykge1xuICAgICAgICBpZiAobm9kZVBhZ2luZykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5sb2FkUGFnZShub2RlUGFnaW5nLCB0aGlzLl9wYWdpbmF0aW9uLm1lcmdlLCB0aGlzLmFsbG93RHJvcEZpbGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlRXhpc3RpbmdTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25QcmVzZWxlY3ROb2RlcygpO1xuICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFSZWFkeShub2RlUGFnaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU29ydGluZ0NoYW5nZWQoZXZlbnQ6IEN1c3RvbUV2ZW50KSB7XG4gICAgICAgIHRoaXMub3JkZXJCeSA9IHRoaXMuYnVpbGRPcmRlckJ5QXJyYXkoZXZlbnQuZGV0YWlsLnNvcnRpbmdLZXksIGV2ZW50LmRldGFpbC5kaXJlY3Rpb24pO1xuICAgICAgICB0aGlzLnNvcnRpbmcgPSBbZXZlbnQuZGV0YWlsLnNvcnRpbmdLZXksIGV2ZW50LmRldGFpbC5kaXJlY3Rpb25dO1xuICAgICAgICB0aGlzLnNvcnRpbmdTdWJqZWN0Lm5leHQoW3RoaXMuYWRkaXRpb25hbFNvcnRpbmcsIGV2ZW50LmRldGFpbF0pO1xuXG4gICAgICAgIGlmICh0aGlzLnNvcnRpbmdNb2RlID09PSAnc2VydmVyJykge1xuICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPcmRlckJ5QXJyYXkoY3VycmVudEtleTogc3RyaW5nLCBjdXJyZW50RGlyZWN0aW9uOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbYCR7dGhpcy5hZGRpdGlvbmFsU29ydGluZy5rZXl9ICR7dGhpcy5hZGRpdGlvbmFsU29ydGluZy5kaXJlY3Rpb259YCwgYCR7Y3VycmVudEtleX0gJHtjdXJyZW50RGlyZWN0aW9ufWBdO1xuICAgIH1cblxuICAgIG9uUHJldmlld0ZpbGUobm9kZTogTm9kZUVudHJ5KSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBjb25zdCBzaXplSW5NQiA9IG5vZGUuZW50cnk/LmNvbnRlbnQ/LnNpemVJbkJ5dGVzIC8gQllURVNfVE9fTUJfQ09OVkVSU0lPTl9WQUxVRTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVBdXRvRG93bmxvYWRGbGFnOiBib29sZWFuID0gdGhpcy5hcHBDb25maWcuZ2V0KCd2aWV3ZXIuZW5hYmxlRmlsZUF1dG9Eb3dubG9hZCcsIHRydWUpO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZVRocmVzaG9sZDogbnVtYmVyID0gdGhpcy5hcHBDb25maWcuZ2V0KCd2aWV3ZXIuZmlsZUF1dG9Eb3dubG9hZFNpemVUaHJlc2hvbGRJbk1CJywgMTUpO1xuXG4gICAgICAgICAgICBpZiAoZmlsZUF1dG9Eb3dubG9hZEZsYWcgJiYgc2l6ZUluTUIgJiYgc2l6ZUluTUIgPiBzaXplVGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihGaWxlQXV0b0Rvd25sb2FkQ29tcG9uZW50LCB7IGRpc2FibGVDbG9zZTogdHJ1ZSwgZGF0YTogbm9kZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3LmVtaXQobmV3IE5vZGVFbnRpdHlFdmVudChub2RlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNvbHVtbnNWaXNpYmlsaXR5Q2hhbmdlKGNvbHVtbnM6IERhdGFDb2x1bW5bXSkge1xuICAgICAgICB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5ID0gY29sdW1ucy5yZWR1Y2UoKHZpc2libGVDb2x1bW5zTWFwLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4uaXNIaWRkZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZpc2libGVDb2x1bW5zTWFwW2NvbHVtbi5pZF0gPSAhY29sdW1uLmlzSGlkZGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmlzaWJsZUNvbHVtbnNNYXA7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eUNoYW5nZWQuZW1pdCh0aGlzLmNvbHVtbnNWaXNpYmlsaXR5KTtcbiAgICB9XG5cbiAgICBvbkNvbHVtbk9yZGVyQ2hhbmdlKGNvbHVtbnNXaXRoTmV3T3JkZXI6IERhdGFDb2x1bW5bXSkge1xuICAgICAgICB0aGlzLmNvbHVtbnNPcmRlciA9IGNvbHVtbnNXaXRoTmV3T3JkZXIubWFwKChjb2x1bW4pID0+IGNvbHVtbi5pZCk7XG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmNvbHVtbnNPcmRlckNoYW5nZWQuZW1pdCh0aGlzLmNvbHVtbnNPcmRlcik7XG4gICAgfVxuXG4gICAgb25Db2x1bW5zV2lkdGhDaGFuZ2UoY29sdW1uczogRGF0YUNvbHVtbltdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbHVtbnNXaWR0aHMgPSBjb2x1bW5zLnJlZHVjZSgod2lkdGhzQ29sdW1uc01hcCwgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgd2lkdGhzQ29sdW1uc01hcFtjb2x1bW4uaWRdID0gTWF0aC5jZWlsKGNvbHVtbi53aWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd2lkdGhzQ29sdW1uc01hcDtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIHRoaXMuY29sdW1uc1dpZHRocyA9IHsgLi4udGhpcy5jb2x1bW5zV2lkdGhzLCAuLi5uZXdDb2x1bW5zV2lkdGhzIH07XG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmNvbHVtbnNXaWR0aENoYW5nZWQuZW1pdCh0aGlzLmNvbHVtbnNXaWR0aHMpO1xuICAgIH1cblxuICAgIG9uU2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZChjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZC5lbWl0KGNvdW50KTtcbiAgICB9XG5cbiAgICBvbk5vZGVDbGljayhub2RlRW50cnk6IE5vZGVFbnRyeSkge1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbm9kZS1jbGljaycsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBub2RlOiBub2RlRW50cnlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IE5vZGVFbnRpdHlFdmVudChub2RlRW50cnkpO1xuICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KGV2ZW50KTtcblxuICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRlICYmIHRoaXMubmF2aWdhdGlvbk1vZGUgPT09IERvY3VtZW50TGlzdENvbXBvbmVudC5TSU5HTEVfQ0xJQ0tfTkFWSUdBVElPTikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUFjdGlvbkNsaWNrKG5vZGVFbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVEYmxDbGljayhub2RlRW50cnk6IE5vZGVFbnRyeSkge1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbm9kZS1kYmxjbGljaycsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBub2RlOiBub2RlRW50cnlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGRvbUV2ZW50KTtcblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBOb2RlRW50aXR5RXZlbnQobm9kZUVudHJ5KTtcbiAgICAgICAgdGhpcy5ub2RlRGJsQ2xpY2suZW1pdChldmVudCk7XG5cbiAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZSAmJiB0aGlzLm5hdmlnYXRpb25Nb2RlID09PSBEb2N1bWVudExpc3RDb21wb25lbnQuRE9VQkxFX0NMSUNLX05BVklHQVRJT04pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVBY3Rpb25DbGljayhub2RlRW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUFjdGlvbkNsaWNrKG5vZGVFbnRyeTogTm9kZUVudHJ5KSB7XG4gICAgICAgIGlmIChub2RlRW50cnk/LmVudHJ5KSB7XG4gICAgICAgICAgICBpZiAobm9kZUVudHJ5LmVudHJ5LmlzRmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25QcmV2aWV3RmlsZShub2RlRW50cnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZUVudHJ5LmVudHJ5LmlzRm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvKG5vZGVFbnRyeS5lbnRyeSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlRW50cnkuZW50cnlbJ2d1aWQnXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6IHRoaXMuaW5jbHVkZUZpZWxkc1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzQXBpLmdldE5vZGUobm9kZUVudHJ5LmVudHJ5WydndWlkJ10sIG9wdGlvbnMpLnRoZW4oKG5vZGU6IE5vZGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG8obm9kZS5lbnRyeSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVTZWxlY3QoZXZlbnQ6IHsgcm93OiBTaGFyZURhdGFSb3c7IHNlbGVjdGlvbjogQXJyYXk8U2hhcmVEYXRhUm93PiB9KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gZXZlbnQuc2VsZWN0aW9uLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5vZGUpO1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbm9kZS1zZWxlY3QnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBub2RlOiBldmVudC5yb3cgPyBldmVudC5yb3cubm9kZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubm9kZVNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGRvbUV2ZW50KTtcbiAgICB9XG5cbiAgICBvbk5vZGVVbnNlbGVjdChldmVudDogeyByb3c6IFNoYXJlRGF0YVJvdzsgc2VsZWN0aW9uOiBBcnJheTxTaGFyZURhdGFSb3c+IH0pIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBldmVudC5zZWxlY3Rpb24ubWFwKChlbnRyeSkgPT4gZW50cnkubm9kZSk7XG4gICAgICAgIGNvbnN0IGRvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdub2RlLXVuc2VsZWN0Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgbm9kZTogZXZlbnQucm93ID8gZXZlbnQucm93Lm5vZGUgOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5zZWxlY3Rpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5vZGVTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG4gICAgfVxuXG4gICAgb25TaG93Um93Q29udGV4dE1lbnUoZXZlbnQ6IERhdGFDZWxsRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dE1lbnVBY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gZXZlbnQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gYXJncy5yb3cubm9kZTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgYXJncy5hY3Rpb25zID0gdGhpcy5nZXRDb250ZXh0QWN0aW9ucyhub2RlKSB8fCBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2hvd1Jvd0FjdGlvbnNNZW51KGV2ZW50OiBEYXRhQ2VsbEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRBY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gZXZlbnQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gYXJncy5yb3cubm9kZTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgYXJncy5hY3Rpb25zID0gdGhpcy5nZXROb2RlQWN0aW9ucyhub2RlKSB8fCBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRXhlY3V0ZVJvd0FjdGlvbihldmVudDogRGF0YVJvd0FjdGlvbkV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRBY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gZXZlbnQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gYXJncy5yb3cubm9kZTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGFyZ3MuYWN0aW9uO1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29udGVudEFjdGlvbihub2RlLCBhY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmZvcmNlU2luZ2xlQ2xpY2tOYXZpZ2F0aW9uRm9yTW9iaWxlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc01vYmlsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Nb2RlID0gRG9jdW1lbnRMaXN0Q29tcG9uZW50LlNJTkdMRV9DTElDS19OQVZJR0FUSU9OO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FuTmF2aWdhdGVGb2xkZXIobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY2FuTmF2aWdhdGVGb2xkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAobm9kZT8uaXNGb2xkZXIpIHtcbiAgICAgICAgICAgIGNhbk5hdmlnYXRlRm9sZGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYW5OYXZpZ2F0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGF0YVJlYWR5KG5vZGVQYWdpbmc6IE5vZGVQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5yZWFkeS5lbWl0KG5vZGVQYWdpbmcpO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24ubmV4dChub2RlUGFnaW5nLmxpc3QucGFnaW5hdGlvbik7XG4gICAgfVxuXG4gICAgdXBkYXRlUGFnaW5hdGlvbihyZXF1ZXN0UGFnaW5hdGlvbk1vZGVsOiBSZXF1ZXN0UGFnaW5hdGlvbk1vZGVsKSB7XG4gICAgICAgIHRoaXMuX3BhZ2luYXRpb24ubWF4SXRlbXMgPSByZXF1ZXN0UGFnaW5hdGlvbk1vZGVsLm1heEl0ZW1zO1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uLnNraXBDb3VudCA9IHJlcXVlc3RQYWdpbmF0aW9uTW9kZWwuc2tpcENvdW50O1xuICAgICAgICB0aGlzLnJlbG9hZChyZXF1ZXN0UGFnaW5hdGlvbk1vZGVsLm1lcmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNQYWdpbmF0aW9uKCkge1xuICAgICAgICB0aGlzLm5vZGUubGlzdC5wYWdpbmF0aW9uLm1heEl0ZW1zID0gdGhpcy5fcGFnaW5hdGlvbi5tYXhJdGVtcztcbiAgICAgICAgdGhpcy5ub2RlLmxpc3QucGFnaW5hdGlvbi5za2lwQ291bnQgPSB0aGlzLl9wYWdpbmF0aW9uLnNraXBDb3VudDtcbiAgICB9XG5cbiAgICBvbkZpbHRlclNlbGVjdGlvbkNoYW5nZShhY3RpdmVGaWx0ZXJzOiBGaWx0ZXJTZWFyY2hbXSkge1xuICAgICAgICB0aGlzLmZpbHRlclNlbGVjdGlvbi5lbWl0KGFjdGl2ZUZpbHRlcnMpO1xuICAgIH1cblxuICAgIHJlc2V0TmV3Rm9sZGVyUGFnaW5hdGlvbigpIHtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbi5za2lwQ291bnQgPSAwO1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uLm1heEl0ZW1zID0gdGhpcy5tYXhJdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUVycm9yKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubWVzc2FnZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoSlNPTi5wYXJzZShlcnIubWVzc2FnZSkuZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9QZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIC8qIGVtcHR5ICovXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyKTtcbiAgICB9XG5cbiAgICBnZXRQcmVzZWxlY3RlZE5vZGVzQmFzZWRPblNlbGVjdGlvbk1vZGUoKTogTm9kZUVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNQcmVzZWxlY3RlZE5vZGVzKCkgPyAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSA/IFt0aGlzLnByZXNlbGVjdE5vZGVzWzBdXSA6IHRoaXMucHJlc2VsZWN0Tm9kZXMpIDogW107XG4gICAgfVxuXG4gICAgZ2V0UHJlc2VsZWN0ZWRSb3dzQmFzZWRPblNlbGVjdGlvbk1vZGUoKTogRGF0YVJvd1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUHJlc2VsZWN0ZWRSb3dzKCkgPyAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSA/IFt0aGlzLnByZXNlbGVjdGVkUm93c1swXV0gOiB0aGlzLnByZXNlbGVjdGVkUm93cykgOiBbXTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3Rpb25CYXNlZE9uU2VsZWN0aW9uTW9kZSgpOiBEYXRhUm93W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNQcmVzZWxlY3RlZFJvd3MoKVxuICAgICAgICAgICAgPyB0aGlzLmlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpXG4gICAgICAgICAgICAgICAgPyBbdGhpcy5wcmVzZWxlY3RlZFJvd3NbMF1dXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRhdGEuZ2V0U2VsZWN0ZWRSb3dzKClcbiAgICAgICAgICAgIDogdGhpcy5kYXRhLmdldFNlbGVjdGVkUm93cygpO1xuICAgIH1cblxuICAgIG9uUHJlc2VsZWN0Tm9kZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1ByZXNlbGVjdGVkTm9kZXMoKSkge1xuICAgICAgICAgICAgdGhpcy5wcmVzZWxlY3RSb3dzT2ZQcmVzZWxlY3RlZE5vZGVzKCk7XG4gICAgICAgICAgICBjb25zdCBwcmVzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFByZXNlbGVjdGVkUm93c0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRhdGEuZ2V0U2VsZWN0ZWRSb3dzKCkgYXMgU2hhcmVEYXRhUm93W107XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBwcmVzZWxlY3RlZFJvd3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5zZWxlY3RSb3cobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVNlbGVjdCh7IHJvdzogdW5kZWZpbmVkLCBzZWxlY3Rpb24gfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXNlcnZlRXhpc3RpbmdTZWxlY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VsZWN0aW9uIG9mIHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93T2ZTZWxlY3Rpb24gPSB0aGlzLmRhdGEuZ2V0Um93QnlOb2RlSWQoc2VsZWN0aW9uLmVudHJ5LmlkKTtcbiAgICAgICAgICAgICAgICBpZiAocm93T2ZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcm93T2ZTZWxlY3Rpb24uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJlc2VsZWN0Um93c09mUHJlc2VsZWN0ZWROb2RlcygpIHtcbiAgICAgICAgdGhpcy5wcmVzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgY29uc3QgcHJlc2VsZWN0ZWROb2RlcyA9IHRoaXMuZ2V0UHJlc2VsZWN0ZWROb2Rlc0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk7XG5cbiAgICAgICAgcHJlc2VsZWN0ZWROb2Rlcy5mb3JFYWNoKChwcmVzZWxlY3RlZE5vZGU6IE5vZGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93T2ZQcmVzZWxlY3RlZE5vZGUgPSB0aGlzLmRhdGEuZ2V0Um93QnlOb2RlSWQocHJlc2VsZWN0ZWROb2RlLmVudHJ5LmlkKTtcbiAgICAgICAgICAgIGlmIChyb3dPZlByZXNlbGVjdGVkTm9kZSkge1xuICAgICAgICAgICAgICAgIHJvd09mUHJlc2VsZWN0ZWROb2RlLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2VsZWN0ZWRSb3dzLnB1c2gocm93T2ZQcmVzZWxlY3RlZE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1bnNlbGVjdFJvd0Zyb21Ob2RlSWQobm9kZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgcm93VG9VbnNlbGVjdCA9IHRoaXMuZGF0YS5nZXRSb3dCeU5vZGVJZChub2RlSWQpO1xuICAgICAgICBpZiAocm93VG9VbnNlbGVjdD8uaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgcm93VG9VbnNlbGVjdC5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5zZWxlY3RSb3cocm93VG9VbnNlbGVjdCwgZmFsc2UpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb25CYXNlZE9uU2VsZWN0aW9uTW9kZSgpIGFzIFNoYXJlRGF0YVJvd1tdO1xuICAgICAgICAgICAgdGhpcy5vbk5vZGVVbnNlbGVjdCh7IHJvdzogdW5kZWZpbmVkLCBzZWxlY3Rpb24gfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc011bHRpcGxlU2VsZWN0aW9uTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1ByZXNlbGVjdGVkTm9kZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbGVjdE5vZGVzPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzUHJlc2VsZWN0ZWRSb3dzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVzZWxlY3RlZFJvd3M/Lmxlbmd0aCA+IDA7XG4gICAgfVxufVxuIiwiPGFkZi1kYXRhdGFibGVcbiAgICAjZGF0YVRhYmxlXG4gICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW2FjdGlvbnNdPVwiY29udGVudEFjdGlvbnNcIlxuICAgIFthY3Rpb25zUG9zaXRpb25dPVwiY29udGVudEFjdGlvbnNQb3NpdGlvblwiXG4gICAgW211bHRpc2VsZWN0XT1cIm11bHRpc2VsZWN0XCJcbiAgICBbY29udGV4dE1lbnVdPVwiY29udGV4dE1lbnVBY3Rpb25zXCJcbiAgICBbcm93U3R5bGVdPVwicm93U3R5bGVcIlxuICAgIFtyb3dTdHlsZUNsYXNzXT1cInJvd1N0eWxlQ2xhc3NcIlxuICAgIFtzaG93TWFpbkRhdGF0YWJsZUFjdGlvbnNdPVwidHJ1ZVwiXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgW25vUGVybWlzc2lvbl09XCJub1Blcm1pc3Npb25cIlxuICAgIFtzaG93SGVhZGVyXT1cInNob3dIZWFkZXJcIlxuICAgIFtyb3dNZW51Q2FjaGVFbmFibGVkXT1cImZhbHNlXCJcbiAgICBbc3RpY2t5SGVhZGVyXT1cInN0aWNreUhlYWRlclwiXG4gICAgW2FsbG93RmlsdGVyaW5nXT1cImFsbG93RmlsdGVyaW5nXCJcbiAgICBbaXNSZXNpemluZ0VuYWJsZWRdPVwiaXNSZXNpemluZ0VuYWJsZWRcIlxuICAgIFtibHVyT25SZXNpemVdPVwiYmx1ck9uUmVzaXplXCJcbiAgICBbZGlzcGxheUNoZWNrYm94ZXNPbkhvdmVyXT1cImRpc3BsYXlDaGVja2JveGVzT25Ib3ZlclwiXG4gICAgKHNob3dSb3dDb250ZXh0TWVudSk9XCJvblNob3dSb3dDb250ZXh0TWVudSgkZXZlbnQpXCJcbiAgICAoc2hvd1Jvd0FjdGlvbnNNZW51KT1cIm9uU2hvd1Jvd0FjdGlvbnNNZW51KCRldmVudClcIlxuICAgIChleGVjdXRlUm93QWN0aW9uKT1cIm9uRXhlY3V0ZVJvd0FjdGlvbigkZXZlbnQpXCJcbiAgICAoY29sdW1uc1dpZHRoQ2hhbmdlZCk9XCJvbkNvbHVtbnNXaWR0aENoYW5nZSgkZXZlbnQpXCJcbiAgICAoY29sdW1uT3JkZXJDaGFuZ2VkKT1cIm9uQ29sdW1uT3JkZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQpPVwib25TZWxlY3RlZEl0ZW1zQ291bnRDaGFuZ2VkKCRldmVudClcIlxuICAgIChyb3dDbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQudmFsdWU/Lm5vZGUpXCJcbiAgICAocm93RGJsQ2xpY2spPVwib25Ob2RlRGJsQ2xpY2soJGV2ZW50LnZhbHVlPy5ub2RlKVwiXG4gICAgKHJvdy1zZWxlY3QpPVwib25Ob2RlU2VsZWN0KCRhbnkoJGV2ZW50KS5kZXRhaWwpXCJcbiAgICAocm93LXVuc2VsZWN0KT1cIm9uTm9kZVVuc2VsZWN0KCRhbnkoJGV2ZW50KS5kZXRhaWwpXCJcbiAgICAoc29ydGluZy1jaGFuZ2VkKT1cIm9uU29ydGluZ0NoYW5nZWQoJGFueSgkZXZlbnQpKVwiXG4gICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtZ2FsbGVyeS10aHVtYm5haWxzXT1cImRhdGEudGh1bWJuYWlsc1wiPlxuXG4gICAgPGRpdiAqbmdJZj1cImhlYWRlckZpbHRlcnNcIj5cbiAgICAgICAgPGFkZi1maWx0ZXItaGVhZGVyXG4gICAgICAgICAgICBbY3VycmVudEZvbGRlcklkXT1cImN1cnJlbnRGb2xkZXJJZFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgKGZpbHRlclNlbGVjdGlvbik9XCJvbkZpbHRlclNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxhZGYtbm8tY29udGVudC10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGFkZi1lbXB0eS1saXN0ICpuZ0lmPVwiIWN1c3RvbU5vQ29udGVudFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lbXB0eS1saXN0X3RlbXBsYXRlIGFkZi1lbXB0eS1mb2xkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lbXB0eS1mb2xkZXItdGhpcy1zcGFjZS1pcy1lbXB0eVwiPnt7J0FERi1ET0NVTUVOVC1MSVNULkVNUFRZLkhFQURFUicgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheURyYWdBbmREcm9wSGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lbXB0eS1mb2xkZXItZHJhZy1kcm9wXCI+e3sgJ0FERi1EQVRBVEFCTEUuRU1QVFkuRFJBRy1BTkQtRFJPUC5USVRMRScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZW1wdHktZm9sZGVyLWFueS1maWxlcy1oZXJlLXRvLWFkZFwiPnt7ICdBREYtREFUQVRBQkxFLkVNUFRZLkRSQUctQU5ELURST1AuU1VCVElUTEUnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIFthbHRdPVwiJ0FERi1EQVRBVEFCTEUuRU1QVFkuRFJBRy1BTkQtRFJPUC5USVRMRScgfCB0cmFuc2xhdGVcIiBjbGFzcz1cImFkZi1lbXB0eS1mb2xkZXItaW1hZ2VcIiBbc3JjXT1cImVtcHR5Rm9sZGVySW1hZ2VVcmxcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYWRmLWVtcHR5LWxpc3Q+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGUsIGVtcHR5LWZvbGRlci1jb250ZW50XCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2FkZi1uby1jb250ZW50LXRlbXBsYXRlPlxuXG4gICAgPGFkZi1uby1wZXJtaXNzaW9uLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLW5vLXBlcm1pc3Npb25fX3RlbXBsYXRlXCIgKm5nSWY9XCIhY3VzdG9tTm9QZXJtaXNzaW9uc1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmVycm9yPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFkZi1uby1wZXJtaXNzaW9uX190ZW1wbGF0ZS0tdGV4dFwiPnt7ICdBREYtRE9DVU1FTlQtTElTVC5OT19QRVJNSVNTSU9OJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWN1c3RvbS1uby1wZXJtaXNzaW9uLXRlbXBsYXRlLCBuby1wZXJtaXNzaW9uLWNvbnRlbnRcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvYWRmLW5vLXBlcm1pc3Npb24tdGVtcGxhdGU+XG5cbiAgICA8YWRmLWxvYWRpbmctY29udGVudC10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1kb2N1bWVudC1saXN0LWxvYWRpbmctY29udGFpbmVyXCIgKm5nSWY9XCIhY3VzdG9tTG9hZGluZ0NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZGYtZG9jdW1lbnQtbGlzdC1sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZG9jdW1lbnQtbGlzdC1sb2FkaW5nLW1hcmdpblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERi1ET0NVTUVOVC1MSVNULkxPQURFUl9MQUJFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiJ2luZGV0ZXJtaW5hdGUnXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWN1c3RvbS1sb2FkaW5nLWNvbnRlbnQtdGVtcGxhdGVcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvYWRmLWxvYWRpbmctY29udGVudC10ZW1wbGF0ZT5cblxuICAgIDxhZGYtbWFpbi1tZW51LWRhdGF0YWJsZS10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1tYWluTWVudVRyaWdnZXI+XG4gICAgICAgICAgICA8YWRmLWRhdGF0YWJsZS1jb2x1bW4tc2VsZWN0b3JcbiAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgICAgICAgIFttYWluTWVudVRyaWdnZXJdPVwibWFpbk1lbnVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgW2NvbHVtbnNTb3J0aW5nXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW21heENvbHVtbnNWaXNpYmxlXT1cIm1heENvbHVtbnNWaXNpYmxlXCJcbiAgICAgICAgICAgICAgKHN1Ym1pdENvbHVtbnNWaXNpYmlsaXR5KT1cIm9uQ29sdW1uc1Zpc2liaWxpdHlDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9hZGYtbWFpbi1tZW51LWRhdGF0YWJsZS10ZW1wbGF0ZT5cblxuPC9hZGYtZGF0YXRhYmxlPlxuIl19