mediasfu-angular 1.0.2 → 2.0.1

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 (281) hide show
  1. package/README.md +686 -578
  2. package/dist/README.md +677 -578
  3. package/dist/fesm2022/mediasfu-angular.mjs +5551 -2944
  4. package/dist/fesm2022/mediasfu-angular.mjs.map +1 -1
  5. package/dist/lib/@types/types.d.ts +22 -1
  6. package/dist/lib/components/breakout-components/breakout-rooms-modal.component.d.ts +1 -0
  7. package/dist/lib/components/mediasfu-components/mediasfu-broadcast.component.d.ts +153 -61
  8. package/dist/lib/components/mediasfu-components/mediasfu-chat.component.d.ts +154 -66
  9. package/dist/lib/components/mediasfu-components/mediasfu-conference.component.d.ts +190 -76
  10. package/dist/lib/components/mediasfu-components/mediasfu-generic.component.d.ts +184 -70
  11. package/dist/lib/components/mediasfu-components/mediasfu-webinar.component.d.ts +192 -78
  12. package/dist/lib/components/menu-components/menu-modal/menu-modal.component.d.ts +6 -1
  13. package/dist/lib/components/menu-components/share-buttons-component/share-buttons-component.component.d.ts +5 -2
  14. package/dist/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.d.ts +4 -2
  15. package/dist/lib/components/misc-components/pre-join-page/pre-join-page.component.d.ts +71 -66
  16. package/dist/lib/components/misc-components/share-event-modal/share-event-modal.component.d.ts +5 -1
  17. package/dist/lib/consumers/connect-local-ips.service.d.ts +81 -0
  18. package/dist/lib/consumers/connect-send-transport-audio.service.d.ts +43 -11
  19. package/dist/lib/consumers/connect-send-transport-screen.service.d.ts +87 -46
  20. package/dist/lib/consumers/connect-send-transport-video.service.d.ts +89 -43
  21. package/dist/lib/consumers/connect-send-transport.service.d.ts +5 -1
  22. package/dist/lib/consumers/create-send-transport.service.d.ts +130 -40
  23. package/dist/lib/consumers/disconnect-send-transport-audio.service.d.ts +77 -40
  24. package/dist/lib/consumers/disconnect-send-transport-screen.service.d.ts +48 -14
  25. package/dist/lib/consumers/disconnect-send-transport-video.service.d.ts +81 -44
  26. package/dist/lib/consumers/get-piped-producers-alt.service.d.ts +5 -1
  27. package/dist/lib/consumers/receive-all-piped-transports.service.d.ts +5 -1
  28. package/dist/lib/consumers/resume-send-transport-audio.service.d.ts +54 -21
  29. package/dist/lib/consumers/stream-success-audio-switch.service.d.ts +124 -40
  30. package/dist/lib/consumers/trigger.service.d.ts +3 -0
  31. package/dist/lib/methods/exit-methods/confirm-exit.service.d.ts +5 -1
  32. package/dist/lib/methods/recording-methods/start-recording.service.d.ts +3 -0
  33. package/dist/lib/methods/recording-methods/stop-recording.service.d.ts +4 -1
  34. package/dist/lib/methods/recording-methods/update-recording.service.d.ts +3 -0
  35. package/dist/lib/methods/stream-methods/click-audio.service.d.ts +3 -0
  36. package/dist/lib/methods/utils/check-limits-and-make-request.service.d.ts +23 -0
  37. package/dist/lib/methods/utils/create-response-join-room.util.d.ts +33 -0
  38. package/dist/lib/methods/utils/create-room-on-media-sfu.service.d.ts +25 -0
  39. package/dist/lib/methods/utils/initial-values.util.d.ts +6 -0
  40. package/dist/lib/methods/utils/join-room-on-media-sfu.service.d.ts +52 -0
  41. package/dist/lib/methods/whiteboard-methods/capture-canvas-stream.service.d.ts +37 -20
  42. package/dist/lib/producers/producer-emits/join-local-room.service.d.ts +125 -0
  43. package/dist/lib/producers/socket-receive-methods/all-members-rest.service.d.ts +7 -2
  44. package/dist/lib/producers/socket-receive-methods/all-members.service.d.ts +7 -2
  45. package/dist/lib/producers/socket-receive-methods/disconnect-user-self.service.d.ts +5 -1
  46. package/dist/lib/sockets/socket-manager.service.d.ts +90 -0
  47. package/dist/public-api.d.ts +11 -1
  48. package/package.json +17 -20
  49. package/dist/esm2022/lib/@types/types.mjs +0 -2
  50. package/dist/esm2022/lib/components/background-components/background-modal/background-modal.component.mjs +0 -799
  51. package/dist/esm2022/lib/components/breakout-components/breakout-rooms-modal.component.mjs +0 -366
  52. package/dist/esm2022/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.mjs +0 -143
  53. package/dist/esm2022/lib/components/breakout-components/room-list/room-list.component.mjs +0 -40
  54. package/dist/esm2022/lib/components/co-host-components/co-host-modal/co-host-modal.component.mjs +0 -245
  55. package/dist/esm2022/lib/components/display-components/alert-component/alert.component.component.mjs +0 -79
  56. package/dist/esm2022/lib/components/display-components/audio-card/audio-card.component.mjs +0 -356
  57. package/dist/esm2022/lib/components/display-components/audio-grid/audio-grid.component.mjs +0 -80
  58. package/dist/esm2022/lib/components/display-components/card-video-display/card-video-display.component.mjs +0 -129
  59. package/dist/esm2022/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.mjs +0 -138
  60. package/dist/esm2022/lib/components/display-components/control-buttons-component/control-buttons-component.component.mjs +0 -231
  61. package/dist/esm2022/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.mjs +0 -282
  62. package/dist/esm2022/lib/components/display-components/control-widgets/menu-participants-widget.component.mjs +0 -82
  63. package/dist/esm2022/lib/components/display-components/control-widgets/menu-record-widget.component.mjs +0 -65
  64. package/dist/esm2022/lib/components/display-components/control-widgets/menu-widget.component.mjs +0 -137
  65. package/dist/esm2022/lib/components/display-components/control-widgets/message-widget.component.mjs +0 -137
  66. package/dist/esm2022/lib/components/display-components/control-widgets/record-timer-widget.component.mjs +0 -51
  67. package/dist/esm2022/lib/components/display-components/control-widgets/screenshare-widget.component.mjs +0 -101
  68. package/dist/esm2022/lib/components/display-components/flexible-grid/flexible-grid.component.mjs +0 -151
  69. package/dist/esm2022/lib/components/display-components/flexible-video/flexible-video.component.mjs +0 -250
  70. package/dist/esm2022/lib/components/display-components/loading-modal/loading-modal.component.mjs +0 -102
  71. package/dist/esm2022/lib/components/display-components/main-aspect-component/main-aspect-component.component.mjs +0 -140
  72. package/dist/esm2022/lib/components/display-components/main-container-component/main-container-component.component.mjs +0 -131
  73. package/dist/esm2022/lib/components/display-components/main-grid-component/main-grid-component.component.mjs +0 -120
  74. package/dist/esm2022/lib/components/display-components/main-screen-component/main-screen-component.component.mjs +0 -201
  75. package/dist/esm2022/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.mjs +0 -115
  76. package/dist/esm2022/lib/components/display-components/mini-audio/mini-audio.component.mjs +0 -319
  77. package/dist/esm2022/lib/components/display-components/mini-card/mini-card.component.mjs +0 -161
  78. package/dist/esm2022/lib/components/display-components/mini-card-audio/mini-card-audio.component.mjs +0 -230
  79. package/dist/esm2022/lib/components/display-components/other-grid-component/other-grid-component.component.mjs +0 -126
  80. package/dist/esm2022/lib/components/display-components/pagination/pagination.component.mjs +0 -334
  81. package/dist/esm2022/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.mjs +0 -112
  82. package/dist/esm2022/lib/components/display-components/video-card/video-card.component.mjs +0 -392
  83. package/dist/esm2022/lib/components/display-settings-components/display-settings-modal.component.mjs +0 -106
  84. package/dist/esm2022/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.mjs +0 -199
  85. package/dist/esm2022/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.mjs +0 -132
  86. package/dist/esm2022/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.mjs +0 -220
  87. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-broadcast.component.mjs +0 -4238
  88. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-chat.component.mjs +0 -3754
  89. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-conference.component.mjs +0 -5071
  90. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-generic.component.mjs +0 -5380
  91. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-webinar.component.mjs +0 -5068
  92. package/dist/esm2022/lib/components/menu-components/custom-buttons/custom-buttons.component.mjs +0 -83
  93. package/dist/esm2022/lib/components/menu-components/meeting-id-component/meeting-id-component.component.mjs +0 -27
  94. package/dist/esm2022/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.mjs +0 -27
  95. package/dist/esm2022/lib/components/menu-components/menu-modal/menu-modal.component.mjs +0 -125
  96. package/dist/esm2022/lib/components/menu-components/share-buttons-component/share-buttons-component.component.mjs +0 -106
  97. package/dist/esm2022/lib/components/message-components/message-panel/message-panel.component.mjs +0 -228
  98. package/dist/esm2022/lib/components/message-components/messages-modal/messages-modal.component.mjs +0 -277
  99. package/dist/esm2022/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.mjs +0 -130
  100. package/dist/esm2022/lib/components/misc-components/pre-join-page/pre-join-page.component.mjs +0 -343
  101. package/dist/esm2022/lib/components/misc-components/share-event-modal/share-event-modal.component.mjs +0 -127
  102. package/dist/esm2022/lib/components/misc-components/welcome-page/welcome-page.component.mjs +0 -241
  103. package/dist/esm2022/lib/components/participants-components/participant-list/participant-list.component.mjs +0 -82
  104. package/dist/esm2022/lib/components/participants-components/participant-list-item/participant-list-item.component.mjs +0 -139
  105. package/dist/esm2022/lib/components/participants-components/participant-list-others/participant-list-others.component.mjs +0 -40
  106. package/dist/esm2022/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.mjs +0 -60
  107. package/dist/esm2022/lib/components/participants-components/participants-modal/participants-modal.component.mjs +0 -124
  108. package/dist/esm2022/lib/components/polls-components/poll-modal/poll-modal.component.mjs +0 -201
  109. package/dist/esm2022/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.mjs +0 -92
  110. package/dist/esm2022/lib/components/recording-components/recording-modal/recording-modal.component.mjs +0 -133
  111. package/dist/esm2022/lib/components/recording-components/standard-panel-component/standard-panel-component.component.mjs +0 -90
  112. package/dist/esm2022/lib/components/requests-components/render-request-component/render-request-component.component.mjs +0 -81
  113. package/dist/esm2022/lib/components/requests-components/requests-modal/requests-modal.component.mjs +0 -147
  114. package/dist/esm2022/lib/components/screenboard-components/screenboard/screenboard.component.mjs +0 -627
  115. package/dist/esm2022/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.mjs +0 -391
  116. package/dist/esm2022/lib/components/waiting-components/waiting-room-modal.component.mjs +0 -201
  117. package/dist/esm2022/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.mjs +0 -286
  118. package/dist/esm2022/lib/components/whiteboard-components/whiteboard/whiteboard.component.mjs +0 -1833
  119. package/dist/esm2022/lib/consumers/add-videos-grid.service.mjs +0 -345
  120. package/dist/esm2022/lib/consumers/auto-adjust.service.mjs +0 -109
  121. package/dist/esm2022/lib/consumers/calculate-rows-and-columns.service.mjs +0 -60
  122. package/dist/esm2022/lib/consumers/change-vids.service.mjs +0 -551
  123. package/dist/esm2022/lib/consumers/check-grid.service.mjs +0 -93
  124. package/dist/esm2022/lib/consumers/check-permission.service.mjs +0 -105
  125. package/dist/esm2022/lib/consumers/check-screen-share.service.mjs +0 -106
  126. package/dist/esm2022/lib/consumers/close-and-resize.service.mjs +0 -331
  127. package/dist/esm2022/lib/consumers/compare-active-names.service.mjs +0 -106
  128. package/dist/esm2022/lib/consumers/compare-screen-states.service.mjs +0 -98
  129. package/dist/esm2022/lib/consumers/connect-ips.service.mjs +0 -154
  130. package/dist/esm2022/lib/consumers/connect-recv-transport.service.mjs +0 -146
  131. package/dist/esm2022/lib/consumers/connect-send-transport-audio.service.mjs +0 -84
  132. package/dist/esm2022/lib/consumers/connect-send-transport-screen.service.mjs +0 -102
  133. package/dist/esm2022/lib/consumers/connect-send-transport-video.service.mjs +0 -99
  134. package/dist/esm2022/lib/consumers/connect-send-transport.service.mjs +0 -140
  135. package/dist/esm2022/lib/consumers/consumer-resume.service.mjs +0 -368
  136. package/dist/esm2022/lib/consumers/control-media.service.mjs +0 -113
  137. package/dist/esm2022/lib/consumers/create-send-transport.service.mjs +0 -172
  138. package/dist/esm2022/lib/consumers/disconnect-send-transport-audio.service.mjs +0 -108
  139. package/dist/esm2022/lib/consumers/disconnect-send-transport-screen.service.mjs +0 -84
  140. package/dist/esm2022/lib/consumers/disconnect-send-transport-video.service.mjs +0 -101
  141. package/dist/esm2022/lib/consumers/disp-streams.service.mjs +0 -513
  142. package/dist/esm2022/lib/consumers/generate-page-content.service.mjs +0 -106
  143. package/dist/esm2022/lib/consumers/get-estimate.service.mjs +0 -120
  144. package/dist/esm2022/lib/consumers/get-piped-producers-alt.service.mjs +0 -82
  145. package/dist/esm2022/lib/consumers/get-producers-piped.service.mjs +0 -79
  146. package/dist/esm2022/lib/consumers/get-videos.service.mjs +0 -91
  147. package/dist/esm2022/lib/consumers/mix-streams.service.mjs +0 -95
  148. package/dist/esm2022/lib/consumers/on-screen-changes.service.mjs +0 -103
  149. package/dist/esm2022/lib/consumers/prepopulate-user-media.service.mjs +0 -541
  150. package/dist/esm2022/lib/consumers/process-consumer-transports-audio.service.mjs +0 -101
  151. package/dist/esm2022/lib/consumers/process-consumer-transports.service.mjs +0 -128
  152. package/dist/esm2022/lib/consumers/re-port.service.mjs +0 -114
  153. package/dist/esm2022/lib/consumers/re-update-inter.service.mjs +0 -239
  154. package/dist/esm2022/lib/consumers/readjust.service.mjs +0 -173
  155. package/dist/esm2022/lib/consumers/receive-all-piped-transports.service.mjs +0 -87
  156. package/dist/esm2022/lib/consumers/receive-room-messages.service.mjs +0 -69
  157. package/dist/esm2022/lib/consumers/reorder-streams.service.mjs +0 -239
  158. package/dist/esm2022/lib/consumers/request-screen-share.service.mjs +0 -101
  159. package/dist/esm2022/lib/consumers/resume-pause-audio-streams.service.mjs +0 -150
  160. package/dist/esm2022/lib/consumers/resume-pause-streams.service.mjs +0 -103
  161. package/dist/esm2022/lib/consumers/resume-send-transport-audio.service.mjs +0 -91
  162. package/dist/esm2022/lib/consumers/signal-new-consumer-transport.service.mjs +0 -136
  163. package/dist/esm2022/lib/consumers/socket-receive-methods/join-consume-room.service.mjs +0 -96
  164. package/dist/esm2022/lib/consumers/socket-receive-methods/new-pipe-producer.service.mjs +0 -100
  165. package/dist/esm2022/lib/consumers/socket-receive-methods/producer-closed.service.mjs +0 -78
  166. package/dist/esm2022/lib/consumers/start-share-screen.service.mjs +0 -120
  167. package/dist/esm2022/lib/consumers/stop-share-screen.service.mjs +0 -175
  168. package/dist/esm2022/lib/consumers/stream-success-audio-switch.service.mjs +0 -185
  169. package/dist/esm2022/lib/consumers/stream-success-audio.service.mjs +0 -210
  170. package/dist/esm2022/lib/consumers/stream-success-screen.service.mjs +0 -193
  171. package/dist/esm2022/lib/consumers/stream-success-video.service.mjs +0 -260
  172. package/dist/esm2022/lib/consumers/switch-user-audio.service.mjs +0 -120
  173. package/dist/esm2022/lib/consumers/switch-user-video-alt.service.mjs +0 -260
  174. package/dist/esm2022/lib/consumers/switch-user-video.service.mjs +0 -172
  175. package/dist/esm2022/lib/consumers/trigger.service.mjs +0 -210
  176. package/dist/esm2022/lib/consumers/update-mini-cards-grid.service.mjs +0 -135
  177. package/dist/esm2022/lib/consumers/update-participant-audio-decibels.service.mjs +0 -84
  178. package/dist/esm2022/lib/methods/background-methods/launch-background.service.mjs +0 -48
  179. package/dist/esm2022/lib/methods/breakout-room-methods/breakout-room-updated.service.mjs +0 -183
  180. package/dist/esm2022/lib/methods/breakout-room-methods/launch-breakout-rooms.service.mjs +0 -46
  181. package/dist/esm2022/lib/methods/co-host-methods/launch-co-host.service.mjs +0 -46
  182. package/dist/esm2022/lib/methods/co-host-methods/modify-co-host-settings.service.mjs +0 -104
  183. package/dist/esm2022/lib/methods/display-settings-methods/launch-display-settings.service.mjs +0 -46
  184. package/dist/esm2022/lib/methods/display-settings-methods/modify-display-settings.service.mjs +0 -194
  185. package/dist/esm2022/lib/methods/exit-methods/confirm-exit.service.mjs +0 -52
  186. package/dist/esm2022/lib/methods/exit-methods/launch-confirm-exit.service.mjs +0 -42
  187. package/dist/esm2022/lib/methods/media-settings-methods/launch-media-settings.service.mjs +0 -85
  188. package/dist/esm2022/lib/methods/menu-methods/launch-menu-modal.service.mjs +0 -44
  189. package/dist/esm2022/lib/methods/message-methods/launch-messages.service.mjs +0 -45
  190. package/dist/esm2022/lib/methods/message-methods/send-message.service.mjs +0 -143
  191. package/dist/esm2022/lib/methods/participants-methods/launch-participants.service.mjs +0 -47
  192. package/dist/esm2022/lib/methods/participants-methods/message-participants.service.mjs +0 -98
  193. package/dist/esm2022/lib/methods/participants-methods/mute-participants.service.mjs +0 -96
  194. package/dist/esm2022/lib/methods/participants-methods/remove-participants.service.mjs +0 -107
  195. package/dist/esm2022/lib/methods/polls-methods/handle-create-poll.service.mjs +0 -75
  196. package/dist/esm2022/lib/methods/polls-methods/handle-end-poll.service.mjs +0 -72
  197. package/dist/esm2022/lib/methods/polls-methods/handle-vote-poll.service.mjs +0 -83
  198. package/dist/esm2022/lib/methods/polls-methods/launch-poll.service.mjs +0 -43
  199. package/dist/esm2022/lib/methods/polls-methods/poll-updated.service.mjs +0 -95
  200. package/dist/esm2022/lib/methods/recording-methods/check-pause-state.service.mjs +0 -69
  201. package/dist/esm2022/lib/methods/recording-methods/check-resume-state.service.mjs +0 -56
  202. package/dist/esm2022/lib/methods/recording-methods/confirm-recording.service.mjs +0 -278
  203. package/dist/esm2022/lib/methods/recording-methods/launch-recording.service.mjs +0 -125
  204. package/dist/esm2022/lib/methods/recording-methods/record-pause-timer.service.mjs +0 -67
  205. package/dist/esm2022/lib/methods/recording-methods/record-resume-timer.service.mjs +0 -130
  206. package/dist/esm2022/lib/methods/recording-methods/record-start-timer.service.mjs +0 -134
  207. package/dist/esm2022/lib/methods/recording-methods/record-update-timer.service.mjs +0 -80
  208. package/dist/esm2022/lib/methods/recording-methods/start-recording.service.mjs +0 -197
  209. package/dist/esm2022/lib/methods/recording-methods/stop-recording.service.mjs +0 -112
  210. package/dist/esm2022/lib/methods/recording-methods/update-recording.service.mjs +0 -272
  211. package/dist/esm2022/lib/methods/requests-methods/launch-requests.service.mjs +0 -51
  212. package/dist/esm2022/lib/methods/requests-methods/respond-to-requests.service.mjs +0 -84
  213. package/dist/esm2022/lib/methods/settings-methods/launch-settings.service.mjs +0 -51
  214. package/dist/esm2022/lib/methods/settings-methods/modify-settings.service.mjs +0 -109
  215. package/dist/esm2022/lib/methods/stream-methods/click-audio.service.mjs +0 -275
  216. package/dist/esm2022/lib/methods/stream-methods/click-chat.service.mjs +0 -75
  217. package/dist/esm2022/lib/methods/stream-methods/click-screen-share.service.mjs +0 -178
  218. package/dist/esm2022/lib/methods/stream-methods/click-video.service.mjs +0 -271
  219. package/dist/esm2022/lib/methods/stream-methods/switch-audio.service.mjs +0 -80
  220. package/dist/esm2022/lib/methods/stream-methods/switch-video-alt.service.mjs +0 -116
  221. package/dist/esm2022/lib/methods/stream-methods/switch-video.service.mjs +0 -132
  222. package/dist/esm2022/lib/methods/utils/format-number.service.mjs +0 -57
  223. package/dist/esm2022/lib/methods/utils/generate-random-messages.service.mjs +0 -120
  224. package/dist/esm2022/lib/methods/utils/generate-random-participants.service.mjs +0 -126
  225. package/dist/esm2022/lib/methods/utils/generate-random-polls.service.mjs +0 -78
  226. package/dist/esm2022/lib/methods/utils/generate-random-request-list.service.mjs +0 -90
  227. package/dist/esm2022/lib/methods/utils/generate-random-waiting-room-list.service.mjs +0 -59
  228. package/dist/esm2022/lib/methods/utils/get-modal-position.util.mjs +0 -32
  229. package/dist/esm2022/lib/methods/utils/get-overlay-position.util.mjs +0 -31
  230. package/dist/esm2022/lib/methods/utils/initial-values.util.mjs +0 -379
  231. package/dist/esm2022/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.mjs +0 -96
  232. package/dist/esm2022/lib/methods/utils/mini-audio-player/mini-audio-player.component.mjs +0 -315
  233. package/dist/esm2022/lib/methods/utils/producer/a-params.service.mjs +0 -58
  234. package/dist/esm2022/lib/methods/utils/producer/h-params.service.mjs +0 -87
  235. package/dist/esm2022/lib/methods/utils/producer/screen-params.service.mjs +0 -61
  236. package/dist/esm2022/lib/methods/utils/producer/v-params.service.mjs +0 -87
  237. package/dist/esm2022/lib/methods/utils/producer/video-capture-constraints.service.mjs +0 -84
  238. package/dist/esm2022/lib/methods/utils/sleep.util.mjs +0 -17
  239. package/dist/esm2022/lib/methods/utils/sound-player.service.mjs +0 -63
  240. package/dist/esm2022/lib/methods/utils/validate-alphanumeric.service.mjs +0 -49
  241. package/dist/esm2022/lib/methods/waiting-methods/launch-waiting.service.mjs +0 -41
  242. package/dist/esm2022/lib/methods/waiting-methods/respond-to-waiting.service.mjs +0 -69
  243. package/dist/esm2022/lib/methods/whiteboard-methods/capture-canvas-stream.service.mjs +0 -98
  244. package/dist/esm2022/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.mjs +0 -44
  245. package/dist/esm2022/lib/producer-client/producer-client-emits/create-device-client.service.mjs +0 -74
  246. package/dist/esm2022/lib/producer-client/producer-client-emits/join-room-client.service.mjs +0 -96
  247. package/dist/esm2022/lib/producer-client/producer-client-emits/update-room-parameters-client.service.mjs +0 -276
  248. package/dist/esm2022/lib/producers/producer-emits/join-con-room.service.mjs +0 -152
  249. package/dist/esm2022/lib/producers/producer-emits/join-room.service.mjs +0 -152
  250. package/dist/esm2022/lib/producers/socket-receive-methods/all-members-rest.service.mjs +0 -228
  251. package/dist/esm2022/lib/producers/socket-receive-methods/all-members.service.mjs +0 -218
  252. package/dist/esm2022/lib/producers/socket-receive-methods/all-waiting-room-members.service.mjs +0 -57
  253. package/dist/esm2022/lib/producers/socket-receive-methods/ban-participant.service.mjs +0 -76
  254. package/dist/esm2022/lib/producers/socket-receive-methods/control-media-host.service.mjs +0 -183
  255. package/dist/esm2022/lib/producers/socket-receive-methods/disconnect-user-self.service.mjs +0 -50
  256. package/dist/esm2022/lib/producers/socket-receive-methods/disconnect.service.mjs +0 -64
  257. package/dist/esm2022/lib/producers/socket-receive-methods/get-domains.service.mjs +0 -78
  258. package/dist/esm2022/lib/producers/socket-receive-methods/host-request-response.service.mjs +0 -150
  259. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-ended.service.mjs +0 -73
  260. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-still-there.service.mjs +0 -47
  261. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-time-remaining.service.mjs +0 -63
  262. package/dist/esm2022/lib/producers/socket-receive-methods/participant-requested.service.mjs +0 -63
  263. package/dist/esm2022/lib/producers/socket-receive-methods/person-joined.service.mjs +0 -54
  264. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-closed.service.mjs +0 -129
  265. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-paused.service.mjs +0 -152
  266. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-resumed.service.mjs +0 -99
  267. package/dist/esm2022/lib/producers/socket-receive-methods/re-initiate-recording.service.mjs +0 -67
  268. package/dist/esm2022/lib/producers/socket-receive-methods/receive-message.service.mjs +0 -134
  269. package/dist/esm2022/lib/producers/socket-receive-methods/recording-notice.service.mjs +0 -233
  270. package/dist/esm2022/lib/producers/socket-receive-methods/room-record-params.service.mjs +0 -121
  271. package/dist/esm2022/lib/producers/socket-receive-methods/screen-producer-id.service.mjs +0 -86
  272. package/dist/esm2022/lib/producers/socket-receive-methods/start-records.service.mjs +0 -60
  273. package/dist/esm2022/lib/producers/socket-receive-methods/stopped-recording.service.mjs +0 -62
  274. package/dist/esm2022/lib/producers/socket-receive-methods/time-left-recording.service.mjs +0 -57
  275. package/dist/esm2022/lib/producers/socket-receive-methods/update-consuming-domains.service.mjs +0 -105
  276. package/dist/esm2022/lib/producers/socket-receive-methods/update-media-settings.service.mjs +0 -66
  277. package/dist/esm2022/lib/producers/socket-receive-methods/updated-co-host.service.mjs +0 -96
  278. package/dist/esm2022/lib/producers/socket-receive-methods/user-waiting.service.mjs +0 -52
  279. package/dist/esm2022/lib/sockets/socket-manager.service.mjs +0 -113
  280. package/dist/esm2022/mediasfu-angular.mjs +0 -5
  281. package/dist/esm2022/public-api.mjs +0 -187
