@eo-sdk/client 10.6.10 → 10.6.12

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 (258) hide show
  1. package/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
  2. package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts.map +1 -1
  3. package/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.d.ts.map +1 -1
  4. package/app/eo-framework/inbox-details/inbox-details.component.d.ts.map +1 -1
  5. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts +2 -0
  6. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts.map +1 -1
  7. package/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.d.ts.map +1 -1
  8. package/app/eo-framework/util/services/utilities.service.d.ts +190 -0
  9. package/app/eo-framework/util/services/utilities.service.d.ts.map +1 -1
  10. package/esm2020/app/eo-client/about-state/about-state.component.mjs +3 -3
  11. package/esm2020/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +18 -1
  12. package/esm2020/app/eo-framework/actions/actions/custom-actions/custom-actions.component.mjs +3 -3
  13. package/esm2020/app/eo-framework/app-shell/app-bar/context-search/context-search.component.mjs +3 -3
  14. package/esm2020/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.mjs +2 -1
  15. package/esm2020/app/eo-framework/grid/grid.component.mjs +2 -2
  16. package/esm2020/app/eo-framework/inbox-details/inbox-details.component.mjs +3 -1
  17. package/esm2020/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +3 -3
  18. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +10 -3
  19. package/esm2020/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.mjs +4 -4
  20. package/esm2020/app/eo-framework/object-form/object-form/object-form-script/object-form-scripting-scope.mjs +7 -7
  21. package/esm2020/app/eo-framework/object-form/object-form/object-form.component.mjs +3 -3
  22. package/esm2020/app/eo-framework/quick-search/quick-search/quick-search.component.mjs +3 -3
  23. package/esm2020/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.mjs +2 -2
  24. package/esm2020/app/eo-framework/util/services/utilities.service.mjs +4 -1
  25. package/fesm2015/eo-sdk-client.mjs +74 -46
  26. package/fesm2015/eo-sdk-client.mjs.map +1 -1
  27. package/fesm2020/eo-sdk-client.mjs +74 -46
  28. package/fesm2020/eo-sdk-client.mjs.map +1 -1
  29. package/misc/scripts/exclude-core-ng-package.js +11 -0
  30. package/misc/scripts/prebuild-about-state.js +2 -3
  31. package/package.json +3 -11
  32. package/esm2020/projects/eo-sdk/core/eo-sdk-client-projects-eo-sdk-core.mjs +0 -5
  33. package/esm2020/projects/eo-sdk/core/lib/config/core-config.mjs +0 -23
  34. package/esm2020/projects/eo-sdk/core/lib/config/core-init.service.mjs +0 -71
  35. package/esm2020/projects/eo-sdk/core/lib/config/core-init.tokens.mjs +0 -8
  36. package/esm2020/projects/eo-sdk/core/lib/config/initialize-module.mjs +0 -11
  37. package/esm2020/projects/eo-sdk/core/lib/config/missing-translation-handler.mjs +0 -15
  38. package/esm2020/projects/eo-sdk/core/lib/config/translate-json-loader.mjs +0 -130
  39. package/esm2020/projects/eo-sdk/core/lib/environment.enaio.mjs +0 -12
  40. package/esm2020/projects/eo-sdk/core/lib/eo-core-shared.module.mjs +0 -24
  41. package/esm2020/projects/eo-sdk/core/lib/eo-core.module.mjs +0 -117
  42. package/esm2020/projects/eo-sdk/core/lib/interface/change-password.interface.mjs +0 -2
  43. package/esm2020/projects/eo-sdk/core/lib/interface/event.interface.mjs +0 -2
  44. package/esm2020/projects/eo-sdk/core/lib/interface/http-options.interface.mjs +0 -2
  45. package/esm2020/projects/eo-sdk/core/lib/interface/logger.interface.mjs +0 -7
  46. package/esm2020/projects/eo-sdk/core/lib/interface/organization-objects.interface.mjs +0 -2
  47. package/esm2020/projects/eo-sdk/core/lib/interface/tree-node.interface.mjs +0 -2
  48. package/esm2020/projects/eo-sdk/core/lib/model/baseparams.model.mjs +0 -2
  49. package/esm2020/projects/eo-sdk/core/lib/model/bpm.model.mjs +0 -70
  50. package/esm2020/projects/eo-sdk/core/lib/model/custom-action.model.mjs +0 -2
  51. package/esm2020/projects/eo-sdk/core/lib/model/dms-object-history.model.mjs +0 -30
  52. package/esm2020/projects/eo-sdk/core/lib/model/dms-object.model.mjs +0 -138
  53. package/esm2020/projects/eo-sdk/core/lib/model/eo-error.model.mjs +0 -37
  54. package/esm2020/projects/eo-sdk/core/lib/model/eo-user.model.mjs +0 -86
  55. package/esm2020/projects/eo-sdk/core/lib/model/inbox-item.model.mjs +0 -36
  56. package/esm2020/projects/eo-sdk/core/lib/model/object-type.model.mjs +0 -39
  57. package/esm2020/projects/eo-sdk/core/lib/model/org.model.mjs +0 -2
  58. package/esm2020/projects/eo-sdk/core/lib/model/prepared-item.model.mjs +0 -35
  59. package/esm2020/projects/eo-sdk/core/lib/model/range-value.model.mjs +0 -45
  60. package/esm2020/projects/eo-sdk/core/lib/model/upload-file-item.model.mjs +0 -17
  61. package/esm2020/projects/eo-sdk/core/lib/model/upload-target.model.mjs +0 -50
  62. package/esm2020/projects/eo-sdk/core/lib/model/work-item-history.model.mjs +0 -54
  63. package/esm2020/projects/eo-sdk/core/lib/service/auth/auth-interceptor.mjs +0 -29
  64. package/esm2020/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.mjs +0 -2
  65. package/esm2020/projects/eo-sdk/core/lib/service/auth/auth.service.mjs +0 -215
  66. package/esm2020/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.mjs +0 -2
  67. package/esm2020/projects/eo-sdk/core/lib/service/backend/backend.service.mjs +0 -360
  68. package/esm2020/projects/eo-sdk/core/lib/service/bpm/bpm.service.mjs +0 -286
  69. package/esm2020/projects/eo-sdk/core/lib/service/cache/app-cache.service.mjs +0 -117
  70. package/esm2020/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.mjs +0 -2
  71. package/esm2020/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.mjs +0 -60
  72. package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.mjs +0 -6
  73. package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.mjs +0 -2
  74. package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.mjs +0 -100
  75. package/esm2020/projects/eo-sdk/core/lib/service/config/config.enum.mjs +0 -6
  76. package/esm2020/projects/eo-sdk/core/lib/service/config/config.interface.mjs +0 -2
  77. package/esm2020/projects/eo-sdk/core/lib/service/config/config.service.mjs +0 -135
  78. package/esm2020/projects/eo-sdk/core/lib/service/dms/dms.service.mjs +0 -507
  79. package/esm2020/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.mjs +0 -2
  80. package/esm2020/projects/eo-sdk/core/lib/service/events/event.service.mjs +0 -44
  81. package/esm2020/projects/eo-sdk/core/lib/service/events/events.mjs +0 -27
  82. package/esm2020/projects/eo-sdk/core/lib/service/inbox/inbox.service.mjs +0 -111
  83. package/esm2020/projects/eo-sdk/core/lib/service/logger/console-log.service.mjs +0 -41
  84. package/esm2020/projects/eo-sdk/core/lib/service/logger/logger.mjs +0 -47
  85. package/esm2020/projects/eo-sdk/core/lib/service/notifications/notifications.service.mjs +0 -136
  86. package/esm2020/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.mjs +0 -2
  87. package/esm2020/projects/eo-sdk/core/lib/service/prepare/prepare.service.mjs +0 -305
  88. package/esm2020/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.mjs +0 -2
  89. package/esm2020/projects/eo-sdk/core/lib/service/search/search-query.model.mjs +0 -510
  90. package/esm2020/projects/eo-sdk/core/lib/service/search/search.service.mjs +0 -484
  91. package/esm2020/projects/eo-sdk/core/lib/service/signing/signing.service.mjs +0 -60
  92. package/esm2020/projects/eo-sdk/core/lib/service/storage/local-storage.service.mjs +0 -111
  93. package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.mjs +0 -2
  94. package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.mjs +0 -216
  95. package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.mjs +0 -98
  96. package/esm2020/projects/eo-sdk/core/lib/service/system/system.service.mjs +0 -345
  97. package/esm2020/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.mjs +0 -2
  98. package/esm2020/projects/eo-sdk/core/lib/service/system-status/system-status.service.mjs +0 -104
  99. package/esm2020/projects/eo-sdk/core/lib/service/system-status/system.status.enum.mjs +0 -9
  100. package/esm2020/projects/eo-sdk/core/lib/service/system-status/system.status.interface.mjs +0 -2
  101. package/esm2020/projects/eo-sdk/core/lib/service/upload/upload.service.mjs +0 -46
  102. package/esm2020/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.mjs +0 -83
  103. package/esm2020/projects/eo-sdk/core/lib/service/user/user.service.mjs +0 -399
  104. package/esm2020/projects/eo-sdk/core/lib/util/utils.mjs +0 -304
  105. package/esm2020/projects/eo-sdk/core/public_api.mjs +0 -85
  106. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs +0 -6124
  107. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs.map +0 -1
  108. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs +0 -6139
  109. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs.map +0 -1
  110. package/projects/eo-sdk/core/README.md +0 -113
  111. package/projects/eo-sdk/core/eo-sdk-client-projects-eo-sdk-core.d.ts.map +0 -1
  112. package/projects/eo-sdk/core/index.d.ts +0 -6
  113. package/projects/eo-sdk/core/lib/config/core-config.d.ts +0 -14
  114. package/projects/eo-sdk/core/lib/config/core-config.d.ts.map +0 -1
  115. package/projects/eo-sdk/core/lib/config/core-init.service.d.ts +0 -33
  116. package/projects/eo-sdk/core/lib/config/core-init.service.d.ts.map +0 -1
  117. package/projects/eo-sdk/core/lib/config/core-init.tokens.d.ts +0 -8
  118. package/projects/eo-sdk/core/lib/config/core-init.tokens.d.ts.map +0 -1
  119. package/projects/eo-sdk/core/lib/config/initialize-module.d.ts +0 -7
  120. package/projects/eo-sdk/core/lib/config/initialize-module.d.ts.map +0 -1
  121. package/projects/eo-sdk/core/lib/config/missing-translation-handler.d.ts +0 -14
  122. package/projects/eo-sdk/core/lib/config/missing-translation-handler.d.ts.map +0 -1
  123. package/projects/eo-sdk/core/lib/config/translate-json-loader.d.ts +0 -21
  124. package/projects/eo-sdk/core/lib/config/translate-json-loader.d.ts.map +0 -1
  125. package/projects/eo-sdk/core/lib/environment.enaio.d.ts +0 -6
  126. package/projects/eo-sdk/core/lib/environment.enaio.d.ts.map +0 -1
  127. package/projects/eo-sdk/core/lib/eo-core-shared.module.d.ts +0 -12
  128. package/projects/eo-sdk/core/lib/eo-core-shared.module.d.ts.map +0 -1
  129. package/projects/eo-sdk/core/lib/eo-core.module.d.ts +0 -46
  130. package/projects/eo-sdk/core/lib/eo-core.module.d.ts.map +0 -1
  131. package/projects/eo-sdk/core/lib/interface/change-password.interface.d.ts +0 -8
  132. package/projects/eo-sdk/core/lib/interface/change-password.interface.d.ts.map +0 -1
  133. package/projects/eo-sdk/core/lib/interface/event.interface.d.ts +0 -14
  134. package/projects/eo-sdk/core/lib/interface/event.interface.d.ts.map +0 -1
  135. package/projects/eo-sdk/core/lib/interface/http-options.interface.d.ts +0 -17
  136. package/projects/eo-sdk/core/lib/interface/http-options.interface.d.ts.map +0 -1
  137. package/projects/eo-sdk/core/lib/interface/logger.interface.d.ts +0 -20
  138. package/projects/eo-sdk/core/lib/interface/logger.interface.d.ts.map +0 -1
  139. package/projects/eo-sdk/core/lib/interface/organization-objects.interface.d.ts +0 -20
  140. package/projects/eo-sdk/core/lib/interface/organization-objects.interface.d.ts.map +0 -1
  141. package/projects/eo-sdk/core/lib/interface/tree-node.interface.d.ts +0 -24
  142. package/projects/eo-sdk/core/lib/interface/tree-node.interface.d.ts.map +0 -1
  143. package/projects/eo-sdk/core/lib/model/baseparams.model.d.ts +0 -58
  144. package/projects/eo-sdk/core/lib/model/baseparams.model.d.ts.map +0 -1
  145. package/projects/eo-sdk/core/lib/model/bpm.model.d.ts +0 -253
  146. package/projects/eo-sdk/core/lib/model/bpm.model.d.ts.map +0 -1
  147. package/projects/eo-sdk/core/lib/model/custom-action.model.d.ts +0 -34
  148. package/projects/eo-sdk/core/lib/model/custom-action.model.d.ts.map +0 -1
  149. package/projects/eo-sdk/core/lib/model/dms-object-history.model.d.ts +0 -59
  150. package/projects/eo-sdk/core/lib/model/dms-object-history.model.d.ts.map +0 -1
  151. package/projects/eo-sdk/core/lib/model/dms-object.model.d.ts +0 -137
  152. package/projects/eo-sdk/core/lib/model/dms-object.model.d.ts.map +0 -1
  153. package/projects/eo-sdk/core/lib/model/eo-error.model.d.ts +0 -19
  154. package/projects/eo-sdk/core/lib/model/eo-error.model.d.ts.map +0 -1
  155. package/projects/eo-sdk/core/lib/model/eo-user.model.d.ts +0 -107
  156. package/projects/eo-sdk/core/lib/model/eo-user.model.d.ts.map +0 -1
  157. package/projects/eo-sdk/core/lib/model/inbox-item.model.d.ts +0 -71
  158. package/projects/eo-sdk/core/lib/model/inbox-item.model.d.ts.map +0 -1
  159. package/projects/eo-sdk/core/lib/model/object-type.model.d.ts +0 -125
  160. package/projects/eo-sdk/core/lib/model/object-type.model.d.ts.map +0 -1
  161. package/projects/eo-sdk/core/lib/model/org.model.d.ts +0 -94
  162. package/projects/eo-sdk/core/lib/model/org.model.d.ts.map +0 -1
  163. package/projects/eo-sdk/core/lib/model/prepared-item.model.d.ts +0 -190
  164. package/projects/eo-sdk/core/lib/model/prepared-item.model.d.ts.map +0 -1
  165. package/projects/eo-sdk/core/lib/model/range-value.model.d.ts +0 -22
  166. package/projects/eo-sdk/core/lib/model/range-value.model.d.ts.map +0 -1
  167. package/projects/eo-sdk/core/lib/model/upload-file-item.model.d.ts +0 -30
  168. package/projects/eo-sdk/core/lib/model/upload-file-item.model.d.ts.map +0 -1
  169. package/projects/eo-sdk/core/lib/model/upload-target.model.d.ts +0 -60
  170. package/projects/eo-sdk/core/lib/model/upload-target.model.d.ts.map +0 -1
  171. package/projects/eo-sdk/core/lib/model/work-item-history.model.d.ts +0 -52
  172. package/projects/eo-sdk/core/lib/model/work-item-history.model.d.ts.map +0 -1
  173. package/projects/eo-sdk/core/lib/service/auth/auth-interceptor.d.ts +0 -12
  174. package/projects/eo-sdk/core/lib/service/auth/auth-interceptor.d.ts.map +0 -1
  175. package/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.d.ts +0 -23
  176. package/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.d.ts.map +0 -1
  177. package/projects/eo-sdk/core/lib/service/auth/auth.service.d.ts +0 -104
  178. package/projects/eo-sdk/core/lib/service/auth/auth.service.d.ts.map +0 -1
  179. package/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.d.ts +0 -18
  180. package/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.d.ts.map +0 -1
  181. package/projects/eo-sdk/core/lib/service/backend/backend.service.d.ts +0 -209
  182. package/projects/eo-sdk/core/lib/service/backend/backend.service.d.ts.map +0 -1
  183. package/projects/eo-sdk/core/lib/service/bpm/bpm.service.d.ts +0 -150
  184. package/projects/eo-sdk/core/lib/service/bpm/bpm.service.d.ts.map +0 -1
  185. package/projects/eo-sdk/core/lib/service/cache/app-cache.service.d.ts +0 -59
  186. package/projects/eo-sdk/core/lib/service/cache/app-cache.service.d.ts.map +0 -1
  187. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.d.ts +0 -54
  188. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.d.ts.map +0 -1
  189. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.d.ts +0 -35
  190. package/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.d.ts.map +0 -1
  191. package/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.d.ts +0 -5
  192. package/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.d.ts.map +0 -1
  193. package/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.d.ts +0 -16
  194. package/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.d.ts.map +0 -1
  195. package/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.d.ts +0 -49
  196. package/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.d.ts.map +0 -1
  197. package/projects/eo-sdk/core/lib/service/config/config.enum.d.ts +0 -5
  198. package/projects/eo-sdk/core/lib/service/config/config.enum.d.ts.map +0 -1
  199. package/projects/eo-sdk/core/lib/service/config/config.interface.d.ts +0 -55
  200. package/projects/eo-sdk/core/lib/service/config/config.interface.d.ts.map +0 -1
  201. package/projects/eo-sdk/core/lib/service/config/config.service.d.ts +0 -80
  202. package/projects/eo-sdk/core/lib/service/config/config.service.d.ts.map +0 -1
  203. package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts +0 -286
  204. package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts.map +0 -1
  205. package/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.d.ts +0 -13
  206. package/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.d.ts.map +0 -1
  207. package/projects/eo-sdk/core/lib/service/events/event.service.d.ts +0 -31
  208. package/projects/eo-sdk/core/lib/service/events/event.service.d.ts.map +0 -1
  209. package/projects/eo-sdk/core/lib/service/events/events.d.ts +0 -27
  210. package/projects/eo-sdk/core/lib/service/events/events.d.ts.map +0 -1
  211. package/projects/eo-sdk/core/lib/service/inbox/inbox.service.d.ts +0 -66
  212. package/projects/eo-sdk/core/lib/service/inbox/inbox.service.d.ts.map +0 -1
  213. package/projects/eo-sdk/core/lib/service/logger/console-log.service.d.ts +0 -20
  214. package/projects/eo-sdk/core/lib/service/logger/console-log.service.d.ts.map +0 -1
  215. package/projects/eo-sdk/core/lib/service/logger/logger.d.ts +0 -25
  216. package/projects/eo-sdk/core/lib/service/logger/logger.d.ts.map +0 -1
  217. package/projects/eo-sdk/core/lib/service/notifications/notifications.service.d.ts +0 -78
  218. package/projects/eo-sdk/core/lib/service/notifications/notifications.service.d.ts.map +0 -1
  219. package/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.d.ts +0 -9
  220. package/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.d.ts.map +0 -1
  221. package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts +0 -189
  222. package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts.map +0 -1
  223. package/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.d.ts +0 -10
  224. package/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.d.ts.map +0 -1
  225. package/projects/eo-sdk/core/lib/service/search/search-query.model.d.ts +0 -327
  226. package/projects/eo-sdk/core/lib/service/search/search-query.model.d.ts.map +0 -1
  227. package/projects/eo-sdk/core/lib/service/search/search.service.d.ts +0 -173
  228. package/projects/eo-sdk/core/lib/service/search/search.service.d.ts.map +0 -1
  229. package/projects/eo-sdk/core/lib/service/signing/signing.service.d.ts +0 -52
  230. package/projects/eo-sdk/core/lib/service/signing/signing.service.d.ts.map +0 -1
  231. package/projects/eo-sdk/core/lib/service/storage/local-storage.service.d.ts +0 -53
  232. package/projects/eo-sdk/core/lib/service/storage/local-storage.service.d.ts.map +0 -1
  233. package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.d.ts +0 -15
  234. package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.d.ts.map +0 -1
  235. package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.d.ts +0 -108
  236. package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.d.ts.map +0 -1
  237. package/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.d.ts +0 -74
  238. package/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.d.ts.map +0 -1
  239. package/projects/eo-sdk/core/lib/service/system/system.service.d.ts +0 -125
  240. package/projects/eo-sdk/core/lib/service/system/system.service.d.ts.map +0 -1
  241. package/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.d.ts +0 -53
  242. package/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.d.ts.map +0 -1
  243. package/projects/eo-sdk/core/lib/service/system-status/system-status.service.d.ts +0 -26
  244. package/projects/eo-sdk/core/lib/service/system-status/system-status.service.d.ts.map +0 -1
  245. package/projects/eo-sdk/core/lib/service/system-status/system.status.enum.d.ts +0 -8
  246. package/projects/eo-sdk/core/lib/service/system-status/system.status.enum.d.ts.map +0 -1
  247. package/projects/eo-sdk/core/lib/service/system-status/system.status.interface.d.ts +0 -8
  248. package/projects/eo-sdk/core/lib/service/system-status/system.status.interface.d.ts.map +0 -1
  249. package/projects/eo-sdk/core/lib/service/upload/upload.service.d.ts +0 -28
  250. package/projects/eo-sdk/core/lib/service/upload/upload.service.d.ts.map +0 -1
  251. package/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.d.ts +0 -50
  252. package/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.d.ts.map +0 -1
  253. package/projects/eo-sdk/core/lib/service/user/user.service.d.ts +0 -216
  254. package/projects/eo-sdk/core/lib/service/user/user.service.d.ts.map +0 -1
  255. package/projects/eo-sdk/core/lib/util/utils.d.ts +0 -148
  256. package/projects/eo-sdk/core/lib/util/utils.d.ts.map +0 -1
  257. package/projects/eo-sdk/core/public_api.d.ts +0 -82
  258. package/projects/eo-sdk/core/public_api.d.ts.map +0 -1
@@ -1,510 +0,0 @@
1
- import { DatePipe } from '@angular/common';
2
- //export type QueryScope = 'indexdate' | 'content' | 'all';
3
- export var QueryScope;
4
- (function (QueryScope) {
5
- QueryScope["ALL"] = "all";
6
- QueryScope["CONTENT"] = "content";
7
- QueryScope["INDEX_DATA"] = "indexdata";
8
- })(QueryScope || (QueryScope = {}));
9
- /**
10
- * The SearchQuery Class
11
- *
12
- * See {@link SearchService} for Usage
13
- */
14
- export class SearchQuery {
15
- constructor() {
16
- /**
17
- * List of object types to be fetched by the query. Leaving this blank will return results from any type
18
- */
19
- this.types = [];
20
- /**
21
- * List of context folder types
22
- */
23
- this.contextFolderTypes = [];
24
- /**
25
- * List of filters to define the query
26
- */
27
- this.filters = [];
28
- /**
29
- * Whether or not the term is an expert mode query
30
- */
31
- this.expertMode = false;
32
- /**
33
- * The search mode to be used (SearchQuery.DEFAULT_SEARCH_MODE or SearchQuery.FULLTEXT_SEARCH_MODE)
34
- */
35
- this.searchMode = SearchQuery.DEFAULT_SEARCH_MODE;
36
- /**
37
- * Additional options to be applied to the query
38
- */
39
- this.sortOptions = [];
40
- /**
41
- * Resolve references with their title instead of their actual value
42
- */
43
- this.resolveReference = true;
44
- /**
45
- * The state of the current query
46
- */
47
- this.state = new SearchState();
48
- this.highlighting = false;
49
- this.withContext = false;
50
- }
51
- /**
52
- * Adds a new target type to the query
53
- *
54
- * @param type Object type to be added
55
- */
56
- addType(type) {
57
- if (!this.types.find(t => t.id === type.id)) {
58
- this.types.push(type);
59
- }
60
- }
61
- /**
62
- * Removes a type from the target types list
63
- *
64
- * @param type The object type to be removed
65
- */
66
- removeType(type) {
67
- this.types = this.types.filter(t => t.id !== type.id);
68
- }
69
- /**
70
- * Adds or removes the given type based on the current settings
71
- *
72
- * @param type The object type to be toggled
73
- */
74
- toggleType(type) {
75
- if (this.types.find(t => t.id === type.id)) {
76
- this.removeType(type);
77
- }
78
- else {
79
- this.types.push(type);
80
- }
81
- }
82
- /**
83
- * Adds a new filter to the query. If there already is a filter set for the given property, it will be overridden.
84
- *
85
- * @param filter The filter to be added
86
- */
87
- addFilter(filter) {
88
- if (!filter) {
89
- return;
90
- }
91
- if (!this.getFilter(filter.property)) {
92
- this.filters.push(filter);
93
- }
94
- else {
95
- // if there already is a filter set for the target property
96
- // we'll just override it with the new value
97
- this.removeFilter(filter.property);
98
- this.filters.push(filter);
99
- }
100
- }
101
- /**
102
- * Removes a filter from the query.
103
- *
104
- * @param filterPropertyName The filter (its property name) to be removed
105
- */
106
- removeFilter(filterPropertyName) {
107
- this.filters = this.filters.filter(f => f.property !== filterPropertyName);
108
- }
109
- /**
110
- * Adds or removes the given filter based on the current settings
111
- *
112
- * @param filter The filter to be toggled
113
- */
114
- toggleFilter(filter, override) {
115
- if (this.getFilter(filter.property)) {
116
- this.removeFilter(filter.property);
117
- if (override) {
118
- this.filters.push(filter);
119
- }
120
- }
121
- else {
122
- this.filters.push(filter);
123
- }
124
- }
125
- /**
126
- * Retrieves a filter by its property name.
127
- *
128
- * @param propertyName The filters property name (qname of form element)
129
- * @returns Search Filter Object
130
- */
131
- getFilter(propertyName) {
132
- return this.filters.find(f => f.property === propertyName);
133
- }
134
- getTableFilters(propertyName) {
135
- return this.filters.filter(f => f.property.startsWith(propertyName + '.'));
136
- }
137
- /**
138
- * Adding new Sort Options
139
- * Sort Options are only added if they are not already present
140
- *
141
- * @param name
142
- * @param order
143
- * @param missing
144
- */
145
- addSortOption(name, order, missing) {
146
- if (!this.sortOptions.find(s => s.field === name)) {
147
- this.sortOptions.push(new SortOption(name, order, missing));
148
- }
149
- }
150
- /**
151
- *
152
- * @param name
153
- */
154
- removeSortOption(name) {
155
- this.sortOptions = this.sortOptions.filter(s => s.field !== name);
156
- }
157
- /**
158
- * Generate a query JSON from the current SearchQuery that can be send to the search service.
159
- *
160
- * @param resolveReference in case of csv export the resolving of references is set by configuration
161
- */
162
- getQueryJson(resolveReference) {
163
- // Convert the current query object to a query JSON that can be consumed by the search service backend.
164
- // To keep it short, we'll only add properties that are set and differ from default values
165
- const queryJson = {};
166
- // add type filters
167
- if (this.types.length > 0) {
168
- queryJson.types = this.types.map(t => typeof t === 'string' ? t : t.name);
169
- }
170
- // add context folder type filters
171
- if (this.contextFolderTypes.length > 0) {
172
- queryJson.contextfoldertypes = this.contextFolderTypes.map(t => t.name);
173
- }
174
- // filters
175
- if (this.filters.length > 0) {
176
- queryJson.filters = {};
177
- this.filters.forEach(f => {
178
- queryJson.filters[f.property] = f.toQuery();
179
- });
180
- }
181
- if (this.term) {
182
- queryJson.term = this.term;
183
- }
184
- // search fields
185
- if (this.fields) {
186
- queryJson.fields = this.fields;
187
- }
188
- if (this.name) {
189
- queryJson.name = this.name;
190
- }
191
- // add options when they differ from the default values
192
- if (this.applyOptions()) {
193
- queryJson.options = {};
194
- queryJson.options.scope = this.scope;
195
- if (this.suggest) {
196
- queryJson.options.suggest = true;
197
- }
198
- if (this.expertMode) {
199
- queryJson.options.expertmode = true;
200
- }
201
- queryJson.options.resolvereference = resolveReference !== undefined ? resolveReference : true;
202
- if (this.searchMode !== SearchQuery.DEFAULT_SEARCH_MODE) {
203
- queryJson.options.searchmode = this.searchMode;
204
- }
205
- if (this.sortOptions && this.sortOptions.length) {
206
- queryJson.options.sort = {};
207
- this.sortOptions.forEach((sortOption) => {
208
- queryJson.options.sort[sortOption.field] = {
209
- order: sortOption.order
210
- };
211
- });
212
- }
213
- if (this.highlighting) {
214
- queryJson.options.highlighting = this.highlighting;
215
- }
216
- if (this.withContext) {
217
- queryJson.options.withcontext = this.withContext;
218
- }
219
- }
220
- return queryJson;
221
- }
222
- // determines whether or not the query send to the search service should contain options
223
- applyOptions() {
224
- return (this.expertMode ||
225
- !!this.scope ||
226
- this.suggest ||
227
- this.highlighting ||
228
- this.resolveReference ||
229
- this.withContext ||
230
- this.searchMode !== SearchQuery.DEFAULT_SEARCH_MODE ||
231
- this.sortOptions.length > 0);
232
- }
233
- }
234
- /**
235
- * Base Parameters for a Search Query
236
- */
237
- SearchQuery.BASE_PARAMS = {
238
- TYPE: 'type',
239
- CREATOR: 'creator',
240
- CREATED: 'created',
241
- MODIFIER: 'modifier',
242
- MODIFIED: 'modified',
243
- FILESIZE: 'filesize',
244
- FILENAME: 'filename',
245
- MIMETYPEGROUP: 'mimetypegroup',
246
- FOLDER: 'folder'
247
- };
248
- /**
249
- * Time period buckets property names
250
- */
251
- SearchQuery.TIME_PERIOD_BUCKETS = {
252
- TODAY: 'today',
253
- YESTERDAY: 'yesterday',
254
- THIS_WEEK: 'thisweek',
255
- LAST_WEEK: 'lastweek',
256
- THIS_MONTH: 'thismonth',
257
- LAST_MONTH: 'lastmonth',
258
- THIS_YEAR: 'thisyear',
259
- LAST_YEAR: 'lastyear'
260
- };
261
- /**
262
- * mimetype buckets property names
263
- */
264
- SearchQuery.MIMETYPEGROUP_BUCKETS = {
265
- PDF: 'pdf',
266
- MAIL: 'mail',
267
- WORD: 'word',
268
- IMAGE: 'image',
269
- OCTET_STREAM: 'octet-stream',
270
- TXT: 'txt',
271
- EXCEL: 'excel',
272
- POWERPOINT: 'powerpoint',
273
- VIDEO: 'video',
274
- HTML: 'html',
275
- AUDIO: 'audio',
276
- ZIP: 'zip'
277
- };
278
- /**
279
- * filesize buckets property names
280
- */
281
- SearchQuery.FILE_SIZE_BUCKETS = {
282
- NONE: 'none',
283
- LT1MB: 'lt1MB',
284
- LT10MB: 'lt10MB',
285
- LT100MB: 'lt100MB',
286
- GT100MB: 'gt100MB'
287
- };
288
- // list of things that may have changed the current query
289
- SearchQuery.UPDATE_CAUSE = {
290
- TOGGLED_TYPE: 'cause.type.toggled',
291
- TOGGLED_EXPERTMODE: 'cause.expertmode.toggled',
292
- TERM_SET: 'cause.term.set',
293
- TYPES_SET: 'cause.types.set',
294
- CONTEXT_FOLDER_SET: 'cause.contextfolder.set',
295
- TOGGLED_FILTER: 'cause.filter.toggled',
296
- ADDED_FILTER: 'cause.filter.added',
297
- REMOVED_FILTER: 'cause.filter.removed',
298
- };
299
- /**
300
- * Detault Search mode Index
301
- */
302
- SearchQuery.DEFAULT_SEARCH_MODE = 'idxs';
303
- /**
304
- * Search mode for Full test Search
305
- */
306
- SearchQuery.FULLTEXT_SEARCH_MODE = 'fts';
307
- /**
308
- * @ignore
309
- * Creates the Model of Sort Options
310
- */
311
- export class SortOption {
312
- constructor(field, order, missing) {
313
- this.field = field;
314
- this.order = order;
315
- this.missing = missing;
316
- }
317
- }
318
- /**
319
- * @ignore
320
- * Creates the Model of Field Definitions
321
- */
322
- export class FieldDefinition {
323
- constructor(elements = [], sortorder = [], grouporder = [], pinned = [], alignmentx = [], mode) {
324
- this.elements = elements;
325
- this.sortorder = sortorder;
326
- this.grouporder = grouporder;
327
- this.pinned = pinned;
328
- this.alignmentx = alignmentx;
329
- this.mode = mode;
330
- }
331
- }
332
- /**
333
- * @ignore
334
- * Class representing the state of a query
335
- */
336
- export class SearchState {
337
- /**
338
- * @ignore
339
- */
340
- constructor() {
341
- this.aggregations = {
342
- type: new Map(),
343
- contextType: new Map(),
344
- created: [],
345
- modified: [],
346
- mimetypegroup: [],
347
- filesize: []
348
- };
349
- }
350
- get totalCount() {
351
- return Array.from(this.aggregations.type.values()).reduce((acc, cur) => acc + cur, 0);
352
- }
353
- get isEmpty() {
354
- return !(this.count && this.count.value);
355
- }
356
- addAggregations(type, key, value, agg) {
357
- switch (type) {
358
- case 'contexttype': {
359
- this.aggregations.contextType.set(key, value);
360
- break;
361
- }
362
- case SearchQuery.BASE_PARAMS.TYPE: {
363
- this.aggregations.type.set(key, value);
364
- break;
365
- }
366
- case SearchQuery.BASE_PARAMS.CREATED: {
367
- this.aggregations.created.push({
368
- key: key,
369
- value: value
370
- });
371
- break;
372
- }
373
- case SearchQuery.BASE_PARAMS.MODIFIED: {
374
- this.aggregations.modified.push({
375
- key: key,
376
- value: value
377
- });
378
- break;
379
- }
380
- case SearchQuery.BASE_PARAMS.MIMETYPEGROUP: {
381
- this.aggregations.mimetypegroup.push({
382
- key: key,
383
- value: value
384
- });
385
- break;
386
- }
387
- case SearchQuery.BASE_PARAMS.FILESIZE: {
388
- this.aggregations.filesize.push({
389
- key: key,
390
- value: value,
391
- from: agg.from,
392
- to: agg.to || Infinity,
393
- label: key.replace('gt', '> ').replace('lt', '< ')
394
- });
395
- break;
396
- }
397
- }
398
- }
399
- }
400
- /**
401
- * @ignore
402
- * Creates the Model of Search Results
403
- */
404
- export class SearchResult {
405
- constructor() { }
406
- }
407
- export class SearchFilter {
408
- /**
409
- * Constructor for creating a new SearchFilter.
410
- *
411
- * @param property The qualified name of the field this filter should apply to.
412
- * @param operator Operator indicating how to handle the filters value(s). See SearchFilter.OPERATOR for available operators.
413
- * @param firstValue The filters value
414
- * @param secondValue Optional second value for filters that for example define ranges of values
415
- * @param transformDate Flag to transform date hours and minutes based on operator
416
- */
417
- constructor(property, operator, firstValue, secondValue, transformDate) {
418
- this.property = property;
419
- this.operator = operator;
420
- this.firstValue = firstValue;
421
- this.secondValue = secondValue;
422
- this.transformDate = transformDate;
423
- }
424
- formatDate(value) {
425
- return this.transformDate && value
426
- ? this.transformDate.timezone
427
- ? new DatePipe('en').transform(value, 'yyyy-MM-ddTZ')
428
- : this.transformDate.time
429
- ? new Date(value).toISOString().slice(0, 16) + 'Z'
430
- : new DatePipe('en').transform(value, 'yyyy-MM-dd')
431
- : value;
432
- }
433
- toQuery() {
434
- return {
435
- o: this.operator,
436
- v1: this.formatDate(this.firstValue),
437
- ...(this.secondValue && { v2: this.formatDate(this.secondValue) })
438
- };
439
- }
440
- toDateTimeQuery() {
441
- if (this.transformDate && this.transformDate.timezone && this.firstValue) {
442
- let firstValue = this.firstValue;
443
- let secondValue = this.secondValue;
444
- const endDate = new Date(secondValue || firstValue);
445
- endDate.setHours(23, 59, 59, 999);
446
- if (this.operator === SearchFilter.OPERATOR.LESS_OR_EQUAL) {
447
- firstValue = endDate.toISOString();
448
- }
449
- else {
450
- const startDate = new Date(firstValue);
451
- if (this.operator === SearchFilter.OPERATOR.GREATER_THAN ||
452
- this.operator === SearchFilter.OPERATOR.INTERVAL) {
453
- startDate.setHours(23, 59, 59, 999);
454
- }
455
- else {
456
- startDate.setHours(0, 0, 0, 0);
457
- }
458
- firstValue = startDate.toISOString();
459
- }
460
- if (this.operator === SearchFilter.OPERATOR.INTERVAL_INCLUDE_BOTH ||
461
- this.operator === SearchFilter.OPERATOR.EQUAL) {
462
- secondValue = endDate.toISOString();
463
- }
464
- return {
465
- o: this.operator === SearchFilter.OPERATOR.EQUAL
466
- ? SearchFilter.OPERATOR.INTERVAL_INCLUDE_BOTH
467
- : this.operator,
468
- v1: firstValue,
469
- ...(secondValue && { v2: secondValue })
470
- };
471
- }
472
- else {
473
- return this.toQuery();
474
- }
475
- }
476
- /**
477
- * @ignore
478
- */
479
- match(property, operator, firstValue, secondValue) {
480
- return (this.property === property &&
481
- this.operator === operator &&
482
- this.secondValue === secondValue &&
483
- (this.firstValue instanceof Array
484
- ? !!this.firstValue.find(v => v === firstValue)
485
- : this.firstValue === firstValue));
486
- }
487
- }
488
- /**
489
- * available operators for a search filter
490
- */
491
- SearchFilter.OPERATOR = {
492
- /** equal */
493
- EQUAL: 'eq',
494
- /** match (for string with classification "path6666") */
495
- MATCH: 'match',
496
- /** match at least one of the provided values (value has to be an array) */
497
- IN: 'in',
498
- /** greater than */
499
- GREATER_THAN: 'gt',
500
- /** greater than or equal */
501
- GREATER_OR_EQUAL: 'gte',
502
- LESS_THAN: 'lt',
503
- LESS_OR_EQUAL: 'lte',
504
- INTERVAL: 'gtlt',
505
- INTERVAL_INCLUDE_BOTH: 'gtelte',
506
- INTERVAL_INCLUDE_TO: 'gtlte',
507
- INTERVAL_INCLUDE_FROM: 'gtelt',
508
- RANGE: 'rg' // aggegation ranges
509
- };
510
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXF1ZXJ5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW8tc2RrL2NvcmUvc3JjL2xpYi9zZXJ2aWNlL3NlYXJjaC9zZWFyY2gtcXVlcnkubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLDJEQUEyRDtBQUUzRCxNQUFNLENBQU4sSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ3BCLHlCQUFXLENBQUE7SUFDWCxpQ0FBbUIsQ0FBQTtJQUNuQixzQ0FBd0IsQ0FBQTtBQUMxQixDQUFDLEVBSlcsVUFBVSxLQUFWLFVBQVUsUUFJckI7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUF5SXRCO1FBbkRBOztXQUVHO1FBQ0ksVUFBSyxHQUFpQixFQUFFLENBQUM7UUFDaEM7O1dBRUc7UUFDSSx1QkFBa0IsR0FBaUIsRUFBRSxDQUFDO1FBQzdDOztXQUVHO1FBQ0ksWUFBTyxHQUFtQixFQUFFLENBQUM7UUFLcEM7O1dBRUc7UUFDSSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBSzFCOztXQUVHO1FBQ0ksZUFBVSxHQUFXLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztRQUM1RDs7V0FFRztRQUNJLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUN0Qzs7V0FFRztRQUNJLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUMvQjs7V0FFRztRQUNJLFVBQUssR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUV2QyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixnQkFBVyxHQUFZLEtBQUssQ0FBQztJQVNyQixDQUFDO0lBRWhCOzs7O09BSUc7SUFDSSxPQUFPLENBQUMsSUFBZ0I7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FB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RUFBRSxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUNILFFBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLFVBQWUsRUFDZixXQUFpQjtRQUVqQixPQUFPLENBQ0wsSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRO1lBQzFCLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUTtZQUMxQixJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVc7WUFDaEMsQ0FBQyxJQUFJLENBQUMsVUFBVSxZQUFZLEtBQUs7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDO2dCQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsQ0FDcEMsQ0FBQztJQUNKLENBQUM7O0FBbEhEOztHQUVHO0FBQ1cscUJBQVEsR0FBRztJQUN2QixZQUFZO0lBQ1osS0FBSyxFQUFFLElBQUk7SUFDWCx3REFBd0Q7SUFDeEQsS0FBSyxFQUFFLE9BQU87SUFDZCw0RUFBNEU7SUFDNUUsRUFBRSxFQUFFLElBQUk7SUFDUixtQkFBbUI7SUFDbkIsWUFBWSxFQUFFLElBQUk7SUFDbEIsNEJBQTRCO0lBQzVCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsU0FBUyxFQUFFLElBQUk7SUFDZixhQUFhLEVBQUUsS0FBSztJQUNwQixRQUFRLEVBQUUsTUFBTTtJQUNoQixxQkFBcUIsRUFBRSxRQUFRO0lBQy9CLG1CQUFtQixFQUFFLE9BQU87SUFDNUIscUJBQXFCLEVBQUUsT0FBTztJQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtDQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyZWR1Y2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7T2JqZWN0VHlwZX0gZnJvbSAnLi4vLi4vbW9kZWwvb2JqZWN0LXR5cGUubW9kZWwnO1xuaW1wb3J0IHtEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLy9leHBvcnQgdHlwZSBRdWVyeVNjb3BlID0gJ2luZGV4ZGF0ZScgfCAnY29udGVudCcgfCAnYWxsJztcblxuZXhwb3J0IGVudW0gUXVlcnlTY29wZSB7XG4gIEFMTCA9ICdhbGwnLFxuICBDT05URU5UID0gJ2NvbnRlbnQnLFxuICBJTkRFWF9EQVRBID0gJ2luZGV4ZGF0YSdcbn1cblxuLyoqXG4gKiBUaGUgU2VhcmNoUXVlcnkgQ2xhc3NcbiAqXG4gKiBTZWUge0BsaW5rIFNlYXJjaFNlcnZpY2V9IGZvciBVc2FnZVxuICovXG5leHBvcnQgY2xhc3MgU2VhcmNoUXVlcnkge1xuICAvKipcbiAgICogQmFzZSBQYXJhbWV0ZXJzIGZvciBhIFNlYXJjaCBRdWVyeVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBCQVNFX1BBUkFNUyA9IHtcbiAgICBUWVBFOiAndHlwZScsXG4gICAgQ1JFQVRPUjogJ2NyZWF0b3InLFxuICAgIENSRUFURUQ6ICdjcmVhdGVkJyxcbiAgICBNT0RJRklFUjogJ21vZGlmaWVyJyxcbiAgICBNT0RJRklFRDogJ21vZGlmaWVkJyxcbiAgICBGSUxFU0laRTogJ2ZpbGVzaXplJyxcbiAgICBGSUxFTkFNRTogJ2ZpbGVuYW1lJyxcbiAgICBNSU1FVFlQRUdST1VQOiAnbWltZXR5cGVncm91cCcsXG4gICAgRk9MREVSOiAnZm9sZGVyJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaW1lIHBlcmlvZCBidWNrZXRzIHByb3BlcnR5IG5hbWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIFRJTUVfUEVSSU9EX0JVQ0tFVFMgPSB7XG4gICAgVE9EQVk6ICd0b2RheScsXG4gICAgWUVTVEVSREFZOiAneWVzdGVyZGF5JyxcbiAgICBUSElTX1dFRUs6ICd0aGlzd2VlaycsXG4gICAgTEFTVF9XRUVLOiAnbGFzdHdlZWsnLFxuICAgIFRISVNfTU9OVEg6ICd0aGlzbW9udGgnLFxuICAgIExBU1RfTU9OVEg6ICdsYXN0bW9udGgnLFxuICAgIFRISVNfWUVBUjogJ3RoaXN5ZWFyJyxcbiAgICBMQVNUX1lFQVI6ICdsYXN0eWVhcidcbiAgfTtcblxuICAvKipcbiAgICogbWltZXR5cGUgYnVja2V0cyBwcm9wZXJ0eSBuYW1lc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBNSU1FVFlQRUdST1VQX0JVQ0tFVFMgPSB7XG4gICAgUERGOiAncGRmJyxcbiAgICBNQUlMOiAnbWFpbCcsXG4gICAgV09SRDogJ3dvcmQnLFxuICAgIElNQUdFOiAnaW1hZ2UnLFxuICAgIE9DVEVUX1NUUkVBTTogJ29jdGV0LXN0cmVhbScsXG4gICAgVFhUOiAndHh0JyxcbiAgICBFWENFTDogJ2V4Y2VsJyxcbiAgICBQT1dFUlBPSU5UOiAncG93ZXJwb2ludCcsXG4gICAgVklERU86ICd2aWRlbycsXG4gICAgSFRNTDogJ2h0bWwnLFxuICAgIEFVRElPOiAnYXVkaW8nLFxuICAgIFpJUDogJ3ppcCdcbiAgfTtcblxuICAvKipcbiAgICogZmlsZXNpemUgYnVja2V0cyBwcm9wZXJ0eSBuYW1lc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBGSUxFX1NJWkVfQlVDS0VUUyA9IHtcbiAgICBOT05FOiAnbm9uZScsXG4gICAgTFQxTUI6ICdsdDFNQicsXG4gICAgTFQxME1COiAnbHQxME1CJyxcbiAgICBMVDEwME1COiAnbHQxMDBNQicsXG4gICAgR1QxMDBNQjogJ2d0MTAwTUInXG4gIH07XG5cbiAgLy8gbGlzdCBvZiB0aGluZ3MgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBjdXJyZW50IHF1ZXJ5XG4gIHB1YmxpYyBzdGF0aWMgVVBEQVRFX0NBVVNFID0ge1xuICAgIFRPR0dMRURfVFlQRTogJ2NhdXNlLnR5cGUudG9nZ2xlZCcsXG4gICAgVE9HR0xFRF9FWFBFUlRNT0RFOiAnY2F1c2UuZXhwZXJ0bW9kZS50b2dnbGVkJyxcbiAgICBURVJNX1NFVDogJ2NhdXNlLnRlcm0uc2V0JyxcbiAgICBUWVBFU19TRVQ6ICdjYXVzZS50eXBlcy5zZXQnLFxuICAgIENPTlRFWFRfRk9MREVSX1NFVDogJ2NhdXNlLmNvbnRleHRmb2xkZXIuc2V0JyxcbiAgICBUT0dHTEVEX0ZJTFRFUjogJ2NhdXNlLmZpbHRlci50b2dnbGVkJyxcbiAgICBBRERFRF9GSUxURVI6ICdjYXVzZS5maWx0ZXIuYWRkZWQnLFxuICAgIFJFTU9WRURfRklMVEVSOiAnY2F1c2UuZmlsdGVyLnJlbW92ZWQnLFxuICB9O1xuICAvKipcbiAgICogRGV0YXVsdCBTZWFyY2ggbW9kZSBJbmRleFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBERUZBVUxUX1NFQVJDSF9NT0RFID0gJ2lkeHMnO1xuICAvKipcbiAgICogU2VhcmNoIG1vZGUgZm9yIEZ1bGwgdGVzdCBTZWFyY2hcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgRlVMTFRFWFRfU0VBUkNIX01PREUgPSAnZnRzJztcbiAgLyoqXG4gICAqIGZ1bGx0ZXh0IHNlYXJjaCB0ZXJtXG4gICAqL1xuICBwdWJsaWMgdGVybTogc3RyaW5nO1xuICAvKipcbiAgICogQXJyYXkgb2YgZmllbGRzIHRvIHJlcXVlc3QgZnJvbSB0aGUgc2VhcmNoIHNlcnZpY2UsIGxlYXZpbmcgdGhpcyBibGFuayB3aWxsIHJldHVybiB0aGUgZmllbGRzIHNwZWNpZmllZCBpbiB0aGUgcmVzdWx0IGZpZWxkIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyBmaWVsZHM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogTGlzdCBvZiBvYmplY3QgdHlwZXMgdG8gYmUgZmV0Y2hlZCBieSB0aGUgcXVlcnkuIExlYXZpbmcgdGhpcyBibGFuayB3aWxsIHJldHVybiByZXN1bHRzIGZyb20gYW55IHR5cGVcbiAgICovXG4gIHB1YmxpYyB0eXBlczogT2JqZWN0VHlwZVtdID0gW107XG4gIC8qKlxuICAgKiBMaXN0IG9mIGNvbnRleHQgZm9sZGVyIHR5cGVzXG4gICAqL1xuICBwdWJsaWMgY29udGV4dEZvbGRlclR5cGVzOiBPYmplY3RUeXBlW10gPSBbXTtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZmlsdGVycyB0byBkZWZpbmUgdGhlIHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgZmlsdGVyczogU2VhcmNoRmlsdGVyW10gPSBbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHJldHJpZXZlIHN1Z2dlc3Rpb25zXG4gICAqL1xuICBwdWJsaWMgc3VnZ2VzdDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSB0ZXJtIGlzIGFuIGV4cGVydCBtb2RlIHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgZXhwZXJ0TW9kZSA9IGZhbHNlO1xuICAvKipcbiAgICogVGhlIHNjb3BlIG9mIHRoZSBxdWVyeVxuICAgKi9cbiAgcHVibGljIHNjb3BlOiBRdWVyeVNjb3BlO1xuICAvKipcbiAgICogVGhlIHNlYXJjaCBtb2RlIHRvIGJlIHVzZWQgKFNlYXJjaFF1ZXJ5LkRFRkFVTFRfU0VBUkNIX01PREUgb3IgU2VhcmNoUXVlcnkuRlVMTFRFWFRfU0VBUkNIX01PREUpXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoTW9kZTogc3RyaW5nID0gU2VhcmNoUXVlcnkuREVGQVVMVF9TRUFSQ0hfTU9ERTtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBiZSBhcHBsaWVkIHRvIHRoZSBxdWVyeVxuICAgKi9cbiAgcHVibGljIHNvcnRPcHRpb25zOiBTb3J0T3B0aW9uW10gPSBbXTtcbiAgLyoqXG4gICAqIFJlc29sdmUgcmVmZXJlbmNlcyB3aXRoIHRoZWlyIHRpdGxlIGluc3RlYWQgb2YgdGhlaXIgYWN0dWFsIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZVJlZmVyZW5jZSA9IHRydWU7XG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBzdGF0ZTogU2VhcmNoU3RhdGUgPSBuZXcgU2VhcmNoU3RhdGUoKTtcblxuICBwdWJsaWMgaGlnaGxpZ2h0aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyB3aXRoQ29udGV4dDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBuYW1lPzogc3RyaW5nO1xuXG4gIC8vIEluZGljYXRvciB3aGF0IGNhdXNlZCB0aGUgdXBkYXRlIG9mIGEgU2VhcmNoUXVlcnkgb2JqZWN0LlxuICAvLyBVc2VmdWxsIGZvciBjb21wb25lbnRzIHRoYXQgc3Vic2NyaWJlZCB0byBhIHF1ZXJ5LCBhbmQgbmVlZCB0b1xuICAvLyB0cmFjayB0aGUga2luZCBvZiBjaGFuZ2VzIG1hZGVcbiAgX191cGRhdGVDYXVzZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyB0YXJnZXQgdHlwZSB0byB0aGUgcXVlcnlcbiAgICpcbiAgICogQHBhcmFtIHR5cGUgT2JqZWN0IHR5cGUgdG8gYmUgYWRkZWRcbiAgICovXG4gIHB1YmxpYyBhZGRUeXBlKHR5cGU6IE9iamVjdFR5cGUpIHtcbiAgICBpZiAoIXRoaXMudHlwZXMuZmluZCh0ID0+IHQuaWQgPT09IHR5cGUuaWQpKSB7XG4gICAgICB0aGlzLnR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSB0eXBlIGZyb20gdGhlIHRhcmdldCB0eXBlcyBsaXN0XG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIFRoZSBvYmplY3QgdHlwZSB0byBiZSByZW1vdmVkXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlVHlwZSh0eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgdGhpcy50eXBlcyA9IHRoaXMudHlwZXMuZmlsdGVyKHQgPT4gdC5pZCAhPT0gdHlwZS5pZCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBvciByZW1vdmVzIHRoZSBnaXZlbiB0eXBlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNldHRpbmdzXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIFRoZSBvYmplY3QgdHlwZSB0byBiZSB0b2dnbGVkXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlVHlwZSh0eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgaWYgKHRoaXMudHlwZXMuZmluZCh0ID0+IHQuaWQgPT09IHR5cGUuaWQpKSB7XG4gICAgICB0aGlzLnJlbW92ZVR5cGUodHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHlwZXMucHVzaCh0eXBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBmaWx0ZXIgdG8gdGhlIHF1ZXJ5LiBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgZmlsdGVyIHNldCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0byBiZSBhZGRlZFxuICAgKi9cbiAgcHVibGljIGFkZEZpbHRlcihmaWx0ZXI6IFNlYXJjaEZpbHRlcikge1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5nZXRGaWx0ZXIoZmlsdGVyLnByb3BlcnR5KSkge1xuICAgICAgdGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhlcmUgYWxyZWFkeSBpcyBhIGZpbHRlciBzZXQgZm9yIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAgICAgIC8vIHdlJ2xsIGp1c3Qgb3ZlcnJpZGUgaXQgd2l0aCB0aGUgbmV3IHZhbHVlXG4gICAgICB0aGlzLnJlbW92ZUZpbHRlcihmaWx0ZXIucHJvcGVydHkpO1xuICAgICAgdGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGZpbHRlciBmcm9tIHRoZSBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIGZpbHRlclByb3BlcnR5TmFtZSBUaGUgZmlsdGVyIChpdHMgcHJvcGVydHkgbmFtZSkgdG8gYmUgcmVtb3ZlZFxuICAgKi9cbiAgcHVibGljIHJlbW92ZUZpbHRlcihmaWx0ZXJQcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVycyA9IHRoaXMuZmlsdGVycy5maWx0ZXIoZiA9PiBmLnByb3BlcnR5ICE9PSBmaWx0ZXJQcm9wZXJ0eU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgb3IgcmVtb3ZlcyB0aGUgZ2l2ZW4gZmlsdGVyIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNldHRpbmdzXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0byBiZSB0b2dnbGVkXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlRmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyLCBvdmVycmlkZT86IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5nZXRGaWx0ZXIoZmlsdGVyLnByb3BlcnR5KSkge1xuICAgICAgdGhpcy5yZW1vdmVGaWx0ZXIoZmlsdGVyLnByb3BlcnR5KTtcbiAgICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgICB0aGlzLmZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBmaWx0ZXIgYnkgaXRzIHByb3BlcnR5IG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIGZpbHRlcnMgcHJvcGVydHkgbmFtZSAocW5hbWUgb2YgZm9ybSBlbGVtZW50KVxuICAgKiBAcmV0dXJucyBTZWFyY2ggRmlsdGVyIE9iamVjdFxuICAgKi9cbiAgcHVibGljIGdldEZpbHRlcihwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFNlYXJjaEZpbHRlciB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVycy5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHlOYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUYWJsZUZpbHRlcnMocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBTZWFyY2hGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVycy5maWx0ZXIoZiA9PiBmLnByb3BlcnR5LnN0YXJ0c1dpdGgocHJvcGVydHlOYW1lICsgJy4nKSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkaW5nIG5ldyBTb3J0IE9wdGlvbnNcbiAgICogU29ydCBPcHRpb25zIGFyZSBvbmx5IGFkZGVkIGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHByZXNlbnRcbiAgICpcbiAgICogQHBhcmFtIG5hbWVcbiAgICogQHBhcmFtIG9yZGVyXG4gICAqIEBwYXJhbSBtaXNzaW5nXG4gICAqL1xuICBwdWJsaWMgYWRkU29ydE9wdGlvbihuYW1lOiBzdHJpbmcsIG9yZGVyOiBzdHJpbmcsIG1pc3Npbmc/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuc29ydE9wdGlvbnMuZmluZChzID0+IHMuZmllbGQgPT09IG5hbWUpKSB7XG4gICAgICB0aGlzLnNvcnRPcHRpb25zLnB1c2gobmV3IFNvcnRPcHRpb24obmFtZSwgb3JkZXIsIG1pc3NpbmcpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG5hbWVcbiAgICovXG4gIHB1YmxpYyByZW1vdmVTb3J0T3B0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc29ydE9wdGlvbnMgPSB0aGlzLnNvcnRPcHRpb25zLmZpbHRlcihzID0+IHMuZmllbGQgIT09IG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgcXVlcnkgSlNPTiBmcm9tIHRoZSBjdXJyZW50IFNlYXJjaFF1ZXJ5IHRoYXQgY2FuIGJlIHNlbmQgdG8gdGhlIHNlYXJjaCBzZXJ2aWNlLlxuICAgKlxuICAgKiBAcGFyYW0gcmVzb2x2ZVJlZmVyZW5jZSBpbiBjYXNlIG9mIGNzdiBleHBvcnQgdGhlIHJlc29sdmluZyBvZiByZWZlcmVuY2VzIGlzIHNldCBieSBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVlcnlKc29uKHJlc29sdmVSZWZlcmVuY2U/OiBib29sZWFuKSB7XG4gICAgLy8gQ29udmVydCB0aGUgY3VycmVudCBxdWVyeSBvYmplY3QgdG8gYSBxdWVyeSBKU09OIHRoYXQgY2FuIGJlIGNvbnN1bWVkIGJ5IHRoZSBzZWFyY2ggc2VydmljZSBiYWNrZW5kLlxuICAgIC8vIFRvIGtlZXAgaXQgc2hvcnQsIHdlJ2xsIG9ubHkgYWRkIHByb3BlcnRpZXMgdGhhdCBhcmUgc2V0IGFuZCBkaWZmZXIgZnJvbSBkZWZhdWx0IHZhbHVlc1xuICAgIGNvbnN0IHF1ZXJ5SnNvbjogYW55ID0ge307XG5cbiAgICAvLyBhZGQgdHlwZSBmaWx0ZXJzXG4gICAgaWYgKHRoaXMudHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgcXVlcnlKc29uLnR5cGVzID0gdGhpcy50eXBlcy5tYXAodCA9PlxuICAgICAgICB0eXBlb2YgdCA9PT0gJ3N0cmluZycgPyB0IDogdC5uYW1lXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGFkZCBjb250ZXh0IGZvbGRlciB0eXBlIGZpbHRlcnNcbiAgICBpZiAodGhpcy5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgcXVlcnlKc29uLmNvbnRleHRmb2xkZXJ0eXBlcyA9IHRoaXMuY29udGV4dEZvbGRlclR5cGVzLm1hcCh0ID0+IHQubmFtZSk7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyc1xuICAgIGlmICh0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgcXVlcnlKc29uLmZpbHRlcnMgPSB7fTtcbiAgICAgIHRoaXMuZmlsdGVycy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICBxdWVyeUpzb24uZmlsdGVyc1tmLnByb3BlcnR5XSA9IGYudG9RdWVyeSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0pIHtcbiAgICAgIHF1ZXJ5SnNvbi50ZXJtID0gdGhpcy50ZXJtO1xuICAgIH1cbiAgICAvLyBzZWFyY2ggZmllbGRzXG4gICAgaWYgKHRoaXMuZmllbGRzKSB7XG4gICAgICBxdWVyeUpzb24uZmllbGRzID0gdGhpcy5maWVsZHM7XG4gICAgfVxuICAgIGlmICh0aGlzLm5hbWUpIHtcbiAgICAgIHF1ZXJ5SnNvbi5uYW1lID0gdGhpcy5uYW1lO1xuICAgIH1cbiAgICAvLyBhZGQgb3B0aW9ucyB3aGVuIHRoZXkgZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgdmFsdWVzXG4gICAgaWYgKHRoaXMuYXBwbHlPcHRpb25zKCkpIHtcbiAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zID0ge307XG4gICAgICBxdWVyeUpzb24ub3B0aW9ucy5zY29wZSA9IHRoaXMuc2NvcGU7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0KSB7XG4gICAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zLnN1Z2dlc3QgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZXhwZXJ0TW9kZSkge1xuICAgICAgICBxdWVyeUpzb24ub3B0aW9ucy5leHBlcnRtb2RlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcXVlcnlKc29uLm9wdGlvbnMucmVzb2x2ZXJlZmVyZW5jZSA9IHJlc29sdmVSZWZlcmVuY2UgIT09IHVuZGVmaW5lZCA/IHJlc29sdmVSZWZlcmVuY2UgOiB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5zZWFyY2hNb2RlICE9PSBTZWFyY2hRdWVyeS5ERUZBVUxUX1NFQVJDSF9NT0RFKSB7XG4gICAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zLnNlYXJjaG1vZGUgPSB0aGlzLnNlYXJjaE1vZGU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zb3J0T3B0aW9ucyAmJiB0aGlzLnNvcnRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBxdWVyeUpzb24ub3B0aW9ucy5zb3J0ID0ge307XG4gICAgICAgIHRoaXMuc29ydE9wdGlvbnMuZm9yRWFjaCgoc29ydE9wdGlvbjogU29ydE9wdGlvbikgPT4ge1xuICAgICAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zLnNvcnRbc29ydE9wdGlvbi5maWVsZF0gPSB7XG4gICAgICAgICAgICBvcmRlcjogc29ydE9wdGlvbi5vcmRlclxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oaWdobGlnaHRpbmcpIHtcbiAgICAgICAgcXVlcnlKc29uLm9wdGlvbnMuaGlnaGxpZ2h0aW5nID0gdGhpcy5oaWdobGlnaHRpbmc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy53aXRoQ29udGV4dCkge1xuICAgICAgICBxdWVyeUpzb24ub3B0aW9ucy53aXRoY29udGV4dCA9IHRoaXMud2l0aENvbnRleHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVyeUpzb247XG4gIH1cblxuICAvLyBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBxdWVyeSBzZW5kIHRvIHRoZSBzZWFyY2ggc2VydmljZSBzaG91bGQgY29udGFpbiBvcHRpb25zXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmV4cGVydE1vZGUgfHxcbiAgICAgICEhdGhpcy5zY29wZSB8fFxuICAgICAgdGhpcy5zdWdnZXN0IHx8XG4gICAgICB0aGlzLmhpZ2hsaWdodGluZyB8fFxuICAgICAgdGhpcy5yZXNvbHZlUmVmZXJlbmNlIHx8XG4gICAgICB0aGlzLndpdGhDb250ZXh0IHx8XG4gICAgICB0aGlzLnNlYXJjaE1vZGUgIT09IFNlYXJjaFF1ZXJ5LkRFRkFVTFRfU0VBUkNIX01PREUgfHxcbiAgICAgIHRoaXMuc29ydE9wdGlvbnMubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBAaWdub3JlXG4gKiBDcmVhdGVzIHRoZSBNb2RlbCBvZiBTb3J0IE9wdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFNvcnRPcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZmllbGQ6IHN0cmluZyxcbiAgICBwdWJsaWMgb3JkZXI6IHN0cmluZyxcbiAgICBwdWJsaWMgbWlzc2luZz86IHN0cmluZ1xuICApIHt9XG59XG5cbi8qKlxuICogQGlnbm9yZVxuICogQ3JlYXRlcyB0aGUgTW9kZWwgb2YgRmllbGQgRGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIEZpZWxkRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbGVtZW50czogYW55W10gPSBbXSxcbiAgICBwdWJsaWMgc29ydG9yZGVyOiBhbnlbXSA9IFtdLFxuICAgIHB1YmxpYyBncm91cG9yZGVyOiBhbnlbXSA9IFtdLFxuICAgIHB1YmxpYyBwaW5uZWQ6IGFueVtdID0gW10sXG4gICAgcHVibGljIGFsaWdubWVudHg6IHtxbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nfVtdID0gW10sXG4gICAgcHVibGljIG1vZGU/OiBzdHJpbmdcbiAgKSB7fVxufVxuXG4vKipcbiAqIEBpZ25vcmVcbiAqIENsYXNzIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgYSBxdWVyeVxuICovXG5leHBvcnQgY2xhc3MgU2VhcmNoU3RhdGUge1xuICBwdWJsaWMgY291bnQ6IHt2YWx1ZTogbnVtYmVyLCByZWxhdGlvbj86IHN0cmluZ307XG4gIHB1YmxpYyBhZ2dyZWdhdGlvbnM7XG4gIHB1YmxpYyBsYXN0Q2hhbmdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9ucyA9IHtcbiAgICAgIHR5cGU6IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCksXG4gICAgICBjb250ZXh0VHlwZTogbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKSxcbiAgICAgIGNyZWF0ZWQ6IFtdLFxuICAgICAgbW9kaWZpZWQ6IFtdLFxuICAgICAgbWltZXR5cGVncm91cDogW10sXG4gICAgICBmaWxlc2l6ZTogW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHRvdGFsQ291bnQoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5hZ2dyZWdhdGlvbnMudHlwZS52YWx1ZXMoKSkucmVkdWNlKChhY2M6IG51bWJlciwgY3VyOiBudW1iZXIpID0+IGFjYyArIGN1ciwgMCkgYXMgbnVtYmVyO1xuICB9XG5cbiAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuICEodGhpcy5jb3VudCAmJiB0aGlzLmNvdW50LnZhbHVlKTtcbiAgfVxuXG4gIGFkZEFnZ3JlZ2F0aW9ucyh0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBhZ2c/KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjb250ZXh0dHlwZSc6IHtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbnMuY29udGV4dFR5cGUuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRToge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9ucy50eXBlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkNSRUFURUQ6IHtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbnMuY3JlYXRlZC5wdXNoKHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NT0RJRklFRDoge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9ucy5tb2RpZmllZC5wdXNoKHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NSU1FVFlQRUdST1VQOiB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRpb25zLm1pbWV0eXBlZ3JvdXAucHVzaCh7XG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuRklMRVNJWkU6IHtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbnMuZmlsZXNpemUucHVzaCh7XG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIGZyb206IGFnZy5mcm9tLFxuICAgICAgICAgIHRvOiBhZ2cudG8gfHwgSW5maW5pdHksXG4gICAgICAgICAgbGFiZWw6IGtleS5yZXBsYWNlKCdndCcsICc+ICcpLnJlcGxhY2UoJ2x0JywgJzwgJylcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBpZ25vcmVcbiAqIENyZWF0ZXMgdGhlIE1vZGVsIG9mIFNlYXJjaCBSZXN1bHRzXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWFyY2hSZXN1bHQge1xuICBwdWJsaWMgY291bnQ6IHt2YWx1ZTogbnVtYmVyLCByZWxhdGlvbj86IHN0cmluZ307XG4gIHB1YmxpYyBzdWdnZXN0czogc3RyaW5nW107XG4gIHB1YmxpYyBoaXRzOiBhbnlbXTtcbiAgcHVibGljIHR5cGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBmaWVsZHM6IEZpZWxkRGVmaW5pdGlvbjtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWFyY2hGaWx0ZXIge1xuICAvKipcbiAgICogYXZhaWxhYmxlIG9wZXJhdG9ycyBmb3IgYSBzZWFyY2ggZmlsdGVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIE9QRVJBVE9SID0ge1xuICAgIC8qKiBlcXVhbCAqL1xuICAgIEVRVUFMOiAnZXEnLFxuICAgIC8qKiBtYXRjaCAoZm9yIHN0cmluZyB3aXRoIGNsYXNzaWZpY2F0aW9uIFwicGF0aDY2NjZcIikgKi9cbiAgICBNQVRDSDogJ21hdGNoJyxcbiAgICAvKiogbWF0Y2ggYXQgbGVhc3Qgb25lIG9mIHRoZSBwcm92aWRlZCB2YWx1ZXMgKHZhbHVlIGhhcyB0byBiZSBhbiBhcnJheSkgICovXG4gICAgSU46ICdpbicsXG4gICAgLyoqIGdyZWF0ZXIgdGhhbiAqL1xuICAgIEdSRUFURVJfVEhBTjogJ2d0JyxcbiAgICAvKiogZ3JlYXRlciB0aGFuIG9yIGVxdWFsICovXG4gICAgR1JFQVRFUl9PUl9FUVVBTDogJ2d0ZScsIC8vXG4gICAgTEVTU19USEFOOiAnbHQnLCAvLyBsZXNzIHRoYW5cbiAgICBMRVNTX09SX0VRVUFMOiAnbHRlJywgLy8gbGVzcyB0aGFuIG9yIGVxdWFsXG4gICAgSU5URVJWQUw6ICdndGx0JywgLy8gaW50ZXJ2YWxcbiAgICBJTlRFUlZBTF9JTkNMVURFX0JPVEg6ICdndGVsdGUnLCAvLyBpbnRlcnZhbCBpbmNsdWRlIGxlZnQgYW5kIHJpZ2h0XG4gICAgSU5URVJWQUxfSU5DTFVERV9UTzogJ2d0bHRlJywgLy8gaW50ZXJ2YWwgaW5jbHVkZSByaWdodFxuICAgIElOVEVSVkFMX0lOQ0xVREVfRlJPTTogJ2d0ZWx0JywgLy8gaW50ZXJ2YWwgaW5jbHVkZSBsZWZ0XG4gICAgUkFOR0U6ICdyZycgLy8gYWdnZWdhdGlvbiByYW5nZXNcbiAgfTtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGEgbmV3IFNlYXJjaEZpbHRlci5cbiAgICpcbiAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZmllbGQgdGhpcyBmaWx0ZXIgc2hvdWxkIGFwcGx5IHRvLlxuICAgKiBAcGFyYW0gb3BlcmF0b3IgT3BlcmF0b3IgaW5kaWNhdGluZyBob3cgdG8gaGFuZGxlIHRoZSBmaWx0ZXJzIHZhbHVlKHMpLiBTZWUgU2VhcmNoRmlsdGVyLk9QRVJBVE9SIGZvciBhdmFpbGFibGUgb3BlcmF0b3JzLlxuICAgKiBAcGFyYW0gZmlyc3RWYWx1ZSBUaGUgZmlsdGVycyB2YWx1ZVxuICAgKiBAcGFyYW0gc2Vjb25kVmFsdWUgT3B0aW9uYWwgc2Vjb25kIHZhbHVlIGZvciBmaWx0ZXJzIHRoYXQgZm9yIGV4YW1wbGUgZGVmaW5lIHJhbmdlcyBvZiB2YWx1ZXNcbiAgICogQHBhcmFtIHRyYW5zZm9ybURhdGUgRmxhZyB0byB0cmFuc2Zvcm0gZGF0ZSBob3VycyBhbmQgbWludXRlcyBiYXNlZCBvbiBvcGVyYXRvclxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgcHVibGljIG9wZXJhdG9yOiBzdHJpbmcsXG4gICAgcHVibGljIGZpcnN0VmFsdWU6IGFueSxcbiAgICBwdWJsaWMgc2Vjb25kVmFsdWU/OiBhbnksXG4gICAgcHVibGljIHRyYW5zZm9ybURhdGU/OiB7dGltZT86IGJvb2xlYW47IHRpbWV6b25lPzogYm9vbGVhbn1cbiAgKSB7fVxuXG4gIGZvcm1hdERhdGUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybURhdGUgJiYgdmFsdWVcbiAgICAgID8gdGhpcy50cmFuc2Zvcm1EYXRlLnRpbWV6b25lXG4gICAgICAgID8gbmV3IERhdGVQaXBlKCdlbicpLnRyYW5zZm9ybSh2YWx1ZSwgJ3l5eXktTU0tZGRUWicpXG4gICAgICAgIDogdGhpcy50cmFuc2Zvcm1EYXRlLnRpbWVcbiAgICAgICAgICA/IG5ldyBEYXRlKHZhbHVlKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDE2KSArICdaJ1xuICAgICAgICAgIDogbmV3IERhdGVQaXBlKCdlbicpLnRyYW5zZm9ybSh2YWx1ZSwgJ3l5eXktTU0tZGQnKVxuICAgICAgOiB2YWx1ZTtcbiAgfVxuXG4gIHRvUXVlcnkoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG86IHRoaXMub3BlcmF0b3IsXG4gICAgICB2MTogdGhpcy5mb3JtYXREYXRlKHRoaXMuZmlyc3RWYWx1ZSksXG4gICAgICAuLi4odGhpcy5zZWNvbmRWYWx1ZSAmJiB7djI6IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnNlY29uZFZhbHVlKX0pXG4gICAgfTtcbiAgfVxuXG4gIHRvRGF0ZVRpbWVRdWVyeSgpIHtcbiAgICBpZiAodGhpcy50cmFuc2Zvcm1EYXRlICYmIHRoaXMudHJhbnNmb3JtRGF0ZS50aW1lem9uZSAmJiB0aGlzLmZpcnN0VmFsdWUpIHtcbiAgICAgIGxldCBmaXJzdFZhbHVlID0gdGhpcy5maXJzdFZhbHVlO1xuICAgICAgbGV0IHNlY29uZFZhbHVlID0gdGhpcy5zZWNvbmRWYWx1ZTtcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZShzZWNvbmRWYWx1ZSB8fCBmaXJzdFZhbHVlKTtcbiAgICAgIGVuZERhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTEVTU19PUl9FUVVBTCkge1xuICAgICAgICBmaXJzdFZhbHVlID0gZW5kRGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoZmlyc3RWYWx1ZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLm9wZXJhdG9yID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuR1JFQVRFUl9USEFOIHx8XG4gICAgICAgICAgdGhpcy5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOVEVSVkFMXG4gICAgICAgICkge1xuICAgICAgICAgIHN0YXJ0RGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJzdFZhbHVlID0gc3RhcnREYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlRFUlZBTF9JTkNMVURFX0JPVEggfHxcbiAgICAgICAgdGhpcy5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMXG4gICAgICApIHtcbiAgICAgICAgc2Vjb25kVmFsdWUgPSBlbmREYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvOlxuICAgICAgICAgIHRoaXMub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTFxuICAgICAgICAgICAgPyBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU5URVJWQUxfSU5DTFVERV9CT1RIXG4gICAgICAgICAgICA6IHRoaXMub3BlcmF0b3IsXG4gICAgICAgIHYxOiBmaXJzdFZhbHVlLFxuICAgICAgICAuLi4oc2Vjb25kVmFsdWUgJiYge3YyOiBzZWNvbmRWYWx1ZX0pXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50b1F1ZXJ5KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG1hdGNoKFxuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgb3BlcmF0b3I6IHN0cmluZyxcbiAgICBmaXJzdFZhbHVlOiBhbnksXG4gICAgc2Vjb25kVmFsdWU/OiBhbnlcbiAgKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydHkgPT09IHByb3BlcnR5ICYmXG4gICAgICB0aGlzLm9wZXJhdG9yID09PSBvcGVyYXRvciAmJlxuICAgICAgdGhpcy5zZWNvbmRWYWx1ZSA9PT0gc2Vjb25kVmFsdWUgJiZcbiAgICAgICh0aGlzLmZpcnN0VmFsdWUgaW5zdGFuY2VvZiBBcnJheVxuICAgICAgICA/ICEhdGhpcy5maXJzdFZhbHVlLmZpbmQodiA9PiB2ID09PSBmaXJzdFZhbHVlKVxuICAgICAgICA6IHRoaXMuZmlyc3RWYWx1ZSA9PT0gZmlyc3RWYWx1ZSlcbiAgICApO1xuICB9XG59XG4iXX0=