@bitrix24/b24jssdk 0.5.1 → 1.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 (258) hide show
  1. package/README-AI.md +2 -1
  2. package/dist/esm/_virtual/_commonjsHelpers.mjs +16 -0
  3. package/dist/esm/_virtual/_commonjsHelpers.mjs.map +1 -0
  4. package/dist/esm/_virtual/protobuf.mjs +16 -0
  5. package/dist/esm/_virtual/protobuf.mjs.map +1 -0
  6. package/dist/esm/_virtual/protobuf2.mjs +12 -0
  7. package/dist/esm/_virtual/protobuf2.mjs.map +1 -0
  8. package/dist/esm/core/abstract-b24.mjs +355 -0
  9. package/dist/esm/core/abstract-b24.mjs.map +1 -0
  10. package/dist/esm/core/actions/abstract-action.mjs +24 -0
  11. package/dist/esm/core/actions/abstract-action.mjs.map +1 -0
  12. package/dist/esm/core/actions/abstract-batch.mjs +95 -0
  13. package/dist/esm/core/actions/abstract-batch.mjs.map +1 -0
  14. package/dist/esm/core/actions/manager.mjs +53 -0
  15. package/dist/esm/core/actions/manager.mjs.map +1 -0
  16. package/dist/esm/core/actions/v2/batch-by-chunk.mjs +92 -0
  17. package/dist/esm/core/actions/v2/batch-by-chunk.mjs.map +1 -0
  18. package/dist/esm/core/actions/v2/batch.mjs +126 -0
  19. package/dist/esm/core/actions/v2/batch.mjs.map +1 -0
  20. package/dist/esm/core/actions/v2/call-list.mjs +131 -0
  21. package/dist/esm/core/actions/v2/call-list.mjs.map +1 -0
  22. package/dist/esm/core/actions/v2/call.mjs +68 -0
  23. package/dist/esm/core/actions/v2/call.mjs.map +1 -0
  24. package/dist/esm/core/actions/v2/fetch-list.mjs +132 -0
  25. package/dist/esm/core/actions/v2/fetch-list.mjs.map +1 -0
  26. package/dist/esm/core/actions/v2/manager-v2.mjs +74 -0
  27. package/dist/esm/core/actions/v2/manager-v2.mjs.map +1 -0
  28. package/dist/esm/core/actions/v3/batch-by-chunk.mjs +91 -0
  29. package/dist/esm/core/actions/v3/batch-by-chunk.mjs.map +1 -0
  30. package/dist/esm/core/actions/v3/batch.mjs +129 -0
  31. package/dist/esm/core/actions/v3/batch.mjs.map +1 -0
  32. package/dist/esm/core/actions/v3/call-list.mjs +127 -0
  33. package/dist/esm/core/actions/v3/call-list.mjs.map +1 -0
  34. package/dist/esm/core/actions/v3/call.mjs +58 -0
  35. package/dist/esm/core/actions/v3/call.mjs.map +1 -0
  36. package/dist/esm/core/actions/v3/fetch-list.mjs +125 -0
  37. package/dist/esm/core/actions/v3/fetch-list.mjs.map +1 -0
  38. package/dist/esm/core/actions/v3/manager-v3.mjs +74 -0
  39. package/dist/esm/core/actions/v3/manager-v3.mjs.map +1 -0
  40. package/dist/esm/core/http/abstract-http.mjs +563 -0
  41. package/dist/esm/core/http/abstract-http.mjs.map +1 -0
  42. package/dist/esm/core/http/ajax-error.mjs +107 -0
  43. package/dist/esm/core/http/ajax-error.mjs.map +1 -0
  44. package/dist/esm/core/http/ajax-result.mjs +176 -0
  45. package/dist/esm/core/http/ajax-result.mjs.map +1 -0
  46. package/dist/esm/core/http/limiters/adaptive-delayer.mjs +135 -0
  47. package/dist/esm/core/http/limiters/adaptive-delayer.mjs.map +1 -0
  48. package/dist/esm/core/http/limiters/manager.mjs +308 -0
  49. package/dist/esm/core/http/limiters/manager.mjs.map +1 -0
  50. package/dist/esm/core/http/limiters/operating-limiter.mjs +171 -0
  51. package/dist/esm/core/http/limiters/operating-limiter.mjs.map +1 -0
  52. package/dist/esm/core/http/limiters/params-factory.mjs +121 -0
  53. package/dist/esm/core/http/limiters/params-factory.mjs.map +1 -0
  54. package/dist/esm/core/http/limiters/rate-limiter.mjs +402 -0
  55. package/dist/esm/core/http/limiters/rate-limiter.mjs.map +1 -0
  56. package/dist/esm/core/http/v2.mjs +100 -0
  57. package/dist/esm/core/http/v2.mjs.map +1 -0
  58. package/dist/esm/core/http/v3.mjs +94 -0
  59. package/dist/esm/core/http/v3.mjs.map +1 -0
  60. package/dist/esm/core/interaction/batch/abstract-interaction-batch.mjs +69 -0
  61. package/dist/esm/core/interaction/batch/abstract-interaction-batch.mjs.map +1 -0
  62. package/dist/esm/core/interaction/batch/parse-row.mjs +67 -0
  63. package/dist/esm/core/interaction/batch/parse-row.mjs.map +1 -0
  64. package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs +42 -0
  65. package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs.map +1 -0
  66. package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs +121 -0
  67. package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs.map +1 -0
  68. package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs +32 -0
  69. package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs.map +1 -0
  70. package/dist/esm/core/interaction/batch/processing/v2/as-object.mjs +32 -0
  71. package/dist/esm/core/interaction/batch/processing/v2/as-object.mjs.map +1 -0
  72. package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs +118 -0
  73. package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs.map +1 -0
  74. package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs +32 -0
  75. package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs.map +1 -0
  76. package/dist/esm/core/interaction/batch/processing/v3/as-object.mjs +32 -0
  77. package/dist/esm/core/interaction/batch/processing/v3/as-object.mjs.map +1 -0
  78. package/dist/esm/core/interaction/batch/v2.mjs +44 -0
  79. package/dist/esm/core/interaction/batch/v2.mjs.map +1 -0
  80. package/dist/esm/core/interaction/batch/v3.mjs +42 -0
  81. package/dist/esm/core/interaction/batch/v3.mjs.map +1 -0
  82. package/dist/esm/core/language/list.mjs +56 -0
  83. package/dist/esm/core/language/list.mjs.map +1 -0
  84. package/dist/esm/core/request-id-generator.mjs +42 -0
  85. package/dist/esm/core/request-id-generator.mjs.map +1 -0
  86. package/dist/esm/core/result.mjs +101 -0
  87. package/dist/esm/core/result.mjs.map +1 -0
  88. package/dist/esm/core/sdk-error.mjs +83 -0
  89. package/dist/esm/core/sdk-error.mjs.map +1 -0
  90. package/dist/esm/core/tools/abstract-tool.mjs +24 -0
  91. package/dist/esm/core/tools/abstract-tool.mjs.map +1 -0
  92. package/dist/esm/core/tools/healthcheck.mjs +48 -0
  93. package/dist/esm/core/tools/healthcheck.mjs.map +1 -0
  94. package/dist/esm/core/tools/manager.mjs +50 -0
  95. package/dist/esm/core/tools/manager.mjs.map +1 -0
  96. package/dist/esm/core/tools/ping.mjs +56 -0
  97. package/dist/esm/core/tools/ping.mjs.map +1 -0
  98. package/dist/esm/core/version-manager.mjs +116 -0
  99. package/dist/esm/core/version-manager.mjs.map +1 -0
  100. package/dist/esm/frame/auth.mjs +98 -0
  101. package/dist/esm/frame/auth.mjs.map +1 -0
  102. package/dist/esm/frame/b24.mjs +170 -0
  103. package/dist/esm/frame/b24.mjs.map +1 -0
  104. package/dist/esm/frame/dialog.mjs +78 -0
  105. package/dist/esm/frame/dialog.mjs.map +1 -0
  106. package/dist/esm/frame/frame.mjs +101 -0
  107. package/dist/esm/frame/frame.mjs.map +1 -0
  108. package/dist/esm/frame/message/commands.mjs +37 -0
  109. package/dist/esm/frame/message/commands.mjs.map +1 -0
  110. package/dist/esm/frame/message/controller.mjs +177 -0
  111. package/dist/esm/frame/message/controller.mjs.map +1 -0
  112. package/dist/esm/frame/options.mjs +106 -0
  113. package/dist/esm/frame/options.mjs.map +1 -0
  114. package/dist/esm/frame/parent.mjs +250 -0
  115. package/dist/esm/frame/parent.mjs.map +1 -0
  116. package/dist/esm/frame/placement.mjs +131 -0
  117. package/dist/esm/frame/placement.mjs.map +1 -0
  118. package/dist/esm/frame/slider.mjs +156 -0
  119. package/dist/esm/frame/slider.mjs.map +1 -0
  120. package/dist/esm/helper/abstract-helper.mjs +52 -0
  121. package/dist/esm/helper/abstract-helper.mjs.map +1 -0
  122. package/dist/esm/helper/app-manager.mjs +37 -0
  123. package/dist/esm/helper/app-manager.mjs.map +1 -0
  124. package/dist/esm/helper/currency-manager.mjs +207 -0
  125. package/dist/esm/helper/currency-manager.mjs.map +1 -0
  126. package/dist/esm/helper/helper-manager.mjs +388 -0
  127. package/dist/esm/helper/helper-manager.mjs.map +1 -0
  128. package/dist/esm/helper/license-manager.mjs +50 -0
  129. package/dist/esm/helper/license-manager.mjs.map +1 -0
  130. package/dist/esm/helper/options-manager.mjs +196 -0
  131. package/dist/esm/helper/options-manager.mjs.map +1 -0
  132. package/dist/esm/helper/payment-manager.mjs +33 -0
  133. package/dist/esm/helper/payment-manager.mjs.map +1 -0
  134. package/dist/esm/helper/profile-manager.mjs +33 -0
  135. package/dist/esm/helper/profile-manager.mjs.map +1 -0
  136. package/dist/esm/helper/use-b24-helper.mjs +84 -0
  137. package/dist/esm/helper/use-b24-helper.mjs.map +1 -0
  138. package/dist/esm/hook/auth.mjs +77 -0
  139. package/dist/esm/hook/auth.mjs.map +1 -0
  140. package/dist/esm/hook/b24.mjs +115 -0
  141. package/dist/esm/hook/b24.mjs.map +1 -0
  142. package/dist/esm/index.d.mts +2757 -526
  143. package/dist/esm/index.d.ts +2757 -526
  144. package/dist/esm/index.mjs +70 -14118
  145. package/dist/esm/index.mjs.map +1 -1
  146. package/dist/esm/loader-b24frame.mjs +101 -0
  147. package/dist/esm/loader-b24frame.mjs.map +1 -0
  148. package/dist/esm/logger/abstract-logger.mjs +69 -0
  149. package/dist/esm/logger/abstract-logger.mjs.map +1 -0
  150. package/dist/esm/logger/browser.mjs +162 -0
  151. package/dist/esm/logger/browser.mjs.map +1 -0
  152. package/dist/esm/logger/formatter/abstract-formatter.mjs +34 -0
  153. package/dist/esm/logger/formatter/abstract-formatter.mjs.map +1 -0
  154. package/dist/esm/logger/formatter/json-formatter.mjs +34 -0
  155. package/dist/esm/logger/formatter/json-formatter.mjs.map +1 -0
  156. package/dist/esm/logger/formatter/line-formatter.mjs +41 -0
  157. package/dist/esm/logger/formatter/line-formatter.mjs.map +1 -0
  158. package/dist/esm/logger/formatter/telegram-formatter.mjs +103 -0
  159. package/dist/esm/logger/formatter/telegram-formatter.mjs.map +1 -0
  160. package/dist/esm/logger/handler/abstract-handler.mjs +39 -0
  161. package/dist/esm/logger/handler/abstract-handler.mjs.map +1 -0
  162. package/dist/esm/logger/handler/consola-adapter.mjs +62 -0
  163. package/dist/esm/logger/handler/consola-adapter.mjs.map +1 -0
  164. package/dist/esm/logger/handler/console-handler.mjs +98 -0
  165. package/dist/esm/logger/handler/console-handler.mjs.map +1 -0
  166. package/dist/esm/logger/handler/console-v2-handler.mjs +51 -0
  167. package/dist/esm/logger/handler/console-v2-handler.mjs.map +1 -0
  168. package/dist/esm/logger/handler/memory-handler.mjs +48 -0
  169. package/dist/esm/logger/handler/memory-handler.mjs.map +1 -0
  170. package/dist/esm/logger/handler/stream-handler.mjs +73 -0
  171. package/dist/esm/logger/handler/stream-handler.mjs.map +1 -0
  172. package/dist/esm/logger/handler/telegram-handler.mjs +157 -0
  173. package/dist/esm/logger/handler/telegram-handler.mjs.map +1 -0
  174. package/dist/esm/logger/handler/winston-adapter.mjs +57 -0
  175. package/dist/esm/logger/handler/winston-adapter.mjs.map +1 -0
  176. package/dist/esm/logger/logger-factory.mjs +67 -0
  177. package/dist/esm/logger/logger-factory.mjs.map +1 -0
  178. package/dist/esm/logger/logger.mjs +76 -0
  179. package/dist/esm/logger/logger.mjs.map +1 -0
  180. package/dist/esm/logger/null-logger.mjs +32 -0
  181. package/dist/esm/logger/null-logger.mjs.map +1 -0
  182. package/dist/esm/logger/processor/memory-usage-processor.mjs +20 -0
  183. package/dist/esm/logger/processor/memory-usage-processor.mjs.map +1 -0
  184. package/dist/esm/logger/processor/pid-processor.mjs +20 -0
  185. package/dist/esm/logger/processor/pid-processor.mjs.map +1 -0
  186. package/dist/esm/oauth/auth.mjs +211 -0
  187. package/dist/esm/oauth/auth.mjs.map +1 -0
  188. package/dist/esm/oauth/b24.mjs +117 -0
  189. package/dist/esm/oauth/b24.mjs.map +1 -0
  190. package/dist/esm/oauth/refresh-token-error.mjs +20 -0
  191. package/dist/esm/oauth/refresh-token-error.mjs.map +1 -0
  192. package/dist/esm/pullClient/abstract-connector.mjs +78 -0
  193. package/dist/esm/pullClient/abstract-connector.mjs.map +1 -0
  194. package/dist/esm/pullClient/channel-manager.mjs +89 -0
  195. package/dist/esm/pullClient/channel-manager.mjs.map +1 -0
  196. package/dist/esm/pullClient/client.mjs +2064 -0
  197. package/dist/esm/pullClient/client.mjs.map +1 -0
  198. package/dist/esm/pullClient/errors.mjs +31 -0
  199. package/dist/esm/pullClient/errors.mjs.map +1 -0
  200. package/dist/esm/pullClient/json-rpc.mjs +210 -0
  201. package/dist/esm/pullClient/json-rpc.mjs.map +1 -0
  202. package/dist/esm/pullClient/long-polling-connector.mjs +157 -0
  203. package/dist/esm/pullClient/long-polling-connector.mjs.map +1 -0
  204. package/dist/esm/pullClient/protobuf/index.mjs +17 -0
  205. package/dist/esm/pullClient/protobuf/index.mjs.map +1 -0
  206. package/dist/esm/pullClient/protobuf/model.mjs +1058 -0
  207. package/dist/esm/pullClient/protobuf/model.mjs.map +1 -0
  208. package/dist/esm/pullClient/protobuf/protobuf.mjs +4653 -0
  209. package/dist/esm/pullClient/protobuf/protobuf.mjs.map +1 -0
  210. package/dist/esm/pullClient/shared-config.mjs +133 -0
  211. package/dist/esm/pullClient/shared-config.mjs.map +1 -0
  212. package/dist/esm/pullClient/storage-manager.mjs +72 -0
  213. package/dist/esm/pullClient/storage-manager.mjs.map +1 -0
  214. package/dist/esm/pullClient/web-socket-connector.mjs +129 -0
  215. package/dist/esm/pullClient/web-socket-connector.mjs.map +1 -0
  216. package/dist/esm/tools/browser.mjs +154 -0
  217. package/dist/esm/tools/browser.mjs.map +1 -0
  218. package/dist/esm/tools/environment.mjs +29 -0
  219. package/dist/esm/tools/environment.mjs.map +1 -0
  220. package/dist/esm/tools/formatters/iban.mjs +304 -0
  221. package/dist/esm/tools/formatters/iban.mjs.map +1 -0
  222. package/dist/esm/tools/formatters/numbers.mjs +64 -0
  223. package/dist/esm/tools/formatters/numbers.mjs.map +1 -0
  224. package/dist/esm/tools/index.mjs +37 -0
  225. package/dist/esm/tools/index.mjs.map +1 -0
  226. package/dist/esm/tools/scroll-size.mjs +25 -0
  227. package/dist/esm/tools/scroll-size.mjs.map +1 -0
  228. package/dist/esm/tools/text.mjs +208 -0
  229. package/dist/esm/tools/text.mjs.map +1 -0
  230. package/dist/esm/tools/type.mjs +337 -0
  231. package/dist/esm/tools/type.mjs.map +1 -0
  232. package/dist/esm/tools/use-formatters.mjs +460 -0
  233. package/dist/esm/tools/use-formatters.mjs.map +1 -0
  234. package/dist/esm/tools/uuidv7.mjs +54 -0
  235. package/dist/esm/tools/uuidv7.mjs.map +1 -0
  236. package/dist/esm/types/b24-helper.mjs +56 -0
  237. package/dist/esm/types/b24-helper.mjs.map +1 -0
  238. package/dist/esm/types/b24.mjs +16 -0
  239. package/dist/esm/types/b24.mjs.map +1 -0
  240. package/dist/esm/types/bizproc/index.mjs +187 -0
  241. package/dist/esm/types/bizproc/index.mjs.map +1 -0
  242. package/dist/esm/types/catalog/index.mjs +35 -0
  243. package/dist/esm/types/catalog/index.mjs.map +1 -0
  244. package/dist/esm/types/common.mjs +31 -0
  245. package/dist/esm/types/common.mjs.map +1 -0
  246. package/dist/esm/types/crm/entity-type.mjs +57 -0
  247. package/dist/esm/types/crm/entity-type.mjs.map +1 -0
  248. package/dist/esm/types/crm/productrow.mjs +17 -0
  249. package/dist/esm/types/crm/productrow.mjs.map +1 -0
  250. package/dist/esm/types/logger.mjs +22 -0
  251. package/dist/esm/types/logger.mjs.map +1 -0
  252. package/dist/esm/types/pull.mjs +83 -0
  253. package/dist/esm/types/pull.mjs.map +1 -0
  254. package/dist/umd/index.js +31216 -26912
  255. package/dist/umd/index.js.map +1 -1
  256. package/dist/umd/index.min.js +63 -40
  257. package/dist/umd/index.min.js.map +1 -1
  258. package/package.json +36 -31
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.mjs","sources":["../../../src/pullClient/client.ts"],"sourcesContent":["import type { LoggerInterface } from '../logger'\nimport { LoggerFactory } from '../logger'\nimport { Type } from '../tools/type'\nimport { Text } from '../tools/text'\nimport { Browser } from '../tools/browser'\nimport { StorageManager } from './storage-manager'\nimport { JsonRpc } from './json-rpc'\nimport { SharedConfig } from './shared-config'\nimport { ChannelManager } from './channel-manager'\nimport { ResponseBatch, RequestBatch, IncomingMessage, Receiver } from './protobuf'\nimport { CloseReasons, ConnectionType, PullStatus, RpcMethod, SenderType, ServerMode, SubscriptionType, SystemCommands, LsKeys } from '../types/pull'\nimport { WebSocketConnector } from './web-socket-connector'\nimport { LongPollingConnector } from './long-polling-connector'\nimport type { StorageManagerParams, TypePullClientParams, TypePullClientSession, TypeStorageManager, SharedConfigParams, TypeChannelManagerParams, TypeConnector, RpcError, TypePullClientConfig, TypePullMessage, TypeSubscriptionOptions, TypeSubscriptionCommandHandler, TypePullClientEmitConfig, CommandHandlerFunctionV1, CommandHandlerFunctionV2, ConnectorParent, UserStatusCallback, TypePublicIdDescriptor, TypePullClientMessageBatch, TypeChanel, TypeSessionEvent, TypePullClientMessageBody } from '../types/pull'\nimport type { TypeB24 } from '../types/b24'\nimport type { AjaxResult } from '../core/http/ajax-result'\nimport type { SuccessPayload } from '../types/payloads'\nimport type { NumberString } from '../types/common'\n\n/**\n * @memo api revision - check module/pull/include.php\n */\nconst REVISION = 19\nconst RESTORE_WEBSOCKET_TIMEOUT = 30 * 60\nconst OFFLINE_STATUS_DELAY = 5_000\nconst CONFIG_CHECK_INTERVAL = 60 * 1000\nconst MAX_IDS_TO_STORE = 10\nconst PING_TIMEOUT = 10\nconst JSON_RPC_PING = 'ping'\nconst JSON_RPC_PONG = 'pong'\nconst LS_SESSION = 'bx-pull-session'\nconst LS_SESSION_CACHE_TIME = 20\n\nconst EmptyConfig = {\n api: {},\n channels: {},\n publicChannels: {},\n server: { timeShift: 0 },\n clientId: null,\n jwt: null,\n exp: 0\n} as TypePullClientConfig\n\nexport class PullClient implements ConnectorParent {\n // region Params ////\n private _logger: LoggerInterface\n private _restClient: TypeB24\n private _status: PullStatus\n private _context: string\n private readonly _guestMode: boolean\n private readonly _guestUserId: number\n private _userId: number\n\n private _configGetMethod: string\n private _getPublicListMethod: string\n\n private _siteId: string\n private _enabled: boolean\n\n private _unloading: boolean = false\n private _starting: boolean = false\n private _debug: boolean = false\n private _connectionAttempt: number = 0\n private _connectionType: ConnectionType = ConnectionType.WebSocket\n private _skipStorageInit: boolean\n private _skipCheckRevision: boolean\n\n private _subscribers: Record<string, any> = {}\n private _watchTagsQueue: Map<string, boolean> = new Map()\n private _watchUpdateInterval: number = 1_740_000\n private _watchForceUpdateInterval: number = 5_000\n private _configTimestamp: number = 0\n private _session: TypePullClientSession = {\n mid: null,\n tag: null,\n time: null,\n history: {},\n lastMessageIds: [],\n messageCount: 0\n }\n\n private _connectors: Record<ConnectionType, null | TypeConnector> = {\n [ConnectionType.Undefined]: null,\n [ConnectionType.WebSocket]: null,\n [ConnectionType.LongPolling]: null\n }\n\n private _isSecure: boolean\n\n private _config: null | TypePullClientConfig = null\n\n private _storage: null | TypeStorageManager = null\n private _sharedConfig: SharedConfig\n private _channelManager: ChannelManager\n private _jsonRpcAdapter: null | JsonRpc = null\n\n /**\n * @depricate\n */\n // private _notificationPopup: null = null\n\n // timers ////\n private _reconnectTimeout: ReturnType<typeof setTimeout> | null = null\n private _restartTimeout: ReturnType<typeof setTimeout> | null = null\n private _restoreWebSocketTimeout: ReturnType<typeof setTimeout> | null = null\n private _checkInterval: ReturnType<typeof setTimeout> | null = null\n private _offlineTimeout: ReturnType<typeof setTimeout> | null = null\n private _watchUpdateTimeout: ReturnType<typeof setTimeout> | null = null\n private _pingWaitTimeout: ReturnType<typeof setTimeout> | null = null\n\n // manual stop workaround ////\n private _isManualDisconnect: boolean = false\n\n private _loggingEnabled: boolean = false\n\n // bound event handlers ////\n private _onPingTimeoutHandler: () => void\n\n // [userId] => array of callbacks\n private _userStatusCallbacks: Record<number, UserStatusCallback[]> = {}\n\n private _connectPromise: null | {\n resolve: (response: any) => void\n reject: (error: string | RpcError | Error) => void\n } = null\n\n private _startingPromise: null | Promise<boolean> = null\n // endregion ////\n\n // region Init ////\n /**\n * @param params\n */\n constructor(params: TypePullClientParams) {\n this._logger = LoggerFactory.createNullLogger()\n this._restClient = params.b24\n this._status = PullStatus.Offline\n this._context = 'master'\n\n // region RestApplication ////\n if (params.restApplication) {\n if (typeof params.configGetMethod === 'undefined') {\n params.configGetMethod = 'pull.application.config.get'\n }\n\n if (typeof params.skipCheckRevision === 'undefined') {\n params.skipCheckRevision = true\n }\n\n if (Type.isStringFilled(params.restApplication)) {\n params.siteId = params.restApplication\n }\n\n params.serverEnabled = true\n }\n // endregion ////\n\n // region Params ////\n this._guestMode = params.guestMode\n ? Text.toBoolean(params.guestMode)\n : false\n\n this._guestUserId = params.guestUserId\n ? Text.toInteger(params.guestUserId)\n : 0\n\n if (this._guestMode && this._guestUserId > 0) {\n this._userId = this._guestUserId\n } else {\n this._guestMode = false\n this._userId = params.userId ? Text.toInteger(params.userId) : 0\n }\n\n this._siteId = params.siteId ?? 'none'\n\n this._enabled = !Type.isUndefined(params.serverEnabled)\n ? params.serverEnabled === true\n : true\n\n this._configGetMethod = !Type.isStringFilled(params.configGetMethod)\n ? 'pull.config.get'\n : params.configGetMethod || ''\n\n this._getPublicListMethod = !Type.isStringFilled(params.getPublicListMethod)\n ? 'pull.channel.public.list'\n : params.getPublicListMethod || ''\n\n this._skipStorageInit = params.skipStorageInit === true\n this._skipCheckRevision = params.skipCheckRevision === true\n\n if (!Type.isUndefined(params.configTimestamp)) {\n this._configTimestamp = Text.toInteger(params.configTimestamp)\n }\n // endregion ////\n\n this._isSecure = document?.location.href.indexOf('https') === 0\n\n if (this._userId && !this._skipStorageInit) {\n this._storage = new StorageManager({\n userId: this._userId,\n siteId: this._siteId\n } as StorageManagerParams)\n }\n\n this._sharedConfig = new SharedConfig({\n onWebSocketBlockChanged: this.onWebSocketBlockChanged.bind(this),\n storage: this._storage\n } as SharedConfigParams)\n\n this._channelManager = new ChannelManager({\n b24: this._restClient,\n getPublicListMethod: this._getPublicListMethod\n } as TypeChannelManagerParams)\n\n this._loggingEnabled = this._sharedConfig.isLoggingEnabled()\n\n // bound event handlers ////\n this._onPingTimeoutHandler = this.onPingTimeout.bind(this)\n }\n\n setLogger(logger: LoggerInterface): void {\n this._logger = logger\n this._jsonRpcAdapter?.setLogger(this.getLogger())\n this._storage?.setLogger(this.getLogger())\n this._sharedConfig.setLogger(this.getLogger())\n this._channelManager.setLogger(this.getLogger())\n\n this._connectors.webSocket?.setLogger(this.getLogger())\n this._connectors.longPolling?.setLogger(this.getLogger())\n }\n\n getLogger(): LoggerInterface {\n return this._logger\n }\n\n destroy(): void {\n this.stop(CloseReasons.NORMAL_CLOSURE, 'manual stop')\n\n this.onBeforeUnload()\n }\n\n private init(): void {\n this._connectors.webSocket = new WebSocketConnector({\n parent: this,\n onOpen: this.onWebSocketOpen.bind(this),\n onMessage: this.onIncomingMessage.bind(this),\n onDisconnect: this.onWebSocketDisconnect.bind(this),\n onError: this.onWebSocketError.bind(this)\n })\n\n this._connectors.longPolling = new LongPollingConnector({\n parent: this,\n onOpen: this.onLongPollingOpen.bind(this),\n onMessage: this.onIncomingMessage.bind(this),\n onDisconnect: this.onLongPollingDisconnect.bind(this),\n onError: this.onLongPollingError.bind(this)\n })\n\n this._connectionType = this.isWebSocketAllowed()\n ? ConnectionType.WebSocket\n : ConnectionType.LongPolling\n\n window.addEventListener('beforeunload', this.onBeforeUnload.bind(this))\n window.addEventListener('offline', this.onOffline.bind(this))\n window.addEventListener('online', this.onOnline.bind(this))\n\n /**\n * @memo Not use under Node.js\n */\n /* /\n if (BX && BX.addCustomEvent)\n {\n BX.addCustomEvent('BXLinkOpened', this.connect.bind(this))\n }\n\n if (BX && BX.desktop)\n {\n BX.addCustomEvent('onDesktopReload', () => {\n this._session.mid = null\n this._session.tag = null\n this._session.time = null\n })\n\n BX.desktop.addCustomEvent('BXLoginSuccess', () => this.restart(1_000, 'desktop login'))\n }\n // */\n\n this._jsonRpcAdapter = new JsonRpc({\n connector: this._connectors.webSocket,\n handlers: {\n 'incoming.message': this.handleRpcIncomingMessage.bind(this)\n }\n })\n }\n\n // endregion ////\n\n // region Get-Set ////\n get connector(): null | TypeConnector {\n return this._connectors[this._connectionType]\n }\n\n get status(): PullStatus {\n return this._status\n }\n\n /**\n * @param status\n */\n set status(status: PullStatus) {\n if (this._status === status) {\n return\n }\n\n this._status = status\n if (this._offlineTimeout) {\n clearTimeout(this._offlineTimeout)\n this._offlineTimeout = null\n }\n\n if (status === PullStatus.Offline) {\n this.sendPullStatusDelayed(status, OFFLINE_STATUS_DELAY)\n } else {\n this.sendPullStatus(status)\n }\n }\n\n get session(): TypePullClientSession {\n return this._session\n }\n\n // endregion ////\n\n // region Public /////\n /**\n * Creates a subscription to incoming messages.\n *\n * @param {TypeSubscriptionOptions | TypeSubscriptionCommandHandler} params\n * @returns { () => void } - Unsubscribe callback function\n */\n public subscribe(\n params: TypeSubscriptionOptions | TypeSubscriptionCommandHandler\n ): () => void {\n if (!Type.isPlainObject(params)) {\n return this.attachCommandHandler(params as TypeSubscriptionCommandHandler)\n }\n\n params = params as TypeSubscriptionOptions\n\n params.type = params.type || SubscriptionType.Server\n params.command = params.command || null\n\n if (\n params.type == SubscriptionType.Server\n || params.type == SubscriptionType.Client\n ) {\n if (typeof params.moduleId === 'undefined') {\n throw new TypeError(\n `${Text.getDateForLog()}: Pull.subscribe: parameter moduleId is not specified`\n )\n }\n\n if (typeof this._subscribers[params.type] === 'undefined') {\n this._subscribers[params.type] = {}\n }\n\n if (\n typeof this._subscribers[params.type][params.moduleId] === 'undefined'\n ) {\n this._subscribers[params.type][params.moduleId] = {\n callbacks: [],\n commands: {}\n }\n }\n\n if (params.command) {\n if (\n typeof this._subscribers[params.type][params.moduleId]['commands'][\n params.command\n ] === 'undefined'\n ) {\n this._subscribers[params.type][params.moduleId]['commands'][\n params.command\n ] = []\n }\n\n this._subscribers[params.type][params.moduleId]['commands'][\n params.command\n ].push(params.callback)\n\n return () => {\n if (\n typeof params.type === 'undefined'\n || typeof params.moduleId === 'undefined'\n || typeof params.command === 'undefined'\n || null === params.command\n ) {\n return\n }\n\n this._subscribers[params.type][params.moduleId]['commands'][\n params.command\n ] = this._subscribers[params.type][params.moduleId]['commands'][\n params.command\n ].filter((element: any) => {\n return element !== params.callback\n })\n }\n } else {\n this._subscribers[params.type][params.moduleId]['callbacks'].push(\n params.callback\n )\n\n return () => {\n if (\n typeof params.type === 'undefined'\n || typeof params.moduleId === 'undefined'\n ) {\n return\n }\n\n this._subscribers[params.type][params.moduleId]['callbacks']\n = this._subscribers[params.type][params.moduleId]['callbacks'].filter(\n (element: any) => {\n return element !== params.callback\n }\n )\n }\n }\n } else {\n if (typeof this._subscribers[params.type] === 'undefined') {\n this._subscribers[params.type] = []\n }\n\n this._subscribers[params.type].push(params.callback)\n\n return () => {\n if (typeof params.type === 'undefined') {\n return\n }\n\n this._subscribers[params.type] = this._subscribers[params.type].filter(\n (element: any) => {\n return element !== params.callback\n }\n )\n }\n }\n }\n\n /**\n * @param {TypeSubscriptionCommandHandler} handler\n * @returns {() => void} - Unsubscribe callback function\n */\n private attachCommandHandler(\n handler: TypeSubscriptionCommandHandler\n ): () => void {\n if (\n typeof handler.getModuleId !== 'function'\n || typeof handler.getModuleId() !== 'string'\n ) {\n this.getLogger().error(`${Text.getDateForLog()}: Pull.attachCommandHandler: result of handler.getModuleId() is not a string.`)\n return () => {}\n }\n\n let type = SubscriptionType.Server\n if (typeof handler.getSubscriptionType === 'function') {\n type = handler.getSubscriptionType()\n }\n\n return this.subscribe({\n type: type,\n moduleId: handler.getModuleId(),\n callback: (data: TypePullMessage) => {\n let method = null\n\n if (typeof handler.getMap === 'function') {\n const mapping = handler.getMap()\n if (mapping && typeof mapping === 'object') {\n const rowMapping = mapping[data.command]\n if (typeof rowMapping === 'function') {\n method = rowMapping.bind(handler)\n } else if (\n typeof rowMapping === 'string'\n && typeof handler[rowMapping] === 'function'\n ) {\n method = handler[rowMapping].bind(handler)\n }\n }\n }\n\n /**\n * handler.handleSomeCommandName: CommandHandlerFunction\n */\n if (!method) {\n const methodName = `handle${Text.capitalize(data.command)}`\n if (typeof handler[methodName] === 'function') {\n method = handler[methodName].bind(handler)\n }\n }\n\n if (method) {\n if (this._debug && this._context !== 'master') {\n this.getLogger().warning(\n `${Text.getDateForLog()}: Pull.attachCommandHandler: result of handler.getModuleId() is not a string`,\n { data }\n )\n }\n\n method(data.params, data.extra, data.command)\n }\n }\n })\n }\n\n /**\n * @param config\n */\n public async start(\n config:\n | null\n | (TypePullClientConfig & {\n skipReconnectToLastSession?: boolean\n }) = null\n ): Promise<boolean> {\n let allowConfigCaching = true\n\n if (this.isConnected()) {\n return Promise.resolve(true)\n }\n\n if (this._starting && this._startingPromise) {\n return this._startingPromise\n }\n\n if (!this._userId) {\n throw new Error('Not set userId')\n }\n\n if (this._siteId === 'none') {\n throw new Error('Not set siteId')\n }\n\n let skipReconnectToLastSession = false\n if (!!config && Type.isPlainObject(config)) {\n if (typeof config?.skipReconnectToLastSession !== 'undefined') {\n skipReconnectToLastSession = config.skipReconnectToLastSession\n delete config.skipReconnectToLastSession\n }\n\n this._config = config\n allowConfigCaching = false\n }\n\n if (!this._enabled) {\n return Promise.reject({\n ex: {\n error: 'PULL_DISABLED',\n error_description: 'Push & Pull server is disabled'\n }\n })\n }\n\n const now = Date.now()\n let oldSession\n if (!skipReconnectToLastSession && this._storage) {\n oldSession = this._storage.get(LS_SESSION, null)\n }\n\n if (\n Type.isPlainObject(oldSession)\n && Object.prototype.hasOwnProperty.call(oldSession, 'ttl')\n && oldSession['ttl'] >= now\n ) {\n this._session.mid = oldSession['mid']\n }\n\n this._starting = true\n return (this._startingPromise = new Promise((resolve, reject) => {\n this.loadConfig('client_start')\n .then((config) => {\n this.setConfig(config as TypePullClientConfig, allowConfigCaching)\n this.init()\n this.updateWatch(true)\n this.startCheckConfig()\n\n this.connect().then(\n () => resolve(true),\n error => reject(error)\n )\n })\n .catch((error) => {\n this._starting = false\n this.status = PullStatus.Offline\n this.stopCheckConfig()\n this.getLogger().error(\n `${Text.getDateForLog()}: Pull: could not read push-server config`,\n { error }\n )\n reject(error)\n })\n }))\n }\n\n /**\n * @param disconnectCode\n * @param disconnectReason\n */\n public restart(\n disconnectCode: number | CloseReasons = CloseReasons.NORMAL_CLOSURE,\n disconnectReason: string = 'manual restart'\n ): void {\n if (this._restartTimeout) {\n clearTimeout(this._restartTimeout)\n this._restartTimeout = null\n }\n\n this.getLogger().debug(\n `${Text.getDateForLog()}: Pull: restarting with code ${disconnectCode}`\n )\n\n this.disconnect(disconnectCode, disconnectReason)\n\n if (this._storage) {\n this._storage.remove(LsKeys.PullConfig)\n }\n\n this._config = null\n\n const loadConfigReason = `${disconnectCode}_${disconnectReason.replaceAll(' ', '_')}`\n this.loadConfig(loadConfigReason).then(\n (config) => {\n this.setConfig(config, true)\n this.updateWatch()\n this.startCheckConfig()\n this.connect().catch((error) => {\n this.getLogger().error('restart error', { error })\n })\n },\n (error) => {\n this.getLogger().error(\n `${Text.getDateForLog()}: Pull: could not read push-server config `,\n { error }\n )\n\n this.status = PullStatus.Offline\n if (this._reconnectTimeout) {\n clearTimeout(this._reconnectTimeout)\n this._reconnectTimeout = null\n }\n\n if (error?.status == 401 || error?.status == 403) {\n this.stopCheckConfig()\n this.onCustomEvent('onPullError', ['AUTHORIZE_ERROR'])\n }\n }\n )\n }\n\n public stop(\n disconnectCode: number | CloseReasons = CloseReasons.NORMAL_CLOSURE,\n disconnectReason: string = 'manual stop'\n ): void {\n this.disconnect(disconnectCode, disconnectReason)\n\n this.stopCheckConfig()\n }\n\n public reconnect(\n disconnectCode: number | CloseReasons,\n disconnectReason: string,\n delay: number = 1\n ): void {\n this.disconnect(disconnectCode, disconnectReason)\n\n this.scheduleReconnect(delay)\n }\n\n /**\n * @param lastMessageId\n */\n public setLastMessageId(lastMessageId: string): void {\n this._session.mid = lastMessageId\n }\n\n /**\n * Send a single message to the specified users.\n *\n * @param users User ids of the message receivers.\n * @param moduleId Name of the module to receive a message,\n * @param command Command name.\n * @param {object} params Command parameters.\n * @param [expiry] Message expiry time in seconds.\n * @return {Promise}\n */\n public async sendMessage(\n users: number[],\n moduleId: string,\n command: string,\n params: any,\n expiry?: number\n ): Promise<any> {\n const message = {\n userList: users,\n body: {\n module_id: moduleId,\n command: command,\n params: params\n },\n expiry: expiry\n } as TypePullClientMessageBatch\n\n if (this.isJsonRpc()) {\n return this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n RpcMethod.Publish,\n message\n )\n } else {\n return this.sendMessageBatch([message])\n }\n }\n\n /**\n * Send a single message to the specified public channels.\n *\n * @param publicChannels Public ids of the channels to receive a message.\n * @param moduleId Name of the module to receive a message,\n * @param command Command name.\n * @param {object} params Command parameters.\n * @param [expiry] Message expiry time in seconds.\n * @return {Promise}\n */\n public async sendMessageToChannels(\n publicChannels: string[],\n moduleId: string,\n command: string,\n params: any,\n expiry?: number\n ): Promise<any> {\n const message = {\n channelList: publicChannels,\n body: {\n module_id: moduleId,\n command: command,\n params: params\n },\n expiry: expiry\n } as TypePullClientMessageBatch\n\n if (this.isJsonRpc()) {\n return this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n RpcMethod.Publish,\n message\n )\n } else {\n return this.sendMessageBatch([message])\n }\n }\n\n /**\n * @param debugFlag\n */\n public capturePullEvent(debugFlag: boolean = true): void {\n this._debug = debugFlag\n }\n\n /**\n * @param loggingFlag\n */\n public enableLogging(loggingFlag: boolean = true): void {\n this._sharedConfig.setLoggingEnabled(loggingFlag)\n this._loggingEnabled = loggingFlag\n }\n\n /**\n * Returns list channels that the connection is subscribed to.\n *\n * @returns {Promise}\n */\n public async listChannels(): Promise<any> {\n return (\n this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n RpcMethod.ListChannels,\n {}\n ) || Promise.reject(new Error('jsonRpcAdapter not init'))\n )\n }\n\n /**\n * Returns \"last seen\" time in seconds for the users.\n * Result format: Object{userId: int}\n * If the user is currently connected - will return 0.\n * If the user is offline - will return the diff between the current timestamp and the last seen timestamp in seconds.\n * If the user was never online - the record for the user will be missing from the result object.\n *\n * @param {integer[]} userList List of user ids.\n * @returns {Promise}\n */\n public async getUsersLastSeen(\n userList: number[]\n ): Promise<Record<number, number>> {\n if (\n !Type.isArray(userList)\n || !userList.every(item => typeof item === 'number')\n ) {\n throw new Error('userList must be an array of numbers')\n }\n\n const result: Record<number, number> = {}\n\n return new Promise((resolve, reject) => {\n this._jsonRpcAdapter\n ?.executeOutgoingRpcCommand(RpcMethod.GetUsersLastSeen, {\n userList: userList\n })\n .then((response: any) => {\n const unresolved = []\n\n for (let i = 0; i < userList.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(response, userList[i]!)) {\n unresolved.push(userList[i])\n }\n }\n\n if (unresolved.length === 0) {\n return resolve(result)\n }\n\n const params = {\n userIds: unresolved,\n sendToQueueSever: true\n }\n\n this._restClient\n .actions.v2.call.make({\n method: 'pull.api.user.getLastSeen',\n params\n })\n .then((response: AjaxResult) => {\n const data = (\n response.getData() as SuccessPayload<Record<NumberString, NumberString>>\n ).result\n for (const userId in data) {\n result[Number(userId)] = Number(data[userId])\n }\n\n return resolve(result)\n })\n .catch((error) => {\n this.getLogger().error('getUsersLastSeen', { error })\n reject(error)\n })\n })\n .catch((error) => {\n this.getLogger().error('getUsersLastSeen', { error })\n reject(error)\n })\n })\n }\n\n /**\n * Pings server.\n * In case of success promise will be resolved, otherwise - rejected.\n *\n * @param {number} timeout Request timeout in seconds\n * @returns {Promise}\n */\n public async ping(timeout: number = 5): Promise<void> {\n return this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n RpcMethod.Ping,\n {},\n timeout\n )\n }\n\n /**\n * @param userId {number}\n * @param callback {UserStatusCallback}\n * @returns {Promise}\n */\n public async subscribeUserStatusChange(\n userId: number,\n callback: UserStatusCallback\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n this._jsonRpcAdapter\n ?.executeOutgoingRpcCommand(RpcMethod.SubscribeStatusChange, {\n userId\n })\n .then(() => {\n if (!this._userStatusCallbacks[userId]) {\n this._userStatusCallbacks[userId] = []\n }\n\n if (Type.isFunction(callback)) {\n this._userStatusCallbacks[userId].push(callback)\n }\n\n return resolve()\n })\n .catch(error => reject(error))\n })\n }\n\n /**\n * @param {number} userId\n * @param {UserStatusCallback} callback\n * @returns {Promise}\n */\n public async unsubscribeUserStatusChange(\n userId: number,\n callback: UserStatusCallback\n ): Promise<void> {\n if (this._userStatusCallbacks[userId]) {\n this._userStatusCallbacks[userId] = this._userStatusCallbacks[\n userId\n ].filter(cb => cb !== callback)\n\n if (this._userStatusCallbacks[userId].length === 0) {\n return this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n RpcMethod.UnsubscribeStatusChange,\n {\n userId\n }\n )\n }\n }\n\n return Promise.resolve()\n }\n\n // endregion ////\n\n // region Get ////\n public getRevision(): number | null {\n return this._config && this._config.api\n ? this._config.api.revision_web\n : null\n }\n\n public getServerVersion(): number {\n return this._config && this._config.server ? this._config.server.version : 0\n }\n\n public getServerMode(): string | null {\n return this._config && this._config.server ? this._config.server.mode : null\n }\n\n public getConfig(): null | TypePullClientConfig {\n return this._config\n }\n\n public getDebugInfo(): any {\n if (!JSON || !JSON.stringify) {\n return {}\n }\n\n let configDump\n if (this._config && this._config.channels) {\n configDump = {\n ChannelID: this._config.channels.private?.id || 'n/a',\n ChannelDie: this._config.channels.private?.end || 'n/a',\n ChannelDieShared: this._config.channels.shared?.end || 'n/a'\n }\n } else {\n configDump = {\n ConfigError: 'config is not loaded'\n }\n }\n\n let websocketMode = '-'\n if (\n this._connectors.webSocket\n && (this._connectors.webSocket as WebSocketConnector)?.socket\n ) {\n if (this.isJsonRpc()) {\n websocketMode = 'json-rpc'\n } else {\n websocketMode\n\n = (\n this._connectors.webSocket as WebSocketConnector\n )?.socket?.url.search('binaryMode=true') != -1\n ? 'protobuf'\n : 'text'\n }\n }\n\n return {\n 'UserId': this._userId + (this._userId > 0 ? '' : '(guest)'),\n 'Guest userId':\n this._guestMode && this._guestUserId !== 0 ? this._guestUserId : '-',\n 'Browser online': navigator.onLine ? 'Y' : 'N',\n 'Connect': this.isConnected() ? 'Y' : 'N',\n 'Server type': this.isSharedMode() ? 'cloud' : 'local',\n 'WebSocket supported': this.isWebSocketSupported() ? 'Y' : 'N',\n 'WebSocket connected':\n this._connectors.webSocket && this._connectors.webSocket.connected\n ? 'Y'\n : 'N',\n 'WebSocket mode': websocketMode,\n\n 'Try connect': this._reconnectTimeout ? 'Y' : 'N',\n 'Try number': this._connectionAttempt,\n\n 'Path': this.connector?.connectionPath || '-',\n ...configDump,\n\n 'Last message': this._session.mid || '-',\n 'Session history': this._session.history,\n 'Watch tags': this._watchTagsQueue.entries()\n }\n }\n\n /**\n * @process\n * @param connectionType\n */\n public getConnectionPath(connectionType: ConnectionType): string {\n let path\n const params: any = {}\n\n switch (connectionType) {\n case ConnectionType.WebSocket:\n path = this._isSecure\n ? this._config?.server.websocket_secure\n : this._config?.server.websocket\n break\n case ConnectionType.LongPolling:\n path = this._isSecure\n ? this._config?.server.long_pooling_secure\n : this._config?.server.long_polling\n break\n default:\n throw new Error(`Unknown connection type ${connectionType}`)\n }\n\n if (!Type.isStringFilled(path)) {\n throw new Error(`Empty path`)\n }\n\n if (typeof this._config?.jwt === 'string' && this._config?.jwt !== '') {\n params['token'] = this._config?.jwt\n } else {\n const channels: string[] = []\n\n if (this._config?.channels?.private) {\n channels.push(this._config.channels.private?.id || '')\n }\n\n if (this._config?.channels.private?.id) {\n channels.push(this._config.channels.private.id)\n }\n\n if (this._config?.channels.shared?.id) {\n channels.push(this._config.channels.shared.id)\n }\n\n if (channels.length === 0) {\n throw new Error(`Empty channels`)\n }\n\n params['CHANNEL_ID'] = channels.join('/')\n }\n\n if (this.isJsonRpc()) {\n params.jsonRpc = 'true'\n } else if (this.isProtobufSupported()) {\n params.binaryMode = 'true'\n }\n\n if (this.isSharedMode()) {\n if (!this._config?.clientId) {\n throw new Error(\n 'Push-server is in shared mode, but clientId is not set'\n )\n }\n\n params.clientId = this._config.clientId\n }\n if (this._session.mid) {\n params.mid = this._session.mid\n }\n if (this._session.tag) {\n params.tag = this._session.tag\n }\n if (this._session.time) {\n params.time = this._session.time\n }\n params.revision = REVISION\n\n return `${path}?${Text.buildQueryString(params)}`\n }\n\n /**\n * @process\n */\n public getPublicationPath(): string {\n const path = this._isSecure\n ? this._config?.server.publish_secure\n : this._config?.server.publish\n\n if (!path) {\n return ''\n }\n\n const channels: string[] = []\n\n if (this._config?.channels.private?.id) {\n channels.push(this._config.channels.private.id)\n }\n\n if (this._config?.channels.shared?.id) {\n channels.push(this._config.channels.shared.id)\n }\n\n const params = {\n CHANNEL_ID: channels.join('/')\n }\n\n return path + '?' + Text.buildQueryString(params)\n }\n\n // endregion ////\n\n // region Is* ////\n public isConnected(): boolean {\n return this.connector ? this.connector.connected : false\n }\n\n public isWebSocketSupported(): boolean {\n return typeof window.WebSocket !== 'undefined'\n }\n\n public isWebSocketAllowed(): boolean {\n if (this._sharedConfig.isWebSocketBlocked()) {\n return false\n }\n\n return this.isWebSocketEnabled()\n }\n\n public isWebSocketEnabled(): boolean {\n if (!this.isWebSocketSupported()) {\n return false\n }\n\n if (!this._config) {\n return false\n }\n\n if (!this._config.server) {\n return false\n }\n\n return this._config.server.websocket_enabled\n }\n\n public isPublishingSupported(): boolean {\n return this.getServerVersion() > 3\n }\n\n public isPublishingEnabled(): boolean {\n if (!this.isPublishingSupported()) {\n return false\n }\n\n return this._config?.server.publish_enabled === true\n }\n\n public isProtobufSupported(): boolean {\n return this.getServerVersion() == 4 && !Browser.isIE()\n }\n\n public isJsonRpc(): boolean {\n return this.getServerVersion() >= 5\n }\n\n public isSharedMode(): boolean {\n return this.getServerMode() === ServerMode.Shared\n }\n\n // endregion ////\n\n // region Events ////\n /**\n * @param {TypePullClientEmitConfig} params\n * @returns {boolean}\n */\n private emit(params: TypePullClientEmitConfig): boolean {\n if (\n params.type == SubscriptionType.Server\n || params.type == SubscriptionType.Client\n ) {\n if (typeof this._subscribers[params.type] === 'undefined') {\n this._subscribers[params.type] = {}\n }\n\n if (typeof params.moduleId === 'undefined') {\n throw new TypeError(\n `${Text.getDateForLog()}: Pull.emit: parameter moduleId is not specified`\n )\n }\n\n if (\n typeof this._subscribers[params.type][params.moduleId] === 'undefined'\n ) {\n this._subscribers[params.type][params.moduleId] = {\n callbacks: [],\n commands: {}\n }\n }\n\n if (\n this._subscribers[params.type][params.moduleId]['callbacks'].length > 0\n ) {\n this._subscribers[params.type][params.moduleId]['callbacks'].forEach(\n (callback: CommandHandlerFunctionV1) => {\n callback(params.data as Record<string, any>, {\n type: params.type,\n moduleId: params.moduleId ?? '?'\n })\n }\n )\n }\n\n if (\n !(typeof params.data === 'undefined')\n && !(typeof params.data['command'] === 'undefined')\n && this._subscribers[params.type][params.moduleId]['commands'][\n params.data['command']\n ]\n && this._subscribers[params.type][params.moduleId]['commands'][\n params.data['command']\n ].length > 0\n ) {\n this._subscribers[params.type][params.moduleId]['commands'][\n params.data['command']\n\n ].forEach((callback: CommandHandlerFunctionV2) => {\n if (typeof params.data === 'undefined') {\n return\n }\n\n callback(\n params.data['params'],\n params.data['extra'],\n params.data['command'],\n {\n type: params.type,\n moduleId: params.moduleId as string\n }\n )\n })\n }\n\n return true\n } else {\n if (typeof this._subscribers[params.type] === 'undefined') {\n this._subscribers[params.type] = []\n }\n\n if (this._subscribers[params.type].length <= 0) {\n return true\n }\n\n this._subscribers[params.type].forEach(\n (callback: CommandHandlerFunctionV1) => {\n callback(params.data as Record<string, any>, {\n type: params.type\n })\n }\n )\n\n return true\n }\n }\n\n /**\n * @process\n *\n * @param message\n */\n private broadcastMessage(message: TypePullClientMessageBody): void {\n const moduleId = (message.module_id = message.module_id.toLowerCase())\n const command = message.command\n\n if (!message.extra) {\n message.extra = {}\n }\n\n if (message.extra.server_time_unix) {\n message.extra.server_time_ago\n = (Date.now() - message.extra.server_time_unix * 1000) / 1000\n - (this._config?.server.timeShift || 0)\n message.extra.server_time_ago = Math.max(message.extra.server_time_ago, 0)\n }\n\n this.logMessage(message)\n try {\n if (\n message.extra.sender\n && message.extra.sender.type === SenderType.Client\n ) {\n this.onCustomEvent(\n 'onPullClientEvent-' + moduleId,\n [command, message.params, message.extra],\n true\n )\n this.onCustomEvent(\n 'onPullClientEvent',\n [moduleId, command, message.params, message.extra],\n true\n )\n\n this.emit({\n type: SubscriptionType.Client,\n moduleId: moduleId,\n data: {\n command: command,\n params: Type.clone(message.params),\n extra: Type.clone(message.extra)\n }\n })\n } else if (moduleId === 'pull') {\n this.handleInternalPullEvent(command, message)\n } else if (moduleId == 'online') {\n if ((message?.extra?.server_time_ago || 0) < 240) {\n this.onCustomEvent(\n 'onPullOnlineEvent',\n [command, message.params, message.extra],\n true\n )\n\n this.emit({\n type: SubscriptionType.Online,\n data: {\n command: command,\n params: Type.clone(message.params),\n extra: Type.clone(message.extra)\n }\n })\n }\n\n if (command === 'userStatusChange') {\n this.emitUserStatusChange(\n message.params.user_id,\n message.params.online\n )\n }\n } else {\n this.onCustomEvent(\n 'onPullEvent-' + moduleId,\n [command, message.params, message.extra],\n true\n )\n this.onCustomEvent(\n 'onPullEvent',\n [moduleId, command, message.params, message.extra],\n true\n )\n\n this.emit({\n type: SubscriptionType.Server,\n moduleId: moduleId,\n data: {\n command: command,\n params: Type.clone(message.params),\n extra: Type.clone(message.extra)\n }\n })\n }\n } catch (error) {\n this.getLogger().warning('PULL ERROR', {\n errorType: 'broadcastMessages execute error',\n errorEvent: error,\n message\n })\n }\n\n if (message.extra && message.extra.revision_web) {\n this.checkRevision(Text.toInteger(message.extra.revision_web))\n }\n }\n\n /**\n * @process\n *\n * @param messages\n */\n private broadcastMessages(messages: TypePullClientMessageBody[]): void {\n for (const message of messages) {\n this.broadcastMessage(message)\n }\n }\n\n // endregion ////\n\n // region sendMessage ////\n /**\n * Sends batch of messages to the multiple public channels.\n *\n * @param messageBatchList Array of messages to send.\n * @return void\n */\n private async sendMessageBatch(\n messageBatchList: TypePullClientMessageBatch[]\n ): Promise<any> {\n if (!this.isPublishingEnabled()) {\n this.getLogger().error(`Client publishing is not supported or is disabled`)\n return Promise.reject(\n new Error(`Client publishing is not supported or is disabled`)\n )\n }\n\n if (this.isJsonRpc()) {\n const rpcRequest\n = this._jsonRpcAdapter?.createPublishRequest(messageBatchList)\n this.connector?.send(JSON.stringify(rpcRequest))\n\n return Promise.resolve(true)\n } else {\n const userIds: Record<number, number> = {}\n\n for (const messageBatch of messageBatchList) {\n if (typeof messageBatch.userList !== 'undefined') {\n for (const user of messageBatch.userList) {\n const userId = Number(user)\n userIds[userId] = userId\n }\n }\n }\n\n this._channelManager\n ?.getPublicIds(Object.values(userIds))\n .then((publicIds) => {\n const response = this.connector?.send(\n this.encodeMessageBatch(messageBatchList, publicIds)\n )\n\n return Promise.resolve(response)\n })\n }\n }\n\n /**\n * @param messageBatchList\n * @param publicIds\n */\n private encodeMessageBatch(\n messageBatchList: TypePullClientMessageBatch[],\n publicIds: Record<number, TypeChanel>\n ): ArrayBuffer | string {\n const messages: any[] = []\n\n messageBatchList.forEach((messageFields) => {\n const messageBody = messageFields.body\n\n let receivers: any[] = []\n if (messageFields.userList) {\n receivers = this.createMessageReceivers(\n messageFields.userList,\n publicIds\n )\n }\n\n if (messageFields.channelList) {\n if (!Type.isArray(messageFields.channelList)) {\n throw new TypeError('messageFields.publicChannels must be an array')\n }\n\n messageFields.channelList.forEach((publicChannel) => {\n let publicId\n let signature\n if (\n typeof publicChannel === 'string'\n && publicChannel.includes('.')\n ) {\n const fields = publicChannel.toString().split('.')\n publicId = fields[0]\n signature = fields[1]\n } else if (\n typeof publicChannel === 'object'\n && 'publicId' in publicChannel\n && 'signature' in publicChannel\n ) {\n publicId = publicChannel?.publicId\n signature = publicChannel?.signature\n } else {\n throw new Error(\n 'Public channel MUST be either a string, formatted like \"{publicId}.{signature}\" or an object with fields \\'publicId\\' and \\'signature\\''\n )\n }\n\n receivers.push(\n Receiver.create({\n id: this.encodeId(publicId!),\n signature: this.encodeId(signature!)\n })\n )\n })\n }\n\n const message = IncomingMessage.create({\n receivers: receivers,\n body: JSON.stringify(messageBody),\n expiry: messageFields.expiry || 0\n })\n messages.push(message)\n })\n\n const requestBatch = RequestBatch.create({\n requests: [\n {\n incomingMessages: {\n messages: messages\n }\n }\n ]\n })\n\n return RequestBatch.encode(requestBatch).finish()\n }\n\n /**\n * @memo fix return type\n * @param users\n * @param publicIds\n */\n private createMessageReceivers(\n users: number[],\n publicIds: Record<number, TypeChanel>\n ): any[] {\n const result = []\n\n for (const userId of users) {\n if (!publicIds[userId] || !publicIds[userId].publicId) {\n throw new Error(`Could not determine public id for user ${userId}`)\n }\n\n result.push(\n Receiver.create({\n id: this.encodeId(publicIds[userId].publicId),\n signature: this.encodeId(publicIds[userId].signature)\n })\n )\n }\n\n return result\n }\n\n // endregion ////\n\n // region _userStatusCallbacks ////\n /**\n * @param userId\n * @param isOnline\n */\n private emitUserStatusChange(userId: number, isOnline: boolean): void {\n if (this._userStatusCallbacks[userId]) {\n for (const callback of this._userStatusCallbacks[userId]) {\n callback({\n userId,\n isOnline\n })\n }\n }\n }\n\n private restoreUserStatusSubscription(): void {\n for (const userId in this._userStatusCallbacks) {\n if (\n Object.prototype.hasOwnProperty.call(this._userStatusCallbacks, userId)\n && this._userStatusCallbacks[userId]!.length > 0\n ) {\n this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n RpcMethod.SubscribeStatusChange,\n {\n userId: userId\n }\n )\n }\n }\n }\n\n // endregion ////\n\n // region Config ////\n private async loadConfig(_logTag?: string): Promise<TypePullClientConfig> {\n if (!this._config) {\n this._config = Object.assign({}, EmptyConfig)\n\n let config: any\n if (this._storage) {\n config = this._storage.get(LsKeys.PullConfig, null)\n }\n\n if (\n this.isConfigActual(config)\n && this.checkRevision(config.api.revision_web)\n ) {\n return Promise.resolve(config)\n } else if (this._storage) {\n this._storage.remove(LsKeys.PullConfig)\n }\n } else if (\n this.isConfigActual(this._config)\n && this.checkRevision(this._config.api.revision_web)\n ) {\n return Promise.resolve(this._config)\n } else {\n this._config = Object.assign({}, EmptyConfig)\n }\n\n return new Promise((resolve, reject) => {\n this._restClient\n .actions.v2.call.make({\n method: this._configGetMethod,\n params: { CACHE: 'N' }\n })\n .then((response) => {\n const data = response.getData()!.result\n\n const timeShift = Math.floor(\n (Date.now() - new Date(data.serverTime).getTime()) / 1000\n )\n\n delete data.serverTime\n\n const config = Object.assign({}, data)\n config.server.timeShift = timeShift\n\n resolve(config)\n })\n .catch((error: unknown) => { reject(error) })\n })\n }\n\n /**\n * @param config\n */\n private isConfigActual(config: any): boolean {\n if (!Type.isPlainObject(config)) {\n return false\n }\n\n if (Number(config['server'].config_timestamp) !== this._configTimestamp) {\n return false\n }\n\n const now = new Date()\n\n if (\n Type.isNumber(config['exp'])\n && config['exp'] > 0\n && config['exp'] < now.getTime() / 1000\n ) {\n return false\n }\n\n const channelCount = Object.keys(config['channels']).length\n if (channelCount === 0) {\n return false\n }\n\n for (const channelType in config['channels']) {\n if (!Object.prototype.hasOwnProperty.call(config['channels'], channelType)) {\n continue\n }\n\n const channel = config['channels'][channelType]\n const channelEnd = new Date(channel.end)\n\n if (channelEnd < now) {\n return false\n }\n }\n\n return true\n }\n\n private startCheckConfig(): void {\n if (this._checkInterval) {\n clearInterval(this._checkInterval)\n this._checkInterval = null\n }\n\n this._checkInterval = setInterval(\n this.checkConfig.bind(this),\n CONFIG_CHECK_INTERVAL\n )\n }\n\n private stopCheckConfig(): void {\n if (this._checkInterval) {\n clearInterval(this._checkInterval)\n }\n this._checkInterval = null\n }\n\n private checkConfig(): boolean {\n if (this.isConfigActual(this._config)) {\n if (!this.checkRevision(Text.toInteger(this._config?.api.revision_web))) {\n return false\n }\n } else {\n this.logToConsole('Stale config detected. Restarting')\n this.restart(CloseReasons.CONFIG_EXPIRED, 'config expired')\n }\n\n return true\n }\n\n /**\n * @param config\n * @param allowCaching\n */\n private setConfig(config: TypePullClientConfig, allowCaching: boolean): void {\n for (const key in config) {\n if (\n Object.prototype.hasOwnProperty.call(config, key)\n && Object.prototype.hasOwnProperty.call(this._config, key)\n ) {\n // @ts-expect-error this normal work - see ory code\n this._config[key] = config[key]\n }\n }\n\n if (config.publicChannels) {\n this.setPublicIds(Object.values(config.publicChannels))\n }\n\n this._configTimestamp = Number(config.server.config_timestamp)\n\n if (this._storage && allowCaching) {\n try {\n this._storage.set(LsKeys.PullConfig, config)\n } catch (error) {\n /**\n * @memotry to delete the key \"history\"\n * (landing site change history, see http://jabber.bx/view.php?id=136492)\n */\n if (localStorage && localStorage.removeItem) {\n localStorage.removeItem('history')\n }\n this.getLogger().error(\n `${Text.getDateForLog()}: Pull: Could not cache config in local storage.`,\n { error }\n )\n }\n }\n }\n\n private setPublicIds(publicIds: TypePublicIdDescriptor[]): void {\n this._channelManager.setPublicIds(publicIds)\n }\n\n /**\n * @param serverRevision\n */\n private checkRevision(serverRevision: number): boolean {\n if (this._skipCheckRevision) {\n return true\n }\n\n if (serverRevision > 0 && serverRevision !== REVISION) {\n this._enabled = false\n this.showNotification('PULL_OLD_REVISION')\n this.disconnect(CloseReasons.NORMAL_CLOSURE, 'check_revision')\n\n this.onCustomEvent('onPullRevisionUp', [serverRevision, REVISION])\n\n this.emit({\n type: SubscriptionType.Revision,\n data: {\n server: serverRevision,\n client: REVISION\n }\n })\n\n this.logToConsole(\n `Pull revision changed from ${REVISION} to ${serverRevision}. Reload required`\n )\n\n return false\n }\n\n return true\n }\n\n // endregion ////\n\n // region Connect|ReConnect|DisConnect ////\n private disconnect(disconnectCode: number, disconnectReason: string): void {\n if (this.connector) {\n this._isManualDisconnect = true\n this.connector.disconnect(disconnectCode, disconnectReason)\n }\n }\n\n private restoreWebSocketConnection(): void {\n if (this._connectionType === ConnectionType.WebSocket) {\n return\n }\n\n this._connectors.webSocket?.connect()\n }\n\n /**\n * @param connectionDelay\n */\n private scheduleReconnect(connectionDelay: number = 0): void {\n if (!this._enabled) {\n return\n }\n\n if (!connectionDelay) {\n /**\n * never fallback to long polling\n * @memo remove long polling support later\n */\n /* /\n if(\n this._connectionAttempt > 3\n && this._connectionType === ConnectionType.WebSocket\n && !this._sharedConfig.isLongPollingBlocked()\n )\n {\n // Websocket seems to be closed by network filter. Trying to fall back to long polling ////\n this._sharedConfig.setWebSocketBlocked(true)\n this._connectionType = ConnectionType.LongPolling\n this._connectionAttempt = 1\n connectionDelay = 1\n }\n else\n // */\n {\n connectionDelay = this.getConnectionAttemptDelay(\n this._connectionAttempt\n )\n }\n }\n if (this._reconnectTimeout) {\n clearTimeout(this._reconnectTimeout)\n this._reconnectTimeout = null\n }\n\n this.logToConsole(\n `Pull: scheduling reconnection in ${connectionDelay} seconds; attempt # ${this._connectionAttempt}`\n )\n\n this._reconnectTimeout = setTimeout(() => {\n this.connect().catch((error) => {\n this.getLogger().error('scheduleReconnect', { error })\n })\n }, connectionDelay * 1_000)\n }\n\n private scheduleRestoreWebSocketConnection(): void {\n this.logToConsole(\n `Pull: scheduling restoration of websocket connection in ${RESTORE_WEBSOCKET_TIMEOUT} seconds`\n )\n\n if (this._restoreWebSocketTimeout) {\n return\n }\n\n this._restoreWebSocketTimeout = setTimeout(() => {\n this._restoreWebSocketTimeout = null\n this.restoreWebSocketConnection()\n }, RESTORE_WEBSOCKET_TIMEOUT * 1_000)\n }\n\n /**\n * @returns {Promise}\n */\n private async connect(): Promise<void> {\n if (!this._enabled) {\n return Promise.reject()\n }\n if (this.connector?.connected) {\n return Promise.resolve()\n }\n\n if (this._reconnectTimeout) {\n clearTimeout(this._reconnectTimeout)\n this._reconnectTimeout = null\n }\n\n this.status = PullStatus.Connecting\n this._connectionAttempt++\n return new Promise((resolve, reject) => {\n this._connectPromise = {\n resolve,\n reject\n }\n this.connector?.connect()\n })\n }\n\n /**\n * @param disconnectCode\n * @param disconnectReason\n * @param restartDelay\n */\n private scheduleRestart(\n disconnectCode: number,\n disconnectReason: string,\n restartDelay: number = 0\n ): void {\n if (this._restartTimeout) {\n clearTimeout(this._restartTimeout)\n this._restartTimeout = null\n }\n\n if (restartDelay < 1) {\n restartDelay = Math.ceil(Math.random() * 30) + 5\n }\n\n this._restartTimeout = setTimeout(\n () => this.restart(disconnectCode, disconnectReason),\n restartDelay * 1_000\n )\n }\n\n // endregion ////\n\n // region Handlers ////\n /**\n * @param messageFields\n */\n private handleRpcIncomingMessage(messageFields: any): object {\n this._session.mid = messageFields.mid\n const body = messageFields.body\n\n if (!messageFields.body.extra) {\n body.extra = {}\n }\n body.extra.sender = messageFields.sender\n\n if (\n 'user_params' in messageFields\n && Type.isPlainObject(messageFields.user_params)\n ) {\n Object.assign(body.params, messageFields.user_params)\n }\n\n if (\n 'dictionary' in messageFields\n && Type.isPlainObject(messageFields.dictionary)\n ) {\n Object.assign(body.params, messageFields.dictionary)\n }\n\n if (this.checkDuplicate(messageFields.mid)) {\n this.addMessageToStat(body)\n this.trimDuplicates()\n this.broadcastMessage(body)\n }\n\n this.connector?.send(`mack:${messageFields.mid}`)\n\n return {}\n }\n\n /**\n * @param events\n */\n private handleIncomingEvents(events: TypeSessionEvent[]): void {\n const messages: TypePullClientMessageBody[] = []\n if (events.length === 0) {\n this._session.mid = null\n return\n }\n\n for (const event of events) {\n this.updateSessionFromEvent(event)\n\n if (event.mid && !this.checkDuplicate(event.mid)) {\n continue\n }\n\n this.addMessageToStat(\n event.text as { module_id: string, command: string }\n )\n messages.push(event.text as TypePullClientMessageBody)\n }\n this.trimDuplicates()\n this.broadcastMessages(messages)\n }\n\n /**\n * @param event\n */\n private updateSessionFromEvent(event: TypeSessionEvent): void {\n this._session.mid = event.mid || null\n this._session.tag = event.tag || null\n this._session.time = event.time || null\n }\n\n /**\n * @process\n *\n * @param command\n * @param message\n */\n private handleInternalPullEvent(\n command: string,\n message: TypePullClientMessageBody\n ): void {\n switch (command.toUpperCase()) {\n case SystemCommands.CHANNEL_EXPIRE: {\n if (message.params.action === 'reconnect') {\n const typeChanel = message.params?.channel.type as string\n if (typeChanel === 'private' && this._config?.channels?.private) {\n this._config.channels.private = message.params.new_channel\n this.logToConsole(\n `Pull: new config for ${message.params.channel.type} channel set: ${this._config.channels.private}`\n )\n }\n if (typeChanel === 'shared' && this._config?.channels?.shared) {\n this._config.channels.shared = message.params.new_channel\n this.logToConsole(\n `Pull: new config for ${message.params.channel.type} channel set: ${this._config.channels.shared}`\n )\n }\n\n this.reconnect(CloseReasons.CONFIG_REPLACED, 'config was replaced')\n } else {\n this.restart(CloseReasons.CHANNEL_EXPIRED, 'channel expired received')\n }\n break\n }\n case SystemCommands.CONFIG_EXPIRE: {\n this.restart(CloseReasons.CONFIG_EXPIRED, 'config expired received')\n break\n }\n case SystemCommands.SERVER_RESTART: {\n this.reconnect(\n CloseReasons.SERVER_RESTARTED,\n 'server was restarted',\n 15\n )\n break\n }\n default:\n }\n }\n\n // region Handlers For Message ////\n /**\n * @param response\n */\n private onIncomingMessage(response: string | ArrayBuffer): void {\n if (this.isJsonRpc()) {\n if (response === JSON_RPC_PING) {\n this.onJsonRpcPing()\n } else {\n this._jsonRpcAdapter?.parseJsonRpcMessage(response as string)\n }\n } else {\n const events = this.extractMessages(response)\n this.handleIncomingEvents(events)\n }\n }\n\n // region onLongPolling ////\n private onLongPollingOpen(): void {\n this._unloading = false\n this._starting = false\n this._connectionAttempt = 0\n this._isManualDisconnect = false\n this.status = PullStatus.Online\n\n this.logToConsole('Pull: Long polling connection with push-server opened')\n if (this.isWebSocketEnabled()) {\n this.scheduleRestoreWebSocketConnection()\n }\n if (this._connectPromise) {\n this._connectPromise.resolve({})\n }\n }\n\n /**\n * @param response\n */\n private onLongPollingDisconnect(response: {\n code: number\n reason: string\n }): void {\n if (this._connectionType === ConnectionType.LongPolling) {\n this.status = PullStatus.Offline\n }\n\n this.logToConsole(\n `Pull: Long polling connection with push-server closed. Code: ${response.code}, reason: ${response.reason}`\n )\n if (!this._isManualDisconnect) {\n this.scheduleReconnect()\n }\n this._isManualDisconnect = false\n this.clearPingWaitTimeout()\n }\n\n /**\n * @param error\n */\n private onLongPollingError(error: Error): void {\n this._starting = false\n if (this._connectionType === ConnectionType.LongPolling) {\n this.status = PullStatus.Offline\n }\n\n this.getLogger().error(\n `${Text.getDateForLog()}: Pull: Long polling connection error`,\n { error }\n )\n\n this.scheduleReconnect()\n if (this._connectPromise) {\n this._connectPromise.reject(error)\n }\n\n this.clearPingWaitTimeout()\n }\n\n // endregion ////\n\n // region onWebSocket ////\n /**\n * @param response\n */\n private onWebSocketBlockChanged(response: {\n isWebSocketBlocked: boolean\n }): void {\n const isWebSocketBlocked = response.isWebSocketBlocked\n\n if (\n isWebSocketBlocked\n && this._connectionType === ConnectionType.WebSocket\n && !this.isConnected()\n ) {\n if (this._reconnectTimeout) {\n clearTimeout(this._reconnectTimeout)\n this._reconnectTimeout = null\n }\n\n this._connectionAttempt = 0\n this._connectionType = ConnectionType.LongPolling\n this.scheduleReconnect(1)\n } else if (\n !isWebSocketBlocked\n && this._connectionType === ConnectionType.LongPolling\n ) {\n if (this._reconnectTimeout) {\n clearTimeout(this._reconnectTimeout)\n this._reconnectTimeout = null\n }\n if (this._restoreWebSocketTimeout) {\n clearTimeout(this._restoreWebSocketTimeout)\n this._restoreWebSocketTimeout = null\n }\n\n this._connectionAttempt = 0\n this._connectionType = ConnectionType.WebSocket\n this.scheduleReconnect(1)\n }\n }\n\n private onWebSocketOpen(): void {\n this._unloading = false\n this._starting = false\n this._connectionAttempt = 0\n this._isManualDisconnect = false\n this.status = PullStatus.Online\n this._sharedConfig.setWebSocketBlocked(false)\n\n // to prevent fallback to long polling in case of networking problems\n this._sharedConfig.setLongPollingBlocked(true)\n\n if (this._connectionType == ConnectionType.LongPolling) {\n this._connectionType = ConnectionType.WebSocket\n this._connectors.longPolling?.disconnect(\n CloseReasons.CONFIG_REPLACED,\n 'Fire at onWebSocketOpen'\n )\n }\n\n if (this._restoreWebSocketTimeout) {\n clearTimeout(this._restoreWebSocketTimeout)\n this._restoreWebSocketTimeout = null\n }\n this.logToConsole('Pull: Websocket connection with push-server opened')\n if (this._connectPromise) {\n this._connectPromise.resolve({})\n }\n\n this.restoreUserStatusSubscription()\n }\n\n /**\n * @param response\n */\n private onWebSocketDisconnect(response: {\n code: number\n reason: string\n }): void {\n if (this._connectionType === ConnectionType.WebSocket) {\n this.status = PullStatus.Offline\n }\n\n this.logToConsole(\n `Pull: Websocket connection with push-server closed. Code: ${response.code}, reason: ${response.reason}`,\n true\n )\n if (!this._isManualDisconnect) {\n if (response.code == CloseReasons.WRONG_CHANNEL_ID) {\n this.scheduleRestart(\n CloseReasons.WRONG_CHANNEL_ID,\n 'wrong channel signature'\n )\n } else {\n this.scheduleReconnect()\n }\n }\n\n // to prevent fallback to long polling in case of networking problems\n this._sharedConfig.setLongPollingBlocked(true)\n this._isManualDisconnect = false\n\n this.clearPingWaitTimeout()\n }\n\n /**\n * @param error\n */\n private onWebSocketError(error: Error): void {\n this._starting = false\n if (this._connectionType === ConnectionType.WebSocket) {\n this.status = PullStatus.Offline\n }\n\n this.getLogger().error(\n `${Text.getDateForLog()}: Pull: WebSocket connection error`,\n { error }\n )\n this.scheduleReconnect()\n if (this._connectPromise) {\n this._connectPromise.reject(error)\n }\n\n this.clearPingWaitTimeout()\n }\n\n // endregion ////\n // endregion ////\n\n // endregion ////\n\n // region extractMessages ////\n /**\n * @param pullEvent\n */\n private extractMessages(pullEvent: string | ArrayBuffer): TypeSessionEvent[] {\n if (pullEvent instanceof ArrayBuffer) {\n return this.extractProtobufMessages(pullEvent)\n } else if (Type.isStringFilled(pullEvent)) {\n return this.extractPlainTextMessages(pullEvent)\n }\n\n throw new Error('Error pullEvent type')\n }\n\n /**\n * @param pullEvent\n */\n private extractProtobufMessages(pullEvent: ArrayBuffer): TypeSessionEvent[] {\n const result = []\n\n try {\n const responseBatch = ResponseBatch.decode(new Uint8Array(pullEvent))\n for (let i = 0; i < responseBatch.responses.length; i++) {\n const response = responseBatch.responses[i]\n if (response.command !== 'outgoingMessages') {\n continue\n }\n\n const messages = response.outgoingMessages.messages\n for (const message of messages) {\n let messageFields\n try {\n messageFields = JSON.parse(message.body)\n } catch (error) {\n this.getLogger().error(\n `${Text.getDateForLog()}: Pull: Could not parse message body`,\n { error }\n )\n continue\n }\n\n if (!messageFields.extra) {\n messageFields.extra = {}\n }\n messageFields.extra.sender = {\n type: message.sender.type\n }\n\n if (message.sender.id instanceof Uint8Array) {\n messageFields.extra.sender.id = this.decodeId(message.sender.id)\n }\n\n const compatibleMessage = {\n mid: this.decodeId(message.id),\n text: messageFields\n }\n\n result.push(compatibleMessage)\n }\n }\n } catch (error) {\n this.getLogger().error(\n `${Text.getDateForLog()}: Pull: Could not parse message`,\n { error }\n )\n }\n\n return result\n }\n\n /**\n * @param pullEvent\n */\n private extractPlainTextMessages(pullEvent: string): TypeSessionEvent[] {\n const result = []\n\n const dataArray = pullEvent.match(/#!NGINXNMS!#(.*?)#!NGINXNME!#/g)\n if (dataArray === null) {\n this.getLogger().warning('PULL ERROR', {\n errorType: 'parseResponse error parsing message',\n dataString: pullEvent\n })\n\n return []\n }\n for (let i = 0; i < dataArray.length; i++) {\n dataArray[i] = dataArray[i]!.substring(12, dataArray[i]!.length - 12)\n if (dataArray[i]!.length <= 0) {\n continue\n }\n\n let data\n try {\n data = JSON.parse(dataArray[i]!)\n } catch {\n continue\n }\n\n result.push(data as TypeSessionEvent)\n }\n\n return result\n }\n\n /**\n * Converts message id from byte[] to string\n * @param {Uint8Array} encodedId\n * @return {string}\n */\n private decodeId(encodedId: Uint8Array): string {\n let result = ''\n for (const element_ of encodedId) {\n const hexByte = element_.toString(16)\n if (hexByte.length === 1) {\n result += '0'\n }\n result += hexByte\n }\n\n return result\n }\n\n /**\n * Converts message id from hex-encoded string to byte[]\n * @param {string} id Hex-encoded string.\n * @return {Uint8Array}\n */\n private encodeId(id: string): Uint8Array {\n if (!id) {\n return new Uint8Array()\n }\n\n const result = []\n for (let i = 0; i < id.length; i += 2) {\n result.push(Number.parseInt(id.slice(i, i + 2), 16))\n }\n\n return new Uint8Array(result)\n }\n\n // endregion ////\n\n // region Events.Status /////\n private onOffline(): void {\n this.disconnect(CloseReasons.NORMAL_CLOSURE, 'offline')\n }\n\n private onOnline(): void {\n this.connect().catch((error) => {\n this.getLogger().error('onOnline', { error })\n })\n }\n\n private onBeforeUnload(): void {\n this._unloading = true\n\n const session = Type.clone(this.session)\n session.ttl = Date.now() + LS_SESSION_CACHE_TIME * 1000\n if (this._storage) {\n try {\n this._storage.set(\n LS_SESSION,\n JSON.stringify(session)\n // LS_SESSION_CACHE_TIME\n )\n } catch (error) {\n this.getLogger().error(\n `${Text.getDateForLog()}: Pull: Could not save session info in local storage. Error: `,\n { error }\n )\n }\n }\n\n this.scheduleReconnect(15)\n }\n\n // endregion ////\n\n // region PullStatus ////\n /**\n * @param status\n * @param delay\n */\n private sendPullStatusDelayed(status: PullStatus, delay: number): void {\n if (this._offlineTimeout) {\n clearTimeout(this._offlineTimeout)\n this._offlineTimeout = null\n }\n\n this._offlineTimeout = setTimeout(() => {\n this._offlineTimeout = null\n this.sendPullStatus(status)\n }, delay)\n }\n\n /**\n * @param status\n */\n private sendPullStatus(status: PullStatus): void {\n if (this._unloading) {\n return\n }\n\n this.onCustomEvent('onPullStatus', [status])\n\n this.emit({\n type: SubscriptionType.Status,\n data: {\n status: status\n }\n })\n }\n\n // endregion ////\n\n // region _watchTagsQueue ////\n /**\n * @memo if private?\n * @param tagId\n * @param force\n */\n // @ts-expect-error When we rewrite it to something more modern, then we'll remove this\n private extendWatch(tagId: string, force: boolean = false): void {\n if (this._watchTagsQueue.get(tagId)) {\n return\n }\n\n this._watchTagsQueue.set(tagId, true)\n if (force) {\n this.updateWatch(force)\n }\n }\n\n /**\n * @param force\n */\n private updateWatch(force: boolean = false): void {\n if (this._watchUpdateTimeout) {\n clearTimeout(this._watchUpdateTimeout)\n this._watchUpdateTimeout = null\n }\n\n this._watchUpdateTimeout = setTimeout(\n () => {\n /**\n * @memo test this\n */\n const watchTags = [...this._watchTagsQueue.keys()]\n\n if (watchTags.length > 0) {\n this._restClient\n .actions.v2.call.make({\n method: 'pull.watch.extend',\n params: { tags: watchTags }\n })\n .then((response: AjaxResult) => {\n /**\n * @memo test this\n */\n const updatedTags: NumberString[] = (response.getData() as SuccessPayload<NumberString[]>).result\n\n for (const tagId of updatedTags) {\n this.clearWatch(tagId)\n }\n\n this.updateWatch()\n })\n .catch(() => {\n this.updateWatch()\n })\n } else {\n this.updateWatch()\n }\n },\n force ? this._watchForceUpdateInterval : this._watchUpdateInterval\n )\n }\n\n /**\n * @param tagId\n */\n private clearWatch(tagId: string): void {\n this._watchTagsQueue.delete(tagId)\n }\n\n // endregion ////\n\n // region Ping ////\n private onJsonRpcPing(): void {\n this.updatePingWaitTimeout()\n this.connector?.send(JSON_RPC_PONG)\n }\n\n private updatePingWaitTimeout(): void {\n if (this._pingWaitTimeout) {\n clearTimeout(this._pingWaitTimeout)\n this._pingWaitTimeout = null\n }\n\n this._pingWaitTimeout = setTimeout(\n this._onPingTimeoutHandler,\n PING_TIMEOUT * 2 * 1_000\n )\n }\n\n private clearPingWaitTimeout(): void {\n if (this._pingWaitTimeout) {\n clearTimeout(this._pingWaitTimeout)\n }\n\n this._pingWaitTimeout = null\n }\n\n private onPingTimeout(): void {\n this._pingWaitTimeout = null\n if (!this._enabled || !this.isConnected()) {\n return\n }\n\n this.getLogger().warning(`No pings are received in ${PING_TIMEOUT * 2} seconds. Reconnecting`)\n this.disconnect(CloseReasons.STUCK, 'connection stuck')\n\n this.scheduleReconnect()\n }\n\n // endregion ////\n\n // region Time ////\n /**\n * Returns reconnect delay in seconds\n *\n * @param attemptNumber\n * @return {number}\n */\n private getConnectionAttemptDelay(attemptNumber: number): number {\n let result\n if (attemptNumber < 1) {\n result = 0.5\n } else if (attemptNumber < 3) {\n result = 15\n } else if (attemptNumber < 5) {\n result = 45\n } else if (attemptNumber < 10) {\n result = 600\n } else {\n result = 3_600\n }\n\n return result + result * Math.random() * 0.2\n }\n\n // endregion ////\n\n // region Tools ////\n /**\n * @param mid\n */\n private checkDuplicate(mid: string): boolean {\n if (this._session.lastMessageIds.includes(mid)) {\n this.getLogger().warning(`Duplicate message ${mid} skipped`)\n return false\n } else {\n this._session.lastMessageIds.push(mid)\n return true\n }\n }\n\n private trimDuplicates(): void {\n if (this._session.lastMessageIds.length > MAX_IDS_TO_STORE) {\n this._session.lastMessageIds\n = this._session.lastMessageIds.slice(-MAX_IDS_TO_STORE)\n }\n }\n\n // endregion ////\n\n // region Logging ////\n /**\n * @param message\n */\n private logMessage(message: TypePullClientMessageBody): void {\n if (!this._debug) {\n return\n }\n\n if (\n message.extra?.sender\n && message.extra.sender.type === SenderType.Client\n ) {\n this.getLogger().info(\n `onPullClientEvent-${message.module_id}`, {\n command: message.command,\n params: message.params,\n extra: message.extra\n }\n )\n } else if (message.module_id == 'online') {\n this.getLogger().info(\n `onPullOnlineEvent`, {\n command: message.command,\n params: message.params,\n extra: message.extra\n }\n )\n } else {\n this.getLogger().info(\n `onPullEvent`,\n {\n moduleId: message.module_id,\n command: message.command,\n params: message.params,\n extra: message.extra\n }\n )\n }\n }\n\n /**\n * @param message\n * @param force\n */\n private logToConsole(message: string, force: boolean = false): void {\n if (this._loggingEnabled || force) {\n this.getLogger().debug(`${Text.getDateForLog()}: ${message}`)\n }\n }\n\n /**\n * @param message\n */\n private addMessageToStat(message: {\n module_id: string\n command: string\n }): void {\n if (!this._session.history[message.module_id]) {\n this._session.history[message.module_id] = {}\n }\n if (!this._session.history[message.module_id][message.command]) {\n this.session.history[message.module_id][message.command] = 0\n }\n\n this._session.history[message.module_id][message.command]++\n\n this._session.messageCount++\n }\n\n /**\n * @param text\n */\n private showNotification(text: string): void {\n this.getLogger().notice(text)\n\n /* /\n if(this._notificationPopup || typeof BX.PopupWindow === 'undefined')\n {\n return;\n }\n\n this._notificationPopup = new BX.PopupWindow('bx-notifier-popup-confirm', null, {\n zIndex: 200,\n autoHide: false,\n closeByEsc: false,\n overlay: true,\n content: BX.create(\"div\", {\n props: {className: \"bx-messenger-confirm\"},\n html: text\n }),\n buttons: [\n new BX.PopupWindowButton({\n text: BX.message('JS_CORE_WINDOW_CLOSE'),\n className: \"popup-window-button-decline\",\n events: {\n click: () => this._notificationPopup.close(),\n }\n })\n ],\n events: {\n onPopupClose: () => this._notificationPopup.destroy(),\n onPopupDestroy: () => this._notificationPopup = null,\n }\n });\n this._notificationPopup.show();\n // */\n }\n\n // endregion ////\n\n // region onCustomEvent ////\n /**\n * @memo may be need to use onCustomEvent\n * @memo ? force\n */\n private onCustomEvent(\n eventName: string,\n data: any,\n force: boolean = false\n ): void {\n if (eventName || data || force) {\n /* empty */\n }\n\n /* /\n if (BX && BX.onCustomEvent)\n {\n BX.onCustomEvent(window, eventName, data, force)\n }\n // */\n }\n // endregion ////\n}\n"],"names":["config","response"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsBA,MAAM,QAAA,GAAW,EAAA;AACjB,MAAM,4BAA4B,EAAA,GAAK,EAAA;AACvC,MAAM,oBAAA,GAAuB,GAAA;AAC7B,MAAM,wBAAwB,EAAA,GAAK,GAAA;AACnC,MAAM,gBAAA,GAAmB,EAAA;AACzB,MAAM,YAAA,GAAe,EAAA;AACrB,MAAM,aAAA,GAAgB,MAAA;AACtB,MAAM,aAAA,GAAgB,MAAA;AACtB,MAAM,UAAA,GAAa,iBAAA;AACnB,MAAM,qBAAA,GAAwB,EAAA;AAE9B,MAAM,WAAA,GAAc;AAAA,EAClB,KAAK,EAAC;AAAA,EACN,UAAU,EAAC;AAAA,EACX,gBAAgB,EAAC;AAAA,EACjB,MAAA,EAAQ,EAAE,SAAA,EAAW,CAAA,EAAE;AAAA,EACvB,QAAA,EAAU,IAAA;AAAA,EACV,GAAA,EAAK,IAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AAEO,MAAM,UAAA,CAAsC;AAAA,EA3CnD;AA2CmD,IAAA,MAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AAAA;AAAA;AAAA,EAEzC,OAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACS,UAAA;AAAA,EACA,YAAA;AAAA,EACT,OAAA;AAAA,EAEA,gBAAA;AAAA,EACA,oBAAA;AAAA,EAEA,OAAA;AAAA,EACA,QAAA;AAAA,EAEA,UAAA,GAAsB,KAAA;AAAA,EACtB,SAAA,GAAqB,KAAA;AAAA,EACrB,MAAA,GAAkB,KAAA;AAAA,EAClB,kBAAA,GAA6B,CAAA;AAAA,EAC7B,kBAAkC,cAAA,CAAe,SAAA;AAAA,EACjD,gBAAA;AAAA,EACA,kBAAA;AAAA,EAEA,eAAoC,EAAC;AAAA,EACrC,eAAA,uBAA4C,GAAA,EAAI;AAAA,EAChD,oBAAA,GAA+B,KAAA;AAAA,EAC/B,yBAAA,GAAoC,GAAA;AAAA,EACpC,gBAAA,GAA2B,CAAA;AAAA,EAC3B,QAAA,GAAkC;AAAA,IACxC,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,SAAS,EAAC;AAAA,IACV,gBAAgB,EAAC;AAAA,IACjB,YAAA,EAAc;AAAA,GAChB;AAAA,EAEQ,WAAA,GAA4D;AAAA,IAClE,CAAC,cAAA,CAAe,SAAS,GAAG,IAAA;AAAA,IAC5B,CAAC,cAAA,CAAe,SAAS,GAAG,IAAA;AAAA,IAC5B,CAAC,cAAA,CAAe,WAAW,GAAG;AAAA,GAChC;AAAA,EAEQ,SAAA;AAAA,EAEA,OAAA,GAAuC,IAAA;AAAA,EAEvC,QAAA,GAAsC,IAAA;AAAA,EACtC,aAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA,GAAkC,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlC,iBAAA,GAA0D,IAAA;AAAA,EAC1D,eAAA,GAAwD,IAAA;AAAA,EACxD,wBAAA,GAAiE,IAAA;AAAA,EACjE,cAAA,GAAuD,IAAA;AAAA,EACvD,eAAA,GAAwD,IAAA;AAAA,EACxD,mBAAA,GAA4D,IAAA;AAAA,EAC5D,gBAAA,GAAyD,IAAA;AAAA;AAAA,EAGzD,mBAAA,GAA+B,KAAA;AAAA,EAE/B,eAAA,GAA2B,KAAA;AAAA;AAAA,EAG3B,qBAAA;AAAA;AAAA,EAGA,uBAA6D,EAAC;AAAA,EAE9D,eAAA,GAGJ,IAAA;AAAA,EAEI,gBAAA,GAA4C,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpD,YAAY,MAAA,EAA8B;AACxC,IAAA,IAAA,CAAK,OAAA,GAAU,cAAc,gBAAA,EAAiB;AAC9C,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,GAAA;AAC1B,IAAA,IAAA,CAAK,UAAU,UAAA,CAAW,OAAA;AAC1B,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAGhB,IAAA,IAAI,OAAO,eAAA,EAAiB;AAC1B,MAAA,IAAI,OAAO,MAAA,CAAO,eAAA,KAAoB,WAAA,EAAa;AACjD,QAAA,MAAA,CAAO,eAAA,GAAkB,6BAAA;AAAA,MAC3B;AAEA,MAAA,IAAI,OAAO,MAAA,CAAO,iBAAA,KAAsB,WAAA,EAAa;AACnD,QAAA,MAAA,CAAO,iBAAA,GAAoB,IAAA;AAAA,MAC7B;AAEA,MAAA,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,eAAe,CAAA,EAAG;AAC/C,QAAA,MAAA,CAAO,SAAS,MAAA,CAAO,eAAA;AAAA,MACzB;AAEA,MAAA,MAAA,CAAO,aAAA,GAAgB,IAAA;AAAA,IACzB;AAIA,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA,GACrB,KAAK,SAAA,CAAU,MAAA,CAAO,SAAS,CAAA,GAC/B,KAAA;AAEJ,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,WAAA,GACvB,KAAK,SAAA,CAAU,MAAA,CAAO,WAAW,CAAA,GACjC,CAAA;AAEJ,IAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,YAAA,GAAe,CAAA,EAAG;AAC5C,MAAA,IAAA,CAAK,UAAU,IAAA,CAAK,YAAA;AAAA,IACtB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAClB,MAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA,GAAS,KAAK,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA,GAAI,CAAA;AAAA,IACjE;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,MAAA,IAAU,MAAA;AAEhC,IAAA,IAAA,CAAK,QAAA,GAAW,CAAC,IAAA,CAAK,WAAA,CAAY,OAAO,aAAa,CAAA,GAClD,MAAA,CAAO,aAAA,KAAkB,IAAA,GACzB,IAAA;AAEJ,IAAA,IAAA,CAAK,gBAAA,GAAmB,CAAC,IAAA,CAAK,cAAA,CAAe,OAAO,eAAe,CAAA,GAC/D,iBAAA,GACA,MAAA,CAAO,eAAA,IAAmB,EAAA;AAE9B,IAAA,IAAA,CAAK,oBAAA,GAAuB,CAAC,IAAA,CAAK,cAAA,CAAe,OAAO,mBAAmB,CAAA,GACvE,0BAAA,GACA,MAAA,CAAO,mBAAA,IAAuB,EAAA;AAElC,IAAA,IAAA,CAAK,gBAAA,GAAmB,OAAO,eAAA,KAAoB,IAAA;AACnD,IAAA,IAAA,CAAK,kBAAA,GAAqB,OAAO,iBAAA,KAAsB,IAAA;AAEvD,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,eAAe,CAAA,EAAG;AAC7C,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,eAAe,CAAA;AAAA,IAC/D;AAGA,IAAA,IAAA,CAAK,YAAY,QAAA,EAAU,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA,KAAM,CAAA;AAE9D,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,CAAC,IAAA,CAAK,gBAAA,EAAkB;AAC1C,MAAA,IAAA,CAAK,QAAA,GAAW,IAAI,cAAA,CAAe;AAAA,QACjC,QAAQ,IAAA,CAAK,OAAA;AAAA,QACb,QAAQ,IAAA,CAAK;AAAA,OACU,CAAA;AAAA,IAC3B;AAEA,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,YAAA,CAAa;AAAA,MACpC,uBAAA,EAAyB,IAAA,CAAK,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAA;AAAA,MAC/D,SAAS,IAAA,CAAK;AAAA,KACO,CAAA;AAEvB,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAI,cAAA,CAAe;AAAA,MACxC,KAAK,IAAA,CAAK,WAAA;AAAA,MACV,qBAAqB,IAAA,CAAK;AAAA,KACC,CAAA;AAE7B,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA,CAAK,aAAA,CAAc,gBAAA,EAAiB;AAG3D,IAAA,IAAA,CAAK,qBAAA,GAAwB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AAAA,EAC3D;AAAA,EAEA,UAAU,MAAA,EAA+B;AACvC,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAA,CAAK,eAAA,EAAiB,SAAA,CAAU,IAAA,CAAK,SAAA,EAAW,CAAA;AAChD,IAAA,IAAA,CAAK,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,SAAA,EAAW,CAAA;AACzC,IAAA,IAAA,CAAK,aAAA,CAAc,SAAA,CAAU,IAAA,CAAK,SAAA,EAAW,CAAA;AAC7C,IAAA,IAAA,CAAK,eAAA,CAAgB,SAAA,CAAU,IAAA,CAAK,SAAA,EAAW,CAAA;AAE/C,IAAA,IAAA,CAAK,WAAA,CAAY,SAAA,EAAW,SAAA,CAAU,IAAA,CAAK,WAAW,CAAA;AACtD,IAAA,IAAA,CAAK,WAAA,CAAY,WAAA,EAAa,SAAA,CAAU,IAAA,CAAK,WAAW,CAAA;AAAA,EAC1D;AAAA,EAEA,SAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,aAAa,CAAA;AAEpD,IAAA,IAAA,CAAK,cAAA,EAAe;AAAA,EACtB;AAAA,EAEQ,IAAA,GAAa;AACnB,IAAA,IAAA,CAAK,WAAA,CAAY,SAAA,GAAY,IAAI,kBAAA,CAAmB;AAAA,MAClD,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AAAA,MACtC,SAAA,EAAW,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AAAA,MAC3C,YAAA,EAAc,IAAA,CAAK,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAA;AAAA,MAClD,OAAA,EAAS,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,IAAI;AAAA,KACzC,CAAA;AAED,IAAA,IAAA,CAAK,WAAA,CAAY,WAAA,GAAc,IAAI,oBAAA,CAAqB;AAAA,MACtD,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AAAA,MACxC,SAAA,EAAW,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AAAA,MAC3C,YAAA,EAAc,IAAA,CAAK,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAA;AAAA,MACpD,OAAA,EAAS,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,IAAI;AAAA,KAC3C,CAAA;AAED,IAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,kBAAA,EAAmB,GAC3C,cAAA,CAAe,YACf,cAAA,CAAe,WAAA;AAEnB,IAAA,MAAA,CAAO,iBAAiB,cAAA,EAAgB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA;AACtE,IAAA,MAAA,CAAO,iBAAiB,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA;AAC5D,IAAA,MAAA,CAAO,iBAAiB,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AAuB1D,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAI,OAAA,CAAQ;AAAA,MACjC,SAAA,EAAW,KAAK,WAAA,CAAY,SAAA;AAAA,MAC5B,QAAA,EAAU;AAAA,QACR,kBAAA,EAAoB,IAAA,CAAK,wBAAA,CAAyB,IAAA,CAAK,IAAI;AAAA;AAC7D,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,IAAI,SAAA,GAAkC;AACpC,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,eAAe,CAAA;AAAA,EAC9C;AAAA,EAEA,IAAI,MAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAO,MAAA,EAAoB;AAC7B,IAAA,IAAI,IAAA,CAAK,YAAY,MAAA,EAAQ;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,YAAA,CAAa,KAAK,eAAe,CAAA;AACjC,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACzB;AAEA,IAAA,IAAI,MAAA,KAAW,WAAW,OAAA,EAAS;AACjC,MAAA,IAAA,CAAK,qBAAA,CAAsB,QAAQ,oBAAoB,CAAA;AAAA,IACzD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,eAAe,MAAM,CAAA;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,IAAI,OAAA,GAAiC;AACnC,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWO,UACL,MAAA,EACY;AACZ,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,EAAG;AAC/B,MAAA,OAAO,IAAA,CAAK,qBAAqB,MAAwC,CAAA;AAAA,IAC3E;AAEA,IAAA,MAAA,GAAS,MAAA;AAET,IAAA,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,IAAA,IAAQ,gBAAA,CAAiB,MAAA;AAC9C,IAAA,MAAA,CAAO,OAAA,GAAU,OAAO,OAAA,IAAW,IAAA;AAEnC,IAAA,IACE,OAAO,IAAA,IAAQ,gBAAA,CAAiB,UAC7B,MAAA,CAAO,IAAA,IAAQ,iBAAiB,MAAA,EACnC;AACA,MAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,WAAA,EAAa;AAC1C,QAAA,MAAM,IAAI,SAAA;AAAA,UACR,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,qDAAA;AAAA,SACzB;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,MAAM,WAAA,EAAa;AACzD,QAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,GAAI,EAAC;AAAA,MACpC;AAEA,MAAA,IACE,OAAO,KAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,KAAM,WAAA,EAC3D;AACA,QAAA,IAAA,CAAK,aAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,GAAI;AAAA,UAChD,WAAW,EAAC;AAAA,UACZ,UAAU;AAAC,SACb;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,IACE,OAAO,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,UAAU,CAAA,CAC/D,MAAA,CAAO,OACT,MAAM,WAAA,EACN;AACA,UAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,UAAU,CAAA,CACxD,MAAA,CAAO,OACT,CAAA,GAAI,EAAC;AAAA,QACP;AAEA,QAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,OAAO,QAAQ,CAAA,CAAE,UAAU,CAAA,CACxD,MAAA,CAAO,OACT,CAAA,CAAE,IAAA,CAAK,OAAO,QAAQ,CAAA;AAEtB,QAAA,OAAO,MAAM;AACX,UAAA,IACE,OAAO,MAAA,CAAO,IAAA,KAAS,WAAA,IACpB,OAAO,MAAA,CAAO,QAAA,KAAa,WAAA,IAC3B,OAAO,MAAA,CAAO,OAAA,KAAY,WAAA,IAC1B,IAAA,KAAS,OAAO,OAAA,EACnB;AACA,YAAA;AAAA,UACF;AAEA,UAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,UAAU,CAAA,CACxD,MAAA,CAAO,OACT,CAAA,GAAI,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,UAAU,CAAA,CAC5D,MAAA,CAAO,OACT,CAAA,CAAE,MAAA,CAAO,CAAC,OAAA,KAAiB;AACzB,YAAA,OAAO,YAAY,MAAA,CAAO,QAAA;AAAA,UAC5B,CAAC,CAAA;AAAA,QACH,CAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,YAAA,CAAa,OAAO,IAAI,CAAA,CAAE,OAAO,QAAQ,CAAA,CAAE,WAAW,CAAA,CAAE,IAAA;AAAA,UAC3D,MAAA,CAAO;AAAA,SACT;AAEA,QAAA,OAAO,MAAM;AACX,UAAA,IACE,OAAO,MAAA,CAAO,IAAA,KAAS,eACpB,OAAO,MAAA,CAAO,aAAa,WAAA,EAC9B;AACA,YAAA;AAAA,UACF;AAEA,UAAA,IAAA,CAAK,aAAa,MAAA,CAAO,IAAI,EAAE,MAAA,CAAO,QAAQ,EAAE,WAAW,CAAA,GACvD,IAAA,CAAK,YAAA,CAAa,OAAO,IAAI,CAAA,CAAE,OAAO,QAAQ,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA;AAAA,YAC7D,CAAC,OAAA,KAAiB;AAChB,cAAA,OAAO,YAAY,MAAA,CAAO,QAAA;AAAA,YAC5B;AAAA,WACF;AAAA,QACJ,CAAA;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,OAAO,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,MAAM,WAAA,EAAa;AACzD,QAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,GAAI,EAAC;AAAA,MACpC;AAEA,MAAA,IAAA,CAAK,aAAa,MAAA,CAAO,IAAI,CAAA,CAAE,IAAA,CAAK,OAAO,QAAQ,CAAA;AAEnD,MAAA,OAAO,MAAM;AACX,QAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,WAAA,EAAa;AACtC,UAAA;AAAA,QACF;AAEA,QAAA,IAAA,CAAK,YAAA,CAAa,OAAO,IAAI,CAAA,GAAI,KAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA;AAAA,UAC9D,CAAC,OAAA,KAAiB;AAChB,YAAA,OAAO,YAAY,MAAA,CAAO,QAAA;AAAA,UAC5B;AAAA,SACF;AAAA,MACF,CAAA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,qBACN,OAAA,EACY;AACZ,IAAA,IACE,OAAO,QAAQ,WAAA,KAAgB,UAAA,IAC5B,OAAO,OAAA,CAAQ,WAAA,OAAkB,QAAA,EACpC;AACA,MAAA,IAAA,CAAK,WAAU,CAAE,KAAA,CAAM,GAAG,IAAA,CAAK,aAAA,EAAe,CAAA,6EAAA,CAA+E,CAAA;AAC7H,MAAA,OAAO,MAAM;AAAA,MAAC,CAAA;AAAA,IAChB;AAEA,IAAA,IAAI,OAAO,gBAAA,CAAiB,MAAA;AAC5B,IAAA,IAAI,OAAO,OAAA,CAAQ,mBAAA,KAAwB,UAAA,EAAY;AACrD,MAAA,IAAA,GAAO,QAAQ,mBAAA,EAAoB;AAAA,IACrC;AAEA,IAAA,OAAO,KAAK,SAAA,CAAU;AAAA,MACpB,IAAA;AAAA,MACA,QAAA,EAAU,QAAQ,WAAA,EAAY;AAAA,MAC9B,QAAA,0BAAW,IAAA,KAA0B;AACnC,QAAA,IAAI,MAAA,GAAS,IAAA;AAEb,QAAA,IAAI,OAAO,OAAA,CAAQ,MAAA,KAAW,UAAA,EAAY;AACxC,UAAA,MAAM,OAAA,GAAU,QAAQ,MAAA,EAAO;AAC/B,UAAA,IAAI,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC1C,YAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA;AACvC,YAAA,IAAI,OAAO,eAAe,UAAA,EAAY;AACpC,cAAA,MAAA,GAAS,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,YAClC,CAAA,MAAA,IACE,OAAO,UAAA,KAAe,QAAA,IACnB,OAAO,OAAA,CAAQ,UAAU,MAAM,UAAA,EAClC;AACA,cAAA,MAAA,GAAS,OAAA,CAAQ,UAAU,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA;AAAA,YAC3C;AAAA,UACF;AAAA,QACF;AAKA,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,MAAM,aAAa,CAAA,MAAA,EAAS,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AACzD,UAAA,IAAI,OAAO,OAAA,CAAQ,UAAU,CAAA,KAAM,UAAA,EAAY;AAC7C,YAAA,MAAA,GAAS,OAAA,CAAQ,UAAU,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA;AAAA,UAC3C;AAAA,QACF;AAEA,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,QAAA,KAAa,QAAA,EAAU;AAC7C,YAAA,IAAA,CAAK,WAAU,CAAE,OAAA;AAAA,cACf,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,4EAAA,CAAA;AAAA,cACvB,EAAE,IAAA;AAAK,aACT;AAAA,UACF;AAEA,UAAA,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,KAAA,EAAO,KAAK,OAAO,CAAA;AAAA,QAC9C;AAAA,MACF,CAAA,EAtCU,UAAA;AAAA,KAuCX,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,KAAA,CACX,MAAA,GAIO,IAAA,EACW;AAClB,IAAA,IAAI,kBAAA,GAAqB,IAAA;AAEzB,IAAA,IAAI,IAAA,CAAK,aAAY,EAAG;AACtB,MAAA,OAAO,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAAA,IAC7B;AAEA,IAAA,IAAI,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,gBAAA,EAAkB;AAC3C,MAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,IACd;AAEA,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,MAAM,IAAI,MAAM,gBAAgB,CAAA;AAAA,IAClC;AAEA,IAAA,IAAI,IAAA,CAAK,YAAY,MAAA,EAAQ;AAC3B,MAAA,MAAM,IAAI,MAAM,gBAAgB,CAAA;AAAA,IAClC;AAEA,IAAA,IAAI,0BAAA,GAA6B,KAAA;AACjC,IAAA,IAAI,CAAC,CAAC,MAAA,IAAU,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,EAAG;AAC1C,MAAA,IAAI,OAAO,MAAA,EAAQ,0BAAA,KAA+B,WAAA,EAAa;AAC7D,QAAA,0BAAA,GAA6B,MAAA,CAAO,0BAAA;AACpC,QAAA,OAAO,MAAA,CAAO,0BAAA;AAAA,MAChB;AAEA,MAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,MAAA,kBAAA,GAAqB,KAAA;AAAA,IACvB;AAEA,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,MAAA,OAAO,QAAQ,MAAA,CAAO;AAAA,QACpB,EAAA,EAAI;AAAA,UACF,KAAA,EAAO,eAAA;AAAA,UACP,iBAAA,EAAmB;AAAA;AACrB,OACD,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,CAAC,0BAAA,IAA8B,IAAA,CAAK,QAAA,EAAU;AAChD,MAAA,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,UAAA,EAAY,IAAI,CAAA;AAAA,IACjD;AAEA,IAAA,IACE,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA,IAC1B,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,UAAA,EAAY,KAAK,CAAA,IACtD,UAAA,CAAW,KAAK,KAAK,GAAA,EACxB;AACA,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,GAAM,UAAA,CAAW,KAAK,CAAA;AAAA,IACtC;AAEA,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,IAAA,OAAQ,KAAK,gBAAA,GAAmB,IAAI,OAAA,CAAQ,CAAC,SAAS,MAAA,KAAW;AAC/D,MAAA,IAAA,CAAK,UAAA,CAAW,cAAc,CAAA,CAC3B,IAAA,CAAK,CAACA,OAAAA,KAAW;AAChB,QAAA,IAAA,CAAK,SAAA,CAAUA,SAAgC,kBAAkB,CAAA;AACjE,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AACrB,QAAA,IAAA,CAAK,gBAAA,EAAiB;AAEtB,QAAA,IAAA,CAAK,SAAQ,CAAE,IAAA;AAAA,UACb,MAAM,QAAQ,IAAI,CAAA;AAAA,UAClB,CAAA,KAAA,KAAS,OAAO,KAAK;AAAA,SACvB;AAAA,MACF,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,QAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,QAAA,IAAA,CAAK,SAAS,UAAA,CAAW,OAAA;AACzB,QAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,QAAA,IAAA,CAAK,WAAU,CAAE,KAAA;AAAA,UACf,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,yCAAA,CAAA;AAAA,UACvB,EAAE,KAAA;AAAM,SACV;AACA,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,MACd,CAAC,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAA,CACL,cAAA,GAAwC,YAAA,CAAa,cAAA,EACrD,mBAA2B,gBAAA,EACrB;AACN,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,YAAA,CAAa,KAAK,eAAe,CAAA;AACjC,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACzB;AAEA,IAAA,IAAA,CAAK,WAAU,CAAE,KAAA;AAAA,MACf,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,gCAAgC,cAAc,CAAA;AAAA,KACvE;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,gBAAgB,gBAAgB,CAAA;AAEhD,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AAAA,IACxC;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAEf,IAAA,MAAM,gBAAA,GAAmB,GAAG,cAAc,CAAA,CAAA,EAAI,iBAAiB,UAAA,CAAW,GAAA,EAAK,GAAG,CAAC,CAAA,CAAA;AACnF,IAAA,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAA,CAAE,IAAA;AAAA,MAChC,CAAC,MAAA,KAAW;AACV,QAAA,IAAA,CAAK,SAAA,CAAU,QAAQ,IAAI,CAAA;AAC3B,QAAA,IAAA,CAAK,WAAA,EAAY;AACjB,QAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,QAAA,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AAC9B,UAAA,IAAA,CAAK,WAAU,CAAE,KAAA,CAAM,eAAA,EAAiB,EAAE,OAAO,CAAA;AAAA,QACnD,CAAC,CAAA;AAAA,MACH,CAAA;AAAA,MACA,CAAC,KAAA,KAAU;AACT,QAAA,IAAA,CAAK,WAAU,CAAE,KAAA;AAAA,UACf,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,0CAAA,CAAA;AAAA,UACvB,EAAE,KAAA;AAAM,SACV;AAEA,QAAA,IAAA,CAAK,SAAS,UAAA,CAAW,OAAA;AACzB,QAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,UAAA,YAAA,CAAa,KAAK,iBAAiB,CAAA;AACnC,UAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,QAC3B;AAEA,QAAA,IAAI,KAAA,EAAO,MAAA,IAAU,GAAA,IAAO,KAAA,EAAO,UAAU,GAAA,EAAK;AAChD,UAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,UAAA,IAAA,CAAK,aAAA,CAAc,aAAA,EAAe,CAAC,iBAAiB,CAAC,CAAA;AAAA,QACvD;AAAA,MACF;AAAA,KACF;AAAA,EACF;AAAA,EAEO,IAAA,CACL,cAAA,GAAwC,YAAA,CAAa,cAAA,EACrD,mBAA2B,aAAA,EACrB;AACN,IAAA,IAAA,CAAK,UAAA,CAAW,gBAAgB,gBAAgB,CAAA;AAEhD,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAEO,SAAA,CACL,cAAA,EACA,gBAAA,EACA,KAAA,GAAgB,CAAA,EACV;AACN,IAAA,IAAA,CAAK,UAAA,CAAW,gBAAgB,gBAAgB,CAAA;AAEhD,IAAA,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAiB,aAAA,EAA6B;AACnD,IAAA,IAAA,CAAK,SAAS,GAAA,GAAM,aAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,WAAA,CACX,KAAA,EACA,QAAA,EACA,OAAA,EACA,QACA,MAAA,EACc;AACd,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,QAAA,EAAU,KAAA;AAAA,MACV,IAAA,EAAM;AAAA,QACJ,SAAA,EAAW,QAAA;AAAA,QACX,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,IAAA,CAAK,WAAU,EAAG;AACpB,MAAA,OAAO,KAAK,eAAA,EAAiB,yBAAA;AAAA,QAC3B,SAAA,CAAU,OAAA;AAAA,QACV;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,CAAC,OAAO,CAAC,CAAA;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,qBAAA,CACX,cAAA,EACA,QAAA,EACA,OAAA,EACA,QACA,MAAA,EACc;AACd,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,WAAA,EAAa,cAAA;AAAA,MACb,IAAA,EAAM;AAAA,QACJ,SAAA,EAAW,QAAA;AAAA,QACX,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,IAAA,CAAK,WAAU,EAAG;AACpB,MAAA,OAAO,KAAK,eAAA,EAAiB,yBAAA;AAAA,QAC3B,SAAA,CAAU,OAAA;AAAA,QACV;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,CAAC,OAAO,CAAC,CAAA;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,gBAAA,CAAiB,YAAqB,IAAA,EAAY;AACvD,IAAA,IAAA,CAAK,MAAA,GAAS,SAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKO,aAAA,CAAc,cAAuB,IAAA,EAAY;AACtD,IAAA,IAAA,CAAK,aAAA,CAAc,kBAAkB,WAAW,CAAA;AAChD,IAAA,IAAA,CAAK,eAAA,GAAkB,WAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,YAAA,GAA6B;AACxC,IAAA,OACE,KAAK,eAAA,EAAiB,yBAAA;AAAA,MACpB,SAAA,CAAU,YAAA;AAAA,MACV;AAAC,SACE,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAA,CAAM,yBAAyB,CAAC,CAAA;AAAA,EAE5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,iBACX,QAAA,EACiC;AACjC,IAAA,IACE,CAAC,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,IACnB,CAAC,QAAA,CAAS,KAAA,CAAM,CAAA,IAAA,KAAQ,OAAO,IAAA,KAAS,QAAQ,CAAA,EACnD;AACA,MAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,IACxD;AAEA,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,eAAA,EACD,yBAAA,CAA0B,SAAA,CAAU,gBAAA,EAAkB;AAAA,QACtD;AAAA,OACD,CAAA,CACA,IAAA,CAAK,CAAC,QAAA,KAAkB;AACvB,QAAA,MAAM,aAAa,EAAC;AAEpB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,UAAA,IAAI,CAAC,OAAO,SAAA,CAAU,cAAA,CAAe,KAAK,QAAA,EAAU,QAAA,CAAS,CAAC,CAAE,CAAA,EAAG;AACjE,YAAA,UAAA,CAAW,IAAA,CAAK,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,UAC7B;AAAA,QACF;AAEA,QAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,UAAA,OAAO,QAAQ,MAAM,CAAA;AAAA,QACvB;AAEA,QAAA,MAAM,MAAA,GAAS;AAAA,UACb,OAAA,EAAS,UAAA;AAAA,UACT,gBAAA,EAAkB;AAAA,SACpB;AAEA,QAAA,IAAA,CAAK,WAAA,CACF,OAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK;AAAA,UACpB,MAAA,EAAQ,2BAAA;AAAA,UACR;AAAA,SACD,CAAA,CACA,IAAA,CAAK,CAACC,SAAAA,KAAyB;AAC9B,UAAA,MAAM,IAAA,GACJA,SAAAA,CAAS,OAAA,EAAQ,CACjB,MAAA;AACF,UAAA,KAAA,MAAW,UAAU,IAAA,EAAM;AACzB,YAAA,MAAA,CAAO,OAAO,MAAM,CAAC,IAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,UAC9C;AAEA,UAAA,OAAO,QAAQ,MAAM,CAAA;AAAA,QACvB,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,UAAA,IAAA,CAAK,WAAU,CAAE,KAAA,CAAM,kBAAA,EAAoB,EAAE,OAAO,CAAA;AACpD,UAAA,MAAA,CAAO,KAAK,CAAA;AAAA,QACd,CAAC,CAAA;AAAA,MACL,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,QAAA,IAAA,CAAK,WAAU,CAAE,KAAA,CAAM,kBAAA,EAAoB,EAAE,OAAO,CAAA;AACpD,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,MACd,CAAC,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,IAAA,CAAK,OAAA,GAAkB,CAAA,EAAkB;AACpD,IAAA,OAAO,KAAK,eAAA,EAAiB,yBAAA;AAAA,MAC3B,SAAA,CAAU,IAAA;AAAA,MACV,EAAC;AAAA,MACD;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,yBAAA,CACX,MAAA,EACA,QAAA,EACe;AACf,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,eAAA,EACD,yBAAA,CAA0B,SAAA,CAAU,qBAAA,EAAuB;AAAA,QAC3D;AAAA,OACD,CAAA,CACA,IAAA,CAAK,MAAM;AACV,QAAA,IAAI,CAAC,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA,EAAG;AACtC,UAAA,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA,GAAI,EAAC;AAAA,QACvC;AAEA,QAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,UAAA,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA,CAAE,IAAA,CAAK,QAAQ,CAAA;AAAA,QACjD;AAEA,QAAA,OAAO,OAAA,EAAQ;AAAA,MACjB,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,KAAA,KAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACjC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,2BAAA,CACX,MAAA,EACA,QAAA,EACe;AACf,IAAA,IAAI,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA,EAAG;AACrC,MAAA,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA,GAAI,IAAA,CAAK,oBAAA,CACvC,MACF,CAAA,CAAE,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,KAAO,QAAQ,CAAA;AAE9B,MAAA,IAAI,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA,CAAE,WAAW,CAAA,EAAG;AAClD,QAAA,OAAO,KAAK,eAAA,EAAiB,yBAAA;AAAA,UAC3B,SAAA,CAAU,uBAAA;AAAA,UACV;AAAA,YACE;AAAA;AACF,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA;AAAA;AAAA,EAKO,WAAA,GAA6B;AAClC,IAAA,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA,CAAQ,MAChC,IAAA,CAAK,OAAA,CAAQ,IAAI,YAAA,GACjB,IAAA;AAAA,EACN;AAAA,EAEO,gBAAA,GAA2B;AAChC,IAAA,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA,CAAQ,SAAS,IAAA,CAAK,OAAA,CAAQ,OAAO,OAAA,GAAU,CAAA;AAAA,EAC7E;AAAA,EAEO,aAAA,GAA+B;AACpC,IAAA,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA,CAAQ,SAAS,IAAA,CAAK,OAAA,CAAQ,OAAO,IAAA,GAAO,IAAA;AAAA,EAC1E;AAAA,EAEO,SAAA,GAAyC;AAC9C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEO,YAAA,GAAoB;AACzB,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,CAAK,SAAA,EAAW;AAC5B,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU;AACzC,MAAA,UAAA,GAAa;AAAA,QACX,SAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,SAAS,EAAA,IAAM,KAAA;AAAA,QAChD,UAAA,EAAY,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,SAAS,GAAA,IAAO,KAAA;AAAA,QAClD,gBAAA,EAAkB,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,QAAQ,GAAA,IAAO;AAAA,OACzD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,UAAA,GAAa;AAAA,QACX,WAAA,EAAa;AAAA,OACf;AAAA,IACF;AAEA,IAAA,IAAI,aAAA,GAAgB,GAAA;AACpB,IAAA,IACE,KAAK,WAAA,CAAY,SAAA,IACb,IAAA,CAAK,WAAA,CAAY,WAAkC,MAAA,EACvD;AACA,MAAA,IAAI,IAAA,CAAK,WAAU,EAAG;AACpB,QAAA,aAAA,GAAgB,UAAA;AAAA,MAClB,CAAA,MAAO;AACL,QAAA,aAAA,GAGI,IAAA,CAAK,YAAY,SAAA,EAChB,MAAA,EAAQ,IAAI,MAAA,CAAO,iBAAiB,CAAA,IAAK,EAAA,GACxC,UAAA,GACA,MAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,UAAU,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,OAAA,GAAU,IAAI,EAAA,GAAK,SAAA,CAAA;AAAA,MAClD,gBACE,IAAA,CAAK,UAAA,IAAc,KAAK,YAAA,KAAiB,CAAA,GAAI,KAAK,YAAA,GAAe,GAAA;AAAA,MACnE,gBAAA,EAAkB,SAAA,CAAU,MAAA,GAAS,GAAA,GAAM,GAAA;AAAA,MAC3C,SAAA,EAAW,IAAA,CAAK,WAAA,EAAY,GAAI,GAAA,GAAM,GAAA;AAAA,MACtC,aAAA,EAAe,IAAA,CAAK,YAAA,EAAa,GAAI,OAAA,GAAU,OAAA;AAAA,MAC/C,qBAAA,EAAuB,IAAA,CAAK,oBAAA,EAAqB,GAAI,GAAA,GAAM,GAAA;AAAA,MAC3D,qBAAA,EACE,KAAK,WAAA,CAAY,SAAA,IAAa,KAAK,WAAA,CAAY,SAAA,CAAU,YACrD,GAAA,GACA,GAAA;AAAA,MACN,gBAAA,EAAkB,aAAA;AAAA,MAElB,aAAA,EAAe,IAAA,CAAK,iBAAA,GAAoB,GAAA,GAAM,GAAA;AAAA,MAC9C,cAAc,IAAA,CAAK,kBAAA;AAAA,MAEnB,MAAA,EAAQ,IAAA,CAAK,SAAA,EAAW,cAAA,IAAkB,GAAA;AAAA,MAC1C,GAAG,UAAA;AAAA,MAEH,cAAA,EAAgB,IAAA,CAAK,QAAA,CAAS,GAAA,IAAO,GAAA;AAAA,MACrC,iBAAA,EAAmB,KAAK,QAAA,CAAS,OAAA;AAAA,MACjC,YAAA,EAAc,IAAA,CAAK,eAAA,CAAgB,OAAA;AAAQ,KAC7C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,kBAAkB,cAAA,EAAwC;AAC/D,IAAA,IAAI,IAAA;AACJ,IAAA,MAAM,SAAc,EAAC;AAErB,IAAA,QAAQ,cAAA;AAAgB,MACtB,KAAK,cAAA,CAAe,SAAA;AAClB,QAAA,IAAA,GAAO,IAAA,CAAK,YACR,IAAA,CAAK,OAAA,EAAS,OAAO,gBAAA,GACrB,IAAA,CAAK,SAAS,MAAA,CAAO,SAAA;AACzB,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,WAAA;AAClB,QAAA,IAAA,GAAO,IAAA,CAAK,YACR,IAAA,CAAK,OAAA,EAAS,OAAO,mBAAA,GACrB,IAAA,CAAK,SAAS,MAAA,CAAO,YAAA;AACzB,QAAA;AAAA,MACF;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,cAAc,CAAA,CAAE,CAAA;AAAA;AAG/D,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,IAAI,CAAA,EAAG;AAC9B,MAAA,MAAM,IAAI,MAAM,CAAA,UAAA,CAAY,CAAA;AAAA,IAC9B;AAEA,IAAA,IAAI,OAAO,KAAK,OAAA,EAAS,GAAA,KAAQ,YAAY,IAAA,CAAK,OAAA,EAAS,QAAQ,EAAA,EAAI;AACrE,MAAA,MAAA,CAAO,OAAO,CAAA,GAAI,IAAA,CAAK,OAAA,EAAS,GAAA;AAAA,IAClC,CAAA,MAAO;AACL,MAAA,MAAM,WAAqB,EAAC;AAE5B,MAAA,IAAI,IAAA,CAAK,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS;AACnC,QAAA,QAAA,CAAS,KAAK,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,OAAA,EAAS,MAAM,EAAE,CAAA;AAAA,MACvD;AAEA,MAAA,IAAI,IAAA,CAAK,OAAA,EAAS,QAAA,CAAS,OAAA,EAAS,EAAA,EAAI;AACtC,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,QAAQ,EAAE,CAAA;AAAA,MAChD;AAEA,MAAA,IAAI,IAAA,CAAK,OAAA,EAAS,QAAA,CAAS,MAAA,EAAQ,EAAA,EAAI;AACrC,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,OAAO,EAAE,CAAA;AAAA,MAC/C;AAEA,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,QAAA,MAAM,IAAI,MAAM,CAAA,cAAA,CAAgB,CAAA;AAAA,MAClC;AAEA,MAAA,MAAA,CAAO,YAAY,CAAA,GAAI,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAI,IAAA,CAAK,WAAU,EAAG;AACpB,MAAA,MAAA,CAAO,OAAA,GAAU,MAAA;AAAA,IACnB,CAAA,MAAA,IAAW,IAAA,CAAK,mBAAA,EAAoB,EAAG;AACrC,MAAA,MAAA,CAAO,UAAA,GAAa,MAAA;AAAA,IACtB;AAEA,IAAA,IAAI,IAAA,CAAK,cAAa,EAAG;AACvB,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,QAAA,EAAU;AAC3B,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,QAAA,GAAW,KAAK,OAAA,CAAQ,QAAA;AAAA,IACjC;AACA,IAAA,IAAI,IAAA,CAAK,SAAS,GAAA,EAAK;AACrB,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,QAAA,CAAS,GAAA;AAAA,IAC7B;AACA,IAAA,IAAI,IAAA,CAAK,SAAS,GAAA,EAAK;AACrB,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,QAAA,CAAS,GAAA;AAAA,IAC7B;AACA,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACtB,MAAA,MAAA,CAAO,IAAA,GAAO,KAAK,QAAA,CAAS,IAAA;AAAA,IAC9B;AACA,IAAA,MAAA,CAAO,QAAA,GAAW,QAAA;AAElB,IAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAC,CAAA,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKO,kBAAA,GAA6B;AAClC,IAAA,MAAM,IAAA,GAAO,KAAK,SAAA,GACd,IAAA,CAAK,SAAS,MAAA,CAAO,cAAA,GACrB,IAAA,CAAK,OAAA,EAAS,MAAA,CAAO,OAAA;AAEzB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAqB,EAAC;AAE5B,IAAA,IAAI,IAAA,CAAK,OAAA,EAAS,QAAA,CAAS,OAAA,EAAS,EAAA,EAAI;AACtC,MAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,QAAQ,EAAE,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,IAAA,CAAK,OAAA,EAAS,QAAA,CAAS,MAAA,EAAQ,EAAA,EAAI;AACrC,MAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,OAAO,EAAE,CAAA;AAAA,IAC/C;AAEA,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,UAAA,EAAY,QAAA,CAAS,IAAA,CAAK,GAAG;AAAA,KAC/B;AAEA,IAAA,OAAO,IAAA,GAAO,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA,EAKO,WAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,SAAA,GAAY,KAAA;AAAA,EACrD;AAAA,EAEO,oBAAA,GAAgC;AACrC,IAAA,OAAO,OAAO,OAAO,SAAA,KAAc,WAAA;AAAA,EACrC;AAAA,EAEO,kBAAA,GAA8B;AACnC,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,kBAAA,EAAmB,EAAG;AAC3C,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAK,kBAAA,EAAmB;AAAA,EACjC;AAAA,EAEO,kBAAA,GAA8B;AACnC,IAAA,IAAI,CAAC,IAAA,CAAK,oBAAA,EAAqB,EAAG;AAChC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ;AACxB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,QAAQ,MAAA,CAAO,iBAAA;AAAA,EAC7B;AAAA,EAEO,qBAAA,GAAiC;AACtC,IAAA,OAAO,IAAA,CAAK,kBAAiB,GAAI,CAAA;AAAA,EACnC;AAAA,EAEO,mBAAA,GAA+B;AACpC,IAAA,IAAI,CAAC,IAAA,CAAK,qBAAA,EAAsB,EAAG;AACjC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,OAAA,EAAS,MAAA,CAAO,eAAA,KAAoB,IAAA;AAAA,EAClD;AAAA,EAEO,mBAAA,GAA+B;AACpC,IAAA,OAAO,KAAK,gBAAA,EAAiB,IAAK,CAAA,IAAK,CAAC,QAAQ,IAAA,EAAK;AAAA,EACvD;AAAA,EAEO,SAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,kBAAiB,IAAK,CAAA;AAAA,EACpC;AAAA,EAEO,YAAA,GAAwB;AAC7B,IAAA,OAAO,IAAA,CAAK,aAAA,EAAc,KAAM,UAAA,CAAW,MAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,KAAK,MAAA,EAA2C;AACtD,IAAA,IACE,OAAO,IAAA,IAAQ,gBAAA,CAAiB,UAC7B,MAAA,CAAO,IAAA,IAAQ,iBAAiB,MAAA,EACnC;AACA,MAAA,IAAI,OAAO,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,MAAM,WAAA,EAAa;AACzD,QAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,GAAI,EAAC;AAAA,MACpC;AAEA,MAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,WAAA,EAAa;AAC1C,QAAA,MAAM,IAAI,SAAA;AAAA,UACR,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,gDAAA;AAAA,SACzB;AAAA,MACF;AAEA,MAAA,IACE,OAAO,KAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,KAAM,WAAA,EAC3D;AACA,QAAA,IAAA,CAAK,aAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,GAAI;AAAA,UAChD,WAAW,EAAC;AAAA,UACZ,UAAU;AAAC,SACb;AAAA,MACF;AAEA,MAAA,IACE,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA,GAAS,CAAA,EACtE;AACA,QAAA,IAAA,CAAK,YAAA,CAAa,OAAO,IAAI,CAAA,CAAE,OAAO,QAAQ,CAAA,CAAE,WAAW,CAAA,CAAE,OAAA;AAAA,UAC3D,CAAC,QAAA,KAAuC;AACtC,YAAA,QAAA,CAAS,OAAO,IAAA,EAA6B;AAAA,cAC3C,MAAM,MAAA,CAAO,IAAA;AAAA,cACb,QAAA,EAAU,OAAO,QAAA,IAAY;AAAA,aAC9B,CAAA;AAAA,UACH;AAAA,SACF;AAAA,MACF;AAEA,MAAA,IACE,EAAE,OAAO,MAAA,CAAO,SAAS,WAAA,CAAA,IACtB,EAAE,OAAO,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,KAAM,WAAA,CAAA,IACpC,KAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,UAAU,EAC3D,MAAA,CAAO,IAAA,CAAK,SAAS,CACvB,CAAA,IACG,KAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,UAAU,EAC3D,MAAA,CAAO,IAAA,CAAK,SAAS,CACvB,CAAA,CAAE,SAAS,CAAA,EACX;AACA,QAAA,IAAA,CAAK,aAAa,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,UAAU,CAAA,CACxD,MAAA,CAAO,KAAK,SAAS,CAEvB,CAAA,CAAE,OAAA,CAAQ,CAAC,QAAA,KAAuC;AAChD,UAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,WAAA,EAAa;AACtC,YAAA;AAAA,UACF;AAEA,UAAA,QAAA;AAAA,YACE,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,YACpB,MAAA,CAAO,KAAK,OAAO,CAAA;AAAA,YACnB,MAAA,CAAO,KAAK,SAAS,CAAA;AAAA,YACrB;AAAA,cACE,MAAM,MAAA,CAAO,IAAA;AAAA,cACb,UAAU,MAAA,CAAO;AAAA;AACnB,WACF;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,MAAO;AACL,MAAA,IAAI,OAAO,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,MAAM,WAAA,EAAa;AACzD,QAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,GAAI,EAAC;AAAA,MACpC;AAEA,MAAA,IAAI,KAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,UAAU,CAAA,EAAG;AAC9C,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA,CAAE,OAAA;AAAA,QAC7B,CAAC,QAAA,KAAuC;AACtC,UAAA,QAAA,CAAS,OAAO,IAAA,EAA6B;AAAA,YAC3C,MAAM,MAAA,CAAO;AAAA,WACd,CAAA;AAAA,QACH;AAAA,OACF;AAEA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,iBAAiB,OAAA,EAA0C;AACjE,IAAA,MAAM,QAAA,GAAY,OAAA,CAAQ,SAAA,GAAY,OAAA,CAAQ,UAAU,WAAA,EAAY;AACpE,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AAExB,IAAA,IAAI,CAAC,QAAQ,KAAA,EAAO;AAClB,MAAA,OAAA,CAAQ,QAAQ,EAAC;AAAA,IACnB;AAEA,IAAA,IAAI,OAAA,CAAQ,MAAM,gBAAA,EAAkB;AAClC,MAAA,OAAA,CAAQ,KAAA,CAAM,eAAA,GAAA,CACT,IAAA,CAAK,GAAA,EAAI,GAAI,OAAA,CAAQ,KAAA,CAAM,gBAAA,GAAmB,GAAA,IAAQ,GAAA,IACpD,IAAA,CAAK,OAAA,EAAS,OAAO,SAAA,IAAa,CAAA,CAAA;AACzC,MAAA,OAAA,CAAQ,MAAM,eAAA,GAAkB,IAAA,CAAK,IAAI,OAAA,CAAQ,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAAA,IAC3E;AAEA,IAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AACvB,IAAA,IAAI;AACF,MAAA,IACE,OAAA,CAAQ,MAAM,MAAA,IACX,OAAA,CAAQ,MAAM,MAAA,CAAO,IAAA,KAAS,WAAW,MAAA,EAC5C;AACA,QAAA,IAAA,CAAK,aAAA;AAAA,UACH,oBAAA,GAAuB,QAAA;AAAA,UACvB,CAAC,OAAA,EAAS,OAAA,CAAQ,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAAA,UACvC;AAAA,SACF;AACA,QAAA,IAAA,CAAK,aAAA;AAAA,UACH,mBAAA;AAAA,UACA,CAAC,QAAA,EAAU,OAAA,EAAS,OAAA,CAAQ,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAAA,UACjD;AAAA,SACF;AAEA,QAAA,IAAA,CAAK,IAAA,CAAK;AAAA,UACR,MAAM,gBAAA,CAAiB,MAAA;AAAA,UACvB,QAAA;AAAA,UACA,IAAA,EAAM;AAAA,YACJ,OAAA;AAAA,YACA,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,YACjC,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,KAAK;AAAA;AACjC,SACD,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC9B,QAAA,IAAA,CAAK,uBAAA,CAAwB,SAAS,OAAO,CAAA;AAAA,MAC/C,CAAA,MAAA,IAAW,YAAY,QAAA,EAAU;AAC/B,QAAA,IAAA,CAAK,OAAA,EAAS,KAAA,EAAO,eAAA,IAAmB,CAAA,IAAK,GAAA,EAAK;AAChD,UAAA,IAAA,CAAK,aAAA;AAAA,YACH,mBAAA;AAAA,YACA,CAAC,OAAA,EAAS,OAAA,CAAQ,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAAA,YACvC;AAAA,WACF;AAEA,UAAA,IAAA,CAAK,IAAA,CAAK;AAAA,YACR,MAAM,gBAAA,CAAiB,MAAA;AAAA,YACvB,IAAA,EAAM;AAAA,cACJ,OAAA;AAAA,cACA,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,cACjC,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,KAAK;AAAA;AACjC,WACD,CAAA;AAAA,QACH;AAEA,QAAA,IAAI,YAAY,kBAAA,EAAoB;AAClC,UAAA,IAAA,CAAK,oBAAA;AAAA,YACH,QAAQ,MAAA,CAAO,OAAA;AAAA,YACf,QAAQ,MAAA,CAAO;AAAA,WACjB;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,aAAA;AAAA,UACH,cAAA,GAAiB,QAAA;AAAA,UACjB,CAAC,OAAA,EAAS,OAAA,CAAQ,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAAA,UACvC;AAAA,SACF;AACA,QAAA,IAAA,CAAK,aAAA;AAAA,UACH,aAAA;AAAA,UACA,CAAC,QAAA,EAAU,OAAA,EAAS,OAAA,CAAQ,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAAA,UACjD;AAAA,SACF;AAEA,QAAA,IAAA,CAAK,IAAA,CAAK;AAAA,UACR,MAAM,gBAAA,CAAiB,MAAA;AAAA,UACvB,QAAA;AAAA,UACA,IAAA,EAAM;AAAA,YACJ,OAAA;AAAA,YACA,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,YACjC,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,KAAK;AAAA;AACjC,SACD,CAAA;AAAA,MACH;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,SAAA,EAAU,CAAE,OAAA,CAAQ,YAAA,EAAc;AAAA,QACrC,SAAA,EAAW,iCAAA;AAAA,QACX,UAAA,EAAY,KAAA;AAAA,QACZ;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,YAAA,EAAc;AAC/C,MAAA,IAAA,CAAK,cAAc,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,KAAA,CAAM,YAAY,CAAC,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,kBAAkB,QAAA,EAA6C;AACrE,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAA,CAAK,iBAAiB,OAAO,CAAA;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAc,iBACZ,gBAAA,EACc;AACd,IAAA,IAAI,CAAC,IAAA,CAAK,mBAAA,EAAoB,EAAG;AAC/B,MAAA,IAAA,CAAK,SAAA,EAAU,CAAE,KAAA,CAAM,CAAA,iDAAA,CAAmD,CAAA;AAC1E,MAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,QACb,IAAI,MAAM,CAAA,iDAAA,CAAmD;AAAA,OAC/D;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,WAAU,EAAG;AACpB,MAAA,MAAM,UAAA,GACF,IAAA,CAAK,eAAA,EAAiB,oBAAA,CAAqB,gBAAgB,CAAA;AAC/D,MAAA,IAAA,CAAK,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,UAAU,CAAC,CAAA;AAE/C,MAAA,OAAO,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAAA,IAC7B,CAAA,MAAO;AACL,MAAA,MAAM,UAAkC,EAAC;AAEzC,MAAA,KAAA,MAAW,gBAAgB,gBAAA,EAAkB;AAC3C,QAAA,IAAI,OAAO,YAAA,CAAa,QAAA,KAAa,WAAA,EAAa;AAChD,UAAA,KAAA,MAAW,IAAA,IAAQ,aAAa,QAAA,EAAU;AACxC,YAAA,MAAM,MAAA,GAAS,OAAO,IAAI,CAAA;AAC1B,YAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,MAAA;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,eAAA,EACD,aAAa,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA,CACpC,IAAA,CAAK,CAAC,SAAA,KAAc;AACnB,QAAA,MAAM,QAAA,GAAW,KAAK,SAAA,EAAW,IAAA;AAAA,UAC/B,IAAA,CAAK,kBAAA,CAAmB,gBAAA,EAAkB,SAAS;AAAA,SACrD;AAEA,QAAA,OAAO,OAAA,CAAQ,QAAQ,QAAQ,CAAA;AAAA,MACjC,CAAC,CAAA;AAAA,IACL;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,kBAAA,CACN,kBACA,SAAA,EACsB;AACtB,IAAA,MAAM,WAAkB,EAAC;AAEzB,IAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,aAAA,KAAkB;AAC1C,MAAA,MAAM,cAAc,aAAA,CAAc,IAAA;AAElC,MAAA,IAAI,YAAmB,EAAC;AACxB,MAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,QAAA,SAAA,GAAY,IAAA,CAAK,sBAAA;AAAA,UACf,aAAA,CAAc,QAAA;AAAA,UACd;AAAA,SACF;AAAA,MACF;AAEA,MAAA,IAAI,cAAc,WAAA,EAAa;AAC7B,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,WAAW,CAAA,EAAG;AAC5C,UAAA,MAAM,IAAI,UAAU,+CAA+C,CAAA;AAAA,QACrE;AAEA,QAAA,aAAA,CAAc,WAAA,CAAY,OAAA,CAAQ,CAAC,aAAA,KAAkB;AACnD,UAAA,IAAI,QAAA;AACJ,UAAA,IAAI,SAAA;AACJ,UAAA,IACE,OAAO,aAAA,KAAkB,QAAA,IACtB,aAAA,CAAc,QAAA,CAAS,GAAG,CAAA,EAC7B;AACA,YAAA,MAAM,MAAA,GAAS,aAAA,CAAc,QAAA,EAAS,CAAE,MAAM,GAAG,CAAA;AACjD,YAAA,QAAA,GAAW,OAAO,CAAC,CAAA;AACnB,YAAA,SAAA,GAAY,OAAO,CAAC,CAAA;AAAA,UACtB,WACE,OAAO,aAAA,KAAkB,YACtB,UAAA,IAAc,aAAA,IACd,eAAe,aAAA,EAClB;AACA,YAAA,QAAA,GAAW,aAAA,EAAe,QAAA;AAC1B,YAAA,SAAA,GAAY,aAAA,EAAe,SAAA;AAAA,UAC7B,CAAA,MAAO;AACL,YAAA,MAAM,IAAI,KAAA;AAAA,cACR,CAAA,mIAAA;AAAA,aACF;AAAA,UACF;AAEA,UAAA,SAAA,CAAU,IAAA;AAAA,YACR,SAAS,MAAA,CAAO;AAAA,cACd,EAAA,EAAI,IAAA,CAAK,QAAA,CAAS,QAAS,CAAA;AAAA,cAC3B,SAAA,EAAW,IAAA,CAAK,QAAA,CAAS,SAAU;AAAA,aACpC;AAAA,WACH;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,OAAA,GAAU,gBAAgB,MAAA,CAAO;AAAA,QACrC,SAAA;AAAA,QACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,WAAW,CAAA;AAAA,QAChC,MAAA,EAAQ,cAAc,MAAA,IAAU;AAAA,OACjC,CAAA;AACD,MAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,IACvB,CAAC,CAAA;AAED,IAAA,MAAM,YAAA,GAAe,aAAa,MAAA,CAAO;AAAA,MACvC,QAAA,EAAU;AAAA,QACR;AAAA,UACE,gBAAA,EAAkB;AAAA,YAChB;AAAA;AACF;AACF;AACF,KACD,CAAA;AAED,IAAA,OAAO,YAAA,CAAa,MAAA,CAAO,YAAY,CAAA,CAAE,MAAA,EAAO;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,sBAAA,CACN,OACA,SAAA,EACO;AACP,IAAA,MAAM,SAAS,EAAC;AAEhB,IAAA,KAAA,MAAW,UAAU,KAAA,EAAO;AAC1B,MAAA,IAAI,CAAC,UAAU,MAAM,CAAA,IAAK,CAAC,SAAA,CAAU,MAAM,EAAE,QAAA,EAAU;AACrD,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,MAAM,CAAA,CAAE,CAAA;AAAA,MACpE;AAEA,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,SAAS,MAAA,CAAO;AAAA,UACd,IAAI,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,MAAM,EAAE,QAAQ,CAAA;AAAA,UAC5C,WAAW,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,MAAM,EAAE,SAAS;AAAA,SACrD;AAAA,OACH;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,oBAAA,CAAqB,QAAgB,QAAA,EAAyB;AACpE,IAAA,IAAI,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA,EAAG;AACrC,MAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA,EAAG;AACxD,QAAA,QAAA,CAAS;AAAA,UACP,MAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,6BAAA,GAAsC;AAC5C,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,oBAAA,EAAsB;AAC9C,MAAA,IACE,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,oBAAA,EAAsB,MAAM,CAAA,IACnE,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA,CAAG,SAAS,CAAA,EAC/C;AACA,QAAA,IAAA,CAAK,eAAA,EAAiB,yBAAA;AAAA,UACpB,SAAA,CAAU,qBAAA;AAAA,UACV;AAAA,YACE;AAAA;AACF,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,MAAc,WAAW,OAAA,EAAiD;AACxE,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,IAAI,WAAW,CAAA;AAE5C,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,YAAY,IAAI,CAAA;AAAA,MACpD;AAEA,MAAA,IACE,IAAA,CAAK,eAAe,MAAM,CAAA,IACvB,KAAK,aAAA,CAAc,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA,EAC7C;AACA,QAAA,OAAO,OAAA,CAAQ,QAAQ,MAAM,CAAA;AAAA,MAC/B,CAAA,MAAA,IAAW,KAAK,QAAA,EAAU;AACxB,QAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AAAA,MACxC;AAAA,IACF,CAAA,MAAA,IACE,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA,IAC7B,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA,EACnD;AACA,MAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA;AAAA,IACrC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,IAAI,WAAW,CAAA;AAAA,IAC9C;AAEA,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,WAAA,CACF,OAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK;AAAA,QACpB,QAAQ,IAAA,CAAK,gBAAA;AAAA,QACb,MAAA,EAAQ,EAAE,KAAA,EAAO,GAAA;AAAI,OACtB,CAAA,CACA,IAAA,CAAK,CAAC,QAAA,KAAa;AAClB,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,EAAQ,CAAG,MAAA;AAEjC,QAAA,MAAM,YAAY,IAAA,CAAK,KAAA;AAAA,UAAA,CACpB,IAAA,CAAK,KAAI,GAAI,IAAI,KAAK,IAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,IAAK;AAAA,SACvD;AAEA,QAAA,OAAO,IAAA,CAAK,UAAA;AAEZ,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,IAAI,IAAI,CAAA;AACrC,QAAA,MAAA,CAAO,OAAO,SAAA,GAAY,SAAA;AAE1B,QAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,MAChB,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAmB;AAAE,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,MAAE,CAAC,CAAA;AAAA,IAChD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,MAAA,EAAsB;AAC3C,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,EAAG;AAC/B,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAO,MAAA,CAAO,QAAQ,EAAE,gBAAgB,CAAA,KAAM,KAAK,gBAAA,EAAkB;AACvE,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AAErB,IAAA,IACE,KAAK,QAAA,CAAS,MAAA,CAAO,KAAK,CAAC,KACxB,MAAA,CAAO,KAAK,CAAA,GAAI,CAAA,IAChB,OAAO,KAAK,CAAA,GAAI,GAAA,CAAI,OAAA,KAAY,GAAA,EACnC;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,eAAe,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA,CAAE,MAAA;AACrD,IAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,WAAA,IAAe,MAAA,CAAO,UAAU,CAAA,EAAG;AAC5C,MAAA,IAAI,CAAC,OAAO,SAAA,CAAU,cAAA,CAAe,KAAK,MAAA,CAAO,UAAU,CAAA,EAAG,WAAW,CAAA,EAAG;AAC1E,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAU,CAAA,CAAE,WAAW,CAAA;AAC9C,MAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAEvC,MAAA,IAAI,aAAa,GAAA,EAAK;AACpB,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,gBAAA,GAAyB;AAC/B,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,aAAA,CAAc,KAAK,cAAc,CAAA;AACjC,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB;AAEA,IAAA,IAAA,CAAK,cAAA,GAAiB,WAAA;AAAA,MACpB,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAAA,MAC1B;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,aAAA,CAAc,KAAK,cAAc,CAAA;AAAA,IACnC;AACA,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,EACxB;AAAA,EAEQ,WAAA,GAAuB;AAC7B,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA,EAAG;AACrC,MAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,SAAA,CAAU,KAAK,OAAA,EAAS,GAAA,CAAI,YAAY,CAAC,CAAA,EAAG;AACvE,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,aAAa,mCAAmC,CAAA;AACrD,MAAA,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,cAAA,EAAgB,gBAAgB,CAAA;AAAA,IAC5D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,SAAA,CAAU,QAA8B,YAAA,EAA6B;AAC3E,IAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,MAAA,IACE,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,QAAQ,GAAG,CAAA,IAC7C,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA,EACzD;AAEA,QAAA,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,cAAA,EAAgB;AACzB,MAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,cAAc,CAAC,CAAA;AAAA,IACxD;AAEA,IAAA,IAAA,CAAK,gBAAA,GAAmB,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA;AAE7D,IAAA,IAAI,IAAA,CAAK,YAAY,YAAA,EAAc;AACjC,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,UAAA,EAAY,MAAM,CAAA;AAAA,MAC7C,SAAS,KAAA,EAAO;AAKd,QAAA,IAAI,YAAA,IAAgB,aAAa,UAAA,EAAY;AAC3C,UAAA,YAAA,CAAa,WAAW,SAAS,CAAA;AAAA,QACnC;AACA,QAAA,IAAA,CAAK,WAAU,CAAE,KAAA;AAAA,UACf,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,gDAAA,CAAA;AAAA,UACvB,EAAE,KAAA;AAAM,SACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAa,SAAA,EAA2C;AAC9D,IAAA,IAAA,CAAK,eAAA,CAAgB,aAAa,SAAS,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,cAAA,EAAiC;AACrD,IAAA,IAAI,KAAK,kBAAA,EAAoB;AAC3B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,cAAA,GAAiB,CAAA,IAAK,cAAA,KAAmB,QAAA,EAAU;AACrD,MAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,MAAA,IAAA,CAAK,iBAAiB,mBAAmB,CAAA;AACzC,MAAA,IAAA,CAAK,UAAA,CAAW,YAAA,CAAa,cAAA,EAAgB,gBAAgB,CAAA;AAE7D,MAAA,IAAA,CAAK,aAAA,CAAc,kBAAA,EAAoB,CAAC,cAAA,EAAgB,QAAQ,CAAC,CAAA;AAEjE,MAAA,IAAA,CAAK,IAAA,CAAK;AAAA,QACR,MAAM,gBAAA,CAAiB,QAAA;AAAA,QACvB,IAAA,EAAM;AAAA,UACJ,MAAA,EAAQ,cAAA;AAAA,UACR,MAAA,EAAQ;AAAA;AACV,OACD,CAAA;AAED,MAAA,IAAA,CAAK,YAAA;AAAA,QACH,CAAA,2BAAA,EAA8B,QAAQ,CAAA,IAAA,EAAO,cAAc,CAAA,iBAAA;AAAA,OAC7D;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA,EAKQ,UAAA,CAAW,gBAAwB,gBAAA,EAAgC;AACzE,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA;AAC3B,MAAA,IAAA,CAAK,SAAA,CAAU,UAAA,CAAW,cAAA,EAAgB,gBAAgB,CAAA;AAAA,IAC5D;AAAA,EACF;AAAA,EAEQ,0BAAA,GAAmC;AACzC,IAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,cAAA,CAAe,SAAA,EAAW;AACrD,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,WAAA,CAAY,WAAW,OAAA,EAAQ;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAA,CAAkB,kBAA0B,CAAA,EAAS;AAC3D,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,eAAA,EAAiB;AAoBpB,MAAA;AACE,QAAA,eAAA,GAAkB,IAAA,CAAK,yBAAA;AAAA,UACrB,IAAA,CAAK;AAAA,SACP;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,MAAA,YAAA,CAAa,KAAK,iBAAiB,CAAA;AACnC,MAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,IAC3B;AAEA,IAAA,IAAA,CAAK,YAAA;AAAA,MACH,CAAA,iCAAA,EAAoC,eAAe,CAAA,oBAAA,EAAuB,IAAA,CAAK,kBAAkB,CAAA;AAAA,KACnG;AAEA,IAAA,IAAA,CAAK,iBAAA,GAAoB,WAAW,MAAM;AACxC,MAAA,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AAC9B,QAAA,IAAA,CAAK,WAAU,CAAE,KAAA,CAAM,mBAAA,EAAqB,EAAE,OAAO,CAAA;AAAA,MACvD,CAAC,CAAA;AAAA,IACH,CAAA,EAAG,kBAAkB,GAAK,CAAA;AAAA,EAC5B;AAAA,EAEQ,kCAAA,GAA2C;AACjD,IAAA,IAAA,CAAK,YAAA;AAAA,MACH,2DAA2D,yBAAyB,CAAA,QAAA;AAAA,KACtF;AAEA,IAAA,IAAI,KAAK,wBAAA,EAA0B;AACjC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,wBAAA,GAA2B,WAAW,MAAM;AAC/C,MAAA,IAAA,CAAK,wBAAA,GAA2B,IAAA;AAChC,MAAA,IAAA,CAAK,0BAAA,EAA2B;AAAA,IAClC,CAAA,EAAG,4BAA4B,GAAK,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,OAAA,GAAyB;AACrC,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,MAAA,OAAO,QAAQ,MAAA,EAAO;AAAA,IACxB;AACA,IAAA,IAAI,IAAA,CAAK,WAAW,SAAA,EAAW;AAC7B,MAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,IACzB;AAEA,IAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,MAAA,YAAA,CAAa,KAAK,iBAAiB,CAAA;AACnC,MAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,IAC3B;AAEA,IAAA,IAAA,CAAK,SAAS,UAAA,CAAW,UAAA;AACzB,IAAA,IAAA,CAAK,kBAAA,EAAA;AACL,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,QACrB,OAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,WAAW,OAAA,EAAQ;AAAA,IAC1B,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,eAAA,CACN,cAAA,EACA,gBAAA,EACA,YAAA,GAAuB,CAAA,EACjB;AACN,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,YAAA,CAAa,KAAK,eAAe,CAAA;AACjC,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACzB;AAEA,IAAA,IAAI,eAAe,CAAA,EAAG;AACpB,MAAA,YAAA,GAAe,KAAK,IAAA,CAAK,IAAA,CAAK,MAAA,EAAO,GAAI,EAAE,CAAA,GAAI,CAAA;AAAA,IACjD;AAEA,IAAA,IAAA,CAAK,eAAA,GAAkB,UAAA;AAAA,MACrB,MAAM,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,gBAAgB,CAAA;AAAA,MACnD,YAAA,GAAe;AAAA,KACjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,yBAAyB,aAAA,EAA4B;AAC3D,IAAA,IAAA,CAAK,QAAA,CAAS,MAAM,aAAA,CAAc,GAAA;AAClC,IAAA,MAAM,OAAO,aAAA,CAAc,IAAA;AAE3B,IAAA,IAAI,CAAC,aAAA,CAAc,IAAA,CAAK,KAAA,EAAO;AAC7B,MAAA,IAAA,CAAK,QAAQ,EAAC;AAAA,IAChB;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,SAAS,aAAA,CAAc,MAAA;AAElC,IAAA,IACE,iBAAiB,aAAA,IACd,IAAA,CAAK,aAAA,CAAc,aAAA,CAAc,WAAW,CAAA,EAC/C;AACA,MAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,aAAA,CAAc,WAAW,CAAA;AAAA,IACtD;AAEA,IAAA,IACE,gBAAgB,aAAA,IACb,IAAA,CAAK,aAAA,CAAc,aAAA,CAAc,UAAU,CAAA,EAC9C;AACA,MAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,aAAA,CAAc,UAAU,CAAA;AAAA,IACrD;AAEA,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,aAAA,CAAc,GAAG,CAAA,EAAG;AAC1C,MAAA,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAC1B,MAAA,IAAA,CAAK,cAAA,EAAe;AACpB,MAAA,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA,IAC5B;AAEA,IAAA,IAAA,CAAK,SAAA,EAAW,IAAA,CAAK,CAAA,KAAA,EAAQ,aAAA,CAAc,GAAG,CAAA,CAAE,CAAA;AAEhD,IAAA,OAAO,EAAC;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,MAAA,EAAkC;AAC7D,IAAA,MAAM,WAAwC,EAAC;AAC/C,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,SAAS,GAAA,GAAM,IAAA;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAA,CAAK,uBAAuB,KAAK,CAAA;AAEjC,MAAA,IAAI,MAAM,GAAA,IAAO,CAAC,KAAK,cAAA,CAAe,KAAA,CAAM,GAAG,CAAA,EAAG;AAChD,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,gBAAA;AAAA,QACH,KAAA,CAAM;AAAA,OACR;AACA,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,IAAiC,CAAA;AAAA,IACvD;AACA,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,IAAA,CAAK,kBAAkB,QAAQ,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAuB,KAAA,EAA+B;AAC5D,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,GAAM,KAAA,CAAM,GAAA,IAAO,IAAA;AACjC,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,GAAM,KAAA,CAAM,GAAA,IAAO,IAAA;AACjC,IAAA,IAAA,CAAK,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,IAAA,IAAQ,IAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,uBAAA,CACN,SACA,OAAA,EACM;AACN,IAAA,QAAQ,OAAA,CAAQ,aAAY;AAAG,MAC7B,KAAK,eAAe,cAAA,EAAgB;AAClC,QAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,MAAA,KAAW,WAAA,EAAa;AACzC,UAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,IAAA;AAC3C,UAAA,IAAI,UAAA,KAAe,SAAA,IAAa,IAAA,CAAK,OAAA,EAAS,UAAU,OAAA,EAAS;AAC/D,YAAA,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,WAAA;AAC/C,YAAA,IAAA,CAAK,YAAA;AAAA,cACH,CAAA,qBAAA,EAAwB,QAAQ,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,cAAA,EAAiB,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA;AAAA,aACnG;AAAA,UACF;AACA,UAAA,IAAI,UAAA,KAAe,QAAA,IAAY,IAAA,CAAK,OAAA,EAAS,UAAU,MAAA,EAAQ;AAC7D,YAAA,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,WAAA;AAC9C,YAAA,IAAA,CAAK,YAAA;AAAA,cACH,CAAA,qBAAA,EAAwB,QAAQ,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,cAAA,EAAiB,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA;AAAA,aAClG;AAAA,UACF;AAEA,UAAA,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,eAAA,EAAiB,qBAAqB,CAAA;AAAA,QACpE,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,eAAA,EAAiB,0BAA0B,CAAA;AAAA,QACvE;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,eAAe,aAAA,EAAe;AACjC,QAAA,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,cAAA,EAAgB,yBAAyB,CAAA;AACnE,QAAA;AAAA,MACF;AAAA,MACA,KAAK,eAAe,cAAA,EAAgB;AAClC,QAAA,IAAA,CAAK,SAAA;AAAA,UACH,YAAA,CAAa,gBAAA;AAAA,UACb,sBAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA;AAAA,MACF;AACA;AACF,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,kBAAkB,QAAA,EAAsC;AAC9D,IAAA,IAAI,IAAA,CAAK,WAAU,EAAG;AACpB,MAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,QAAA,IAAA,CAAK,aAAA,EAAc;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,eAAA,EAAiB,oBAAoB,QAAkB,CAAA;AAAA,MAC9D;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,QAAQ,CAAA;AAC5C,MAAA,IAAA,CAAK,qBAAqB,MAAM,CAAA;AAAA,IAClC;AAAA,EACF;AAAA;AAAA,EAGQ,iBAAA,GAA0B;AAChC,IAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAClB,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,kBAAA,GAAqB,CAAA;AAC1B,IAAA,IAAA,CAAK,mBAAA,GAAsB,KAAA;AAC3B,IAAA,IAAA,CAAK,SAAS,UAAA,CAAW,MAAA;AAEzB,IAAA,IAAA,CAAK,aAAa,uDAAuD,CAAA;AACzE,IAAA,IAAI,IAAA,CAAK,oBAAmB,EAAG;AAC7B,MAAA,IAAA,CAAK,kCAAA,EAAmC;AAAA,IAC1C;AACA,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAA,CAAQ,EAAE,CAAA;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,wBAAwB,QAAA,EAGvB;AACP,IAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,cAAA,CAAe,WAAA,EAAa;AACvD,MAAA,IAAA,CAAK,SAAS,UAAA,CAAW,OAAA;AAAA,IAC3B;AAEA,IAAA,IAAA,CAAK,YAAA;AAAA,MACH,CAAA,6DAAA,EAAgE,QAAA,CAAS,IAAI,CAAA,UAAA,EAAa,SAAS,MAAM,CAAA;AAAA,KAC3G;AACA,IAAA,IAAI,CAAC,KAAK,mBAAA,EAAqB;AAC7B,MAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,IACzB;AACA,IAAA,IAAA,CAAK,mBAAA,GAAsB,KAAA;AAC3B,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,KAAA,EAAoB;AAC7C,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,cAAA,CAAe,WAAA,EAAa;AACvD,MAAA,IAAA,CAAK,SAAS,UAAA,CAAW,OAAA;AAAA,IAC3B;AAEA,IAAA,IAAA,CAAK,WAAU,CAAE,KAAA;AAAA,MACf,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,qCAAA,CAAA;AAAA,MACvB,EAAE,KAAA;AAAM,KACV;AAEA,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,KAAK,CAAA;AAAA,IACnC;AAEA,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,wBAAwB,QAAA,EAEvB;AACP,IAAA,MAAM,qBAAqB,QAAA,CAAS,kBAAA;AAEpC,IAAA,IACE,kBAAA,IACG,KAAK,eAAA,KAAoB,cAAA,CAAe,aACxC,CAAC,IAAA,CAAK,aAAY,EACrB;AACA,MAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,QAAA,YAAA,CAAa,KAAK,iBAAiB,CAAA;AACnC,QAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,MAC3B;AAEA,MAAA,IAAA,CAAK,kBAAA,GAAqB,CAAA;AAC1B,MAAA,IAAA,CAAK,kBAAkB,cAAA,CAAe,WAAA;AACtC,MAAA,IAAA,CAAK,kBAAkB,CAAC,CAAA;AAAA,IAC1B,WACE,CAAC,kBAAA,IACE,IAAA,CAAK,eAAA,KAAoB,eAAe,WAAA,EAC3C;AACA,MAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,QAAA,YAAA,CAAa,KAAK,iBAAiB,CAAA;AACnC,QAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,MAC3B;AACA,MAAA,IAAI,KAAK,wBAAA,EAA0B;AACjC,QAAA,YAAA,CAAa,KAAK,wBAAwB,CAAA;AAC1C,QAAA,IAAA,CAAK,wBAAA,GAA2B,IAAA;AAAA,MAClC;AAEA,MAAA,IAAA,CAAK,kBAAA,GAAqB,CAAA;AAC1B,MAAA,IAAA,CAAK,kBAAkB,cAAA,CAAe,SAAA;AACtC,MAAA,IAAA,CAAK,kBAAkB,CAAC,CAAA;AAAA,IAC1B;AAAA,EACF;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAClB,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,kBAAA,GAAqB,CAAA;AAC1B,IAAA,IAAA,CAAK,mBAAA,GAAsB,KAAA;AAC3B,IAAA,IAAA,CAAK,SAAS,UAAA,CAAW,MAAA;AACzB,IAAA,IAAA,CAAK,aAAA,CAAc,oBAAoB,KAAK,CAAA;AAG5C,IAAA,IAAA,CAAK,aAAA,CAAc,sBAAsB,IAAI,CAAA;AAE7C,IAAA,IAAI,IAAA,CAAK,eAAA,IAAmB,cAAA,CAAe,WAAA,EAAa;AACtD,MAAA,IAAA,CAAK,kBAAkB,cAAA,CAAe,SAAA;AACtC,MAAA,IAAA,CAAK,YAAY,WAAA,EAAa,UAAA;AAAA,QAC5B,YAAA,CAAa,eAAA;AAAA,QACb;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,wBAAA,EAA0B;AACjC,MAAA,YAAA,CAAa,KAAK,wBAAwB,CAAA;AAC1C,MAAA,IAAA,CAAK,wBAAA,GAA2B,IAAA;AAAA,IAClC;AACA,IAAA,IAAA,CAAK,aAAa,oDAAoD,CAAA;AACtE,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAA,CAAQ,EAAE,CAAA;AAAA,IACjC;AAEA,IAAA,IAAA,CAAK,6BAAA,EAA8B;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsB,QAAA,EAGrB;AACP,IAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,cAAA,CAAe,SAAA,EAAW;AACrD,MAAA,IAAA,CAAK,SAAS,UAAA,CAAW,OAAA;AAAA,IAC3B;AAEA,IAAA,IAAA,CAAK,YAAA;AAAA,MACH,CAAA,0DAAA,EAA6D,QAAA,CAAS,IAAI,CAAA,UAAA,EAAa,SAAS,MAAM,CAAA,CAAA;AAAA,MACtG;AAAA,KACF;AACA,IAAA,IAAI,CAAC,KAAK,mBAAA,EAAqB;AAC7B,MAAA,IAAI,QAAA,CAAS,IAAA,IAAQ,YAAA,CAAa,gBAAA,EAAkB;AAClD,QAAA,IAAA,CAAK,eAAA;AAAA,UACH,YAAA,CAAa,gBAAA;AAAA,UACb;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,MACzB;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,aAAA,CAAc,sBAAsB,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,mBAAA,GAAsB,KAAA;AAE3B,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,KAAA,EAAoB;AAC3C,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,cAAA,CAAe,SAAA,EAAW;AACrD,MAAA,IAAA,CAAK,SAAS,UAAA,CAAW,OAAA;AAAA,IAC3B;AAEA,IAAA,IAAA,CAAK,WAAU,CAAE,KAAA;AAAA,MACf,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,kCAAA,CAAA;AAAA,MACvB,EAAE,KAAA;AAAM,KACV;AACA,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,KAAK,CAAA;AAAA,IACnC;AAEA,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWQ,gBAAgB,SAAA,EAAqD;AAC3E,IAAA,IAAI,qBAAqB,WAAA,EAAa;AACpC,MAAA,OAAO,IAAA,CAAK,wBAAwB,SAAS,CAAA;AAAA,IAC/C,CAAA,MAAA,IAAW,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA,EAAG;AACzC,MAAA,OAAO,IAAA,CAAK,yBAAyB,SAAS,CAAA;AAAA,IAChD;AAEA,IAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKQ,wBAAwB,SAAA,EAA4C;AAC1E,IAAA,MAAM,SAAS,EAAC;AAEhB,IAAA,IAAI;AACF,MAAA,MAAM,gBAAgB,aAAA,CAAc,MAAA,CAAO,IAAI,UAAA,CAAW,SAAS,CAAC,CAAA;AACpE,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,aAAA,CAAc,SAAA,CAAU,QAAQ,CAAA,EAAA,EAAK;AACvD,QAAA,MAAM,QAAA,GAAW,aAAA,CAAc,SAAA,CAAU,CAAC,CAAA;AAC1C,QAAA,IAAI,QAAA,CAAS,YAAY,kBAAA,EAAoB;AAC3C,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,QAAA,GAAW,SAAS,gBAAA,CAAiB,QAAA;AAC3C,QAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,UAAA,IAAI,aAAA;AACJ,UAAA,IAAI;AACF,YAAA,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,UACzC,SAAS,KAAA,EAAO;AACd,YAAA,IAAA,CAAK,WAAU,CAAE,KAAA;AAAA,cACf,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,oCAAA,CAAA;AAAA,cACvB,EAAE,KAAA;AAAM,aACV;AACA,YAAA;AAAA,UACF;AAEA,UAAA,IAAI,CAAC,cAAc,KAAA,EAAO;AACxB,YAAA,aAAA,CAAc,QAAQ,EAAC;AAAA,UACzB;AACA,UAAA,aAAA,CAAc,MAAM,MAAA,GAAS;AAAA,YAC3B,IAAA,EAAM,QAAQ,MAAA,CAAO;AAAA,WACvB;AAEA,UAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,EAAA,YAAc,UAAA,EAAY;AAC3C,YAAA,aAAA,CAAc,MAAM,MAAA,CAAO,EAAA,GAAK,KAAK,QAAA,CAAS,OAAA,CAAQ,OAAO,EAAE,CAAA;AAAA,UACjE;AAEA,UAAA,MAAM,iBAAA,GAAoB;AAAA,YACxB,GAAA,EAAK,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAA;AAAA,YAC7B,IAAA,EAAM;AAAA,WACR;AAEA,UAAA,MAAA,CAAO,KAAK,iBAAiB,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,WAAU,CAAE,KAAA;AAAA,QACf,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,+BAAA,CAAA;AAAA,QACvB,EAAE,KAAA;AAAM,OACV;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,yBAAyB,SAAA,EAAuC;AACtE,IAAA,MAAM,SAAS,EAAC;AAEhB,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,gCAAgC,CAAA;AAClE,IAAA,IAAI,cAAc,IAAA,EAAM;AACtB,MAAA,IAAA,CAAK,SAAA,EAAU,CAAE,OAAA,CAAQ,YAAA,EAAc;AAAA,QACrC,SAAA,EAAW,qCAAA;AAAA,QACX,UAAA,EAAY;AAAA,OACb,CAAA;AAED,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,QAAQ,CAAA,EAAA,EAAK;AACzC,MAAA,SAAA,CAAU,CAAC,CAAA,GAAI,SAAA,CAAU,CAAC,CAAA,CAAG,SAAA,CAAU,EAAA,EAAI,SAAA,CAAU,CAAC,CAAA,CAAG,MAAA,GAAS,EAAE,CAAA;AACpE,MAAA,IAAI,SAAA,CAAU,CAAC,CAAA,CAAG,MAAA,IAAU,CAAA,EAAG;AAC7B,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,CAAC,CAAE,CAAA;AAAA,MACjC,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,KAAK,IAAwB,CAAA;AAAA,IACtC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,SAAS,SAAA,EAA+B;AAC9C,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA;AACpC,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,QAAA,MAAA,IAAU,GAAA;AAAA,MACZ;AACA,MAAA,MAAA,IAAU,OAAA;AAAA,IACZ;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,SAAS,EAAA,EAAwB;AACvC,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,OAAO,IAAI,UAAA,EAAW;AAAA,IACxB;AAEA,IAAA,MAAM,SAAS,EAAC;AAChB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,EAAA,CAAG,MAAA,EAAQ,KAAK,CAAA,EAAG;AACrC,MAAA,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IACrD;AAEA,IAAA,OAAO,IAAI,WAAW,MAAM,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA,EAKQ,SAAA,GAAkB;AACxB,IAAA,IAAA,CAAK,UAAA,CAAW,YAAA,CAAa,cAAA,EAAgB,SAAS,CAAA;AAAA,EACxD;AAAA,EAEQ,QAAA,GAAiB;AACvB,IAAA,IAAA,CAAK,OAAA,EAAQ,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AAC9B,MAAA,IAAA,CAAK,WAAU,CAAE,KAAA,CAAM,UAAA,EAAY,EAAE,OAAO,CAAA;AAAA,IAC9C,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,cAAA,GAAuB;AAC7B,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAElB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA;AACvC,IAAA,OAAA,CAAQ,GAAA,GAAM,IAAA,CAAK,GAAA,EAAI,GAAI,qBAAA,GAAwB,GAAA;AACnD,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,QAAA,CAAS,GAAA;AAAA,UACZ,UAAA;AAAA,UACA,IAAA,CAAK,UAAU,OAAO;AAAA;AAAA,SAExB;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,WAAU,CAAE,KAAA;AAAA,UACf,CAAA,EAAG,IAAA,CAAK,aAAA,EAAe,CAAA,6DAAA,CAAA;AAAA,UACvB,EAAE,KAAA;AAAM,SACV;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,kBAAkB,EAAE,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,qBAAA,CAAsB,QAAoB,KAAA,EAAqB;AACrE,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,YAAA,CAAa,KAAK,eAAe,CAAA;AACjC,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACzB;AAEA,IAAA,IAAA,CAAK,eAAA,GAAkB,WAAW,MAAM;AACtC,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,MAAA,IAAA,CAAK,eAAe,MAAM,CAAA;AAAA,IAC5B,GAAG,KAAK,CAAA;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,MAAA,EAA0B;AAC/C,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,aAAA,CAAc,cAAA,EAAgB,CAAC,MAAM,CAAC,CAAA;AAE3C,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,MAAM,gBAAA,CAAiB,MAAA;AAAA,MACvB,IAAA,EAAM;AAAA,QACJ;AAAA;AACF,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWQ,WAAA,CAAY,KAAA,EAAe,KAAA,GAAiB,KAAA,EAAa;AAC/D,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA,EAAG;AACnC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAA,EAAO,IAAI,CAAA;AACpC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,CAAY,QAAiB,KAAA,EAAa;AAChD,IAAA,IAAI,KAAK,mBAAA,EAAqB;AAC5B,MAAA,YAAA,CAAa,KAAK,mBAAmB,CAAA;AACrC,MAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA;AAAA,IAC7B;AAEA,IAAA,IAAA,CAAK,mBAAA,GAAsB,UAAA;AAAA,MACzB,MAAM;AAIJ,QAAA,MAAM,YAAY,CAAC,GAAG,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA;AAEjD,QAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,UAAA,IAAA,CAAK,WAAA,CACF,OAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK;AAAA,YACpB,MAAA,EAAQ,mBAAA;AAAA,YACR,MAAA,EAAQ,EAAE,IAAA,EAAM,SAAA;AAAU,WAC3B,CAAA,CACA,IAAA,CAAK,CAAC,QAAA,KAAyB;AAI9B,YAAA,MAAM,WAAA,GAA+B,QAAA,CAAS,OAAA,EAAQ,CAAqC,MAAA;AAE3F,YAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAC/B,cAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,YACvB;AAEA,YAAA,IAAA,CAAK,WAAA,EAAY;AAAA,UACnB,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AACX,YAAA,IAAA,CAAK,WAAA,EAAY;AAAA,UACnB,CAAC,CAAA;AAAA,QACL,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,WAAA,EAAY;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,MACA,KAAA,GAAQ,IAAA,CAAK,yBAAA,GAA4B,IAAA,CAAK;AAAA,KAChD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAW,KAAA,EAAqB;AACtC,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,KAAK,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA,EAKQ,aAAA,GAAsB;AAC5B,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,SAAA,EAAW,KAAK,aAAa,CAAA;AAAA,EACpC;AAAA,EAEQ,qBAAA,GAA8B;AACpC,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,YAAA,CAAa,KAAK,gBAAgB,CAAA;AAClC,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B;AAEA,IAAA,IAAA,CAAK,gBAAA,GAAmB,UAAA;AAAA,MACtB,IAAA,CAAK,qBAAA;AAAA,MACL,eAAe,CAAA,GAAI;AAAA,KACrB;AAAA,EACF;AAAA,EAEQ,oBAAA,GAA6B;AACnC,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,YAAA,CAAa,KAAK,gBAAgB,CAAA;AAAA,IACpC;AAEA,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,EAC1B;AAAA,EAEQ,aAAA,GAAsB;AAC5B,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,CAAC,IAAA,CAAK,aAAY,EAAG;AACzC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,WAAU,CAAE,OAAA,CAAQ,CAAA,yBAAA,EAA4B,YAAA,GAAe,CAAC,CAAA,sBAAA,CAAwB,CAAA;AAC7F,IAAA,IAAA,CAAK,UAAA,CAAW,YAAA,CAAa,KAAA,EAAO,kBAAkB,CAAA;AAEtD,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWQ,0BAA0B,aAAA,EAA+B;AAC/D,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,MAAA,MAAA,GAAS,GAAA;AAAA,IACX,CAAA,MAAA,IAAW,gBAAgB,CAAA,EAAG;AAC5B,MAAA,MAAA,GAAS,EAAA;AAAA,IACX,CAAA,MAAA,IAAW,gBAAgB,CAAA,EAAG;AAC5B,MAAA,MAAA,GAAS,EAAA;AAAA,IACX,CAAA,MAAA,IAAW,gBAAgB,EAAA,EAAI;AAC7B,MAAA,MAAA,GAAS,GAAA;AAAA,IACX,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,IAAA;AAAA,IACX;AAEA,IAAA,OAAO,MAAA,GAAS,MAAA,GAAS,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,eAAe,GAAA,EAAsB;AAC3C,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,QAAA,CAAS,GAAG,CAAA,EAAG;AAC9C,MAAA,IAAA,CAAK,SAAA,EAAU,CAAE,OAAA,CAAQ,CAAA,kBAAA,EAAqB,GAAG,CAAA,QAAA,CAAU,CAAA;AAC3D,MAAA,OAAO,KAAA;AAAA,IACT,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,cAAA,GAAuB;AAC7B,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,MAAA,GAAS,gBAAA,EAAkB;AAC1D,MAAA,IAAA,CAAK,SAAS,cAAA,GACV,IAAA,CAAK,SAAS,cAAA,CAAe,KAAA,CAAM,CAAC,gBAAgB,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,WAAW,OAAA,EAA0C;AAC3D,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,IACE,OAAA,CAAQ,OAAO,MAAA,IACZ,OAAA,CAAQ,MAAM,MAAA,CAAO,IAAA,KAAS,WAAW,MAAA,EAC5C;AACA,MAAA,IAAA,CAAK,WAAU,CAAE,IAAA;AAAA,QACf,CAAA,kBAAA,EAAqB,QAAQ,SAAS,CAAA,CAAA;AAAA,QAAI;AAAA,UACxC,SAAS,OAAA,CAAQ,OAAA;AAAA,UACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,UAChB,OAAO,OAAA,CAAQ;AAAA;AACjB,OACF;AAAA,IACF,CAAA,MAAA,IAAW,OAAA,CAAQ,SAAA,IAAa,QAAA,EAAU;AACxC,MAAA,IAAA,CAAK,WAAU,CAAE,IAAA;AAAA,QACf,CAAA,iBAAA,CAAA;AAAA,QAAqB;AAAA,UACnB,SAAS,OAAA,CAAQ,OAAA;AAAA,UACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,UAChB,OAAO,OAAA,CAAQ;AAAA;AACjB,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,WAAU,CAAE,IAAA;AAAA,QACf,CAAA,WAAA,CAAA;AAAA,QACA;AAAA,UACE,UAAU,OAAA,CAAQ,SAAA;AAAA,UAClB,SAAS,OAAA,CAAQ,OAAA;AAAA,UACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,UAChB,OAAO,OAAA,CAAQ;AAAA;AACjB,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,YAAA,CAAa,OAAA,EAAiB,KAAA,GAAiB,KAAA,EAAa;AAClE,IAAA,IAAI,IAAA,CAAK,mBAAmB,KAAA,EAAO;AACjC,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA,CAAM,CAAA,EAAG,KAAK,aAAA,EAAe,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,IAC9D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,OAAA,EAGhB;AACP,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC7C,MAAA,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,SAAS,IAAI,EAAC;AAAA,IAC9C;AACA,IAAA,IAAI,CAAC,KAAK,QAAA,CAAS,OAAA,CAAQ,QAAQ,SAAS,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC9D,MAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAA,GAAI,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,CAAE,QAAQ,OAAO,CAAA,EAAA;AAExD,IAAA,IAAA,CAAK,QAAA,CAAS,YAAA,EAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,IAAA,EAAoB;AAC3C,IAAA,IAAA,CAAK,SAAA,EAAU,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,EAiC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,aAAA,CACN,SAAA,EACA,IAAA,EACA,KAAA,GAAiB,KAAA,EACX;AAGN,EAQF;AAAA;AAEF;;;;"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @package @bitrix24/b24jssdk
3
+ * @version 1.0.1
4
+ * @copyright (c) 2026 Bitrix24
5
+ * @license MIT
6
+ * @see https://github.com/bitrix24/b24jssdk
7
+ * @see https://bitrix24.github.io/b24jssdk/
8
+ */
9
+ var __defProp = Object.defineProperty;
10
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
11
+ class ErrorNotConnected extends Error {
12
+ static {
13
+ __name(this, "ErrorNotConnected");
14
+ }
15
+ constructor(message) {
16
+ super(message);
17
+ this.name = "ErrorNotConnected";
18
+ }
19
+ }
20
+ class ErrorTimeout extends Error {
21
+ static {
22
+ __name(this, "ErrorTimeout");
23
+ }
24
+ constructor(message) {
25
+ super(message);
26
+ this.name = "ErrorTimeout";
27
+ }
28
+ }
29
+
30
+ export { ErrorNotConnected, ErrorTimeout };
31
+ //# sourceMappingURL=errors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.mjs","sources":["../../../src/pullClient/errors.ts"],"sourcesContent":["export class ErrorNotConnected extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'ErrorNotConnected'\n }\n}\n\nexport class ErrorTimeout extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'ErrorTimeout'\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;AAAO,MAAM,0BAA0B,KAAA,CAAM;AAAA,EAA7C;AAA6C,IAAA,MAAA,CAAA,IAAA,EAAA,mBAAA,CAAA;AAAA;AAAA,EAC3C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EACd;AACF;AAEO,MAAM,qBAAqB,KAAA,CAAM;AAAA,EAPxC;AAOwC,IAAA,MAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAAA;AAAA,EACtC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AAAA,EACd;AACF;;;;"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * @package @bitrix24/b24jssdk
3
+ * @version 1.0.1
4
+ * @copyright (c) 2026 Bitrix24
5
+ * @license MIT
6
+ * @see https://github.com/bitrix24/b24jssdk
7
+ * @see https://bitrix24.github.io/b24jssdk/
8
+ */
9
+ import { ErrorNotConnected, ErrorTimeout } from './errors.mjs';
10
+ import { Type } from '../tools/type.mjs';
11
+ import { Text } from '../tools/text.mjs';
12
+ import { ListRpcError } from '../types/pull.mjs';
13
+ import { LoggerFactory } from '../logger/logger-factory.mjs';
14
+
15
+ var __defProp = Object.defineProperty;
16
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
17
+ const JSON_RPC_VERSION = "2.0";
18
+ class JsonRpc {
19
+ static {
20
+ __name(this, "JsonRpc");
21
+ }
22
+ _logger;
23
+ _connector;
24
+ _idCounter = 0;
25
+ _handlers = {};
26
+ _rpcResponseAwaiters = /* @__PURE__ */ new Map();
27
+ constructor(options) {
28
+ this._logger = LoggerFactory.createNullLogger();
29
+ this._connector = options.connector;
30
+ if (Type.isPlainObject(options.handlers)) {
31
+ for (const method in options.handlers) {
32
+ this.handle(method, options.handlers[method]);
33
+ }
34
+ }
35
+ }
36
+ setLogger(logger) {
37
+ this._logger = logger;
38
+ }
39
+ getLogger() {
40
+ return this._logger;
41
+ }
42
+ /**
43
+ * @param {string} method
44
+ * @param {function} handler
45
+ */
46
+ handle(method, handler) {
47
+ this._handlers[method] = handler;
48
+ }
49
+ /**
50
+ * Sends RPC command to the server.
51
+ *
52
+ * @param {string} method Method name
53
+ * @param {object} params
54
+ * @param {int} timeout
55
+ * @returns {Promise}
56
+ */
57
+ async executeOutgoingRpcCommand(method, params, timeout = 5) {
58
+ return new Promise((resolve, reject) => {
59
+ const request = this.createRequest(method, params);
60
+ if (!this._connector.send(JSON.stringify(request))) {
61
+ reject(new ErrorNotConnected("websocket is not connected"));
62
+ }
63
+ const timeoutHandler = setTimeout(() => {
64
+ this._rpcResponseAwaiters.delete(request.id);
65
+ reject(new ErrorTimeout("no response"));
66
+ }, timeout * 1e3);
67
+ this._rpcResponseAwaiters.set(request.id, {
68
+ resolve,
69
+ reject,
70
+ timeout: timeoutHandler
71
+ });
72
+ });
73
+ }
74
+ /**
75
+ * Executes array or rpc commands.
76
+ * Returns an array of promises, each promise will be resolved individually.
77
+ *
78
+ * @param {JsonRpcRequest[]} batch
79
+ * @returns {Promise[]}
80
+ */
81
+ // @ts-expect-error When we rewrite it to something more modern, then we'll remove this
82
+ executeOutgoingRpcBatch(batch) {
83
+ const requests = [];
84
+ const promises = [];
85
+ batch.forEach(({ method, params, id }) => {
86
+ const request = this.createRequest(method, params, id);
87
+ requests.push(request);
88
+ promises.push(
89
+ new Promise(
90
+ (resolve, reject) => this._rpcResponseAwaiters.set(request.id, {
91
+ resolve,
92
+ reject
93
+ })
94
+ )
95
+ );
96
+ });
97
+ this._connector.send(JSON.stringify(requests));
98
+ return promises;
99
+ }
100
+ processRpcResponse(response) {
101
+ if ("id" in response && this._rpcResponseAwaiters.has(Number(response.id))) {
102
+ const awaiter = this._rpcResponseAwaiters.get(Number(response.id));
103
+ if (awaiter) {
104
+ if ("result" in response) {
105
+ awaiter.resolve(response.result);
106
+ } else if ("error" in response) {
107
+ awaiter.reject(response?.error || "error");
108
+ } else {
109
+ awaiter.reject("wrong response structure");
110
+ }
111
+ clearTimeout(awaiter.timeout);
112
+ this._rpcResponseAwaiters.delete(Number(response.id));
113
+ }
114
+ return;
115
+ }
116
+ this.getLogger().error(`${Text.getDateForLog()}: Pull: Received rpc response with unknown id`, { response });
117
+ }
118
+ parseJsonRpcMessage(message) {
119
+ let decoded;
120
+ try {
121
+ decoded = JSON.parse(message);
122
+ } catch (error) {
123
+ this.getLogger().error(
124
+ `${Text.getDateForLog()}: Pull: Could not decode json rpc message`,
125
+ { error }
126
+ );
127
+ return [];
128
+ }
129
+ if (Type.isArray(decoded)) {
130
+ return this.executeIncomingRpcBatch(decoded);
131
+ } else if (Type.isJsonRpcRequest(decoded)) {
132
+ return this.executeIncomingRpcCommand(decoded);
133
+ } else if (Type.isJsonRpcResponse(decoded)) {
134
+ this.processRpcResponse(decoded);
135
+ return [];
136
+ } else {
137
+ this.getLogger().error(
138
+ `${Text.getDateForLog()}: Pull: unknown rpc packet`,
139
+ { decoded }
140
+ );
141
+ }
142
+ return [];
143
+ }
144
+ /**
145
+ * Executes RPC command, received from the server
146
+ *
147
+ * @param {string} method
148
+ * @param {object} params
149
+ * @returns {object} RpcCommandResult
150
+ */
151
+ executeIncomingRpcCommand({
152
+ method,
153
+ params
154
+ }) {
155
+ if (method in this._handlers) {
156
+ return this._handlers[method].call(this, params || {});
157
+ }
158
+ return {
159
+ jsonrpc: JSON_RPC_VERSION,
160
+ error: ListRpcError.MethodNotFound
161
+ };
162
+ }
163
+ executeIncomingRpcBatch(batch) {
164
+ const result = [];
165
+ for (const command of batch) {
166
+ if ("jsonrpc" in command) {
167
+ if ("method" in command) {
168
+ const commandResult = this.executeIncomingRpcCommand(command);
169
+ if (commandResult) {
170
+ commandResult["jsonrpc"] = JSON_RPC_VERSION;
171
+ commandResult["id"] = command["id"];
172
+ result.push(commandResult);
173
+ }
174
+ } else {
175
+ this.processRpcResponse(command);
176
+ }
177
+ } else {
178
+ this.getLogger().error(
179
+ `${Text.getDateForLog()}: Pull: unknown rpc command in batch`,
180
+ { command }
181
+ );
182
+ result.push({
183
+ jsonrpc: JSON_RPC_VERSION,
184
+ error: ListRpcError.InvalidRequest
185
+ });
186
+ }
187
+ }
188
+ return result;
189
+ }
190
+ nextId() {
191
+ return ++this._idCounter;
192
+ }
193
+ createPublishRequest(messageBatch) {
194
+ return messageBatch.map((message) => this.createRequest("publish", message));
195
+ }
196
+ createRequest(method, params, id) {
197
+ if (!id) {
198
+ id = this.nextId();
199
+ }
200
+ return {
201
+ jsonrpc: JSON_RPC_VERSION,
202
+ method,
203
+ params,
204
+ id
205
+ };
206
+ }
207
+ }
208
+
209
+ export { JsonRpc };
210
+ //# sourceMappingURL=json-rpc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-rpc.mjs","sources":["../../../src/pullClient/json-rpc.ts"],"sourcesContent":["import type { RpcCommand, RpcCommandResult, TypeRpcResponseAwaiters, JsonRpcRequest, RpcRequest, TypeConnector, TypeJsonRpcConfig, TypePullClientMessageBatch } from '../types/pull'\nimport type { LoggerInterface } from '../logger'\nimport { LoggerFactory } from '../logger'\nimport { ErrorNotConnected, ErrorTimeout } from './errors'\nimport { Type } from '../tools/type'\nimport { Text } from '../tools/text'\nimport { ListRpcError } from '../types/pull'\n\nconst JSON_RPC_VERSION = '2.0'\n\nexport class JsonRpc {\n private _logger: LoggerInterface\n\n private _connector: TypeConnector\n private _idCounter: number = 0\n\n private _handlers: Record<string, (params: any) => RpcCommandResult> = {}\n\n private _rpcResponseAwaiters: Map<number, TypeRpcResponseAwaiters> = new Map()\n\n constructor(options: TypeJsonRpcConfig) {\n this._logger = LoggerFactory.createNullLogger()\n this._connector = options.connector\n\n if (Type.isPlainObject(options.handlers)) {\n for (const method in options.handlers) {\n this.handle(method, options.handlers[method]!)\n }\n }\n }\n\n setLogger(logger: LoggerInterface): void {\n this._logger = logger\n }\n\n getLogger(): LoggerInterface {\n return this._logger\n }\n\n /**\n * @param {string} method\n * @param {function} handler\n */\n handle(method: string, handler: (params: any) => RpcCommandResult) {\n this._handlers[method] = handler\n }\n\n /**\n * Sends RPC command to the server.\n *\n * @param {string} method Method name\n * @param {object} params\n * @param {int} timeout\n * @returns {Promise}\n */\n async executeOutgoingRpcCommand(\n method: string,\n params: object,\n timeout: number = 5\n ): Promise<any> {\n return new Promise((resolve, reject) => {\n const request = this.createRequest(method, params)\n\n if (!this._connector.send(JSON.stringify(request))) {\n reject(new ErrorNotConnected('websocket is not connected'))\n }\n\n const timeoutHandler = setTimeout(() => {\n this._rpcResponseAwaiters.delete(request.id)\n reject(new ErrorTimeout('no response'))\n }, timeout * 1_000)\n\n this._rpcResponseAwaiters.set(request.id, {\n resolve,\n reject,\n timeout: timeoutHandler\n } as unknown as TypeRpcResponseAwaiters)\n })\n }\n\n /**\n * Executes array or rpc commands.\n * Returns an array of promises, each promise will be resolved individually.\n *\n * @param {JsonRpcRequest[]} batch\n * @returns {Promise[]}\n */\n // @ts-expect-error When we rewrite it to something more modern, then we'll remove this\n private executeOutgoingRpcBatch(batch: JsonRpcRequest[]): Promise<any>[] {\n const requests: RpcRequest[] = []\n const promises: Promise<any>[] = []\n\n // eslint-disable-next-line\n\t\tbatch.forEach(({ method, params, id }) => {\n const request = this.createRequest(method, params, id)\n requests.push(request)\n promises.push(\n new Promise((resolve, reject) =>\n this._rpcResponseAwaiters.set(request.id, {\n resolve,\n reject\n } as TypeRpcResponseAwaiters)\n )\n )\n })\n\n this._connector.send(JSON.stringify(requests))\n return promises\n }\n\n private processRpcResponse(response: RpcCommandResult): void {\n if (\n 'id' in response\n && this._rpcResponseAwaiters.has(Number(response.id))\n ) {\n const awaiter = this._rpcResponseAwaiters.get(Number(response.id))\n if (awaiter) {\n if ('result' in response) {\n awaiter.resolve(response.result)\n } else if ('error' in response) {\n awaiter.reject(response?.error || 'error')\n } else {\n awaiter.reject('wrong response structure')\n }\n\n clearTimeout(awaiter.timeout)\n this._rpcResponseAwaiters.delete(Number(response.id))\n }\n\n return\n }\n\n this.getLogger().error(`${Text.getDateForLog()}: Pull: Received rpc response with unknown id`, { response })\n }\n\n parseJsonRpcMessage(\n message: string\n ): RpcCommandResult[] | RpcCommandResult {\n let decoded\n try {\n decoded = JSON.parse(message)\n } catch (error) {\n this.getLogger().error(\n `${Text.getDateForLog()}: Pull: Could not decode json rpc message`,\n { error }\n )\n\n return []\n }\n\n if (Type.isArray(decoded)) {\n return this.executeIncomingRpcBatch(decoded)\n } else if (Type.isJsonRpcRequest(decoded)) {\n return this.executeIncomingRpcCommand(decoded)\n } else if (Type.isJsonRpcResponse(decoded)) {\n this.processRpcResponse(decoded)\n return []\n } else {\n this.getLogger().error(\n `${Text.getDateForLog()}: Pull: unknown rpc packet`,\n { decoded }\n )\n }\n\n return []\n }\n\n /**\n * Executes RPC command, received from the server\n *\n * @param {string} method\n * @param {object} params\n * @returns {object} RpcCommandResult\n */\n private executeIncomingRpcCommand({\n method,\n params\n }: RpcCommand): RpcCommandResult {\n if (method in this._handlers) {\n return this._handlers[method]!.call(this, params || {})\n }\n\n return {\n jsonrpc: JSON_RPC_VERSION,\n error: ListRpcError.MethodNotFound\n } as RpcCommandResult\n }\n\n private executeIncomingRpcBatch(batch: RpcCommand[]): RpcCommandResult[] {\n const result: RpcCommandResult[] = []\n\n for (const command of batch) {\n if ('jsonrpc' in command) {\n if ('method' in command) {\n const commandResult = this.executeIncomingRpcCommand(command)\n if (commandResult) {\n commandResult['jsonrpc'] = JSON_RPC_VERSION\n commandResult['id'] = command['id']\n\n result.push(commandResult)\n }\n } else {\n this.processRpcResponse(command)\n }\n } else {\n this.getLogger().error(\n `${Text.getDateForLog()}: Pull: unknown rpc command in batch`,\n { command }\n )\n\n result.push({\n jsonrpc: JSON_RPC_VERSION,\n error: ListRpcError.InvalidRequest\n } as RpcCommandResult)\n }\n }\n\n return result\n }\n\n private nextId(): number {\n return ++this._idCounter\n }\n\n public createPublishRequest(\n messageBatch: TypePullClientMessageBatch[]\n ): RpcRequest[] {\n return messageBatch.map(message => this.createRequest('publish', message))\n }\n\n private createRequest(method: string, params: any, id?: number): RpcRequest {\n if (!id) {\n id = this.nextId()\n }\n\n return {\n jsonrpc: JSON_RPC_VERSION,\n method,\n params,\n id\n } as RpcRequest\n }\n}\n"],"names":[],"mappings":"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"}