@@ -1,44 +0,0 @@
1
- // whiteboard.service.ts
2
- import { Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Toggles the visibility of the configure whiteboard modal.
6
- *
7
- * @param {LaunchConfigureWhiteboardOptions} options - Options to control whiteboard configuration modal.
8
- * @param {Function} options.updateIsConfigureWhiteboardModalVisible - Function to update the modal's visibility state.
9
- * @param {boolean} options.isConfigureWhiteboardModalVisible - Current visibility state of the configure whiteboard modal.
10
- *
11
- * This function uses the current visibility state to toggle the whiteboard configuration modal on or off.
12
- *
13
- * @example
14
- * ```typescript
15
- * const launchService = new LaunchConfigureWhiteboard();
16
- * launchService.launchConfigureWhiteboard({
17
- * updateIsConfigureWhiteboardModalVisible: (visible) => console.log('Modal Visible:', visible),
18
- * isConfigureWhiteboardModalVisible: false
19
- * });
20
- * ```
21
- *
22
- * In this example, the modal visibility state is toggled, and the updated visibility state is logged.
23
- */
24
- export class LaunchConfigureWhiteboard {
25
- /**
26
- * Toggles the visibility of the configure whiteboard modal.
27
- *
28
- * @param updateIsConfigureWhiteboardModalVisible - Function to update the visibility state of the configure whiteboard modal.
29
- * @param isConfigureWhiteboardModalVisible - Current visibility state of the configure whiteboard modal.
30
- */
31
- launchConfigureWhiteboard({ updateIsConfigureWhiteboardModalVisible, isConfigureWhiteboardModalVisible, }) {
32
- // Open or close the menu modal
33
- updateIsConfigureWhiteboardModalVisible(!isConfigureWhiteboardModalVisible);
34
- }
35
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LaunchConfigureWhiteboard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
36
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LaunchConfigureWhiteboard, providedIn: 'root' });
37
- }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LaunchConfigureWhiteboard, decorators: [{
39
- type: Injectable,
40
- args: [{
41
- providedIn: 'root',
42
- }]
43
- }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF1bmNoLWNvbmZpZ3VyZS13aGl0ZWJvYXJkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYXNmdS1hbmd1bGFyL3NyYy9saWIvbWV0aG9kcy93aGl0ZWJvYXJkLW1ldGhvZHMvbGF1bmNoLWNvbmZpZ3VyZS13aGl0ZWJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0JBQXdCO0FBQ3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUzNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBTUgsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQzs7Ozs7T0FLRztJQUVILHlCQUF5QixDQUFDLEVBQ3hCLHVDQUF1QyxFQUN2QyxpQ0FBaUMsR0FDQTtRQUNqQywrQkFBK0I7UUFDL0IsdUNBQXVDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7dUdBZFUseUJBQXlCOzJHQUF6Qix5QkFBeUIsY0FGeEIsTUFBTTs7MkZBRVAseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHdoaXRlYm9hcmQuc2VydmljZS50c1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hDb25maWd1cmVXaGl0ZWJvYXJkT3B0aW9ucyB7XG4gIHVwZGF0ZUlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZTogKHZpc2libGU6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIGlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZTogYm9vbGVhbjtcbn1cblxuLy8gRXhwb3J0IHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmdW5jdGlvblxuZXhwb3J0IHR5cGUgTGF1bmNoQ29uZmlndXJlV2hpdGVib2FyZFR5cGUgPSAob3B0aW9uczogTGF1bmNoQ29uZmlndXJlV2hpdGVib2FyZE9wdGlvbnMpID0+IHZvaWQ7XG5cbi8qKlxuICogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgY29uZmlndXJlIHdoaXRlYm9hcmQgbW9kYWwuXG4gKlxuICogQHBhcmFtIHtMYXVuY2hDb25maWd1cmVXaGl0ZWJvYXJkT3B0aW9uc30gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29udHJvbCB3aGl0ZWJvYXJkIGNvbmZpZ3VyYXRpb24gbW9kYWwuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLnVwZGF0ZUlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZSAtIEZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgbW9kYWwncyB2aXNpYmlsaXR5IHN0YXRlLlxuICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZSAtIEN1cnJlbnQgdmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgY29uZmlndXJlIHdoaXRlYm9hcmQgbW9kYWwuXG4gKlxuICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBjdXJyZW50IHZpc2liaWxpdHkgc3RhdGUgdG8gdG9nZ2xlIHRoZSB3aGl0ZWJvYXJkIGNvbmZpZ3VyYXRpb24gbW9kYWwgb24gb3Igb2ZmLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBsYXVuY2hTZXJ2aWNlID0gbmV3IExhdW5jaENvbmZpZ3VyZVdoaXRlYm9hcmQoKTtcbiAqIGxhdW5jaFNlcnZpY2UubGF1bmNoQ29uZmlndXJlV2hpdGVib2FyZCh7XG4gKiAgIHVwZGF0ZUlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZTogKHZpc2libGUpID0+IGNvbnNvbGUubG9nKCdNb2RhbCBWaXNpYmxlOicsIHZpc2libGUpLFxuICogICBpc0NvbmZpZ3VyZVdoaXRlYm9hcmRNb2RhbFZpc2libGU6IGZhbHNlXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEluIHRoaXMgZXhhbXBsZSwgdGhlIG1vZGFsIHZpc2liaWxpdHkgc3RhdGUgaXMgdG9nZ2xlZCwgYW5kIHRoZSB1cGRhdGVkIHZpc2liaWxpdHkgc3RhdGUgaXMgbG9nZ2VkLlxuICovXG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExhdW5jaENvbmZpZ3VyZVdoaXRlYm9hcmQge1xuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgY29uZmlndXJlIHdoaXRlYm9hcmQgbW9kYWwuXG4gICAqXG4gICAqIEBwYXJhbSB1cGRhdGVJc0NvbmZpZ3VyZVdoaXRlYm9hcmRNb2RhbFZpc2libGUgLSBGdW5jdGlvbiB0byB1cGRhdGUgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIGNvbmZpZ3VyZSB3aGl0ZWJvYXJkIG1vZGFsLlxuICAgKiBAcGFyYW0gaXNDb25maWd1cmVXaGl0ZWJvYXJkTW9kYWxWaXNpYmxlIC0gQ3VycmVudCB2aXNpYmlsaXR5IHN0YXRlIG9mIHRoZSBjb25maWd1cmUgd2hpdGVib2FyZCBtb2RhbC5cbiAgICovXG5cbiAgbGF1bmNoQ29uZmlndXJlV2hpdGVib2FyZCh7XG4gICAgdXBkYXRlSXNDb25maWd1cmVXaGl0ZWJvYXJkTW9kYWxWaXNpYmxlLFxuICAgIGlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZSxcbiAgfTogTGF1bmNoQ29uZmlndXJlV2hpdGVib2FyZE9wdGlvbnMpOiB2b2lkIHtcbiAgICAvLyBPcGVuIG9yIGNsb3NlIHRoZSBtZW51IG1vZGFsXG4gICAgdXBkYXRlSXNDb25maWd1cmVXaGl0ZWJvYXJkTW9kYWxWaXNpYmxlKCFpc0NvbmZpZ3VyZVdoaXRlYm9hcmRNb2RhbFZpc2libGUpO1xuICB9XG59XG4iXX0=
@@ -1,74 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as mediasoupClient from 'mediasoup-client';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Creates a mediasoup client device using the provided RTP capabilities.
6
- *
7
- * @param {CreateDeviceClientOptions} options - Options containing the required RTP capabilities.
8
- * @param {RtpCapabilities | null} options.rtpCapabilities - The RTP capabilities necessary for initializing the device.
9
- * @returns {Promise<Device | null>} - A promise resolving to the created `Device` instance or `null` if creation fails.
10
- * @throws {Error} - Throws an error if RTP capabilities or the mediasoup client library are not provided, or if the device is unsupported by the browser.
11
- *
12
- * This function initializes a mediasoup client `Device` using the specified RTP capabilities, enabling communication capabilities according to provided media configurations. It filters out unsupported video orientation extensions and loads router capabilities, ensuring compatibility with client configurations.
13
- *
14
- * @example
15
- * ```typescript
16
- * const client = new CreateDeviceClient();
17
- * const device = await client.createDeviceClient({ rtpCapabilities });
18
- * if (device) {
19
- * console.log('Device created successfully:', device);
20
- * } else {
21
- * console.log('Failed to create device.');
22
- * }
23
- * ```
24
- *
25
- * In this example, the function creates a device based on RTP capabilities, handling errors and unsupported devices gracefully.
26
- */
27
- export class CreateDeviceClient {
28
- /**
29
- * Creates a mediasoup client device with the provided RTP capabilities.
30
- *
31
- * @param {CreateDeviceClientOptions} options - The options for creating the device client.
32
- * @param {RTPCapabilities} options.rtpCapabilities - The RTP capabilities required for the device.
33
- * @returns {Promise<Device | null>} A promise that resolves to the created Device or null if creation fails.
34
- * @throws {Error} Throws an error if the required parameters are not provided or if device creation is not supported.
35
- *
36
- */
37
- async createDeviceClient({ rtpCapabilities }) {
38
- try {
39
- // Validate input parameters
40
- if (!rtpCapabilities || !mediasoupClient) {
41
- throw new Error('Both rtpCapabilities and mediasoupClient must be provided.');
42
- }
43
- // Create a mediasoup client device
44
- const device = new mediasoupClient.Device();
45
- // Remove orientation capabilities
46
- if (rtpCapabilities.headerExtensions) {
47
- rtpCapabilities.headerExtensions = rtpCapabilities.headerExtensions.filter((ext) => ext.uri !== 'urn:3gpp:video-orientation');
48
- }
49
- // Load the provided RTP capabilities into the device
50
- await device.load({
51
- routerRtpCapabilities: rtpCapabilities,
52
- });
53
- // Perform additional initialization, e.g., loading spinner and retrieving messages
54
- return device;
55
- }
56
- catch (error) {
57
- // Handle specific errors, e.g., UnsupportedError
58
- if (error.name === 'UnsupportedError') {
59
- // Handle unsupported device creation
60
- console.error('UnsupportedError: Device creation is not supported by the browser.');
61
- }
62
- throw error; // Propagate other errors
63
- }
64
- }
65
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CreateDeviceClient, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
66
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CreateDeviceClient, providedIn: 'root' });
67
- }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CreateDeviceClient, decorators: [{
69
- type: Injectable,
70
- args: [{
71
- providedIn: 'root',
72
- }]
73
- }] });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWRldmljZS1jbGllbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9wcm9kdWNlci1jbGllbnQvcHJvZHVjZXItY2xpZW50LWVtaXRzL2NyZWF0ZS1kZXZpY2UtY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEtBQUssZUFBZSxNQUFNLGtCQUFrQixDQUFDOztBQVFwRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUtILE1BQU0sT0FBTyxrQkFBa0I7SUFDN0I7Ozs7Ozs7O09BUUc7SUFFSCxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRSxlQUFlLEVBQTZCO1FBQ3JFLElBQUksQ0FBQztZQUNILDRCQUE0QjtZQUM1QixJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztZQUNoRixDQUFDO1lBRUQsbUNBQW1DO1lBQ25DLE1BQU0sTUFBTSxHQUFXLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRXBELGtDQUFrQztZQUNsQyxJQUFJLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyQyxlQUFlLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FDeEUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssNEJBQTRCLENBQ2xELENBQUM7WUFDSixDQUFDO1lBRUQscURBQXFEO1lBQ3JELE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDaEIscUJBQXFCLEVBQUUsZUFBZTthQUN2QyxDQUFDLENBQUM7WUFFSCxtRkFBbUY7WUFFbkYsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsaURBQWlEO1lBQ2pELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN0QyxxQ0FBcUM7Z0JBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztZQUN0RixDQUFDO1lBRUQsTUFBTSxLQUFLLENBQUMsQ0FBQyx5QkFBeUI7UUFDeEMsQ0FBQztJQUNILENBQUM7dUdBN0NVLGtCQUFrQjsyR0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSdHBDYXBhYmlsaXRpZXMsIERldmljZSB9IGZyb20gJ21lZGlhc291cC1jbGllbnQvbGliL3R5cGVzJztcbmltcG9ydCAqIGFzIG1lZGlhc291cENsaWVudCBmcm9tICdtZWRpYXNvdXAtY2xpZW50JztcbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRGV2aWNlQ2xpZW50T3B0aW9ucyB7XG4gIHJ0cENhcGFiaWxpdGllczogUnRwQ2FwYWJpbGl0aWVzIHwgbnVsbDtcbn1cblxuLy8gRXhwb3J0IHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmdW5jdGlvblxuZXhwb3J0IHR5cGUgQ3JlYXRlRGV2aWNlQ2xpZW50VHlwZSA9IChvcHRpb25zOiBDcmVhdGVEZXZpY2VDbGllbnRPcHRpb25zKSA9PiBQcm9taXNlPERldmljZSB8IG51bGw+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtZWRpYXNvdXAgY2xpZW50IGRldmljZSB1c2luZyB0aGUgcHJvdmlkZWQgUlRQIGNhcGFiaWxpdGllcy5cbiAqXG4gKiBAcGFyYW0ge0NyZWF0ZURldmljZUNsaWVudE9wdGlvbnN9IG9wdGlvbnMgLSBPcHRpb25zIGNvbnRhaW5pbmcgdGhlIHJlcXVpcmVkIFJUUCBjYXBhYmlsaXRpZXMuXG4gKiBAcGFyYW0ge1J0cENhcGFiaWxpdGllcyB8IG51bGx9IG9wdGlvbnMucnRwQ2FwYWJpbGl0aWVzIC0gVGhlIFJUUCBjYXBhYmlsaXRpZXMgbmVjZXNzYXJ5IGZvciBpbml0aWFsaXppbmcgdGhlIGRldmljZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPERldmljZSB8IG51bGw+fSAtIEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNyZWF0ZWQgYERldmljZWAgaW5zdGFuY2Ugb3IgYG51bGxgIGlmIGNyZWF0aW9uIGZhaWxzLlxuICogQHRocm93cyB7RXJyb3J9IC0gVGhyb3dzIGFuIGVycm9yIGlmIFJUUCBjYXBhYmlsaXRpZXMgb3IgdGhlIG1lZGlhc291cCBjbGllbnQgbGlicmFyeSBhcmUgbm90IHByb3ZpZGVkLCBvciBpZiB0aGUgZGV2aWNlIGlzIHVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSBtZWRpYXNvdXAgY2xpZW50IGBEZXZpY2VgIHVzaW5nIHRoZSBzcGVjaWZpZWQgUlRQIGNhcGFiaWxpdGllcywgZW5hYmxpbmcgY29tbXVuaWNhdGlvbiBjYXBhYmlsaXRpZXMgYWNjb3JkaW5nIHRvIHByb3ZpZGVkIG1lZGlhIGNvbmZpZ3VyYXRpb25zLiBJdCBmaWx0ZXJzIG91dCB1bnN1cHBvcnRlZCB2aWRlbyBvcmllbnRhdGlvbiBleHRlbnNpb25zIGFuZCBsb2FkcyByb3V0ZXIgY2FwYWJpbGl0aWVzLCBlbnN1cmluZyBjb21wYXRpYmlsaXR5IHdpdGggY2xpZW50IGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjbGllbnQgPSBuZXcgQ3JlYXRlRGV2aWNlQ2xpZW50KCk7XG4gKiBjb25zdCBkZXZpY2UgPSBhd2FpdCBjbGllbnQuY3JlYXRlRGV2aWNlQ2xpZW50KHsgcnRwQ2FwYWJpbGl0aWVzIH0pO1xuICogaWYgKGRldmljZSkge1xuICogICBjb25zb2xlLmxvZygnRGV2aWNlIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5OicsIGRldmljZSk7XG4gKiB9IGVsc2Uge1xuICogICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2UuJyk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgZGV2aWNlIGJhc2VkIG9uIFJUUCBjYXBhYmlsaXRpZXMsIGhhbmRsaW5nIGVycm9ycyBhbmQgdW5zdXBwb3J0ZWQgZGV2aWNlcyBncmFjZWZ1bGx5LlxuICovXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDcmVhdGVEZXZpY2VDbGllbnQge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG1lZGlhc291cCBjbGllbnQgZGV2aWNlIHdpdGggdGhlIHByb3ZpZGVkIFJUUCBjYXBhYmlsaXRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q3JlYXRlRGV2aWNlQ2xpZW50T3B0aW9uc30gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBjcmVhdGluZyB0aGUgZGV2aWNlIGNsaWVudC5cbiAgICogQHBhcmFtIHtSVFBDYXBhYmlsaXRpZXN9IG9wdGlvbnMucnRwQ2FwYWJpbGl0aWVzIC0gVGhlIFJUUCBjYXBhYmlsaXRpZXMgcmVxdWlyZWQgZm9yIHRoZSBkZXZpY2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERldmljZSB8IG51bGw+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCBEZXZpY2Ugb3IgbnVsbCBpZiBjcmVhdGlvbiBmYWlscy5cbiAgICogQHRocm93cyB7RXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBhcmUgbm90IHByb3ZpZGVkIG9yIGlmIGRldmljZSBjcmVhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKi9cblxuICBhc3luYyBjcmVhdGVEZXZpY2VDbGllbnQoeyBydHBDYXBhYmlsaXRpZXMgfTogQ3JlYXRlRGV2aWNlQ2xpZW50T3B0aW9ucyk6IFByb21pc2U8RGV2aWNlIHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzXG4gICAgICBpZiAoIXJ0cENhcGFiaWxpdGllcyB8fCAhbWVkaWFzb3VwQ2xpZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBydHBDYXBhYmlsaXRpZXMgYW5kIG1lZGlhc291cENsaWVudCBtdXN0IGJlIHByb3ZpZGVkLicpO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgYSBtZWRpYXNvdXAgY2xpZW50IGRldmljZVxuICAgICAgY29uc3QgZGV2aWNlOiBEZXZpY2UgPSBuZXcgbWVkaWFzb3VwQ2xpZW50LkRldmljZSgpO1xuXG4gICAgICAvLyBSZW1vdmUgb3JpZW50YXRpb24gY2FwYWJpbGl0aWVzXG4gICAgICBpZiAocnRwQ2FwYWJpbGl0aWVzLmhlYWRlckV4dGVuc2lvbnMpIHtcbiAgICAgICAgcnRwQ2FwYWJpbGl0aWVzLmhlYWRlckV4dGVuc2lvbnMgPSBydHBDYXBhYmlsaXRpZXMuaGVhZGVyRXh0ZW5zaW9ucy5maWx0ZXIoXG4gICAgICAgICAgKGV4dCkgPT4gZXh0LnVyaSAhPT0gJ3VybjozZ3BwOnZpZGVvLW9yaWVudGF0aW9uJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gTG9hZCB0aGUgcHJvdmlkZWQgUlRQIGNhcGFiaWxpdGllcyBpbnRvIHRoZSBkZXZpY2VcbiAgICAgIGF3YWl0IGRldmljZS5sb2FkKHtcbiAgICAgICAgcm91dGVyUnRwQ2FwYWJpbGl0aWVzOiBydHBDYXBhYmlsaXRpZXMsXG4gICAgICB9KTtcblxuICAgICAgLy8gUGVyZm9ybSBhZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uLCBlLmcuLCBsb2FkaW5nIHNwaW5uZXIgYW5kIHJldHJpZXZpbmcgbWVzc2FnZXNcblxuICAgICAgcmV0dXJuIGRldmljZTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBIYW5kbGUgc3BlY2lmaWMgZXJyb3JzLCBlLmcuLCBVbnN1cHBvcnRlZEVycm9yXG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ1Vuc3VwcG9ydGVkRXJyb3InKSB7XG4gICAgICAgIC8vIEhhbmRsZSB1bnN1cHBvcnRlZCBkZXZpY2UgY3JlYXRpb25cbiAgICAgICAgY29uc29sZS5lcnJvcignVW5zdXBwb3J0ZWRFcnJvcjogRGV2aWNlIGNyZWF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuJyk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yOyAvLyBQcm9wYWdhdGUgb3RoZXIgZXJyb3JzXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,96 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../producers/producer-emits/join-room.service";
4
- import * as i2 from "../../producers/producer-emits/join-con-room.service";
5
- /**
6
- * Facilitates joining a room by emitting the `joinRoom` event to the server through a socket connection.
7
- *
8
- * @param {JoinRoomClientOptions} options - Configuration options for joining the room.
9
- * @param {Socket} options.socket - The socket instance for server communication.
10
- * @param {string} options.roomName - The name of the room to join.
11
- * @param {string} options.islevel - Level identifier for the user in the room.
12
- * @param {string} options.member - Member identifier for the joining user.
13
- * @param {string} options.sec - Security token or identifier for access.
14
- * @param {string} options.apiUserName - API username for server authentication.
15
- * @param {boolean} [options.consume=false] - If `true`, joins via `joinConRoom`; otherwise, joins via `joinRoom`.
16
- * @returns {Promise<any>} - A promise resolving with the server response data.
17
- * @throws {Error} - Throws an error if the room joining attempt fails.
18
- *
19
- * @example
20
- * ```typescript
21
- * const joinRoomClient = new JoinRoomClient(joinRoomService, joinConRoomService);
22
- * const response = await joinRoomClient.joinRoomClient({
23
- * socket: mySocket,
24
- * roomName: 'myRoom',
25
- * islevel: '1',
26
- * member: 'user123',
27
- * sec: 'secureToken',
28
- * apiUserName: 'apiUser',
29
- * consume: true,
30
- * });
31
- * console.log('Joined room with response:', response);
32
- * ```
33
- *
34
- * This example demonstrates using `joinRoomClient` to join a room, either as a consumer or a producer, based on the `consume` flag.
35
- */
36
- export class JoinRoomClient {
37
- JoinRoomService;
38
- JoinConRoomService;
39
- constructor(JoinRoomService, JoinConRoomService) {
40
- this.JoinRoomService = JoinRoomService;
41
- this.JoinConRoomService = JoinConRoomService;
42
- }
43
- /**
44
- * Joins a room by emitting the `joinRoom` event to the server using the provided socket.
45
- *
46
- * @param {Object} options - The options for joining the room.
47
- * @param {Socket} options.socket - The socket instance to use for communication.
48
- * @param {string} options.roomName - The name of the room to join.
49
- * @param {boolean} options.islevel - The level indicator for the room.
50
- * @param {string} options.member - The member identifier.
51
- * @param {string} options.sec - The security token or identifier.
52
- * @param {string} options.apiUserName - The API username for authentication.
53
- * @param {boolean} [options.consume=false] - Flag to determine which join function to use.
54
- * @returns {Promise<any>} A promise that resolves with the data returned from the server.
55
- * @throws {Error} Throws an error if the room joining process fails.
56
- */
57
- async joinRoomClient({ socket, roomName, islevel, member, sec, apiUserName, consume = false, }) {
58
- try {
59
- let data;
60
- if (consume) {
61
- data = await this.JoinConRoomService.joinConRoom({
62
- socket,
63
- roomName,
64
- islevel,
65
- member,
66
- sec,
67
- apiUserName,
68
- });
69
- }
70
- else {
71
- data = await this.JoinRoomService.joinRoom({
72
- socket,
73
- roomName,
74
- islevel,
75
- member,
76
- sec,
77
- apiUserName,
78
- });
79
- }
80
- return data;
81
- }
82
- catch (error) {
83
- console.error(error);
84
- throw new Error('Failed to join the room. Please check your connection and try again.');
85
- }
86
- }
87
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: JoinRoomClient, deps: [{ token: i1.JoinRoom }, { token: i2.JoinConRoom }], target: i0.ɵɵFactoryTarget.Injectable });
88
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: JoinRoomClient, providedIn: 'root' });
89
- }
90
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: JoinRoomClient, decorators: [{
91
- type: Injectable,
92
- args: [{
93
- providedIn: 'root',
94
- }]
95
- }], ctorParameters: () => [{ type: i1.JoinRoom }, { type: i2.JoinConRoom }] });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9pbi1yb29tLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWFzZnUtYW5ndWxhci9zcmMvbGliL3Byb2R1Y2VyLWNsaWVudC9wcm9kdWNlci1jbGllbnQtZW1pdHMvam9pbi1yb29tLWNsaWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFtQjNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFLSCxNQUFNLE9BQU8sY0FBYztJQUNMO0lBQW1DO0lBQXZELFlBQW9CLGVBQXlCLEVBQVUsa0JBQStCO1FBQWxFLG9CQUFlLEdBQWYsZUFBZSxDQUFVO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFhO0lBQUcsQ0FBQztJQUUxRjs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUNuQixNQUFNLEVBQ04sUUFBUSxFQUNSLE9BQU8sRUFDUCxNQUFNLEVBQ04sR0FBRyxFQUNILFdBQVcsRUFDWCxPQUFPLEdBQUcsS0FBSyxHQUNPO1FBQ3RCLElBQUksQ0FBQztZQUNILElBQUksSUFBK0IsQ0FBQztZQUVwQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7b0JBQy9DLE1BQU07b0JBQ04sUUFBUTtvQkFDUixPQUFPO29CQUNQLE1BQU07b0JBQ04sR0FBRztvQkFDSCxXQUFXO2lCQUNaLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztvQkFDekMsTUFBTTtvQkFDTixRQUFRO29CQUNSLE9BQU87b0JBQ1AsTUFBTTtvQkFDTixHQUFHO29CQUNILFdBQVc7aUJBQ1osQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztRQUMxRixDQUFDO0lBQ0gsQ0FBQzt1R0F0RFUsY0FBYzsyR0FBZCxjQUFjLGNBRmIsTUFBTTs7MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKb2luUm9vbSB9IGZyb20gJy4uLy4uL3Byb2R1Y2Vycy9wcm9kdWNlci1lbWl0cy9qb2luLXJvb20uc2VydmljZSc7XG5pbXBvcnQgeyBKb2luQ29uUm9vbSB9IGZyb20gJy4uLy4uL3Byb2R1Y2Vycy9wcm9kdWNlci1lbWl0cy9qb2luLWNvbi1yb29tLnNlcnZpY2UnO1xuaW1wb3J0IHsgU29ja2V0IH0gZnJvbSAnc29ja2V0LmlvLWNsaWVudCc7XG5pbXBvcnQgeyBSZXNwb25zZUpvaW5Sb29tIH0gZnJvbSAnLi4vLi4vQHR5cGVzL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBKb2luUm9vbUNsaWVudE9wdGlvbnMge1xuICBzb2NrZXQ6IFNvY2tldDtcbiAgcm9vbU5hbWU6IHN0cmluZztcbiAgaXNsZXZlbDogc3RyaW5nO1xuICBtZW1iZXI6IHN0cmluZztcbiAgc2VjOiBzdHJpbmc7XG4gIGFwaVVzZXJOYW1lOiBzdHJpbmc7XG4gIGNvbnN1bWU/OiBib29sZWFuO1xufVxuXG4vLyBFeHBvcnQgdGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIGZ1bmN0aW9uXG5leHBvcnQgdHlwZSBKb2luUm9vbUNsaWVudFR5cGUgPSAocGFyYW1zOiBKb2luUm9vbUNsaWVudE9wdGlvbnMpID0+IFByb21pc2U8YW55PjtcblxuLyoqXG4gKiBGYWNpbGl0YXRlcyBqb2luaW5nIGEgcm9vbSBieSBlbWl0dGluZyB0aGUgYGpvaW5Sb29tYCBldmVudCB0byB0aGUgc2VydmVyIHRocm91Z2ggYSBzb2NrZXQgY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0pvaW5Sb29tQ2xpZW50T3B0aW9uc30gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3Igam9pbmluZyB0aGUgcm9vbS5cbiAqIEBwYXJhbSB7U29ja2V0fSBvcHRpb25zLnNvY2tldCAtIFRoZSBzb2NrZXQgaW5zdGFuY2UgZm9yIHNlcnZlciBjb21tdW5pY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMucm9vbU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcm9vbSB0byBqb2luLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuaXNsZXZlbCAtIExldmVsIGlkZW50aWZpZXIgZm9yIHRoZSB1c2VyIGluIHRoZSByb29tLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubWVtYmVyIC0gTWVtYmVyIGlkZW50aWZpZXIgZm9yIHRoZSBqb2luaW5nIHVzZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5zZWMgLSBTZWN1cml0eSB0b2tlbiBvciBpZGVudGlmaWVyIGZvciBhY2Nlc3MuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5hcGlVc2VyTmFtZSAtIEFQSSB1c2VybmFtZSBmb3Igc2VydmVyIGF1dGhlbnRpY2F0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jb25zdW1lPWZhbHNlXSAtIElmIGB0cnVlYCwgam9pbnMgdmlhIGBqb2luQ29uUm9vbWA7IG90aGVyd2lzZSwgam9pbnMgdmlhIGBqb2luUm9vbWAuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSAtIEEgcHJvbWlzZSByZXNvbHZpbmcgd2l0aCB0aGUgc2VydmVyIHJlc3BvbnNlIGRhdGEuXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHJvb20gam9pbmluZyBhdHRlbXB0IGZhaWxzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBqb2luUm9vbUNsaWVudCA9IG5ldyBKb2luUm9vbUNsaWVudChqb2luUm9vbVNlcnZpY2UsIGpvaW5Db25Sb29tU2VydmljZSk7XG4gKiBjb25zdCByZXNwb25zZSA9IGF3YWl0IGpvaW5Sb29tQ2xpZW50LmpvaW5Sb29tQ2xpZW50KHtcbiAqICAgc29ja2V0OiBteVNvY2tldCxcbiAqICAgcm9vbU5hbWU6ICdteVJvb20nLFxuICogICBpc2xldmVsOiAnMScsXG4gKiAgIG1lbWJlcjogJ3VzZXIxMjMnLFxuICogICBzZWM6ICdzZWN1cmVUb2tlbicsXG4gKiAgIGFwaVVzZXJOYW1lOiAnYXBpVXNlcicsXG4gKiAgIGNvbnN1bWU6IHRydWUsXG4gKiB9KTtcbiAqIGNvbnNvbGUubG9nKCdKb2luZWQgcm9vbSB3aXRoIHJlc3BvbnNlOicsIHJlc3BvbnNlKTtcbiAqIGBgYFxuICpcbiAqIFRoaXMgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgdXNpbmcgYGpvaW5Sb29tQ2xpZW50YCB0byBqb2luIGEgcm9vbSwgZWl0aGVyIGFzIGEgY29uc3VtZXIgb3IgYSBwcm9kdWNlciwgYmFzZWQgb24gdGhlIGBjb25zdW1lYCBmbGFnLlxuICovXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBKb2luUm9vbUNsaWVudCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgSm9pblJvb21TZXJ2aWNlOiBKb2luUm9vbSwgcHJpdmF0ZSBKb2luQ29uUm9vbVNlcnZpY2U6IEpvaW5Db25Sb29tKSB7fVxuXG4gIC8qKlxuICAgKiBKb2lucyBhIHJvb20gYnkgZW1pdHRpbmcgdGhlIGBqb2luUm9vbWAgZXZlbnQgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgcHJvdmlkZWQgc29ja2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBqb2luaW5nIHRoZSByb29tLlxuICAgKiBAcGFyYW0ge1NvY2tldH0gb3B0aW9ucy5zb2NrZXQgLSBUaGUgc29ja2V0IGluc3RhbmNlIHRvIHVzZSBmb3IgY29tbXVuaWNhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMucm9vbU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcm9vbSB0byBqb2luLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaXNsZXZlbCAtIFRoZSBsZXZlbCBpbmRpY2F0b3IgZm9yIHRoZSByb29tLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5tZW1iZXIgLSBUaGUgbWVtYmVyIGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnNlYyAtIFRoZSBzZWN1cml0eSB0b2tlbiBvciBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5hcGlVc2VyTmFtZSAtIFRoZSBBUEkgdXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNvbnN1bWU9ZmFsc2VdIC0gRmxhZyB0byBkZXRlcm1pbmUgd2hpY2ggam9pbiBmdW5jdGlvbiB0byB1c2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSByb29tIGpvaW5pbmcgcHJvY2VzcyBmYWlscy5cbiAgICovXG4gIGFzeW5jIGpvaW5Sb29tQ2xpZW50KHtcbiAgICBzb2NrZXQsXG4gICAgcm9vbU5hbWUsXG4gICAgaXNsZXZlbCxcbiAgICBtZW1iZXIsXG4gICAgc2VjLFxuICAgIGFwaVVzZXJOYW1lLFxuICAgIGNvbnN1bWUgPSBmYWxzZSxcbiAgfTogSm9pblJvb21DbGllbnRPcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IGRhdGE6IFBhcnRpYWw8UmVzcG9uc2VKb2luUm9vbT47XG5cbiAgICAgIGlmIChjb25zdW1lKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLkpvaW5Db25Sb29tU2VydmljZS5qb2luQ29uUm9vbSh7XG4gICAgICAgICAgc29ja2V0LFxuICAgICAgICAgIHJvb21OYW1lLFxuICAgICAgICAgIGlzbGV2ZWwsXG4gICAgICAgICAgbWVtYmVyLFxuICAgICAgICAgIHNlYyxcbiAgICAgICAgICBhcGlVc2VyTmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhID0gYXdhaXQgdGhpcy5Kb2luUm9vbVNlcnZpY2Uuam9pblJvb20oe1xuICAgICAgICAgIHNvY2tldCxcbiAgICAgICAgICByb29tTmFtZSxcbiAgICAgICAgICBpc2xldmVsLFxuICAgICAgICAgIG1lbWJlcixcbiAgICAgICAgICBzZWMsXG4gICAgICAgICAgYXBpVXNlck5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBqb2luIHRoZSByb29tLiBQbGVhc2UgY2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4uJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,276 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-non-null-assertion */
2
- // room.service.ts
3
- import { Injectable } from '@angular/core';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../../methods/utils/producer/video-capture-constraints.service";
6
- import * as i2 from "../../methods/utils/producer/h-params.service";
7
- import * as i3 from "../../methods/utils/producer/v-params.service";
8
- import * as i4 from "../../methods/utils/producer/screen-params.service";
9
- import * as i5 from "../../methods/utils/producer/a-params.service";
10
- /**
11
- * Updates room parameters for the client after joining a room and receiving server-provided parameters.
12
- *
13
- * @param {UpdateRoomParametersClientOptions} options - An object containing:
14
- * - various room settings and parameters,
15
- * - functions to update those parameters.
16
- *
17
- * - **Screen/Page Settings:** Adjusts screen and item page limits, meeting room parameters, and video constraints based on server data.
18
- * - **Recording and Media Settings:** Applies bitrate and frame rate adjustments, based on the target resolution and media options.
19
- * - **Role-Specific Settings:** Configures admin, host, and co-host settings for permissions, orientations, and resolutions.
20
- * - **Alerting**: Uses `showAlert` to notify the client on issues or permissions restrictions.
21
- *
22
- * @example
23
- * ```typescript
24
- * const options = {
25
- * parameters: {
26
- * rtpCapabilities: myRtpCapabilities,
27
- * roomRecvIPs: ['192.168.1.1'],
28
- * meetingRoomParams: myMeetingParams,
29
- * itemPageLimit: 3,
30
- * audioOnlyRoom: false,
31
- * addForBasic: true,
32
- * screenPageLimit: 2,
33
- * shareScreenStarted: false,
34
- * shared: true,
35
- * targetOrientation: 'landscape',
36
- * recordingVideoSupport: true,
37
- * frameRate: 15,
38
- * adminPasscode: 'admin123',
39
- * eventType: 'conference',
40
- * youAreCoHost: false,
41
- * updateRtpCapabilities: (rtp) => console.log('Updating RTP:', rtp),
42
- * updateRoomRecvIPs: (ips) => console.log('Updating IPs:', ips),
43
- * updateMeetingRoomParams: (params) => console.log('Updating room params:', params),
44
- * // Additional parameters...
45
- * },
46
- * };
47
- *
48
- * const updateRoomParametersClient = new UpdateRoomParametersClient(videoCaptureConstraints, hParams, vParams, screenParams, aParams);
49
- * updateRoomParametersClient.updateRoomParametersClient(options);
50
- * ```
51
- *
52
- * This example demonstrates setting up room parameters for a conference-type room with recording support and custom update functions.
53
- */
54
- export class UpdateRoomParametersClient {
55
- videoCaptureConstraints;
56
- hParams;
57
- vParams;
58
- screenParams;
59
- aParams;
60
- constructor(videoCaptureConstraints, hParams, vParams, screenParams, aParams) {
61
- this.videoCaptureConstraints = videoCaptureConstraints;
62
- this.hParams = hParams;
63
- this.vParams = vParams;
64
- this.screenParams = screenParams;
65
- this.aParams = aParams;
66
- }
67
- /**
68
- * Update Room Parameters Client after the user has joined the room and the room parameters have been received from the server.
69
- * @param {Object} parameters - An object containing various parameters and update functions.
70
- */
71
- updateRoomParametersClient = ({ parameters }) => {
72
- try {
73
- const { screenPageLimit, shareScreenStarted, shared, hParams, vParams, frameRate, islevel, showAlert, data,
74
- //updates
75
- updateRtpCapabilities, updateRoomRecvIPs, updateMeetingRoomParams, updateItemPageLimit, updateAudioOnlyRoom, updateScreenPageLimit, updateVidCons, updateFrameRate, updateAdminPasscode, updateEventType, updateYouAreCoHost, updateAutoWave, updateForceFullDisplay, updateChatSetting, updateMeetingDisplayType, updateAudioSetting, updateVideoSetting, updateScreenshareSetting, updateHParams, updateVParams, updateScreenParams, updateAParams, updateTargetResolution, updateTargetResolutionHost,
76
- // Recording updates
77
- updateRecordingAudioPausesLimit, updateRecordingAudioPausesCount, updateRecordingAudioSupport, updateRecordingAudioPeopleLimit, updateRecordingAudioParticipantsTimeLimit, updateRecordingVideoPausesCount, updateRecordingVideoPausesLimit, updateRecordingVideoSupport, updateRecordingVideoPeopleLimit, updateRecordingVideoParticipantsTimeLimit, updateRecordingAllParticipantsSupport, updateRecordingVideoParticipantsSupport, updateRecordingAllParticipantsFullRoomSupport, updateRecordingVideoParticipantsFullRoomSupport, updateRecordingPreferredOrientation, updateRecordingSupportForOtherOrientation, updateRecordingMultiFormatsSupport, updateRecordingVideoOptions, updateRecordingAudioOptions, updateMainHeightWidth, } = parameters;
78
- if (data.rtpCapabilities == null) {
79
- let reason = data.reason || '';
80
- showAlert?.({
81
- message: 'Sorry, you are not allowed to join this room. ' + reason,
82
- type: 'danger',
83
- duration: 3000,
84
- });
85
- return;
86
- }
87
- // Update all values
88
- updateRtpCapabilities(data.rtpCapabilities);
89
- updateAdminPasscode(data.secureCode);
90
- updateRoomRecvIPs(data.roomRecvIPs);
91
- updateMeetingRoomParams(data.meetingRoomParams);
92
- // Update recording values
93
- updateRecordingAudioPausesLimit(data.recordingParams.recordingAudioPausesLimit);
94
- updateRecordingAudioPausesCount(data.recordingParams.recordingAudioPausesCount);
95
- updateRecordingAudioSupport(data.recordingParams.recordingAudioSupport);
96
- updateRecordingAudioPeopleLimit(data.recordingParams.recordingAudioPeopleLimit);
97
- updateRecordingAudioParticipantsTimeLimit(data.recordingParams.recordingAudioParticipantsTimeLimit);
98
- updateRecordingVideoPausesCount(data.recordingParams.recordingVideoPausesCount);
99
- updateRecordingVideoPausesLimit(data.recordingParams.recordingVideoPausesLimit);
100
- updateRecordingVideoSupport(data.recordingParams.recordingVideoSupport);
101
- updateRecordingVideoPeopleLimit(data.recordingParams.recordingVideoPeopleLimit);
102
- updateRecordingVideoParticipantsTimeLimit(data.recordingParams.recordingVideoParticipantsTimeLimit);
103
- updateRecordingAllParticipantsSupport(data.recordingParams.recordingAllParticipantsSupport);
104
- updateRecordingVideoParticipantsSupport(data.recordingParams.recordingVideoParticipantsSupport);
105
- updateRecordingAllParticipantsFullRoomSupport(data.recordingParams.recordingAllParticipantsFullRoomSupport);
106
- updateRecordingVideoParticipantsFullRoomSupport(data.recordingParams.recordingVideoParticipantsFullRoomSupport);
107
- updateRecordingPreferredOrientation(data.recordingParams.recordingPreferredOrientation);
108
- updateRecordingSupportForOtherOrientation(data.recordingParams.recordingSupportForOtherOrientation);
109
- updateRecordingMultiFormatsSupport(data.recordingParams.recordingMultiFormatsSupport);
110
- // Update other meeting room settings
111
- updateItemPageLimit(data.meetingRoomParams.itemPageLimit);
112
- updateEventType(data.meetingRoomParams.type);
113
- if (data.meetingRoomParams.type == 'chat' && islevel != '2') {
114
- updateYouAreCoHost(true);
115
- }
116
- if (['chat', 'broadcast'].includes(data.meetingRoomParams.type)) {
117
- updateAutoWave(false);
118
- updateMeetingDisplayType('all');
119
- updateForceFullDisplay(true);
120
- updateChatSetting('allow');
121
- }
122
- updateAudioSetting(data.meetingRoomParams.audioSetting);
123
- updateVideoSetting(data.meetingRoomParams.videoSetting);
124
- updateScreenshareSetting(data.meetingRoomParams.screenshareSetting);
125
- updateChatSetting(data.meetingRoomParams.chatSetting);
126
- updateAudioOnlyRoom(data.meetingRoomParams.mediaType != 'video');
127
- if (data.meetingRoomParams.type == 'chat' || data.meetingRoomParams.type == 'broadcast') {
128
- if (data.meetingRoomParams.type == 'broadcast') {
129
- updateItemPageLimit(1);
130
- updateRecordingVideoOptions('mainScreen');
131
- updateRecordingAudioOptions('host');
132
- }
133
- else {
134
- updateItemPageLimit(2);
135
- }
136
- }
137
- if (data.meetingRoomParams.type == 'conference' && (shared || shareScreenStarted)) {
138
- updateMainHeightWidth(100);
139
- }
140
- else {
141
- updateMainHeightWidth(0);
142
- }
143
- updateScreenPageLimit(Math.min(data.meetingRoomParams.itemPageLimit, screenPageLimit));
144
- // Assign media capture constraints based on the user's role and room settings
145
- let targetOrientation = islevel == '2'
146
- ? data.meetingRoomParams.targetOrientationHost
147
- : data.meetingRoomParams.targetOrientation;
148
- let targetResolution = islevel == '2'
149
- ? data.meetingRoomParams.targetResolutionHost
150
- : data.meetingRoomParams.targetResolution;
151
- let vidCons;
152
- if (targetOrientation == 'landscape') {
153
- vidCons =
154
- targetResolution == 'hd'
155
- ? this.videoCaptureConstraints.hdCons
156
- : targetResolution == 'QnHD'
157
- ? this.videoCaptureConstraints.QnHDCons
158
- : targetResolution == 'fhd'
159
- ? this.videoCaptureConstraints.fhdCons
160
- : targetResolution == 'qhd'
161
- ? this.videoCaptureConstraints.qhdCons
162
- : this.videoCaptureConstraints.sdCons;
163
- }
164
- else if (targetOrientation == 'neutral') {
165
- vidCons =
166
- targetResolution == 'hd'
167
- ? this.videoCaptureConstraints.hdConsNeu
168
- : targetResolution == 'QnHD'
169
- ? this.videoCaptureConstraints.QnHDConsNeu
170
- : targetResolution == 'fhd'
171
- ? this.videoCaptureConstraints.fhdConsNeu
172
- : targetResolution == 'qhd'
173
- ? this.videoCaptureConstraints.qhdConsNeu
174
- : this.videoCaptureConstraints.sdConsNeu;
175
- }
176
- else {
177
- vidCons =
178
- targetResolution == 'hd'
179
- ? this.videoCaptureConstraints.hdConsPort
180
- : targetResolution == 'QnHD'
181
- ? this.videoCaptureConstraints.QnHDConsPort
182
- : targetResolution == 'fhd'
183
- ? this.videoCaptureConstraints.fhdConsPort
184
- : targetResolution == 'qhd'
185
- ? this.videoCaptureConstraints.qhdConsPort
186
- : this.videoCaptureConstraints.sdConsPort;
187
- }
188
- let frameRateValue = frameRate ? frameRate : 10;
189
- let vParamsValue = { ...vParams };
190
- let hParamsValue = { ...hParams };
191
- if (Object.keys(vParamsValue).length === 0) {
192
- vParamsValue = this.vParams.vParams;
193
- }
194
- if (Object.keys(hParamsValue).length === 0) {
195
- hParamsValue = this.hParams.hParams;
196
- }
197
- if (targetResolution == 'hd') {
198
- frameRateValue = this.videoCaptureConstraints.hdFrameRate;
199
- vParamsValue.encodings.forEach((encoding) => {
200
- encoding.maxBitrate && (encoding.maxBitrate *= 4);
201
- });
202
- hParamsValue.encodings.forEach((encoding) => {
203
- encoding.maxBitrate && (encoding.maxBitrate *= 4);
204
- });
205
- }
206
- else if (targetResolution == 'QnHD') {
207
- frameRateValue = this.videoCaptureConstraints.QnHDFrameRate;
208
- vParamsValue.encodings.forEach((encoding) => {
209
- encoding.maxBitrate && (encoding.maxBitrate *= 0.25);
210
- });
211
- hParamsValue.encodings.forEach((encoding) => {
212
- encoding.maxBitrate && (encoding.maxBitrate *= 0.25);
213
- });
214
- hParamsValue.codecOptions.videoGoogleStartBitrate *= 0.25;
215
- vParamsValue.codecOptions.videoGoogleStartBitrate *= 0.25;
216
- }
217
- else if (targetResolution == 'fhd') {
218
- frameRateValue = this.videoCaptureConstraints.fhdFrameRate;
219
- vParamsValue.encodings.forEach((encoding) => {
220
- encoding.maxBitrate && (encoding.maxBitrate *= 8);
221
- });
222
- hParamsValue.encodings.forEach((encoding) => {
223
- encoding.maxBitrate && (encoding.maxBitrate *= 8);
224
- });
225
- hParamsValue.codecOptions.videoGoogleStartBitrate *= 8;
226
- vParamsValue.codecOptions.videoGoogleStartBitrate *= 8;
227
- }
228
- else if (targetResolution == 'qhd') {
229
- frameRateValue = this.videoCaptureConstraints.qhdFrameRate;
230
- vParamsValue.encodings.forEach((encoding) => {
231
- encoding.maxBitrate && (encoding.maxBitrate *= 16);
232
- });
233
- hParamsValue.encodings.forEach((encoding) => {
234
- encoding.maxBitrate && (encoding.maxBitrate *= 16);
235
- });
236
- hParamsValue.codecOptions.videoGoogleStartBitrate *= 16;
237
- vParamsValue.codecOptions.videoGoogleStartBitrate *= 16;
238
- }
239
- if (data.recordingParams.recordingVideoSupport) {
240
- vParamsValue.encodings.forEach((encoding) => {
241
- encoding.maxBitrate && (encoding.maxBitrate *= 1.2);
242
- });
243
- hParamsValue.encodings.forEach((encoding) => {
244
- encoding.maxBitrate && (encoding.maxBitrate *= 1.2);
245
- });
246
- hParamsValue.codecOptions.videoGoogleStartBitrate *= 1.2;
247
- vParamsValue.codecOptions.videoGoogleStartBitrate *= 1.2;
248
- }
249
- updateVidCons(vidCons);
250
- updateFrameRate(frameRateValue);
251
- updateHParams(hParamsValue);
252
- updateVParams(vParamsValue);
253
- updateScreenParams(this.screenParams.screenParams);
254
- updateAParams(this.aParams.aParams);
255
- updateTargetResolution(data.meetingRoomParams.targetResolution);
256
- updateTargetResolutionHost(data.meetingRoomParams.targetResolutionHost);
257
- }
258
- catch (error) {
259
- console.log('updateRoomParametersClient error', error);
260
- parameters.showAlert?.({
261
- message: error.message,
262
- type: 'danger',
263
- duration: 3000,
264
- });
265
- }
266
- };
267
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: UpdateRoomParametersClient, deps: [{ token: i1.VideoCaptureConstraints }, { token: i2.HParams }, { token: i3.VParams }, { token: i4.ScreenParams }, { token: i5.AParams }], target: i0.ɵɵFactoryTarget.Injectable });
268
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: UpdateRoomParametersClient, providedIn: 'root' });
269
- }
270
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: UpdateRoomParametersClient, decorators: [{
271
- type: Injectable,
272
- args: [{
273
- providedIn: 'root',
274
- }]
275
- }], ctorParameters: () => [{ type: i1.VideoCaptureConstraints }, { type: i2.HParams }, { type: i3.VParams }, { type: i4.ScreenParams }, { type: i5.AParams }] });
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXJvb20tcGFyYW1ldGVycy1jbGllbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9wcm9kdWNlci1jbGllbnQvcHJvZHVjZXItY2xpZW50LWVtaXRzL3VwZGF0ZS1yb29tLXBhcmFtZXRlcnMtY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZEO0FBQzdELGtCQUFrQjtBQUNsQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBMEczQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRztBQUtILE1BQU0sT0FBTywwQkFBMEI7SUFFM0I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUxWLFlBQ1UsdUJBQWdELEVBQ2hELE9BQWdCLEVBQ2hCLE9BQWdCLEVBQ2hCLFlBQTBCLEVBQzFCLE9BQWdCO1FBSmhCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFlBQU8sR0FBUCxPQUFPLENBQVM7SUFDdkIsQ0FBQztJQUVKOzs7T0FHRztJQUNILDBCQUEwQixHQUFHLENBQUMsRUFBRSxVQUFVLEVBQXFDLEVBQVEsRUFBRTtRQUN2RixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQ0osZUFBZSxFQUNmLGtCQUFrQixFQUNsQixNQUFNLEVBRU4sT0FBTyxFQUNQLE9BQU8sRUFDUCxTQUFTLEVBRVQsT0FBTyxFQUNQLFNBQVMsRUFDVCxJQUFJO1lBRUosU0FBUztZQUNULHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIscUJBQXFC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ekIsTUFBTTs7MkZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb24gKi9cbi8vIHJvb20uc2VydmljZS50c1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmlkZW9DYXB0dXJlQ29uc3RyYWludHMgfSBmcm9tICcuLi8uLi9tZXRob2RzL3V0aWxzL3Byb2R1Y2VyL3ZpZGVvLWNhcHR1cmUtY29uc3RyYWludHMuc2VydmljZSc7XG5pbXBvcnQgeyBIUGFyYW1zLCBIUGFyYW1zVHlwZSB9IGZyb20gJy4uLy4uL21ldGhvZHMvdXRpbHMvcHJvZHVjZXIvaC1wYXJhbXMuc2VydmljZSc7XG5pbXBvcnQgeyBWUGFyYW1zLCBWUGFyYW1zVHlwZSB9IGZyb20gJy4uLy4uL21ldGhvZHMvdXRpbHMvcHJvZHVjZXIvdi1wYXJhbXMuc2VydmljZSc7XG5pbXBvcnQgeyBTY3JlZW5QYXJhbXMgfSBmcm9tICcuLi8uLi9tZXRob2RzL3V0aWxzL3Byb2R1Y2VyL3NjcmVlbi1wYXJhbXMuc2VydmljZSc7XG5pbXBvcnQgeyBBUGFyYW1zIH0gZnJvbSAnLi4vLi4vbWV0aG9kcy91dGlscy9wcm9kdWNlci9hLXBhcmFtcy5zZXJ2aWNlJztcbmltcG9ydCB7IFJ0cENhcGFiaWxpdGllcyB9IGZyb20gJ21lZGlhc291cC1jbGllbnQvbGliL3R5cGVzJztcbmltcG9ydCB7XG4gIEV2ZW50VHlwZSxcbiAgU2hvd0FsZXJ0LFxuICBWaWRDb25zLFxuICBSZXNwb25zZUpvaW5Sb29tLFxuICBTY3JlZW5QYXJhbXNUeXBlLFxuICBBUGFyYW1zVHlwZSxcbiAgTWVldGluZ1Jvb21QYXJhbXMsXG59IGZyb20gJy4uLy4uL0B0eXBlcy90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlUm9vbVBhcmFtZXRlcnNDbGllbnRQYXJhbWV0ZXJzIHtcbiAgcnRwQ2FwYWJpbGl0aWVzOiBSdHBDYXBhYmlsaXRpZXMgfCBudWxsO1xuICByb29tUmVjdklQczogc3RyaW5nW107XG4gIG1lZXRpbmdSb29tUGFyYW1zOiBNZWV0aW5nUm9vbVBhcmFtcyB8IG51bGw7XG4gIGl0ZW1QYWdlTGltaXQ6IG51bWJlcjtcbiAgYXVkaW9Pbmx5Um9vbTogYm9vbGVhbjtcbiAgYWRkRm9yQmFzaWM6IGJvb2xlYW47XG4gIHNjcmVlblBhZ2VMaW1pdDogbnVtYmVyO1xuICBzaGFyZVNjcmVlblN0YXJ0ZWQ6IGJvb2xlYW47XG4gIHNoYXJlZDogYm9vbGVhbjtcbiAgdGFyZ2V0T3JpZW50YXRpb246IHN0cmluZztcbiAgdmlkQ29uczogYW55O1xuICByZWNvcmRpbmdWaWRlb1N1cHBvcnQ6IGJvb2xlYW47XG4gIGZyYW1lUmF0ZTogbnVtYmVyO1xuICBhZG1pblBhc3Njb2RlOiBzdHJpbmc7XG4gIGV2ZW50VHlwZTogRXZlbnRUeXBlO1xuICB5b3VBcmVDb0hvc3Q6IGJvb2xlYW47XG4gIGF1dG9XYXZlOiBib29sZWFuO1xuICBmb3JjZUZ1bGxEaXNwbGF5OiBib29sZWFuO1xuICBjaGF0U2V0dGluZzogc3RyaW5nO1xuICBtZWV0aW5nRGlzcGxheVR5cGU6IHN0cmluZztcbiAgYXVkaW9TZXR0aW5nOiBzdHJpbmc7XG4gIHZpZGVvU2V0dGluZzogc3RyaW5nO1xuICBzY3JlZW5zaGFyZVNldHRpbmc6IHN0cmluZztcbiAgaFBhcmFtczogSFBhcmFtc1R5cGU7XG4gIHZQYXJhbXM6IFZQYXJhbXNUeXBlO1xuICBzY3JlZW5QYXJhbXM6IFNjcmVlblBhcmFtc1R5cGU7XG4gIGFQYXJhbXM6IEFQYXJhbXNUeXBlO1xuICBpc2xldmVsOiBzdHJpbmc7XG4gIHNob3dBbGVydD86IFNob3dBbGVydDtcbiAgZGF0YTogUmVzcG9uc2VKb2luUm9vbTtcblxuICAvLyB1cGRhdGUgZnVuY3Rpb25zXG4gIHVwZGF0ZVJ0cENhcGFiaWxpdGllczogKHJ0cENhcGFiaWxpdGllczogUnRwQ2FwYWJpbGl0aWVzIHwgbnVsbCkgPT4gdm9pZDtcbiAgdXBkYXRlUm9vbVJlY3ZJUHM6IChyb29tUmVjdklQczogc3RyaW5nW10pID0+IHZvaWQ7XG4gIHVwZGF0ZU1lZXRpbmdSb29tUGFyYW1zOiAocGFyYW1zOiBNZWV0aW5nUm9vbVBhcmFtcyB8IG51bGwpID0+IHZvaWQ7XG4gIHVwZGF0ZUl0ZW1QYWdlTGltaXQ6IChsaW1pdDogbnVtYmVyKSA9PiB2b2lkO1xuICB1cGRhdGVBdWRpb09ubHlSb29tOiAoaXNBdWRpb09ubHk6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHVwZGF0ZUFkZEZvckJhc2ljOiAoYWRkRm9yQmFzaWM6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHVwZGF0ZVNjcmVlblBhZ2VMaW1pdDogKGxpbWl0OiBudW1iZXIpID0+IHZvaWQ7XG4gIHVwZGF0ZVZpZENvbnM6IChjb25zOiBhbnkpID0+IHZvaWQ7XG4gIHVwZGF0ZUZyYW1lUmF0ZTogKGZyYW1lUmF0ZTogbnVtYmVyKSA9PiB2b2lkO1xuICB1cGRhdGVBZG1pblBhc3Njb2RlOiAocGFzc2NvZGU6IHN0cmluZykgPT4gdm9pZDtcbiAgdXBkYXRlRXZlbnRUeXBlOiAoZXZlbnRUeXBlOiBFdmVudFR5cGUpID0+IHZvaWQ7XG4gIHVwZGF0ZVlvdUFyZUNvSG9zdDogKGNvSG9zdDogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlQXV0b1dhdmU6IChhdXRvV2F2ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlRm9yY2VGdWxsRGlzcGxheTogKGZvcmNlRnVsbDogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlQ2hhdFNldHRpbmc6IChzZXR0aW5nOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHVwZGF0ZU1lZXRpbmdEaXNwbGF5VHlwZTogKHR5cGU6IHN0cmluZykgPT4gdm9pZDtcbiAgdXBkYXRlQXVkaW9TZXR0aW5nOiAoc2V0dGluZzogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVWaWRlb1NldHRpbmc6IChzZXR0aW5nOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHVwZGF0ZVNjcmVlbnNoYXJlU2V0dGluZzogKHNldHRpbmc6IHN0cmluZykgPT4gdm9pZDtcbiAgdXBkYXRlSFBhcmFtczogKHBhcmFtczogSFBhcmFtc1R5cGUpID0+IHZvaWQ7XG4gIHVwZGF0ZVZQYXJhbXM6IChwYXJhbXM6IFZQYXJhbXNUeXBlKSA9PiB2b2lkO1xuICB1cGRhdGVTY3JlZW5QYXJhbXM6IChwYXJhbXM6IFNjcmVlblBhcmFtc1R5cGUpID0+IHZvaWQ7XG4gIHVwZGF0ZUFQYXJhbXM6IChwYXJhbXM6IEFQYXJhbXNUeXBlKSA9PiB2b2lkO1xuICB1cGRhdGVNYWluSGVpZ2h0V2lkdGg6IChoZWlnaHRXaWR0aDogbnVtYmVyKSA9PiB2b2lkO1xuICB1cGRhdGVUYXJnZXRSZXNvbHV0aW9uOiAocmVzb2x1dGlvbjogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVUYXJnZXRSZXNvbHV0aW9uSG9zdDogKHJlc29sdXRpb246IHN0cmluZykgPT4gdm9pZDtcblxuICAvLyBSZWNvcmRpbmctcmVsYXRlZCB1cGRhdGUgZnVuY3Rpb25zXG4gIHVwZGF0ZVJlY29yZGluZ0F1ZGlvUGF1c2VzTGltaXQ6IChsaW1pdDogbnVtYmVyKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdBdWRpb1BhdXNlc0NvdW50OiAoY291bnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nQXVkaW9TdXBwb3J0OiAoc3VwcG9ydDogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nQXVkaW9QZW9wbGVMaW1pdDogKGxpbWl0OiBudW1iZXIpID0+IHZvaWQ7XG4gIHVwZGF0ZVJlY29yZGluZ0F1ZGlvUGFydGljaXBhbnRzVGltZUxpbWl0OiAobGltaXQ6IG51bWJlcikgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXVzZXNDb3VudDogKGNvdW50OiBudW1iZXIpID0+IHZvaWQ7XG4gIHVwZGF0ZVJlY29yZGluZ1ZpZGVvUGF1c2VzTGltaXQ6IChsaW1pdDogbnVtYmVyKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdWaWRlb1N1cHBvcnQ6IChzdXBwb3J0OiBib29sZWFuKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdWaWRlb1Blb3BsZUxpbWl0OiAobGltaXQ6IG51bWJlcikgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNUaW1lTGltaXQ6IChsaW1pdDogbnVtYmVyKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdBbGxQYXJ0aWNpcGFudHNTdXBwb3J0OiAoc3VwcG9ydDogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNTdXBwb3J0OiAoc3VwcG9ydDogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nQWxsUGFydGljaXBhbnRzRnVsbFJvb21TdXBwb3J0OiAoc3VwcG9ydDogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQ6IChzdXBwb3J0OiBib29sZWFuKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdQcmVmZXJyZWRPcmllbnRhdGlvbjogKG9yaWVudGF0aW9uOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHVwZGF0ZVJlY29yZGluZ1N1cHBvcnRGb3JPdGhlck9yaWVudGF0aW9uOiAoc3VwcG9ydDogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nTXVsdGlGb3JtYXRzU3VwcG9ydDogKHN1cHBvcnQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHVwZGF0ZVJlY29yZGluZ1ZpZGVvT3B0aW9uczogKG9wdGlvbnM6IHN0cmluZykgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nQXVkaW9PcHRpb25zOiAob3B0aW9uczogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVSb29tUGFyYW1ldGVyc0NsaWVudE9wdGlvbnMgPSB7XG4gIHBhcmFtZXRlcnM6IFVwZGF0ZVJvb21QYXJhbWV0ZXJzQ2xpZW50UGFyYW1ldGVycztcbn07XG5cbi8vIEV4cG9ydCB0aGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgZnVuY3Rpb25cbmV4cG9ydCB0eXBlIFVwZGF0ZVJvb21QYXJhbWV0ZXJzQ2xpZW50VHlwZSA9IChvcHRpb25zOiBVcGRhdGVSb29tUGFyYW1ldGVyc0NsaWVudE9wdGlvbnMpID0+IHZvaWQ7XG5cbi8qKlxuICogVXBkYXRlcyByb29tIHBhcmFtZXRlcnMgZm9yIHRoZSBjbGllbnQgYWZ0ZXIgam9pbmluZyBhIHJvb20gYW5kIHJlY2VpdmluZyBzZXJ2ZXItcHJvdmlkZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0ge1VwZGF0ZVJvb21QYXJhbWV0ZXJzQ2xpZW50T3B0aW9uc30gb3B0aW9ucyAtIEFuIG9iamVjdCBjb250YWluaW5nOlxuICogIC0gdmFyaW91cyByb29tIHNldHRpbmdzIGFuZCBwYXJhbWV0ZXJzLFxuICogIC0gZnVuY3Rpb25zIHRvIHVwZGF0ZSB0aG9zZSBwYXJhbWV0ZXJzLlxuICpcbiAqIC0gKipTY3JlZW4vUGFnZSBTZXR0aW5nczoqKiBBZGp1c3RzIHNjcmVlbiBhbmQgaXRlbSBwYWdlIGxpbWl0cywgbWVldGluZyByb29tIHBhcmFtZXRlcnMsIGFuZCB2aWRlbyBjb25zdHJhaW50cyBiYXNlZCBvbiBzZXJ2ZXIgZGF0YS5cbiAqIC0gKipSZWNvcmRpbmcgYW5kIE1lZGlhIFNldHRpbmdzOioqIEFwcGxpZXMgYml0cmF0ZSBhbmQgZnJhbWUgcmF0ZSBhZGp1c3RtZW50cywgYmFzZWQgb24gdGhlIHRhcmdldCByZXNvbHV0aW9uIGFuZCBtZWRpYSBvcHRpb25zLlxuICogLSAqKlJvbGUtU3BlY2lmaWMgU2V0dGluZ3M6KiogQ29uZmlndXJlcyBhZG1pbiwgaG9zdCwgYW5kIGNvLWhvc3Qgc2V0dGluZ3MgZm9yIHBlcm1pc3Npb25zLCBvcmllbnRhdGlvbnMsIGFuZCByZXNvbHV0aW9ucy5cbiAqIC0gKipBbGVydGluZyoqOiBVc2VzIGBzaG93QWxlcnRgIHRvIG5vdGlmeSB0aGUgY2xpZW50IG9uIGlzc3VlcyBvciBwZXJtaXNzaW9ucyByZXN0cmljdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9wdGlvbnMgPSB7XG4gKiAgIHBhcmFtZXRlcnM6IHtcbiAqICAgICBydHBDYXBhYmlsaXRpZXM6IG15UnRwQ2FwYWJpbGl0aWVzLFxuICogICAgIHJvb21SZWN2SVBzOiBbJzE5Mi4xNjguMS4xJ10sXG4gKiAgICAgbWVldGluZ1Jvb21QYXJhbXM6IG15TWVldGluZ1BhcmFtcyxcbiAqICAgICBpdGVtUGFnZUxpbWl0OiAzLFxuICogICAgIGF1ZGlvT25seVJvb206IGZhbHNlLFxuICogICAgIGFkZEZvckJhc2ljOiB0cnVlLFxuICogICAgIHNjcmVlblBhZ2VMaW1pdDogMixcbiAqICAgICBzaGFyZVNjcmVlblN0YXJ0ZWQ6IGZhbHNlLFxuICogICAgIHNoYXJlZDogdHJ1ZSxcbiAqICAgICB0YXJnZXRPcmllbnRhdGlvbjogJ2xhbmRzY2FwZScsXG4gKiAgICAgcmVjb3JkaW5nVmlkZW9TdXBwb3J0OiB0cnVlLFxuICogICAgIGZyYW1lUmF0ZTogMTUsXG4gKiAgICAgYWRtaW5QYXNzY29kZTogJ2FkbWluMTIzJyxcbiAqICAgICBldmVudFR5cGU6ICdjb25mZXJlbmNlJyxcbiAqICAgICB5b3VBcmVDb0hvc3Q6IGZhbHNlLFxuICogICAgIHVwZGF0ZVJ0cENhcGFiaWxpdGllczogKHJ0cCkgPT4gY29uc29sZS5sb2coJ1VwZGF0aW5nIFJUUDonLCBydHApLFxuICogICAgIHVwZGF0ZVJvb21SZWN2SVBzOiAoaXBzKSA9PiBjb25zb2xlLmxvZygnVXBkYXRpbmcgSVBzOicsIGlwcyksXG4gKiAgICAgdXBkYXRlTWVldGluZ1Jvb21QYXJhbXM6IChwYXJhbXMpID0+IGNvbnNvbGUubG9nKCdVcGRhdGluZyByb29tIHBhcmFtczonLCBwYXJhbXMpLFxuICogICAgIC8vIEFkZGl0aW9uYWwgcGFyYW1ldGVycy4uLlxuICogICB9LFxuICogfTtcbiAqXG4gKiBjb25zdCB1cGRhdGVSb29tUGFyYW1ldGVyc0NsaWVudCA9IG5ldyBVcGRhdGVSb29tUGFyYW1ldGVyc0NsaWVudCh2aWRlb0NhcHR1cmVDb25zdHJhaW50cywgaFBhcmFtcywgdlBhcmFtcywgc2NyZWVuUGFyYW1zLCBhUGFyYW1zKTtcbiAqIHVwZGF0ZVJvb21QYXJhbWV0ZXJzQ2xpZW50LnVwZGF0ZVJvb21QYXJhbWV0ZXJzQ2xpZW50KG9wdGlvbnMpO1xuICogYGBgXG4gKlxuICogVGhpcyBleGFtcGxlIGRlbW9uc3RyYXRlcyBzZXR0aW5nIHVwIHJvb20gcGFyYW1ldGVycyBmb3IgYSBjb25mZXJlbmNlLXR5cGUgcm9vbSB3aXRoIHJlY29yZGluZyBzdXBwb3J0IGFuZCBjdXN0b20gdXBkYXRlIGZ1bmN0aW9ucy5cbiAqL1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVXBkYXRlUm9vbVBhcmFtZXRlcnNDbGllbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHZpZGVvQ2FwdHVyZUNvbnN0cmFpbnRzOiBWaWRlb0NhcHR1cmVDb25zdHJhaW50cyxcbiAgICBwcml2YXRlIGhQYXJhbXM6IEhQYXJhbXMsXG4gICAgcHJpdmF0ZSB2UGFyYW1zOiBWUGFyYW1zLFxuICAgIHByaXZhdGUgc2NyZWVuUGFyYW1zOiBTY3JlZW5QYXJhbXMsXG4gICAgcHJpdmF0ZSBhUGFyYW1zOiBBUGFyYW1zLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBSb29tIFBhcmFtZXRlcnMgQ2xpZW50IGFmdGVyIHRoZSB1c2VyIGhhcyBqb2luZWQgdGhlIHJvb20gYW5kIHRoZSByb29tIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci5cbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtZXRlcnMgLSBBbiBvYmplY3QgY29udGFpbmluZyB2YXJpb3VzIHBhcmFtZXRlcnMgYW5kIHVwZGF0ZSBmdW5jdGlvbnMuXG4gICAqL1xuICB1cGRhdGVSb29tUGFyYW1ldGVyc0NsaWVudCA9ICh7IHBhcmFtZXRlcnMgfTogVXBkYXRlUm9vbVBhcmFtZXRlcnNDbGllbnRPcHRpb25zKTogdm9pZCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc2NyZWVuUGFnZUxpbWl0LFxuICAgICAgICBzaGFyZVNjcmVlblN0YXJ0ZWQsXG4gICAgICAgIHNoYXJlZCxcblxuICAgICAgICBoUGFyYW1zLFxuICAgICAgICB2UGFyYW1zLFxuICAgICAgICBmcmFtZVJhdGUsXG5cbiAgICAgICAgaXNsZXZlbCxcbiAgICAgICAgc2hvd0FsZXJ0LFxuICAgICAgICBkYXRhLFxuXG4gICAgICAgIC8vdXBkYXRlc1xuICAgICAgICB1cGRhdGVSdHBDYXBhYmlsaXRpZXMsXG4gICAgICAgIHVwZGF0ZVJvb21SZWN2SVBzLFxuICAgICAgICB1cGRhdGVNZWV0aW5nUm9vbVBhcmFtcyxcbiAgICAgICAgdXBkYXRlSXRlbVBhZ2VMaW1pdCxcbiAgICAgICAgdXBkYXRlQXVkaW9Pbmx5Um9vbSxcbiAgICAgICAgdXBkYXRlU2NyZWVuUGFnZUxpbWl0LFxuICAgICAgICB1cGRhdGVWaWRDb25zLFxuICAgICAgICB1cGRhdGVGcmFtZVJhdGUsXG4gICAgICAgIHVwZGF0ZUFkbWluUGFzc2NvZGUsXG4gICAgICAgIHVwZGF0ZUV2ZW50VHlwZSxcbiAgICAgICAgdXBkYXRlWW91QXJlQ29Ib3N0LFxuICAgICAgICB1cGRhdGVBdXRvV2F2ZSxcbiAgICAgICAgdXBkYXRlRm9yY2VGdWxsRGlzcGxheSxcbiAgICAgICAgdXBkYXRlQ2hhdFNldHRpbmcsXG4gICAgICAgIHVwZGF0ZU1lZXRpbmdEaXNwbGF5VHlwZSxcbiAgICAgICAgdXBkYXRlQXVkaW9TZXR0aW5nLFxuICAgICAgICB1cGRhdGVWaWRlb1NldHRpbmcsXG4gICAgICAgIHVwZGF0ZVNjcmVlbnNoYXJlU2V0dGluZyxcbiAgICAgICAgdXBkYXRlSFBhcmFtcyxcbiAgICAgICAgdXBkYXRlVlBhcmFtcyxcbiAgICAgICAgdXBkYXRlU2NyZWVuUGFyYW1zLFxuICAgICAgICB1cGRhdGVBUGFyYW1zLFxuICAgICAgICB1cGRhdGVUYXJnZXRSZXNvbHV0aW9uLFxuICAgICAgICB1cGRhdGVUYXJnZXRSZXNvbHV0aW9uSG9zdCxcblxuICAgICAgICAvLyBSZWNvcmRpbmcgdXBkYXRlc1xuICAgICAgICB1cGRhdGVSZWNvcmRpbmdBdWRpb1BhdXNlc0xpbWl0LFxuICAgICAgICB1cGRhdGVSZWNvcmRpbmdBdWRpb1BhdXNlc0NvdW50LFxuICAgICAgICB1cGRhdGVSZWNvcmRpbmdBdWRpb1N1cHBvcnQsXG4gICAgICAgIHVwZGF0ZVJlY29yZGluZ0F1ZGlvUGVvcGxlTGltaXQsXG4gICAgICAgIHVwZGF0ZVJlY29yZGluZ0F1ZGlvUGFydGljaXBhbnRzVGltZUxpbWl0LFxuICAgICAgICB1cGRhdGVSZWNvcmRpbmdWaWRlb1BhdXNlc0NvdW50LFxuICAgICAgICB1cGRhdGVSZWNvcmRpbmdWaWRlb1BhdXNlc0xpbWl0LFxuICAgICAgICB1cGRhdGVSZWNvcmRpbmdWaWRlb1N1cHBvcnQsXG4gICAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvUGVvcGxlTGltaXQsXG4gICAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvUGFydGljaXBhbnRzVGltZUxpbWl0LFxuICAgICAgICB1cGRhdGVSZWNvcmRpbmdBbGxQYXJ0aWNpcGFudHNTdXBwb3J0LFxuICAgICAgICB1cGRhdGVSZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c1N1cHBvcnQsXG4gICAgICAgIHVwZGF0ZVJlY29yZGluZ0FsbFBhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydCxcbiAgICAgICAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQsXG4gICAgICAgIHVwZGF0ZVJlY29yZGluZ1ByZWZlcnJlZE9yaWVudGF0aW9uLFxuICAgICAgICB1cGRhdGVSZWNvcmRpbmdTdXBwb3J0Rm9yT3RoZXJPcmllbnRhdGlvbixcbiAgICAgICAgdXBkYXRlUmVjb3JkaW5nTXVsdGlGb3JtYXRzU3VwcG9ydCxcbiAgICAgICAgdXBkYXRlUmVjb3JkaW5nVmlkZW9PcHRpb25zLFxuICAgICAgICB1cGRhdGVSZWNvcmRpbmdBdWRpb09wdGlvbnMsXG4gICAgICAgIHVwZGF0ZU1haW5IZWlnaHRXaWR0aCxcbiAgICAgIH0gPSBwYXJhbWV0ZXJzO1xuXG4gICAgICBpZiAoZGF0YS5ydHBDYXBhYmlsaXRpZXMgPT0gbnVsbCkge1xuICAgICAgICBsZXQgcmVhc29uID0gZGF0YS5yZWFzb24gfHwgJyc7XG4gICAgICAgIHNob3dBbGVydD8uKHtcbiAgICAgICAgICBtZXNzYWdlOiAnU29ycnksIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gam9pbiB0aGlzIHJvb20uICcgKyByZWFzb24sXG4gICAgICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdmFsdWVzXG4gICAgICB1cGRhdGVSdHBDYXBhYmlsaXRpZXMoZGF0YS5ydHBDYXBhYmlsaXRpZXMpO1xuICAgICAgdXBkYXRlQWRtaW5QYXNzY29kZShkYXRhLnNlY3VyZUNvZGUpO1xuICAgICAgdXBkYXRlUm9vbVJlY3ZJUHMoZGF0YS5yb29tUmVjdklQcyk7XG4gICAgICB1cGRhdGVNZWV0aW5nUm9vbVBhcmFtcyhkYXRhLm1lZXRpbmdSb29tUGFyYW1zKTtcblxuICAgICAgLy8gVXBkYXRlIHJlY29yZGluZyB2YWx1ZXNcbiAgICAgIHVwZGF0ZVJlY29yZGluZ0F1ZGlvUGF1c2VzTGltaXQoZGF0YS5yZWNvcmRpbmdQYXJhbXMucmVjb3JkaW5nQXVkaW9QYXVzZXNMaW1pdCk7XG4gICAgICB1cGRhdGVSZWNvcmRpbmdBdWRpb1BhdXNlc0NvdW50KGRhdGEucmVjb3JkaW5nUGFyYW1zLnJlY29yZGluZ0F1ZGlvUGF1c2VzQ291bnQhKTtcbiAgICAgIHVwZGF0ZVJlY29yZGluZ0F1ZGlvU3VwcG9ydChkYXRhLnJlY29yZGluZ1BhcmFtcy5yZWNvcmRpbmdBdWRpb1N1cHBvcnQpO1xuICAgICAgdXBkYXRlUmVjb3JkaW5nQXVkaW9QZW9wbGVMaW1pdChkYXRhLnJlY29yZGluZ1BhcmFtcy5yZWNvcmRpbmdBdWRpb1Blb3BsZUxpbWl0KTtcbiAgICAgIHVwZGF0ZVJlY29yZGluZ0F1ZGlvUGFydGljaXBhbnRzVGltZUxpbWl0KFxuICAgICAgICBkYXRhLnJlY29yZGluZ1BhcmFtcy5yZWNvcmRpbmdBdWRpb1BhcnRpY2lwYW50c1RpbWVMaW1pdCxcbiAgICAgICk7XG4gICAgICB1cGRhdGVSZWNvcmRpbmdWaWRlb1BhdXNlc0NvdW50KGRhdGEucmVjb3JkaW5nUGFyYW1zLnJlY29yZGluZ1ZpZGVvUGF1c2VzQ291bnQhKTtcbiAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvUGF1c2VzTGltaXQoZGF0YS5yZWNvcmRpbmdQYXJhbXMucmVjb3JkaW5nVmlkZW9QYXVzZXNMaW1pdCk7XG4gICAgICB1cGRhdGVSZWNvcmRpbmdWaWRlb1N1cHBvcnQoZGF0YS5yZWNvcmRpbmdQYXJhbXMucmVjb3JkaW5nVmlkZW9TdXBwb3J0KTtcbiAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvUGVvcGxlTGltaXQoZGF0YS5yZWNvcmRpbmdQYXJhbXMucmVjb3JkaW5nVmlkZW9QZW9wbGVMaW1pdCk7XG4gICAgICB1cGRhdGVSZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c1RpbWVMaW1pdChcbiAgICAgICAgZGF0YS5yZWNvcmRpbmdQYXJhbXMucmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNUaW1lTGltaXQsXG4gICAgICApO1xuICAgICAgdXBkYXRlUmVjb3JkaW5nQWxsUGFydGljaXBhbnRzU3VwcG9ydChkYXRhLnJlY29yZGluZ1BhcmFtcy5yZWNvcmRpbmdBbGxQYXJ0aWNpcGFudHNTdXBwb3J0KTtcbiAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvUGFydGljaXBhbnRzU3VwcG9ydChcbiAgICAgICAgZGF0YS5yZWNvcmRpbmdQYXJhbXMucmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNTdXBwb3J0LFxuICAgICAgKTtcbiAgICAgIHVwZGF0ZVJlY29yZGluZ0FsbFBhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydChcbiAgICAgICAgZGF0YS5yZWNvcmRpbmdQYXJhbXMucmVjb3JkaW5nQWxsUGFydGljaXBhbnRzRnVsbFJvb21TdXBwb3J0LFxuICAgICAgKTtcbiAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvUGFydGljaXBhbnRzRnVsbFJvb21TdXBwb3J0KFxuICAgICAgICBkYXRhLnJlY29yZGluZ1BhcmFtcy5yZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydCxcbiAgICAgICk7XG4gICAgICB1cGRhdGVSZWNvcmRpbmdQcmVmZXJyZWRPcmllbnRhdGlvbihkYXRhLnJlY29yZGluZ1BhcmFtcy5yZWNvcmRpbmdQcmVmZXJyZWRPcmllbnRhdGlvbik7XG4gICAgICB1cGRhdGVSZWNvcmRpbmdTdXBwb3J0Rm9yT3RoZXJPcmllbnRhdGlvbihcbiAgICAgICAgZGF0YS5yZWNvcmRpbmdQYXJhbXMucmVjb3JkaW5nU3VwcG9ydEZvck90aGVyT3JpZW50YXRpb24sXG4gICAgICApO1xuICAgICAgdXBkYXRlUmVjb3JkaW5nTXVsdGlGb3JtYXRzU3VwcG9ydChkYXRhLnJlY29yZGluZ1BhcmFtcy5yZWNvcmRpbmdNdWx0aUZvcm1hdHNTdXBwb3J0KTtcblxuICAgICAgLy8gVXBkYXRlIG90aGVyIG1lZXRpbmcgcm9vbSBzZXR0aW5nc1xuICAgICAgdXBkYXRlSXRlbVBhZ2VMaW1pdChkYXRhLm1lZXRpbmdSb29tUGFyYW1zLml0ZW1QYWdlTGltaXQpO1xuICAgICAgdXBkYXRlRXZlbnRUeXBlKGRhdGEubWVldGluZ1Jvb21QYXJhbXMudHlwZSk7XG5cbiAgICAgIGlmIChkYXRhLm1lZXRpbmdSb29tUGFyYW1zLnR5cGUgPT0gJ2NoYXQnICYmIGlzbGV2ZWwgIT0gJzInKSB7XG4gICAgICAgIHVwZGF0ZVlvdUFyZUNvSG9zdCh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFsnY2hhdCcsICdicm9hZGNhc3QnXS5pbmNsdWRlcyhkYXRhLm1lZXRpbmdSb29tUGFyYW1zLnR5cGUpKSB7XG4gICAgICAgIHVwZGF0ZUF1dG9XYXZlKGZhbHNlKTtcbiAgICAgICAgdXBkYXRlTWVldGluZ0Rpc3BsYXlUeXBlKCdhbGwnKTtcbiAgICAgICAgdXBkYXRlRm9yY2VGdWxsRGlzcGxheSh0cnVlKTtcbiAgICAgICAgdXBkYXRlQ2hhdFNldHRpbmcoJ2FsbG93Jyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZUF1ZGlvU2V0dGluZyhkYXRhLm1lZXRpbmdSb29tUGFyYW1zLmF1ZGlvU2V0dGluZyk7XG4gICAgICB1cGRhdGVWaWRlb1NldHRpbmcoZGF0YS5tZWV0aW5nUm9vbVBhcmFtcy52aWRlb1NldHRpbmcpO1xuICAgICAgdXBkYXRlU2NyZWVuc2hhcmVTZXR0aW5nKGRhdGEubWVldGluZ1Jvb21QYXJhbXMuc2NyZWVuc2hhcmVTZXR0aW5nKTtcbiAgICAgIHVwZGF0ZUNoYXRTZXR0aW5nKGRhdGEubWVldGluZ1Jvb21QYXJhbXMuY2hhdFNldHRpbmcpO1xuXG4gICAgICB1cGRhdGVBdWRpb09ubHlSb29tKGRhdGEubWVldGluZ1Jvb21QYXJhbXMubWVkaWFUeXBlICE9ICd2aWRlbycpO1xuXG4gICAgICBpZiAoZGF0YS5tZWV0aW5nUm9vbVBhcmFtcy50eXBlID09ICdjaGF0JyB8fCBkYXRhLm1lZXRpbmdSb29tUGFyYW1zLnR5cGUgPT0gJ2Jyb2FkY2FzdCcpIHtcbiAgICAgICAgaWYgKGRhdGEubWVldGluZ1Jvb21QYXJhbXMudHlwZSA9PSAnYnJvYWRjYXN0Jykge1xuICAgICAgICAgIHVwZGF0ZUl0ZW1QYWdlTGltaXQoMSk7XG4gICAgICAgICAgdXBkYXRlUmVjb3JkaW5nVmlkZW9PcHRpb25zKCdtYWluU2NyZWVuJyk7XG4gICAgICAgICAgdXBkYXRlUmVjb3JkaW5nQXVkaW9PcHRpb25zKCdob3N0Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlSXRlbVBhZ2VMaW1pdCgyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5tZWV0aW5nUm9vbVBhcmFtcy50eXBlID09ICdjb25mZXJlbmNlJyAmJiAoc2hhcmVkIHx8IHNoYXJlU2NyZWVuU3RhcnRlZCkpIHtcbiAgICAgICAgdXBkYXRlTWFpbkhlaWdodFdpZHRoKDEwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVNYWluSGVpZ2h0V2lkdGgoMCk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZVNjcmVlblBhZ2VMaW1pdChNYXRoLm1pbihkYXRhLm1lZXRpbmdSb29tUGFyYW1zLml0ZW1QYWdlTGltaXQsIHNjcmVlblBhZ2VMaW1pdCkpO1xuXG4gICAgICAvLyBBc3NpZ24gbWVkaWEgY2FwdHVyZSBjb25zdHJhaW50cyBiYXNlZCBvbiB0aGUgdXNlcidzIHJvbGUgYW5kIHJvb20gc2V0dGluZ3NcbiAgICAgIGxldCB0YXJnZXRPcmllbnRhdGlvbiA9XG4gICAgICAgIGlzbGV2ZWwgPT0gJzInXG4gICAgICAgICAgPyBkYXRhLm1lZXRpbmdSb29tUGFyYW1zLnRhcmdldE9yaWVudGF0aW9uSG9zdFxuICAgICAgICAgIDogZGF0YS5tZWV0aW5nUm9vbVBhcmFtcy50YXJnZXRPcmllbnRhdGlvbjtcbiAgICAgIGxldCB0YXJnZXRSZXNvbHV0aW9uID1cbiAgICAgICAgaXNsZXZlbCA9PSAnMidcbiAgICAgICAgICA/IGRhdGEubWVldGluZ1Jvb21QYXJhbXMudGFyZ2V0UmVzb2x1dGlvbkhvc3RcbiAgICAgICAgICA6IGRhdGEubWVldGluZ1Jvb21QYXJhbXMudGFyZ2V0UmVzb2x1dGlvbjtcblxuICAgICAgbGV0IHZpZENvbnM6IFZpZENvbnM7XG4gICAgICBpZiAodGFyZ2V0T3JpZW50YXRpb24gPT0gJ2xhbmRzY2FwZScpIHtcbiAgICAgICAgdmlkQ29ucyA9XG4gICAgICAgICAgdGFyZ2V0UmVzb2x1dGlvbiA9PSAnaGQnXG4gICAgICAgICAgICA/IHRoaXMudmlkZW9DYXB0dXJlQ29uc3RyYWludHMuaGRDb25zXG4gICAgICAgICAgICA6IHRhcmdldFJlc29sdXRpb24gPT0gJ1FuSEQnXG4gICAgICAgICAgICA/IHRoaXMudmlkZW9DYXB0dXJlQ29uc3RyYWludHMuUW5IRENvbnNcbiAgICAgICAgICAgIDogdGFyZ2V0UmVzb2x1dGlvbiA9PSAnZmhkJ1xuICAgICAgICAgICAgPyB0aGlzLnZpZGVvQ2FwdHVyZUNvbnN0cmFpbnRzLmZoZENvbnNcbiAgICAgICAgICAgIDogdGFyZ2V0UmVzb2x1dGlvbiA9PSAncWhkJ1xuICAgICAgICAgICAgPyB0aGlzLnZpZGVvQ2FwdHVyZUNvbnN0cmFpbnRzLnFoZENvbnNcbiAgICAgICAgICAgIDogdGhpcy52aWRlb0NhcHR1cmVDb25zdHJhaW50cy5zZENvbnM7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldE9yaWVudGF0aW9uID09ICduZXV0cmFsJykge1xuICAgICAgICB2aWRDb25zID1cbiAgICAgICAgICB0YXJnZXRSZXNvbHV0aW9uID09ICdoZCdcbiAgICAgICAgICAgID8gdGhpcy52aWRlb0NhcHR1cmVDb25zdHJhaW50cy5oZENvbnNOZXVcbiAgICAgICAgICAgIDogdGFyZ2V0UmVzb2x1dGlvbiA9PSAnUW5IRCdcbiAgICAgICAgICAgID8gdGhpcy52aWRlb0NhcHR1cmVDb25zdHJhaW50cy5RbkhEQ29uc05ldVxuICAgICAgICAgICAgOiB0YXJnZXRSZXNvbHV0aW9uID09ICdmaGQnXG4gICAgICAgICAgICA/IHRoaXMudmlkZW9DYXB0dXJlQ29uc3RyYWludHMuZmhkQ29uc05ldVxuICAgICAgICAgICAgOiB0YXJnZXRSZXNvbHV0aW9uID09ICdxaGQnXG4gICAgICAgICAgICA/IHRoaXMudmlkZW9DYXB0dXJlQ29uc3RyYWludHMucWhkQ29uc05ldVxuICAgICAgICAgICAgOiB0aGlzLnZpZGVvQ2FwdHVyZUNvbnN0cmFpbnRzLnNkQ29uc05ldTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpZENvbnMgPVxuICAgICAgICAgIHRhcmdldFJlc29sdXRpb24gPT0gJ2hkJ1xuICAgICAgICAgICAgPyB0aGlzLnZpZGVvQ2FwdHVyZUNvbnN0cmFpbnRzLmhkQ29uc1BvcnRcbiAgICAgICAgICAgIDogdGFyZ2V0UmVzb2x1dGlvbiA9PSAnUW5IRCdcbiAgICAgICAgICAgID8gdGhpcy52aWRlb0NhcHR1cmVDb25zdHJhaW50cy5RbkhEQ29uc1BvcnRcbiAgICAgICAgICAgIDogdGFyZ2V0UmVzb2x1dGlvbiA9PSAnZmhkJ1xuICAgICAgICAgICAgPyB0aGlzLnZpZGVvQ2FwdHVyZUNvbnN0cmFpbnRzLmZoZENvbnNQb3J0XG4gICAgICAgICAgICA6IHRhcmdldFJlc29sdXRpb24gPT0gJ3FoZCdcbiAgICAgICAgICAgID8gdGhpcy52aWRlb0NhcHR1cmVDb25zdHJhaW50cy5xaGRDb25zUG9ydFxuICAgICAgICAgICAgOiB0aGlzLnZpZGVvQ2FwdHVyZUNvbnN0cmFpbnRzLnNkQ29uc1BvcnQ7XG4gICAgICB9XG5cbiAgICAgIGxldCBmcmFtZVJhdGVWYWx1ZSA9IGZyYW1lUmF0ZSA/IGZyYW1lUmF0ZSA6IDEwO1xuXG4gICAgICBsZXQgdlBhcmFtc1ZhbHVlID0geyAuLi52UGFyYW1zIH07XG4gICAgICBsZXQgaFBhcmFtc1ZhbHVlID0geyAuLi5oUGFyYW1zIH07XG4gICAgICBpZiAoT2JqZWN0LmtleXModlBhcmFtc1ZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdlBhcmFtc1ZhbHVlID0gdGhpcy52UGFyYW1zLnZQYXJhbXM7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LmtleXMoaFBhcmFtc1ZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaFBhcmFtc1ZhbHVlID0gdGhpcy5oUGFyYW1zLmhQYXJhbXM7XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXRSZXNvbHV0aW9uID09ICdoZCcpIHtcbiAgICAgICAgZnJhbWVSYXRlVmFsdWUgPSB0aGlzLnZpZGVvQ2FwdHVyZUNvbnN0cmFpbnRzLmhkRnJhbWVSYXRlO1xuXG4gICAgICAgIHZQYXJhbXNWYWx1ZS5lbmNvZGluZ3MuZm9yRWFjaCgoZW5jb2Rpbmc6IFBhcnRpYWw8VlBhcmFtc1R5cGVbJ2VuY29kaW5ncyddWzBdPikgPT4ge1xuICAgICAgICAgIGVuY29kaW5nLm1heEJpdHJhdGUgJiYgKGVuY29kaW5nLm1heEJpdHJhdGUgKj0gNCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGhQYXJhbXNWYWx1ZS5lbmNvZGluZ3MuZm9yRWFjaCgoZW5jb2Rpbmc6IFBhcnRpYWw8SFBhcmFtc1R5cGVbJ2VuY29kaW5ncyddWzBdPikgPT4ge1xuICAgICAgICAgIGVuY29kaW5nLm1heEJpdHJhdGUgJiYgKGVuY29kaW5nLm1heEJpdHJhdGUgKj0gNCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXRSZXNvbHV0aW9uID09ICdRbkhEJykge1xuICAgICAgICBmcmFtZVJhdGVWYWx1ZSA9IHRoaXMudmlkZW9DYXB0dXJlQ29uc3RyYWludHMuUW5IREZyYW1lUmF0ZTtcbiAgICAgICAgdlBhcmFtc1ZhbHVlLmVuY29kaW5ncy5mb3JFYWNoKChlbmNvZGluZzogUGFydGlhbDxWUGFyYW1zVHlwZVsnZW5jb2RpbmdzJ11bMF0+KSA9PiB7XG4gICAgICAgICAgZW5jb2RpbmcubWF4Qml0cmF0ZSAmJiAoZW5jb2RpbmcubWF4Qml0cmF0ZSAqPSAwLjI1KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaFBhcmFtc1ZhbHVlLmVuY29kaW5ncy5mb3JFYWNoKChlbmNvZGluZzogUGFydGlhbDxIUGFyYW1zVHlwZVsnZW5jb2RpbmdzJ11bMF0+KSA9PiB7XG4gICAgICAgICAgZW5jb2RpbmcubWF4Qml0cmF0ZSAmJiAoZW5jb2RpbmcubWF4Qml0cmF0ZSAqPSAwLjI1KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaFBhcmFtc1ZhbHVlLmNvZGVjT3B0aW9ucyEudmlkZW9Hb29nbGVTdGFydEJpdHJhdGUhICo9IDAuMjU7XG4gICAgICAgIHZQYXJhbXNWYWx1ZS5jb2RlY09wdGlvbnMhLnZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlISAqPSAwLjI1O1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXRSZXNvbHV0aW9uID09ICdmaGQnKSB7XG4gICAgICAgIGZyYW1lUmF0ZVZhbHVlID0gdGhpcy52aWRlb0NhcHR1cmVDb25zdHJhaW50cy5maGRGcmFtZVJhdGU7XG4gICAgICAgIHZQYXJhbXNWYWx1ZS5lbmNvZGluZ3MuZm9yRWFjaCgoZW5jb2Rpbmc6IFBhcnRpYWw8VlBhcmFtc1R5cGVbJ2VuY29kaW5ncyddWzBdPikgPT4ge1xuICAgICAgICAgIGVuY29kaW5nLm1heEJpdHJhdGUgJiYgKGVuY29kaW5nLm1heEJpdHJhdGUgKj0gOCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGhQYXJhbXNWYWx1ZS5lbmNvZGluZ3MuZm9yRWFjaCgoZW5jb2Rpbmc6IFBhcnRpYWw8SFBhcmFtc1R5cGVbJ2VuY29kaW5ncyddWzBdPikgPT4ge1xuICAgICAgICAgIGVuY29kaW5nLm1heEJpdHJhdGUgJiYgKGVuY29kaW5nLm1heEJpdHJhdGUgKj0gOCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGhQYXJhbXNWYWx1ZS5jb2RlY09wdGlvbnMhLnZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlISAqPSA4O1xuICAgICAgICB2UGFyYW1zVmFsdWUuY29kZWNPcHRpb25zIS52aWRlb0dvb2dsZVN0YXJ0Qml0cmF0ZSEgKj0gODtcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0UmVzb2x1dGlvbiA9PSAncWhkJykge1xuICAgICAgICBmcmFtZVJhdGVWYWx1ZSA9IHRoaXMudmlkZW9DYXB0dXJlQ29uc3RyYWludHMucWhkRnJhbWVSYXRlO1xuICAgICAgICB2UGFyYW1zVmFsdWUuZW5jb2RpbmdzLmZvckVhY2goKGVuY29kaW5nOiBQYXJ0aWFsPFZQYXJhbXNUeXBlWydlbmNvZGluZ3MnXVswXT4pID0+IHtcbiAgICAgICAgICBlbmNvZGluZy5tYXhCaXRyYXRlICYmIChlbmNvZGluZy5tYXhCaXRyYXRlICo9IDE2KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaFBhcmFtc1ZhbHVlLmVuY29kaW5ncy5mb3JFYWNoKChlbmNvZGluZzogUGFydGlhbDxIUGFyYW1zVHlwZVsnZW5jb2RpbmdzJ11bMF0+KSA9PiB7XG4gICAgICAgICAgZW5jb2RpbmcubWF4Qml0cmF0ZSAmJiAoZW5jb2RpbmcubWF4Qml0cmF0ZSAqPSAxNik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGhQYXJhbXNWYWx1ZS5jb2RlY09wdGlvbnMhLnZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlISAqPSAxNjtcbiAgICAgICAgdlBhcmFtc1ZhbHVlLmNvZGVjT3B0aW9ucyEudmlkZW9Hb29nbGVTdGFydEJpdHJhdGUhICo9IDE2O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5yZWNvcmRpbmdQYXJhbXMucmVjb3JkaW5nVmlkZW9TdXBwb3J0KSB7XG4gICAgICAgIHZQYXJhbXNWYWx1ZS5lbmNvZGluZ3MuZm9yRWFjaCgoZW5jb2Rpbmc6IFBhcnRpYWw8VlBhcmFtc1R5cGVbJ2VuY29kaW5ncyddWzBdPikgPT4ge1xuICAgICAgICAgIGVuY29kaW5nLm1heEJpdHJhdGUgJiYgKGVuY29kaW5nLm1heEJpdHJhdGUgKj0gMS4yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaFBhcmFtc1ZhbHVlLmVuY29kaW5ncy5mb3JFYWNoKChlbmNvZGluZzogUGFydGlhbDxIUGFyYW1zVHlwZVsnZW5jb2RpbmdzJ11bMF0+KSA9PiB7XG4gICAgICAgICAgZW5jb2RpbmcubWF4Qml0cmF0ZSAmJiAoZW5jb2RpbmcubWF4Qml0cmF0ZSAqPSAxLjIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBoUGFyYW1zVmFsdWUuY29kZWNPcHRpb25zIS52aWRlb0dvb2dsZVN0YXJ0Qml0cmF0ZSEgKj0gMS4yO1xuICAgICAgICB2UGFyYW1zVmFsdWUuY29kZWNPcHRpb25zIS52aWRlb0dvb2dsZVN0YXJ0Qml0cmF0ZSEgKj0gMS4yO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVWaWRDb25zKHZpZENvbnMpO1xuICAgICAgdXBkYXRlRnJhbWVSYXRlKGZyYW1lUmF0ZVZhbHVlKTtcbiAgICAgIHVwZGF0ZUhQYXJhbXMoaFBhcmFtc1ZhbHVlKTtcbiAgICAgIHVwZGF0ZVZQYXJhbXModlBhcmFtc1ZhbHVlKTtcbiAgICAgIHVwZGF0ZVNjcmVlblBhcmFtcyh0aGlzLnNjcmVlblBhcmFtcy5zY3JlZW5QYXJhbXMpO1xuICAgICAgdXBkYXRlQVBhcmFtcyh0aGlzLmFQYXJhbXMuYVBhcmFtcyk7XG4gICAgICB1cGRhdGVUYXJnZXRSZXNvbHV0aW9uKGRhdGEubWVldGluZ1Jvb21QYXJhbXMudGFyZ2V0UmVzb2x1dGlvbik7XG4gICAgICB1cGRhdGVUYXJnZXRSZXNvbHV0aW9uSG9zdChkYXRhLm1lZXRpbmdSb29tUGFyYW1zLnRhcmdldFJlc29sdXRpb25Ib3N0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZVJvb21QYXJhbWV0ZXJzQ2xpZW50IGVycm9yJywgZXJyb3IpO1xuICAgICAgcGFyYW1ldGVycy5zaG93QWxlcnQ/Lih7XG4gICAgICAgIG1lc3NhZ2U6IChlcnJvciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIl19