@microsoft/windows-admin-center-sdk 4.167.0 → 4.260.0

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 (617) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/id-ID/strings.json +1 -1
  7. package/angular/assets/strings/it-IT/strings.json +1 -1
  8. package/angular/assets/strings/ja-JP/strings.json +1 -1
  9. package/angular/assets/strings/ko-KR/strings.json +1 -1
  10. package/angular/assets/strings/nl-NL/strings.json +1 -1
  11. package/angular/assets/strings/pl-PL/strings.json +1 -1
  12. package/angular/assets/strings/pt-BR/strings.json +1 -1
  13. package/angular/assets/strings/pt-PT/strings.json +1 -1
  14. package/angular/assets/strings/ru-RU/strings.json +1 -1
  15. package/angular/assets/strings/strings.json +1 -1
  16. package/angular/assets/strings/sv-SE/strings.json +1 -1
  17. package/angular/assets/strings/tr-TR/strings.json +1 -1
  18. package/angular/assets/strings/zh-CN/strings.json +1 -1
  19. package/angular/assets/strings/zh-TW/strings.json +1 -1
  20. package/angular/esm2020/src/controls/accordion/accordion-panel/accordion-panel.component.mjs +36 -12
  21. package/angular/esm2020/src/controls/copilot/copilot.component.mjs +55 -0
  22. package/angular/esm2020/src/controls/copilot/copilot.module.mjs +25 -0
  23. package/angular/esm2020/src/controls/copilot/index.mjs +3 -0
  24. package/angular/esm2020/src/controls/data-table/data-table.component.mjs +7 -9
  25. package/angular/esm2020/src/controls/details/details.component.mjs +62 -25
  26. package/angular/esm2020/src/controls/details/details.module.mjs +5 -1
  27. package/angular/esm2020/src/controls/dialog/dialog.component.mjs +35 -23
  28. package/angular/esm2020/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.mjs +59 -0
  29. package/angular/esm2020/src/controls/form/form-field/array/array-form-field.component.mjs +24 -35
  30. package/angular/esm2020/src/controls/form/form-field/form-field-accessibility-manager-base.service.mjs +105 -0
  31. package/angular/esm2020/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.mjs +38 -0
  32. package/angular/esm2020/src/controls/form/form-field/list/list-form-field.component.mjs +56 -38
  33. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.mjs +54 -0
  34. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.mjs +67 -67
  35. package/angular/esm2020/src/controls/form/forms.module.mjs +19 -2
  36. package/angular/esm2020/src/controls/guided-panel/guided-pane/guided-pane.component.mjs +12 -3
  37. package/angular/esm2020/src/controls/index.mjs +4 -1
  38. package/angular/esm2020/src/controls/page-alert-bar/page-alert-bar.component.mjs +4 -4
  39. package/angular/esm2020/src/controls/snap-in-extension/snap-in-extension.component.mjs +1 -1
  40. package/angular/esm2020/src/controls/summary/index.mjs +4 -0
  41. package/angular/esm2020/src/controls/summary/summary-item.mjs +83 -0
  42. package/angular/esm2020/src/controls/summary/summary.component.mjs +391 -0
  43. package/angular/esm2020/src/controls/summary/summary.module.mjs +37 -0
  44. package/angular/esm2020/src/controls/summary-group/index.mjs +3 -0
  45. package/angular/esm2020/src/controls/summary-group/summary-group.component.mjs +84 -0
  46. package/angular/esm2020/src/controls/summary-group/summary-group.module.mjs +33 -0
  47. package/angular/esm2020/src/controls/wizard/models/wizard-step-snap-in-output.mjs +1 -1
  48. package/angular/esm2020/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.mjs +3 -3
  49. package/angular/esm2020/src/data/extension-broker/snap-in-listener.mjs +80 -0
  50. package/angular/esm2020/src/data/index.mjs +2 -1
  51. package/angular/esm2020/src/generated/strings.mjs +1 -1
  52. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +1798 -597
  53. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  54. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +1679 -597
  55. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  56. package/angular/src/controls/accordion/accordion-panel/accordion-panel.component.d.ts +13 -4
  57. package/angular/src/controls/copilot/copilot.component.d.ts +31 -0
  58. package/angular/src/controls/copilot/copilot.module.d.ts +8 -0
  59. package/angular/src/controls/copilot/index.d.ts +2 -0
  60. package/angular/src/controls/details/details.component.d.ts +5 -1
  61. package/angular/src/controls/details/details.module.d.ts +3 -2
  62. package/angular/src/controls/dialog/dialog.component.d.ts +5 -1
  63. package/angular/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.d.ts +38 -0
  64. package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +3 -1
  65. package/angular/src/controls/form/form-field/form-field-accessibility-manager-base.service.d.ts +37 -0
  66. package/angular/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.d.ts +25 -0
  67. package/angular/src/controls/form/form-field/list/list-form-field.component.d.ts +12 -2
  68. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.d.ts +37 -0
  69. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.d.ts +12 -8
  70. package/angular/src/controls/guided-panel/guided-pane/guided-pane.component.d.ts +4 -0
  71. package/angular/src/controls/index.d.ts +3 -0
  72. package/angular/src/controls/summary/index.d.ts +3 -0
  73. package/angular/src/controls/summary/summary-item.d.ts +105 -0
  74. package/angular/src/controls/summary/summary.component.d.ts +82 -0
  75. package/angular/src/controls/summary/summary.module.d.ts +11 -0
  76. package/angular/src/controls/summary-group/index.d.ts +3 -0
  77. package/angular/src/controls/summary-group/summary-group.component.d.ts +57 -0
  78. package/angular/src/controls/summary-group/summary-group.module.d.ts +10 -0
  79. package/angular/src/controls/wizard/models/wizard-step-snap-in-output.d.ts +1 -1
  80. package/{core → angular/src}/data/extension-broker/snap-in-listener.d.ts +49 -46
  81. package/angular/src/data/index.d.ts +1 -0
  82. package/angular/src/generated/strings.d.ts +11 -0
  83. package/core/async/cancellation.js +316 -0
  84. package/core/async/index.js +312 -0
  85. package/core/async/progress.js +312 -0
  86. package/core/azure/azure-constants.js +316 -0
  87. package/core/azure/azure-logging.js +316 -0
  88. package/core/azure/azure-manager.js +316 -0
  89. package/core/azure/models/aadAppConfig-data.js +312 -0
  90. package/core/azure/models/azureArcStatusEnum.js +315 -0
  91. package/core/azure/models/azureTokenResult-data.js +315 -0
  92. package/core/azure/resources/deployment-operation-request-body.js +316 -0
  93. package/core/azure/resources/deployment-operation-response.js +312 -0
  94. package/core/azure/resources/location-data.js +316 -0
  95. package/core/azure/resources/resource-group-data.js +316 -0
  96. package/core/azure/resources/subscription-data.js +316 -0
  97. package/core/base/data-store/browser-storage-data-store.js +312 -0
  98. package/core/base/data-store/cached-data-store.js +316 -0
  99. package/core/base/data-store/data-store.js +312 -0
  100. package/core/base/data-store/local-data-store.js +312 -0
  101. package/core/base/data-store/memory-data-store.js +312 -0
  102. package/core/base/data-store/session-data-store.js +316 -0
  103. package/core/base/date/date-like.js +315 -0
  104. package/core/base/date/date-range.js +316 -0
  105. package/core/base/date/date-time.js +312 -0
  106. package/core/base/date/date-type.js +312 -0
  107. package/core/base/date/time-unit.js +316 -0
  108. package/core/base/decorators/base.js +316 -0
  109. package/core/base/decorators/debounce.decorators.js +316 -0
  110. package/core/base/decorators/delay.decorator.js +312 -0
  111. package/core/base/decorators/yield.decorator.js +312 -0
  112. package/core/base/environment.js +316 -0
  113. package/core/base/json.js +316 -0
  114. package/core/base/msft-sme.mock.js +315 -0
  115. package/core/base/polyfills/array.js +316 -0
  116. package/core/base/polyfills/string.js +316 -0
  117. package/core/base/rxjs-lifetime-manager.js +312 -0
  118. package/core/base/utilities.js +312 -0
  119. package/core/base/versioned-object.js +316 -0
  120. package/core/copilot/copilot-extension-service.d.ts +49 -0
  121. package/core/copilot/copilot-extension-service.d.ts.map +1 -0
  122. package/core/copilot/copilot-extension-service.js +446 -0
  123. package/core/copilot/copilot-extension-service.js.map +1 -0
  124. package/core/copilot/copilot-iframe/iframe-broker-service.d.ts +19 -0
  125. package/core/copilot/copilot-iframe/iframe-broker-service.d.ts.map +1 -0
  126. package/core/copilot/copilot-iframe/iframe-broker-service.js +344 -0
  127. package/core/copilot/copilot-iframe/iframe-broker-service.js.map +1 -0
  128. package/core/copilot/copilot-iframe/iframe-child-service.d.ts +15 -0
  129. package/core/copilot/copilot-iframe/iframe-child-service.d.ts.map +1 -0
  130. package/core/copilot/copilot-iframe/iframe-child-service.js +337 -0
  131. package/core/copilot/copilot-iframe/iframe-child-service.js.map +1 -0
  132. package/core/copilot/copilot-iframe/iframe-message-payload.d.ts +4 -0
  133. package/core/copilot/copilot-iframe/iframe-message-payload.d.ts.map +1 -0
  134. package/core/copilot/copilot-iframe/iframe-message-payload.js +319 -0
  135. package/core/copilot/copilot-iframe/iframe-message-payload.js.map +1 -0
  136. package/core/copilot/copilot-iframe/iframe-message-type.d.ts +4 -0
  137. package/core/copilot/copilot-iframe/iframe-message-type.d.ts.map +1 -0
  138. package/core/copilot/copilot-iframe/iframe-message-type.js +319 -0
  139. package/core/copilot/copilot-iframe/iframe-message-type.js.map +1 -0
  140. package/core/copilot/copilot-iframe/iframe-message.d.ts +6 -0
  141. package/core/copilot/copilot-iframe/iframe-message.d.ts.map +1 -0
  142. package/core/copilot/copilot-iframe/iframe-message.js +315 -0
  143. package/core/copilot/copilot-iframe/iframe-message.js.map +1 -0
  144. package/core/data/accessibility-manager.js +316 -0
  145. package/core/data/active-directory/active-directory.js +312 -0
  146. package/core/data/active-directory/models/account-info.js +316 -0
  147. package/core/data/active-directory/models/active-directory-search-options.js +312 -0
  148. package/core/data/active-directory/models/search-type.js +315 -0
  149. package/core/data/animation.js +312 -0
  150. package/core/data/app-context.js +316 -0
  151. package/core/data/asset-manager.js +316 -0
  152. package/core/data/base64-array-buffer.js +312 -0
  153. package/core/data/batch-connection.js +316 -0
  154. package/core/data/cim-connection.js +312 -0
  155. package/core/data/cim-stream.js +312 -0
  156. package/core/data/cim.js +316 -0
  157. package/core/data/column-picker.js +315 -0
  158. package/core/data/cookie.js +316 -0
  159. package/core/data/core-environment.js +312 -0
  160. package/core/data/crypto.js +312 -0
  161. package/core/data/deployment-share.js +316 -0
  162. package/core/data/disposable.js +316 -0
  163. package/core/data/electron.js +316 -0
  164. package/core/data/error-extended.js +316 -0
  165. package/core/data/extension-broker/dialog-listener.js +312 -0
  166. package/core/data/extension-broker/extension-broker.js +316 -0
  167. package/core/data/extension-broker/extension-listener.js +316 -0
  168. package/core/data/extension-broker/model/extension-broker-request-payload.js +316 -0
  169. package/core/data/extension-broker/model/extension-broker-response-error.js +315 -0
  170. package/core/data/extension-broker/model/extension-broker-response-payload.js +316 -0
  171. package/core/data/extension-broker/model/extension-entries.js +315 -0
  172. package/core/data/extension-broker/model/extension-instance.js +316 -0
  173. package/core/data/extension-broker/model/extension-rect.js +316 -0
  174. package/core/data/extension-broker/model/extension-search-options.js +316 -0
  175. package/core/data/extension-broker/service-listener.js +315 -0
  176. package/core/data/extension-broker/worker-listener.js +315 -0
  177. package/core/data/extension-broker/worker-set.js +316 -0
  178. package/core/data/file-transfer.js +316 -0
  179. package/core/data/gateway-connection.js +316 -0
  180. package/core/data/gateway-status.js +316 -0
  181. package/core/data/gateway-url-builder.js +316 -0
  182. package/core/data/gateway-url-translator.js +316 -0
  183. package/core/data/gateway-urls.js +316 -0
  184. package/core/data/globalization.js +315 -0
  185. package/core/data/http-constants.js +316 -0
  186. package/core/data/http.js +316 -0
  187. package/core/data/jobs/jobs-manager.js +316 -0
  188. package/core/data/jobs/models/job-credentials.js +312 -0
  189. package/core/data/jobs/models/job-node.js +316 -0
  190. package/core/data/jobs/models/job-paginated-response.js +312 -0
  191. package/core/data/jobs/models/job-pagination-options.js +316 -0
  192. package/core/data/jobs/models/job.js +316 -0
  193. package/core/data/jobs/models/node-job.js +316 -0
  194. package/core/data/jobs/models/powershell-job.js +312 -0
  195. package/core/data/language.js +312 -0
  196. package/core/data/lifetime-data.js +316 -0
  197. package/core/data/localization-manager.js +316 -0
  198. package/core/data/native-q.js +312 -0
  199. package/core/data/net.d.ts.map +1 -1
  200. package/core/data/net.js +317 -1
  201. package/core/data/net.js.map +1 -1
  202. package/core/data/node-connection.d.ts.map +1 -1
  203. package/core/data/node-connection.js +316 -0
  204. package/core/data/node-connection.js.map +1 -1
  205. package/core/data/node-extension-install.js +316 -0
  206. package/core/data/powershell-alternate.js +316 -0
  207. package/core/data/powershell-batch.js +312 -0
  208. package/core/data/powershell-connection.js +312 -0
  209. package/core/data/powershell-crypto.js +316 -0
  210. package/core/data/powershell-stream.js +315 -0
  211. package/core/data/powershell.js +316 -0
  212. package/core/data/query-cache.js +312 -0
  213. package/core/data/resource-cache.js +312 -0
  214. package/core/data/schedule-reboot.js +315 -0
  215. package/core/data/settings-manager.js +316 -0
  216. package/core/data/settings-manger.mock.js +315 -0
  217. package/core/data/sme-extension.js +312 -0
  218. package/core/data/ssh-stream.js +316 -0
  219. package/core/data/units.js +312 -0
  220. package/core/data/uri-builder.js +316 -0
  221. package/core/data/wdac-operations.js +315 -0
  222. package/core/data/websocket-stream.js +316 -0
  223. package/core/diagnostics/error-monitor.js +316 -0
  224. package/core/diagnostics/log-level.js +316 -0
  225. package/core/diagnostics/log-record.js +312 -0
  226. package/core/diagnostics/logging-constants.js +316 -0
  227. package/core/diagnostics/logging.js +316 -0
  228. package/core/diagnostics/logging.mock.js +316 -0
  229. package/core/diagnostics/sme-web-telemetry-models.js +316 -0
  230. package/core/diagnostics/sme-web-telemetry.d.ts +1 -2
  231. package/core/diagnostics/sme-web-telemetry.d.ts.map +1 -1
  232. package/core/diagnostics/sme-web-telemetry.js +339 -15
  233. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  234. package/core/diagnostics/telemetry-control-type.js +316 -0
  235. package/core/diagnostics/telemetry-options.js +316 -0
  236. package/core/diagnostics/telemetry-record.js +316 -0
  237. package/core/dom/dom.js +316 -0
  238. package/core/frame/frame-connection.js +316 -0
  239. package/core/frame/frame-connection.mock.js +316 -0
  240. package/core/frame/shell-navigation-connection.js +316 -0
  241. package/core/generated/powershell-scripts.d.ts.map +1 -1
  242. package/core/generated/powershell-scripts.js +313 -1
  243. package/core/generated/powershell-scripts.js.map +1 -1
  244. package/core/generated/strings.js +312 -0
  245. package/core/host/host-core-manager.js +316 -0
  246. package/core/host/host-core-message-type.js +316 -0
  247. package/core/host/host-core-messages.js +312 -0
  248. package/core/index.d.ts +48 -25
  249. package/core/index.d.ts.map +1 -1
  250. package/core/index.js +351 -18
  251. package/core/index.js.map +1 -1
  252. package/core/manifest/environment-modules.d.ts +3 -1
  253. package/core/manifest/environment-modules.d.ts.map +1 -1
  254. package/core/manifest/environment-modules.js +314 -0
  255. package/core/manifest/environment-modules.js.map +1 -1
  256. package/core/manifest/manifest-loader.js +312 -0
  257. package/core/manifest/module-schema.json +3 -1
  258. package/core/notification/client-notification-instance.js +316 -0
  259. package/core/notification/client-notification.js +316 -0
  260. package/core/notification/notification-connection.js +316 -0
  261. package/core/notification/notification-link-type.js +312 -0
  262. package/core/notification/notification-manager.js +312 -0
  263. package/core/notification/notification-message.js +312 -0
  264. package/core/notification/notification-state.js +316 -0
  265. package/core/notification/notification.js +312 -0
  266. package/core/notification/powershell-notification.js +316 -0
  267. package/core/notification/socket-signalr.js +312 -0
  268. package/core/notification/work-item-connection.js +312 -0
  269. package/core/notification/work-item-manager.js +316 -0
  270. package/core/notification/work-item-request.js +315 -0
  271. package/core/performance/performance-profile-data-type.js +315 -0
  272. package/core/performance/performance-profile-data.js +315 -0
  273. package/core/performance/performance-profile-database.js +315 -0
  274. package/core/performance/performance-profile-record.js +316 -0
  275. package/core/performance/performance-profile.d.ts.map +1 -1
  276. package/core/performance/performance-profile.js +325 -9
  277. package/core/performance/performance-profile.js.map +1 -1
  278. package/core/performance/performance-tracker.js +312 -0
  279. package/core/polyfills.js +316 -0
  280. package/core/resources/scripts/public/crypto/Get-DecryptedDataFromNode.ps1 +219 -0
  281. package/core/resources/scripts/public/crypto/Get-EncryptionJWKOnNode.ps1 +218 -0
  282. package/core/resources/scripts/public/inventory/Get-CimWin32LogicalDisk.ps1 +218 -0
  283. package/core/resources/scripts/public/inventory/Get-CimWin32NetworkAdapter.ps1 +216 -0
  284. package/core/resources/scripts/public/inventory/Get-CimWin32PhysicalMemory.ps1 +216 -0
  285. package/core/resources/scripts/public/inventory/Get-CimWin32Processor.ps1 +218 -0
  286. package/core/resources/scripts/public/inventory/Get-ClusterInventory.ps1 +218 -0
  287. package/core/resources/scripts/public/inventory/Get-ClusterNodes.ps1 +218 -0
  288. package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +221 -1
  289. package/core/rpc/alive/rpc-alive-client.js +312 -0
  290. package/core/rpc/alive/rpc-alive-handler.js +312 -0
  291. package/core/rpc/alive/rpc-alive-model.js +316 -0
  292. package/core/rpc/alive/rpc-alive-subject-server.js +312 -0
  293. package/core/rpc/alive/rpc-observable-alive-client.js +316 -0
  294. package/core/rpc/alive/rpc-observable-alive-model.js +315 -0
  295. package/core/rpc/alive/rpc-observable-alive-server.js +315 -0
  296. package/core/rpc/azure/rpc-azure-model.js +312 -0
  297. package/core/rpc/azure/rpc-azure-request-client.js +312 -0
  298. package/core/rpc/azure/rpc-azure-request-handler.js +316 -0
  299. package/core/rpc/azure/rpc-azure-request-subject-server.js +316 -0
  300. package/core/rpc/azure/rpc-azure-response-client.js +316 -0
  301. package/core/rpc/azure/rpc-azure-response-handler.js +312 -0
  302. package/core/rpc/copilot/rpc-observable-copilot-client.d.ts +24 -0
  303. package/core/rpc/copilot/rpc-observable-copilot-client.d.ts.map +1 -0
  304. package/core/rpc/copilot/rpc-observable-copilot-client.js +343 -0
  305. package/core/rpc/copilot/rpc-observable-copilot-client.js.map +1 -0
  306. package/core/rpc/copilot/rpc-observable-copilot-config-client.d.ts +24 -0
  307. package/core/rpc/copilot/rpc-observable-copilot-config-client.d.ts.map +1 -0
  308. package/core/rpc/copilot/rpc-observable-copilot-config-client.js +343 -0
  309. package/core/rpc/copilot/rpc-observable-copilot-config-client.js.map +1 -0
  310. package/core/rpc/copilot/rpc-observable-copilot-config-server.d.ts +14 -0
  311. package/core/rpc/copilot/rpc-observable-copilot-config-server.d.ts.map +1 -0
  312. package/core/rpc/copilot/rpc-observable-copilot-config-server.js +332 -0
  313. package/core/rpc/copilot/rpc-observable-copilot-config-server.js.map +1 -0
  314. package/core/rpc/copilot/rpc-observable-copilot-model.d.ts +55 -0
  315. package/core/rpc/copilot/rpc-observable-copilot-model.d.ts.map +1 -0
  316. package/core/rpc/copilot/rpc-observable-copilot-model.js +334 -0
  317. package/core/rpc/copilot/rpc-observable-copilot-model.js.map +1 -0
  318. package/core/rpc/copilot/rpc-observable-copilot-server.d.ts +14 -0
  319. package/core/rpc/copilot/rpc-observable-copilot-server.d.ts.map +1 -0
  320. package/core/rpc/copilot/rpc-observable-copilot-server.js +333 -0
  321. package/core/rpc/copilot/rpc-observable-copilot-server.js.map +1 -0
  322. package/core/rpc/credssp/rpc-credssp-model.js +315 -0
  323. package/core/rpc/credssp/rpc-credssp-request-client.js +316 -0
  324. package/core/rpc/credssp/rpc-credssp-request-handler.js +316 -0
  325. package/core/rpc/credssp/rpc-credssp-request-subject-server.js +316 -0
  326. package/core/rpc/credssp/rpc-credssp-response-client.js +316 -0
  327. package/core/rpc/credssp/rpc-credssp-response-handler.js +316 -0
  328. package/core/rpc/dialog/rpc-dialog-client.js +312 -0
  329. package/core/rpc/dialog/rpc-dialog-handler.js +315 -0
  330. package/core/rpc/dialog/rpc-dialog-model.js +316 -0
  331. package/core/rpc/dialog/rpc-dialog-subject-server.js +316 -0
  332. package/core/rpc/electron/rpc-electron-model.js +316 -0
  333. package/core/rpc/electron/rpc-electron-request-client.js +316 -0
  334. package/core/rpc/electron/rpc-electron-request-handler.js +315 -0
  335. package/core/rpc/electron/rpc-electron-request-subject-server.js +316 -0
  336. package/core/rpc/electron/rpc-electron-response-client.js +312 -0
  337. package/core/rpc/electron/rpc-electron-response-handler.js +315 -0
  338. package/core/rpc/elevate/rpc-observable-elevate-client.js +315 -0
  339. package/core/rpc/elevate/rpc-observable-elevate-model.js +312 -0
  340. package/core/rpc/elevate/rpc-observable-elevate-server.js +312 -0
  341. package/core/rpc/error-monitor/rpc-observable-error-monitor-client.js +316 -0
  342. package/core/rpc/error-monitor/rpc-observable-error-monitor-model.js +316 -0
  343. package/core/rpc/error-monitor/rpc-observable-error-monitor-server.js +312 -0
  344. package/core/rpc/extension-broker/rpc-extension-broker-model.js +312 -0
  345. package/core/rpc/extension-broker/rpc-extension-broker-module-request-subject-server.js +312 -0
  346. package/core/rpc/extension-broker/rpc-extension-broker-request-client.js +312 -0
  347. package/core/rpc/extension-broker/rpc-extension-broker-request-handler.js +312 -0
  348. package/core/rpc/extension-broker/rpc-extension-broker-request-subject-server.js +312 -0
  349. package/core/rpc/extension-broker/rpc-extension-broker-response-client.js +312 -0
  350. package/core/rpc/extension-broker/rpc-extension-broker-response-handler.js +312 -0
  351. package/core/rpc/extension-data/rpc-observable-extension-data-client.js +316 -0
  352. package/core/rpc/extension-data/rpc-observable-extension-data-model.js +312 -0
  353. package/core/rpc/extension-data/rpc-observable-extension-data-server.js +315 -0
  354. package/core/rpc/forward/rpc-forward-auto-client.js +315 -0
  355. package/core/rpc/forward/rpc-forward-down-client.js +315 -0
  356. package/core/rpc/forward/rpc-forward-down-handler.js +316 -0
  357. package/core/rpc/forward/rpc-forward-model.js +316 -0
  358. package/core/rpc/forward/rpc-forward-up-client.js +312 -0
  359. package/core/rpc/forward/rpc-forward-up-handler.js +316 -0
  360. package/core/rpc/forward/rpc-forward-up-subject-server.js +316 -0
  361. package/core/rpc/log/rpc-log-client.js +316 -0
  362. package/core/rpc/log/rpc-log-handler.js +312 -0
  363. package/core/rpc/log/rpc-log-model.js +316 -0
  364. package/core/rpc/log/rpc-log-subject-server.js +316 -0
  365. package/core/rpc/notification/rpc-notification-client.js +316 -0
  366. package/core/rpc/notification/rpc-notification-handler.js +312 -0
  367. package/core/rpc/notification/rpc-notification-model.js +316 -0
  368. package/core/rpc/notification/rpc-notification-subject-server.js +312 -0
  369. package/core/rpc/overlay/rpc-overlay-close-client.js +312 -0
  370. package/core/rpc/overlay/rpc-overlay-close-handler.js +316 -0
  371. package/core/rpc/overlay/rpc-overlay-model.js +312 -0
  372. package/core/rpc/overlay/rpc-overlay-open-client.js +312 -0
  373. package/core/rpc/overlay/rpc-overlay-open-handler.js +316 -0
  374. package/core/rpc/overlay/rpc-overlay-open-subject-server.js +316 -0
  375. package/core/rpc/performance/rpc-observable-performance-client.js +315 -0
  376. package/core/rpc/performance/rpc-observable-performance-config-client.js +312 -0
  377. package/core/rpc/performance/rpc-observable-performance-config-server.js +316 -0
  378. package/core/rpc/performance/rpc-observable-performance-model.js +312 -0
  379. package/core/rpc/performance/rpc-observable-performance-server.js +312 -0
  380. package/core/rpc/report/rpc-report-client.js +316 -0
  381. package/core/rpc/report/rpc-report-handler.js +315 -0
  382. package/core/rpc/report/rpc-report-model.js +315 -0
  383. package/core/rpc/report/rpc-report-subject-server.js +312 -0
  384. package/core/rpc/rpc-base.d.ts +4 -0
  385. package/core/rpc/rpc-base.d.ts.map +1 -1
  386. package/core/rpc/rpc-base.js +316 -0
  387. package/core/rpc/rpc-base.js.map +1 -1
  388. package/core/rpc/rpc-channel.js +316 -0
  389. package/core/rpc/rpc-forwarder.js +312 -0
  390. package/core/rpc/rpc-inbound-client.js +315 -0
  391. package/core/rpc/rpc-inbound.js +312 -0
  392. package/core/rpc/rpc-manager.js +316 -0
  393. package/core/rpc/rpc-module-subject-server.js +316 -0
  394. package/core/rpc/rpc-observable-client.js +316 -0
  395. package/core/rpc/rpc-observable-request.js +316 -0
  396. package/core/rpc/rpc-observable-result.js +316 -0
  397. package/core/rpc/rpc-observable-server.js +316 -0
  398. package/core/rpc/rpc-outbound-client.js +316 -0
  399. package/core/rpc/rpc-outbound.js +315 -0
  400. package/core/rpc/rpc-subject-server.js +316 -0
  401. package/core/rpc/rpc.js +316 -0
  402. package/core/rpc/seek/rpc-seek-client.js +316 -0
  403. package/core/rpc/seek/rpc-seek-handler.js +315 -0
  404. package/core/rpc/seek/rpc-seek-model.js +315 -0
  405. package/core/rpc/settings/rpc-settings-client.js +312 -0
  406. package/core/rpc/settings/rpc-settings-handler.js +315 -0
  407. package/core/rpc/settings/rpc-settings-model.js +315 -0
  408. package/core/rpc/settings/rpc-settings-subject-server.js +312 -0
  409. package/core/rpc/shell-navigate/rpc-shell-navigate-client.js +316 -0
  410. package/core/rpc/shell-navigate/rpc-shell-navigate-handler.js +316 -0
  411. package/core/rpc/shell-navigate/rpc-shell-navigate-model.js +315 -0
  412. package/core/rpc/shell-navigate/rpc-shell-navigate-subject-server.js +315 -0
  413. package/core/rpc/sme-extension/rpc-sme-extension-model.js +316 -0
  414. package/core/rpc/sme-extension/rpc-sme-extension-request-client.js +316 -0
  415. package/core/rpc/sme-extension/rpc-sme-extension-request-handler.js +312 -0
  416. package/core/rpc/sme-extension/rpc-sme-extension-request-subject-server.js +312 -0
  417. package/core/rpc/sme-extension/rpc-sme-extension-response-client.js +316 -0
  418. package/core/rpc/sme-extension/rpc-sme-extension-response-handler.js +316 -0
  419. package/core/rpc/telemetry/rpc-telemetry-client.js +312 -0
  420. package/core/rpc/telemetry/rpc-telemetry-handler.js +312 -0
  421. package/core/rpc/telemetry/rpc-telemetry-model.js +312 -0
  422. package/core/rpc/telemetry/rpc-telemetry-subject-server.js +316 -0
  423. package/core/rpc/update-data/rpc-update-data-client.js +316 -0
  424. package/core/rpc/update-data/rpc-update-data-handler.js +312 -0
  425. package/core/rpc/update-data/rpc-update-data-model.js +312 -0
  426. package/core/rpc/update-data/rpc-update-data-subject-server.js +312 -0
  427. package/core/rpc/update-theme/rpc-observable-update-theme-client.js +316 -0
  428. package/core/rpc/update-theme/rpc-observable-update-theme-model.js +315 -0
  429. package/core/rpc/update-theme/rpc-observable-update-theme-server.js +316 -0
  430. package/core/rpc/work-item/rpc-work-item-client.js +315 -0
  431. package/core/rpc/work-item/rpc-work-item-handler.js +312 -0
  432. package/core/rpc/work-item/rpc-work-item-model.js +316 -0
  433. package/core/rpc/work-item/rpc-work-item-subject-server.js +316 -0
  434. package/core/rpc/work-item-find/rpc-work-item-find-client.js +312 -0
  435. package/core/rpc/work-item-find/rpc-work-item-find-handler.js +315 -0
  436. package/core/rpc/work-item-find/rpc-work-item-find-model.js +316 -0
  437. package/core/rpc/work-item-find/rpc-work-item-find-subject-server.js +312 -0
  438. package/core/security/active-connection.js +315 -0
  439. package/core/security/authorization-manager.js +315 -0
  440. package/core/security/connection-manager-settings/common-connection-settings.js +316 -0
  441. package/core/security/connection-manager-settings/connection-settings.js +315 -0
  442. package/core/security/connection-manager.js +316 -0
  443. package/core/security/connection-stream.js +316 -0
  444. package/core/security/connection.js +312 -0
  445. package/core/security/credssp-manager.js +315 -0
  446. package/core/security/sign-on-manager.js +316 -0
  447. package/core/security/tag-manager.js +315 -0
  448. package/core/security/tool-condition-validator.js +316 -0
  449. package/core/security/tool-connection-query.js +312 -0
  450. package/core/security/user-principal.js +312 -0
  451. package/core/shared/cluster-inventory/cluster-inventory-cache.js +316 -0
  452. package/core/shared/cluster-inventory/cluster-inventory.js +315 -0
  453. package/core/shared/cluster-inventory/cluster-node-inventory.js +316 -0
  454. package/core/shared/gateway-inventory/gateway-inventory-cache.js +316 -0
  455. package/core/shared/gateway-inventory/gateway-inventory-detail-cache.js +316 -0
  456. package/core/shared/gateway-inventory/gateway-inventory-detail.js +316 -0
  457. package/core/shared/gateway-inventory/gateway-inventory.js +316 -0
  458. package/core/shared/inventory-query-caches.js +316 -0
  459. package/core/shared/server-inventory/server-inventory-cache.d.ts.map +1 -1
  460. package/core/shared/server-inventory/server-inventory-cache.js +313 -0
  461. package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
  462. package/core/shared/server-inventory/server-inventory-detail-cache.js +315 -0
  463. package/core/shared/server-inventory/server-inventory-detail.js +316 -0
  464. package/core/shared/server-inventory/server-inventory.d.ts +8 -0
  465. package/core/shared/server-inventory/server-inventory.d.ts.map +1 -1
  466. package/core/shared/server-inventory/server-inventory.js +320 -0
  467. package/core/shared/server-inventory/server-inventory.js.map +1 -1
  468. package/core/shared/shared-cache.js +312 -0
  469. package/core/shared/tool-inventory/tool-inventory-cache.js +312 -0
  470. package/core/shared/tool-inventory/tool-inventory.js +316 -0
  471. package/core/special.js +316 -0
  472. package/core/test-utilities/accessibility-tester.js +316 -0
  473. package/core/test-utilities/console.mock.js +316 -0
  474. package/core/test-utilities/jasmine-axe-matcher.js +316 -0
  475. package/core/test-utilities/wait-async.js +315 -0
  476. package/core/test.js +312 -0
  477. package/core/testing.js +316 -0
  478. package/core/workflow/persistent-local-storage.js +316 -0
  479. package/core/workflow/persistent-work-item-apply-state.js +316 -0
  480. package/core/workflow/persistent-work-item-state.js +316 -0
  481. package/core/workflow/persistent-work-item.js +316 -0
  482. package/core/workflow/persistent-workflow-builder.js +316 -0
  483. package/core/workflow/persistent-workflow-context.js +315 -0
  484. package/core/workflow/persistent-workflow-runner.js +316 -0
  485. package/core/workflow/persistent-workflow-snapshot.js +315 -0
  486. package/core/workflow/persistent-workflow-store.js +312 -0
  487. package/core/workflow/persistent-workflow.js +312 -0
  488. package/package.json +7 -6
  489. package/styles/css/main-v2.css +1 -1
  490. package/styles/fonts/SegoeUI/Bold/SegoeUIBold-5.27.woff +0 -0
  491. package/styles/fonts/SegoeUI/Light/SegoeUILight-5.27.woff +0 -0
  492. package/styles/fonts/SegoeUI/Normal/SegoeUI-5.27.woff +0 -0
  493. package/styles/fonts/SegoeUI/SemiBold/SegoeUISemiBold-5.27.woff +0 -0
  494. package/styles/fonts/SegoeUI/SemiLight/SegoeUISemiLight-5.27.woff +0 -0
  495. package/styles/fonts/ServMDL2/ServMDL2-4.66.woff +0 -0
  496. package/tools/build/webpack/index-html.transform.js +312 -0
  497. package/tools/build/webpack/shell.index-html.transform.js +316 -0
  498. package/tools/build/webpack/shell.webpack.config.js +312 -0
  499. package/tools/build/webpack/webpack.config.js +312 -0
  500. package/tools/code-formatter/.eslintrc.base.json +2 -1
  501. package/tools/code-formatter/lint.js +316 -0
  502. package/tools/code-formatter/utilities.d.ts.map +1 -1
  503. package/tools/code-formatter/utilities.js +313 -1
  504. package/tools/code-formatter/utilities.js.map +1 -1
  505. package/tools/gulp-doc-generator/index.js +316 -0
  506. package/tools/gulp-manifest-resource/index.js +315 -0
  507. package/tools/gulp-manifest-validator/index.js +316 -0
  508. package/tools/gulp-merge-json-in-folders/index.js +316 -0
  509. package/tools/gulp-merge-json-in-folders/json-merge.js +316 -0
  510. package/tools/gulp-ps-cim/index.js +316 -0
  511. package/tools/gulp-ps-code/index.d.ts.map +1 -1
  512. package/tools/gulp-ps-code/index.js +326 -2
  513. package/tools/gulp-ps-code/index.js.map +1 -1
  514. package/tools/gulp-ps-code/ps-code-convert.js +316 -0
  515. package/tools/gulp-ps-manifest/index.js +312 -0
  516. package/tools/gulp-ps-module/index.d.ts.map +1 -1
  517. package/tools/gulp-ps-module/index.js +328 -3
  518. package/tools/gulp-ps-module/index.js.map +1 -1
  519. package/tools/gulp-ps-resjson/index.js +316 -0
  520. package/tools/gulp-resjson/index.js +312 -0
  521. package/tools/gulp-resjson/resjson-convert.js +316 -0
  522. package/tools/gulp-schema-form/index.js +312 -0
  523. package/tools/gulp-svg-code/index.js +316 -0
  524. package/tools/gulp-svg-code/svg-code-convert.js +312 -0
  525. package/tools/gulp-update-notes-resource/index.js +312 -0
  526. package/tools/module-template/build/increment-package-version.ps1 +219 -0
  527. package/tools/module-template/build/pipelines/ci-build.yml +5 -5
  528. package/tools/module-template/build/pipelines/pull-request.yml +4 -4
  529. package/tools/module-template/build/push-incremented-version.ps1 +218 -1
  530. package/tools/module-template/build/update-powershell-code.ps1 +216 -0
  531. package/tools/module-template/gulpfile.ts/common/clean.ts +2 -0
  532. package/tools/module-template/gulpfile.ts/common/pack.ts +17 -5
  533. package/tools/module-template/gulpfile.ts/common/powershell.ts +40 -2
  534. package/tools/module-template/gulpfile.ts/common/test.ts +2 -3
  535. package/tools/module-template/gulpfile.ts/common/utilities.ts +40 -12
  536. package/tools/pack-nuget/index.d.ts.map +1 -1
  537. package/tools/pack-nuget/index.js +325 -3
  538. package/tools/pack-nuget/index.js.map +1 -1
  539. package/tools/scripts/Invoke-PesterTest.ps1 +218 -0
  540. package/tools/scripts/New-ExtensionPackage.ps1 +373 -6
  541. package/tools/scripts/Search-NonAsciiText.ps1 +219 -0
  542. package/tools/scripts/package-information/README.md +3 -0
  543. package/tools/scripts/package-information/ms-logo.png +0 -0
  544. package/tools/test-runner/index.js +316 -0
  545. package/tools/utilities/index.js +312 -0
  546. package/tools/wac-cli/src/angular15/configs/angular-json-config.js +315 -0
  547. package/tools/wac-cli/src/angular15/configs/ci-build-yml-config.js +315 -0
  548. package/tools/wac-cli/src/angular15/configs/config.js +312 -0
  549. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js +315 -0
  550. package/tools/wac-cli/src/angular15/configs/git-ignore-config.js +315 -0
  551. package/tools/wac-cli/src/angular15/configs/jasmine-test-config.js +316 -0
  552. package/tools/wac-cli/src/angular15/configs/package-json-config.js +316 -0
  553. package/tools/wac-cli/src/angular15/configs/replace-config.js +312 -0
  554. package/tools/wac-cli/src/angular15/configs/tsconfig-config.js +316 -0
  555. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js +316 -0
  556. package/tools/wac-cli/src/angular15/main.js +316 -0
  557. package/tools/wac-cli/src/angular15/upgrader/angular-json-upgrader.js +316 -0
  558. package/tools/wac-cli/src/angular15/upgrader/audit/ajax-response-updater.js +316 -0
  559. package/tools/wac-cli/src/angular15/upgrader/audit/css-syntax-error-updater.js +316 -0
  560. package/tools/wac-cli/src/angular15/upgrader/audit/declare-override-updater.js +312 -0
  561. package/tools/wac-cli/src/angular15/upgrader/audit/error-updater-angular15.js +316 -0
  562. package/tools/wac-cli/src/angular15/upgrader/audit/form-control-updater.js +312 -0
  563. package/tools/wac-cli/src/angular15/upgrader/audit/iif-updater-util.js +315 -0
  564. package/tools/wac-cli/src/angular15/upgrader/audit/load-children-callback-updater.js +316 -0
  565. package/tools/wac-cli/src/angular15/upgrader/audit/log-parser.js +316 -0
  566. package/tools/wac-cli/src/angular15/upgrader/audit/observable-throw-updater.js +316 -0
  567. package/tools/wac-cli/src/angular15/upgrader/audit/parameter-count-violation-updater.js +312 -0
  568. package/tools/wac-cli/src/angular15/upgrader/audit/string-replace-updater.js +316 -0
  569. package/tools/wac-cli/src/angular15/upgrader/audit/subjuct-next-updater-util.js +315 -0
  570. package/tools/wac-cli/src/angular15/upgrader/ci-build-yml-upgrader.js +316 -0
  571. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js +312 -0
  572. package/tools/wac-cli/src/angular15/upgrader/file-replacement-upgrader.js +315 -0
  573. package/tools/wac-cli/src/angular15/upgrader/git-ignore-upgrader.js +316 -0
  574. package/tools/wac-cli/src/angular15/upgrader/jasmine-test-upgrader.js +316 -0
  575. package/tools/wac-cli/src/angular15/upgrader/package-json-upgrader.js +316 -0
  576. package/tools/wac-cli/src/angular15/upgrader/remove-upgrader.js +316 -0
  577. package/tools/wac-cli/src/angular15/upgrader/replace-upgrader.js +316 -0
  578. package/tools/wac-cli/src/angular15/upgrader/tsconfig-upgrader.js +316 -0
  579. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js +316 -0
  580. package/tools/wac-cli/src/angular15/upgrader/version-json-upgrader.js +312 -0
  581. package/tools/wac-cli/src/angular15/utils/add-item.js +312 -0
  582. package/tools/wac-cli/src/angular15/utils/command-runner.js +316 -0
  583. package/tools/wac-cli/src/angular15/utils/file-comparison.js +316 -0
  584. package/tools/wac-cli/src/angular15/utils/file-replacement.js +315 -0
  585. package/tools/wac-cli/src/angular15/utils/file-writer.js +312 -0
  586. package/tools/wac-cli/src/angular15/utils/logger.js +312 -0
  587. package/tools/wac-cli/src/angular15/utils/main-debugger.js +312 -0
  588. package/tools/wac-cli/src/angular15/utils/relative-path.js +316 -0
  589. package/tools/wac-cli/src/angular15/utils/remove-item.js +316 -0
  590. package/tools/wac-cli/src/angular15/utils/space-generator.js +312 -0
  591. package/tools/wac-cli/src/angular15/utils/update-shell-references.js +312 -0
  592. package/tools/wac-cli/src/common.js +316 -0
  593. package/tools/wac-cli/src/create/main.js +316 -0
  594. package/tools/wac-cli/src/eslint/main.js +312 -0
  595. package/tools/wac-cli/src/index.js +316 -0
  596. package/tools/wac-cli/src/upgrade/error-updater.js +312 -0
  597. package/tools/wac-cli/src/upgrade/error-updaters/component-selector-updater.js +312 -0
  598. package/tools/wac-cli/src/upgrade/error-updaters/only-arrow-functions-updater.js +316 -0
  599. package/tools/wac-cli/src/upgrade/error-updaters/updater-lookup.js +312 -0
  600. package/tools/wac-cli/src/upgrade/file-updater.js +316 -0
  601. package/tools/wac-cli/src/upgrade/get-files.js +312 -0
  602. package/tools/wac-cli/src/upgrade/main.js +316 -0
  603. package/tools/wac-cli/src/upgrade/models/error-result.js +316 -0
  604. package/tools/wac-cli/src/upgrade/models/updater-interface.js +316 -0
  605. package/tools/wac-cli/src/upgrade/package-updater.js +316 -0
  606. package/tools/wac-cli/templates/wac-template/package.json +1 -1
  607. package/tools/wac-cli/templates/wac-template/src/favicon.ico +0 -0
  608. package/tools/wac-cli/templates/wac-template/src/karma.conf.js +317 -1
  609. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Error.ps1 +218 -0
  610. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Exception.ps1 +216 -0
  611. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Process.ps1 +216 -1
  612. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Service.ps1 +216 -1
  613. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-WinRmState.ps1 +218 -1
  614. package/core/data/extension-broker/snap-in-listener.d.ts.map +0 -1
  615. package/core/data/extension-broker/snap-in-listener.js +0 -73
  616. package/core/data/extension-broker/snap-in-listener.js.map +0 -1
  617. package/microsoft-windows-admin-center-sdk-4.167.0.tgz +0 -0
@@ -7,23 +7,43 @@ import { SME_LAYOUT_PROVIDER } from '../common/layout';
7
7
  import { DetailsResponsiveWindowManager } from './details-responsive-window-manager';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@angular/common";
10
+ import * as i2 from "../icon/layered-icon/layered-icon.component";
11
+ import * as i3 from "../icon/layered-icon/layer/icon-layer.component";
10
12
  const _c0 = ["expander"];
13
+ function DetailsComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementContainerStart(0);
15
+ i0.ɵɵelementStart(1, "sme-layered-icon", 9);
16
+ i0.ɵɵelement(2, "sme-icon-layer", 10);
17
+ i0.ɵɵelementEnd();
18
+ i0.ɵɵelementContainerEnd();
19
+ } }
20
+ function DetailsComponent_ng_container_7_Template(rf, ctx) { if (rf & 1) {
21
+ i0.ɵɵelementContainerStart(0);
22
+ i0.ɵɵelementStart(1, "span", 11);
23
+ i0.ɵɵtext(2);
24
+ i0.ɵɵelementEnd();
25
+ i0.ɵɵelementContainerEnd();
26
+ } if (rf & 2) {
27
+ const ctx_r2 = i0.ɵɵnextContext();
28
+ i0.ɵɵadvance(2);
29
+ i0.ɵɵtextInterpolate(ctx_r2.subHeader);
30
+ } }
11
31
  const _c1 = function (a0, a1) { return { "sme-icon-chevronUpMed": a0, "sme-icon-chevronDownMed": a1 }; };
12
- function DetailsComponent_span_5_Template(rf, ctx) { if (rf & 1) {
13
- i0.ɵɵelement(0, "span", 8);
32
+ function DetailsComponent_span_8_Template(rf, ctx) { if (rf & 1) {
33
+ i0.ɵɵelement(0, "span", 12);
14
34
  } if (rf & 2) {
15
- const ctx_r1 = i0.ɵɵnextContext();
16
- i0.ɵɵstyleProp("order", ctx_r1.chevronPosition);
17
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(3, _c1, !ctx_r1.isExpanded, ctx_r1.isExpanded));
35
+ const ctx_r3 = i0.ɵɵnextContext();
36
+ i0.ɵɵstyleProp("order", ctx_r3.chevronPosition)("margin-left", ctx_r3.chevronLeftMargin);
37
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(5, _c1, !ctx_r3.isExpanded, ctx_r3.isExpanded));
18
38
  } }
19
- function DetailsComponent_span_6_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵelement(0, "span", 8);
39
+ function DetailsComponent_span_9_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelement(0, "span", 12);
21
41
  } if (rf & 2) {
22
- const ctx_r2 = i0.ɵɵnextContext();
23
- i0.ɵɵstyleProp("order", ctx_r2.chevronPosition);
24
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(3, _c1, ctx_r2.isExpanded, !ctx_r2.isExpanded));
42
+ const ctx_r4 = i0.ɵɵnextContext();
43
+ i0.ɵɵstyleProp("order", ctx_r4.chevronPosition)("margin-left", ctx_r4.chevronLeftMargin);
44
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(5, _c1, ctx_r4.isExpanded, !ctx_r4.isExpanded));
25
45
  } }
26
- function DetailsComponent_hr_12_Template(rf, ctx) { if (rf & 1) {
46
+ function DetailsComponent_hr_15_Template(rf, ctx) { if (rf & 1) {
27
47
  i0.ɵɵelement(0, "hr");
28
48
  } }
29
49
  const _c2 = function (a0, a1) { return { "sme-layout-absolute-phone-up sme-position-inset-none sme-padding-bottom-sm sme-arrange-overflow-auto": a0, "sme-layout-relative sme-position-stretch-v": a1 }; };
@@ -55,6 +75,7 @@ export class DetailsComponent extends CoreBaseComponent {
55
75
  this.autoHeight = false;
56
76
  this.isExpandedChange = new EventEmitter();
57
77
  this.layoutChanged = new EventEmitter();
78
+ this.chevronLeftMargin = '0';
58
79
  this.initialHeightPercentage = 30;
59
80
  if (layout) {
60
81
  this.detailsResponsiveWindowManager = new DetailsResponsiveWindowManager(layout);
@@ -77,6 +98,9 @@ export class DetailsComponent extends CoreBaseComponent {
77
98
  get logSourceName() {
78
99
  return 'DetailsComponent';
79
100
  }
101
+ set pushChevronFarRight(value) {
102
+ this.chevronLeftMargin = value ? 'auto' : this.chevronLeftMargin;
103
+ }
80
104
  /**
81
105
  * @deprecated since 02/25/2019. Please use 'header' instead
82
106
  */
@@ -203,29 +227,36 @@ export class DetailsComponent extends CoreBaseComponent {
203
227
  } if (rf & 2) {
204
228
  let _t;
205
229
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.expander = _t.first);
206
- } }, inputs: { initialHeightPercentage: "initialHeightPercentage", header: "header", chevronInverted: "chevronInverted", chevronPosition: "chevronPosition", addBottomBorder: "addBottomBorder", autoHeight: "autoHeight", title: "title", isExpanded: "isExpanded" }, outputs: { isExpandedChange: "isExpandedChange" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c3, decls: 13, vars: 20, consts: [["role", "button", "tabindex", "0", 1, "sme-button", "sme-button-trigger", "sme-button-auto-width", "sme-position-flex-none", "sme-padding-squish-v-md", "sme-padding-horizontal-lg", "sme-position-stretch-h", "sme-position-left-inline", "sme-arrange-stack-h", "sme-focus-zone", 3, "click"], ["expander", ""], [1, "sme-font-h3", "sme-position-flex-auto", "sme-arrange-ellipsis"], ["class", "sme-icon sme-position-flex-none sme-margin-horizontal-xs", "aria-hidden", "true", 3, "order", "ngClass", 4, "ngIf"], [1, "sme-screen-reader", 3, "id"], [1, "sme-position-flex-auto", "sme-layout-relative"], [3, "ngClass"], [4, "ngIf"], ["aria-hidden", "true", 1, "sme-icon", "sme-position-flex-none", "sme-margin-horizontal-xs", 3, "ngClass"]], template: function DetailsComponent_Template(rf, ctx) { if (rf & 1) {
230
+ } }, inputs: { initialHeightPercentage: "initialHeightPercentage", header: "header", subHeader: "subHeader", chevronInverted: "chevronInverted", chevronPosition: "chevronPosition", pushChevronFarRight: "pushChevronFarRight", addBottomBorder: "addBottomBorder", showInfoIcon: "showInfoIcon", autoHeight: "autoHeight", title: "title", isExpanded: "isExpanded" }, outputs: { isExpandedChange: "isExpandedChange" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c3, decls: 16, vars: 22, consts: [["role", "button", "tabindex", "0", 1, "sme-button", "sme-button-trigger", "sme-button-auto-width", "sme-position-flex-none", "sme-padding-squish-v-md", "sme-padding-horizontal-lg", "sme-position-stretch-h", "sme-position-left-inline", "sme-arrange-stack-h", "sme-focus-zone", 3, "click"], ["expander", ""], [4, "ngIf"], [1, "sme-arrange-stack-v", "sme-arrange-line-clamp"], [1, "sme-font-h3", "sme-position-flex-auto", "sme-arrange-ws-wrap"], ["class", "sme-icon sme-position-flex-none sme-margin-horizontal-xs", "aria-hidden", "true", 3, "order", "ngClass", "margin-left", 4, "ngIf"], [1, "sme-screen-reader", 3, "id"], [1, "sme-position-flex-auto", "sme-layout-relative"], [3, "ngClass"], ["size", "16px", 1, "sme-margin-inset-xxs"], [1, "sme-icon", "sme-icon-infoSolid"], [1, "sme-font-body", "sme-font-family-light", "sme-position-flex-auto", "sme-arrange-ellipsis"], ["aria-hidden", "true", 1, "sme-icon", "sme-position-flex-none", "sme-margin-horizontal-xs", 3, "ngClass"]], template: function DetailsComponent_Template(rf, ctx) { if (rf & 1) {
207
231
  i0.ɵɵprojectionDef();
208
232
  i0.ɵɵelementStart(0, "h3")(1, "div", 0, 1);
209
233
  i0.ɵɵlistener("click", function DetailsComponent_Template_div_click_1_listener() { return ctx.toggleExpansion(); });
210
- i0.ɵɵelementStart(3, "span", 2);
211
- i0.ɵɵtext(4);
234
+ i0.ɵɵtemplate(3, DetailsComponent_ng_container_3_Template, 3, 0, "ng-container", 2);
235
+ i0.ɵɵelementStart(4, "div", 3)(5, "span", 4);
236
+ i0.ɵɵtext(6);
212
237
  i0.ɵɵelementEnd();
213
- i0.ɵɵtemplate(5, DetailsComponent_span_5_Template, 1, 6, "span", 3);
214
- i0.ɵɵtemplate(6, DetailsComponent_span_6_Template, 1, 6, "span", 3);
215
- i0.ɵɵelementStart(7, "div", 4);
216
- i0.ɵɵtext(8);
238
+ i0.ɵɵtemplate(7, DetailsComponent_ng_container_7_Template, 3, 1, "ng-container", 2);
239
+ i0.ɵɵelementEnd();
240
+ i0.ɵɵtemplate(8, DetailsComponent_span_8_Template, 1, 8, "span", 5);
241
+ i0.ɵɵtemplate(9, DetailsComponent_span_9_Template, 1, 8, "span", 5);
242
+ i0.ɵɵelementStart(10, "div", 6);
243
+ i0.ɵɵtext(11);
217
244
  i0.ɵɵelementEnd()()();
218
- i0.ɵɵelementStart(9, "div", 5)(10, "div", 6);
219
- i0.ɵɵprojection(11);
245
+ i0.ɵɵelementStart(12, "div", 7)(13, "div", 8);
246
+ i0.ɵɵprojection(14);
220
247
  i0.ɵɵelementEnd()();
221
- i0.ɵɵtemplate(12, DetailsComponent_hr_12_Template, 1, 0, "hr", 7);
248
+ i0.ɵɵtemplate(15, DetailsComponent_hr_15_Template, 1, 0, "hr", 2);
222
249
  } if (rf & 2) {
223
250
  i0.ɵɵadvance(1);
224
251
  i0.ɵɵstyleProp("min-height", ctx.minExpanderHeight);
225
252
  i0.ɵɵattribute("aria-expanded", !!ctx.isExpanded)("aria-describedBy", ctx.idBag.detailsSpan);
253
+ i0.ɵɵadvance(2);
254
+ i0.ɵɵproperty("ngIf", ctx.showInfoIcon);
226
255
  i0.ɵɵadvance(3);
227
256
  i0.ɵɵtextInterpolate(ctx.header);
228
257
  i0.ɵɵadvance(1);
258
+ i0.ɵɵproperty("ngIf", !!ctx.subHeader);
259
+ i0.ɵɵadvance(1);
229
260
  i0.ɵɵproperty("ngIf", !ctx.chevronInverted);
230
261
  i0.ɵɵadvance(1);
231
262
  i0.ɵɵproperty("ngIf", ctx.chevronInverted);
@@ -237,10 +268,10 @@ export class DetailsComponent extends CoreBaseComponent {
237
268
  i0.ɵɵclassProp("sme-margin-horizontal-lg", ctx.shouldContentSlim)("sme-position-stretch-v", ctx.autoHeight);
238
269
  i0.ɵɵadvance(1);
239
270
  i0.ɵɵclassProp("sme-layout-none", !ctx.isExpanded);
240
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(17, _c2, !ctx.autoHeight, ctx.autoHeight));
271
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(19, _c2, !ctx.autoHeight, ctx.autoHeight));
241
272
  i0.ɵɵadvance(2);
242
273
  i0.ɵɵproperty("ngIf", ctx.addBottomBorder);
243
- } }, dependencies: [i1.NgClass, i1.NgIf], encapsulation: 2 });
274
+ } }, dependencies: [i1.NgClass, i1.NgIf, i2.LayeredIconComponent, i3.IconLayerComponent], encapsulation: 2 });
244
275
  __decorate([
245
276
  Yield(),
246
277
  __metadata("design:type", Function),
@@ -261,7 +292,7 @@ __decorate([
261
292
  ], DetailsComponent.prototype, "onLayoutChanged", null);
262
293
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DetailsComponent, [{
263
294
  type: Component,
264
- args: [{ selector: 'sme-details', template: "<h3>\r\n <div #expander\r\n class=\"sme-button sme-button-trigger sme-button-auto-width sme-position-flex-none sme-padding-squish-v-md sme-padding-horizontal-lg sme-position-stretch-h sme-position-left-inline sme-arrange-stack-h sme-focus-zone\"\r\n role=\"button\" tabindex=\"0\" (click)=\"toggleExpansion()\" [style.min-height]=\"minExpanderHeight\"\r\n [attr.aria-expanded]=\"!!isExpanded\" [attr.aria-describedBy]=\"idBag.detailsSpan\">\r\n <span class=\"sme-font-h3 sme-position-flex-auto sme-arrange-ellipsis\">{{ header }}</span>\r\n <span [style.order]=\"chevronPosition\" *ngIf=\"!chevronInverted\" class=\"sme-icon sme-position-flex-none sme-margin-horizontal-xs\"\r\n [ngClass]=\"{'sme-icon-chevronUpMed': !isExpanded, 'sme-icon-chevronDownMed': isExpanded}\"\r\n aria-hidden=\"true\"></span>\r\n <span [style.order]=\"chevronPosition\" *ngIf=\"chevronInverted\" class=\"sme-icon sme-position-flex-none sme-margin-horizontal-xs\"\r\n [ngClass]=\"{'sme-icon-chevronUpMed': isExpanded, 'sme-icon-chevronDownMed': !isExpanded}\"\r\n aria-hidden=\"true\"></span>\r\n <div class=\"sme-screen-reader\" [id]=\"idBag.detailsSpan\"> {{ resourceStrings.AriaDescription }}</div>\r\n </div>\r\n</h3>\r\n\r\n<div class=\"sme-position-flex-auto sme-layout-relative\" [class.sme-margin-horizontal-lg]=\"shouldContentSlim\" [class.sme-position-stretch-v]=\"autoHeight\">\r\n <div [ngClass]=\"{'sme-layout-absolute-phone-up sme-position-inset-none sme-padding-bottom-sm sme-arrange-overflow-auto': !autoHeight, 'sme-layout-relative sme-position-stretch-v': autoHeight}\"\r\n [class.sme-layout-none]=\"!isExpanded\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n<hr *ngIf=\"addBottomBorder\">\r\n" }]
295
+ args: [{ selector: 'sme-details', template: "<h3>\r\n <div #expander\r\n class=\"sme-button sme-button-trigger sme-button-auto-width sme-position-flex-none sme-padding-squish-v-md sme-padding-horizontal-lg sme-position-stretch-h sme-position-left-inline sme-arrange-stack-h sme-focus-zone\"\r\n role=\"button\" tabindex=\"0\" (click)=\"toggleExpansion()\" [style.min-height]=\"minExpanderHeight\"\r\n [attr.aria-expanded]=\"!!isExpanded\" [attr.aria-describedBy]=\"idBag.detailsSpan\">\r\n <ng-container *ngIf=\"showInfoIcon\">\r\n <sme-layered-icon size=\"16px\" class=\"sme-margin-inset-xxs\">\r\n <sme-icon-layer class=\"sme-icon sme-icon-infoSolid\"></sme-icon-layer>\r\n </sme-layered-icon>\r\n </ng-container>\r\n <div class=\"sme-arrange-stack-v sme-arrange-line-clamp\">\r\n <span class=\"sme-font-h3 sme-position-flex-auto sme-arrange-ws-wrap\">{{ header }}</span>\r\n <ng-container *ngIf=\"!!subHeader\">\r\n <span class=\"sme-font-body sme-font-family-light sme-position-flex-auto sme-arrange-ellipsis\">{{ subHeader }}</span>\r\n </ng-container>\r\n </div>\r\n <span [style.order]=\"chevronPosition\" *ngIf=\"!chevronInverted\" class=\"sme-icon sme-position-flex-none sme-margin-horizontal-xs\"\r\n [ngClass]=\"{'sme-icon-chevronUpMed': !isExpanded, 'sme-icon-chevronDownMed': isExpanded}\" [style.margin-left]=\"chevronLeftMargin\"\r\n aria-hidden=\"true\"></span>\r\n <span [style.order]=\"chevronPosition\" *ngIf=\"chevronInverted\" class=\"sme-icon sme-position-flex-none sme-margin-horizontal-xs\"\r\n [ngClass]=\"{'sme-icon-chevronUpMed': isExpanded, 'sme-icon-chevronDownMed': !isExpanded}\" [style.margin-left]=\"chevronLeftMargin\"\r\n aria-hidden=\"true\"></span>\r\n <div class=\"sme-screen-reader\" [id]=\"idBag.detailsSpan\"> {{ resourceStrings.AriaDescription }}</div>\r\n </div>\r\n</h3>\r\n\r\n<div class=\"sme-position-flex-auto sme-layout-relative\" [class.sme-margin-horizontal-lg]=\"shouldContentSlim\" [class.sme-position-stretch-v]=\"autoHeight\">\r\n <div [ngClass]=\"{'sme-layout-absolute-phone-up sme-position-inset-none sme-padding-bottom-sm sme-arrange-overflow-auto': !autoHeight, 'sme-layout-relative sme-position-stretch-v': autoHeight}\"\r\n [class.sme-layout-none]=\"!isExpanded\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n<hr *ngIf=\"addBottomBorder\">\r\n" }]
265
296
  }], function () { return [{ type: i0.Injector }, { type: undefined, decorators: [{
266
297
  type: Optional
267
298
  }, {
@@ -274,12 +305,18 @@ __decorate([
274
305
  type: Input
275
306
  }], header: [{
276
307
  type: Input
308
+ }], subHeader: [{
309
+ type: Input
277
310
  }], chevronInverted: [{
278
311
  type: Input
279
312
  }], chevronPosition: [{
280
313
  type: Input
314
+ }], pushChevronFarRight: [{
315
+ type: Input
281
316
  }], addBottomBorder: [{
282
317
  type: Input
318
+ }], showInfoIcon: [{
319
+ type: Input
283
320
  }], autoHeight: [{
284
321
  type: Input
285
322
  }], title: [{
@@ -289,4 +326,4 @@ __decorate([
289
326
  }], isExpandedChange: [{
290
327
  type: Output
291
328
  }], onWindowBreakpointChanged: [], deferredOnLayoutChanged: [], onLayoutChanged: [] }); })();
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9kZXRhaWxzL2RldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZGV0YWlscy9kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUVqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7O0lDWmpGLDBCQUU0Qjs7O0lBRnRCLCtDQUErQjtJQUNuQywyRkFBeUY7OztJQUUzRiwwQkFFNEI7OztJQUZ0QiwrQ0FBK0I7SUFDbkMsMkZBQXlGOzs7SUFhL0YscUJBQTRCOzs7O0FESDVCOzs7Ozs7Ozs7OztHQVdHO0FBRUgsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN2Qiw4QkFBVyxDQUFBO0lBQ1gsOEJBQVcsQ0FBQTtBQUNmLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQjtBQUtELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFnRW5ELFlBQVksUUFBa0IsRUFBMkMsTUFBYztRQUNuRixLQUFL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LEVBQUE7UUFHUixpRUFBNEI7O1FBcEIrQixlQUFzQztRQUF0QyxtREFBc0M7UUFDN0YsaURBQW1DLDJDQUFBO1FBQ21DLGVBQVk7UUFBWixnQ0FBWTtRQUMzQyxlQUFzQjtRQUF0QiwyQ0FBc0I7UUFHdEIsZUFBcUI7UUFBckIsMENBQXFCO1FBRzdCLGVBQXdCO1FBQXhCLDBDQUF3QjtRQUFFLGVBQXFDO1FBQXJDLG1FQUFxQztRQUkxQyxlQUFvRDtRQUFwRCxpRUFBb0QsMENBQUE7UUFFeEcsZUFBcUM7UUFBckMsa0RBQXFDO1FBRGxDLHNGQUEyTDtRQU03TCxlQUFxQjtRQUFyQiwwQ0FBcUI7O0FEcUh0QjtJQUFDLEtBQUssRUFBRTs7OztpRUFHUDtBQUtEO0lBQUMsUUFBUSxFQUFFOzs7OytEQUdWO0FBS0Q7SUFBQyxLQUFLLEVBQUU7Ozs7dURBMkVQO3VGQTlMUSxnQkFBZ0I7Y0FKNUIsU0FBUzsyQkFDSSxhQUFhOztzQkFtRVUsUUFBUTs7c0JBQUksTUFBTTt1QkFBQyxtQkFBbUI7d0JBN0NoRSxRQUFRO2tCQURkLFNBQVM7bUJBQUMsVUFBVTtZQUlkLHVCQUF1QjtrQkFEN0IsS0FBSztZQUlDLE1BQU07a0JBRFosS0FBSztZQUlDLGVBQWU7a0JBRHJCLEtBQUs7WUFJQyxlQUFlO2tCQURyQixLQUFLO1lBSUMsZUFBZTtrQkFEckIsS0FBSztZQU9DLFVBQVU7a0JBRGhCLEtBQUs7WUFPSyxLQUFLO2tCQURmLEtBQUs7WUFVQyxVQUFVO2tCQURoQixLQUFLO1lBSUMsZ0JBQWdCO2tCQUR0QixNQUFNO1lBMkNBLHlCQUF5QixNQVF4Qix1QkFBdUIsTUFRdkIsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5qZWN0LFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGF5b3V0LCBTTUVfTEFZT1VUX1BST1ZJREVSIH0gZnJvbSAnLi4vY29tbW9uL2xheW91dCc7XHJcbmltcG9ydCB7IERldGFpbHNSZXNwb25zaXZlV2luZG93TWFuYWdlciB9IGZyb20gJy4vZGV0YWlscy1yZXNwb25zaXZlLXdpbmRvdy1tYW5hZ2VyJztcclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAc21lRG9jIHtAbGFiZWwgRGV0YWlscyBAaWQgc21lLWRldGFpbHN9XHJcbiAqXHJcbiAqIEBvdmVydmlld1xyXG4gKiBAZmlsZSB7QGZpbGVwYXRoIC4vZXhhbXBsZXMvZGV0YWlscy1vdmVydmlldy5tZH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBCYXNpYyBVc2FnZSBAaWQgYmFzaWMtdXNhZ2V9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RldGFpbHMtZXhhbXBsZS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGV0YWlscy1leGFtcGxlLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKi9cclxuXHJcbmV4cG9ydCBlbnVtIENoZXZyb25Qb3NpdGlvbiB7XHJcbiAgICBMZWZ0ID0gJy0xJyxcclxuICAgIFJpZ2h0ID0gJzAnXHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1kZXRhaWxzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWxzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGV0YWlsc0NvbXBvbmVudCBleHRlbmRzIENvcmVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IG1pbkV4cGFuZGVySGVpZ2h0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRldGFpbHNSZXNwb25zaXZlV2luZG93TWFuYWdlci5taW5FeHBhbmRlckhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNob3VsZENvbnRlbnRTbGltKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRldGFpbHNSZXNwb25zaXZlV2luZG93TWFuYWdlci5zaG91bGRDb250ZW50U2xpbTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnRGV0YWlsc0NvbXBvbmVudCc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VTdHJpbmdzID0gTXNmdFNtZS5nZXRTdHJpbmdzPFN0cmluZ3M+KCkuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRGV0YWlscztcclxuXHJcbiAgICBAVmlld0NoaWxkKCdleHBhbmRlcicpXHJcbiAgICBwdWJsaWMgZXhwYW5kZXI6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpbml0aWFsSGVpZ2h0UGVyY2VudGFnZTogbnVtYmVyO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGVhZGVyOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjaGV2cm9uSW52ZXJ0ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjaGV2cm9uUG9zaXRpb246IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGFkZEJvdHRvbUJvcmRlcjogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkZXRhaWwgY29tcG9uZW50J3MgaGVpZ2h0IHdpbGwgYmUgZGV0ZXJtaW5lZCBvbiB0aGUgd2hvbGUgY2hpbGRyZW4ncyBoZWlnaHQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXV0b0hlaWdodCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgMDIvMjUvMjAxOS4gUGxlYXNlIHVzZSAnaGVhZGVyJyBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmhlYWRlciA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpc0V4cGFuZGVkOiBib29sZWFuO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGlzRXhwYW5kZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBwdWJsaWMgbGF5b3V0Q2hhbmdlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIHByaXZhdGUgZGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyOiBEZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yLCBAT3B0aW9uYWwoKSBASW5qZWN0KFNNRV9MQVlPVVRfUFJPVklERVIpIGxheW91dDogTGF5b3V0KSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbEhlaWdodFBlcmNlbnRhZ2UgPSAzMDtcclxuICAgICAgICBpZiAobGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyID0gbmV3IERldGFpbHNSZXNwb25zaXZlV2luZG93TWFuYWdlcihsYXlvdXQpO1xyXG4gICAgICAgICAgICAvLyBvbiBwYXJlbnQgbGF5b3V0IGNoYW5nZXMsIHJlLWVtaXQgdGhlIGxheW91dCBjaGFuZ2UgdG8gb3VyIGV2ZW50XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGxheW91dC5sYXlvdXRDaGFuZ2VkLnN1YnNjcmliZSgoKCkgPT4gdGhpcy5vbkxheW91dENoYW5nZWQoKSkpKTtcclxuICAgICAgICAgICAgLy8gb24gd2luZG93IGJyZWFrIHBvaW50IGNoYW5nZXMsIGVtaXQgdGhlIGV2ZW50IGFib3V0IGNyaXRpY2FsIGNsYXNzZXMgYW5kIHN0eWxpbmcgdXBkYXRlcyBzaWduYWwuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGxheW91dC53aW5kb3dCcmVha3BvaW50Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbldpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkKCkpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGVmZXJyZWRPbkxheW91dENoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBpZiAoY2hhbmdlcy5pc0V4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVFeHBhbnNpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmlzRXhwYW5kZWQpO1xyXG4gICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvbiB3aW5kb3cgYnJlYWtwb2ludCBjaGFuZ2VkIGhhbmRsZXIuXHJcbiAgICAgKiBBZGRpbmcgeWllbGQgZm9yIGNvbXBvbmVudCB0byBnZXQgRWxlbWVudFJlZiBhZnRlciBpbml0aWFsaXphdGlvbi5cclxuICAgICAqL1xyXG4gICAgQFlpZWxkKClcclxuICAgIHB1YmxpYyBvbldpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMuZGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLm9uV2luZG93U2l6ZUNoYW5nZWQodGhpcy5ob3N0RWxlbWVudD8ubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGVmZXJyZWQgbGF5b3V0IGNoYW5nZWQgaGFuZGxlci5cclxuICAgICAqL1xyXG4gICAgQERlYm91bmNlKClcclxuICAgIHByaXZhdGUgZGVmZXJyZWRPbkxheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsYXlvdXQgY2hhbmdlZCBldmVudCBoYW5kbGVyLlxyXG4gICAgICovXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHJpdmF0ZSBvbkxheW91dENoYW5nZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhvc3RFbGVtZW50IHx8ICF0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXhwYW5kZXJPZmZzZXRIZWlnaHQgPSBNc2Z0U21lLmdldFZhbHVlPG51bWJlcj4odGhpcy5leHBhbmRlciwgJ25hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0JykgfHwgMDtcclxuICAgICAgICBjb25zdCBleHBhbmRlckhlaWdodCA9IGV4cGFuZGVyT2Zmc2V0SGVpZ2h0ID4gMCA/IGB7MH1weGAuZm9ybWF0KGV4cGFuZGVyT2Zmc2V0SGVpZ2h0KSA6IHRoaXMubWluRXhwYW5kZXJIZWlnaHQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGV4cGFuZGVySGVpZ2h0O1xyXG4gICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwb3RlbnRpYWxIZWlnaHQgPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50Lm9mZnNldEhlaWdodCB8fCAwO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudE9mZnNldFRvcCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQub2Zmc2V0VG9wIHx8IDA7XHJcbiAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRldGFpbENvbnRlbnRIZWlnaHQgPSB0aGlzLmRldGFpbHNSZXNwb25zaXZlV2luZG93TWFuYWdlci5kZXRhaWxDb250ZW50SGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyBFbmZvcmNlcyBhIG1heCBoZWlnaHQgd2hlbiBzZXR0aW5nIHRoZSBkZWZhdWx0IGhlaWdodC5cclxuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBkZXRhaWxDb250ZW50SGVpZ2h0Lm1heDtcclxuICAgICAgICBjb25zdCBtaW5IZWlnaHQgPSBkZXRhaWxDb250ZW50SGVpZ2h0Lm1pbjtcclxuICAgICAgICBjb25zdCBwaG9uZURvd24gPSBkZXRhaWxDb250ZW50SGVpZ2h0LnBob25lRG93bjtcclxuXHJcbiAgICAgICAgLy8gT24gc21hbGwgd2luZG93IGhlaWdodCwgdGhlIGRldGFpbCBwYW5lIGhlaWdodCB3b3VsZCBiZSB0aGUgc21hbGxlciB2YWx1ZSBbd2luZG93IGhlaWdodCAqIDAuNiwgbWF4SGVpZ2h0XVxyXG4gICAgICAgIGlmIChwaG9uZURvd24pIHtcclxuICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5taW4odG90YWxIZWlnaHQgLSBwYXJlbnRPZmZzZXRUb3AsIHBvdGVudGlhbEhlaWdodCk7XHJcbiAgICAgICAgICAgIC8vIFByZXZlbnRzIHRoZSBpbml0aWFsIHNpemUgZXhjZWVkIG1heCBoZWlnaHRcclxuICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5taW4ocG90ZW50aWFsSGVpZ2h0LCBtYXhIZWlnaHQpO1xyXG4gICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLm1heChwb3RlbnRpYWxIZWlnaHQsIG1pbkhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgICAgICAgICBpZiAocG9ydEhlaWdodCA8IG1pbkhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gbWluSGVpZ2h0O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcnRIZWlnaHQgPiBtaW5IZWlnaHQgJiYgcG9ydEhlaWdodCA8IG1heEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgLy8gTWF0aC5jZWlsIGNhbiBtYWtlIGNhbGN1bGF0aW9uIHdpdGhvdXQgcm91bmRpbmcgaXNzdWVzLlxyXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5jZWlsKHBvcnRIZWlnaHQgKiAwLjYpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcnRIZWlnaHQgPiBtYXhIZWlnaHQgJiYgcG9ydEhlaWdodCAqIDAuNCA+IG1heEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5jZWlsKG1heEhlaWdodCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9ydEhlaWdodCA+IG1heEhlaWdodCAmJiBwb3J0SGVpZ2h0ICogMC40ID4gbWluSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLmNlaWwocG9ydEhlaWdodCAqIDAuNCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBTaHJpbmsgb25seSBpZiBleGNlZWRzIHBhcmVudHMgb2Zmc2V0IGhlaWdodDtcclxuICAgICAgICAgICAgaWYgKHBvdGVudGlhbEhlaWdodCA+IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQub2Zmc2V0SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgaW5pdGlhbCBleHBhbmRlZCBoZWlnaHQgdG8gMzB2aC5cclxuICAgICAgICAgICAgICAgIC8vIFBvb3IgZGVzaWduIHRoYXQgbmVlZHMgdG8gcmUtdmlzaXQuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbmVWaCA9IHRvdGFsSGVpZ2h0IC8gMTAwO1xyXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gb25lVmggKiB0aGlzLmluaXRpYWxIZWlnaHRQZXJjZW50YWdlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gc21lLWJvcmRlci10b3Atc20gb24gdGhlIGRldGFpbHMgcmVzaXplciBib3JkZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBtaW51cyB0aGUgYm9yZGVyIGhlaWdodCB0byBnZXQgcmlkIG9mIHRoZSBleHRyYSBzY3JvbGwgYmFyLlxyXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0IC09IDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBvdGVudGlhbEhlaWdodCA9IE1hdGgubWluKHBvdGVudGlhbEhlaWdodCwgbWF4SGVpZ2h0KTtcclxuICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5tYXgocG90ZW50aWFsSGVpZ2h0LCBtaW5IZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLm1pbkhlaWdodCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9IZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgezB9cHhgLmZvcm1hdChwb3RlbnRpYWxIZWlnaHQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhlIGhlaWdodCB3b3VsZCBiZSBjaGFuZ2VkIG9uIHdpbmRvdyBoZWlnaHQgb3Igd2lkdGggY2hhbmdlXHJcbiAgICAgICAgICAgIC8vIHJlLWNhbGN1bGF0ZSB0aGUgcG90ZW50aWFsIGhlaWdodCBzaG91bGQgYmUgbm90aWZ5aW5nIHBhcmVudHMuXHJcbiAgICAgICAgICAgIHRoaXMubGF5b3V0Q2hhbmdlZC5lbWl0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldEluaXRpYWxIb3N0Q2xhc3NlcygpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkuY29uY2F0KFtcclxuICAgICAgICAgICAgJ3NtZS1hcnJhbmdlLXN0YWNrLXYnXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuIiwiPGgzPlxyXG4gIDxkaXYgI2V4cGFuZGVyXHJcbiAgICBjbGFzcz1cInNtZS1idXR0b24gc21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1wYWRkaW5nLXNxdWlzaC12LW1kIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtcG9zaXRpb24tbGVmdC1pbmxpbmUgc21lLWFycmFuZ2Utc3RhY2staCBzbWUtZm9jdXMtem9uZVwiXHJcbiAgICByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cInRvZ2dsZUV4cGFuc2lvbigpXCIgW3N0eWxlLm1pbi1oZWlnaHRdPVwibWluRXhwYW5kZXJIZWlnaHRcIlxyXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhIWlzRXhwYW5kZWRcIiBbYXR0ci5hcmlhLWRlc2NyaWJlZEJ5XT1cImlkQmFnLmRldGFpbHNTcGFuXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cInNtZS1mb250LWgzIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWFycmFuZ2UtZWxsaXBzaXNcIj57eyBoZWFkZXIgfX08L3NwYW4+XHJcbiAgICA8c3BhbiBbc3R5bGUub3JkZXJdPVwiY2hldnJvblBvc2l0aW9uXCIgKm5nSWY9XCIhY2hldnJvbkludmVydGVkXCIgY2xhc3M9XCJzbWUtaWNvbiBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1tYXJnaW4taG9yaXpvbnRhbC14c1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnc21lLWljb24tY2hldnJvblVwTWVkJzogIWlzRXhwYW5kZWQsICdzbWUtaWNvbi1jaGV2cm9uRG93bk1lZCc6IGlzRXhwYW5kZWR9XCJcclxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgPHNwYW4gW3N0eWxlLm9yZGVyXT1cImNoZXZyb25Qb3NpdGlvblwiICpuZ0lmPVwiY2hldnJvbkludmVydGVkXCIgY2xhc3M9XCJzbWUtaWNvbiBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1tYXJnaW4taG9yaXpvbnRhbC14c1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnc21lLWljb24tY2hldnJvblVwTWVkJzogaXNFeHBhbmRlZCwgJ3NtZS1pY29uLWNoZXZyb25Eb3duTWVkJzogIWlzRXhwYW5kZWR9XCJcclxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCIgW2lkXT1cImlkQmFnLmRldGFpbHNTcGFuXCI+IHt7IHJlc291cmNlU3RyaW5ncy5BcmlhRGVzY3JpcHRpb24gfX08L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9oMz5cclxuXHJcbjxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1sYXlvdXQtcmVsYXRpdmVcIiBbY2xhc3Muc21lLW1hcmdpbi1ob3Jpem9udGFsLWxnXT1cInNob3VsZENvbnRlbnRTbGltXCIgW2NsYXNzLnNtZS1wb3NpdGlvbi1zdHJldGNoLXZdPVwiYXV0b0hlaWdodFwiPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieydzbWUtbGF5b3V0LWFic29sdXRlLXBob25lLXVwIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lIHNtZS1wYWRkaW5nLWJvdHRvbS1zbSBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvJzogIWF1dG9IZWlnaHQsICdzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1wb3NpdGlvbi1zdHJldGNoLXYnOiBhdXRvSGVpZ2h0fVwiXHJcbiAgICBbY2xhc3Muc21lLWxheW91dC1ub25lXT1cIiFpc0V4cGFuZGVkXCI+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGhyICpuZ0lmPVwiYWRkQm90dG9tQm9yZGVyXCI+XHJcbiJdfQ==
329
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9kZXRhaWxzL2RldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZGV0YWlscy9kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUVqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7OztJQ2JqRiw2QkFBbUM7SUFDakMsMkNBQTJEO0lBQ3pELHFDQUFxRTtJQUN2RSxpQkFBbUI7SUFDckIsMEJBQWU7OztJQUdiLDZCQUFrQztJQUNoQyxnQ0FBOEY7SUFBQSxZQUFlO0lBQUEsaUJBQU87SUFDdEgsMEJBQWU7OztJQURpRixlQUFlO0lBQWYsc0NBQWU7Ozs7SUFHakgsMkJBRTRCOzs7SUFGdEIsK0NBQStCLHlDQUFBO0lBQ25DLDJGQUF5Rjs7O0lBRTNGLDJCQUU0Qjs7O0lBRnRCLCtDQUErQix5Q0FBQTtJQUNuQywyRkFBeUY7OztJQWEvRixxQkFBNEI7Ozs7QURiNUI7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxNQUFNLENBQU4sSUFB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QkFEN0IsS0FBSztZQUlDLE1BQU07a0JBRFosS0FBSztZQUlDLFNBQVM7a0JBRGYsS0FBSztZQUlDLGVBQWU7a0JBRHJCLEtBQUs7WUFJQyxlQUFlO2tCQURyQixLQUFLO1lBSUssbUJBQW1CO2tCQUQ3QixLQUFLO1lBTUMsZUFBZTtrQkFEckIsS0FBSztZQUlDLFlBQVk7a0JBRGxCLEtBQUs7WUFNQyxVQUFVO2tCQURoQixLQUFLO1lBT0ssS0FBSztrQkFEZixLQUFLO1lBVUMsVUFBVTtrQkFEaEIsS0FBSztZQUlDLGdCQUFnQjtrQkFEdEIsTUFBTTtZQTZDQSx5QkFBeUIsTUFReEIsdUJBQXVCLE1BUXZCLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEluamVjdCxcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy9kZWJvdW5jZS5kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgWWllbGQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy95aWVsZC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBDb3JlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dCwgU01FX0xBWU9VVF9QUk9WSURFUiB9IGZyb20gJy4uL2NvbW1vbi9sYXlvdXQnO1xyXG5pbXBvcnQgeyBEZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIgfSBmcm9tICcuL2RldGFpbHMtcmVzcG9uc2l2ZS13aW5kb3ctbWFuYWdlcic7XHJcblxyXG4vKipcclxuICpcclxuICogQHNtZURvYyB7QGxhYmVsIERldGFpbHMgQGlkIHNtZS1kZXRhaWxzfVxyXG4gKlxyXG4gKiBAb3ZlcnZpZXdcclxuICogQGZpbGUge0BmaWxlcGF0aCAuL2V4YW1wbGVzL2RldGFpbHMtb3ZlcnZpZXcubWR9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgQmFzaWMgVXNhZ2UgQGlkIGJhc2ljLXVzYWdlfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9kZXRhaWxzLWV4YW1wbGUuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RldGFpbHMtZXhhbXBsZS5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICovXHJcblxyXG5leHBvcnQgZW51bSBDaGV2cm9uUG9zaXRpb24ge1xyXG4gICAgTGVmdCA9ICctMScsXHJcbiAgICBSaWdodCA9ICcwJ1xyXG59XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZGV0YWlscycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGV0YWlscy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERldGFpbHNDb21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcblxyXG4gICAgcHVibGljIGdldCBtaW5FeHBhbmRlckhlaWdodCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIubWluRXhwYW5kZXJIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG91bGRDb250ZW50U2xpbSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIuc2hvdWxkQ29udGVudFNsaW07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0RldGFpbHNDb21wb25lbnQnO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlc291cmNlU3RyaW5ncyA9IE1zZnRTbWUuZ2V0U3RyaW5nczxTdHJpbmdzPigpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkRldGFpbHM7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZXhwYW5kZXInKVxyXG4gICAgcHVibGljIGV4cGFuZGVyOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaW5pdGlhbEhlaWdodFBlcmNlbnRhZ2U6IG51bWJlcjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhlYWRlcjogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc3ViSGVhZGVyOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjaGV2cm9uSW52ZXJ0ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjaGV2cm9uUG9zaXRpb246IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBwdXNoQ2hldnJvbkZhclJpZ2h0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5jaGV2cm9uTGVmdE1hcmdpbiA9IHZhbHVlID8gJ2F1dG8nIDogdGhpcy5jaGV2cm9uTGVmdE1hcmdpbjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGFkZEJvdHRvbUJvcmRlcjogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dJbmZvSWNvbjogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRldGFpbCBjb21wb25lbnQncyBoZWlnaHQgd2lsbCBiZSBkZXRlcm1pbmVkIG9uIHRoZSB3aG9sZSBjaGlsZHJlbidzIGhlaWdodC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhdXRvSGVpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSAwMi8yNS8yMDE5LiBQbGVhc2UgdXNlICdoZWFkZXInIGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaGVhZGVyID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlcjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlzRXhwYW5kZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgaXNFeHBhbmRlZENoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAgIHB1YmxpYyBsYXlvdXRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHVibGljIGNoZXZyb25MZWZ0TWFyZ2luID0gJzAnO1xyXG5cclxuICAgIHByaXZhdGUgZGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyOiBEZXRhaWxzUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yLCBAT3B0aW9uYWwoKSBASW5qZWN0KFNNRV9MQVlPVVRfUFJPVklERVIpIGxheW91dDogTGF5b3V0KSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbEhlaWdodFBlcmNlbnRhZ2UgPSAzMDtcclxuICAgICAgICBpZiAobGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyID0gbmV3IERldGFpbHNSZXNwb25zaXZlV2luZG93TWFuYWdlcihsYXlvdXQpO1xyXG4gICAgICAgICAgICAvLyBvbiBwYXJlbnQgbGF5b3V0IGNoYW5nZXMsIHJlLWVtaXQgdGhlIGxheW91dCBjaGFuZ2UgdG8gb3VyIGV2ZW50XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGxheW91dC5sYXlvdXRDaGFuZ2VkLnN1YnNjcmliZSgoKCkgPT4gdGhpcy5vbkxheW91dENoYW5nZWQoKSkpKTtcclxuICAgICAgICAgICAgLy8gb24gd2luZG93IGJyZWFrIHBvaW50IGNoYW5nZXMsIGVtaXQgdGhlIGV2ZW50IGFib3V0IGNyaXRpY2FsIGNsYXNzZXMgYW5kIHN0eWxpbmcgdXBkYXRlcyBzaWduYWwuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGxheW91dC53aW5kb3dCcmVha3BvaW50Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbldpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkKCkpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGVmZXJyZWRPbkxheW91dENoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBpZiAoY2hhbmdlcy5pc0V4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVFeHBhbnNpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmlzRXhwYW5kZWQpO1xyXG4gICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvbiB3aW5kb3cgYnJlYWtwb2ludCBjaGFuZ2VkIGhhbmRsZXIuXHJcbiAgICAgKiBBZGRpbmcgeWllbGQgZm9yIGNvbXBvbmVudCB0byBnZXQgRWxlbWVudFJlZiBhZnRlciBpbml0aWFsaXphdGlvbi5cclxuICAgICAqL1xyXG4gICAgQFlpZWxkKClcclxuICAgIHB1YmxpYyBvbldpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMuZGV0YWlsc1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLm9uV2luZG93U2l6ZUNoYW5nZWQodGhpcy5ob3N0RWxlbWVudD8ubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGVmZXJyZWQgbGF5b3V0IGNoYW5nZWQgaGFuZGxlci5cclxuICAgICAqL1xyXG4gICAgQERlYm91bmNlKClcclxuICAgIHByaXZhdGUgZGVmZXJyZWRPbkxheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsYXlvdXQgY2hhbmdlZCBldmVudCBoYW5kbGVyLlxyXG4gICAgICovXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHJpdmF0ZSBvbkxheW91dENoYW5nZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhvc3RFbGVtZW50IHx8ICF0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXhwYW5kZXJPZmZzZXRIZWlnaHQgPSBNc2Z0U21lLmdldFZhbHVlPG51bWJlcj4odGhpcy5leHBhbmRlciwgJ25hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0JykgfHwgMDtcclxuICAgICAgICBjb25zdCBleHBhbmRlckhlaWdodCA9IGV4cGFuZGVyT2Zmc2V0SGVpZ2h0ID4gMCA/IGB7MH1weGAuZm9ybWF0KGV4cGFuZGVyT2Zmc2V0SGVpZ2h0KSA6IHRoaXMubWluRXhwYW5kZXJIZWlnaHQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGV4cGFuZGVySGVpZ2h0O1xyXG4gICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwb3RlbnRpYWxIZWlnaHQgPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50Lm9mZnNldEhlaWdodCB8fCAwO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudE9mZnNldFRvcCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQub2Zmc2V0VG9wIHx8IDA7XHJcbiAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRldGFpbENvbnRlbnRIZWlnaHQgPSB0aGlzLmRldGFpbHNSZXNwb25zaXZlV2luZG93TWFuYWdlci5kZXRhaWxDb250ZW50SGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyBFbmZvcmNlcyBhIG1heCBoZWlnaHQgd2hlbiBzZXR0aW5nIHRoZSBkZWZhdWx0IGhlaWdodC5cclxuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBkZXRhaWxDb250ZW50SGVpZ2h0Lm1heDtcclxuICAgICAgICBjb25zdCBtaW5IZWlnaHQgPSBkZXRhaWxDb250ZW50SGVpZ2h0Lm1pbjtcclxuICAgICAgICBjb25zdCBwaG9uZURvd24gPSBkZXRhaWxDb250ZW50SGVpZ2h0LnBob25lRG93bjtcclxuXHJcbiAgICAgICAgLy8gT24gc21hbGwgd2luZG93IGhlaWdodCwgdGhlIGRldGFpbCBwYW5lIGhlaWdodCB3b3VsZCBiZSB0aGUgc21hbGxlciB2YWx1ZSBbd2luZG93IGhlaWdodCAqIDAuNiwgbWF4SGVpZ2h0XVxyXG4gICAgICAgIGlmIChwaG9uZURvd24pIHtcclxuICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5taW4odG90YWxIZWlnaHQgLSBwYXJlbnRPZmZzZXRUb3AsIHBvdGVudGlhbEhlaWdodCk7XHJcbiAgICAgICAgICAgIC8vIFByZXZlbnRzIHRoZSBpbml0aWFsIHNpemUgZXhjZWVkIG1heCBoZWlnaHRcclxuICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5taW4ocG90ZW50aWFsSGVpZ2h0LCBtYXhIZWlnaHQpO1xyXG4gICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLm1heChwb3RlbnRpYWxIZWlnaHQsIG1pbkhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgICAgICAgICBpZiAocG9ydEhlaWdodCA8IG1pbkhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gbWluSGVpZ2h0O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcnRIZWlnaHQgPiBtaW5IZWlnaHQgJiYgcG9ydEhlaWdodCA8IG1heEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgLy8gTWF0aC5jZWlsIGNhbiBtYWtlIGNhbGN1bGF0aW9uIHdpdGhvdXQgcm91bmRpbmcgaXNzdWVzLlxyXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5jZWlsKHBvcnRIZWlnaHQgKiAwLjYpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcnRIZWlnaHQgPiBtYXhIZWlnaHQgJiYgcG9ydEhlaWdodCAqIDAuNCA+IG1heEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5jZWlsKG1heEhlaWdodCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9ydEhlaWdodCA+IG1heEhlaWdodCAmJiBwb3J0SGVpZ2h0ICogMC40ID4gbWluSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxIZWlnaHQgPSBNYXRoLmNlaWwocG9ydEhlaWdodCAqIDAuNCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBTaHJpbmsgb25seSBpZiBleGNlZWRzIHBhcmVudHMgb2Zmc2V0IGhlaWdodDtcclxuICAgICAgICAgICAgaWYgKHBvdGVudGlhbEhlaWdodCA+IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQub2Zmc2V0SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgaW5pdGlhbCBleHBhbmRlZCBoZWlnaHQgdG8gMzB2aC5cclxuICAgICAgICAgICAgICAgIC8vIFBvb3IgZGVzaWduIHRoYXQgbmVlZHMgdG8gcmUtdmlzaXQuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbmVWaCA9IHRvdGFsSGVpZ2h0IC8gMTAwO1xyXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gb25lVmggKiB0aGlzLmluaXRpYWxIZWlnaHRQZXJjZW50YWdlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gc21lLWJvcmRlci10b3Atc20gb24gdGhlIGRldGFpbHMgcmVzaXplciBib3JkZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBtaW51cyB0aGUgYm9yZGVyIGhlaWdodCB0byBnZXQgcmlkIG9mIHRoZSBleHRyYSBzY3JvbGwgYmFyLlxyXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0IC09IDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBvdGVudGlhbEhlaWdodCA9IE1hdGgubWluKHBvdGVudGlhbEhlaWdodCwgbWF4SGVpZ2h0KTtcclxuICAgICAgICAgICAgcG90ZW50aWFsSGVpZ2h0ID0gTWF0aC5tYXgocG90ZW50aWFsSGVpZ2h0LCBtaW5IZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLm1pbkhlaWdodCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9IZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgezB9cHhgLmZvcm1hdChwb3RlbnRpYWxIZWlnaHQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhlIGhlaWdodCB3b3VsZCBiZSBjaGFuZ2VkIG9uIHdpbmRvdyBoZWlnaHQgb3Igd2lkdGggY2hhbmdlXHJcbiAgICAgICAgICAgIC8vIHJlLWNhbGN1bGF0ZSB0aGUgcG90ZW50aWFsIGhlaWdodCBzaG91bGQgYmUgbm90aWZ5aW5nIHBhcmVudHMuXHJcbiAgICAgICAgICAgIHRoaXMubGF5b3V0Q2hhbmdlZC5lbWl0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldEluaXRpYWxIb3N0Q2xhc3NlcygpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkuY29uY2F0KFtcclxuICAgICAgICAgICAgJ3NtZS1hcnJhbmdlLXN0YWNrLXYnXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuIiwiPGgzPlxyXG4gIDxkaXYgI2V4cGFuZGVyXHJcbiAgICBjbGFzcz1cInNtZS1idXR0b24gc21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1wYWRkaW5nLXNxdWlzaC12LW1kIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtcG9zaXRpb24tbGVmdC1pbmxpbmUgc21lLWFycmFuZ2Utc3RhY2staCBzbWUtZm9jdXMtem9uZVwiXHJcbiAgICByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cInRvZ2dsZUV4cGFuc2lvbigpXCIgW3N0eWxlLm1pbi1oZWlnaHRdPVwibWluRXhwYW5kZXJIZWlnaHRcIlxyXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhIWlzRXhwYW5kZWRcIiBbYXR0ci5hcmlhLWRlc2NyaWJlZEJ5XT1cImlkQmFnLmRldGFpbHNTcGFuXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0luZm9JY29uXCI+XHJcbiAgICAgIDxzbWUtbGF5ZXJlZC1pY29uIHNpemU9XCIxNnB4XCIgY2xhc3M9XCJzbWUtbWFyZ2luLWluc2V0LXh4c1wiPlxyXG4gICAgICAgIDxzbWUtaWNvbi1sYXllciBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWluZm9Tb2xpZFwiPjwvc21lLWljb24tbGF5ZXI+XHJcbiAgICAgIDwvc21lLWxheWVyZWQtaWNvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLXYgc21lLWFycmFuZ2UtbGluZS1jbGFtcFwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInNtZS1mb250LWgzIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWFycmFuZ2Utd3Mtd3JhcFwiPnt7IGhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhc3ViSGVhZGVyXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtZm9udC1ib2R5IHNtZS1mb250LWZhbWlseS1saWdodCBzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1hcnJhbmdlLWVsbGlwc2lzXCI+e3sgc3ViSGVhZGVyIH19PC9zcGFuPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNwYW4gW3N0eWxlLm9yZGVyXT1cImNoZXZyb25Qb3NpdGlvblwiICpuZ0lmPVwiIWNoZXZyb25JbnZlcnRlZFwiIGNsYXNzPVwic21lLWljb24gc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtbWFyZ2luLWhvcml6b250YWwteHNcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NtZS1pY29uLWNoZXZyb25VcE1lZCc6ICFpc0V4cGFuZGVkLCAnc21lLWljb24tY2hldnJvbkRvd25NZWQnOiBpc0V4cGFuZGVkfVwiIFtzdHlsZS5tYXJnaW4tbGVmdF09XCJjaGV2cm9uTGVmdE1hcmdpblwiXHJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgIDxzcGFuIFtzdHlsZS5vcmRlcl09XCJjaGV2cm9uUG9zaXRpb25cIiAqbmdJZj1cImNoZXZyb25JbnZlcnRlZFwiIGNsYXNzPVwic21lLWljb24gc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtbWFyZ2luLWhvcml6b250YWwteHNcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NtZS1pY29uLWNoZXZyb25VcE1lZCc6IGlzRXhwYW5kZWQsICdzbWUtaWNvbi1jaGV2cm9uRG93bk1lZCc6ICFpc0V4cGFuZGVkfVwiIFtzdHlsZS5tYXJnaW4tbGVmdF09XCJjaGV2cm9uTGVmdE1hcmdpblwiXHJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIFtpZF09XCJpZEJhZy5kZXRhaWxzU3BhblwiPiB7eyByZXNvdXJjZVN0cmluZ3MuQXJpYURlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvaDM+XHJcblxyXG48ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtbGF5b3V0LXJlbGF0aXZlXCIgW2NsYXNzLnNtZS1tYXJnaW4taG9yaXpvbnRhbC1sZ109XCJzaG91bGRDb250ZW50U2xpbVwiIFtjbGFzcy5zbWUtcG9zaXRpb24tc3RyZXRjaC12XT1cImF1dG9IZWlnaHRcIj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnc21lLWxheW91dC1hYnNvbHV0ZS1waG9uZS11cCBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtcGFkZGluZy1ib3R0b20tc20gc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0byc6ICFhdXRvSGVpZ2h0LCAnc21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tc3RyZXRjaC12JzogYXV0b0hlaWdodH1cIlxyXG4gICAgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCIhaXNFeHBhbmRlZFwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxociAqbmdJZj1cImFkZEJvdHRvbUJvcmRlclwiPlxyXG4iXX0=
@@ -1,5 +1,6 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { NgModule } from '@angular/core';
3
+ import { IconModule } from '../icon';
3
4
  import { TooltipModule } from '../tooltip/tooltip.module';
4
5
  import { DetailsComponent } from './details.component';
5
6
  import * as i0 from "@angular/core";
@@ -8,6 +9,7 @@ export class DetailsModule {
8
9
  /** @nocollapse */ DetailsModule.ɵfac = function DetailsModule_Factory(t) { return new (t || DetailsModule)(); };
9
10
  /** @nocollapse */ DetailsModule.ɵmod = /** @pureOrBreakMyCode */ i0.ɵɵdefineNgModule({ type: DetailsModule });
10
11
  /** @nocollapse */ DetailsModule.ɵinj = /** @pureOrBreakMyCode */ i0.ɵɵdefineInjector({ imports: [CommonModule,
12
+ IconModule,
11
13
  TooltipModule] });
12
14
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DetailsModule, [{
13
15
  type: NgModule,
@@ -16,10 +18,12 @@ export class DetailsModule {
16
18
  exports: [DetailsComponent],
17
19
  imports: [
18
20
  CommonModule,
21
+ IconModule,
19
22
  TooltipModule
20
23
  ]
21
24
  }]
22
25
  }], null, null); })();
23
26
  (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(DetailsModule, { declarations: [DetailsComponent], imports: [CommonModule,
27
+ IconModule,
24
28
  TooltipModule], exports: [DetailsComponent] }); })();
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlscy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9kZXRhaWxzL2RldGFpbHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFVdkQsTUFBTSxPQUFPLGFBQWE7OzZGQUFiLGFBQWE7OEZBQWIsYUFBYTtrR0FKbEIsWUFBWTtRQUNaLGFBQWE7dUZBR1IsYUFBYTtjQVJ6QixRQUFRO2VBQUM7Z0JBQ04sWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2hDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2dCQUMzQixPQUFPLEVBQUU7b0JBQ0wsWUFBWTtvQkFDWixhQUFhO2lCQUNoQjthQUNKOzt3RkFDWSxhQUFhLG1CQVBQLGdCQUFnQixhQUczQixZQUFZO1FBQ1osYUFBYSxhQUhQLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICcuLi90b29sdGlwL3Rvb2x0aXAubW9kdWxlJztcclxuaW1wb3J0IHsgRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4vZGV0YWlscy5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW0RldGFpbHNDb21wb25lbnRdLFxyXG4gICAgZXhwb3J0czogW0RldGFpbHNDb21wb25lbnRdLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBUb29sdGlwTW9kdWxlXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZXRhaWxzTW9kdWxlIHsgfVxyXG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlscy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9kZXRhaWxzL2RldGFpbHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQVd2RCxNQUFNLE9BQU8sYUFBYTs7NkZBQWIsYUFBYTs4RkFBYixhQUFhO2tHQUxsQixZQUFZO1FBQ1osVUFBVTtRQUNWLGFBQWE7dUZBR1IsYUFBYTtjQVR6QixRQUFRO2VBQUM7Z0JBQ04sWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2hDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2dCQUMzQixPQUFPLEVBQUU7b0JBQ0wsWUFBWTtvQkFDWixVQUFVO29CQUNWLGFBQWE7aUJBQ2hCO2FBQ0o7O3dGQUNZLGFBQWEsbUJBUlAsZ0JBQWdCLGFBRzNCLFlBQVk7UUFDWixVQUFVO1FBQ1YsYUFBYSxhQUpQLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEljb25Nb2R1bGUgfSBmcm9tICcuLi9pY29uJztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcC5tb2R1bGUnO1xyXG5pbXBvcnQgeyBEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi9kZXRhaWxzLmNvbXBvbmVudCc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZGVjbGFyYXRpb25zOiBbRGV0YWlsc0NvbXBvbmVudF0sXHJcbiAgICBleHBvcnRzOiBbRGV0YWlsc0NvbXBvbmVudF0sXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIEljb25Nb2R1bGUsXHJcbiAgICAgICAgVG9vbHRpcE1vZHVsZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGV0YWlsc01vZHVsZSB7IH1cclxuIl19
@@ -10,9 +10,9 @@ import * as i2 from "@angular/common";
10
10
  import * as i3 from "../tooltip/tooltip.directive";
11
11
  const _c0 = ["*"];
12
12
  function DialogComponent_sme_backdrop_0_button_2_Template(rf, ctx) { if (rf & 1) {
13
- const _r5 = i0.ɵɵgetCurrentView();
13
+ const _r6 = i0.ɵɵgetCurrentView();
14
14
  i0.ɵɵelementStart(0, "button", 8);
15
- i0.ɵɵlistener("click", function DialogComponent_sme_backdrop_0_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r4.onCloseClicked()); });
15
+ i0.ɵɵlistener("click", function DialogComponent_sme_backdrop_0_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r5 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r5.onCloseClicked()); });
16
16
  i0.ɵɵelement(1, "span", 9);
17
17
  i0.ɵɵelementEnd();
18
18
  } if (rf & 2) {
@@ -20,30 +20,35 @@ function DialogComponent_sme_backdrop_0_button_2_Template(rf, ctx) { if (rf & 1)
20
20
  i0.ɵɵproperty("title", ctx_r1.strings.MsftSmeShell.Angular.Common.close);
21
21
  i0.ɵɵattribute("aria-label", ctx_r1.strings.MsftSmeShell.Angular.Common.close);
22
22
  } }
23
- function DialogComponent_sme_backdrop_0_span_9_Template(rf, ctx) { if (rf & 1) {
24
- i0.ɵɵelementStart(0, "span", 10);
23
+ function DialogComponent_sme_backdrop_0_div_7_Template(rf, ctx) { if (rf & 1) {
24
+ i0.ɵɵelementStart(0, "div", 10);
25
+ i0.ɵɵprojection(1, 2);
26
+ i0.ɵɵelementEnd();
27
+ } }
28
+ function DialogComponent_sme_backdrop_0_span_8_Template(rf, ctx) { if (rf & 1) {
29
+ i0.ɵɵelementStart(0, "span", 11);
25
30
  i0.ɵɵtext(1);
26
31
  i0.ɵɵelementEnd();
27
32
  } if (rf & 2) {
28
- const ctx_r2 = i0.ɵɵnextContext(2);
29
- i0.ɵɵproperty("id", ctx_r2.idBag.ariaLabelSpan);
33
+ const ctx_r3 = i0.ɵɵnextContext(2);
34
+ i0.ɵɵproperty("id", ctx_r3.idBag.ariaLabelSpan);
30
35
  i0.ɵɵadvance(1);
31
- i0.ɵɵtextInterpolate(ctx_r2.ariaLabel);
36
+ i0.ɵɵtextInterpolate(ctx_r3.ariaLabel);
32
37
  } }
33
- function DialogComponent_sme_backdrop_0_span_10_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelementStart(0, "span", 10);
38
+ function DialogComponent_sme_backdrop_0_span_9_Template(rf, ctx) { if (rf & 1) {
39
+ i0.ɵɵelementStart(0, "span", 11);
35
40
  i0.ɵɵtext(1);
36
41
  i0.ɵɵelementEnd();
37
42
  } if (rf & 2) {
38
- const ctx_r3 = i0.ɵɵnextContext(2);
39
- i0.ɵɵproperty("id", ctx_r3.idBag.ariaDescriptionSpan);
43
+ const ctx_r4 = i0.ɵɵnextContext(2);
44
+ i0.ɵɵproperty("id", ctx_r4.idBag.ariaDescriptionSpan);
40
45
  i0.ɵɵadvance(1);
41
- i0.ɵɵtextInterpolate(ctx_r3.ariaDescription);
46
+ i0.ɵɵtextInterpolate(ctx_r4.ariaDescription);
42
47
  } }
43
48
  function DialogComponent_sme_backdrop_0_Template(rf, ctx) { if (rf & 1) {
44
- const _r7 = i0.ɵɵgetCurrentView();
49
+ const _r8 = i0.ɵɵgetCurrentView();
45
50
  i0.ɵɵelementStart(0, "sme-backdrop", 1);
46
- i0.ɵɵlistener("clicked", function DialogComponent_sme_backdrop_0_Template_sme_backdrop_clicked_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(!!ctx_r6.clickBackdrop ? ctx_r6.onBackgroundClicked() : ""); });
51
+ i0.ɵɵlistener("clicked", function DialogComponent_sme_backdrop_0_Template_sme_backdrop_clicked_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(!!ctx_r7.clickBackdrop ? ctx_r7.onBackgroundClicked() : ""); });
47
52
  i0.ɵɵelementStart(1, "div", 2);
48
53
  i0.ɵɵtemplate(2, DialogComponent_sme_backdrop_0_button_2_Template, 2, 2, "button", 3);
49
54
  i0.ɵɵelementStart(3, "div", 4);
@@ -52,11 +57,10 @@ function DialogComponent_sme_backdrop_0_Template(rf, ctx) { if (rf & 1) {
52
57
  i0.ɵɵelementStart(5, "div", 5);
53
58
  i0.ɵɵprojection(6, 1);
54
59
  i0.ɵɵelementEnd();
55
- i0.ɵɵelementStart(7, "div", 6);
56
- i0.ɵɵprojection(8, 2);
57
- i0.ɵɵelementEnd()();
60
+ i0.ɵɵtemplate(7, DialogComponent_sme_backdrop_0_div_7_Template, 2, 0, "div", 6);
61
+ i0.ɵɵelementEnd();
62
+ i0.ɵɵtemplate(8, DialogComponent_sme_backdrop_0_span_8_Template, 2, 2, "span", 7);
58
63
  i0.ɵɵtemplate(9, DialogComponent_sme_backdrop_0_span_9_Template, 2, 2, "span", 7);
59
- i0.ɵɵtemplate(10, DialogComponent_sme_backdrop_0_span_10_Template, 2, 2, "span", 7);
60
64
  i0.ɵɵelementEnd();
61
65
  } if (rf & 2) {
62
66
  const ctx_r0 = i0.ɵɵnextContext();
@@ -66,7 +70,9 @@ function DialogComponent_sme_backdrop_0_Template(rf, ctx) { if (rf & 1) {
66
70
  i0.ɵɵattribute("role", ctx_r0.dialogRole)("aria-hidden", !ctx_r0.visible)("aria-labelledby", ctx_r0.ariaLabel ? ctx_r0.idBag.ariaLabelSpan : "sme-dialog-title")("aria-describedby", ctx_r0.ariaDescription ? ctx_r0.idBag.ariaDescriptionSpan : "sme-dialog-desc");
67
71
  i0.ɵɵadvance(1);
68
72
  i0.ɵɵproperty("ngIf", ctx_r0.closeButton);
69
- i0.ɵɵadvance(7);
73
+ i0.ɵɵadvance(5);
74
+ i0.ɵɵproperty("ngIf", !ctx_r0.hideFooter);
75
+ i0.ɵɵadvance(1);
70
76
  i0.ɵɵproperty("ngIf", ctx_r0.ariaLabel);
71
77
  i0.ɵɵadvance(1);
72
78
  i0.ɵɵproperty("ngIf", ctx_r0.ariaDescription);
@@ -177,6 +183,10 @@ export class DialogComponent extends CoreBaseComponent {
177
183
  * The background color then will be based on the dialog body.
178
184
  */
179
185
  this.showBackdrop = true;
186
+ /**
187
+ * Whether to hide the dialog footer.
188
+ */
189
+ this.hideFooter = false;
180
190
  /**
181
191
  * Whether to enable the feature of clicking outside of the dialog to close the current dialog.
182
192
  * True means clicking outside the dialog will close the dialog. We want this to be set to false when there are forms in the dialog.
@@ -388,9 +398,9 @@ DialogComponent.nextDialogId = 0;
388
398
  /** @nocollapse */ DialogComponent.ɵfac = function DialogComponent_Factory(t) { return new (t || DialogComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.Injector)); };
389
399
  /** @nocollapse */ DialogComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: DialogComponent, selectors: [["sme-dialog"]], hostBindings: function DialogComponent_HostBindings(rf, ctx) { if (rf & 1) {
390
400
  i0.ɵɵlistener("keyup.escape", function DialogComponent_keyup_escape_HostBindingHandler() { return ctx.onKeyUp(); }, false, i0.ɵɵresolveDocument);
391
- } }, inputs: { allowBackgroundInteraction: "allowBackgroundInteraction", showBackdrop: "showBackdrop", clickBackdrop: "clickBackdrop", ariaLabel: "ariaLabel", ariaDescription: "ariaDescription", actionPane: "actionPane", dialogMode: "dialogMode", dialogType: "dialogType", closeButton: "closeButton", compactFullHeight: "compactFullHeight" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c2, decls: 1, vars: 1, consts: [["class", "sme-layout-absolute sme-position-inset-none", 3, "level", "showBackdrop", "allowBackgroundInteraction", "clicked", 4, "ngIf"], [1, "sme-layout-absolute", "sme-position-inset-none", 3, "level", "showBackdrop", "allowBackgroundInteraction", "clicked"], ["aria-modal", "true", 3, "ngClass"], ["class", "sme-button-trigger sme-button-auto-width sme-dialog-close-button", 3, "title", "click", 4, "ngIf"], [1, "sme-position-flex-none", "sme-focus-zone"], [1, "sme-layout-relative", "sme-position-flex-auto", "sme-padding-horizontal-lg", "sme-arrange-overflow-auto-y", "sme-arrange-overflow-hide-x", "sme-focus-zone", "sme-layout-responsive-zone-xs", "sme-dialog-content-wrapper"], [1, "sme-position-flex-none", "sme-focus-zone", "sme-padding-horizontal-lg", "sme-padding-vertical-sm"], ["class", "sme-screen-reader", 3, "id", 4, "ngIf"], [1, "sme-button-trigger", "sme-button-auto-width", "sme-dialog-close-button", 3, "title", "click"], [1, "sme-icon", "sme-icon-cancel"], [1, "sme-screen-reader", 3, "id"]], template: function DialogComponent_Template(rf, ctx) { if (rf & 1) {
401
+ } }, inputs: { allowBackgroundInteraction: "allowBackgroundInteraction", showBackdrop: "showBackdrop", hideFooter: "hideFooter", clickBackdrop: "clickBackdrop", ariaLabel: "ariaLabel", ariaDescription: "ariaDescription", actionPane: "actionPane", dialogMode: "dialogMode", dialogType: "dialogType", closeButton: "closeButton", compactFullHeight: "compactFullHeight" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c2, decls: 1, vars: 1, consts: [["class", "sme-layout-absolute sme-position-inset-none", 3, "level", "showBackdrop", "allowBackgroundInteraction", "clicked", 4, "ngIf"], [1, "sme-layout-absolute", "sme-position-inset-none", 3, "level", "showBackdrop", "allowBackgroundInteraction", "clicked"], ["aria-modal", "true", 3, "ngClass"], ["class", "sme-button-trigger sme-button-auto-width sme-dialog-close-button", 3, "title", "click", 4, "ngIf"], [1, "sme-position-flex-none", "sme-focus-zone"], [1, "sme-layout-relative", "sme-position-flex-auto", "sme-padding-horizontal-lg", "sme-arrange-overflow-auto-y", "sme-arrange-overflow-hide-x", "sme-focus-zone", "sme-layout-responsive-zone-xs", "sme-dialog-content-wrapper"], ["class", "sme-position-flex-none sme-focus-zone sme-padding-horizontal-lg sme-padding-vertical-sm", 4, "ngIf"], ["class", "sme-screen-reader", 3, "id", 4, "ngIf"], [1, "sme-button-trigger", "sme-button-auto-width", "sme-dialog-close-button", 3, "title", "click"], [1, "sme-icon", "sme-icon-cancel"], [1, "sme-position-flex-none", "sme-focus-zone", "sme-padding-horizontal-lg", "sme-padding-vertical-sm"], [1, "sme-screen-reader", 3, "id"]], template: function DialogComponent_Template(rf, ctx) { if (rf & 1) {
392
402
  i0.ɵɵprojectionDef(_c1);
393
- i0.ɵɵtemplate(0, DialogComponent_sme_backdrop_0_Template, 11, 11, "sme-backdrop", 0);
403
+ i0.ɵɵtemplate(0, DialogComponent_sme_backdrop_0_Template, 10, 12, "sme-backdrop", 0);
394
404
  } if (rf & 2) {
395
405
  i0.ɵɵproperty("ngIf", ctx.visible);
396
406
  } }, dependencies: [i1.BackdropComponent, i2.NgClass, i2.NgIf, i3.TooltipDirective], encapsulation: 2 });
@@ -402,11 +412,13 @@ __decorate([
402
412
  ], DialogComponent.prototype, "autoFocus", null);
403
413
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DialogComponent, [{
404
414
  type: Component,
405
- args: [{ selector: 'sme-dialog', template: "<sme-backdrop *ngIf=\"visible\" [level]=\"dialogLevel\" (clicked)=\"!!clickBackdrop ? onBackgroundClicked() : ''\"\r\n [showBackdrop]=\"showBackdrop\" [allowBackgroundInteraction]=\"allowBackgroundInteraction\"\r\n class=\"sme-layout-absolute sme-position-inset-none\">\r\n <div [ngClass]=\"dialogClasses\" [attr.role]=\"dialogRole\" [attr.aria-hidden]=\"!visible\"\r\n [attr.aria-labelledby]=\"ariaLabel ? idBag.ariaLabelSpan :'sme-dialog-title'\"\r\n [attr.aria-describedby]=\"ariaDescription ? idBag.ariaDescriptionSpan : 'sme-dialog-desc'\" aria-modal=\"true\">\r\n <button *ngIf=\"closeButton\" class=\"sme-button-trigger sme-button-auto-width sme-dialog-close-button\"\r\n (click)=\"onCloseClicked()\" [attr.aria-label]=\"strings.MsftSmeShell.Angular.Common.close\"\r\n [title]=\"strings.MsftSmeShell.Angular.Common.close\">\r\n <span class=\"sme-icon sme-icon-cancel\"></span>\r\n </button>\r\n <div class=\"sme-position-flex-none sme-focus-zone\">\r\n <ng-content select=\"sme-dialog-header\"></ng-content>\r\n </div>\r\n <div class=\"sme-layout-relative sme-position-flex-auto sme-padding-horizontal-lg sme-arrange-overflow-auto-y sme-arrange-overflow-hide-x sme-focus-zone sme-layout-responsive-zone-xs sme-dialog-content-wrapper\">\r\n <ng-content select=\"sme-dialog-content\"></ng-content>\r\n </div>\r\n <div class=\"sme-position-flex-none sme-focus-zone sme-padding-horizontal-lg sme-padding-vertical-sm\">\r\n <ng-content select=\"sme-dialog-footer\"></ng-content>\r\n </div>\r\n </div>\r\n <span *ngIf=\"ariaLabel\" class=\"sme-screen-reader\" [id]=\"idBag.ariaLabelSpan\">{{ariaLabel}}</span>\r\n <span *ngIf=\"ariaDescription\" class=\"sme-screen-reader\" [id]=\"idBag.ariaDescriptionSpan\">{{ariaDescription}}</span>\r\n</sme-backdrop>\r\n" }]
415
+ args: [{ selector: 'sme-dialog', template: "<sme-backdrop *ngIf=\"visible\" [level]=\"dialogLevel\" (clicked)=\"!!clickBackdrop ? onBackgroundClicked() : ''\"\r\n [showBackdrop]=\"showBackdrop\" [allowBackgroundInteraction]=\"allowBackgroundInteraction\"\r\n class=\"sme-layout-absolute sme-position-inset-none\">\r\n <div [ngClass]=\"dialogClasses\" [attr.role]=\"dialogRole\" [attr.aria-hidden]=\"!visible\"\r\n [attr.aria-labelledby]=\"ariaLabel ? idBag.ariaLabelSpan :'sme-dialog-title'\"\r\n [attr.aria-describedby]=\"ariaDescription ? idBag.ariaDescriptionSpan : 'sme-dialog-desc'\" aria-modal=\"true\">\r\n <button *ngIf=\"closeButton\" class=\"sme-button-trigger sme-button-auto-width sme-dialog-close-button\"\r\n (click)=\"onCloseClicked()\" [attr.aria-label]=\"strings.MsftSmeShell.Angular.Common.close\"\r\n [title]=\"strings.MsftSmeShell.Angular.Common.close\">\r\n <span class=\"sme-icon sme-icon-cancel\"></span>\r\n </button>\r\n <div class=\"sme-position-flex-none sme-focus-zone\">\r\n <ng-content select=\"sme-dialog-header\"></ng-content>\r\n </div>\r\n <div class=\"sme-layout-relative sme-position-flex-auto sme-padding-horizontal-lg sme-arrange-overflow-auto-y sme-arrange-overflow-hide-x sme-focus-zone sme-layout-responsive-zone-xs sme-dialog-content-wrapper\">\r\n <ng-content select=\"sme-dialog-content\"></ng-content>\r\n </div>\r\n <div *ngIf=\"!hideFooter\" class=\"sme-position-flex-none sme-focus-zone sme-padding-horizontal-lg sme-padding-vertical-sm\">\r\n <ng-content select=\"sme-dialog-footer\"></ng-content>\r\n </div>\r\n </div>\r\n <span *ngIf=\"ariaLabel\" class=\"sme-screen-reader\" [id]=\"idBag.ariaLabelSpan\">{{ariaLabel}}</span>\r\n <span *ngIf=\"ariaDescription\" class=\"sme-screen-reader\" [id]=\"idBag.ariaDescriptionSpan\">{{ariaDescription}}</span>\r\n</sme-backdrop>\r\n" }]
406
416
  }], function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }]; }, { allowBackgroundInteraction: [{
407
417
  type: Input
408
418
  }], showBackdrop: [{
409
419
  type: Input
420
+ }], hideFooter: [{
421
+ type: Input
410
422
  }], clickBackdrop: [{
411
423
  type: Input
412
424
  }], ariaLabel: [{
@@ -427,4 +439,4 @@ __decorate([
427
439
  type: HostListener,
428
440
  args: ['document:keyup.escape']
429
441
  }], autoFocus: [] }); })();
430
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUlSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7SUNWekQsaUNBRXNEO0lBRHBELCtLQUFTLGVBQUEsdUJBQWdCLENBQUEsSUFBQztJQUUxQiwwQkFBOEM7SUFDaEQsaUJBQVM7OztJQUZQLHdFQUFtRDtJQUR4Qiw4RUFBNkQ7OztJQWM1RixnQ0FBNkU7SUFBQSxZQUFhO0lBQUEsaUJBQU87OztJQUEvQywrQ0FBMEI7SUFBQyxlQUFhO0lBQWIsc0NBQWE7OztJQUMxRixnQ0FBeUY7SUFBQSxZQUFtQjtJQUFBLGlCQUFPOzs7SUFBM0QscURBQWdDO0lBQUMsZUFBbUI7SUFBbkIsNENBQW1COzs7O0lBdEI5Ryx1Q0FFc0Q7SUFGRiwrS0FBVyx3Q0FBa0IsNEJBQXFCLEdBQUcsRUFBRSxDQUFBLElBQUM7SUFHMUcsOEJBRThHO0lBQzVHLHFGQUlTO0lBQ1QsOEJBQW1EO0lBQ2pELGtCQUFvRDtJQUN0RCxpQkFBTTtJQUNOLDhCQUFrTjtJQUNoTixxQkFBcUQ7SUFDdkQsaUJBQU07SUFDTiw4QkFBcUc7SUFDbkcscUJBQW9EO0lBQ3RELGlCQUFNLEVBQUE7SUFFUixpRkFBaUc7SUFDakcsbUZBQW1IO0lBQ3JILGlCQUFlOzs7SUF2QmUsMENBQXFCLHFDQUFBLGlFQUFBO0lBRzVDLGVBQXlCO0lBQXpCLDhDQUF5QjtJQUFDLHlDQUF3QixnQ0FBQSx1RkFBQSxtR0FBQTtJQUc1QyxlQUFpQjtJQUFqQix5Q0FBaUI7SUFlckIsZUFBZTtJQUFmLHVDQUFlO0lBQ2YsZUFBcUI7SUFBckIsNkNBQXFCOzs7O0FESjlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBS0gsTUFBTSxPQUFPLHFCQUFxQjs7NkdBQXJCLHFCQUFxQjt1R0FBckIscUJBQXFCOztRQUZuQiw4QkFBK0Q7UUFBQSxrQkFBeUI7UUFBQSxpQkFBTTs7dUZBRWhHLHFCQUFxQjtjQUpqQyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsUUFBUSxFQUFFLGdHQUFnRzthQUM3Rzs7QUFRRCxNQUFNLE9BQU8sc0JBQXNCOzsrR0FBdEIsc0JBQXNCO3dHQUF0QixzQkFBc0I7O1FBRnBCLGtCQUF5Qjs7dUZBRTNCLHNCQUFzQjtjQUpsQyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsUUFBUSxFQUFFLDJCQUEyQjthQUN4Qzs7QUFTRCxNQUFNLE9BQU8scUJBQXFCOzs2R0FBckIscUJBQXFCO3VHQUFyQixxQkFBcUI7O1FBSG5CLDhCQUFzQztRQUNqRCxrQkFBeUI7UUFBQSxpQkFBTTs7dUZBRXRCLHFCQUFxQjtjQUxqQyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsUUFBUSxFQUFFO29DQUNzQjthQUNuQzs7QUFJRCxNQUFNLENBQU4sSUFBWSxpQkFLWDtBQUxELFdBQVksaUJBQWlCO0lBQ3pCLHVFQUFlLENBQUE7SUFDZix1RUFBZSxDQUFBO0lBQ2YsbUVBQWEsQ0FBQTtJQUNiLCtFQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFMVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBSzVCO0FBRUQsTUFBTSxPQUFPLFVBQVU7O0FBQ0wsZUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNkLG1CQUFRLEdBQUcsV0FBVyxDQUFDO0FBQ3ZCLGtCQUFPLEdBQUcsU0FBUyxDQUFDO0FBQ3BCLHdCQUFhLEdBQUcsZ0JBQWdCLENBQUM7QUFDakMscUJBQVUsR0FBRyxZQUFZLENBQUM7QUFDMUIsbUJBQVEsR0FBRyxVQUFVLENBQUM7QUFDdEIseUJBQWMsR0FBRyxpQkFBaUIsQ0FBQztBQUNuQyx3QkFBYSxHQUFHLGdCQUFnQixDQUFDO0FBQ2pDLHVCQUFZLEdBQUcsY0FBYyxDQUFDO0FBR2hELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQztBQU1uQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxpQkFBaUI7SUErR2xELFlBQW9CLFVBQXNCLEVBQzlCLGlCQUFvQyxFQUM1QyxRQUFrQjtRQUNsQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFIQSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFuR3pDLGVBQVUsR0FBRyxhQUFhLENBQUM7UUFFM0IsWUFBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQVcsQ0FBQztRQUV4QyxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQWN2Qjs7V0FFRztRQUNhLCtCQUEwQixHQUFHLEtBQUssQ0FBQztRQUVuRDs7O1dBR0c7UUFDYSxpQkFBWSxHQUFHLElBQUksQ0FBQztRQUVwQzs7O1dBR0c7UUFDYSxrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2Ysb0JBQWUsR0FBRyxFQUFFLENBQUM7UUErQnJDOzs7O1dBSUc7UUFDYSxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWhDOztXQUVHO1FBQ2EsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEM7Ozs7V0FJRztRQUNhLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUlsQyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBZXRCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUU1Qix5SEFBeUg7UUFDekgsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztRQUN2RCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUU5Qiw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBL0hEOztPQUVHO0lBQ0gsSUFBYyxhQUFhO1FBQ3ZCLE9BQU8saUJBQWlCLENBQUM7SUFDN0IsQ0FBQztJQTRDRDs7Ozs7T0FLRztJQUNILElBQW9CLFVBQVUsQ0FBQyxRQUFpQjtRQUM1QyxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztTQUNyQzthQUFNO1lBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQ3pDO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ1csVUFBVSxDQUFDLElBQVk7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQXlCRCxJQUFXLE9BQU8sQ0FBQyxPQUFnQjtRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFxQkQsOEZBQThGO0lBRXZGLE9BQU87UUFDVixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksa0JBQWtCO1FBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFFSSxTQUFTO1FBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRTtZQUMvQiwyRkFBMkY7WUFDM0YsK0ZBQStGO1lBQy9GLG9DQUFvQztZQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7WUFDN0YsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hFLElBQUksY0FBYyxFQUFFO2dCQUNoQixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDMUI7U0FDSjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDUCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxJQUFJO1FBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNJLG1CQUFtQjtRQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0MsSUFBSSxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUU7WUFDbkQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRVMsc0JBQXNCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxtQ0FBbUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNILE1BQU0saUJBQWlCLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBRXBGLElBQUksUUFBUSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLHdCQUF3QixDQUFDLENBQUM7U0FDMUY7YUFBTSxJQUFJLFFBQVEsS0FBSyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxpQkFBaUIsRUFBRSw2QkFBNkIsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1NBQy9GO2FBQU0sSUFBSSxRQUFRLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRTtZQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztZQUMxRixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO2FBQ3pEO1NBQ0o7YUFBTSxJQUFJLFFBQVEsS0FBSyxVQUFVLENBQUMsYUFBYSxFQUFFO1lBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsNEJBQTRCLEVBQUUsa0NBQWtDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUMzSCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO2FBQ3pEO1NBQ0o7YUFBTSxJQUFJLFFBQVEsS0FBSyxVQUFVLENBQUMsVUFBVSxFQUFFO1lBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxpQkFBaUIsRUFBRSw4QkFBOEIsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1NBQ2hHO2FBQU0sSUFBSSxRQUFRLEtBQUssVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUN6QyxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLG1CQUFtQixDQUFDLENBQUM7U0FDMUY7YUFBTSxJQUFJLFFBQVEsS0FBSyxVQUFVLENBQUMsY0FBYyxFQUFFO1lBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsbUNBQW1DLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztTQUNqRzthQUFNLElBQUksUUFBUSxLQUFLLFVBQVUsQ0FBQyxhQUFhLEVBQUU7WUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxrQ0FBa0MsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1NBQ2hHO2FBQU0sSUFBSSxRQUFRLEtBQUssVUFBVSxDQUFDLFlBQVksRUFBRTtZQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLHVCQUF1QixFQUFFLGdDQUFnQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7U0FDdkg7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLDJCQUEyQixDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFFN0IsZ0JBQWdCO1FBQ2hCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztTQUNoRjthQUFNO1lBQ0gsdURBQXVEO1lBQ3ZELE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztTQUNsRztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNPLFdBQVc7UUFDakIsT0FBTztZQUNILGFBQWEsRUFBRSxFQUFFO1lBQ2pCLG1CQUFtQixFQUFFLEVBQUU7U0FDMUIsQ0FBQztJQUNOLENBQUM7O0FBbFFEOztHQUVHO0FBQ1ksNEJBQVksR0FBRyxDQUFDLENBQUM7aUdBWHZCLGVBQWU7aUdBQWYsZUFBZTswR0FBZixhQUFTOzs7UUN0RnRCLG9GQXVCZTs7UUF2QkEsa0NBQWE7O0FEb1B4QjtJQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Ozs7Z0RBYVg7dUZBM0tRLGVBQWU7Y0FKM0IsU0FBUzsyQkFDSSxZQUFZO29IQXFDTiwwQkFBMEI7a0JBQXpDLEtBQUs7WUFNVSxZQUFZO2tCQUEzQixLQUFLO1lBTVUsYUFBYTtrQkFBNUIsS0FBSztZQUNVLFNBQVM7a0JBQXhCLEtBQUs7WUFDVSxlQUFlO2tCQUE5QixLQUFLO1lBUWMsVUFBVTtrQkFBN0IsS0FBSztZQWVLLFVBQVU7a0JBRHBCLEtBQUs7WUFjVSxVQUFVO2tCQUF6QixLQUFLO1lBS1UsV0FBVztrQkFBMUIsS0FBSztZQU9VLGlCQUFpQjtrQkFBaEMsS0FBSztZQW9DQyxPQUFPO2tCQURiLFlBQVk7bUJBQUMsdUJBQXVCO1lBNEI5QixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgU2ltcGxlQ2hhbmdlc1xyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBEb20gfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RvbS9kb20nO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAc21lRG9jIHtAbGFiZWwgRGlhbG9nIEBpZCBzbWUtZGlhbG9nfVxyXG4gKlxyXG4gKiBAb3ZlcnZpZXdcclxuICogQGZpbGUge0BmaWxlcGF0aCAuL2V4YW1wbGVzL2RpYWxvZy1vdmVydmlldy5tZH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBCYXNpYyBVc2FnZSBAaWQgYmFzaWMtdXNhZ2V9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RpYWxvZy1leGFtcGxlLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9kaWFsb2ctZXhhbXBsZS5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBEaWFsb2cgQ2hhaW4gQGlkIGRpYWxvZy1jaGFpbn1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGlhbG9nLWV4YW1wbGUtZGlhbG9nLWNoYWluLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9kaWFsb2ctZXhhbXBsZS1kaWFsb2ctY2hhaW4uY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgRnVsbCBTY3JlZW4gRGlhbG9nIEBpZCBmdWxsLXNjcmVlbi1kaWFsb2d9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RpYWxvZy1leGFtcGxlLWZ1bGwtc2NyZWVuLWRpYWxvZy5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGlhbG9nLWV4YW1wbGUtZnVsbC1zY3JlZW4tZGlhbG9nLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1kaWFsb2ctaGVhZGVyJyxcclxuICAgIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLXBhZGRpbmctdmVydGljYWwtc21cIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9kaXY+J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nSGVhZGVyQ29tcG9uZW50IHtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1kaWFsb2ctY29udGVudCcsXHJcbiAgICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dDb250ZW50Q29tcG9uZW50IHtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1kaWFsb2ctZm9vdGVyJyxcclxuICAgIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInNtZS1sYXlvdXQtZGlhbG9nLWZvb3RlclwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ0Zvb3RlckNvbXBvbmVudCB7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIERpYWxvZ0Nsb3NlUmVhc29uIHtcclxuICAgIFNvZnREaXNtaXNzID0gMCxcclxuICAgIENsb3NlQnV0dG9uID0gMSxcclxuICAgIEVzY2FwZUtleSA9IDIsXHJcbiAgICBDb21wZXRpbmdEaWFsb2cgPSAzXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dNb2RlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgcGFuZSA9ICdwYW5lJztcclxuICAgIHB1YmxpYyBzdGF0aWMgd2lkZVBhbmUgPSAnd2lkZS1wYW5lJztcclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFjdCA9ICdjb21wYWN0JztcclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFjdFNxdWFyZSA9ICdjb21wYWN0LXNxdWFyZSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGZ1bGxzY3JlZW4gPSAnZnVsbHNjcmVlbic7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNlbnRlcmVkID0gJ2NlbnRlcmVkJztcclxuICAgIHB1YmxpYyBzdGF0aWMgY2VudGVyZWRNZWRpdW0gPSAnY2VudGVyZWQtbWVkaXVtJztcclxuICAgIHB1YmxpYyBzdGF0aWMgY2VudGVyZWRMYXJnZSA9ICdjZW50ZXJlZC1sYXJnZSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIG5vdGlmaWNhdGlvbiA9ICdub3RpZmljYXRpb24nO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbW9kYWxEaWFsb2cgPSAnbW9kYWwnO1xyXG5leHBvcnQgY29uc3QgYWxlcnREaWFsb2cgPSAnYWxlcnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ0NvbXBvbmVudCBleHRlbmRzIENvcmVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0RpYWxvZ0NvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGF0aWMgY29uc3RhbnQgdG8gcHJvdmlkZSB1bmlxdWUgaWRzIGZvciBlYWNoIG1hc3RlciB2aWV3XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIG5leHREaWFsb2dJZCA9IDA7XHJcbiAgICBwdWJsaWMgZGlhbG9nQ2xhc3Nlczogc3RyaW5nW107XHJcbiAgICBwdWJsaWMgZGlhbG9nUm9sZSA9ICdhbGVydGRpYWxvZyc7XHJcblxyXG4gICAgcHVibGljIHN0cmluZ3MgPSBNc2Z0U21lLmdldFN0cmluZ3M8U3RyaW5ncz4oKTtcclxuXHJcbiAgICBwdWJsaWMgZGlhbG9nTGV2ZWwgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBiYWcgb2YgaWRzIGdlbmVyYXRlZCB1c2luZyBAc2VlIHttYXN0ZXJWaWV3SWR9IGFuZCB0aGUgbWFwIHJldHVybmVkIGZyb20gQHNlZSB7Y3JlYXRlSWRCYWd9XHJcbiAgICAgKi9cclxuICAgIGRlY2xhcmUgcHVibGljIGlkQmFnOiBNc2Z0U21lLlN0cmluZ01hcDxzdHJpbmc+O1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdW5pcXVlIGlkIG9mIHRoaXMgbWFzdGVyIHZpZXcuXHJcbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIG1hc3RlclZpZXdzIG5lZWQgdG8gdXNlIGFuIElEIGJ1dCBtYXkgYXBwZWFyIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIHBhZ2UuXHJcbiAgICAgKiBVc2luZyB0aGlzIElEIGFzIHRoZSBiYXNpcyBmb3IgdGhlIGNvbnRyb2xzIGludGVybmFsIElEcyBnZW5lcmF0ZWQgaW4gQHNlZSB7Y3JlYXRlSWRCYWd9IGtlZXBzIHRoZSBJRHMgdW5pcXVlLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZGlhbG9nSWQ6IG51bWJlcjtcclxuICAgIHByb3RlY3RlZCBtb2RlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRvIGFsbG93IGludGVyYWN0aW9uIHdpdGggZWxlbWVudHMgZnJvbSBvdXRzaWRlIHRoZSBkaWFsb2cgZXNwZWNpYWxseSB0byBzdXBwb3J0IHRoZSBob3ZlcmluZyBldmVudHMuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd0JhY2tncm91bmRJbnRlcmFjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0byByZW5kZXIgdGhlIGRpYWxvZyBiYWNrZ3JvdW5kLiBGYWxzZSB0byBoaWRlIHRoZSBkaWFsb2cgY29udGFpbmVyIGFuZCBtYWtlIHRoZSBiYWNrZ3JvdW5kIHRyYW5zcGFyZW50LlxyXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgdGhlbiB3aWxsIGJlIGJhc2VkIG9uIHRoZSBkaWFsb2cgYm9keS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dCYWNrZHJvcCA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgZmVhdHVyZSBvZiBjbGlja2luZyBvdXRzaWRlIG9mIHRoZSBkaWFsb2cgdG8gY2xvc2UgdGhlIGN1cnJlbnQgZGlhbG9nLlxyXG4gICAgICogVHJ1ZSBtZWFucyBjbGlja2luZyBvdXRzaWRlIHRoZSBkaWFsb2cgd2lsbCBjbG9zZSB0aGUgZGlhbG9nLiBXZSB3YW50IHRoaXMgdG8gYmUgc2V0IHRvIGZhbHNlIHdoZW4gdGhlcmUgYXJlIGZvcm1zIGluIHRoZSBkaWFsb2cuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGlja0JhY2tkcm9wID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBhcmlhTGFiZWwgPSAnJztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBhcmlhRGVzY3JpcHRpb24gPSAnJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hldGhlciB0aGlzIHNob3VsZCBiZSBhbiBhY3Rpb24gcGFuZSBvciBhIGNlbnRlcmVkIGRpYWxvZ1xyXG4gICAgICpcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBkaWFsb2dNb2RlIGluc3RlYWRcclxuICAgICAqIEBwYXJhbSBuZXdWYWx1ZSBpZiB0cnVlLCB1c2VzIGEgbGVmdCBwYW5lIGRpYWxvZywgb3RoZXJ3aXNlIGEgY2VudGVyZWQgZGlhbG9nXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzZXQgYWN0aW9uUGFuZShuZXdWYWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ01vZGUgPSBEaWFsb2dNb2RlLnBhbmU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dNb2RlID0gRGlhbG9nTW9kZS5jZW50ZXJlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGlhbG9nTW9kZUZyb21JbnB1dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoZSBkaWFsb2cgbW9kZSB0byB1c2VcclxuICAgICAqIEBzZWUgRGlhbG9nTW9kZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBkaWFsb2dNb2RlKG1vZGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaWFsb2dNb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaWFsb2cgdHlwZXMuIE1vc3RseSB1c2VkIGZvciBhY2Nlc3NpYmlsaXR5LiBWYWxpZCB2YWx1ZXM6XHJcbiAgICAgKiBAc2VlIG1vZGFsRGlhbG9nID0gJ21vZGFsJztcclxuICAgICAqIEBzZWUgYWxlcnREaWFsb2cgPSBcImFsZXJ0XCI7XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkaWFsb2dUeXBlID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkaWFsb2cgc2hvdWxkIGhhdmUgYSBjbG9zZSBidXR0b24gaW4gdG9wIHJpZ2h0IG9yIG5vdFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY2xvc2VCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhY3QgZGlhbG9nIGNhbiBiZSBmdWxsIGhlaWdodCB3aGVuIGRpc3BsYXlpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIHNjcmVlbi5cclxuICAgICAqIEl0IGNhbiBhbHNvIGJlIGRpc3BsYXllZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBzY3JlZW4gdGhhdCBuZWVkcyB0byBiZSBoYXZpbmcgcGFkZGluZ3MgdG8gZWFjaCBkaXJlY3Rpb24uXHJcbiAgICAgKiBUaGlzIGNvbXBhY3RGdWxsSGVpZ2h0IHRvIHRydWUgd2lsbCBhbHdheXMgYmUgMTAwJSBoZWlnaHQuIE90aGVyd2lzZSBjc3Mgd291bGQgY29udHJvbCB0aGUgbWF4IGhlaWdodC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGNvbXBhY3RGdWxsSGVpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGNsb3NlUmVxdWVzdGVkOiBTdWJqZWN0PERpYWxvZ0Nsb3NlUmVhc29uPjtcclxuXHJcbiAgICBwcml2YXRlIGRvQXV0b0ZvY3VzID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHZpc2libGU7XHJcbiAgICAgICAgdGhpcy5kb0F1dG9Gb2N1cyA9IHZpc2libGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUgPSBEaWFsb2dNb2RlLnBhbmU7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBjbG9zZVJlcXVlc3RlZCBzdWJqZWN0IHRvIG5vdGlmeSBkaWFsb2dzIHdoZW4gYSBjbG9zZSBpcyByZXF1ZXN0ZWQgYW5kIGhvdyBpdCB3YXMgcmVxdWVzdGVkIChEaWFsb2dDbG9zZVJlYXNvbilcclxuICAgICAgICB0aGlzLmNsb3NlUmVxdWVzdGVkID0gbmV3IFN1YmplY3Q8RGlhbG9nQ2xvc2VSZWFzb24+KCk7XHJcbiAgICAgICAgdGhpcy5zZXREaWFsb2dNb2RlRnJvbUlucHV0KCk7XHJcblxyXG4gICAgICAgIC8vIHNldHVwIGRpYWxvZyBpZCBhbmQgaWRCYWdcclxuICAgICAgICB0aGlzLmRpYWxvZ0lkID0gRGlhbG9nQ29tcG9uZW50Lm5leHREaWFsb2dJZCsrO1xyXG4gICAgICAgIHRoaXMuaWRCYWcgPSB0aGlzLmNyZWF0ZUlkQmFnKCk7XHJcbiAgICAgICAgTXNmdFNtZS5mb3JFYWNoS2V5KHRoaXMuaWRCYWcsIChrZXkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pZEJhZ1trZXldID0gYGRpYWxvZy0ke3RoaXMuZGlhbG9nSWQudG9TdHJpbmcoKX0tJHtrZXl9YDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb2N1bWVudDprZXl1cC5lc2NhcGUgaXMgdXNlZCBzbyB0aGF0IGEgZGlhbG9nIGlzIG5vdCBjbG9zZWQgd2hlbiB0cnlpbmcgdG8gY2xvc2UgYSB0b29sdGlwXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cC5lc2NhcGUnKVxyXG4gICAgcHVibGljIG9uS2V5VXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uRXNjYXBlUHJlc3NlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXIgTGlmZSBDeWNsZSBob29rIGZvciBBZnRlciBWaWV3IENoZWNrZWQuXHJcbiAgICAgKiBXaGVuIHRoZSB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBnb2luZyB0byBmb2N1cyBvbiB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGhhcyB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRvQXV0b0ZvY3VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b0ZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGxldGVkIHRoZSBjbG9zZVJlcXVlc3RlZCBzdWJqZWN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmNsb3NlUmVxdWVzdGVkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdXRvIGZvY3VzIG9uIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyBmb2N1c2FibGVcclxuICAgICAqL1xyXG4gICAgQERlYm91bmNlKDApXHJcbiAgICBwdWJsaWMgYXV0b0ZvY3VzKCkge1xyXG4gICAgICAgIHRoaXMuZG9BdXRvRm9jdXMgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgLy8gSWYgdGhlIGRpYWxvZyBoYXMgYSBsb2FkaW5nIHdoZWVsLCBmb2N1cyBmaXJzdCBnb2VzIHRvIHRoZSBsb2FkaW5nIHdoZWVsIHRoZW4gZ2V0cyBsb3N0LlxyXG4gICAgICAgICAgICAvLyBUTyBhdm9pZCB0aGlzLCB3ZSBnZXQgdGhlIHBhcmVudCBlbGVtZW50IG9yIG5hdGl2ZSBlbGVtZW50IG9mIHRoZSBkaWFsb2csIHRoZW4gZ2V0IHRoZSBmaXJzdFxyXG4gICAgICAgICAgICAvLyBmb2N1c2FibGUgZWxlbWVudCBpbiB0aGF0IGVsZW1lbnRcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQgfHwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gRG9tLmdldEZpcnN0Rm9jdXNhYmxlRGVzY2VuZGVudChlbGVtZW50KTtcclxuICAgICAgICAgICAgaWYgKGZpcnN0Rm9jdXNhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBmaXJzdEZvY3VzYWJsZS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvd3MgdGhlIGRpYWxvZy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3coKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhpZGVzIHRoZSBkaWFsb2cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoaWRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm90aWZpZXMgY2xvc2VSZXF1ZXN0ZWQgc3Vic2NyaWJlcnMgdGhhdCB0aGUgYmFja2Ryb3AgaGFzIGJlZW4gY2xpY2tlZCwgcmVxdWVzdGluZyBhIHNvZnQgZGlzbWlzc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25CYWNrZ3JvdW5kQ2xpY2tlZCgpIHtcclxuICAgICAgICB0aGlzLmNsb3NlUmVxdWVzdGVkLm5leHQoRGlhbG9nQ2xvc2VSZWFzb24uU29mdERpc21pc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm90aWZpZXMgY2xvc2VSZXF1ZXN0ZWQgc3Vic2NyaWJlcnMgdGhhdCB0aGUgY2xvc2UgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQsIHJlcXVlc3RpbmcgYSBjbG9zZSBidXR0b24gZGlzbWlzc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25DbG9zZUNsaWNrZWQoKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVJlcXVlc3RlZC5uZXh0KERpYWxvZ0Nsb3NlUmVhc29uLkNsb3NlQnV0dG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Fc2NhcGVQcmVzc2VkKCkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VSZXF1ZXN0ZWQubmV4dChEaWFsb2dDbG9zZVJlYXNvbi5Fc2NhcGVLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nTW9kZUNoYW5nZSA9IGNoYW5nZXNbJ2RpYWxvZ01vZGUnXTtcclxuICAgICAgICBpZiAoZGlhbG9nTW9kZUNoYW5nZSAmJiBkaWFsb2dNb2RlQ2hhbmdlLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldERpYWxvZ01vZGVGcm9tSW5wdXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldERpYWxvZ01vZGVGcm9tSW5wdXQoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmRpYWxvZ01vZGUudG9Mb3dlckNhc2UoKS50cmltKCk7XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IFsnc21lLWxheW91dC1hYnNvbHV0ZScsICdzbWUtc2NoZW1lLWRpYWxvZycsICdzbWUtYW5pbWF0aW9uLXRyYW5zaXRpb24td2lkdGgteHMnLCAnc21lLXJlc3BvbnNpdmUtZGlhbG9nJ107XHJcbiAgICAgICAgY29uc3QgY29tbW9uUGFuZUNsYXNzZXMgPSBbJ3NtZS1wb3NpdGlvbi12ZXJ0aWNhbC1ub25lJywgJ3NtZS1wb3NpdGlvbi1yaWdodC1ub25lJ107XHJcblxyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gRGlhbG9nTW9kZS5wYW5lKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCguLi5jb21tb25QYW5lQ2xhc3NlcywgJ3NtZS1sYXlvdXQtZGlhbG9nLXBhbmUnLCAnc21lLXNoYWRvdy1hY3Rpb24tcGFuZScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUud2lkZVBhbmUpIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKC4uLmNvbW1vblBhbmVDbGFzc2VzLCAnc21lLWxheW91dC1kaWFsb2ctd2lkZS1wYW5lJywgJ3NtZS1zaGFkb3ctYWN0aW9uLXBhbmUnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID09PSBEaWFsb2dNb2RlLmNvbXBhY3QpIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKC4uLmNvbW1vblBhbmVDbGFzc2VzLCAnc21lLWxheW91dC1kaWFsb2ctY29tcGFjdCcsICdzbWUtc2hhZG93LWFjdGlvbi1wYW5lJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBhY3RGdWxsSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NtZS1sYXlvdXQtZGlhbG9nLWNvbXBhY3QtZnVsbC1oZWlnaHQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUuY29tcGFjdFNxdWFyZSkge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NtZS1wb3NpdGlvbi1jZW50ZXInLCAnc21lLWxheW91dC1kaWFsb2ctY2VudGVyZWQnLCAnc21lLWxheW91dC1kaWFsb2ctY29tcGFjdC1zcXVhcmUnLCAnc21lLXNoYWRvdy1kaWFsb2cnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tcGFjdEZ1bGxIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc21lLWxheW91dC1kaWFsb2ctY29tcGFjdC1mdWxsLWhlaWdodCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChuZXdWYWx1ZSA9PT0gRGlhbG9nTW9kZS5mdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCguLi5jb21tb25QYW5lQ2xhc3NlcywgJ3NtZS1sYXlvdXQtZGlhbG9nLWZ1bGxzY3JlZW4nLCAnc21lLXNoYWRvdy1hY3Rpb24tcGFuZScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUuY2VudGVyZWQpIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzbWUtcG9zaXRpb24tY2VudGVyJywgJ3NtZS1sYXlvdXQtZGlhbG9nLWNlbnRlcmVkJywgJ3NtZS1zaGFkb3ctZGlhbG9nJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuZXdWYWx1ZSA9PT0gRGlhbG9nTW9kZS5jZW50ZXJlZE1lZGl1bSkge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NtZS1wb3NpdGlvbi1jZW50ZXInLCAnc21lLWxheW91dC1kaWFsb2ctY2VudGVyZWQtbWVkaXVtJywgJ3NtZS1zaGFkb3ctZGlhbG9nJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuZXdWYWx1ZSA9PT0gRGlhbG9nTW9kZS5jZW50ZXJlZExhcmdlKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc21lLXBvc2l0aW9uLWNlbnRlcicsICdzbWUtbGF5b3V0LWRpYWxvZy1jZW50ZXJlZC1sYXJnZScsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUubm90aWZpY2F0aW9uKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc21lLXBvc2l0aW9uLXRvcC1zbScsICdzbWUtcG9zaXRpb24tcmlnaHQtc20nLCAnc21lLWxheW91dC1kaWFsb2ctbm90aWZpY2F0aW9uJywgJ3NtZS1zaGFkb3ctZGlhbG9nJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzc2VzLnB1c2goJ3NtZS1hcnJhbmdlLXN0YWNrLXYnLCAnc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0bycpO1xyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ0NsYXNzZXMgPSBjbGFzc2VzO1xyXG5cclxuICAgICAgICAvLyBhY2Nlc3NpYmlsaXR5XHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JvbGUgPSB0aGlzLmRpYWxvZ1R5cGUgPT09IG1vZGFsRGlhbG9nID8gJ2RpYWxvZycgOiAnYWxlcnRkaWFsb2cnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGJ5IGRlZmF1bHQgY2VudGVyZWQgZGlhbG9ncyBhcmUgY29uc2lkZXJlZCBhcyBhbGVydHNcclxuICAgICAgICAgICAgY29uc3QgYWxlcnRNb2RlcyA9IFtEaWFsb2dNb2RlLmNlbnRlcmVkLCBEaWFsb2dNb2RlLmNlbnRlcmVkTGFyZ2UsIERpYWxvZ01vZGUuY29tcGFjdFNxdWFyZV07XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUm9sZSA9IGFsZXJ0TW9kZXMuc29tZShtb2RlID0+IHRoaXMuZGlhbG9nTW9kZSA9PT0gbW9kZSkgPyAnYWxlcnRkaWFsb2cnIDogJ2RpYWxvZyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyB0aGUgaWRCYWcgdXNlZCBieSB0aGlzIGNvbXBvbmVudCB0byBzdG9yZSB1bmlxdWUgZWxlbWVudCBpZHMuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjcmVhdGVJZEJhZygpOiBNc2Z0U21lLlN0cmluZ01hcDxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhcmlhTGFiZWxTcGFuOiAnJyxcclxuICAgICAgICAgICAgYXJpYURlc2NyaXB0aW9uU3BhbjogJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtYmFja2Ryb3AgKm5nSWY9XCJ2aXNpYmxlXCIgW2xldmVsXT1cImRpYWxvZ0xldmVsXCIgKGNsaWNrZWQpPVwiISFjbGlja0JhY2tkcm9wID8gb25CYWNrZ3JvdW5kQ2xpY2tlZCgpIDogJydcIlxyXG4gIFtzaG93QmFja2Ryb3BdPVwic2hvd0JhY2tkcm9wXCIgW2FsbG93QmFja2dyb3VuZEludGVyYWN0aW9uXT1cImFsbG93QmFja2dyb3VuZEludGVyYWN0aW9uXCJcclxuICBjbGFzcz1cInNtZS1sYXlvdXQtYWJzb2x1dGUgc21lLXBvc2l0aW9uLWluc2V0LW5vbmVcIj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cImRpYWxvZ0NsYXNzZXNcIiBbYXR0ci5yb2xlXT1cImRpYWxvZ1JvbGVcIiBbYXR0ci5hcmlhLWhpZGRlbl09XCIhdmlzaWJsZVwiXHJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsID8gaWRCYWcuYXJpYUxhYmVsU3BhbiA6J3NtZS1kaWFsb2ctdGl0bGUnXCJcclxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYXJpYURlc2NyaXB0aW9uID8gaWRCYWcuYXJpYURlc2NyaXB0aW9uU3BhbiA6ICdzbWUtZGlhbG9nLWRlc2MnXCIgYXJpYS1tb2RhbD1cInRydWVcIj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJjbG9zZUJ1dHRvblwiIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtZGlhbG9nLWNsb3NlLWJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJvbkNsb3NlQ2xpY2tlZCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5jbG9zZVwiXHJcbiAgICAgIFt0aXRsZV09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5jbG9zZVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWNhbmNlbFwiPjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWZvY3VzLXpvbmVcIj5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic21lLWRpYWxvZy1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvLXkgc21lLWFycmFuZ2Utb3ZlcmZsb3ctaGlkZS14IHNtZS1mb2N1cy16b25lIHNtZS1sYXlvdXQtcmVzcG9uc2l2ZS16b25lLXhzIHNtZS1kaWFsb2ctY29udGVudC13cmFwcGVyXCI+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1kaWFsb2ctY29udGVudFwiPjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWZvY3VzLXpvbmUgc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtcGFkZGluZy12ZXJ0aWNhbC1zbVwiPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJzbWUtZGlhbG9nLWZvb3RlclwiPjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxzcGFuICpuZ0lmPVwiYXJpYUxhYmVsXCIgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIFtpZF09XCJpZEJhZy5hcmlhTGFiZWxTcGFuXCI+e3thcmlhTGFiZWx9fTwvc3Bhbj5cclxuICA8c3BhbiAqbmdJZj1cImFyaWFEZXNjcmlwdGlvblwiIGNsYXNzPVwic21lLXNjcmVlbi1yZWFkZXJcIiBbaWRdPVwiaWRCYWcuYXJpYURlc2NyaXB0aW9uU3BhblwiPnt7YXJpYURlc2NyaXB0aW9ufX08L3NwYW4+XHJcbjwvc21lLWJhY2tkcm9wPlxyXG4iXX0=
442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUlSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7SUNWekQsaUNBRXNEO0lBRHBELCtLQUFTLGVBQUEsdUJBQWdCLENBQUEsSUFBQztJQUUxQiwwQkFBOEM7SUFDaEQsaUJBQVM7OztJQUZQLHdFQUFtRDtJQUR4Qiw4RUFBNkQ7OztJQVUxRiwrQkFBeUg7SUFDdkgscUJBQW9EO0lBQ3RELGlCQUFNOzs7SUFFUixnQ0FBNkU7SUFBQSxZQUFhO0lBQUEsaUJBQU87OztJQUEvQywrQ0FBMEI7SUFBQyxlQUFhO0lBQWIsc0NBQWE7OztJQUMxRixnQ0FBeUY7SUFBQSxZQUFtQjtJQUFBLGlCQUFPOzs7SUFBM0QscURBQWdDO0lBQUMsZUFBbUI7SUFBbkIsNENBQW1COzs7O0lBdEI5Ryx1Q0FFc0Q7SUFGRiwrS0FBVyx3Q0FBa0IsNEJBQXFCLEdBQUcsRUFBRSxDQUFBLElBQUM7SUFHMUcsOEJBRThHO0lBQzVHLHFGQUlTO0lBQ1QsOEJBQW1E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O0FBQ1ksNEJBQVksR0FBRyxDQUFDLENBQUM7aUdBWHZCLGVBQWU7aUdBQWYsZUFBZTswR0FBZixhQUFTOzs7UUN0RnRCLG9GQXVCZTs7UUF2QkEsa0NBQWE7O0FEeVB4QjtJQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Ozs7Z0RBYVg7dUZBaExRLGVBQWU7Y0FKM0IsU0FBUzsyQkFDSSxZQUFZO29IQXFDTiwwQkFBMEI7a0JBQXpDLEtBQUs7WUFNVSxZQUFZO2tCQUEzQixLQUFLO1lBS1UsVUFBVTtrQkFBekIsS0FBSztZQU1VLGFBQWE7a0JBQTVCLEtBQUs7WUFDVSxTQUFTO2tCQUF4QixLQUFLO1lBQ1UsZUFBZTtrQkFBOUIsS0FBSztZQVFjLFVBQVU7a0JBQTdCLEtBQUs7WUFlSyxVQUFVO2tCQURwQixLQUFLO1lBY1UsVUFBVTtrQkFBekIsS0FBSztZQUtVLFdBQVc7a0JBQTFCLEtBQUs7WUFPVSxpQkFBaUI7a0JBQWhDLEtBQUs7WUFvQ0MsT0FBTztrQkFEYixZQUFZO21CQUFDLHVCQUF1QjtZQTRCOUIsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdDaGVja2VkLFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy9kZWJvdW5jZS5kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgRG9tIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kb20vZG9tJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBDb3JlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9iYXNlLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICpcclxuICogQHNtZURvYyB7QGxhYmVsIERpYWxvZyBAaWQgc21lLWRpYWxvZ31cclxuICpcclxuICogQG92ZXJ2aWV3XHJcbiAqIEBmaWxlIHtAZmlsZXBhdGggLi9leGFtcGxlcy9kaWFsb2ctb3ZlcnZpZXcubWR9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgQmFzaWMgVXNhZ2UgQGlkIGJhc2ljLXVzYWdlfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9kaWFsb2ctZXhhbXBsZS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGlhbG9nLWV4YW1wbGUuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgRGlhbG9nIENoYWluIEBpZCBkaWFsb2ctY2hhaW59XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RpYWxvZy1leGFtcGxlLWRpYWxvZy1jaGFpbi5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGlhbG9nLWV4YW1wbGUtZGlhbG9nLWNoYWluLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIEZ1bGwgU2NyZWVuIERpYWxvZyBAaWQgZnVsbC1zY3JlZW4tZGlhbG9nfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9kaWFsb2ctZXhhbXBsZS1mdWxsLXNjcmVlbi1kaWFsb2cuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RpYWxvZy1leGFtcGxlLWZ1bGwtc2NyZWVuLWRpYWxvZy5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZGlhbG9nLWhlYWRlcicsXHJcbiAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJzbWUtcGFkZGluZy1ob3Jpem9udGFsLWxnIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PidcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ0hlYWRlckNvbXBvbmVudCB7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZGlhbG9nLWNvbnRlbnQnLFxyXG4gICAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nQ29udGVudENvbXBvbmVudCB7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZGlhbG9nLWZvb3RlcicsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJzbWUtbGF5b3V0LWRpYWxvZy1mb290ZXJcIj5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dGb290ZXJDb21wb25lbnQge1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBEaWFsb2dDbG9zZVJlYXNvbiB7XHJcbiAgICBTb2Z0RGlzbWlzcyA9IDAsXHJcbiAgICBDbG9zZUJ1dHRvbiA9IDEsXHJcbiAgICBFc2NhcGVLZXkgPSAyLFxyXG4gICAgQ29tcGV0aW5nRGlhbG9nID0gM1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGlhbG9nTW9kZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBhbmUgPSAncGFuZSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIHdpZGVQYW5lID0gJ3dpZGUtcGFuZSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbXBhY3QgPSAnY29tcGFjdCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbXBhY3RTcXVhcmUgPSAnY29tcGFjdC1zcXVhcmUnO1xyXG4gICAgcHVibGljIHN0YXRpYyBmdWxsc2NyZWVuID0gJ2Z1bGxzY3JlZW4nO1xyXG4gICAgcHVibGljIHN0YXRpYyBjZW50ZXJlZCA9ICdjZW50ZXJlZCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNlbnRlcmVkTWVkaXVtID0gJ2NlbnRlcmVkLW1lZGl1bSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNlbnRlcmVkTGFyZ2UgPSAnY2VudGVyZWQtbGFyZ2UnO1xyXG4gICAgcHVibGljIHN0YXRpYyBub3RpZmljYXRpb24gPSAnbm90aWZpY2F0aW9uJztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG1vZGFsRGlhbG9nID0gJ21vZGFsJztcclxuZXhwb3J0IGNvbnN0IGFsZXJ0RGlhbG9nID0gJ2FsZXJ0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2cuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dDb21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdEaWFsb2dDb21wb25lbnQnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhdGljIGNvbnN0YW50IHRvIHByb3ZpZGUgdW5pcXVlIGlkcyBmb3IgZWFjaCBtYXN0ZXIgdmlld1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBuZXh0RGlhbG9nSWQgPSAwO1xyXG4gICAgcHVibGljIGRpYWxvZ0NsYXNzZXM6IHN0cmluZ1tdO1xyXG4gICAgcHVibGljIGRpYWxvZ1JvbGUgPSAnYWxlcnRkaWFsb2cnO1xyXG5cclxuICAgIHB1YmxpYyBzdHJpbmdzID0gTXNmdFNtZS5nZXRTdHJpbmdzPFN0cmluZ3M+KCk7XHJcblxyXG4gICAgcHVibGljIGRpYWxvZ0xldmVsID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYmFnIG9mIGlkcyBnZW5lcmF0ZWQgdXNpbmcgQHNlZSB7bWFzdGVyVmlld0lkfSBhbmQgdGhlIG1hcCByZXR1cm5lZCBmcm9tIEBzZWUge2NyZWF0ZUlkQmFnfVxyXG4gICAgICovXHJcbiAgICBkZWNsYXJlIHB1YmxpYyBpZEJhZzogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHVuaXF1ZSBpZCBvZiB0aGlzIG1hc3RlciB2aWV3LlxyXG4gICAgICogVGhpcyBpcyB1c2VmdWwgd2hlbiBtYXN0ZXJWaWV3cyBuZWVkIHRvIHVzZSBhbiBJRCBidXQgbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBwYWdlLlxyXG4gICAgICogVXNpbmcgdGhpcyBJRCBhcyB0aGUgYmFzaXMgZm9yIHRoZSBjb250cm9scyBpbnRlcm5hbCBJRHMgZ2VuZXJhdGVkIGluIEBzZWUge2NyZWF0ZUlkQmFnfSBrZWVwcyB0aGUgSURzIHVuaXF1ZS5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ0lkOiBudW1iZXI7XHJcbiAgICBwcm90ZWN0ZWQgbW9kZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0byBhbGxvdyBpbnRlcmFjdGlvbiB3aXRoIGVsZW1lbnRzIGZyb20gb3V0c2lkZSB0aGUgZGlhbG9nIGVzcGVjaWFsbHkgdG8gc3VwcG9ydCB0aGUgaG92ZXJpbmcgZXZlbnRzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dCYWNrZ3JvdW5kSW50ZXJhY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSBkaWFsb2cgYmFja2dyb3VuZC4gRmFsc2UgdG8gaGlkZSB0aGUgZGlhbG9nIGNvbnRhaW5lciBhbmQgbWFrZSB0aGUgYmFja2dyb3VuZCB0cmFuc3BhcmVudC5cclxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRoZW4gd2lsbCBiZSBiYXNlZCBvbiB0aGUgZGlhbG9nIGJvZHkuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93QmFja2Ryb3AgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0byBoaWRlIHRoZSBkaWFsb2cgZm9vdGVyLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZUZvb3RlciA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0byBlbmFibGUgdGhlIGZlYXR1cmUgb2YgY2xpY2tpbmcgb3V0c2lkZSBvZiB0aGUgZGlhbG9nIHRvIGNsb3NlIHRoZSBjdXJyZW50IGRpYWxvZy5cclxuICAgICAqIFRydWUgbWVhbnMgY2xpY2tpbmcgb3V0c2lkZSB0aGUgZGlhbG9nIHdpbGwgY2xvc2UgdGhlIGRpYWxvZy4gV2Ugd2FudCB0aGlzIHRvIGJlIHNldCB0byBmYWxzZSB3aGVuIHRoZXJlIGFyZSBmb3JtcyBpbiB0aGUgZGlhbG9nLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY2xpY2tCYWNrZHJvcCA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYXJpYUxhYmVsID0gJyc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYXJpYURlc2NyaXB0aW9uID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhpcyBzaG91bGQgYmUgYW4gYWN0aW9uIHBhbmUgb3IgYSBjZW50ZXJlZCBkaWFsb2dcclxuICAgICAqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgZGlhbG9nTW9kZSBpbnN0ZWFkXHJcbiAgICAgKiBAcGFyYW0gbmV3VmFsdWUgaWYgdHJ1ZSwgdXNlcyBhIGxlZnQgcGFuZSBkaWFsb2csIG90aGVyd2lzZSBhIGNlbnRlcmVkIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2V0IGFjdGlvblBhbmUobmV3VmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dNb2RlID0gRGlhbG9nTW9kZS5wYW5lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nTW9kZSA9IERpYWxvZ01vZGUuY2VudGVyZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldERpYWxvZ01vZGVGcm9tSW5wdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgZGlhbG9nIG1vZGUgdG8gdXNlXHJcbiAgICAgKiBAc2VlIERpYWxvZ01vZGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgZGlhbG9nTW9kZShtb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlhbG9nTW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlhbG9nIHR5cGVzLiBNb3N0bHkgdXNlZCBmb3IgYWNjZXNzaWJpbGl0eS4gVmFsaWQgdmFsdWVzOlxyXG4gICAgICogQHNlZSBtb2RhbERpYWxvZyA9ICdtb2RhbCc7XHJcbiAgICAgKiBAc2VlIGFsZXJ0RGlhbG9nID0gXCJhbGVydFwiO1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZGlhbG9nVHlwZSA9ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGlhbG9nIHNob3VsZCBoYXZlIGEgY2xvc2UgYnV0dG9uIGluIHRvcCByaWdodCBvciBub3RcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGNsb3NlQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wYWN0IGRpYWxvZyBjYW4gYmUgZnVsbCBoZWlnaHQgd2hlbiBkaXNwbGF5aW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBzY3JlZW4uXHJcbiAgICAgKiBJdCBjYW4gYWxzbyBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2NyZWVuIHRoYXQgbmVlZHMgdG8gYmUgaGF2aW5nIHBhZGRpbmdzIHRvIGVhY2ggZGlyZWN0aW9uLlxyXG4gICAgICogVGhpcyBjb21wYWN0RnVsbEhlaWdodCB0byB0cnVlIHdpbGwgYWx3YXlzIGJlIDEwMCUgaGVpZ2h0LiBPdGhlcndpc2UgY3NzIHdvdWxkIGNvbnRyb2wgdGhlIG1heCBoZWlnaHQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjb21wYWN0RnVsbEhlaWdodCA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBjbG9zZVJlcXVlc3RlZDogU3ViamVjdDxEaWFsb2dDbG9zZVJlYXNvbj47XHJcblxyXG4gICAgcHJpdmF0ZSBkb0F1dG9Gb2N1cyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc1Zpc2libGUgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSB2aXNpYmxlO1xyXG4gICAgICAgIHRoaXMuZG9BdXRvRm9jdXMgPSB2aXNpYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1Zpc2libGU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlID0gRGlhbG9nTW9kZS5wYW5lO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgY2xvc2VSZXF1ZXN0ZWQgc3ViamVjdCB0byBub3RpZnkgZGlhbG9ncyB3aGVuIGEgY2xvc2UgaXMgcmVxdWVzdGVkIGFuZCBob3cgaXQgd2FzIHJlcXVlc3RlZCAoRGlhbG9nQ2xvc2VSZWFzb24pXHJcbiAgICAgICAgdGhpcy5jbG9zZVJlcXVlc3RlZCA9IG5ldyBTdWJqZWN0PERpYWxvZ0Nsb3NlUmVhc29uPigpO1xyXG4gICAgICAgIHRoaXMuc2V0RGlhbG9nTW9kZUZyb21JbnB1dCgpO1xyXG5cclxuICAgICAgICAvLyBzZXR1cCBkaWFsb2cgaWQgYW5kIGlkQmFnXHJcbiAgICAgICAgdGhpcy5kaWFsb2dJZCA9IERpYWxvZ0NvbXBvbmVudC5uZXh0RGlhbG9nSWQrKztcclxuICAgICAgICB0aGlzLmlkQmFnID0gdGhpcy5jcmVhdGVJZEJhZygpO1xyXG4gICAgICAgIE1zZnRTbWUuZm9yRWFjaEtleSh0aGlzLmlkQmFnLCAoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaWRCYWdba2V5XSA9IGBkaWFsb2ctJHt0aGlzLmRpYWxvZ0lkLnRvU3RyaW5nKCl9LSR7a2V5fWA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZG9jdW1lbnQ6a2V5dXAuZXNjYXBlIGlzIHVzZWQgc28gdGhhdCBhIGRpYWxvZyBpcyBub3QgY2xvc2VkIHdoZW4gdHJ5aW5nIHRvIGNsb3NlIGEgdG9vbHRpcFxyXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAuZXNjYXBlJylcclxuICAgIHB1YmxpYyBvbktleVVwKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZpc2libGUpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkVzY2FwZVByZXNzZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbmd1bGFyIExpZmUgQ3ljbGUgaG9vayBmb3IgQWZ0ZXIgVmlldyBDaGVja2VkLlxyXG4gICAgICogV2hlbiB0aGUgdmlzaWJpbGl0eSBjaGFuZ2VzLCB3ZSBhcmUgZ29pbmcgdG8gZm9jdXMgb24gdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBoYXMgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5kb0F1dG9Gb2N1cykge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9Gb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBsZXRlZCB0aGUgY2xvc2VSZXF1ZXN0ZWQgc3ViamVjdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVJlcXVlc3RlZC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXV0byBmb2N1cyBvbiBmaXJzdCBlbGVtZW50IHRoYXQgaXMgZm9jdXNhYmxlXHJcbiAgICAgKi9cclxuICAgIEBEZWJvdW5jZSgwKVxyXG4gICAgcHVibGljIGF1dG9Gb2N1cygpIHtcclxuICAgICAgICB0aGlzLmRvQXV0b0ZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBkaWFsb2cgaGFzIGEgbG9hZGluZyB3aGVlbCwgZm9jdXMgZmlyc3QgZ29lcyB0byB0aGUgbG9hZGluZyB3aGVlbCB0aGVuIGdldHMgbG9zdC5cclxuICAgICAgICAgICAgLy8gVE8gYXZvaWQgdGhpcywgd2UgZ2V0IHRoZSBwYXJlbnQgZWxlbWVudCBvciBuYXRpdmUgZWxlbWVudCBvZiB0aGUgZGlhbG9nLCB0aGVuIGdldCB0aGUgZmlyc3RcclxuICAgICAgICAgICAgLy8gZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhhdCBlbGVtZW50XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50IHx8IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IERvbS5nZXRGaXJzdEZvY3VzYWJsZURlc2NlbmRlbnQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdEZvY3VzYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgZmlyc3RGb2N1c2FibGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3dzIHRoZSBkaWFsb2cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIaWRlcyB0aGUgZGlhbG9nLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vdGlmaWVzIGNsb3NlUmVxdWVzdGVkIHN1YnNjcmliZXJzIHRoYXQgdGhlIGJhY2tkcm9wIGhhcyBiZWVuIGNsaWNrZWQsIHJlcXVlc3RpbmcgYSBzb2Z0IGRpc21pc3NcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uQmFja2dyb3VuZENsaWNrZWQoKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVJlcXVlc3RlZC5uZXh0KERpYWxvZ0Nsb3NlUmVhc29uLlNvZnREaXNtaXNzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vdGlmaWVzIGNsb3NlUmVxdWVzdGVkIHN1YnNjcmliZXJzIHRoYXQgdGhlIGNsb3NlIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLCByZXF1ZXN0aW5nIGEgY2xvc2UgYnV0dG9uIGRpc21pc3NcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uQ2xvc2VDbGlja2VkKCkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VSZXF1ZXN0ZWQubmV4dChEaWFsb2dDbG9zZVJlYXNvbi5DbG9zZUJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRXNjYXBlUHJlc3NlZCgpIHtcclxuICAgICAgICB0aGlzLmNsb3NlUmVxdWVzdGVkLm5leHQoRGlhbG9nQ2xvc2VSZWFzb24uRXNjYXBlS2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ01vZGVDaGFuZ2UgPSBjaGFuZ2VzWydkaWFsb2dNb2RlJ107XHJcbiAgICAgICAgaWYgKGRpYWxvZ01vZGVDaGFuZ2UgJiYgZGlhbG9nTW9kZUNoYW5nZS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXREaWFsb2dNb2RlRnJvbUlucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXREaWFsb2dNb2RlRnJvbUlucHV0KCkge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5kaWFsb2dNb2RlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbJ3NtZS1sYXlvdXQtYWJzb2x1dGUnLCAnc21lLXNjaGVtZS1kaWFsb2cnLCAnc21lLWFuaW1hdGlvbi10cmFuc2l0aW9uLXdpZHRoLXhzJywgJ3NtZS1yZXNwb25zaXZlLWRpYWxvZyddO1xyXG4gICAgICAgIGNvbnN0IGNvbW1vblBhbmVDbGFzc2VzID0gWydzbWUtcG9zaXRpb24tdmVydGljYWwtbm9uZScsICdzbWUtcG9zaXRpb24tcmlnaHQtbm9uZSddO1xyXG5cclxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUucGFuZSkge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goLi4uY29tbW9uUGFuZUNsYXNzZXMsICdzbWUtbGF5b3V0LWRpYWxvZy1wYW5lJywgJ3NtZS1zaGFkb3ctYWN0aW9uLXBhbmUnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID09PSBEaWFsb2dNb2RlLndpZGVQYW5lKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCguLi5jb21tb25QYW5lQ2xhc3NlcywgJ3NtZS1sYXlvdXQtZGlhbG9nLXdpZGUtcGFuZScsICdzbWUtc2hhZG93LWFjdGlvbi1wYW5lJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuZXdWYWx1ZSA9PT0gRGlhbG9nTW9kZS5jb21wYWN0KSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCguLi5jb21tb25QYW5lQ2xhc3NlcywgJ3NtZS1sYXlvdXQtZGlhbG9nLWNvbXBhY3QnLCAnc21lLXNoYWRvdy1hY3Rpb24tcGFuZScpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb21wYWN0RnVsbEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzbWUtbGF5b3V0LWRpYWxvZy1jb21wYWN0LWZ1bGwtaGVpZ2h0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID09PSBEaWFsb2dNb2RlLmNvbXBhY3RTcXVhcmUpIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzbWUtcG9zaXRpb24tY2VudGVyJywgJ3NtZS1sYXlvdXQtZGlhbG9nLWNlbnRlcmVkJywgJ3NtZS1sYXlvdXQtZGlhbG9nLWNvbXBhY3Qtc3F1YXJlJywgJ3NtZS1zaGFkb3ctZGlhbG9nJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBhY3RGdWxsSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NtZS1sYXlvdXQtZGlhbG9nLWNvbXBhY3QtZnVsbC1oZWlnaHQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUuZnVsbHNjcmVlbikge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goLi4uY29tbW9uUGFuZUNsYXNzZXMsICdzbWUtbGF5b3V0LWRpYWxvZy1mdWxsc2NyZWVuJywgJ3NtZS1zaGFkb3ctYWN0aW9uLXBhbmUnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID09PSBEaWFsb2dNb2RlLmNlbnRlcmVkKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc21lLXBvc2l0aW9uLWNlbnRlcicsICdzbWUtbGF5b3V0LWRpYWxvZy1jZW50ZXJlZCcsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUuY2VudGVyZWRNZWRpdW0pIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzbWUtcG9zaXRpb24tY2VudGVyJywgJ3NtZS1sYXlvdXQtZGlhbG9nLWNlbnRlcmVkLW1lZGl1bScsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUuY2VudGVyZWRMYXJnZSkge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NtZS1wb3NpdGlvbi1jZW50ZXInLCAnc21lLWxheW91dC1kaWFsb2ctY2VudGVyZWQtbGFyZ2UnLCAnc21lLXNoYWRvdy1kaWFsb2cnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID09PSBEaWFsb2dNb2RlLm5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NtZS1wb3NpdGlvbi10b3Atc20nLCAnc21lLXBvc2l0aW9uLXJpZ2h0LXNtJywgJ3NtZS1sYXlvdXQtZGlhbG9nLW5vdGlmaWNhdGlvbicsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdzbWUtYXJyYW5nZS1zdGFjay12JywgJ3NtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8nKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dDbGFzc2VzID0gY2xhc3NlcztcclxuXHJcbiAgICAgICAgLy8gYWNjZXNzaWJpbGl0eVxyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ1R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSb2xlID0gdGhpcy5kaWFsb2dUeXBlID09PSBtb2RhbERpYWxvZyA/ICdkaWFsb2cnIDogJ2FsZXJ0ZGlhbG9nJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBieSBkZWZhdWx0IGNlbnRlcmVkIGRpYWxvZ3MgYXJlIGNvbnNpZGVyZWQgYXMgYWxlcnRzXHJcbiAgICAgICAgICAgIGNvbnN0IGFsZXJ0TW9kZXMgPSBbRGlhbG9nTW9kZS5jZW50ZXJlZCwgRGlhbG9nTW9kZS5jZW50ZXJlZExhcmdlLCBEaWFsb2dNb2RlLmNvbXBhY3RTcXVhcmVdO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JvbGUgPSBhbGVydE1vZGVzLnNvbWUobW9kZSA9PiB0aGlzLmRpYWxvZ01vZGUgPT09IG1vZGUpID8gJ2FsZXJ0ZGlhbG9nJyA6ICdkaWFsb2cnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYXJpYUxhYmVsU3BhbjogJycsXHJcbiAgICAgICAgICAgIGFyaWFEZXNjcmlwdGlvblNwYW46ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWJhY2tkcm9wICpuZ0lmPVwidmlzaWJsZVwiIFtsZXZlbF09XCJkaWFsb2dMZXZlbFwiIChjbGlja2VkKT1cIiEhY2xpY2tCYWNrZHJvcCA/IG9uQmFja2dyb3VuZENsaWNrZWQoKSA6ICcnXCJcclxuICBbc2hvd0JhY2tkcm9wXT1cInNob3dCYWNrZHJvcFwiIFthbGxvd0JhY2tncm91bmRJbnRlcmFjdGlvbl09XCJhbGxvd0JhY2tncm91bmRJbnRlcmFjdGlvblwiXHJcbiAgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lXCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJkaWFsb2dDbGFzc2VzXCIgW2F0dHIucm9sZV09XCJkaWFsb2dSb2xlXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIXZpc2libGVcIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbCA/IGlkQmFnLmFyaWFMYWJlbFNwYW4gOidzbWUtZGlhbG9nLXRpdGxlJ1wiXHJcbiAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImFyaWFEZXNjcmlwdGlvbiA/IGlkQmFnLmFyaWFEZXNjcmlwdGlvblNwYW4gOiAnc21lLWRpYWxvZy1kZXNjJ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCI+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiY2xvc2VCdXR0b25cIiBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWRpYWxvZy1jbG9zZS1idXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwib25DbG9zZUNsaWNrZWQoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uY2xvc2VcIlxyXG4gICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uY2xvc2VcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1jYW5jZWxcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1kaWFsb2ctaGVhZGVyXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0by15IHNtZS1hcnJhbmdlLW92ZXJmbG93LWhpZGUteCBzbWUtZm9jdXMtem9uZSBzbWUtbGF5b3V0LXJlc3BvbnNpdmUtem9uZS14cyBzbWUtZGlhbG9nLWNvbnRlbnQtd3JhcHBlclwiPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJzbWUtZGlhbG9nLWNvbnRlbnRcIj48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhaGlkZUZvb3RlclwiIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtZm9jdXMtem9uZSBzbWUtcGFkZGluZy1ob3Jpem9udGFsLWxnIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtXCI+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1kaWFsb2ctZm9vdGVyXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPHNwYW4gKm5nSWY9XCJhcmlhTGFiZWxcIiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCIgW2lkXT1cImlkQmFnLmFyaWFMYWJlbFNwYW5cIj57e2FyaWFMYWJlbH19PC9zcGFuPlxyXG4gIDxzcGFuICpuZ0lmPVwiYXJpYURlc2NyaXB0aW9uXCIgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIFtpZF09XCJpZEJhZy5hcmlhRGVzY3JpcHRpb25TcGFuXCI+e3thcmlhRGVzY3JpcHRpb259fTwvc3Bhbj5cclxuPC9zbWUtYmFja2Ryb3A+XHJcbiJdfQ==