@tuki-io/tuki-widgets 0.0.219-dev.53 → 0.0.219-dev.55

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 (272) hide show
  1. package/README.md +24 -24
  2. package/contact-center/cc-import/cc-import.module.d.ts +13 -0
  3. package/contact-center/cc-import/cc-import.service.d.ts +85 -0
  4. package/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.d.ts +56 -0
  5. package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.d.ts +77 -0
  6. package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.d.ts +3 -0
  7. package/contact-center/cc-import/constants/cc-import.constants.d.ts +37 -0
  8. package/contact-center/cc-import/mock/cc-import.mock.d.ts +4 -0
  9. package/contact-center/cc-import/types/cc-import.d.ts +73 -0
  10. package/contact-center/cc-import/types/uccx.d.ts +109 -0
  11. package/contact-center/cc-readiness/cc-readiness.module.d.ts +3 -3
  12. package/contact-center/public-api.d.ts +8 -0
  13. package/contact-center/shared/api.endpoints.d.ts +25 -0
  14. package/contact-center/shared/api.service.d.ts +3 -1
  15. package/contact-center/shared/components/card/card.component.d.ts +13 -0
  16. package/contact-center/shared/dcp-api.service.d.ts +15 -0
  17. package/contact-center/shared/shared.module.d.ts +11 -5
  18. package/esm2020/contact-center/cc-import/cc-import.module.mjs +45 -0
  19. package/esm2020/contact-center/cc-import/cc-import.service.mjs +228 -0
  20. package/esm2020/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.mjs +144 -0
  21. package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.mjs +243 -0
  22. package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.mjs +3 -0
  23. package/esm2020/contact-center/cc-import/constants/cc-import.constants.mjs +62 -0
  24. package/esm2020/contact-center/cc-import/mock/cc-import.mock.mjs +78 -0
  25. package/esm2020/contact-center/cc-import/types/cc-import.mjs +2 -0
  26. package/esm2020/contact-center/cc-import/types/uccx.mjs +24 -0
  27. package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +7 -6
  28. package/esm2020/contact-center/cc-readiness/cc-readiness.service.mjs +1 -1
  29. package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +7 -7
  30. package/esm2020/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.mjs +2 -2
  31. package/esm2020/contact-center/public-api.mjs +9 -1
  32. package/esm2020/contact-center/shared/api.endpoints.mjs +26 -1
  33. package/esm2020/contact-center/shared/api.service.mjs +8 -3
  34. package/esm2020/contact-center/shared/components/card/card.component.mjs +24 -0
  35. package/esm2020/contact-center/shared/dcp-api.service.mjs +26 -0
  36. package/esm2020/contact-center/shared/shared.module.mjs +15 -5
  37. package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +3 -3
  38. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +2 -2
  39. package/esm2020/di2mt/widgets/upgrade-overview/cards/pending-activation-users/pending-activation-users.component.mjs +17 -17
  40. package/esm2020/lib/widgets.component.mjs +9 -9
  41. package/esm2020/lib/widgets.module.mjs +1 -1
  42. package/esm2020/lib/widgets.service.mjs +1 -1
  43. package/esm2020/locations/public-api.mjs +1 -1
  44. package/esm2020/locations/src/app.constants.mjs +1 -1
  45. package/esm2020/locations/src/location-confirm-dialog/location-confirm-dialog.component.mjs +3 -3
  46. package/esm2020/locations/src/locations.component.mjs +47 -15
  47. package/esm2020/locations/src/locations.module.mjs +1 -1
  48. package/esm2020/locations/src/material.module.mjs +1 -1
  49. package/esm2020/locations/src/services/api.service.mjs +1 -1
  50. package/esm2020/locations/src/services/locations.service.mjs +1 -1
  51. package/esm2020/locations/src/types/location.mjs +1 -1
  52. package/esm2020/locations/src/utils/app-loader/app-loader.mjs +3 -3
  53. package/esm2020/meetings/src/app.constants.mjs +1 -1
  54. package/esm2020/meetings/src/components/live-meetings/live-meetings.component.mjs +3 -3
  55. package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +3 -3
  56. package/esm2020/meetings/src/meetings.component.mjs +3 -3
  57. package/esm2020/meetings/src/meetings.module.mjs +1 -1
  58. package/esm2020/meetings/src/services/live-meetings.service.mjs +1 -1
  59. package/esm2020/meetings/src/services/meeting-spaces.service.mjs +1 -1
  60. package/esm2020/meetings/src/types/live-meeting.mjs +1 -1
  61. package/esm2020/meetings/src/types/meeting-space.mjs +1 -1
  62. package/esm2020/meetings/src/utils/app-loader/app-loader.mjs +3 -3
  63. package/esm2020/public-api.mjs +1 -1
  64. package/esm2020/user-creation/src/app.constants.mjs +1 -1
  65. package/esm2020/user-creation/src/classes/notification.mjs +1 -1
  66. package/esm2020/user-creation/src/classes/site.mjs +1 -1
  67. package/esm2020/user-creation/src/environments/environment.mjs +1 -1
  68. package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +1 -1
  69. package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +3 -3
  70. package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +1 -1
  71. package/esm2020/user-creation/src/shared/services/notification.service.mjs +1 -1
  72. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +1 -1
  73. package/esm2020/user-creation/src/shared/services/utils.mjs +1 -1
  74. package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +3 -3
  75. package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +1 -1
  76. package/esm2020/user-creation/src/utils/device-default-prefix.mjs +1 -1
  77. package/esm2020/user-creation/src/utils/device-name-dynamic-tokens.mjs +1 -1
  78. package/esm2020/user-creation/src/utils/device-name-validation.mjs +1 -1
  79. package/esm2020/user-creation/src/utils/model.mjs +1 -1
  80. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +1 -1
  81. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +3 -3
  82. package/esm2020/user-device-manage/public-api.mjs +4 -1
  83. package/esm2020/user-device-manage/src/app.constants.mjs +9 -3
  84. package/esm2020/user-device-manage/src/associate-lines/associate-lines.component.mjs +311 -0
  85. package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
  86. package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
  87. package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +1 -1
  88. package/esm2020/user-device-manage/src/classes/line-association.mjs +1 -1
  89. package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +1 -1
  90. package/esm2020/user-device-manage/src/classes/line-directory.mjs +1 -1
  91. package/esm2020/user-device-manage/src/classes/line.mjs +1 -1
  92. package/esm2020/user-device-manage/src/classes/notification.mjs +1 -1
  93. package/esm2020/user-device-manage/src/classes/recording-options.mjs +1 -1
  94. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
  95. package/esm2020/user-device-manage/src/classes/site-defaults.mjs +1 -1
  96. package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +1 -1
  97. package/esm2020/user-device-manage/src/classes/types.mjs +1 -1
  98. package/esm2020/user-device-manage/src/common-functions.mjs +1 -1
  99. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +3 -3
  100. package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +3 -3
  101. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +3 -3
  102. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +3 -3
  103. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +1 -1
  104. package/esm2020/user-device-manage/src/device-info/device-info.component.mjs +3 -3
  105. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +34 -17
  106. package/esm2020/user-device-manage/src/device-settings/device-settings.component.mjs +207 -0
  107. package/esm2020/user-device-manage/src/environments/environment.mjs +1 -1
  108. package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +1 -1
  109. package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  110. package/esm2020/user-device-manage/src/line-key-config/line-key-config.component.mjs +401 -0
  111. package/esm2020/user-device-manage/src/material.module.mjs +1 -1
  112. package/esm2020/user-device-manage/src/notifications/notification.component.mjs +3 -3
  113. package/esm2020/user-device-manage/src/pipes/mac-address.pipe.mjs +1 -1
  114. package/esm2020/user-device-manage/src/services/api.service.mjs +1 -1
  115. package/esm2020/user-device-manage/src/services/device.service.mjs +32 -2
  116. package/esm2020/user-device-manage/src/services/dns.service.mjs +1 -1
  117. package/esm2020/user-device-manage/src/services/line.service.mjs +1 -1
  118. package/esm2020/user-device-manage/src/services/notification.service.mjs +1 -1
  119. package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  120. package/esm2020/user-device-manage/src/services/site-settings.service.mjs +1 -1
  121. package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +1 -1
  122. package/esm2020/user-device-manage/src/services/user.service.mjs +34 -6
  123. package/esm2020/user-device-manage/src/services/utils.service.mjs +1 -1
  124. package/esm2020/user-device-manage/src/services/validation.service.mjs +1 -1
  125. package/esm2020/user-device-manage/src/user-device-manage.module.mjs +19 -4
  126. package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +3 -3
  127. package/esm2020/user-manage/public-api.mjs +1 -1
  128. package/esm2020/user-manage/src/app.constants.mjs +1 -1
  129. package/esm2020/user-manage/src/classes/device.mjs +1 -1
  130. package/esm2020/user-manage/src/classes/line-association-interface.mjs +1 -1
  131. package/esm2020/user-manage/src/classes/line-association.mjs +1 -1
  132. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +1 -1
  133. package/esm2020/user-manage/src/classes/line-directory.mjs +1 -1
  134. package/esm2020/user-manage/src/classes/line.mjs +1 -1
  135. package/esm2020/user-manage/src/classes/notification.mjs +1 -1
  136. package/esm2020/user-manage/src/classes/pagination.mjs +1 -1
  137. package/esm2020/user-manage/src/classes/recording-options.mjs +1 -1
  138. package/esm2020/user-manage/src/classes/simplified-user.mjs +1 -1
  139. package/esm2020/user-manage/src/classes/table-data.mjs +1 -1
  140. package/esm2020/user-manage/src/classes/translation-pattern.mjs +1 -1
  141. package/esm2020/user-manage/src/classes/user-list.mjs +1 -1
  142. package/esm2020/user-manage/src/common-functions.mjs +1 -1
  143. package/esm2020/user-manage/src/device-list/device-list.component.mjs +3 -3
  144. package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +3 -3
  145. package/esm2020/user-manage/src/environments/environment.mjs +1 -1
  146. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +1 -1
  147. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  148. package/esm2020/user-manage/src/material.module.mjs +1 -1
  149. package/esm2020/user-manage/src/notifications/notification.component.mjs +3 -3
  150. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +1 -1
  151. package/esm2020/user-manage/src/services/api.service.mjs +1 -1
  152. package/esm2020/user-manage/src/services/dcp-api.service.mjs +1 -1
  153. package/esm2020/user-manage/src/services/dns.service.mjs +1 -1
  154. package/esm2020/user-manage/src/services/line.service.mjs +1 -1
  155. package/esm2020/user-manage/src/services/notification.service.mjs +1 -1
  156. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  157. package/esm2020/user-manage/src/services/site-settings.service.mjs +1 -1
  158. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +1 -1
  159. package/esm2020/user-manage/src/services/user.service.mjs +1 -1
  160. package/esm2020/user-manage/src/services/utils.service.mjs +1 -1
  161. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +3 -3
  162. package/esm2020/user-manage/src/user-info/user-info.component.mjs +3 -3
  163. package/esm2020/user-manage/src/user-manage-widget.component.mjs +2 -2
  164. package/esm2020/user-manage/src/user-manage.module.mjs +1 -1
  165. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +3 -3
  166. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +3 -3
  167. package/esm2020/users-list/public-api.mjs +1 -1
  168. package/esm2020/users-list/src/app.constants.mjs +1 -1
  169. package/esm2020/users-list/src/classes/app-location.mjs +1 -1
  170. package/esm2020/users-list/src/classes/device.mjs +1 -1
  171. package/esm2020/users-list/src/classes/line.mjs +1 -1
  172. package/esm2020/users-list/src/classes/move-user.mjs +1 -1
  173. package/esm2020/users-list/src/classes/notification.mjs +1 -1
  174. package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
  175. package/esm2020/users-list/src/classes/table-data.mjs +1 -1
  176. package/esm2020/users-list/src/classes/user-list.mjs +1 -1
  177. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
  178. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +3 -3
  179. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +3 -3
  180. package/esm2020/users-list/src/services/api-webex.service.mjs +1 -1
  181. package/esm2020/users-list/src/services/api.service.mjs +1 -1
  182. package/esm2020/users-list/src/services/dns.service.mjs +1 -1
  183. package/esm2020/users-list/src/services/events-communication.service.mjs +1 -1
  184. package/esm2020/users-list/src/services/notification.service.mjs +1 -1
  185. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +1 -1
  186. package/esm2020/users-list/src/services/site-settings.service.mjs +1 -1
  187. package/esm2020/users-list/src/services/user.service.mjs +1 -1
  188. package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
  189. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +3 -3
  190. package/esm2020/users-list/src/utils/common-functions.mjs +1 -1
  191. package/esm2020/users-list/src/utils/notifications/notification.component.mjs +3 -3
  192. package/esm2020/users-list/src/utils/utils.service.mjs +1 -1
  193. package/esm2020/workspaces/public-api.mjs +1 -1
  194. package/esm2020/workspaces/src/app.constants.mjs +1 -1
  195. package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +17 -4
  196. package/esm2020/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.mjs +66 -0
  197. package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +3 -3
  198. package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +6 -3
  199. package/esm2020/workspaces/src/material.module.mjs +1 -1
  200. package/esm2020/workspaces/src/services/api.service.mjs +1 -1
  201. package/esm2020/workspaces/src/services/workspace-detail.service.mjs +43 -1
  202. package/esm2020/workspaces/src/services/workspaces-migration.service.mjs +1 -1
  203. package/esm2020/workspaces/src/services/workspaces.service.mjs +2 -1
  204. package/esm2020/workspaces/src/types/workspace.mjs +1 -1
  205. package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +3 -3
  206. package/esm2020/workspaces/src/utils/device-icon.mjs +1 -1
  207. package/esm2020/workspaces/src/workspaces.component.mjs +8 -8
  208. package/esm2020/workspaces/src/workspaces.module.mjs +4 -1
  209. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +999 -128
  210. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  211. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  212. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  213. package/fesm2015/tuki-io-tuki-widgets-locations.mjs +51 -18
  214. package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -1
  215. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +8 -8
  216. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs.map +1 -1
  217. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +6 -6
  218. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  219. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +1029 -51
  220. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  221. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  222. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  223. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +12 -12
  224. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  225. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +151 -25
  226. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
  227. package/fesm2015/tuki-io-tuki-widgets.mjs +8 -8
  228. package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
  229. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +990 -128
  230. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  231. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  232. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  233. package/fesm2020/tuki-io-tuki-widgets-locations.mjs +50 -18
  234. package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -1
  235. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +8 -8
  236. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs.map +1 -1
  237. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +6 -6
  238. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  239. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +1012 -50
  240. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  241. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  242. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  243. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +12 -12
  244. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  245. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +142 -25
  246. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
  247. package/fesm2020/tuki-io-tuki-widgets.mjs +8 -8
  248. package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
  249. package/locations/src/locations.component.d.ts +7 -4
  250. package/locations/src/services/locations.service.d.ts +1 -0
  251. package/locations/src/types/location.d.ts +1 -0
  252. package/package.json +1 -1
  253. package/user-device-manage/public-api.d.ts +3 -0
  254. package/user-device-manage/src/app.constants.d.ts +6 -0
  255. package/user-device-manage/src/associate-lines/associate-lines.component.d.ts +95 -0
  256. package/user-device-manage/src/classes/device.d.ts +15 -0
  257. package/user-device-manage/src/classes/deviceProfile.d.ts +5 -0
  258. package/user-device-manage/src/device-associated-line/device-associated-line.component.d.ts +1 -0
  259. package/user-device-manage/src/device-manage-widget.component.d.ts +6 -1
  260. package/user-device-manage/src/device-settings/device-settings.component.d.ts +53 -0
  261. package/user-device-manage/src/line-key-config/line-key-config.component.d.ts +84 -0
  262. package/user-device-manage/src/services/device.service.d.ts +6 -1
  263. package/user-device-manage/src/services/user.service.d.ts +2 -1
  264. package/user-device-manage/src/user-device-manage.module.d.ts +10 -7
  265. package/workspaces/src/components/workspace-detail/workspace-detail.component.d.ts +6 -1
  266. package/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.d.ts +25 -0
  267. package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +1 -0
  268. package/workspaces/src/services/workspace-detail.service.d.ts +2 -0
  269. package/workspaces/src/types/workspace.d.ts +19 -0
  270. package/workspaces/src/workspaces.module.d.ts +8 -7
  271. package/contact-center/cc-readiness/components/card/card.component.d.ts +0 -6
  272. package/esm2020/contact-center/cc-readiness/components/card/card.component.mjs +0 -13
@@ -0,0 +1,311 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { moveItemInArray } from '@angular/cdk/drag-drop';
3
+ import { catchError, finalize, map, of, Subject, switchMap, takeUntil } from 'rxjs';
4
+ import { RecordingOptions } from '../classes/device';
5
+ import { RECORDING_MEDIA_SOURCE, STATIC_OPTIONS } from '../app.constants';
6
+ import { InfoDialogComponent } from '../confirm-dialog/info-dialog.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../services/user.service";
9
+ import * as i2 from "../services/api.service";
10
+ import * as i3 from "../services/site-settings.service";
11
+ import * as i4 from "../services/device.service";
12
+ import * as i5 from "../services/line.service";
13
+ import * as i6 from "@angular/material/dialog";
14
+ import * as i7 from "@angular/router";
15
+ import * as i8 from "@angular/common";
16
+ import * as i9 from "@angular/forms";
17
+ import * as i10 from "@angular/cdk/drag-drop";
18
+ import * as i11 from "@angular/material/divider";
19
+ import * as i12 from "@angular/material/tooltip";
20
+ import * as i13 from "@angular/material/slide-toggle";
21
+ import * as i14 from "../utils/app-loader/app-loader";
22
+ export class AssociateLinesComponent {
23
+ constructor(userService, apiService, siteSettingsService, deviceService, lineService, dialog, router) {
24
+ this.userService = userService;
25
+ this.apiService = apiService;
26
+ this.siteSettingsService = siteSettingsService;
27
+ this.deviceService = deviceService;
28
+ this.lineService = lineService;
29
+ this.dialog = dialog;
30
+ this.router = router;
31
+ this.goBack = new EventEmitter();
32
+ this.destroy$ = new Subject();
33
+ this.dataPending = false;
34
+ this.device = null;
35
+ this.hasChanges = false;
36
+ this.expandedOrder = null;
37
+ this.recordingOptions = RecordingOptions;
38
+ this.recordingMediaSources = RECORDING_MEDIA_SOURCE;
39
+ this.recordingProfiles = ['None'];
40
+ this.visualMwiOptions = STATIC_OPTIONS.VISUAL_MWI;
41
+ this.audibleMwiOptions = STATIC_OPTIONS.AUDIBLE_MWI;
42
+ this.ringSettingIdleOptions = STATIC_OPTIONS.RING_SETTING_IDLE;
43
+ this.ringSettingActiveOptions = STATIC_OPTIONS.RING_SETTING_ACTIVE;
44
+ this.pickupAasIdleOptions = STATIC_OPTIONS.CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_IDLE;
45
+ this.pickupAasActiveOptions = STATIC_OPTIONS.CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_ACTIVE;
46
+ this.rows = [];
47
+ this.originRows = [];
48
+ }
49
+ ngOnInit() {
50
+ this.apiService.token = this.token;
51
+ this.apiService.apiUrl = this.host;
52
+ this.loadDevice();
53
+ this.loadRecordingProfiles();
54
+ }
55
+ loadDevice() {
56
+ if (this.userService.userDevice) {
57
+ this.device = this.userService.userDevice;
58
+ this.dataPending = true;
59
+ this.fetchLineSlots()
60
+ .pipe(takeUntil(this.destroy$), finalize(() => this.dataPending = false))
61
+ .subscribe((lineSlots) => this.initRows(lineSlots));
62
+ return;
63
+ }
64
+ this.dataPending = true;
65
+ const deviceType = localStorage.getItem('deviceType') || '';
66
+ this.userService.fetchDIUserDevice(Number(this.siteId), this.userId, deviceType, this.deviceName)
67
+ .pipe(switchMap((device) => {
68
+ this.device = device;
69
+ return this.fetchLineSlots();
70
+ }), takeUntil(this.destroy$), finalize(() => this.dataPending = false))
71
+ .subscribe((lineSlots) => this.initRows(lineSlots));
72
+ }
73
+ fetchLineSlots() {
74
+ const buttonTemplate = this.device?.buttonTemplate;
75
+ if (!buttonTemplate) {
76
+ return of(undefined);
77
+ }
78
+ return this.deviceService.getSlotsByButtonTemplate(Number(this.siteId), buttonTemplate)
79
+ .pipe(map((template) => template?.lineSlots), catchError(() => of(undefined)));
80
+ }
81
+ loadRecordingProfiles() {
82
+ this.siteSettingsService.getRecordingProfile(Number(this.siteId))
83
+ .pipe(takeUntil(this.destroy$))
84
+ .subscribe((profiles) => {
85
+ this.recordingProfiles = ['None', ...(profiles || []).filter(profile => profile !== 'None')];
86
+ });
87
+ }
88
+ initRows(lineSlots) {
89
+ const lines = this.device?.lines || [];
90
+ if (lineSlots?.length) {
91
+ this.rows = lineSlots.map((position) => {
92
+ const line = lines.find((current) => Number(current?.position) === Number(position));
93
+ return this.createRow(position, line);
94
+ });
95
+ }
96
+ else {
97
+ const fallbackLines = lines.length ? lines : [{}, {}, {}];
98
+ this.rows = fallbackLines.map((line, index) => this.createRow(index + 1, line));
99
+ }
100
+ this.originRows = this.rows.map(row => ({ ...row }));
101
+ }
102
+ createRow(order, line) {
103
+ return {
104
+ id: order,
105
+ pkid: line?.pkid || '',
106
+ extension: line?.extension || '',
107
+ routePartitionName: line?.routePartitionName || '',
108
+ order,
109
+ lineNumber: line ? (line?.number || line?.extension || '') : '',
110
+ displayCallerId: line?.displayLabel || '',
111
+ textLabel: line?.textLabel || '',
112
+ e164Mask: line?.e164Mask || '',
113
+ maxNumberOfCalls: 6,
114
+ busyTrigger: 2,
115
+ recordingOption: RecordingOptions.disabled,
116
+ recordingMediaSource: this.recordingMediaSources[0],
117
+ recordingProfile: this.recordingProfiles[0],
118
+ visualMWI: this.visualMwiOptions[0],
119
+ ringSettingIdle: this.ringSettingIdleOptions[0],
120
+ pickupAASIdle: this.pickupAasIdleOptions[0],
121
+ monitorCSS: 'None',
122
+ audibleMWI: this.audibleMwiOptions[0],
123
+ ringSettingActive: this.ringSettingActiveOptions[0],
124
+ pickupAASActive: this.pickupAasActiveOptions[0],
125
+ logMissedCalls: line?.logMissedCall === 'true',
126
+ callerName: line?.callInfoDisplay?.callerName === 'true',
127
+ redirectedNumber: line?.callInfoDisplay?.redirectedNumber === 'true',
128
+ callerNumber: line?.callInfoDisplay?.callerNumber === 'true',
129
+ dialedNumber: line?.callInfoDisplay?.dialedNumber === 'true',
130
+ };
131
+ }
132
+ isRowEditable(row) {
133
+ return !!row.pkid;
134
+ }
135
+ toggleExpanded(row) {
136
+ if (!this.isRowEditable(row)) {
137
+ return;
138
+ }
139
+ this.expandedOrder = this.expandedOrder === row.order ? null : row.order;
140
+ }
141
+ isExpanded(row) {
142
+ return this.expandedOrder === row.order;
143
+ }
144
+ onFieldChange() {
145
+ this.hasChanges = true;
146
+ }
147
+ recordingOptionChanged(row) {
148
+ if (row.recordingOption === RecordingOptions.disabled) {
149
+ row.recordingProfile = this.recordingProfiles[0];
150
+ }
151
+ this.onFieldChange();
152
+ }
153
+ isRecordingProfileDisabled(row) {
154
+ return row.recordingOption === RecordingOptions.disabled;
155
+ }
156
+ drop(event) {
157
+ if (event.previousIndex === event.currentIndex) {
158
+ return;
159
+ }
160
+ const orders = this.rows.map(row => row.order);
161
+ moveItemInArray(this.rows, event.previousIndex, event.currentIndex);
162
+ this.rows.forEach((row, index) => row.order = orders[index]);
163
+ this.hasChanges = true;
164
+ }
165
+ confirmDisassociate(row) {
166
+ if (!this.isRowEditable(row)) {
167
+ return;
168
+ }
169
+ const dialogRef = this.dialog.open(InfoDialogComponent, {
170
+ data: {
171
+ title: 'Disassociate Line',
172
+ message: `Are you sure you want to disassociate line ${row.lineNumber || 'this line'} from device ${this.deviceName || this.device?.name || ''}? The line will also be removed from it's Remote destination profile.`,
173
+ confirmButtonText: 'Disassociate',
174
+ },
175
+ });
176
+ dialogRef.afterClosed()
177
+ .subscribe((confirmed) => {
178
+ if (confirmed) {
179
+ this.disassociateLine(row);
180
+ }
181
+ });
182
+ }
183
+ disassociateLine(row) {
184
+ this.dataPending = true;
185
+ const line = {
186
+ directoryNumber: {
187
+ directoryNumber: row.extension,
188
+ routePartitionName: row.routePartitionName,
189
+ },
190
+ };
191
+ this.lineService.checkLineDeletion(line, Number(this.siteId))
192
+ .pipe(switchMap(() => this.userService.persistUserCache()), takeUntil(this.destroy$), finalize(() => this.dataPending = false))
193
+ .subscribe(() => {
194
+ if (this.expandedOrder === row.order) {
195
+ this.expandedOrder = null;
196
+ }
197
+ this.rows = this.rows.filter(current => current.order !== row.order);
198
+ this.rows.forEach((current, index) => current.order = index + 1);
199
+ this.hasChanges = true;
200
+ });
201
+ }
202
+ onGoBack() {
203
+ const [path] = this.router.url.split('?');
204
+ const segments = path.split('/').filter(Boolean);
205
+ if (segments[segments.length - 2] === 'associate-lines') {
206
+ segments.splice(segments.length - 2, 2);
207
+ }
208
+ else if (segments[segments.length - 1] === 'associate-lines') {
209
+ segments.pop();
210
+ }
211
+ this.router.navigateByUrl('/' + segments.join('/'));
212
+ this.goBack.emit();
213
+ }
214
+ onCancel() {
215
+ this.onGoBack();
216
+ }
217
+ onSave() {
218
+ if (!this.hasChanges) {
219
+ return;
220
+ }
221
+ const body = this.buildUpdateBody();
222
+ if (!body.length) {
223
+ this.hasChanges = false;
224
+ this.onGoBack();
225
+ return;
226
+ }
227
+ this.dataPending = true;
228
+ const deviceName = this.deviceName || this.device?.name || '';
229
+ this.deviceService.putDeviceFields(Number(this.siteId), deviceName, this.userService.userToken, body)
230
+ .pipe(switchMap(() => this.userService.persistUserCache()), takeUntil(this.destroy$), finalize(() => this.dataPending = false))
231
+ .subscribe(() => {
232
+ this.originRows = this.rows.map(row => ({ ...row }));
233
+ this.hasChanges = false;
234
+ this.onGoBack();
235
+ });
236
+ }
237
+ buildUpdateBody() {
238
+ const body = [];
239
+ this.rows.forEach(row => {
240
+ if (!row.pkid) {
241
+ return;
242
+ }
243
+ const originRow = this.originRows.find(orig => orig.id === row.id);
244
+ if (!originRow) {
245
+ return;
246
+ }
247
+ if (row.order !== originRow.order) {
248
+ body.push(`device.lineAssociations.${row.pkid}.position=${row.order}`);
249
+ }
250
+ Object.keys(AssociateLinesComponent.FIELD_MAP).forEach(rowField => {
251
+ const currentValue = row[rowField];
252
+ const originValue = originRow[rowField];
253
+ if (currentValue === originValue) {
254
+ return;
255
+ }
256
+ const cucmField = AssociateLinesComponent.FIELD_MAP[rowField];
257
+ const value = AssociateLinesComponent.BOOLEAN_FIELDS.has(rowField) ? String(!!currentValue) : currentValue;
258
+ body.push(`device.lineAssociations.${row.pkid}.${cucmField}=${value}`);
259
+ });
260
+ });
261
+ return body;
262
+ }
263
+ ngOnDestroy() {
264
+ this.destroy$.next();
265
+ this.destroy$.complete();
266
+ }
267
+ }
268
+ AssociateLinesComponent.FIELD_MAP = {
269
+ displayCallerId: 'displayLabel',
270
+ textLabel: 'textLabel',
271
+ e164Mask: 'e164Mask',
272
+ maxNumberOfCalls: 'maxNumberOfCalls',
273
+ busyTrigger: 'busyTrigger',
274
+ recordingOption: 'recordingOption',
275
+ recordingMediaSource: 'recordingMediaSource',
276
+ recordingProfile: 'recordingProfile',
277
+ visualMWI: 'visualMWI',
278
+ ringSettingIdle: 'ringSetting_idle',
279
+ pickupAASIdle: 'pickupAAS_idle',
280
+ monitorCSS: 'monitorCSS',
281
+ audibleMWI: 'audibleMWI',
282
+ ringSettingActive: 'ringSetting_active',
283
+ pickupAASActive: 'pickupAAS_active',
284
+ logMissedCalls: 'logMissedCall',
285
+ callerName: 'callInfoDisplay.callerName',
286
+ redirectedNumber: 'callInfoDisplay.redirectedNumber',
287
+ callerNumber: 'callInfoDisplay.callerNumber',
288
+ dialedNumber: 'callInfoDisplay.dialedNumber',
289
+ };
290
+ AssociateLinesComponent.BOOLEAN_FIELDS = new Set([
291
+ 'logMissedCalls', 'callerName', 'redirectedNumber', 'callerNumber', 'dialedNumber',
292
+ ]);
293
+ AssociateLinesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AssociateLinesComponent, deps: [{ token: i1.UserService }, { token: i2.APIService }, { token: i3.SiteSettingsService }, { token: i4.DeviceService }, { token: i5.LineService }, { token: i6.MatDialog }, { token: i7.Router }], target: i0.ɵɵFactoryTarget.Component });
294
+ AssociateLinesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AssociateLinesComponent, selector: "app-associate-lines", inputs: { token: "token", host: "host", siteId: "siteId", userId: "userId", deviceName: "deviceName" }, outputs: { goBack: "goBack" }, ngImport: i0, template: "<app-loader *ngIf=\"dataPending\"></app-loader>\r\n\r\n<div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">Device General Info</span>\r\n </div>\r\n</div>\r\n\r\n<div class=\"associate-lines\" >\r\n <div class=\"panel-header\">\r\n <span class=\"panel-header__title\">Associate Lines</span>\r\n </div>\r\n\r\n <div class=\"panel-body\">\r\n <div class=\"panel-card\">\r\n\r\n <p class=\"step-description\">\r\n The users and workspaces that appear on this phone are displayed below in the order of appearance.\r\n Lines must be configured sequentially.\r\n </p>\r\n\r\n <div class=\"lines-list\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n <ng-container *ngFor=\"let row of rows\">\r\n\r\n <div class=\"line-row\" cdkDrag [class.expanded]=\"isExpanded(row)\">\r\n <div class=\"line-row__header\">\r\n <div class=\"line-row__main\">\r\n <i class=\"icon dragger-icon rem1\" cdkDragHandle></i>\r\n <span class=\"line-row__order\">{{ row.order }}</span>\r\n <span class=\"line-row__divider\">|</span>\r\n <span class=\"line-row__label\">{{ row.lineNumber ? 'Line ' + row.lineNumber : 'None' }}</span>\r\n </div>\r\n <div class=\"line-row__actions\">\r\n <i class=\"icon delete-icon rem1\" [class.disabled]=\"!isRowEditable(row)\" matTooltip=\"Disassociate line\" (click)=\"confirmDisassociate(row)\"></i>\r\n <i class=\"icon chevron-icon rem1_25\" [class.expanded]=\"isExpanded(row)\" [class.disabled]=\"!isRowEditable(row)\" (click)=\"toggleExpanded(row)\"></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"line-row__details\" *ngIf=\"isExpanded(row)\">\r\n\r\n <div class=\"details-section\">\r\n <div class=\"details-section__title\">Line setting on the device</div>\r\n <div class=\"details-section__body\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Display caller ID</div>\r\n <input type=\"text\" [(ngModel)]=\"row.displayCallerId\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Text label</div>\r\n <input type=\"text\" [(ngModel)]=\"row.textLabel\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">External phone number mask</div>\r\n <input type=\"text\" [(ngModel)]=\"row.e164Mask\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"details-section\">\r\n <div class=\"details-section__title\">Multiple Call/Call Waiting Settings</div>\r\n <div class=\"details-section__body\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Max calls</div>\r\n <input type=\"number\" [(ngModel)]=\"row.maxNumberOfCalls\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Busy trigger</div>\r\n <input type=\"number\" [(ngModel)]=\"row.busyTrigger\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"details-section\">\r\n <div class=\"details-section__title\">Call Recording</div>\r\n <div class=\"details-section__body\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Recording option</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingOption\" (ngModelChange)=\"recordingOptionChanged(row)\">\r\n <option *ngFor=\"let option of recordingOptions | keyvalue\" [value]=\"option.value\">{{ option.value }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Recording media source</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingMediaSource\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let source of recordingMediaSources\" [value]=\"source\">{{ source }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Recording profile</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingProfile\" (ngModelChange)=\"onFieldChange()\" [disabled]=\"isRecordingProfileDisabled(row)\">\r\n <option *ngFor=\"let profile of recordingProfiles\" [value]=\"profile\">{{ profile }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"details-section\">\r\n <div class=\"details-section__title\">Additional Line Settings on the Device</div>\r\n <div class=\"details-section__body\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Visual Message Waiting Indicator Policy</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.visualMWI\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of visualMwiOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Ring Setting (Phone Idle)</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.ringSettingIdle\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of ringSettingIdleOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Call Pickup Group Audio Alert Setting (Phone Idle)</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.pickupAASIdle\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of pickupAasIdleOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Monitoring Calling Search Space</div>\r\n <input type=\"text\" [(ngModel)]=\"row.monitorCSS\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Audible Message Waiting Indicator Policy</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.audibleMWI\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of audibleMwiOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Ring Setting (Phone Active)</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.ringSettingActive\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of ringSettingActiveOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Call Pickup Group AudioAlert Setting (Phone Active)</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.pickupAASActive\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of pickupAasActiveOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Log Missed Calls</div>\r\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.logMissedCalls\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"details-section\">\r\n <div class=\"details-section__title\">Forwarded Call Information Display</div>\r\n <div class=\"details-section__body\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Caller name</div>\r\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.callerName\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Redirected number</div>\r\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.redirectedNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Caller number</div>\r\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.callerNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Dialed number</div>\r\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.dialedNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"disassociate-row\">\r\n <span class=\"link disassociate-link\" (click)=\"confirmDisassociate(row)\">\r\n <i class=\"icon disassociate-icon rem1\"></i>\r\n Disassociate Line\r\n </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"panel-footer\">\r\n <div class=\"panel-footer__actions panel-footer__actions--right\">\r\n <button type=\"button\" class=\"btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"!hasChanges\" (click)=\"onSave()\">Save</button>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";*{margin:0}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center;transition:all .15s ease-out}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-left%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{width:95%;margin:auto;margin-left:.5rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.icon{background-repeat:no-repeat;background-position:center;display:inline-block;background-size:contain}.icon.disabled{opacity:.35;cursor:not-allowed;pointer-events:none}.dragger-icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M13.125 5C12.7935 5 12.4755 4.8683 12.2411 4.63388C12.0067 4.39946 11.875 4.08152 11.875 3.75C11.875 3.41848 12.0067 3.10054 12.2411 2.86612C12.4755 2.6317 12.7935 2.5 13.125 2.5C13.4565 2.5 13.7745 2.6317 14.0089 2.86612C14.2433 3.10054 14.375 3.41848 14.375 3.75C14.375 4.08152 14.2433 4.39946 14.0089 4.63388C13.7745 4.8683 13.4565 5 13.125 5ZM6.875 5C6.54348 5 6.22554 4.8683 5.99112 4.63388C5.7567 4.39946 5.625 4.08152 5.625 3.75C5.625 3.41848 5.7567 3.10054 5.99112 2.86612C6.22554 2.6317 6.54348 2.5 6.875 2.5C7.20652 2.5 7.52446 2.6317 7.75888 2.86612C7.9933 3.10054 8.125 3.41848 8.125 3.75C8.125 4.08152 7.9933 4.39946 7.75888 4.63388C7.52446 4.8683 7.20652 5 6.875 5ZM13.125 11.25C12.7935 11.25 12.4755 11.1183 12.2411 10.8839C12.0067 10.6495 11.875 10.3315 11.875 10C11.875 9.66848 12.0067 9.35054 12.2411 9.11612C12.4755 8.8817 12.7935 8.75 13.125 8.75C13.4565 8.75 13.7745 8.8817 14.0089 9.11612C14.2433 9.35054 14.375 9.66848 14.375 10C14.375 10.3315 14.2433 10.6495 14.0089 10.8839C13.7745 11.1183 13.4565 11.25 13.125 11.25ZM6.875 11.25C6.54348 11.25 6.22554 11.1183 5.99112 10.8839C5.7567 10.6495 5.625 10.3315 5.625 10C5.625 9.66848 5.7567 9.35054 5.99112 9.11612C6.22554 8.8817 6.54348 8.75 6.875 8.75C7.20652 8.75 7.52446 8.8817 7.75888 9.11612C7.9933 9.35054 8.125 9.66848 8.125 10C8.125 10.3315 7.9933 10.6495 7.75888 10.8839C7.52446 11.1183 7.20652 11.25 6.875 11.25ZM13.125 17.5C12.7935 17.5 12.4755 17.3683 12.2411 17.1339C12.0067 16.8995 11.875 16.5815 11.875 16.25C11.875 15.9185 12.0067 15.6005 12.2411 15.3661C12.4755 15.1317 12.7935 15 13.125 15C13.4565 15 13.7745 15.1317 14.0089 15.3661C14.2433 15.6005 14.375 15.9185 14.375 16.25C14.375 16.5815 14.2433 16.8995 14.0089 17.1339C13.7745 17.3683 13.4565 17.5 13.125 17.5ZM6.875 17.5C6.54348 17.5 6.22554 17.3683 5.99112 17.1339C5.7567 16.8995 5.625 16.5815 5.625 16.25C5.625 15.9185 5.7567 15.6005 5.99112 15.3661C6.22554 15.1317 6.54348 15 6.875 15C7.20652 15 7.52446 15.1317 7.75888 15.3661C7.9933 15.6005 8.125 15.9185 8.125 16.25C8.125 16.5815 7.9933 16.8995 7.75888 17.1339C7.52446 17.3683 7.20652 17.5 6.875 17.5Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fsvg%3E%0D\");cursor:grab}.delete-icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22Icon%2FDelete%22%3E%0D%3Cpath id%3D%22Remove all%22 d%3D%22M9.5835 1.96973C10.9439 1.96973 12.0528 3.09413 12.1036 4.50119L12.1054 4.60217H15.2853C15.588 4.60217 15.8335 4.85838 15.8335 5.17444C15.8335 5.47074 15.6178 5.71444 15.3413 5.74375L15.2853 5.7467H14.8067L14.0597 16.0795C13.9864 17.0944 13.176 17.8788 12.201 17.8788H6.966C5.99094 17.8788 5.18064 17.0944 5.10725 16.0795L4.35981 5.7467H3.88174C3.59788 5.7467 3.3644 5.52152 3.33633 5.23295L3.3335 5.17444C3.3335 4.87813 3.54923 4.63443 3.82569 4.60512L3.88174 4.60217H7.06157C7.06157 3.14831 8.19067 1.96973 9.5835 1.96973ZM13.7072 5.7467L5.45977 5.7467L6.20064 15.9934C6.23085 16.4113 6.56451 16.7343 6.966 16.7343H12.201C12.6025 16.7343 12.9361 16.4113 12.9664 15.9934L13.7072 5.7467ZM11.0089 8.15024C11.2928 8.15024 11.5263 8.37542 11.5543 8.66399L11.5572 8.72251V13.7585C11.5572 14.0745 11.3117 14.3307 11.0089 14.3307C10.7251 14.3307 10.4916 14.1056 10.4635 13.817L10.4607 13.7585L10.4607 8.72251C10.4607 8.40645 10.7061 8.15024 11.0089 8.15024ZM8.15806 8.15024C8.44192 8.15024 8.6754 8.37542 8.70347 8.66399L8.7063 8.72251L8.7063 13.7585C8.7063 14.0745 8.46084 14.3307 8.15806 14.3307C7.87419 14.3307 7.64072 14.1056 7.61264 13.817L7.60981 13.7585L7.60981 8.72251C7.60981 8.40645 7.85527 8.15024 8.15806 8.15024ZM9.5835 3.11427C8.82339 3.11427 8.20225 3.73527 8.16031 4.51773L8.15806 4.60217L11.0089 4.60217C11.0089 3.78042 10.3707 3.11427 9.5835 3.11427Z%22 fill%3D%22%23737480%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\");cursor:pointer}.chevron-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22m22.53 15.47-12-12a.75.75 0 1 0-1.06 1.06L20.94 16 9.47 27.47a.75.75 0 1 0 1.06 1.06l12-12a.75.75 0 0 0 0-1.06%22%2F%3E%3C%2Fsvg%3E\");cursor:pointer;transition:transform .15s ease-in-out}.chevron-icon.expanded{transform:rotate(-90deg)}.disassociate-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 height%3D%2224px%22 viewBox%3D%220 0 24 24%22 width%3D%2224px%22 fill%3D%22%23000000%22%3E%3Cpath d%3D%22M0 0h24v24H0V0z%22 fill%3D%22none%22%2F%3E%3Cpath d%3D%22M17 7h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1 0 1.43-.98 2.63-2.31 2.98l1.46 1.46C20.88 15.61 22 13.95 22 12c0-2.76-2.24-5-5-5zm-1 4h-2.19l2 2H16zM2 4.27l3.11 3.11C3.29 8.12 2 9.91 2 12c0 2.76 2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1 0-1.59 1.21-2.9 2.76-3.07L8.73 11H8v2h2.73L13 15.27V17h1.73l4.01 4L20 19.74 3.27 3 2 4.27z%22%2F%3E%3Cpath d%3D%22M0 24V0%22 fill%3D%22none%22%2F%3E%3C%2Fsvg%3E\");cursor:pointer}.close-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22m17.06 16 8.47-8.47a.75.75 0 0 0-.242-1.224.75.75 0 0 0-.819.163L16 14.94 7.53 6.47A.75.75 0 1 0 6.47 7.53L14.94 16l-8.47 8.47a.75.75 0 0 0 1.06 1.06L16 17.06l8.47 8.47a.75.75 0 1 0 1.06-1.06z%22%2F%3E%3C%2Fsvg%3E\");filter:brightness(0) invert(1);cursor:pointer}.rem1{height:1rem;width:1rem;vertical-align:middle}.rem1_25{height:1.25rem;width:1.25rem;vertical-align:middle}.text-description{font-size:.875rem;font-weight:400}.associate-lines{display:flex;flex-direction:column;min-height:100%;background:#F3F6F6;font-family:Poppins,Poppins,sans-serif}.breadcrumb-bar{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1.5rem;background:#ffffff}.breadcrumb-bar .breadcrumb-title{font-size:.875rem;font-weight:500;color:#0d56aa}.breadcrumb-bar .code-icon{font-family:Courier New,monospace;font-size:.875rem;font-weight:700;color:#0d56aa;cursor:pointer}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:linear-gradient(90deg,#0d56aa,#0d56ab)}.panel-header__title{font-size:1rem;font-weight:500;font-family:Poppins,Poppins,sans-serif;color:#fff}.panel-body{flex:1;padding:2rem 1.5rem}.panel-card{max-width:56rem;margin:0 auto;display:flex;flex-direction:column;gap:1rem;padding:2rem;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;background:#ffffff}.step-description{font-size:.875rem;color:#333}.link{color:#0d56aa;cursor:pointer}.link:hover{text-decoration:underline}.lines-list{display:flex;flex-direction:column;border-radius:4px;overflow:hidden;gap:1rem}.line-row{display:flex;flex-direction:column;background:#ffffff;border:1px solid rgba(0,0,0,.2);border-radius:8px}.line-row.cdk-drag-preview{box-shadow:0 5px 10px #0003}.line-row.cdk-drag-placeholder{opacity:.4}.line-row__header{display:flex;align-items:center;justify-content:space-between;padding:.625rem 1rem}.line-row__header:hover{background:#fafafa;border-radius:8px}.line-row__main{display:flex;align-items:center;gap:.75rem}.line-row__order{font-size:.875rem;color:#000000f2;min-width:1rem;margin-right:100px}.line-row__divider{color:#333}.line-row__label{font-size:.875rem;color:#000000f2}.line-row__actions{display:flex;align-items:center;gap:1rem}.line-row__details{display:flex;flex-direction:column;gap:1rem;padding:0 1rem 1.5rem 3rem;border-top:1px solid #e8e8e8}.details-section{display:flex;gap:1.5rem;padding:1rem 0}.details-section__title{width:9.5rem;flex-shrink:0;font-size:.875rem;font-weight:600;color:#000000f2}.details-section__body{flex:1;min-width:0;display:flex;flex-direction:column}.details-section__body .mat-divider{border-top-color:#e8e8e8!important}.input-holder{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;min-height:2rem}.input-holder.input-holder-top{padding-top:.75rem}.input-holder.input-holder-bottom{padding-bottom:.75rem}.input-holder.input-holder-top-bottom{padding:.75rem 0}.input-holder__name{width:12rem;flex-shrink:0;font-size:.75rem;color:#333}.input-holder input{flex:1;min-width:0;height:21px;padding:4px 12px;box-sizing:content-box;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843);border-radius:8px;font-family:inherit;font-size:.875rem;color:#000000f2}.input-holder input:focus{outline:none;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59}.input-holder__select-wrap{position:relative;display:flex;align-items:center;flex:1;min-width:0}.input-holder__select-wrap .input-holder__select{width:100%;appearance:none;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:6px;font-family:inherit;font-size:.8125rem;color:#000000f2;cursor:pointer;height:21px;padding:4px 28px 4px 12px;box-sizing:content-box}.input-holder__select-wrap .input-holder__select:hover{background-color:#0000001f!important}.input-holder__select-wrap .input-holder__select:focus{outline:none;color:#000000b3;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59}.input-holder__select-wrap .input-holder__select:disabled{background:#f5f5f5!important;color:#babcc5;cursor:not-allowed}.input-holder__select-wrap .input-holder__select-icon{position:absolute;right:.5rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.disassociate-row{display:flex;justify-content:flex-end;padding-top:1rem}.disassociate-link{display:inline-flex;align-items:center;gap:.375rem;font-size:.875rem;font-weight:500}.btn-outline,.btn-filled{padding:.313rem .75rem;border-radius:50px;font-weight:500;font-size:.875rem;font-family:Poppins,Poppins,sans-serif;cursor:pointer;transition:background-color .1s ease-in-out;white-space:nowrap}.btn-outline{background:#ffffff;border:1px solid rgba(0,0,0,.2);color:#0006}.btn-outline:hover:not(:disabled){background:#f5f5f5}.btn-outline:disabled{color:#babcc5;border-color:#dfe3e7;cursor:not-allowed}.btn-filled{background:rgba(0,0,0,.9490196078);color:#fff;border:1px solid transparent}.btn-filled:hover:not(:disabled){background:#2a2a2a}.btn-filled:disabled{background:#DFE3E7;color:#babcc5;cursor:not-allowed}.panel-footer{position:sticky;bottom:0;background:#ffffff;border-top:1px solid rgba(0,0,0,.2);padding:1rem 1.5rem}.panel-footer__actions{display:flex;justify-content:flex-end;gap:.75rem;max-width:56rem;margin:0 auto}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-bar{position:relative!important;width:48px!important;height:25px!important;flex-shrink:0!important;border-radius:13px!important;background-color:#ccc!important}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-thumb{height:20px!important;width:20px!important;position:absolute!important;border-radius:50%!important;display:flex!important;align-items:center!important;justify-content:center!important;left:3px!important;top:5px!important;background-color:#fff!important}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px!important;color:#8e9fb7!important;line-height:1!important;display:block!important;pointer-events:none!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa!important;font-weight:700!important;font-size:10px!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i10.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i11.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i13.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i14.AppLoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i8.KeyValuePipe, name: "keyvalue" }] });
295
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AssociateLinesComponent, decorators: [{
296
+ type: Component,
297
+ args: [{ selector: 'app-associate-lines', template: "<app-loader *ngIf=\"dataPending\"></app-loader>\r\n\r\n<div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">Device General Info</span>\r\n </div>\r\n</div>\r\n\r\n<div class=\"associate-lines\" >\r\n <div class=\"panel-header\">\r\n <span class=\"panel-header__title\">Associate Lines</span>\r\n </div>\r\n\r\n <div class=\"panel-body\">\r\n <div class=\"panel-card\">\r\n\r\n <p class=\"step-description\">\r\n The users and workspaces that appear on this phone are displayed below in the order of appearance.\r\n Lines must be configured sequentially.\r\n </p>\r\n\r\n <div class=\"lines-list\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n <ng-container *ngFor=\"let row of rows\">\r\n\r\n <div class=\"line-row\" cdkDrag [class.expanded]=\"isExpanded(row)\">\r\n <div class=\"line-row__header\">\r\n <div class=\"line-row__main\">\r\n <i class=\"icon dragger-icon rem1\" cdkDragHandle></i>\r\n <span class=\"line-row__order\">{{ row.order }}</span>\r\n <span class=\"line-row__divider\">|</span>\r\n <span class=\"line-row__label\">{{ row.lineNumber ? 'Line ' + row.lineNumber : 'None' }}</span>\r\n </div>\r\n <div class=\"line-row__actions\">\r\n <i class=\"icon delete-icon rem1\" [class.disabled]=\"!isRowEditable(row)\" matTooltip=\"Disassociate line\" (click)=\"confirmDisassociate(row)\"></i>\r\n <i class=\"icon chevron-icon rem1_25\" [class.expanded]=\"isExpanded(row)\" [class.disabled]=\"!isRowEditable(row)\" (click)=\"toggleExpanded(row)\"></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"line-row__details\" *ngIf=\"isExpanded(row)\">\r\n\r\n <div class=\"details-section\">\r\n <div class=\"details-section__title\">Line setting on the device</div>\r\n <div class=\"details-section__body\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Display caller ID</div>\r\n <input type=\"text\" [(ngModel)]=\"row.displayCallerId\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Text label</div>\r\n <input type=\"text\" [(ngModel)]=\"row.textLabel\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">External phone number mask</div>\r\n <input type=\"text\" [(ngModel)]=\"row.e164Mask\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"details-section\">\r\n <div class=\"details-section__title\">Multiple Call/Call Waiting Settings</div>\r\n <div class=\"details-section__body\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Max calls</div>\r\n <input type=\"number\" [(ngModel)]=\"row.maxNumberOfCalls\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Busy trigger</div>\r\n <input type=\"number\" [(ngModel)]=\"row.busyTrigger\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"details-section\">\r\n <div class=\"details-section__title\">Call Recording</div>\r\n <div class=\"details-section__body\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Recording option</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingOption\" (ngModelChange)=\"recordingOptionChanged(row)\">\r\n <option *ngFor=\"let option of recordingOptions | keyvalue\" [value]=\"option.value\">{{ option.value }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Recording media source</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingMediaSource\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let source of recordingMediaSources\" [value]=\"source\">{{ source }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Recording profile</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingProfile\" (ngModelChange)=\"onFieldChange()\" [disabled]=\"isRecordingProfileDisabled(row)\">\r\n <option *ngFor=\"let profile of recordingProfiles\" [value]=\"profile\">{{ profile }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"details-section\">\r\n <div class=\"details-section__title\">Additional Line Settings on the Device</div>\r\n <div class=\"details-section__body\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Visual Message Waiting Indicator Policy</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.visualMWI\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of visualMwiOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Ring Setting (Phone Idle)</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.ringSettingIdle\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of ringSettingIdleOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Call Pickup Group Audio Alert Setting (Phone Idle)</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.pickupAASIdle\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of pickupAasIdleOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Monitoring Calling Search Space</div>\r\n <input type=\"text\" [(ngModel)]=\"row.monitorCSS\" (ngModelChange)=\"onFieldChange()\">\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Audible Message Waiting Indicator Policy</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.audibleMWI\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of audibleMwiOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Ring Setting (Phone Active)</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.ringSettingActive\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of ringSettingActiveOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Call Pickup Group AudioAlert Setting (Phone Active)</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" [(ngModel)]=\"row.pickupAASActive\" (ngModelChange)=\"onFieldChange()\">\r\n <option *ngFor=\"let option of pickupAasActiveOptions\" [value]=\"option\">{{ option }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Log Missed Calls</div>\r\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.logMissedCalls\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"details-section\">\r\n <div class=\"details-section__title\">Forwarded Call Information Display</div>\r\n <div class=\"details-section__body\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Caller name</div>\r\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.callerName\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Redirected number</div>\r\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.redirectedNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Caller number</div>\r\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.callerNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Dialed number</div>\r\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.dialedNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"disassociate-row\">\r\n <span class=\"link disassociate-link\" (click)=\"confirmDisassociate(row)\">\r\n <i class=\"icon disassociate-icon rem1\"></i>\r\n Disassociate Line\r\n </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"panel-footer\">\r\n <div class=\"panel-footer__actions panel-footer__actions--right\">\r\n <button type=\"button\" class=\"btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"!hasChanges\" (click)=\"onSave()\">Save</button>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";*{margin:0}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center;transition:all .15s ease-out}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-left%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{width:95%;margin:auto;margin-left:.5rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.icon{background-repeat:no-repeat;background-position:center;display:inline-block;background-size:contain}.icon.disabled{opacity:.35;cursor:not-allowed;pointer-events:none}.dragger-icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M13.125 5C12.7935 5 12.4755 4.8683 12.2411 4.63388C12.0067 4.39946 11.875 4.08152 11.875 3.75C11.875 3.41848 12.0067 3.10054 12.2411 2.86612C12.4755 2.6317 12.7935 2.5 13.125 2.5C13.4565 2.5 13.7745 2.6317 14.0089 2.86612C14.2433 3.10054 14.375 3.41848 14.375 3.75C14.375 4.08152 14.2433 4.39946 14.0089 4.63388C13.7745 4.8683 13.4565 5 13.125 5ZM6.875 5C6.54348 5 6.22554 4.8683 5.99112 4.63388C5.7567 4.39946 5.625 4.08152 5.625 3.75C5.625 3.41848 5.7567 3.10054 5.99112 2.86612C6.22554 2.6317 6.54348 2.5 6.875 2.5C7.20652 2.5 7.52446 2.6317 7.75888 2.86612C7.9933 3.10054 8.125 3.41848 8.125 3.75C8.125 4.08152 7.9933 4.39946 7.75888 4.63388C7.52446 4.8683 7.20652 5 6.875 5ZM13.125 11.25C12.7935 11.25 12.4755 11.1183 12.2411 10.8839C12.0067 10.6495 11.875 10.3315 11.875 10C11.875 9.66848 12.0067 9.35054 12.2411 9.11612C12.4755 8.8817 12.7935 8.75 13.125 8.75C13.4565 8.75 13.7745 8.8817 14.0089 9.11612C14.2433 9.35054 14.375 9.66848 14.375 10C14.375 10.3315 14.2433 10.6495 14.0089 10.8839C13.7745 11.1183 13.4565 11.25 13.125 11.25ZM6.875 11.25C6.54348 11.25 6.22554 11.1183 5.99112 10.8839C5.7567 10.6495 5.625 10.3315 5.625 10C5.625 9.66848 5.7567 9.35054 5.99112 9.11612C6.22554 8.8817 6.54348 8.75 6.875 8.75C7.20652 8.75 7.52446 8.8817 7.75888 9.11612C7.9933 9.35054 8.125 9.66848 8.125 10C8.125 10.3315 7.9933 10.6495 7.75888 10.8839C7.52446 11.1183 7.20652 11.25 6.875 11.25ZM13.125 17.5C12.7935 17.5 12.4755 17.3683 12.2411 17.1339C12.0067 16.8995 11.875 16.5815 11.875 16.25C11.875 15.9185 12.0067 15.6005 12.2411 15.3661C12.4755 15.1317 12.7935 15 13.125 15C13.4565 15 13.7745 15.1317 14.0089 15.3661C14.2433 15.6005 14.375 15.9185 14.375 16.25C14.375 16.5815 14.2433 16.8995 14.0089 17.1339C13.7745 17.3683 13.4565 17.5 13.125 17.5ZM6.875 17.5C6.54348 17.5 6.22554 17.3683 5.99112 17.1339C5.7567 16.8995 5.625 16.5815 5.625 16.25C5.625 15.9185 5.7567 15.6005 5.99112 15.3661C6.22554 15.1317 6.54348 15 6.875 15C7.20652 15 7.52446 15.1317 7.75888 15.3661C7.9933 15.6005 8.125 15.9185 8.125 16.25C8.125 16.5815 7.9933 16.8995 7.75888 17.1339C7.52446 17.3683 7.20652 17.5 6.875 17.5Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fsvg%3E%0D\");cursor:grab}.delete-icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22Icon%2FDelete%22%3E%0D%3Cpath id%3D%22Remove all%22 d%3D%22M9.5835 1.96973C10.9439 1.96973 12.0528 3.09413 12.1036 4.50119L12.1054 4.60217H15.2853C15.588 4.60217 15.8335 4.85838 15.8335 5.17444C15.8335 5.47074 15.6178 5.71444 15.3413 5.74375L15.2853 5.7467H14.8067L14.0597 16.0795C13.9864 17.0944 13.176 17.8788 12.201 17.8788H6.966C5.99094 17.8788 5.18064 17.0944 5.10725 16.0795L4.35981 5.7467H3.88174C3.59788 5.7467 3.3644 5.52152 3.33633 5.23295L3.3335 5.17444C3.3335 4.87813 3.54923 4.63443 3.82569 4.60512L3.88174 4.60217H7.06157C7.06157 3.14831 8.19067 1.96973 9.5835 1.96973ZM13.7072 5.7467L5.45977 5.7467L6.20064 15.9934C6.23085 16.4113 6.56451 16.7343 6.966 16.7343H12.201C12.6025 16.7343 12.9361 16.4113 12.9664 15.9934L13.7072 5.7467ZM11.0089 8.15024C11.2928 8.15024 11.5263 8.37542 11.5543 8.66399L11.5572 8.72251V13.7585C11.5572 14.0745 11.3117 14.3307 11.0089 14.3307C10.7251 14.3307 10.4916 14.1056 10.4635 13.817L10.4607 13.7585L10.4607 8.72251C10.4607 8.40645 10.7061 8.15024 11.0089 8.15024ZM8.15806 8.15024C8.44192 8.15024 8.6754 8.37542 8.70347 8.66399L8.7063 8.72251L8.7063 13.7585C8.7063 14.0745 8.46084 14.3307 8.15806 14.3307C7.87419 14.3307 7.64072 14.1056 7.61264 13.817L7.60981 13.7585L7.60981 8.72251C7.60981 8.40645 7.85527 8.15024 8.15806 8.15024ZM9.5835 3.11427C8.82339 3.11427 8.20225 3.73527 8.16031 4.51773L8.15806 4.60217L11.0089 4.60217C11.0089 3.78042 10.3707 3.11427 9.5835 3.11427Z%22 fill%3D%22%23737480%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\");cursor:pointer}.chevron-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22m22.53 15.47-12-12a.75.75 0 1 0-1.06 1.06L20.94 16 9.47 27.47a.75.75 0 1 0 1.06 1.06l12-12a.75.75 0 0 0 0-1.06%22%2F%3E%3C%2Fsvg%3E\");cursor:pointer;transition:transform .15s ease-in-out}.chevron-icon.expanded{transform:rotate(-90deg)}.disassociate-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 height%3D%2224px%22 viewBox%3D%220 0 24 24%22 width%3D%2224px%22 fill%3D%22%23000000%22%3E%3Cpath d%3D%22M0 0h24v24H0V0z%22 fill%3D%22none%22%2F%3E%3Cpath d%3D%22M17 7h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1 0 1.43-.98 2.63-2.31 2.98l1.46 1.46C20.88 15.61 22 13.95 22 12c0-2.76-2.24-5-5-5zm-1 4h-2.19l2 2H16zM2 4.27l3.11 3.11C3.29 8.12 2 9.91 2 12c0 2.76 2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1 0-1.59 1.21-2.9 2.76-3.07L8.73 11H8v2h2.73L13 15.27V17h1.73l4.01 4L20 19.74 3.27 3 2 4.27z%22%2F%3E%3Cpath d%3D%22M0 24V0%22 fill%3D%22none%22%2F%3E%3C%2Fsvg%3E\");cursor:pointer}.close-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22m17.06 16 8.47-8.47a.75.75 0 0 0-.242-1.224.75.75 0 0 0-.819.163L16 14.94 7.53 6.47A.75.75 0 1 0 6.47 7.53L14.94 16l-8.47 8.47a.75.75 0 0 0 1.06 1.06L16 17.06l8.47 8.47a.75.75 0 1 0 1.06-1.06z%22%2F%3E%3C%2Fsvg%3E\");filter:brightness(0) invert(1);cursor:pointer}.rem1{height:1rem;width:1rem;vertical-align:middle}.rem1_25{height:1.25rem;width:1.25rem;vertical-align:middle}.text-description{font-size:.875rem;font-weight:400}.associate-lines{display:flex;flex-direction:column;min-height:100%;background:#F3F6F6;font-family:Poppins,Poppins,sans-serif}.breadcrumb-bar{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1.5rem;background:#ffffff}.breadcrumb-bar .breadcrumb-title{font-size:.875rem;font-weight:500;color:#0d56aa}.breadcrumb-bar .code-icon{font-family:Courier New,monospace;font-size:.875rem;font-weight:700;color:#0d56aa;cursor:pointer}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:linear-gradient(90deg,#0d56aa,#0d56ab)}.panel-header__title{font-size:1rem;font-weight:500;font-family:Poppins,Poppins,sans-serif;color:#fff}.panel-body{flex:1;padding:2rem 1.5rem}.panel-card{max-width:56rem;margin:0 auto;display:flex;flex-direction:column;gap:1rem;padding:2rem;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;background:#ffffff}.step-description{font-size:.875rem;color:#333}.link{color:#0d56aa;cursor:pointer}.link:hover{text-decoration:underline}.lines-list{display:flex;flex-direction:column;border-radius:4px;overflow:hidden;gap:1rem}.line-row{display:flex;flex-direction:column;background:#ffffff;border:1px solid rgba(0,0,0,.2);border-radius:8px}.line-row.cdk-drag-preview{box-shadow:0 5px 10px #0003}.line-row.cdk-drag-placeholder{opacity:.4}.line-row__header{display:flex;align-items:center;justify-content:space-between;padding:.625rem 1rem}.line-row__header:hover{background:#fafafa;border-radius:8px}.line-row__main{display:flex;align-items:center;gap:.75rem}.line-row__order{font-size:.875rem;color:#000000f2;min-width:1rem;margin-right:100px}.line-row__divider{color:#333}.line-row__label{font-size:.875rem;color:#000000f2}.line-row__actions{display:flex;align-items:center;gap:1rem}.line-row__details{display:flex;flex-direction:column;gap:1rem;padding:0 1rem 1.5rem 3rem;border-top:1px solid #e8e8e8}.details-section{display:flex;gap:1.5rem;padding:1rem 0}.details-section__title{width:9.5rem;flex-shrink:0;font-size:.875rem;font-weight:600;color:#000000f2}.details-section__body{flex:1;min-width:0;display:flex;flex-direction:column}.details-section__body .mat-divider{border-top-color:#e8e8e8!important}.input-holder{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;min-height:2rem}.input-holder.input-holder-top{padding-top:.75rem}.input-holder.input-holder-bottom{padding-bottom:.75rem}.input-holder.input-holder-top-bottom{padding:.75rem 0}.input-holder__name{width:12rem;flex-shrink:0;font-size:.75rem;color:#333}.input-holder input{flex:1;min-width:0;height:21px;padding:4px 12px;box-sizing:content-box;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843);border-radius:8px;font-family:inherit;font-size:.875rem;color:#000000f2}.input-holder input:focus{outline:none;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59}.input-holder__select-wrap{position:relative;display:flex;align-items:center;flex:1;min-width:0}.input-holder__select-wrap .input-holder__select{width:100%;appearance:none;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:6px;font-family:inherit;font-size:.8125rem;color:#000000f2;cursor:pointer;height:21px;padding:4px 28px 4px 12px;box-sizing:content-box}.input-holder__select-wrap .input-holder__select:hover{background-color:#0000001f!important}.input-holder__select-wrap .input-holder__select:focus{outline:none;color:#000000b3;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59}.input-holder__select-wrap .input-holder__select:disabled{background:#f5f5f5!important;color:#babcc5;cursor:not-allowed}.input-holder__select-wrap .input-holder__select-icon{position:absolute;right:.5rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.disassociate-row{display:flex;justify-content:flex-end;padding-top:1rem}.disassociate-link{display:inline-flex;align-items:center;gap:.375rem;font-size:.875rem;font-weight:500}.btn-outline,.btn-filled{padding:.313rem .75rem;border-radius:50px;font-weight:500;font-size:.875rem;font-family:Poppins,Poppins,sans-serif;cursor:pointer;transition:background-color .1s ease-in-out;white-space:nowrap}.btn-outline{background:#ffffff;border:1px solid rgba(0,0,0,.2);color:#0006}.btn-outline:hover:not(:disabled){background:#f5f5f5}.btn-outline:disabled{color:#babcc5;border-color:#dfe3e7;cursor:not-allowed}.btn-filled{background:rgba(0,0,0,.9490196078);color:#fff;border:1px solid transparent}.btn-filled:hover:not(:disabled){background:#2a2a2a}.btn-filled:disabled{background:#DFE3E7;color:#babcc5;cursor:not-allowed}.panel-footer{position:sticky;bottom:0;background:#ffffff;border-top:1px solid rgba(0,0,0,.2);padding:1rem 1.5rem}.panel-footer__actions{display:flex;justify-content:flex-end;gap:.75rem;max-width:56rem;margin:0 auto}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-bar{position:relative!important;width:48px!important;height:25px!important;flex-shrink:0!important;border-radius:13px!important;background-color:#ccc!important}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-thumb{height:20px!important;width:20px!important;position:absolute!important;border-radius:50%!important;display:flex!important;align-items:center!important;justify-content:center!important;left:3px!important;top:5px!important;background-color:#fff!important}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px!important;color:#8e9fb7!important;line-height:1!important;display:block!important;pointer-events:none!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa!important;font-weight:700!important;font-size:10px!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}\n"] }]
298
+ }], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.APIService }, { type: i3.SiteSettingsService }, { type: i4.DeviceService }, { type: i5.LineService }, { type: i6.MatDialog }, { type: i7.Router }]; }, propDecorators: { goBack: [{
299
+ type: Output
300
+ }], token: [{
301
+ type: Input
302
+ }], host: [{
303
+ type: Input
304
+ }], siteId: [{
305
+ type: Input
306
+ }], userId: [{
307
+ type: Input
308
+ }], deviceName: [{
309
+ type: Input
310
+ }] } });
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzb2NpYXRlLWxpbmVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWRldmljZS1tYW5hZ2Uvc3JjL2Fzc29jaWF0ZS1saW5lcy9hc3NvY2lhdGUtbGluZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvYXNzb2NpYXRlLWxpbmVzL2Fzc29jaWF0ZS1saW5lcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU1wRixPQUFPLEVBQWtCLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBb0M5RSxNQUFNLE9BQU8sdUJBQXVCO0lBc0RsQyxZQUNTLFdBQXdCLEVBQ3ZCLFVBQXNCLEVBQ2IsbUJBQXdDLEVBQ3hDLGFBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLE1BQWlCLEVBQ2pCLE1BQWM7UUFOeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNiLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FB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WUFBWTtJQUN4QixVQUFVLEVBQUUsWUFBWTtJQUN4QixpQkFBaUIsRUFBRSxvQkFBb0I7SUFDdkMsZUFBZSxFQUFFLGtCQUFrQjtJQUNuQyxjQUFjLEVBQUUsZUFBZTtJQUMvQixVQUFVLEVBQUUsNEJBQTRCO0lBQ3hDLGdCQUFnQixFQUFFLGtDQUFrQztJQUNwRCxZQUFZLEVBQUUsOEJBQThCO0lBQzVDLFlBQVksRUFBRSw4QkFBOEI7Q0FDN0MsQ0FBQztBQUVzQixzQ0FBYyxHQUFnQixJQUFJLEdBQUcsQ0FBQztJQUM1RCxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGNBQWM7Q0FDbkYsQ0FBQyxDQUFDO3FIQXBEUSx1QkFBdUI7eUdBQXZCLHVCQUF1QixrTUNoRHBDLHE1Y0FtUEE7NEZEbk1hLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxxQkFBcUI7Z1FBS3JCLE1BQU07c0JBQWYsTUFBTTtnQkFDRSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIG9mLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFQSVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFNpdGVTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zaXRlLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEZXZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGV2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMaW5lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xpbmUuc2VydmljZSc7XHJcbmltcG9ydCB7IEJ1dHRvbnRlbXBsYXRlLCBSZWNvcmRpbmdPcHRpb25zIH0gZnJvbSAnLi4vY2xhc3Nlcy9kZXZpY2UnO1xyXG5pbXBvcnQgeyBSRUNPUkRJTkdfTUVESUFfU09VUkNFLCBTVEFUSUNfT1BUSU9OUyB9IGZyb20gJy4uL2FwcC5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBJbmZvRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybS1kaWFsb2cvaW5mby1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXNzb2NpYXRlZExpbmVSb3cge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgcGtpZDogc3RyaW5nO1xyXG4gIGV4dGVuc2lvbjogc3RyaW5nO1xyXG4gIHJvdXRlUGFydGl0aW9uTmFtZTogc3RyaW5nO1xyXG4gIG9yZGVyOiBudW1iZXI7XHJcbiAgbGluZU51bWJlcjogc3RyaW5nO1xyXG4gIGRpc3BsYXlDYWxsZXJJZDogc3RyaW5nO1xyXG4gIHRleHRMYWJlbDogc3RyaW5nO1xyXG4gIGUxNjRNYXNrOiBzdHJpbmc7XHJcbiAgbWF4TnVtYmVyT2ZDYWxsczogbnVtYmVyO1xyXG4gIGJ1c3lUcmlnZ2VyOiBudW1iZXI7XHJcbiAgcmVjb3JkaW5nT3B0aW9uOiBSZWNvcmRpbmdPcHRpb25zO1xyXG4gIHJlY29yZGluZ01lZGlhU291cmNlOiBzdHJpbmc7XHJcbiAgcmVjb3JkaW5nUHJvZmlsZTogc3RyaW5nO1xyXG4gIHZpc3VhbE1XSTogc3RyaW5nO1xyXG4gIHJpbmdTZXR0aW5nSWRsZTogc3RyaW5nO1xyXG4gIHBpY2t1cEFBU0lkbGU6IHN0cmluZztcclxuICBtb25pdG9yQ1NTOiBzdHJpbmc7XHJcbiAgYXVkaWJsZU1XSTogc3RyaW5nO1xyXG4gIHJpbmdTZXR0aW5nQWN0aXZlOiBzdHJpbmc7XHJcbiAgcGlja3VwQUFTQWN0aXZlOiBzdHJpbmc7XHJcbiAgbG9nTWlzc2VkQ2FsbHM6IGJvb2xlYW47XHJcbiAgY2FsbGVyTmFtZTogYm9vbGVhbjtcclxuICByZWRpcmVjdGVkTnVtYmVyOiBib29sZWFuO1xyXG4gIGNhbGxlck51bWJlcjogYm9vbGVhbjtcclxuICBkaWFsZWROdW1iZXI6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWFzc29jaWF0ZS1saW5lcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc29jaWF0ZS1saW5lcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXNzb2NpYXRlLWxpbmVzLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc3NvY2lhdGVMaW5lc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAT3V0cHV0KCkgZ29CYWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIHRva2VuITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhvc3QhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2l0ZUlkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHVzZXJJZCE6IHN0cmluZztcclxuICBASW5wdXQoKSBkZXZpY2VOYW1lITogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwdWJsaWMgZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICBwdWJsaWMgZGV2aWNlOiBhbnkgPSBudWxsO1xyXG4gIHB1YmxpYyBoYXNDaGFuZ2VzID0gZmFsc2U7XHJcbiAgcHVibGljIGV4cGFuZGVkT3JkZXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgcmVhZG9ubHkgcmVjb3JkaW5nT3B0aW9ucyA9IFJlY29yZGluZ09wdGlvbnM7XHJcbiAgcHVibGljIHJlYWRvbmx5IHJlY29yZGluZ01lZGlhU291cmNlczogc3RyaW5nW10gPSBSRUNPUkRJTkdfTUVESUFfU09VUkNFO1xyXG4gIHB1YmxpYyByZWNvcmRpbmdQcm9maWxlczogc3RyaW5nW10gPSBbJ05vbmUnXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgdmlzdWFsTXdpT3B0aW9uczogc3RyaW5nW10gPSBTVEFUSUNfT1BUSU9OUy5WSVNVQUxfTVdJO1xyXG4gIHB1YmxpYyByZWFkb25seSBhdWRpYmxlTXdpT3B0aW9uczogc3RyaW5nW10gPSBTVEFUSUNfT1BUSU9OUy5BVURJQkxFX01XSTtcclxuICBwdWJsaWMgcmVhZG9ubHkgcmluZ1NldHRpbmdJZGxlT3B0aW9uczogc3RyaW5nW10gPSBTVEFUSUNfT1BUSU9OUy5SSU5HX1NFVFRJTkdfSURMRTtcclxuICBwdWJsaWMgcmVhZG9ubHkgcmluZ1NldHRpbmdBY3RpdmVPcHRpb25zOiBzdHJpbmdbXSA9IFNUQVRJQ19PUFRJT05TLlJJTkdfU0VUVElOR19BQ1RJVkU7XHJcbiAgcHVibGljIHJlYWRvbmx5IHBpY2t1cEFhc0lkbGVPcHRpb25zOiBzdHJpbmdbXSA9IFNUQVRJQ19PUFRJT05TLkNBTExfUElDS1VQX0dST1VQX0FVRElPX1NFVFRJTkdfUEhPTkVfSURMRTtcclxuICBwdWJsaWMgcmVhZG9ubHkgcGlja3VwQWFzQWN0aXZlT3B0aW9uczogc3RyaW5nW10gPSBTVEFUSUNfT1BUSU9OUy5DQUxMX1BJQ0tVUF9HUk9VUF9BVURJT19TRVRUSU5HX1BIT05FX0FDVElWRTtcclxuXHJcbiAgcHVibGljIHJvd3M6IEFzc29jaWF0ZWRMaW5lUm93W10gPSBbXTtcclxuICBwcml2YXRlIG9yaWdpblJvd3M6IEFzc29jaWF0ZWRMaW5lUm93W10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRklFTERfTUFQOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgZGlzcGxheUNhbGxlcklkOiAnZGlzcGxheUxhYmVsJyxcclxuICAgIHRleHRMYWJlbDogJ3RleHRMYWJlbCcsXHJcbiAgICBlMTY0TWFzazogJ2UxNjRNYXNrJyxcclxuICAgIG1heE51bWJlck9mQ2FsbHM6ICdtYXhOdW1iZXJPZkNhbGxzJyxcclxuICAgIGJ1c3lUcmlnZ2VyOiAnYnVzeVRyaWdnZXInLFxyXG4gICAgcmVjb3JkaW5nT3B0aW9uOiAncmVjb3JkaW5nT3B0aW9uJyxcclxuICAgIHJlY29yZGluZ01lZGlhU291cmNlOiAncmVjb3JkaW5nTWVkaWFTb3VyY2UnLFxyXG4gICAgcmVjb3JkaW5nUHJvZmlsZTogJ3JlY29yZGluZ1Byb2ZpbGUnLFxyXG4gICAgdmlzdWFsTVdJOiAndmlzdWFsTVdJJyxcclxuICAgIHJpbmdTZXR0aW5nSWRsZTogJ3JpbmdTZXR0aW5nX2lkbGUnLFxyXG4gICAgcGlja3VwQUFTSWRsZTogJ3BpY2t1cEFBU19pZGxlJyxcclxuICAgIG1vbml0b3JDU1M6ICdtb25pdG9yQ1NTJyxcclxuICAgIGF1ZGlibGVNV0k6ICdhdWRpYmxlTVdJJyxcclxuICAgIHJpbmdTZXR0aW5nQWN0aXZlOiAncmluZ1NldHRpbmdfYWN0aXZlJyxcclxuICAgIHBpY2t1cEFBU0FjdGl2ZTogJ3BpY2t1cEFBU19hY3RpdmUnLFxyXG4gICAgbG9nTWlzc2VkQ2FsbHM6ICdsb2dNaXNzZWRDYWxsJyxcclxuICAgIGNhbGxlck5hbWU6ICdjYWxsSW5mb0Rpc3BsYXkuY2FsbGVyTmFtZScsXHJcbiAgICByZWRpcmVjdGVkTnVtYmVyOiAnY2FsbEluZm9EaXNwbGF5LnJlZGlyZWN0ZWROdW1iZXInLFxyXG4gICAgY2FsbGVyTnVtYmVyOiAnY2FsbEluZm9EaXNwbGF5LmNhbGxlck51bWJlcicsXHJcbiAgICBkaWFsZWROdW1iZXI6ICdjYWxsSW5mb0Rpc3BsYXkuZGlhbGVkTnVtYmVyJyxcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBCT09MRUFOX0ZJRUxEUzogU2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcclxuICAgICdsb2dNaXNzZWRDYWxscycsICdjYWxsZXJOYW1lJywgJ3JlZGlyZWN0ZWROdW1iZXInLCAnY2FsbGVyTnVtYmVyJywgJ2RpYWxlZE51bWJlcicsXHJcbiAgXSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogQVBJU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2l0ZVNldHRpbmdzU2VydmljZTogU2l0ZVNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGV2aWNlU2VydmljZTogRGV2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGluZVNlcnZpY2U6IExpbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBpU2VydmljZS50b2tlbiA9IHRoaXMudG9rZW47XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuYXBpVXJsID0gdGhpcy5ob3N0O1xyXG4gICAgdGhpcy5sb2FkRGV2aWNlKCk7XHJcbiAgICB0aGlzLmxvYWRSZWNvcmRpbmdQcm9maWxlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRGV2aWNlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlckRldmljZSkge1xyXG4gICAgICB0aGlzLmRldmljZSA9IHRoaXMudXNlclNlcnZpY2UudXNlckRldmljZTtcclxuICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZmV0Y2hMaW5lU2xvdHMoKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSwgZmluYWxpemUoKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChsaW5lU2xvdHM6IG51bWJlcltdIHwgdW5kZWZpbmVkKSA9PiB0aGlzLmluaXRSb3dzKGxpbmVTbG90cykpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBkZXZpY2VUeXBlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RldmljZVR5cGUnKSB8fCAnJztcclxuICAgIHRoaXMudXNlclNlcnZpY2UuZmV0Y2hESVVzZXJEZXZpY2UoTnVtYmVyKHRoaXMuc2l0ZUlkKSwgdGhpcy51c2VySWQsIGRldmljZVR5cGUsIHRoaXMuZGV2aWNlTmFtZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChkZXZpY2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaExpbmVTbG90cygpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2UpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxpbmVTbG90czogbnVtYmVyW10gfCB1bmRlZmluZWQpID0+IHRoaXMuaW5pdFJvd3MobGluZVNsb3RzKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoTGluZVNsb3RzKCkge1xyXG4gICAgY29uc3QgYnV0dG9uVGVtcGxhdGUgPSB0aGlzLmRldmljZT8uYnV0dG9uVGVtcGxhdGU7XHJcbiAgICBpZiAoIWJ1dHRvblRlbXBsYXRlKSB7XHJcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlU2VydmljZS5nZXRTbG90c0J5QnV0dG9uVGVtcGxhdGUoTnVtYmVyKHRoaXMuc2l0ZUlkKSwgYnV0dG9uVGVtcGxhdGUpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgodGVtcGxhdGU6IEJ1dHRvbnRlbXBsYXRlKSA9PiB0ZW1wbGF0ZT8ubGluZVNsb3RzKSxcclxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHVuZGVmaW5lZCkpLFxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkUmVjb3JkaW5nUHJvZmlsZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZ2V0UmVjb3JkaW5nUHJvZmlsZShOdW1iZXIodGhpcy5zaXRlSWQpKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHByb2ZpbGVzOiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVjb3JkaW5nUHJvZmlsZXMgPSBbJ05vbmUnLCAuLi4ocHJvZmlsZXMgfHwgW10pLmZpbHRlcihwcm9maWxlID0+IHByb2ZpbGUgIT09ICdOb25lJyldO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFJvd3MobGluZVNsb3RzPzogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IGxpbmVzID0gdGhpcy5kZXZpY2U/LmxpbmVzIHx8IFtdO1xyXG4gICAgaWYgKGxpbmVTbG90cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucm93cyA9IGxpbmVTbG90cy5tYXAoKHBvc2l0aW9uOiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCBsaW5lID0gbGluZXMuZmluZCgoY3VycmVudDogYW55KSA9PiBOdW1iZXIoY3VycmVudD8ucG9zaXRpb24pID09PSBOdW1iZXIocG9zaXRpb24pKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVSb3cocG9zaXRpb24sIGxpbmUpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZhbGxiYWNrTGluZXMgPSBsaW5lcy5sZW5ndGggPyBsaW5lcyA6IFt7fSwge30sIHt9XTtcclxuICAgICAgdGhpcy5yb3dzID0gZmFsbGJhY2tMaW5lcy5tYXAoKGxpbmU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gdGhpcy5jcmVhdGVSb3coaW5kZXggKyAxLCBsaW5lKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9yaWdpblJvd3MgPSB0aGlzLnJvd3MubWFwKHJvdyA9PiAoeyAuLi5yb3cgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVSb3cob3JkZXI6IG51bWJlciwgbGluZTogYW55KTogQXNzb2NpYXRlZExpbmVSb3cge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWQ6IG9yZGVyLFxyXG4gICAgICBwa2lkOiBsaW5lPy5wa2lkIHx8ICcnLFxyXG4gICAgICBleHRlbnNpb246IGxpbmU/LmV4dGVuc2lvbiB8fCAnJyxcclxuICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiBsaW5lPy5yb3V0ZVBhcnRpdGlvbk5hbWUgfHwgJycsXHJcbiAgICAgIG9yZGVyLFxyXG4gICAgICBsaW5lTnVtYmVyOiBsaW5lID8gKGxpbmU/Lm51bWJlciB8fCBsaW5lPy5leHRlbnNpb24gfHwgJycpIDogJycsXHJcbiAgICAgIGRpc3BsYXlDYWxsZXJJZDogbGluZT8uZGlzcGxheUxhYmVsIHx8ICcnLFxyXG4gICAgICB0ZXh0TGFiZWw6IGxpbmU/LnRleHRMYWJlbCB8fCAnJyxcclxuICAgICAgZTE2NE1hc2s6IGxpbmU/LmUxNjRNYXNrIHx8ICcnLFxyXG4gICAgICBtYXhOdW1iZXJPZkNhbGxzOiA2LFxyXG4gICAgICBidXN5VHJpZ2dlcjogMixcclxuICAgICAgcmVjb3JkaW5nT3B0aW9uOiBSZWNvcmRpbmdPcHRpb25zLmRpc2FibGVkLFxyXG4gICAgICByZWNvcmRpbmdNZWRpYVNvdXJjZTogdGhpcy5yZWNvcmRpbmdNZWRpYVNvdXJjZXNbMF0sXHJcbiAgICAgIHJlY29yZGluZ1Byb2ZpbGU6IHRoaXMucmVjb3JkaW5nUHJvZmlsZXNbMF0sXHJcbiAgICAgIHZpc3VhbE1XSTogdGhpcy52aXN1YWxNd2lPcHRpb25zWzBdLFxyXG4gICAgICByaW5nU2V0dGluZ0lkbGU6IHRoaXMucmluZ1NldHRpbmdJZGxlT3B0aW9uc1swXSxcclxuICAgICAgcGlja3VwQUFTSWRsZTogdGhpcy5waWNrdXBBYXNJZGxlT3B0aW9uc1swXSxcclxuICAgICAgbW9uaXRvckNTUzogJ05vbmUnLFxyXG4gICAgICBhdWRpYmxlTVdJOiB0aGlzLmF1ZGlibGVNd2lPcHRpb25zWzBdLFxyXG4gICAgICByaW5nU2V0dGluZ0FjdGl2ZTogdGhpcy5yaW5nU2V0dGluZ0FjdGl2ZU9wdGlvbnNbMF0sXHJcbiAgICAgIHBpY2t1cEFBU0FjdGl2ZTogdGhpcy5waWNrdXBBYXNBY3RpdmVPcHRpb25zWzBdLFxyXG4gICAgICBsb2dNaXNzZWRDYWxsczogbGluZT8ubG9nTWlzc2VkQ2FsbCA9PT0gJ3RydWUnLFxyXG4gICAgICBjYWxsZXJOYW1lOiBsaW5lPy5jYWxsSW5mb0Rpc3BsYXk/LmNhbGxlck5hbWUgPT09ICd0cnVlJyxcclxuICAgICAgcmVkaXJlY3RlZE51bWJlcjogbGluZT8uY2FsbEluZm9EaXNwbGF5Py5yZWRpcmVjdGVkTnVtYmVyID09PSAndHJ1ZScsXHJcbiAgICAgIGNhbGxlck51bWJlcjogbGluZT8uY2FsbEluZm9EaXNwbGF5Py5jYWxsZXJOdW1iZXIgPT09ICd0cnVlJyxcclxuICAgICAgZGlhbGVkTnVtYmVyOiBsaW5lPy5jYWxsSW5mb0Rpc3BsYXk/LmRpYWxlZE51bWJlciA9PT0gJ3RydWUnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGlzUm93RWRpdGFibGUocm93OiBBc3NvY2lhdGVkTGluZVJvdyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhcm93LnBraWQ7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVFeHBhbmRlZChyb3c6IEFzc29jaWF0ZWRMaW5lUm93KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNSb3dFZGl0YWJsZShyb3cpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWRPcmRlciA9IHRoaXMuZXhwYW5kZWRPcmRlciA9PT0gcm93Lm9yZGVyID8gbnVsbCA6IHJvdy5vcmRlcjtcclxuICB9XHJcblxyXG4gIGlzRXhwYW5kZWQocm93OiBBc3NvY2lhdGVkTGluZVJvdyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRPcmRlciA9PT0gcm93Lm9yZGVyO1xyXG4gIH1cclxuXHJcbiAgb25GaWVsZENoYW5nZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZWNvcmRpbmdPcHRpb25DaGFuZ2VkKHJvdzogQXNzb2NpYXRlZExpbmVSb3cpOiB2b2lkIHtcclxuICAgIGlmIChyb3cucmVjb3JkaW5nT3B0aW9uID09PSBSZWNvcmRpbmdPcHRpb25zLmRpc2FibGVkKSB7XHJcbiAgICAgIHJvdy5yZWNvcmRpbmdQcm9maWxlID0gdGhpcy5yZWNvcmRpbmdQcm9maWxlc1swXTtcclxuICAgIH1cclxuICAgIHRoaXMub25GaWVsZENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgaXNSZWNvcmRpbmdQcm9maWxlRGlzYWJsZWQocm93OiBBc3NvY2lhdGVkTGluZVJvdyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHJvdy5yZWNvcmRpbmdPcHRpb24gPT09IFJlY29yZGluZ09wdGlvbnMuZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxBc3NvY2lhdGVkTGluZVJvd1tdPik6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50LnByZXZpb3VzSW5kZXggPT09IGV2ZW50LmN1cnJlbnRJbmRleCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBvcmRlcnMgPSB0aGlzLnJvd3MubWFwKHJvdyA9PiByb3cub3JkZXIpO1xyXG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMucm93cywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIHRoaXMucm93cy5mb3JFYWNoKChyb3csIGluZGV4KSA9PiByb3cub3JkZXIgPSBvcmRlcnNbaW5kZXhdKTtcclxuICAgIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjb25maXJtRGlzYXNzb2NpYXRlKHJvdzogQXNzb2NpYXRlZExpbmVSb3cpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1Jvd0VkaXRhYmxlKHJvdykpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihJbmZvRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0aXRsZTogJ0Rpc2Fzc29jaWF0ZSBMaW5lJyxcclxuICAgICAgICBtZXNzYWdlOiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2Fzc29jaWF0ZSBsaW5lICR7cm93LmxpbmVOdW1iZXIgfHwgJ3RoaXMgbGluZSd9IGZyb20gZGV2aWNlICR7dGhpcy5kZXZpY2VOYW1lIHx8IHRoaXMuZGV2aWNlPy5uYW1lIHx8ICcnfT8gVGhlIGxpbmUgd2lsbCBhbHNvIGJlIHJlbW92ZWQgZnJvbSBpdCdzIFJlbW90ZSBkZXN0aW5hdGlvbiBwcm9maWxlLmAsXHJcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEaXNhc3NvY2lhdGUnLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAuc3Vic2NyaWJlKChjb25maXJtZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoY29uZmlybWVkKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc2Fzc29jaWF0ZUxpbmUocm93KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNhc3NvY2lhdGVMaW5lKHJvdzogQXNzb2NpYXRlZExpbmVSb3cpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgbGluZTogYW55ID0ge1xyXG4gICAgICBkaXJlY3RvcnlOdW1iZXI6IHtcclxuICAgICAgICBkaXJlY3RvcnlOdW1iZXI6IHJvdy5leHRlbnNpb24sXHJcbiAgICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiByb3cucm91dGVQYXJ0aXRpb25OYW1lLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMubGluZVNlcnZpY2UuY2hlY2tMaW5lRGVsZXRpb24obGluZSwgTnVtYmVyKHRoaXMuc2l0ZUlkKSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudXNlclNlcnZpY2UucGVyc2lzdFVzZXJDYWNoZSgpKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5leHBhbmRlZE9yZGVyID09PSByb3cub3JkZXIpIHtcclxuICAgICAgICAgIHRoaXMuZXhwYW5kZWRPcmRlciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucm93cyA9IHRoaXMucm93cy5maWx0ZXIoY3VycmVudCA9PiBjdXJyZW50Lm9yZGVyICE9PSByb3cub3JkZXIpO1xyXG4gICAgICAgIHRoaXMucm93cy5mb3JFYWNoKChjdXJyZW50LCBpbmRleCkgPT4gY3VycmVudC5vcmRlciA9IGluZGV4ICsgMSk7XHJcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkdvQmFjaygpOiB2b2lkIHtcclxuICAgIGNvbnN0IFtwYXRoXSA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpO1xyXG4gICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xyXG4gICAgaWYgKHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdID09PSAnYXNzb2NpYXRlLWxpbmVzJykge1xyXG4gICAgICBzZWdtZW50cy5zcGxpY2Uoc2VnbWVudHMubGVuZ3RoIC0gMiwgMik7XHJcbiAgICB9IGVsc2UgaWYgKHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdID09PSAnYXNzb2NpYXRlLWxpbmVzJykge1xyXG4gICAgICBzZWdtZW50cy5wb3AoKTtcclxuICAgIH1cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nICsgc2VnbWVudHMuam9pbignLycpKTtcclxuICAgIHRoaXMuZ29CYWNrLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkdvQmFjaygpO1xyXG4gIH1cclxuXHJcbiAgb25TYXZlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmhhc0NoYW5nZXMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmJ1aWxkVXBkYXRlQm9keSgpO1xyXG4gICAgaWYgKCFib2R5Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5vbkdvQmFjaygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBkZXZpY2VOYW1lID0gdGhpcy5kZXZpY2VOYW1lIHx8IHRoaXMuZGV2aWNlPy5uYW1lIHx8ICcnO1xyXG4gICAgdGhpcy5kZXZpY2VTZXJ2aWNlLnB1dERldmljZUZpZWxkcyhOdW1iZXIodGhpcy5zaXRlSWQpLCBkZXZpY2VOYW1lLCB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJUb2tlbiwgYm9keSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudXNlclNlcnZpY2UucGVyc2lzdFVzZXJDYWNoZSgpKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLm9yaWdpblJvd3MgPSB0aGlzLnJvd3MubWFwKHJvdyA9PiAoeyAuLi5yb3cgfSkpO1xyXG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub25Hb0JhY2soKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkVXBkYXRlQm9keSgpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBib2R5OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgdGhpcy5yb3dzLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgaWYgKCFyb3cucGtpZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBvcmlnaW5Sb3cgPSB0aGlzLm9yaWdpblJvd3MuZmluZChvcmlnID0+IG9yaWcuaWQgPT09IHJvdy5pZCk7XHJcbiAgICAgIGlmICghb3JpZ2luUm93KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyb3cub3JkZXIgIT09IG9yaWdpblJvdy5vcmRlcikge1xyXG4gICAgICAgIGJvZHkucHVzaChgZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMuJHtyb3cucGtpZH0ucG9zaXRpb249JHtyb3cub3JkZXJ9YCk7XHJcbiAgICAgIH1cclxuICAgICAgT2JqZWN0LmtleXMoQXNzb2NpYXRlTGluZXNDb21wb25lbnQuRklFTERfTUFQKS5mb3JFYWNoKHJvd0ZpZWxkID0+IHtcclxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSAocm93IGFzIGFueSlbcm93RmllbGRdO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpblZhbHVlID0gKG9yaWdpblJvdyBhcyBhbnkpW3Jvd0ZpZWxkXTtcclxuICAgICAgICBpZiAoY3VycmVudFZhbHVlID09PSBvcmlnaW5WYWx1ZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdWNtRmllbGQgPSBBc3NvY2lhdGVMaW5lc0NvbXBvbmVudC5GSUVMRF9NQVBbcm93RmllbGRdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gQXNzb2NpYXRlTGluZXNDb21wb25lbnQuQk9PTEVBTl9GSUVMRFMuaGFzKHJvd0ZpZWxkKSA/IFN0cmluZyghIWN1cnJlbnRWYWx1ZSkgOiBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgYm9keS5wdXNoKGBkZXZpY2UubGluZUFzc29jaWF0aW9ucy4ke3Jvdy5wa2lkfS4ke2N1Y21GaWVsZH09JHt2YWx1ZX1gKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBib2R5O1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGFwcC1sb2FkZXIgKm5nSWY9XCJkYXRhUGVuZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuXHJcbjxkaXYgY2xhc3M9XCJnby1iYWNrLWJveFwiIChjbGljayk9XCJvbkdvQmFjaygpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImdvLWJhY2stYm94LWNvbnRhaW5lclwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJhcHAtaWNvbiBpY29uLXdlYmV4LWxlZnQtYXJyb3dcIj48L3NwYW4+XHJcbiAgICA8c3BhbiBjbGFzcz1cImdvLWJhY2stdGl0bGVcIj5EZXZpY2UgR2VuZXJhbCBJbmZvPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJhc3NvY2lhdGUtbGluZXNcIiA+XHJcbiAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRlclwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJwYW5lbC1oZWFkZXJfX3RpdGxlXCI+QXNzb2NpYXRlIExpbmVzPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWNhcmRcIj5cclxuXHJcbiAgICAgIDxwIGNsYXNzPVwic3RlcC1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgIFRoZSB1c2VycyBhbmQgd29ya3NwYWNlcyB0aGF0IGFwcGVhciBvbiB0aGlzIHBob25lIGFyZSBkaXNwbGF5ZWQgYmVsb3cgaW4gdGhlIG9yZGVyIG9mIGFwcGVhcmFuY2UuXHJcbiAgICAgICAgTGluZXMgbXVzdCBiZSBjb25maWd1cmVkIHNlcXVlbnRpYWxseS5cclxuICAgICAgPC9wPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImxpbmVzLWxpc3RcIiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzXCI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmUtcm93XCIgY2RrRHJhZyBbY2xhc3MuZXhwYW5kZWRdPVwiaXNFeHBhbmRlZChyb3cpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lLXJvd19faGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmUtcm93X19tYWluXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24gZHJhZ2dlci1pY29uIHJlbTFcIiBjZGtEcmFnSGFuZGxlPjwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGluZS1yb3dfX29yZGVyXCI+e3sgcm93Lm9yZGVyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaW5lLXJvd19fZGl2aWRlclwiPnw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpbmUtcm93X19sYWJlbFwiPnt7IHJvdy5saW5lTnVtYmVyID8gJ0xpbmUgJyArIHJvdy5saW5lTnVtYmVyIDogJ05vbmUnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lLXJvd19fYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIGRlbGV0ZS1pY29uIHJlbTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwiIWlzUm93RWRpdGFibGUocm93KVwiIG1hdFRvb2x0aXA9XCJEaXNhc3NvY2lhdGUgbGluZVwiIChjbGljayk9XCJjb25maXJtRGlzYXNzb2NpYXRlKHJvdylcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24gY2hldnJvbi1pY29uIHJlbTFfMjVcIiBbY2xhc3MuZXhwYW5kZWRdPVwiaXNFeHBhbmRlZChyb3cpXCIgW2NsYXNzLmRpc2FibGVkXT1cIiFpc1Jvd0VkaXRhYmxlKHJvdylcIiAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQocm93KVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZS1yb3dfX2RldGFpbHNcIiAqbmdJZj1cImlzRXhwYW5kZWQocm93KVwiPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uX190aXRsZVwiPkxpbmUgc2V0dGluZyBvbiB0aGUgZGV2aWNlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uX19ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaXNwbGF5IGNhbGxlciBJRDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicm93LmRpc3BsYXlDYWxsZXJJZFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VGV4dCBsYWJlbDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicm93LnRleHRMYWJlbFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5FeHRlcm5hbCBwaG9uZSBudW1iZXIgbWFzazwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicm93LmUxNjRNYXNrXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uX190aXRsZVwiPk11bHRpcGxlIENhbGwvQ2FsbCBXYWl0aW5nIFNldHRpbmdzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uX19ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5NYXggY2FsbHM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFsobmdNb2RlbCldPVwicm93Lm1heE51bWJlck9mQ2FsbHNcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+QnVzeSB0cmlnZ2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBbKG5nTW9kZWwpXT1cInJvdy5idXN5VHJpZ2dlclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc2VjdGlvbl9fdGl0bGVcIj5DYWxsIFJlY29yZGluZzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc2VjdGlvbl9fYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UmVjb3JkaW5nIG9wdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInJvdy5yZWNvcmRpbmdPcHRpb25cIiAobmdNb2RlbENoYW5nZSk9XCJyZWNvcmRpbmdPcHRpb25DaGFuZ2VkKHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHJlY29yZGluZ09wdGlvbnMgfCBrZXl2YWx1ZVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj57eyBvcHRpb24udmFsdWUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LWljb25cIiBzcmM9XCJhc3NldHMvaWNvbnMvYXJyb3ctZG93bi1ib2xkLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UmVjb3JkaW5nIG1lZGlhIHNvdXJjZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInJvdy5yZWNvcmRpbmdNZWRpYVNvdXJjZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzb3VyY2Ugb2YgcmVjb3JkaW5nTWVkaWFTb3VyY2VzXCIgW3ZhbHVlXT1cInNvdXJjZVwiPnt7IHNvdXJjZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3QtaWNvblwiIHNyYz1cImFzc2V0cy9pY29ucy9hcnJvdy1kb3duLWJvbGQuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlJlY29yZGluZyBwcm9maWxlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LXdyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdFwiIFsobmdNb2RlbCldPVwicm93LnJlY29yZGluZ1Byb2ZpbGVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIiBbZGlzYWJsZWRdPVwiaXNSZWNvcmRpbmdQcm9maWxlRGlzYWJsZWQocm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwcm9maWxlIG9mIHJlY29yZGluZ1Byb2ZpbGVzXCIgW3ZhbHVlXT1cInByb2ZpbGVcIj57eyBwcm9maWxlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ljb25zL2Fycm93LWRvd24tYm9sZC5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXNlY3Rpb25fX3RpdGxlXCI+QWRkaXRpb25hbCBMaW5lIFNldHRpbmdzIG9uIHRoZSBEZXZpY2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXNlY3Rpb25fX2JvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlZpc3VhbCBNZXNzYWdlIFdhaXRpbmcgSW5kaWNhdG9yIFBvbGljeTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInJvdy52aXN1YWxNV0lcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHZpc3VhbE13aU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+e3sgb3B0aW9uIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ljb25zL2Fycm93LWRvd24tYm9sZC5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlJpbmcgU2V0dGluZyAoUGhvbmUgSWRsZSk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3Qtd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJyb3cucmluZ1NldHRpbmdJZGxlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiByaW5nU2V0dGluZ0lkbGVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3QtaWNvblwiIHNyYz1cImFzc2V0cy9pY29ucy9hcnJvdy1kb3duLWJvbGQuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5DYWxsIFBpY2t1cCBHcm91cCBBdWRpbyBBbGVydCBTZXR0aW5nIChQaG9uZSBJZGxlKTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInJvdy5waWNrdXBBQVNJZGxlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwaWNrdXBBYXNJZGxlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj57eyBvcHRpb24gfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LWljb25cIiBzcmM9XCJhc3NldHMvaWNvbnMvYXJyb3ctZG93bi1ib2xkLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TW9uaXRvcmluZyBDYWxsaW5nIFNlYXJjaCBTcGFjZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicm93Lm1vbml0b3JDU1NcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkF1ZGlibGUgTWVzc2FnZSBXYWl0aW5nIEluZGljYXRvciBQb2xpY3k8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3Qtd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJyb3cuYXVkaWJsZU1XSVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYXVkaWJsZU13aU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+e3sgb3B0aW9uIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ljb25zL2Fycm93LWRvd24tYm9sZC5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlJpbmcgU2V0dGluZyAoUGhvbmUgQWN0aXZlKTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInJvdy5yaW5nU2V0dGluZ0FjdGl2ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcmluZ1NldHRpbmdBY3RpdmVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3QtaWNvblwiIHNyYz1cImFzc2V0cy9pY29ucy9hcnJvdy1kb3duLWJvbGQuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5DYWxsIFBpY2t1cCBHcm91cCBBdWRpb0FsZXJ0IFNldHRpbmcgKFBob25lIEFjdGl2ZSk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3Qtd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJyb3cucGlja3VwQUFTQWN0aXZlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwaWNrdXBBYXNBY3RpdmVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3QtaWNvblwiIHNyYz1cImFzc2V0cy9pY29ucy9hcnJvdy1kb3duLWJvbGQuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkxvZyBNaXNzZWQgQ2FsbHM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIiBbKG5nTW9kZWwpXT1cInJvdy5sb2dNaXNzZWRDYWxsc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXNlY3Rpb25fX3RpdGxlXCI+Rm9yd2FyZGVkIENhbGwgSW5mb3JtYXRpb24gRGlzcGxheTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc2VjdGlvbl9fYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+Q2FsbGVyIG5hbWU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIiBbKG5nTW9kZWwpXT1cInJvdy5jYWxsZXJOYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UmVkaXJlY3RlZCBudW1iZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIiBbKG5nTW9kZWwpXT1cInJvdy5yZWRpcmVjdGVkTnVtYmVyXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+Q2FsbGVyIG51bWJlcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiIFsobmdNb2RlbCldPVwicm93LmNhbGxlck51bWJlclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlhbGVkIG51bWJlcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiIFsobmdNb2RlbCldPVwicm93LmRpYWxlZE51bWJlclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc2Fzc29jaWF0ZS1yb3dcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGluayBkaXNhc3NvY2lhdGUtbGlua1wiIChjbGljayk9XCJjb25maXJtRGlzYXNzb2NpYXRlKHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIGRpc2Fzc29jaWF0ZS1pY29uIHJlbTFcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIERpc2Fzc29jaWF0ZSBMaW5lXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJwYW5lbC1mb290ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1mb290ZXJfX2FjdGlvbnMgcGFuZWwtZm9vdGVyX19hY3Rpb25zLS1yaWdodFwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tZmlsbGVkXCIgW2Rpc2FibGVkXT1cIiFoYXNDaGFuZ2VzXCIgKGNsaWNrKT1cIm9uU2F2ZSgpXCI+U2F2ZTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuIl19