@webex/calling 3.12.0-mobius-socket.19 → 3.12.0-mobius-socket.20

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 (31) hide show
  1. package/dist/mobius-socket/errors.js +47 -6
  2. package/dist/mobius-socket/errors.js.map +1 -1
  3. package/dist/mobius-socket/index.js +4 -10
  4. package/dist/mobius-socket/index.js.map +1 -1
  5. package/dist/mobius-socket/mobius-socket.js +151 -140
  6. package/dist/mobius-socket/mobius-socket.js.map +1 -1
  7. package/dist/mobius-socket/mobius-socket.test.js +18 -11
  8. package/dist/mobius-socket/mobius-socket.test.js.map +1 -1
  9. package/dist/mobius-socket/socket/constants.js +14 -0
  10. package/dist/mobius-socket/socket/constants.js.map +1 -1
  11. package/dist/mobius-socket/socket/socket-base.js +93 -138
  12. package/dist/mobius-socket/socket/socket-base.js.map +1 -1
  13. package/dist/mobius-socket/socket/types.js.map +1 -1
  14. package/dist/mobius-socket/socket.test.js +3 -3
  15. package/dist/mobius-socket/socket.test.js.map +1 -1
  16. package/dist/mobius-socket/types.js.map +1 -1
  17. package/dist/module/mobius-socket/errors.js +17 -0
  18. package/dist/module/mobius-socket/mobius-socket.js +39 -41
  19. package/dist/module/mobius-socket/socket/socket-base.js +26 -58
  20. package/dist/types/mobius-socket/errors.d.ts +4 -1
  21. package/dist/types/mobius-socket/errors.d.ts.map +1 -1
  22. package/dist/types/mobius-socket/index.d.ts.map +1 -1
  23. package/dist/types/mobius-socket/mobius-socket.d.ts +14 -1
  24. package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -1
  25. package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -1
  26. package/dist/types/mobius-socket/socket/socket-base.d.ts +0 -1
  27. package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -1
  28. package/dist/types/mobius-socket/socket/types.d.ts +0 -8
  29. package/dist/types/mobius-socket/socket/types.d.ts.map +1 -1
  30. package/dist/types/mobius-socket/types.d.ts.map +1 -1
  31. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["_crypto","require","_sinon","_interopRequireDefault","_testHelperChai","_testHelperMockWebex","_testHelperMockWebSocket","_index","_interopRequireWildcard","_errors","_config","_socket","_mochaHelpers","_constants","_promiseTick","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t3","hasOwnProperty","call","_Object$defineProperty2","_Object$getOwnPropertyDescriptor","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","crypto","randomUUID","_defineProperty3","value","configurable","describe","createUuid","afterEach","resetMobiusSocketInstance","it","configuredWebex","MockWebex","instance","getMobiusSocketInstance","assert","instanceOf","MobiusSocket","deepEqual","config","mobiusConfig","mobiusSocket","consumerConfig","initialConnectionMaxRetries","backoffTimeReset","mockWebSocket","socketOpenStub","usingFakeTimers","webex","statusStartTypingMessage","_stringify","id","data","eventType","actor","conversationId","timestamp","_now","trackingId","concat","emitAuthResponse","_ref","undefined","_ref$statusCode","statusCode","_ref$statusMessage","statusMessage","authRequest","JSON","parse","send","lastCall","args","emit","type","subtype","MESSAGE_TYPES","AUTH","createAsyncEvent","eventId","createSessionSocket","close","sinon","stub","returns","_promise","resolve","removeAllListeners","countGenericEventEmits","emitSpy","getCalls","beforeEach","jest","useFakeTimers","doNotFake","credentials","refresh","getUserToken","toString","internal","device","registered","register","webSocketUrl","getWebSocketUrl","useServiceCatalogUrl","services","convertUrlToPriorityHostUrl","markFailedUrl","switchActiveClusterIds","invalidateCache","isValidHost","metrics","submitClientMetrics","logger","console","Socket","callsFake","_len","Array","_key","_construct2","MockWebSocket","origOpen","prototype","open","_len2","_key2","promise","_apply","process","nextTick","_asyncToGenerator2","_regenerator","mark","_callee","_t","wrap","_context","prev","next","useRealTimers","disconnect","restore","getWebSocketConstructor","setTimeout","stop","notCalled","connect","then","calledOnce","isFalse","connected","isTrue","connecting","calledWith","match","any","check","reject","ConnectionError","promiseTick","advanceTimersByTime","calledTwice","calledThrice","isRejected","skipInBrowser","maxRetries","hasEverConnected","all","code","onCall","BadRequest","UnknownResponse","called","NotAuthorized","Forbidden","backoffSpy","spy","_backoffSpy$firstCall","isUndefined","firstCall","_backoffSpy$firstCall2","socketUrl","equal","defaultMobiusSocketOptions","testProxyUrl","agent","proxy","href","reason","on","readyState","_callee2","_context2","isDefined","backoffCall","socket","attemptConnection","_reason","message","wssResponseTimeout","_callee3","requestPromise","requestPayload","response","_context3","sendWssRequest","token","sent","_callee4","authPayload","_context4","_callee5","error","_context5","name","_callee6","_context6","_callee7","_context7","_callee8","_context8","_callee9","_context9","url","getConnectedWebSocketUrl","event","emitEvent","res","prepareUrl","wsUrl","connectWithBackoffStub","shutdownSwitchoverBackoffCall","placeholder","handleImminentShutdown","callArgs","isObject","isShutdownSwitchover","attemptOptions","done","throws","Error","connectWithBackoff","shutdownEvent","result","onmessage","regularEvent","someField","sequenceNumber","_callee0","_context0","originalDedupCacheMaxSize","dedupCacheMaxSize","_callee1","_context1","_callee10","_context10","_callee11","_context11","_callee12","_context12","mockSocket","anotherSocket","reconnect","closeEvent","onclose","strictEqual","resetHistory","isOk","_callee13","emitCalls","hasCompleteEvent","_context13","context","onSuccess","newSocket","some","_callee14","testError","hasFailureEvent","_context14","_callee15","_context15","callCount","prepareUrlStub","getUserTokenStub","_callee16","_context16","prepareAndOpenSocket","_callee17","_context17","forceCloseDelay","_callee18","_context18","_callee19","_context19","_callee20","_context20","customOption","_callee21","_context21","_callee22","_t2","_context22","fail","prepareAndOpenSocketStub","callback","abort","attachSocketEventListeners","_callee23","originalSocket","_context23","exists","_callee24","onSuccessStub","_context24","_callee25","_context25","_callee26","_context26","catch","err","attemptStub","cb","abortStub","_callee27","_context27","_callee28","_context28"],"sources":["mobius-socket.test.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {randomUUID} from 'crypto';\nimport sinon from 'sinon';\nimport {assert} from '@webex/test-helper-chai';\nimport MockWebex from '@webex/test-helper-mock-webex';\nimport MockWebSocket from '@webex/test-helper-mock-web-socket';\nimport MobiusSocket, {getMobiusSocketInstance, resetMobiusSocketInstance} from './index';\nimport {BadRequest, NotAuthorized, Forbidden, UnknownResponse, ConnectionError} from './errors';\nimport mobiusConfig from './config';\nimport Socket from './socket';\nimport {skipInBrowser} from './test/mocha-helpers';\nimport {MESSAGE_TYPES} from './socket/constants';\n\nimport promiseTick from './test/promise-tick';\n\nif (!crypto.randomUUID) {\n Object.defineProperty(crypto, 'randomUUID', {\n value: randomUUID,\n configurable: true,\n });\n}\n\ndescribe('plugin-mobius-socket', () => {\n const createUuid = () => crypto.randomUUID();\n\n describe('getMobiusSocketInstance', () => {\n afterEach(() => {\n resetMobiusSocketInstance();\n });\n\n it('uses package config when consumer config is not provided', () => {\n const configuredWebex = new MockWebex();\n const instance = getMobiusSocketInstance(configuredWebex);\n\n assert.instanceOf(instance, MobiusSocket);\n assert.deepEqual(instance.config, mobiusConfig.mobiusSocket);\n });\n\n it('uses consumer config when it is provided', () => {\n const configuredWebex = new MockWebex();\n const consumerConfig = {\n initialConnectionMaxRetries: 0,\n backoffTimeReset: 1234,\n };\n\n const instance = getMobiusSocketInstance(configuredWebex, consumerConfig);\n\n assert.instanceOf(instance, MobiusSocket);\n assert.deepEqual(instance.config, {\n ...mobiusConfig.mobiusSocket,\n ...consumerConfig,\n });\n });\n });\n\n describe('MobiusSocket', () => {\n let mobiusSocket;\n let mockWebSocket;\n let socketOpenStub;\n let usingFakeTimers;\n let webex;\n\n const statusStartTypingMessage = JSON.stringify({\n id: createUuid(),\n data: {\n eventType: 'status.start_typing',\n actor: {\n id: 'actorId',\n },\n conversationId: createUuid(),\n },\n timestamp: Date.now(),\n trackingId: `suffix_${createUuid()}_${Date.now()}`,\n });\n\n const emitAuthResponse = ({statusCode = 200, statusMessage = 'OK'} = {}) => {\n const authRequest = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: MESSAGE_TYPES.AUTH,\n trackingId: authRequest.trackingId,\n statusCode,\n statusMessage,\n }),\n });\n };\n\n const createAsyncEvent = (eventId, eventType = 'custom.event') => ({\n data: {\n type: 'async_event',\n eventId,\n data: {\n eventType,\n },\n },\n });\n\n const createSessionSocket = () => ({\n close: sinon.stub().returns(Promise.resolve()),\n removeAllListeners: sinon.stub(),\n });\n\n const countGenericEventEmits = (emitSpy) =>\n emitSpy.getCalls().filter((call) => call.args[0] === 'event').length;\n\n beforeEach(() => {\n jest.useFakeTimers({doNotFake: ['nextTick']});\n usingFakeTimers = true;\n });\n\n beforeEach(() => {\n webex = new MockWebex();\n webex.credentials = {\n refresh: sinon.stub().returns(Promise.resolve()),\n getUserToken: sinon.stub().returns(\n Promise.resolve({\n toString() {\n return 'Bearer FAKE';\n },\n })\n ),\n };\n webex.internal.device = {\n registered: true,\n register: sinon.stub().returns(Promise.resolve()),\n refresh: sinon.stub().returns(Promise.resolve()),\n webSocketUrl: 'ws://example.com',\n getWebSocketUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),\n useServiceCatalogUrl: sinon\n .stub()\n .returns(Promise.resolve('https://service-catalog-url.com')),\n };\n webex.internal.services = {\n convertUrlToPriorityHostUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),\n markFailedUrl: sinon.stub().returns(Promise.resolve()),\n switchActiveClusterIds: sinon.stub(),\n invalidateCache: sinon.stub(),\n isValidHost: sinon.stub().returns(Promise.resolve(true)),\n };\n webex.internal.metrics.submitClientMetrics = sinon.stub();\n webex.trackingId = 'fakeTrackingId';\n webex.logger = console;\n\n sinon.stub(Socket, 'getWebSocketConstructor').callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n\n return mockWebSocket;\n }\n );\n\n const origOpen = Socket.prototype.open;\n\n socketOpenStub = sinon.stub(Socket.prototype, 'open').callsFake(function (...args) {\n const promise = Reflect.apply(origOpen, this, args);\n\n process.nextTick(() => {\n mockWebSocket.open();\n // Simulate Mobius auth response after socket open\n process.nextTick(() => {\n emitAuthResponse();\n });\n });\n\n return promise;\n });\n\n mobiusSocket = new MobiusSocket(webex, {...mobiusConfig.mobiusSocket});\n });\n\n afterEach(async () => {\n if (usingFakeTimers) {\n jest.useRealTimers();\n usingFakeTimers = false;\n }\n\n // Clean up MobiusSocket connections and internal state\n if (mobiusSocket) {\n try {\n await mobiusSocket.disconnect();\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n\n // Ensure mock socket is properly closed\n if (mockWebSocket && typeof mockWebSocket.close === 'function') {\n try {\n mockWebSocket.close();\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n\n if (socketOpenStub) {\n socketOpenStub.restore();\n }\n\n if (Socket.getWebSocketConstructor.restore) {\n Socket.getWebSocketConstructor.restore();\n }\n\n // Small delay to ensure all async operations complete\n await new Promise((resolve) => {\n setTimeout(resolve, 10);\n });\n });\n\n describe('#connect()', () => {\n it('lazily registers the device', () => {\n webex.internal.device.registered = false;\n assert.notCalled(webex.internal.device.register);\n const promise = mobiusSocket.connect();\n\n return promise.then(() => {\n assert.calledOnce(webex.internal.device.register);\n });\n });\n\n it('connects to MobiusSocket using default url', () => {\n const promise = mobiusSocket.connect();\n\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(socketOpenStub, 'ws://example.com', sinon.match.any);\n });\n });\n\n describe('when `maxRetries` is set', () => {\n const check = () => {\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.reject(new ConnectionError()));\n assert.notCalled(Socket.prototype.open);\n\n const promise = mobiusSocket.connect();\n\n return promiseTick(5)\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n\n return promiseTick(5);\n })\n .then(() => {\n jest.advanceTimersByTime(mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledTwice(Socket.prototype.open);\n jest.advanceTimersByTime(2 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n jest.advanceTimersByTime(5 * mobiusSocket.config.backoffTimeReset);\n\n return assert.isRejected(promise);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n });\n };\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n skipInBrowser(it)('fails after configured `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.maxRetries = 0;\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n\n return check();\n });\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n // if initial retries is zero and mobiusSocket has never connected, do not retry\n skipInBrowser(it)('fails immediately when `initialConnectionMaxRetries` is 0', () => {\n mobiusSocket.config.maxRetries = 2;\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.reject(new ConnectionError()));\n assert.notCalled(Socket.prototype.open);\n\n const promise = mobiusSocket.connect();\n\n return promiseTick(5)\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n\n return assert.isRejected(promise);\n })\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n });\n });\n\n // initial retries is non-zero so takes precedence over maxRetries when mobiusSocket has never connected\n skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.maxRetries = 0;\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n\n return check();\n });\n\n // initial retries is non-zero so takes precedence over maxRetries when mobiusSocket has never connected\n skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n mobiusSocket.config.maxRetries = 5;\n\n return check();\n });\n\n // when mobiusSocket has connected maxRetries is used and the initialConnectionMaxRetries is ignored\n skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 5;\n mobiusSocket.config.maxRetries = 2;\n mobiusSocket.hasEverConnected = true;\n\n return check();\n });\n });\n\n it('can safely be called multiple times', () => {\n const promise = Promise.all([\n mobiusSocket.connect(),\n mobiusSocket.connect(),\n mobiusSocket.connect(),\n mobiusSocket.connect(),\n ]);\n\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.calledOnce(Socket.prototype.open);\n });\n });\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n skipInBrowser(describe)('when the connection fails', () => {\n it('backs off exponentially', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.reject(new ConnectionError({code: 4001})));\n // Note: onCall is zero-based\n socketOpenStub.onCall(2).returns(Promise.resolve(new MockWebSocket()));\n assert.notCalled(Socket.prototype.open);\n\n const promise = mobiusSocket.connect();\n\n return promiseTick(5)\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n\n // I'm not sure why, but it's important the clock doesn't advance\n // until a tick happens\n return promiseTick(5);\n })\n .then(() => {\n jest.advanceTimersByTime(mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledTwice(Socket.prototype.open);\n jest.advanceTimersByTime(2 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n jest.advanceTimersByTime(5 * mobiusSocket.config.backoffTimeReset);\n\n return promise;\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n jest.advanceTimersByTime(8 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n });\n });\n\n describe('with `BadRequest`', () => {\n it('fails permanently', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new BadRequest({code: 4400})));\n\n return assert.isRejected(mobiusSocket.connect());\n });\n });\n\n describe('with `UnknownResponse`', () => {\n it('triggers a device refresh', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 1;\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open').returns(Promise.resolve());\n socketOpenStub.onCall(0).returns(Promise.reject(new UnknownResponse({code: 4444})));\n assert.notCalled(webex.credentials.refresh);\n assert.notCalled(webex.internal.device.refresh);\n const promise = mobiusSocket.connect();\n\n return promiseTick(7).then(() => {\n assert.notCalled(webex.credentials.refresh);\n assert.called(webex.internal.device.refresh);\n jest.advanceTimersByTime(1000);\n\n return promise;\n });\n });\n });\n\n describe('with `NotAuthorized`', () => {\n it('triggers a token refresh', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 1;\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open').returns(Promise.resolve());\n socketOpenStub.onCall(0).returns(Promise.reject(new NotAuthorized({code: 4401})));\n assert.notCalled(webex.credentials.refresh);\n assert.notCalled(webex.internal.device.refresh);\n const promise = mobiusSocket.connect();\n\n return promiseTick(7).then(() => {\n assert.called(webex.credentials.refresh);\n assert.notCalled(webex.internal.device.refresh);\n jest.advanceTimersByTime(1000);\n\n return promise;\n });\n });\n });\n\n describe('with `Forbidden`', () => {\n it('fails permanently', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new Forbidden({code: 4403})));\n\n return assert.isRejected(mobiusSocket.connect());\n });\n });\n\n // describe(`with \\`NotFound\\``, () => {\n // it(`triggers a device refresh`, () => {\n // socketOpenStub.restore();\n // socketOpenStub = sinon.stub(Socket.prototype, `open`).returns(Promise.resolve());\n // socketOpenStub.onCall(0).returns(Promise.reject(new NotFound({code: 4404})));\n // assert.notCalled(webex.credentials.refresh);\n // assert.notCalled(webex.internal.device.refresh);\n // const promise = mobiusSocket.connect();\n // return promiseTick(6)\n // .then(() => {\n // assert.notCalled(webex.credentials.refresh);\n // assert.called(webex.internal.device.refresh);\n // clock.tick(1000);\n // return assert.isFulfilled(promise);\n // });\n // });\n // });\n });\n\n describe('when connected', () => {\n it('resolves immediately', () =>\n mobiusSocket.connect().then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n const promise = mobiusSocket.connect();\n\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n\n return promise;\n }));\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n skipInBrowser(it)('does not continue attempting to connect', () => {\n const promise = mobiusSocket.connect();\n\n // Wait for the connection to be established before proceeding\n mockWebSocket.open();\n\n return promise.then(() =>\n promiseTick(2)\n .then(() => {\n jest.advanceTimersByTime(6 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(2);\n })\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n })\n );\n });\n });\n\n describe('when webSocketUrl is provided', () => {\n it('connects to MobiusSocket with provided url', () => {\n const webSocketUrl = 'ws://providedurl.com';\n const promise = mobiusSocket.connect(webSocketUrl);\n\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(Socket.prototype.open, 'ws://providedurl.com', sinon.match.any);\n });\n });\n });\n\n describe('when config.initialConnectionMaxRetries is set to 0', () => {\n it('connects successfully through the shared backoff flow', () => {\n const backoffSpy = sinon.spy(mobiusSocket, 'connectWithBackoff');\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n const promise = mobiusSocket.connect('ws://example.com');\n\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.isTrue(mobiusSocket.hasEverConnected, 'hasEverConnected is true');\n assert.calledOnce(Socket.prototype.open);\n assert.calledOnce(backoffSpy);\n assert.isUndefined(backoffSpy.firstCall.args[2]?.initialConnectionMaxRetries);\n backoffSpy.restore();\n });\n });\n\n it('rejects immediately on failure without retrying', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new ConnectionError({code: 4001})));\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n\n const promise = mobiusSocket.connect('ws://example.com');\n\n return assert.isRejected(promise).then(() => {\n assert.calledOnce(Socket.prototype.open);\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n });\n });\n\n it('uses config-driven initial retry behavior in the shared backoff strategy', () => {\n const backoffSpy = sinon.spy(mobiusSocket, 'connectWithBackoff');\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n\n const promise = mobiusSocket.connect('ws://example.com');\n\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.calledOnce(backoffSpy);\n assert.isUndefined(backoffSpy.firstCall.args[2]?.initialConnectionMaxRetries);\n backoffSpy.restore();\n });\n });\n\n it('treats a different explicit URL as a fresh initial connect', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n mobiusSocket.hasEverConnected = true;\n mobiusSocket.socketUrl = 'ws://old-url.com';\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n mobiusSocket.config.maxRetries = 5;\n\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new ConnectionError({code: 4001})));\n\n const promise = mobiusSocket.connect('ws://new-url.com');\n\n return assert.isRejected(promise).then(() => {\n assert.calledOnce(Socket.prototype.open);\n assert.equal(mobiusSocket.socketUrl, 'ws://new-url.com');\n assert.isFalse(mobiusSocket.hasEverConnected, 'hasEverConnected is false');\n });\n });\n });\n });\n\n describe('Websocket proxy agent', () => {\n afterEach(() => {\n delete webex.config.defaultMobiusSocketOptions;\n });\n\n it('connects to MobiusSocket using proxy agent', () => {\n const testProxyUrl = 'http://proxyurl.com:80';\n\n webex.config.defaultMobiusSocketOptions = {agent: {proxy: {href: testProxyUrl}}};\n const promise = mobiusSocket.connect();\n\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(\n socketOpenStub,\n 'ws://example.com',\n sinon.match.has(\n 'agent',\n sinon.match.has('proxy', sinon.match.has('href', testProxyUrl))\n )\n );\n });\n });\n\n it('connects to MobiusSocket without proxy agent', () => {\n const promise = mobiusSocket.connect();\n\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(socketOpenStub, 'ws://example.com', sinon.match({agent: undefined}));\n });\n });\n });\n\n describe('#disconnect()', () => {\n it('disconnects the WebSocket', () =>\n mobiusSocket\n .connect()\n .then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n const promise = mobiusSocket.disconnect();\n\n mockWebSocket.emit('close', {\n code: 1000,\n reason: 'Done',\n });\n\n return promise;\n })\n .then(() => {\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.isUndefined(\n mobiusSocket.mockWebSocket,\n 'MobiusSocket does not have a mockWebSocket'\n );\n }));\n\n it('disconnects the WebSocket with code 3050', () =>\n mobiusSocket\n .connect()\n .then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n const promise = mobiusSocket.disconnect();\n\n mockWebSocket.emit('close', {\n code: 3050,\n reason: 'done (permanent)',\n });\n\n return promise;\n })\n .then(() => {\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.isUndefined(\n mobiusSocket.mockWebSocket,\n 'MobiusSocket does not have a mockWebSocket'\n );\n }));\n\n it('stops emitting message events', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('event:status.start_typing', spy);\n\n return mobiusSocket\n .connect()\n .then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n\n assert.notCalled(spy);\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n })\n .then(() => {\n assert.calledOnce(spy);\n\n const promise = mobiusSocket.disconnect();\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n mockWebSocket.emit('close', {\n code: 1000,\n reason: 'Done',\n });\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n\n return promise;\n })\n\n .then(() => {\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n assert.calledOnce(spy);\n });\n });\n\n describe('when there is a connection attempt inflight', () => {\n it('stops the attempt when disconnect called', () => {\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.onCall(0).returns(\n // Delay the opening of the socket so that disconnect is called while open\n // is in progress\n promiseTick(2 * mobiusSocket.config.backoffTimeReset)\n // Pretend the socket opened successfully. Failing should be fine too but\n // it generates more console output.\n .then(() => Promise.resolve())\n );\n const promise = mobiusSocket.connect();\n\n // Wait for the connect call to setup\n return promiseTick(mobiusSocket.config.backoffTimeReset).then(async () => {\n // By this time backoffCall and mobiusSocket socket should be defined by the\n // 'connect' call\n assert.isDefined(mobiusSocket.backoffCall, 'MobiusSocket backoffCall is not defined');\n assert.isDefined(mobiusSocket.socket, 'MobiusSocket socket is not defined');\n // Calling disconnect will abort the backoffCall, close the socket, and\n // reject the connect\n mobiusSocket.disconnect();\n assert.isUndefined(\n mobiusSocket.backoffCall,\n 'MobiusSocket backoffCall is still defined'\n );\n // The socket will never be unset (which seems bad)\n assert.isDefined(mobiusSocket.socket, 'MobiusSocket socket is not defined');\n\n await assert.isRejected(promise);\n });\n });\n\n it('stops the attempt when backoffCall is undefined', () => {\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.resolve());\n\n let reason;\n\n mobiusSocket.backoffCall = undefined;\n\n const promise = mobiusSocket.attemptConnection('ws://example.com', (_reason) => {\n reason = _reason;\n });\n\n return promiseTick(mobiusSocket.config.backoffTimeReset).then(() => {\n assert.match(reason.message, /prevent socket open when backoffCall no longer defined/);\n\n // Ensure the promise was actually rejected (short-circuited)\n return assert.isRejected(promise);\n });\n });\n });\n });\n\n describe('#sendWssRequest()', () => {\n beforeEach(() => {\n mobiusSocket.config.wssResponseTimeout = 100;\n });\n\n it('resolves when a matching response_event arrives', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n await promiseTick();\n\n const requestPayload = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n assert.equal(requestPayload.data.token, 'test');\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: 'auth',\n trackingId: requestPayload.trackingId,\n statusCode: 200,\n statusMessage: 'OK',\n }),\n });\n\n const response = await requestPromise;\n\n assert.equal(response.type, 'response_event');\n assert.equal(response.subtype, 'auth');\n assert.equal(response.trackingId, requestPayload.trackingId);\n assert.equal(response.statusCode, 200);\n });\n\n it('strips the Bearer prefix from connect-time auth token', async () => {\n await mobiusSocket.connect();\n\n const authPayload = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(authPayload.type, MESSAGE_TYPES.AUTH);\n assert.equal(authPayload.data.token, 'FAKE');\n });\n\n it('rejects when a matching response_event is non-2xx', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n await promiseTick();\n\n const requestPayload = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: 'auth',\n trackingId: requestPayload.trackingId,\n statusCode: 403,\n statusMessage: 'Forbidden',\n }),\n });\n\n const error = await assert.isRejected(requestPromise);\n\n assert.equal(error.name, 'MobiusSocketResponseError');\n assert.equal(error.statusCode, 403);\n assert.equal(error.statusMessage, 'Forbidden');\n assert.equal(error.trackingId, requestPayload.trackingId);\n });\n\n it('rejects when the matching response does not arrive before timeout', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n jest.advanceTimersByTime(101);\n await promiseTick();\n\n const error = await assert.isRejected(requestPromise);\n\n assert.equal(error.name, 'MobiusSocketResponseError');\n assert.equal(error.statusCode, 408);\n assert.equal(error.statusMessage, 'Mobius websocket response timed out');\n });\n\n it('rejects with a clear error when the matching response is missing status code', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n await promiseTick();\n\n const requestPayload = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: 'auth',\n trackingId: requestPayload.trackingId,\n }),\n });\n\n const error = await assert.isRejected(requestPromise);\n\n assert.equal(error.name, 'MobiusSocketResponseError');\n assert.isUndefined(error.statusCode);\n assert.equal(error.statusMessage, 'Socket response missing status code');\n });\n\n it('rejects pending requests when the active socket closes', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n mockWebSocket.emit('close', {\n code: 1003,\n reason: 'service rejected request',\n });\n\n const error = await assert.isRejected(requestPromise);\n\n assert.instanceOf(error, ConnectionError);\n assert.equal(error.code, 1003);\n assert.equal(error.reason, 'service rejected request');\n });\n\n it('rejects array payloads', async () => {\n await mobiusSocket.connect();\n\n const error = await assert.isRejected(mobiusSocket.sendWssRequest([]));\n\n assert.equal(error.message, '`payload` is required');\n });\n });\n\n describe('#getConnectedWebSocketUrl()', () => {\n it('returns the connected websocket url', () => {\n mobiusSocket.socket = {\n connected: true,\n url: 'ws://connected-url.com',\n };\n\n assert.equal(mobiusSocket.getConnectedWebSocketUrl(), 'ws://connected-url.com');\n });\n\n it('returns undefined when not connected', () => {\n mobiusSocket.socket = {\n connected: false,\n url: 'ws://disconnected-url.com',\n };\n\n assert.isUndefined(mobiusSocket.getConnectedWebSocketUrl());\n });\n });\n\n describe('#_emit()', () => {\n it('emits Error-safe events and log the error with the call parameters', () => {\n const error = 'error';\n const event = {data: 'some data'};\n mobiusSocket.on('break', () => {\n throw error;\n });\n sinon.stub(mobiusSocket.logger, 'error');\n\n return Promise.resolve(mobiusSocket.emitEvent('break', event)).then((res) => {\n assert.calledWith(\n mobiusSocket.logger.error,\n 'MobiusSocket: error occurred in event handler:',\n error,\n ' with args: ',\n ['break', event]\n );\n\n return res;\n });\n });\n });\n\n describe('#_prepareUrl()', () => {\n it('returns the provided URL as-is (no Mercury URL transforms)', () =>\n mobiusSocket.prepareUrl('ws://provided.com').then((wsUrl) => {\n assert.equal(wsUrl, 'ws://provided.com');\n }));\n\n it('falls back to device webSocketUrl when no URL is provided', () =>\n mobiusSocket.prepareUrl().then((wsUrl) => {\n assert.equal(wsUrl, 'ws://example.com');\n }));\n });\n\n describe('shutdown protocol', () => {\n describe('#_handleImminentShutdown()', () => {\n let connectWithBackoffStub;\n\n beforeEach(() => {\n mobiusSocket.connected = true;\n mobiusSocket.socket = {\n url: 'ws://old-socket.com',\n removeAllListeners: sinon.stub(),\n };\n connectWithBackoffStub = sinon.stub(mobiusSocket, 'connectWithBackoff');\n connectWithBackoffStub.returns(Promise.resolve());\n sinon.stub(mobiusSocket, 'emitEvent');\n });\n\n afterEach(() => {\n connectWithBackoffStub.restore();\n mobiusSocket.emitEvent.restore();\n });\n\n it('should be idempotent - no-op if already in progress', () => {\n mobiusSocket.shutdownSwitchoverBackoffCall = {placeholder: true};\n\n mobiusSocket.handleImminentShutdown();\n\n assert.notCalled(connectWithBackoffStub);\n });\n\n it('should set switchover flags when called', () => {\n mobiusSocket.handleImminentShutdown();\n\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n assert.isUndefined(callArgs[0]); // webSocketUrl\n assert.isObject(callArgs[1]); // context\n assert.isTrue(callArgs[1].isShutdownSwitchover);\n assert.isObject(callArgs[1].attemptOptions);\n assert.isTrue(callArgs[1].attemptOptions.isShutdownSwitchover);\n });\n\n it('should call _connectWithBackoff with correct parameters', (done) => {\n mobiusSocket.handleImminentShutdown();\n\n process.nextTick(() => {\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n assert.isUndefined(callArgs[0]); // webSocketUrl\n assert.isObject(callArgs[1]); // context\n assert.isTrue(callArgs[1].isShutdownSwitchover);\n assert.isObject(callArgs[1].attemptOptions);\n assert.isTrue(callArgs[1].attemptOptions.isShutdownSwitchover);\n done();\n });\n });\n\n it('should handle exceptions during switchover', () => {\n connectWithBackoffStub.restore();\n sinon.stub(mobiusSocket, 'connectWithBackoff').throws(new Error('Connection failed'));\n\n mobiusSocket.handleImminentShutdown();\n\n assert.isUndefined(mobiusSocket.shutdownSwitchoverBackoffCall);\n mobiusSocket.connectWithBackoff.restore();\n });\n });\n\n describe('#_onmessage() with shutdown message', () => {\n beforeEach(() => {\n sinon.stub(mobiusSocket, 'handleImminentShutdown');\n sinon.stub(mobiusSocket, 'emitEvent');\n });\n\n afterEach(() => {\n mobiusSocket.handleImminentShutdown.restore();\n mobiusSocket.emitEvent.restore();\n });\n\n it('should trigger _handleImminentShutdown on shutdown message', () => {\n const shutdownEvent = {\n data: {\n type: 'shutdown',\n },\n };\n\n const result = mobiusSocket.onmessage(shutdownEvent);\n\n assert.calledOnce(mobiusSocket.handleImminentShutdown);\n assert.calledWith(\n mobiusSocket.emitEvent,\n 'event:mobius_shutdown_imminent',\n shutdownEvent.data\n );\n assert.instanceOf(result, Promise);\n });\n\n it('should handle shutdown message without additional data gracefully', () => {\n const shutdownEvent = {\n data: {\n type: 'shutdown',\n },\n };\n\n mobiusSocket.onmessage(shutdownEvent);\n\n assert.calledOnce(mobiusSocket.handleImminentShutdown);\n });\n\n it('should not trigger shutdown handling for non-shutdown messages', () => {\n const regularEvent = {\n data: {\n type: 'regular',\n data: {\n eventType: 'conversation.activity',\n },\n },\n };\n\n mobiusSocket.onmessage(regularEvent);\n\n assert.notCalled(mobiusSocket.handleImminentShutdown);\n });\n });\n\n describe('#_onmessage() with missing data or eventType', () => {\n beforeEach(() => {\n sinon.stub(mobiusSocket, 'emitEvent');\n });\n\n afterEach(() => {\n mobiusSocket.emitEvent.restore();\n });\n\n it('should not throw when envelope.data is undefined', () => {\n const event = {\n data: {\n type: 'someType',\n // no nested data property\n },\n };\n\n const result = mobiusSocket.onmessage(event);\n\n assert.instanceOf(result, Promise);\n assert.calledWith(mobiusSocket.emitEvent, 'event', event.data);\n });\n\n it('should not throw when data.eventType is undefined', () => {\n const event = {\n data: {\n type: 'someType',\n data: {\n // no eventType property\n someField: 'value',\n },\n },\n };\n\n const result = mobiusSocket.onmessage(event);\n\n assert.instanceOf(result, Promise);\n assert.calledWith(mobiusSocket.emitEvent, 'event', event.data);\n });\n\n it('should emit generic event for messages without eventType (e.g. subscription responses)', () => {\n const event = {\n data: {\n id: 'msg-123',\n sequenceNumber: 5,\n data: {\n statusCode: 200,\n },\n },\n };\n\n const result = mobiusSocket.onmessage(event);\n\n assert.instanceOf(result, Promise);\n assert.calledOnce(mobiusSocket.emitEvent);\n assert.calledWith(mobiusSocket.emitEvent, 'event', event.data);\n });\n\n it('should still process messages with a valid eventType', async () => {\n const event = {\n data: {\n data: {\n eventType: 'conversation.activity',\n },\n },\n };\n\n await mobiusSocket.onmessage(event);\n\n assert.calledWith(mobiusSocket.emitEvent, 'event:conversation', event.data);\n assert.calledWith(mobiusSocket.emitEvent, 'event:conversation.activity', event.data);\n });\n });\n\n describe('#_onmessage() async_event deduplication', () => {\n let originalDedupCacheMaxSize;\n\n beforeEach(() => {\n originalDedupCacheMaxSize = mobiusSocket.config.dedupCacheMaxSize;\n });\n\n afterEach(() => {\n mobiusSocket.config.dedupCacheMaxSize = originalDedupCacheMaxSize;\n });\n\n it('suppresses duplicate async_event messages', async () => {\n const emitSpy = sinon.spy(mobiusSocket, 'emitEvent');\n\n await mobiusSocket.onmessage(createAsyncEvent('evt-1'));\n await mobiusSocket.onmessage(createAsyncEvent('evt-1'));\n\n assert.equal(countGenericEventEmits(emitSpy), 1);\n emitSpy.restore();\n });\n\n it('suppresses duplicate async_event messages across socket replacement without disconnect', async () => {\n const emitSpy = sinon.spy(mobiusSocket, 'emitEvent');\n mobiusSocket.socket = createSessionSocket();\n\n await mobiusSocket.onmessage(createAsyncEvent('evt-2'));\n\n mobiusSocket.socket = createSessionSocket();\n await mobiusSocket.onmessage(createAsyncEvent('evt-2'));\n\n assert.equal(countGenericEventEmits(emitSpy), 1);\n emitSpy.restore();\n });\n\n it('evicts only the oldest eventId when the dedup cache exceeds max size', async () => {\n const emitSpy = sinon.spy(mobiusSocket, 'emitEvent');\n\n mobiusSocket.config.dedupCacheMaxSize = 3;\n\n await mobiusSocket.onmessage(createAsyncEvent('e1'));\n await mobiusSocket.onmessage(createAsyncEvent('e2'));\n await mobiusSocket.onmessage(createAsyncEvent('e3'));\n await mobiusSocket.onmessage(createAsyncEvent('e4'));\n await mobiusSocket.onmessage(createAsyncEvent('e2'));\n await mobiusSocket.onmessage(createAsyncEvent('e1'));\n\n assert.equal(countGenericEventEmits(emitSpy), 5);\n emitSpy.restore();\n });\n\n it('clears the dedup cache on disconnect', async () => {\n const emitSpy = sinon.spy(mobiusSocket, 'emitEvent');\n\n await mobiusSocket.onmessage(createAsyncEvent('evt-3'));\n\n mobiusSocket.socket = createSessionSocket();\n await mobiusSocket.disconnect();\n await mobiusSocket.onmessage(createAsyncEvent('evt-3'));\n\n assert.equal(countGenericEventEmits(emitSpy), 2);\n emitSpy.restore();\n });\n });\n\n describe('#_onclose() with code 4001 (shutdown replacement)', () => {\n let mockSocket;\n let anotherSocket;\n\n beforeEach(() => {\n mockSocket = {\n url: 'ws://active-socket.com',\n removeAllListeners: sinon.stub(),\n };\n anotherSocket = {\n url: 'ws://old-socket.com',\n removeAllListeners: sinon.stub(),\n };\n mobiusSocket.socket = mockSocket;\n mobiusSocket.connected = true;\n sinon.stub(mobiusSocket, 'emitEvent');\n sinon.stub(mobiusSocket, 'reconnect');\n });\n\n afterEach(() => {\n mobiusSocket.emitEvent.restore();\n mobiusSocket.reconnect.restore();\n });\n\n it('should handle active socket close with 4001 - permanent failure', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket.onclose(closeEvent, mockSocket);\n\n assert.calledWith(mobiusSocket.emitEvent, 'offline.permanent', closeEvent);\n assert.notCalled(mobiusSocket.reconnect);\n assert.isFalse(mobiusSocket.connected);\n });\n\n it('should handle non-active socket close with 4001 - no reconnect needed', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket.onclose(closeEvent, anotherSocket);\n\n assert.calledWith(mobiusSocket.emitEvent, 'offline.replaced', closeEvent);\n assert.notCalled(mobiusSocket.reconnect);\n assert.isTrue(mobiusSocket.connected);\n assert.strictEqual(mobiusSocket.socket, mockSocket);\n });\n\n it('should distinguish between active and non-active socket closes', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n // Test non-active socket\n mobiusSocket.onclose(closeEvent, anotherSocket);\n assert.calledWith(mobiusSocket.emitEvent, 'offline.replaced', closeEvent);\n\n // Reset the spy call history\n mobiusSocket.emitEvent.resetHistory();\n\n // Test active socket\n mobiusSocket.onclose(closeEvent, mockSocket);\n assert.calledWith(mobiusSocket.emitEvent, 'offline.permanent', closeEvent);\n });\n\n it('should handle missing sourceSocket parameter (treats as non-active)', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket.onclose(closeEvent, undefined);\n\n assert.calledWith(mobiusSocket.emitEvent, 'offline.replaced', closeEvent);\n assert.notCalled(mobiusSocket.reconnect);\n });\n\n it('should clean up event listeners from non-active socket when it closes', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket.onclose(closeEvent, anotherSocket);\n\n assert.calledOnce(anotherSocket.removeAllListeners);\n });\n\n it('should not clean up listeners from active socket listeners until close handler runs', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket.onclose(closeEvent, mockSocket);\n\n assert.calledOnce(mockSocket.removeAllListeners);\n });\n });\n\n describe('shutdown switchover with retry logic', () => {\n let connectWithBackoffStub;\n\n beforeEach(() => {\n mobiusSocket.connected = true;\n mobiusSocket.socket = {\n url: 'ws://old-socket.com',\n removeAllListeners: sinon.stub(),\n };\n connectWithBackoffStub = sinon.stub(mobiusSocket, 'connectWithBackoff');\n sinon.stub(mobiusSocket, 'emitEvent');\n });\n\n afterEach(() => {\n connectWithBackoffStub.restore();\n mobiusSocket.emitEvent.restore();\n });\n\n it('should call _connectWithBackoff with shutdown switchover context', (done) => {\n connectWithBackoffStub.returns(Promise.resolve());\n\n mobiusSocket.handleImminentShutdown();\n\n process.nextTick(() => {\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n\n assert.isUndefined(callArgs[0]); // webSocketUrl\n assert.isObject(callArgs[1]);\n assert.isTrue(callArgs[1].isShutdownSwitchover);\n assert.isObject(callArgs[1].attemptOptions);\n assert.isTrue(callArgs[1].attemptOptions.isShutdownSwitchover);\n done();\n });\n });\n\n it('should set shutdownSwitchoverBackoffCall during switchover', () => {\n connectWithBackoffStub.callsFake(() => {\n mobiusSocket.shutdownSwitchoverBackoffCall = {placeholder: true};\n\n return new Promise(() => {}); // Never resolves\n });\n\n mobiusSocket.handleImminentShutdown();\n\n assert.isOk(mobiusSocket.shutdownSwitchoverBackoffCall);\n });\n\n it('should emit success event when switchover completes', async () => {\n connectWithBackoffStub.callsFake((url, context) => {\n if (context && context.attemptOptions && context.attemptOptions.onSuccess) {\n const newSocket = {url: 'ws://new-socket.com'};\n context.attemptOptions.onSuccess(newSocket, 'ws://new-socket.com');\n }\n\n return Promise.resolve();\n });\n\n mobiusSocket.handleImminentShutdown();\n\n await promiseTick(50);\n\n const emitCalls = mobiusSocket.emitEvent.getCalls();\n const hasCompleteEvent = emitCalls.some(\n (call) => call.args[0] === 'event:mobius_shutdown_switchover_complete'\n );\n\n assert.isTrue(hasCompleteEvent, 'Should emit switchover complete event');\n });\n\n it('should emit failure event when switchover exhausts retries', async () => {\n const testError = new Error('Connection failed');\n\n connectWithBackoffStub.returns(Promise.reject(testError));\n\n mobiusSocket.handleImminentShutdown();\n await promiseTick(50);\n\n const emitCalls = mobiusSocket.emitEvent.getCalls();\n const hasFailureEvent = emitCalls.some(\n (call) =>\n call.args[0] === 'event:mobius_shutdown_switchover_failed' &&\n call.args[1] &&\n call.args[1].reason === testError\n );\n\n assert.isTrue(hasFailureEvent, 'Should emit switchover failed event');\n });\n\n it('should allow old socket to be closed by server after switchover failure', async () => {\n connectWithBackoffStub.returns(Promise.reject(new Error('Failed')));\n\n mobiusSocket.handleImminentShutdown();\n await promiseTick(50);\n\n assert.equal(mobiusSocket.socket.removeAllListeners.callCount, 0);\n });\n });\n\n describe('#_prepareAndOpenSocket()', () => {\n let mockSocket;\n let prepareUrlStub;\n let getUserTokenStub;\n\n beforeEach(() => {\n mockSocket = {\n open: sinon.stub().returns(Promise.resolve()),\n };\n prepareUrlStub = sinon\n .stub(mobiusSocket, 'prepareUrl')\n .returns(Promise.resolve('ws://example.com'));\n getUserTokenStub = webex.credentials.getUserToken;\n getUserTokenStub.returns(\n Promise.resolve({\n toString: () => 'mock-token',\n })\n );\n });\n\n afterEach(() => {\n prepareUrlStub.restore();\n });\n\n it('should prepare URL and get user token', async () => {\n await mobiusSocket.prepareAndOpenSocket(mockSocket, 'ws://test.com', false);\n\n assert.calledOnce(prepareUrlStub);\n assert.calledWith(prepareUrlStub, 'ws://test.com');\n assert.calledOnce(getUserTokenStub);\n });\n\n it('should open socket with correct options for normal connection', async () => {\n await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, false);\n\n assert.calledOnce(mockSocket.open);\n const callArgs = mockSocket.open.firstCall.args;\n\n assert.equal(callArgs[0], 'ws://example.com');\n assert.isObject(callArgs[1]);\n assert.equal(callArgs[1].token, 'mock-token');\n assert.isDefined(callArgs[1].forceCloseDelay);\n assert.isDefined(callArgs[1].wssResponseTimeout);\n });\n\n it('should log with correct prefix for normal connection', async () => {\n await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, false);\n\n // The method should complete successfully - we're testing it runs without error\n // Actual log message verification is complex due to existing stubs in parent scope\n assert.calledOnce(mockSocket.open);\n });\n\n it('should log with shutdown prefix for shutdown connection', async () => {\n await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, true);\n\n // The method should complete successfully with shutdown flag\n assert.calledOnce(mockSocket.open);\n });\n\n it('should merge custom mobiusSocket options when provided', async () => {\n webex.config.defaultMobiusSocketOptions = {\n customOption: 'test-value',\n wssResponseTimeout: 99999,\n };\n\n await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, false);\n\n const callArgs = mockSocket.open.firstCall.args;\n\n assert.equal(callArgs[1].customOption, 'test-value');\n assert.equal(callArgs[1].wssResponseTimeout, 99999); // Custom value overrides default\n });\n\n it('should return the webSocketUrl after opening', async () => {\n const result = await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, false);\n\n assert.equal(result, 'ws://example.com');\n });\n\n it('should handle errors during socket open', async () => {\n mockSocket.open.returns(Promise.reject(new Error('Open failed')));\n\n try {\n await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, false);\n assert.fail('Should have thrown an error');\n } catch (err) {\n assert.equal(err.message, 'Open failed');\n }\n });\n });\n\n describe('#_attemptConnection() with shutdown switchover', () => {\n let prepareAndOpenSocketStub;\n let callback;\n\n beforeEach(() => {\n prepareAndOpenSocketStub = sinon\n .stub(mobiusSocket, 'prepareAndOpenSocket')\n .returns(Promise.resolve('ws://new-socket.com'));\n callback = sinon.stub();\n mobiusSocket.shutdownSwitchoverBackoffCall = {abort: sinon.stub()};\n mobiusSocket.socket = {url: 'ws://test.com'};\n mobiusSocket.connected = true;\n sinon.stub(mobiusSocket, 'emitEvent');\n sinon.stub(mobiusSocket, 'attachSocketEventListeners');\n });\n\n afterEach(() => {\n prepareAndOpenSocketStub.restore();\n mobiusSocket.emitEvent.restore();\n mobiusSocket.attachSocketEventListeners.restore();\n mobiusSocket.shutdownSwitchoverBackoffCall = undefined;\n });\n\n it('should not set socket reference before opening for shutdown switchover', async () => {\n const originalSocket = mobiusSocket.socket;\n\n await mobiusSocket.attemptConnection('ws://test.com', callback, {\n isShutdownSwitchover: true,\n onSuccess: (newSocket, url) => {\n assert.exists(newSocket);\n assert.equal(url, 'ws://test.com');\n },\n });\n\n // During shutdown switchover, this.socket should remain the old socket\n assert.equal(mobiusSocket.socket, originalSocket);\n });\n\n it('should call onSuccess callback with new socket and URL for shutdown', async () => {\n const onSuccessStub = sinon.stub();\n\n await mobiusSocket.attemptConnection('ws://test.com', callback, {\n isShutdownSwitchover: true,\n onSuccess: onSuccessStub,\n });\n\n assert.calledOnce(onSuccessStub);\n assert.equal(onSuccessStub.firstCall.args[1], 'ws://new-socket.com');\n });\n\n it('should emit shutdown switchover complete event', async () => {\n await mobiusSocket.attemptConnection('ws://test.com', callback, {\n isShutdownSwitchover: true,\n onSuccess: (newSocket, url) => {\n mobiusSocket.socket = newSocket;\n mobiusSocket.connected = true;\n mobiusSocket.emitEvent('event:mobius_shutdown_switchover_complete', {\n url,\n });\n },\n });\n\n assert.calledWith(\n mobiusSocket.emitEvent,\n 'event:mobius_shutdown_switchover_complete',\n sinon.match.has('url', 'ws://new-socket.com')\n );\n });\n\n it('should use simpler error handling for shutdown switchover failures', async () => {\n prepareAndOpenSocketStub.returns(Promise.reject(new Error('Connection failed')));\n\n await mobiusSocket\n .attemptConnection('ws://test.com', callback, {\n isShutdownSwitchover: true,\n })\n .catch(() => {});\n\n assert.calledOnce(callback);\n assert.instanceOf(callback.firstCall.args[0], Error);\n });\n\n it('should check shutdownSwitchoverBackoffCall for shutdown connections', () => {\n mobiusSocket.shutdownSwitchoverBackoffCall = undefined;\n\n const result = mobiusSocket.attemptConnection('ws://test.com', callback, {\n isShutdownSwitchover: true,\n });\n\n return result.catch((err) => {\n assert.instanceOf(err, Error);\n assert.match(err.message, /switchover backoff call/);\n });\n });\n });\n\n describe('#_connectWithBackoff() with shutdown switchover', () => {\n it('should use shutdown-specific parameters when called', () => {\n const connectWithBackoffStub = sinon\n .stub(mobiusSocket, 'connectWithBackoff')\n .returns(Promise.resolve());\n\n mobiusSocket.handleImminentShutdown();\n\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n assert.isUndefined(callArgs[0]); // webSocketUrl\n assert.isObject(callArgs[1]);\n assert.isTrue(callArgs[1].isShutdownSwitchover);\n\n connectWithBackoffStub.restore();\n });\n\n it('should pass shutdown switchover options to _attemptConnection', () => {\n const attemptStub = sinon.stub(mobiusSocket, 'attemptConnection');\n attemptStub.callsFake((url, cb) => cb());\n\n const context = {\n isShutdownSwitchover: true,\n attemptOptions: {\n isShutdownSwitchover: true,\n onSuccess: () => {},\n },\n };\n\n const promise = mobiusSocket.connectWithBackoff(undefined, context);\n\n return promise.then(() => {\n assert.calledOnce(attemptStub);\n const callArgs = attemptStub.firstCall.args;\n assert.isObject(callArgs[2]);\n assert.isTrue(callArgs[2].isShutdownSwitchover);\n attemptStub.restore();\n });\n });\n\n it('should set and clear state flags appropriately', () => {\n sinon.stub(mobiusSocket, 'attemptConnection').callsFake((url, cb) => cb());\n\n mobiusSocket.shutdownSwitchoverBackoffCall = {placeholder: true};\n\n const promise = mobiusSocket.connectWithBackoff(undefined, {\n isShutdownSwitchover: true,\n attemptOptions: {isShutdownSwitchover: true, onSuccess: () => {}},\n });\n\n return promise.then(() => {\n assert.isUndefined(mobiusSocket.shutdownSwitchoverBackoffCall);\n mobiusSocket.attemptConnection.restore();\n });\n });\n });\n\n describe('#disconnect() with shutdown switchover in progress', () => {\n let abortStub;\n\n beforeEach(() => {\n mobiusSocket.socket = {\n close: sinon.stub().returns(Promise.resolve()),\n removeAllListeners: sinon.stub(),\n connecting: false,\n connected: true,\n };\n abortStub = sinon.stub();\n mobiusSocket.shutdownSwitchoverBackoffCall = {abort: abortStub};\n });\n\n it('should abort shutdown switchover backoff call on disconnect', async () => {\n await mobiusSocket.disconnect();\n\n assert.calledOnce(abortStub);\n });\n\n it('should handle disconnect when no switchover is in progress', async () => {\n mobiusSocket.shutdownSwitchoverBackoffCall = undefined;\n\n await mobiusSocket.disconnect();\n\n assert.calledOnce(mobiusSocket.socket.close);\n });\n });\n });\n });\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAIA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AACA,IAAAI,oBAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,wBAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,MAAA,GAAAC,uBAAA,CAAAP,OAAA;AACA,IAAAQ,OAAA,GAAAR,OAAA;AACA,IAAAS,OAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,OAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,aAAA,GAAAX,OAAA;AACA,IAAAY,UAAA,GAAAZ,OAAA;AAEA,IAAAa,YAAA,GAAAX,sBAAA,CAAAF,OAAA;AAA8C,SAAAO,wBAAAO,CAAA,EAAAC,CAAA,6BAAAC,QAAA,MAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAT,uBAAA,YAAAA,wBAAAO,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,gBAAAW,OAAA,CAAAX,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAM,GAAA,CAAAZ,CAAA,UAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,GAAAM,CAAA,CAAAQ,GAAA,CAAAd,CAAA,EAAAQ,CAAA,cAAAO,GAAA,IAAAf,CAAA,gBAAAe,GAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,GAAA,OAAAR,CAAA,IAAAD,CAAA,GAAAY,uBAAA,KAAAC,gCAAA,CAAAnB,CAAA,EAAAe,GAAA,OAAAR,CAAA,CAAAM,GAAA,IAAAN,CAAA,CAAAO,GAAA,IAAAR,CAAA,CAAAE,CAAA,EAAAO,GAAA,EAAAR,CAAA,IAAAC,CAAA,CAAAO,GAAA,IAAAf,CAAA,CAAAe,GAAA,WAAAP,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAmB,QAAApB,CAAA,EAAAG,CAAA,QAAAF,CAAA,GAAAoB,YAAA,CAAArB,CAAA,OAAAsB,6BAAA,QAAAhB,CAAA,GAAAgB,6BAAA,CAAAtB,CAAA,GAAAG,CAAA,KAAAG,CAAA,GAAAA,CAAA,CAAAiB,MAAA,WAAApB,CAAA,WAAAgB,gCAAA,CAAAnB,CAAA,EAAAG,CAAA,EAAAqB,UAAA,OAAAvB,CAAA,CAAAwB,IAAA,CAAAC,KAAA,CAAAzB,CAAA,EAAAK,CAAA,YAAAL,CAAA;AAAA,SAAA0B,cAAA3B,CAAA,aAAAG,CAAA,MAAAA,CAAA,GAAAyB,SAAA,CAAAC,MAAA,EAAA1B,CAAA,UAAAF,CAAA,WAAA2B,SAAA,CAAAzB,CAAA,IAAAyB,SAAA,CAAAzB,CAAA,QAAAA,CAAA,OAAAiB,OAAA,CAAAU,MAAA,CAAA7B,CAAA,OAAA8B,OAAA,WAAA5B,CAAA,QAAA6B,gBAAA,CAAAtB,OAAA,EAAAV,CAAA,EAAAG,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAA8B,iCAAA,GAAAC,wBAAA,CAAAlC,CAAA,EAAAiC,iCAAA,CAAAhC,CAAA,KAAAmB,OAAA,CAAAU,MAAA,CAAA7B,CAAA,GAAA8B,OAAA,WAAA5B,CAAA,IAAAe,uBAAA,CAAAlB,CAAA,EAAAG,CAAA,EAAAgB,gCAAA,CAAAlB,CAAA,EAAAE,CAAA,iBAAAH,CAAA,IAhB9C;AACA;AACA;AAgBA,IAAI,CAACmC,MAAM,CAACC,UAAU,EAAE;EACtB,IAAAC,gBAAA,CAAA3B,OAAA,EAAsByB,MAAM,EAAE,YAAY,EAAE;IAC1CG,KAAK,EAAEF,kBAAU;IACjBG,YAAY,EAAE;EAChB,CAAC,CAAC;AACJ;AAEAC,QAAQ,CAAC,sBAAsB,EAAE,YAAM;EACrC,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAA;IAAA,OAASN,MAAM,CAACC,UAAU,CAAC,CAAC;EAAA;EAE5CI,QAAQ,CAAC,yBAAyB,EAAE,YAAM;IACxCE,SAAS,CAAC,YAAM;MACd,IAAAC,gCAAyB,EAAC,CAAC;IAC7B,CAAC,CAAC;IAEFC,EAAE,CAAC,0DAA0D,EAAE,YAAM;MACnE,IAAMC,eAAe,GAAG,IAAIC,4BAAS,CAAC,CAAC;MACvC,IAAMC,QAAQ,GAAG,IAAAC,8BAAuB,EAACH,eAAe,CAAC;MAEzDI,sBAAM,CAACC,UAAU,CAACH,QAAQ,EAAEI,cAAY,CAAC;MACzCF,sBAAM,CAACG,SAAS,CAACL,QAAQ,CAACM,MAAM,EAAEC,eAAY,CAACC,YAAY,CAAC;IAC9D,CAAC,CAAC;IAEFX,EAAE,CAAC,0CAA0C,EAAE,YAAM;MACnD,IAAMC,eAAe,GAAG,IAAIC,4BAAS,CAAC,CAAC;MACvC,IAAMU,cAAc,GAAG;QACrBC,2BAA2B,EAAE,CAAC;QAC9BC,gBAAgB,EAAE;MACpB,CAAC;MAED,IAAMX,QAAQ,GAAG,IAAAC,8BAAuB,EAACH,eAAe,EAAEW,cAAc,CAAC;MAEzEP,sBAAM,CAACC,UAAU,CAACH,QAAQ,EAAEI,cAAY,CAAC;MACzCF,sBAAM,CAACG,SAAS,CAACL,QAAQ,CAACM,MAAM,EAAA1B,aAAA,CAAAA,aAAA,KAC3B2B,eAAY,CAACC,YAAY,GACzBC,cAAc,CAClB,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFhB,QAAQ,CAAC,cAAc,EAAE,YAAM;IAC7B,IAAIe,YAAY;IAChB,IAAII,aAAa;IACjB,IAAIC,cAAc;IAClB,IAAIC,eAAe;IACnB,IAAIC,KAAK;IAET,IAAMC,wBAAwB,GAAG,IAAAC,UAAA,CAAAtD,OAAA,EAAe;MAC9CuD,EAAE,EAAExB,UAAU,CAAC,CAAC;MAChByB,IAAI,EAAE;QACJC,SAAS,EAAE,qBAAqB;QAChCC,KAAK,EAAE;UACLH,EAAE,EAAE;QACN,CAAC;QACDI,cAAc,EAAE5B,UAAU,CAAC;MAC7B,CAAC;MACD6B,SAAS,EAAE,IAAAC,IAAA,CAAA7D,OAAA,EAAS,CAAC;MACrB8D,UAAU,YAAAC,MAAA,CAAYhC,UAAU,CAAC,CAAC,OAAAgC,MAAA,CAAI,IAAAF,IAAA,CAAA7D,OAAA,EAAS,CAAC;IAClD,CAAC,CAAC;IAEF,IAAMgE,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAA,EAAsD;MAAA,IAAAC,IAAA,GAAA/C,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAgD,SAAA,GAAAhD,SAAA,MAAP,CAAC,CAAC;QAAAiD,eAAA,GAAAF,IAAA,CAA5CG,UAAU;QAAVA,UAAU,GAAAD,eAAA,cAAG,GAAG,GAAAA,eAAA;QAAAE,kBAAA,GAAAJ,IAAA,CAAEK,aAAa;QAAbA,aAAa,GAAAD,kBAAA,cAAG,IAAI,GAAAA,kBAAA;MAC/D,IAAME,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACxB,aAAa,CAACyB,IAAI,CAACC,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAC,CAAC;MAEnE3B,aAAa,CAAC4B,IAAI,CAAC,SAAS,EAAE;QAC5BrB,IAAI,EAAE,IAAAF,UAAA,CAAAtD,OAAA,EAAe;UACnB8E,IAAI,EAAE,gBAAgB;UACtBC,OAAO,EAAEC,wBAAa,CAACC,IAAI;UAC3BnB,UAAU,EAAES,WAAW,CAACT,UAAU;UAClCM,UAAU,EAAVA,UAAU;UACVE,aAAa,EAAbA;QACF,CAAC;MACH,CAAC,CAAC;IACJ,CAAC;IAED,IAAMY,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,OAAO;MAAA,IAAE1B,SAAS,GAAAvC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAgD,SAAA,GAAAhD,SAAA,MAAG,cAAc;MAAA,OAAM;QACjEsC,IAAI,EAAE;UACJsB,IAAI,EAAE,aAAa;UACnBK,OAAO,EAAPA,OAAO;UACP3B,IAAI,EAAE;YACJC,SAAS,EAATA;UACF;QACF;MACF,CAAC;IAAA,CAAC;IAEF,IAAM2B,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAA;MAAA,OAAU;QACjCC,KAAK,EAAEC,cAAK,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;QAC9CC,kBAAkB,EAAEL,cAAK,CAACC,IAAI,CAAC;MACjC,CAAC;IAAA,CAAC;IAEF,IAAMK,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAIC,OAAO;MAAA,OACrCA,OAAO,CAACC,QAAQ,CAAC,CAAC,CAACjF,MAAM,CAAC,UAACN,IAAI;QAAA,OAAKA,IAAI,CAACqE,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO;MAAA,EAAC,CAACzD,MAAM;IAAA;IAEtE4E,UAAU,CAAC,YAAM;MACfC,IAAI,CAACC,aAAa,CAAC;QAACC,SAAS,EAAE,CAAC,UAAU;MAAC,CAAC,CAAC;MAC7C/C,eAAe,GAAG,IAAI;IACxB,CAAC,CAAC;IAEF4C,UAAU,CAAC,YAAM;MACf3C,KAAK,GAAG,IAAIhB,4BAAS,CAAC,CAAC;MACvBgB,KAAK,CAAC+C,WAAW,GAAG;QAClBC,OAAO,EAAEd,cAAK,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;QAChDW,YAAY,EAAEf,cAAK,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAChCC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC;UACdY,QAAQ,WAARA,QAAQA,CAAA,EAAG;YACT,OAAO,aAAa;UACtB;QACF,CAAC,CACH;MACF,CAAC;MACDlD,KAAK,CAACmD,QAAQ,CAACC,MAAM,GAAG;QACtBC,UAAU,EAAE,IAAI;QAChBC,QAAQ,EAAEpB,cAAK,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;QACjDU,OAAO,EAAEd,cAAK,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;QAChDiB,YAAY,EAAE,kBAAkB;QAChCC,eAAe,EAAEtB,cAAK,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC5EmB,oBAAoB,EAAEvB,cAAK,CACxBC,IAAI,CAAC,CAAC,CACNC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,iCAAiC,CAAC;MAC/D,CAAC;MACDtC,KAAK,CAACmD,QAAQ,CAACO,QAAQ,GAAG;QACxBC,2BAA2B,EAAEzB,cAAK,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACxFsB,aAAa,EAAE1B,cAAK,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;QACtDuB,sBAAsB,EAAE3B,cAAK,CAACC,IAAI,CAAC,CAAC;QACpC2B,eAAe,EAAE5B,cAAK,CAACC,IAAI,CAAC,CAAC;QAC7B4B,WAAW,EAAE7B,cAAK,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,IAAI,CAAC;MACzD,CAAC;MACDtC,KAAK,CAACmD,QAAQ,CAACa,OAAO,CAACC,mBAAmB,GAAG/B,cAAK,CAACC,IAAI,CAAC,CAAC;MACzDnC,KAAK,CAACU,UAAU,GAAG,gBAAgB;MACnCV,KAAK,CAACkE,MAAM,GAAGC,OAAO;MAEtBjC,cAAK,CAACC,IAAI,CAACiC,eAAM,EAAE,yBAAyB,CAAC,CAACC,SAAS,CACrD;QAAA,OACE,YAAmB;UAAA,SAAAC,IAAA,GAAAxG,SAAA,CAAAC,MAAA,EAANyD,IAAI,OAAA+C,KAAA,CAAAD,IAAA,GAAAE,IAAA,MAAAA,IAAA,GAAAF,IAAA,EAAAE,IAAA;YAAJhD,IAAI,CAAAgD,IAAA,IAAA1G,SAAA,CAAA0G,IAAA;UAAA;UACf3E,aAAa,OAAA4E,WAAA,CAAA7H,OAAA,EAAO8H,gCAAa,EAAIlD,IAAI,CAAC;UAE1C,OAAO3B,aAAa;QACtB,CAAC;MAAA,CACL,CAAC;MAED,IAAM8E,QAAQ,GAAGP,eAAM,CAACQ,SAAS,CAACC,IAAI;MAEtC/E,cAAc,GAAGoC,cAAK,CAACC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC,CAACP,SAAS,CAAC,YAAmB;QAAA,SAAAS,KAAA,GAAAhH,SAAA,CAAAC,MAAA,EAANyD,IAAI,OAAA+C,KAAA,CAAAO,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;UAAJvD,IAAI,CAAAuD,KAAA,IAAAjH,SAAA,CAAAiH,KAAA;QAAA;QAC/E,IAAMC,OAAO,GAAG,IAAAC,MAAA,CAAArI,OAAA,EAAc+H,QAAQ,EAAE,IAAI,EAAEnD,IAAI,CAAC;QAEnD0D,OAAO,CAACC,QAAQ,CAAC,YAAM;UACrBtF,aAAa,CAACgF,IAAI,CAAC,CAAC;UACpB;UACAK,OAAO,CAACC,QAAQ,CAAC,YAAM;YACrBvE,gBAAgB,CAAC,CAAC;UACpB,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,OAAOoE,OAAO;MAChB,CAAC,CAAC;MAEFvF,YAAY,GAAG,IAAIJ,cAAY,CAACW,KAAK,EAAAnC,aAAA,KAAM2B,eAAY,CAACC,YAAY,CAAC,CAAC;IACxE,CAAC,CAAC;IAEFb,SAAS,kBAAAwG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAC,SAAAC,QAAA;MAAA,IAAAC,EAAA;MAAA,OAAAH,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YACR,IAAI7F,eAAe,EAAE;cACnB6C,IAAI,CAACiD,aAAa,CAAC,CAAC;cACpB9F,eAAe,GAAG,KAAK;YACzB;;YAEA;YAAA,KACIN,YAAY;cAAAiG,QAAA,CAAAE,IAAA;cAAA;YAAA;YAAAF,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAE,IAAA;YAAA,OAENnG,YAAY,CAACqG,UAAU,CAAC,CAAC;UAAA;YAAAJ,QAAA,CAAAE,IAAA;YAAA;UAAA;YAAAF,QAAA,CAAAC,IAAA;YAAAH,EAAA,GAAAE,QAAA;UAAA;YAMnC;YACA,IAAI7F,aAAa,IAAI,OAAOA,aAAa,CAACoC,KAAK,KAAK,UAAU,EAAE;cAC9D,IAAI;gBACFpC,aAAa,CAACoC,KAAK,CAAC,CAAC;cACvB,CAAC,CAAC,OAAO/F,CAAC,EAAE;gBACV;cAAA;YAEJ;YAEA,IAAI4D,cAAc,EAAE;cAClBA,cAAc,CAACiG,OAAO,CAAC,CAAC;YAC1B;YAEA,IAAI3B,eAAM,CAAC4B,uBAAuB,CAACD,OAAO,EAAE;cAC1C3B,eAAM,CAAC4B,uBAAuB,CAACD,OAAO,CAAC,CAAC;YAC1C;;YAEA;YAAAL,QAAA,CAAAE,IAAA;YAAA,OACM,IAAAvD,QAAA,CAAAzF,OAAA,CAAY,UAAC0F,OAAO,EAAK;cAC7B2D,UAAU,CAAC3D,OAAO,EAAE,EAAE,CAAC;YACzB,CAAC,CAAC;UAAA;UAAA;YAAA,OAAAoD,QAAA,CAAAQ,IAAA;QAAA;MAAA,GAAAX,OAAA;IAAA,CACH,GAAC;IAEF7G,QAAQ,CAAC,YAAY,EAAE,YAAM;MAC3BI,EAAE,CAAC,6BAA6B,EAAE,YAAM;QACtCkB,KAAK,CAACmD,QAAQ,CAACC,MAAM,CAACC,UAAU,GAAG,KAAK;QACxClE,sBAAM,CAACgH,SAAS,CAACnG,KAAK,CAACmD,QAAQ,CAACC,MAAM,CAACE,QAAQ,CAAC;QAChD,IAAM0B,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;QAEtC,OAAOpB,OAAO,CAACqB,IAAI,CAAC,YAAM;UACxBlH,sBAAM,CAACmH,UAAU,CAACtG,KAAK,CAACmD,QAAQ,CAACC,MAAM,CAACE,QAAQ,CAAC;QACnD,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFxE,EAAE,CAAC,4CAA4C,EAAE,YAAM;QACrD,IAAMkG,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;QAEtCjH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAAC+G,SAAS,EAAE,+BAA+B,CAAC;QACvErH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAACiH,UAAU,EAAE,4BAA4B,CAAC;QACpE7G,aAAa,CAACgF,IAAI,CAAC,CAAC;QAEpB,OAAOG,OAAO,CAACqB,IAAI,CAAC,YAAM;UACxBlH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+G,SAAS,EAAE,2BAA2B,CAAC;UAClErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;UACzEvH,sBAAM,CAACwH,UAAU,CAAC7G,cAAc,EAAE,kBAAkB,EAAEoC,cAAK,CAAC0E,KAAK,CAACC,GAAG,CAAC;QACxE,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFnI,QAAQ,CAAC,0BAA0B,EAAE,YAAM;QACzC,IAAMoI,KAAK,GAAG,SAARA,KAAKA,CAAA,EAAS;UAClBhH,cAAc,CAACiG,OAAO,CAAC,CAAC;UACxBjG,cAAc,GAAGoC,cAAK,CAACC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC;UACrD9E,cAAc,CAACsC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAIC,uBAAe,CAAC,CAAC,CAAC,CAAC;UAC7D7H,sBAAM,CAACgH,SAAS,CAAC/B,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;UAEvC,IAAMG,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;UAEtC,OAAO,IAAAa,oBAAW,EAAC,CAAC,CAAC,CAClBZ,IAAI,CAAC,YAAM;YACVlH,sBAAM,CAACmH,UAAU,CAAClC,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;YAExC,OAAO,IAAAoC,oBAAW,EAAC,CAAC,CAAC;UACvB,CAAC,CAAC,CACDZ,IAAI,CAAC,YAAM;YACVzD,IAAI,CAACsE,mBAAmB,CAACzH,YAAY,CAACF,MAAM,CAACK,gBAAgB,CAAC;YAE9D,OAAO,IAAAqH,oBAAW,EAAC,CAAC,CAAC;UACvB,CAAC,CAAC,CACDZ,IAAI,CAAC,YAAM;YACVlH,sBAAM,CAACgI,WAAW,CAAC/C,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;YACzCjC,IAAI,CAACsE,mBAAmB,CAAC,CAAC,GAAGzH,YAAY,CAACF,MAAM,CAACK,gBAAgB,CAAC;YAElE,OAAO,IAAAqH,oBAAW,EAAC,CAAC,CAAC;UACvB,CAAC,CAAC,CACDZ,IAAI,CAAC,YAAM;YACVlH,sBAAM,CAACiI,YAAY,CAAChD,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;YAC1CjC,IAAI,CAACsE,mBAAmB,CAAC,CAAC,GAAGzH,YAAY,CAACF,MAAM,CAACK,gBAAgB,CAAC;YAElE,OAAOT,sBAAM,CAACkI,UAAU,CAACrC,OAAO,CAAC;UACnC,CAAC,CAAC,CACDqB,IAAI,CAAC,YAAM;YACVlH,sBAAM,CAACiI,YAAY,CAAChD,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;UAC5C,CAAC,CAAC;QACN,CAAC;;QAED;QACA,IAAAyC,2BAAa,EAACxI,EAAE,CAAC,CAAC,+DAA+D,EAAE,YAAM;UACvFW,YAAY,CAACF,MAAM,CAACgI,UAAU,GAAG,CAAC;UAClC9H,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;UAEnD,OAAOmH,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;;QAEF;QACA;QACA,IAAAQ,2BAAa,EAACxI,EAAE,CAAC,CAAC,2DAA2D,EAAE,YAAM;UACnFW,YAAY,CAACF,MAAM,CAACgI,UAAU,GAAG,CAAC;UAClC9H,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;UAEnDG,cAAc,CAACiG,OAAO,CAAC,CAAC;UACxBjG,cAAc,GAAGoC,cAAK,CAACC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC;UACrD9E,cAAc,CAACsC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAIC,uBAAe,CAAC,CAAC,CAAC,CAAC;UAC7D7H,sBAAM,CAACgH,SAAS,CAAC/B,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;UAEvC,IAAMG,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;UAEtC,OAAO,IAAAa,oBAAW,EAAC,CAAC,CAAC,CAClBZ,IAAI,CAAC,YAAM;YACVlH,sBAAM,CAACmH,UAAU,CAAClC,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;YAExC,OAAO1F,sBAAM,CAACkI,UAAU,CAACrC,OAAO,CAAC;UACnC,CAAC,CAAC,CACDqB,IAAI,CAAC,YAAM;YACVlH,sBAAM,CAACmH,UAAU,CAAClC,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;UAC1C,CAAC,CAAC;QACN,CAAC,CAAC;;QAEF;QACA,IAAAyC,2BAAa,EAACxI,EAAE,CAAC,CAAC,oDAAoD,EAAE,YAAM;UAC5EW,YAAY,CAACF,MAAM,CAACgI,UAAU,GAAG,CAAC;UAClC9H,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;UAEnD,OAAOmH,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;;QAEF;QACA,IAAAQ,2BAAa,EAACxI,EAAE,CAAC,CAAC,oDAAoD,EAAE,YAAM;UAC5EW,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;UACnDF,YAAY,CAACF,MAAM,CAACgI,UAAU,GAAG,CAAC;UAElC,OAAOT,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;;QAEF;QACA,IAAAQ,2BAAa,EAACxI,EAAE,CAAC,CAAC,oDAAoD,EAAE,YAAM;UAC5EW,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;UACnDF,YAAY,CAACF,MAAM,CAACgI,UAAU,GAAG,CAAC;UAClC9H,YAAY,CAAC+H,gBAAgB,GAAG,IAAI;UAEpC,OAAOV,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFhI,EAAE,CAAC,qCAAqC,EAAE,YAAM;QAC9C,IAAMkG,OAAO,GAAG3C,QAAA,CAAAzF,OAAA,CAAQ6K,GAAG,CAAC,CAC1BhI,YAAY,CAAC2G,OAAO,CAAC,CAAC,EACtB3G,YAAY,CAAC2G,OAAO,CAAC,CAAC,EACtB3G,YAAY,CAAC2G,OAAO,CAAC,CAAC,EACtB3G,YAAY,CAAC2G,OAAO,CAAC,CAAC,CACvB,CAAC;QAEFvG,aAAa,CAACgF,IAAI,CAAC,CAAC;QAEpB,OAAOG,OAAO,CAACqB,IAAI,CAAC,YAAM;UACxBlH,sBAAM,CAACmH,UAAU,CAAClC,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;QAC1C,CAAC,CAAC;MACJ,CAAC,CAAC;;MAEF;MACA,IAAAyC,2BAAa,EAAC5I,QAAQ,CAAC,CAAC,2BAA2B,EAAE,YAAM;QACzDI,EAAE,CAAC,yBAAyB,EAAE,YAAM;UAClCW,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;UACnDG,cAAc,CAACiG,OAAO,CAAC,CAAC;UACxBjG,cAAc,GAAGoC,cAAK,CAACC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC;UACrD9E,cAAc,CAACsC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAIC,uBAAe,CAAC;YAACU,IAAI,EAAE;UAAI,CAAC,CAAC,CAAC,CAAC;UACzE;UACA5H,cAAc,CAAC6H,MAAM,CAAC,CAAC,CAAC,CAACvF,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,IAAIoC,gCAAa,CAAC,CAAC,CAAC,CAAC;UACtEvF,sBAAM,CAACgH,SAAS,CAAC/B,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;UAEvC,IAAMG,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;UAEtC,OAAO,IAAAa,oBAAW,EAAC,CAAC,CAAC,CAClBZ,IAAI,CAAC,YAAM;YACVlH,sBAAM,CAACmH,UAAU,CAAClC,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;;YAExC;YACA;YACA,OAAO,IAAAoC,oBAAW,EAAC,CAAC,CAAC;UACvB,CAAC,CAAC,CACDZ,IAAI,CAAC,YAAM;YACVzD,IAAI,CAACsE,mBAAmB,CAACzH,YAAY,CAACF,MAAM,CAACK,gBAAgB,CAAC;YAE9D,OAAO,IAAAqH,oBAAW,EAAC,CAAC,CAAC;UACvB,CAAC,CAAC,CACDZ,IAAI,CAAC,YAAM;YACVlH,sBAAM,CAACgI,WAAW,CAAC/C,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;YACzCjC,IAAI,CAACsE,mBAAmB,CAAC,CAAC,GAAGzH,YAAY,CAACF,MAAM,CAACK,gBAAgB,CAAC;YAElE,OAAO,IAAAqH,oBAAW,EAAC,CAAC,CAAC;UACvB,CAAC,CAAC,CACDZ,IAAI,CAAC,YAAM;YACVlH,sBAAM,CAACiI,YAAY,CAAChD,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;YAC1CjC,IAAI,CAACsE,mBAAmB,CAAC,CAAC,GAAGzH,YAAY,CAACF,MAAM,CAACK,gBAAgB,CAAC;YAElE,OAAOoF,OAAO;UAChB,CAAC,CAAC,CACDqB,IAAI,CAAC,YAAM;YACVlH,sBAAM,CAACiI,YAAY,CAAChD,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;YAC1CjC,IAAI,CAACsE,mBAAmB,CAAC,CAAC,GAAGzH,YAAY,CAACF,MAAM,CAACK,gBAAgB,CAAC;YAElE,OAAO,IAAAqH,oBAAW,EAAC,CAAC,CAAC;UACvB,CAAC,CAAC,CACDZ,IAAI,CAAC,YAAM;YACVlH,sBAAM,CAACiI,YAAY,CAAChD,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;UAC5C,CAAC,CAAC;QACN,CAAC,CAAC;QAEFnG,QAAQ,CAAC,mBAAmB,EAAE,YAAM;UAClCI,EAAE,CAAC,mBAAmB,EAAE,YAAM;YAC5B8D,IAAI,CAACiD,aAAa,CAAC,CAAC;YACpB9F,eAAe,GAAG,KAAK;YACvBD,cAAc,CAACiG,OAAO,CAAC,CAAC;YACxBjG,cAAc,GAAGoC,cAAK,CACnBC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC,CAC9BxC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAIa,kBAAU,CAAC;cAACF,IAAI,EAAE;YAAI,CAAC,CAAC,CAAC,CAAC;YAExD,OAAOvI,sBAAM,CAACkI,UAAU,CAAC5H,YAAY,CAAC2G,OAAO,CAAC,CAAC,CAAC;UAClD,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF1H,QAAQ,CAAC,wBAAwB,EAAE,YAAM;UACvCI,EAAE,CAAC,2BAA2B,EAAE,YAAM;YACpCW,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;YACnDG,cAAc,CAACiG,OAAO,CAAC,CAAC;YACxBjG,cAAc,GAAGoC,cAAK,CAACC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC,CAACxC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;YAChFxC,cAAc,CAAC6H,MAAM,CAAC,CAAC,CAAC,CAACvF,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAIc,uBAAe,CAAC;cAACH,IAAI,EAAE;YAAI,CAAC,CAAC,CAAC,CAAC;YACnFvI,sBAAM,CAACgH,SAAS,CAACnG,KAAK,CAAC+C,WAAW,CAACC,OAAO,CAAC;YAC3C7D,sBAAM,CAACgH,SAAS,CAACnG,KAAK,CAACmD,QAAQ,CAACC,MAAM,CAACJ,OAAO,CAAC;YAC/C,IAAMgC,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;YAEtC,OAAO,IAAAa,oBAAW,EAAC,CAAC,CAAC,CAACZ,IAAI,CAAC,YAAM;cAC/BlH,sBAAM,CAACgH,SAAS,CAACnG,KAAK,CAAC+C,WAAW,CAACC,OAAO,CAAC;cAC3C7D,sBAAM,CAAC2I,MAAM,CAAC9H,KAAK,CAACmD,QAAQ,CAACC,MAAM,CAACJ,OAAO,CAAC;cAC5CJ,IAAI,CAACsE,mBAAmB,CAAC,IAAI,CAAC;cAE9B,OAAOlC,OAAO;YAChB,CAAC,CAAC;UACJ,CAAC,CAAC;QACJ,CAAC,CAAC;QAEFtG,QAAQ,CAAC,sBAAsB,EAAE,YAAM;UACrCI,EAAE,CAAC,0BAA0B,EAAE,YAAM;YACnCW,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;YACnDG,cAAc,CAACiG,OAAO,CAAC,CAAC;YACxBjG,cAAc,GAAGoC,cAAK,CAACC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC,CAACxC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;YAChFxC,cAAc,CAAC6H,MAAM,CAAC,CAAC,CAAC,CAACvF,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAIgB,qBAAa,CAAC;cAACL,IAAI,EAAE;YAAI,CAAC,CAAC,CAAC,CAAC;YACjFvI,sBAAM,CAACgH,SAAS,CAACnG,KAAK,CAAC+C,WAAW,CAACC,OAAO,CAAC;YAC3C7D,sBAAM,CAACgH,SAAS,CAACnG,KAAK,CAACmD,QAAQ,CAACC,MAAM,CAACJ,OAAO,CAAC;YAC/C,IAAMgC,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;YAEtC,OAAO,IAAAa,oBAAW,EAAC,CAAC,CAAC,CAACZ,IAAI,CAAC,YAAM;cAC/BlH,sBAAM,CAAC2I,MAAM,CAAC9H,KAAK,CAAC+C,WAAW,CAACC,OAAO,CAAC;cACxC7D,sBAAM,CAACgH,SAAS,CAACnG,KAAK,CAACmD,QAAQ,CAACC,MAAM,CAACJ,OAAO,CAAC;cAC/CJ,IAAI,CAACsE,mBAAmB,CAAC,IAAI,CAAC;cAE9B,OAAOlC,OAAO;YAChB,CAAC,CAAC;UACJ,CAAC,CAAC;QACJ,CAAC,CAAC;QAEFtG,QAAQ,CAAC,kBAAkB,EAAE,YAAM;UACjCI,EAAE,CAAC,mBAAmB,EAAE,YAAM;YAC5B8D,IAAI,CAACiD,aAAa,CAAC,CAAC;YACpB9F,eAAe,GAAG,KAAK;YACvBD,cAAc,CAACiG,OAAO,CAAC,CAAC;YACxBjG,cAAc,GAAGoC,cAAK,CACnBC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC,CAC9BxC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAIiB,iBAAS,CAAC;cAACN,IAAI,EAAE;YAAI,CAAC,CAAC,CAAC,CAAC;YAEvD,OAAOvI,sBAAM,CAACkI,UAAU,CAAC5H,YAAY,CAAC2G,OAAO,CAAC,CAAC,CAAC;UAClD,CAAC,CAAC;QACJ,CAAC,CAAC;;QAEF;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;MACF,CAAC,CAAC;MAEF1H,QAAQ,CAAC,gBAAgB,EAAE,YAAM;QAC/BI,EAAE,CAAC,sBAAsB,EAAE;UAAA,OACzBW,YAAY,CAAC2G,OAAO,CAAC,CAAC,CAACC,IAAI,CAAC,YAAM;YAChClH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+G,SAAS,EAAE,2BAA2B,CAAC;YAClErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;YACzE,IAAM1B,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;YAEtCjH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+G,SAAS,EAAE,2BAA2B,CAAC;YAClErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;YAEzE,OAAO1B,OAAO;UAChB,CAAC,CAAC;QAAA,EAAC;;QAEL;QACA,IAAAsC,2BAAa,EAACxI,EAAE,CAAC,CAAC,yCAAyC,EAAE,YAAM;UACjE,IAAMkG,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;;UAEtC;UACAvG,aAAa,CAACgF,IAAI,CAAC,CAAC;UAEpB,OAAOG,OAAO,CAACqB,IAAI,CAAC;YAAA,OAClB,IAAAY,oBAAW,EAAC,CAAC,CAAC,CACXZ,IAAI,CAAC,YAAM;cACVzD,IAAI,CAACsE,mBAAmB,CAAC,CAAC,GAAGzH,YAAY,CAACF,MAAM,CAACK,gBAAgB,CAAC;cAElE,OAAO,IAAAqH,oBAAW,EAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CACDZ,IAAI,CAAC,YAAM;cACVlH,sBAAM,CAACmH,UAAU,CAAClC,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;YAC1C,CAAC,CAAC;UAAA,CACN,CAAC;QACH,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFnG,QAAQ,CAAC,+BAA+B,EAAE,YAAM;QAC9CI,EAAE,CAAC,4CAA4C,EAAE,YAAM;UACrD,IAAMyE,YAAY,GAAG,sBAAsB;UAC3C,IAAMyB,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC7C,YAAY,CAAC;UAElDpE,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAAC+G,SAAS,EAAE,+BAA+B,CAAC;UACvErH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAACiH,UAAU,EAAE,4BAA4B,CAAC;UACpE7G,aAAa,CAACgF,IAAI,CAAC,CAAC;UAEpB,OAAOG,OAAO,CAACqB,IAAI,CAAC,YAAM;YACxBlH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+G,SAAS,EAAE,2BAA2B,CAAC;YAClErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;YACzEvH,sBAAM,CAACwH,UAAU,CAACvC,eAAM,CAACQ,SAAS,CAACC,IAAI,EAAE,sBAAsB,EAAE3C,cAAK,CAAC0E,KAAK,CAACC,GAAG,CAAC;UACnF,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFnI,QAAQ,CAAC,qDAAqD,EAAE,YAAM;QACpEI,EAAE,CAAC,uDAAuD,EAAE,YAAM;UAChE,IAAMmJ,UAAU,GAAG/F,cAAK,CAACgG,GAAG,CAACzI,YAAY,EAAE,oBAAoB,CAAC;UAChEA,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;UACnD,IAAMqF,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,kBAAkB,CAAC;UAExDjH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAACiH,UAAU,EAAE,4BAA4B,CAAC;UACpE7G,aAAa,CAACgF,IAAI,CAAC,CAAC;UAEpB,OAAOG,OAAO,CAACqB,IAAI,CAAC,YAAM;YAAA,IAAA8B,qBAAA;YACxBhJ,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+G,SAAS,EAAE,2BAA2B,CAAC;YAClErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;YACzEvH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+H,gBAAgB,EAAE,0BAA0B,CAAC;YACxErI,sBAAM,CAACmH,UAAU,CAAClC,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;YACxC1F,sBAAM,CAACmH,UAAU,CAAC2B,UAAU,CAAC;YAC7B9I,sBAAM,CAACiJ,WAAW,EAAAD,qBAAA,GAACF,UAAU,CAACI,SAAS,CAAC7G,IAAI,CAAC,CAAC,CAAC,cAAA2G,qBAAA,uBAA5BA,qBAAA,CAA8BxI,2BAA2B,CAAC;YAC7EsI,UAAU,CAAClC,OAAO,CAAC,CAAC;UACtB,CAAC,CAAC;QACJ,CAAC,CAAC;QAEFjH,EAAE,CAAC,iDAAiD,EAAE,YAAM;UAC1D8D,IAAI,CAACiD,aAAa,CAAC,CAAC;UACpB9F,eAAe,GAAG,KAAK;UACvBD,cAAc,CAACiG,OAAO,CAAC,CAAC;UACxBjG,cAAc,GAAGoC,cAAK,CACnBC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC,CAC9BxC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAIC,uBAAe,CAAC;YAACU,IAAI,EAAE;UAAI,CAAC,CAAC,CAAC,CAAC;UAC7DjI,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;UAEnD,IAAMqF,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,kBAAkB,CAAC;UAExD,OAAOjH,sBAAM,CAACkI,UAAU,CAACrC,OAAO,CAAC,CAACqB,IAAI,CAAC,YAAM;YAC3ClH,sBAAM,CAACmH,UAAU,CAAClC,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;YACxC1F,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAAC+G,SAAS,EAAE,+BAA+B,CAAC;UACzE,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF1H,EAAE,CAAC,0EAA0E,EAAE,YAAM;UACnF,IAAMmJ,UAAU,GAAG/F,cAAK,CAACgG,GAAG,CAACzI,YAAY,EAAE,oBAAoB,CAAC;UAChEA,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;UAEnD,IAAMqF,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,kBAAkB,CAAC;UAExDvG,aAAa,CAACgF,IAAI,CAAC,CAAC;UAEpB,OAAOG,OAAO,CAACqB,IAAI,CAAC,YAAM;YAAA,IAAAiC,sBAAA;YACxBnJ,sBAAM,CAACmH,UAAU,CAAC2B,UAAU,CAAC;YAC7B9I,sBAAM,CAACiJ,WAAW,EAAAE,sBAAA,GAACL,UAAU,CAACI,SAAS,CAAC7G,IAAI,CAAC,CAAC,CAAC,cAAA8G,sBAAA,uBAA5BA,sBAAA,CAA8B3I,2BAA2B,CAAC;YAC7EsI,UAAU,CAAClC,OAAO,CAAC,CAAC;UACtB,CAAC,CAAC;QACJ,CAAC,CAAC;QAEFjH,EAAE,CAAC,4DAA4D,EAAE,YAAM;UACrE8D,IAAI,CAACiD,aAAa,CAAC,CAAC;UACpB9F,eAAe,GAAG,KAAK;UACvBN,YAAY,CAAC+H,gBAAgB,GAAG,IAAI;UACpC/H,YAAY,CAAC8I,SAAS,GAAG,kBAAkB;UAC3C9I,YAAY,CAACF,MAAM,CAACI,2BAA2B,GAAG,CAAC;UACnDF,YAAY,CAACF,MAAM,CAACgI,UAAU,GAAG,CAAC;UAElCzH,cAAc,CAACiG,OAAO,CAAC,CAAC;UACxBjG,cAAc,GAAGoC,cAAK,CACnBC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC,CAC9BxC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAIC,uBAAe,CAAC;YAACU,IAAI,EAAE;UAAI,CAAC,CAAC,CAAC,CAAC;UAE7D,IAAM1C,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,kBAAkB,CAAC;UAExD,OAAOjH,sBAAM,CAACkI,UAAU,CAACrC,OAAO,CAAC,CAACqB,IAAI,CAAC,YAAM;YAC3ClH,sBAAM,CAACmH,UAAU,CAAClC,eAAM,CAACQ,SAAS,CAACC,IAAI,CAAC;YACxC1F,sBAAM,CAACqJ,KAAK,CAAC/I,YAAY,CAAC8I,SAAS,EAAE,kBAAkB,CAAC;YACxDpJ,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAAC+H,gBAAgB,EAAE,2BAA2B,CAAC;UAC5E,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF9I,QAAQ,CAAC,uBAAuB,EAAE,YAAM;MACtCE,SAAS,CAAC,YAAM;QACd,OAAOoB,KAAK,CAACT,MAAM,CAACkJ,0BAA0B;MAChD,CAAC,CAAC;MAEF3J,EAAE,CAAC,4CAA4C,EAAE,YAAM;QACrD,IAAM4J,YAAY,GAAG,wBAAwB;QAE7C1I,KAAK,CAACT,MAAM,CAACkJ,0BAA0B,GAAG;UAACE,KAAK,EAAE;YAACC,KAAK,EAAE;cAACC,IAAI,EAAEH;YAAY;UAAC;QAAC,CAAC;QAChF,IAAM1D,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;QAEtCjH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAAC+G,SAAS,EAAE,+BAA+B,CAAC;QACvErH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAACiH,UAAU,EAAE,4BAA4B,CAAC;QACpE7G,aAAa,CAACgF,IAAI,CAAC,CAAC;QAEpB,OAAOG,OAAO,CAACqB,IAAI,CAAC,YAAM;UACxBlH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+G,SAAS,EAAE,2BAA2B,CAAC;UAClErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;UACzEvH,sBAAM,CAACwH,UAAU,CACf7G,cAAc,EACd,kBAAkB,EAClBoC,cAAK,CAAC0E,KAAK,CAAC9J,GAAG,CACb,OAAO,EACPoF,cAAK,CAAC0E,KAAK,CAAC9J,GAAG,CAAC,OAAO,EAAEoF,cAAK,CAAC0E,KAAK,CAAC9J,GAAG,CAAC,MAAM,EAAE4L,YAAY,CAAC,CAChE,CACF,CAAC;QACH,CAAC,CAAC;MACJ,CAAC,CAAC;MAEF5J,EAAE,CAAC,8CAA8C,EAAE,YAAM;QACvD,IAAMkG,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;QAEtCjH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAAC+G,SAAS,EAAE,+BAA+B,CAAC;QACvErH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAACiH,UAAU,EAAE,4BAA4B,CAAC;QACpE7G,aAAa,CAACgF,IAAI,CAAC,CAAC;QAEpB,OAAOG,OAAO,CAACqB,IAAI,CAAC,YAAM;UACxBlH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+G,SAAS,EAAE,2BAA2B,CAAC;UAClErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;UACzEvH,sBAAM,CAACwH,UAAU,CAAC7G,cAAc,EAAE,kBAAkB,EAAEoC,cAAK,CAAC0E,KAAK,CAAC;YAAC+B,KAAK,EAAE7H;UAAS,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFpC,QAAQ,CAAC,eAAe,EAAE,YAAM;MAC9BI,EAAE,CAAC,2BAA2B,EAAE;QAAA,OAC9BW,YAAY,CACT2G,OAAO,CAAC,CAAC,CACTC,IAAI,CAAC,YAAM;UACVlH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+G,SAAS,EAAE,2BAA2B,CAAC;UAClErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;UACzE,IAAM1B,OAAO,GAAGvF,YAAY,CAACqG,UAAU,CAAC,CAAC;UAEzCjG,aAAa,CAAC4B,IAAI,CAAC,OAAO,EAAE;YAC1BiG,IAAI,EAAE,IAAI;YACVoB,MAAM,EAAE;UACV,CAAC,CAAC;UAEF,OAAO9D,OAAO;QAChB,CAAC,CAAC,CACDqB,IAAI,CAAC,YAAM;UACVlH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAAC+G,SAAS,EAAE,+BAA+B,CAAC;UACvErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;UACzEvH,sBAAM,CAACiJ,WAAW,CAChB3I,YAAY,CAACI,aAAa,EAC1B,4CACF,CAAC;QACH,CAAC,CAAC;MAAA,EAAC;MAEPf,EAAE,CAAC,0CAA0C,EAAE;QAAA,OAC7CW,YAAY,CACT2G,OAAO,CAAC,CAAC,CACTC,IAAI,CAAC,YAAM;UACVlH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+G,SAAS,EAAE,2BAA2B,CAAC;UAClErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;UACzE,IAAM1B,OAAO,GAAGvF,YAAY,CAACqG,UAAU,CAAC,CAAC;UAEzCjG,aAAa,CAAC4B,IAAI,CAAC,OAAO,EAAE;YAC1BiG,IAAI,EAAE,IAAI;YACVoB,MAAM,EAAE;UACV,CAAC,CAAC;UAEF,OAAO9D,OAAO;QAChB,CAAC,CAAC,CACDqB,IAAI,CAAC,YAAM;UACVlH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAAC+G,SAAS,EAAE,+BAA+B,CAAC;UACvErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;UACzEvH,sBAAM,CAACiJ,WAAW,CAChB3I,YAAY,CAACI,aAAa,EAC1B,4CACF,CAAC;QACH,CAAC,CAAC;MAAA,EAAC;MAEPf,EAAE,CAAC,+BAA+B,EAAE,YAAM;QACxC,IAAMoJ,GAAG,GAAGhG,cAAK,CAACgG,GAAG,CAAC,CAAC;QAEvBzI,YAAY,CAACsJ,EAAE,CAAC,2BAA2B,EAAEb,GAAG,CAAC;QAEjD,OAAOzI,YAAY,CAChB2G,OAAO,CAAC,CAAC,CACTC,IAAI,CAAC,YAAM;UACVlH,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+G,SAAS,EAAE,2BAA2B,CAAC;UAClErH,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAACiH,UAAU,EAAE,gCAAgC,CAAC;UAEzEvH,sBAAM,CAACgH,SAAS,CAAC+B,GAAG,CAAC;UACrBrI,aAAa,CAACmJ,UAAU,GAAG,CAAC;UAC5BnJ,aAAa,CAAC4B,IAAI,CAAC,MAAM,CAAC;UAC1B5B,aAAa,CAAC4B,IAAI,CAAC,SAAS,EAAE;YAACrB,IAAI,EAAEH;UAAwB,CAAC,CAAC;QACjE,CAAC,CAAC,CACDoG,IAAI,CAAC,YAAM;UACVlH,sBAAM,CAACmH,UAAU,CAAC4B,GAAG,CAAC;UAEtB,IAAMlD,OAAO,GAAGvF,YAAY,CAACqG,UAAU,CAAC,CAAC;UAEzCjG,aAAa,CAACmJ,UAAU,GAAG,CAAC;UAC5BnJ,aAAa,CAAC4B,IAAI,CAAC,MAAM,CAAC;UAC1B5B,aAAa,CAAC4B,IAAI,CAAC,SAAS,EAAE;YAACrB,IAAI,EAAEH;UAAwB,CAAC,CAAC;UAC/DJ,aAAa,CAAC4B,IAAI,CAAC,OAAO,EAAE;YAC1BiG,IAAI,EAAE,IAAI;YACVoB,MAAM,EAAE;UACV,CAAC,CAAC;UACFjJ,aAAa,CAAC4B,IAAI,CAAC,SAAS,EAAE;YAACrB,IAAI,EAAEH;UAAwB,CAAC,CAAC;UAE/D,OAAO+E,OAAO;QAChB,CAAC,CAAC,CAEDqB,IAAI,CAAC,YAAM;UACVxG,aAAa,CAACmJ,UAAU,GAAG,CAAC;UAC5BnJ,aAAa,CAAC4B,IAAI,CAAC,MAAM,CAAC;UAC1B5B,aAAa,CAAC4B,IAAI,CAAC,SAAS,EAAE;YAACrB,IAAI,EAAEH;UAAwB,CAAC,CAAC;UAC/Dd,sBAAM,CAACmH,UAAU,CAAC4B,GAAG,CAAC;QACxB,CAAC,CAAC;MACN,CAAC,CAAC;MAEFxJ,QAAQ,CAAC,6CAA6C,EAAE,YAAM;QAC5DI,EAAE,CAAC,0CAA0C,EAAE,YAAM;UACnDgB,cAAc,CAACiG,OAAO,CAAC,CAAC;UACxBjG,cAAc,GAAGoC,cAAK,CAACC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC;UACrD9E,cAAc,CAAC6H,MAAM,CAAC,CAAC,CAAC,CAACvF,OAAO;UAC9B;UACA;UACA,IAAA6E,oBAAW,EAAC,CAAC,GAAGxH,YAAY,CAACF,MAAM,CAACK,gBAAgB;UAClD;UACA;UAAA,CACCyG,IAAI,CAAC;YAAA,OAAMhE,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC;UAAA,EACjC,CAAC;UACD,IAAM0C,OAAO,GAAGvF,YAAY,CAAC2G,OAAO,CAAC,CAAC;;UAEtC;UACA,OAAO,IAAAa,oBAAW,EAACxH,YAAY,CAACF,MAAM,CAACK,gBAAgB,CAAC,CAACyG,IAAI,kBAAAjB,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAC,SAAA2D,SAAA;YAAA,OAAA5D,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAyD,SAAA;cAAA,kBAAAA,SAAA,CAAAvD,IAAA,GAAAuD,SAAA,CAAAtD,IAAA;gBAAA;kBAC5D;kBACA;kBACAzG,sBAAM,CAACgK,SAAS,CAAC1J,YAAY,CAAC2J,WAAW,EAAE,yCAAyC,CAAC;kBACrFjK,sBAAM,CAACgK,SAAS,CAAC1J,YAAY,CAAC4J,MAAM,EAAE,oCAAoC,CAAC;kBAC3E;kBACA;kBACA5J,YAAY,CAACqG,UAAU,CAAC,CAAC;kBACzB3G,sBAAM,CAACiJ,WAAW,CAChB3I,YAAY,CAAC2J,WAAW,EACxB,2CACF,CAAC;kBACD;kBACAjK,sBAAM,CAACgK,SAAS,CAAC1J,YAAY,CAAC4J,MAAM,EAAE,oCAAoC,CAAC;kBAACH,SAAA,CAAAtD,IAAA;kBAAA,OAEtEzG,sBAAM,CAACkI,UAAU,CAACrC,OAAO,CAAC;gBAAA;gBAAA;kBAAA,OAAAkE,SAAA,CAAAhD,IAAA;cAAA;YAAA,GAAA+C,QAAA;UAAA,CACjC,GAAC;QACJ,CAAC,CAAC;QAEFnK,EAAE,CAAC,iDAAiD,EAAE,YAAM;UAC1DgB,cAAc,CAACiG,OAAO,CAAC,CAAC;UACxBjG,cAAc,GAAGoC,cAAK,CAACC,IAAI,CAACiC,eAAM,CAACQ,SAAS,EAAE,MAAM,CAAC;UACrD9E,cAAc,CAACsC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;UAEzC,IAAIwG,MAAM;UAEVrJ,YAAY,CAAC2J,WAAW,GAAGtI,SAAS;UAEpC,IAAMkE,OAAO,GAAGvF,YAAY,CAAC6J,iBAAiB,CAAC,kBAAkB,EAAE,UAACC,OAAO,EAAK;YAC9ET,MAAM,GAAGS,OAAO;UAClB,CAAC,CAAC;UAEF,OAAO,IAAAtC,oBAAW,EAACxH,YAAY,CAACF,MAAM,CAACK,gBAAgB,CAAC,CAACyG,IAAI,CAAC,YAAM;YAClElH,sBAAM,CAACyH,KAAK,CAACkC,MAAM,CAACU,OAAO,EAAE,wDAAwD,CAAC;;YAEtF;YACA,OAAOrK,sBAAM,CAACkI,UAAU,CAACrC,OAAO,CAAC;UACnC,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFtG,QAAQ,CAAC,mBAAmB,EAAE,YAAM;MAClCiE,UAAU,CAAC,YAAM;QACflD,YAAY,CAACF,MAAM,CAACkK,kBAAkB,GAAG,GAAG;MAC9C,CAAC,CAAC;MAEF3K,EAAE,CAAC,iDAAiD,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAoE,SAAA;QAAA,IAAAC,cAAA,EAAAC,cAAA,EAAAC,QAAA;QAAA,OAAAxE,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAqE,SAAA;UAAA,kBAAAA,SAAA,CAAAnE,IAAA,GAAAmE,SAAA,CAAAlE,IAAA;YAAA;cAAAkE,SAAA,CAAAlE,IAAA;cAAA,OAC9CnG,YAAY,CAAC2G,OAAO,CAAC,CAAC;YAAA;cAEtBuD,cAAc,GAAGlK,YAAY,CAACsK,cAAc,CAAC;gBACjDrI,IAAI,EAAE,MAAM;gBACZtB,IAAI,EAAE;kBACJ4J,KAAK,EAAE;gBACT;cACF,CAAC,CAAC;cAAAF,SAAA,CAAAlE,IAAA;cAAA,OAEI,IAAAqB,oBAAW,EAAC,CAAC;YAAA;cAEb2C,cAAc,GAAGxI,IAAI,CAACC,KAAK,CAACxB,aAAa,CAACyB,IAAI,CAACC,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAC,CAAC;cACtErC,sBAAM,CAACqJ,KAAK,CAACoB,cAAc,CAACxJ,IAAI,CAAC4J,KAAK,EAAE,MAAM,CAAC;cAE/CnK,aAAa,CAAC4B,IAAI,CAAC,SAAS,EAAE;gBAC5BrB,IAAI,EAAE,IAAAF,UAAA,CAAAtD,OAAA,EAAe;kBACnB8E,IAAI,EAAE,gBAAgB;kBACtBC,OAAO,EAAE,MAAM;kBACfjB,UAAU,EAAEkJ,cAAc,CAAClJ,UAAU;kBACrCM,UAAU,EAAE,GAAG;kBACfE,aAAa,EAAE;gBACjB,CAAC;cACH,CAAC,CAAC;cAAC4I,SAAA,CAAAlE,IAAA;cAAA,OAEoB+D,cAAc;YAAA;cAA/BE,QAAQ,GAAAC,SAAA,CAAAG,IAAA;cAEd9K,sBAAM,CAACqJ,KAAK,CAACqB,QAAQ,CAACnI,IAAI,EAAE,gBAAgB,CAAC;cAC7CvC,sBAAM,CAACqJ,KAAK,CAACqB,QAAQ,CAAClI,OAAO,EAAE,MAAM,CAAC;cACtCxC,sBAAM,CAACqJ,KAAK,CAACqB,QAAQ,CAACnJ,UAAU,EAAEkJ,cAAc,CAAClJ,UAAU,CAAC;cAC5DvB,sBAAM,CAACqJ,KAAK,CAACqB,QAAQ,CAAC7I,UAAU,EAAE,GAAG,CAAC;YAAC;YAAA;cAAA,OAAA8I,SAAA,CAAA5D,IAAA;UAAA;QAAA,GAAAwD,QAAA;MAAA,CACxC,GAAC;MAEF5K,EAAE,CAAC,uDAAuD,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAA4E,SAAA;QAAA,IAAAC,WAAA;QAAA,OAAA9E,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAA2E,SAAA;UAAA,kBAAAA,SAAA,CAAAzE,IAAA,GAAAyE,SAAA,CAAAxE,IAAA;YAAA;cAAAwE,SAAA,CAAAxE,IAAA;cAAA,OACpDnG,YAAY,CAAC2G,OAAO,CAAC,CAAC;YAAA;cAEtB+D,WAAW,GAAG/I,IAAI,CAACC,KAAK,CAACxB,aAAa,CAACyB,IAAI,CAAC+G,SAAS,CAAC7G,IAAI,CAAC,CAAC,CAAC,CAAC;cAEpErC,sBAAM,CAACqJ,KAAK,CAAC2B,WAAW,CAACzI,IAAI,EAAEE,wBAAa,CAACC,IAAI,CAAC;cAClD1C,sBAAM,CAACqJ,KAAK,CAAC2B,WAAW,CAAC/J,IAAI,CAAC4J,KAAK,EAAE,MAAM,CAAC;YAAC;YAAA;cAAA,OAAAI,SAAA,CAAAlE,IAAA;UAAA;QAAA,GAAAgE,QAAA;MAAA,CAC9C,GAAC;MAEFpL,EAAE,CAAC,mDAAmD,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAA+E,SAAA;QAAA,IAAAV,cAAA,EAAAC,cAAA,EAAAU,KAAA;QAAA,OAAAjF,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAA8E,SAAA;UAAA,kBAAAA,SAAA,CAAA5E,IAAA,GAAA4E,SAAA,CAAA3E,IAAA;YAAA;cAAA2E,SAAA,CAAA3E,IAAA;cAAA,OAChDnG,YAAY,CAAC2G,OAAO,CAAC,CAAC;YAAA;cAEtBuD,cAAc,GAAGlK,YAAY,CAACsK,cAAc,CAAC;gBACjDrI,IAAI,EAAE,MAAM;gBACZtB,IAAI,EAAE;kBACJ4J,KAAK,EAAE;gBACT;cACF,CAAC,CAAC;cAAAO,SAAA,CAAA3E,IAAA;cAAA,OAEI,IAAAqB,oBAAW,EAAC,CAAC;YAAA;cAEb2C,cAAc,GAAGxI,IAAI,CAACC,KAAK,CAACxB,aAAa,CAACyB,IAAI,CAACC,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAC,CAAC;cAEtE3B,aAAa,CAAC4B,IAAI,CAAC,SAAS,EAAE;gBAC5BrB,IAAI,EAAE,IAAAF,UAAA,CAAAtD,OAAA,EAAe;kBACnB8E,IAAI,EAAE,gBAAgB;kBACtBC,OAAO,EAAE,MAAM;kBACfjB,UAAU,EAAEkJ,cAAc,CAAClJ,UAAU;kBACrCM,UAAU,EAAE,GAAG;kBACfE,aAAa,EAAE;gBACjB,CAAC;cACH,CAAC,CAAC;cAACqJ,SAAA,CAAA3E,IAAA;cAAA,OAEiBzG,sBAAM,CAACkI,UAAU,CAACsC,cAAc,CAAC;YAAA;cAA/CW,KAAK,GAAAC,SAAA,CAAAN,IAAA;cAEX9K,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAACE,IAAI,EAAE,2BAA2B,CAAC;cACrDrL,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAACtJ,UAAU,EAAE,GAAG,CAAC;cACnC7B,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAACpJ,aAAa,EAAE,WAAW,CAAC;cAC9C/B,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAAC5J,UAAU,EAAEkJ,cAAc,CAAClJ,UAAU,CAAC;YAAC;YAAA;cAAA,OAAA6J,SAAA,CAAArE,IAAA;UAAA;QAAA,GAAAmE,QAAA;MAAA,CAC3D,GAAC;MAEFvL,EAAE,CAAC,mEAAmE,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAmF,SAAA;QAAA,IAAAd,cAAA,EAAAW,KAAA;QAAA,OAAAjF,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAiF,SAAA;UAAA,kBAAAA,SAAA,CAAA/E,IAAA,GAAA+E,SAAA,CAAA9E,IAAA;YAAA;cAAA8E,SAAA,CAAA9E,IAAA;cAAA,OAChEnG,YAAY,CAAC2G,OAAO,CAAC,CAAC;YAAA;cAEtBuD,cAAc,GAAGlK,YAAY,CAACsK,cAAc,CAAC;gBACjDrI,IAAI,EAAE,MAAM;gBACZtB,IAAI,EAAE;kBACJ4J,KAAK,EAAE;gBACT;cACF,CAAC,CAAC;cAEFpH,IAAI,CAACsE,mBAAmB,CAAC,GAAG,CAAC;cAACwD,SAAA,CAAA9E,IAAA;cAAA,OACxB,IAAAqB,oBAAW,EAAC,CAAC;YAAA;cAAAyD,SAAA,CAAA9E,IAAA;cAAA,OAECzG,sBAAM,CAACkI,UAAU,CAACsC,cAAc,CAAC;YAAA;cAA/CW,KAAK,GAAAI,SAAA,CAAAT,IAAA;cAEX9K,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAACE,IAAI,EAAE,2BAA2B,CAAC;cACrDrL,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAACtJ,UAAU,EAAE,GAAG,CAAC;cACnC7B,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAACpJ,aAAa,EAAE,qCAAqC,CAAC;YAAC;YAAA;cAAA,OAAAwJ,SAAA,CAAAxE,IAAA;UAAA;QAAA,GAAAuE,QAAA;MAAA,CAC1E,GAAC;MAEF3L,EAAE,CAAC,8EAA8E,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAqF,SAAA;QAAA,IAAAhB,cAAA,EAAAC,cAAA,EAAAU,KAAA;QAAA,OAAAjF,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAmF,SAAA;UAAA,kBAAAA,SAAA,CAAAjF,IAAA,GAAAiF,SAAA,CAAAhF,IAAA;YAAA;cAAAgF,SAAA,CAAAhF,IAAA;cAAA,OAC3EnG,YAAY,CAAC2G,OAAO,CAAC,CAAC;YAAA;cAEtBuD,cAAc,GAAGlK,YAAY,CAACsK,cAAc,CAAC;gBACjDrI,IAAI,EAAE,MAAM;gBACZtB,IAAI,EAAE;kBACJ4J,KAAK,EAAE;gBACT;cACF,CAAC,CAAC;cAAAY,SAAA,CAAAhF,IAAA;cAAA,OAEI,IAAAqB,oBAAW,EAAC,CAAC;YAAA;cAEb2C,cAAc,GAAGxI,IAAI,CAACC,KAAK,CAACxB,aAAa,CAACyB,IAAI,CAACC,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAC,CAAC;cAEtE3B,aAAa,CAAC4B,IAAI,CAAC,SAAS,EAAE;gBAC5BrB,IAAI,EAAE,IAAAF,UAAA,CAAAtD,OAAA,EAAe;kBACnB8E,IAAI,EAAE,gBAAgB;kBACtBC,OAAO,EAAE,MAAM;kBACfjB,UAAU,EAAEkJ,cAAc,CAAClJ;gBAC7B,CAAC;cACH,CAAC,CAAC;cAACkK,SAAA,CAAAhF,IAAA;cAAA,OAEiBzG,sBAAM,CAACkI,UAAU,CAACsC,cAAc,CAAC;YAAA;cAA/CW,KAAK,GAAAM,SAAA,CAAAX,IAAA;cAEX9K,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAACE,IAAI,EAAE,2BAA2B,CAAC;cACrDrL,sBAAM,CAACiJ,WAAW,CAACkC,KAAK,CAACtJ,UAAU,CAAC;cACpC7B,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAACpJ,aAAa,EAAE,qCAAqC,CAAC;YAAC;YAAA;cAAA,OAAA0J,SAAA,CAAA1E,IAAA;UAAA;QAAA,GAAAyE,QAAA;MAAA,CAC1E,GAAC;MAEF7L,EAAE,CAAC,wDAAwD,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAuF,SAAA;QAAA,IAAAlB,cAAA,EAAAW,KAAA;QAAA,OAAAjF,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAqF,SAAA;UAAA,kBAAAA,SAAA,CAAAnF,IAAA,GAAAmF,SAAA,CAAAlF,IAAA;YAAA;cAAAkF,SAAA,CAAAlF,IAAA;cAAA,OACrDnG,YAAY,CAAC2G,OAAO,CAAC,CAAC;YAAA;cAEtBuD,cAAc,GAAGlK,YAAY,CAACsK,cAAc,CAAC;gBACjDrI,IAAI,EAAE,MAAM;gBACZtB,IAAI,EAAE;kBACJ4J,KAAK,EAAE;gBACT;cACF,CAAC,CAAC;cAEFnK,aAAa,CAAC4B,IAAI,CAAC,OAAO,EAAE;gBAC1BiG,IAAI,EAAE,IAAI;gBACVoB,MAAM,EAAE;cACV,CAAC,CAAC;cAACgC,SAAA,CAAAlF,IAAA;cAAA,OAEiBzG,sBAAM,CAACkI,UAAU,CAACsC,cAAc,CAAC;YAAA;cAA/CW,KAAK,GAAAQ,SAAA,CAAAb,IAAA;cAEX9K,sBAAM,CAACC,UAAU,CAACkL,KAAK,EAAEtD,uBAAe,CAAC;cACzC7H,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAAC5C,IAAI,EAAE,IAAI,CAAC;cAC9BvI,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAACxB,MAAM,EAAE,0BAA0B,CAAC;YAAC;YAAA;cAAA,OAAAgC,SAAA,CAAA5E,IAAA;UAAA;QAAA,GAAA2E,QAAA;MAAA,CACxD,GAAC;MAEF/L,EAAE,CAAC,wBAAwB,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAyF,SAAA;QAAA,IAAAT,KAAA;QAAA,OAAAjF,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAuF,SAAA;UAAA,kBAAAA,SAAA,CAAArF,IAAA,GAAAqF,SAAA,CAAApF,IAAA;YAAA;cAAAoF,SAAA,CAAApF,IAAA;cAAA,OACrBnG,YAAY,CAAC2G,OAAO,CAAC,CAAC;YAAA;cAAA4E,SAAA,CAAApF,IAAA;cAAA,OAERzG,sBAAM,CAACkI,UAAU,CAAC5H,YAAY,CAACsK,cAAc,CAAC,EAAE,CAAC,CAAC;YAAA;cAAhEO,KAAK,GAAAU,SAAA,CAAAf,IAAA;cAEX9K,sBAAM,CAACqJ,KAAK,CAAC8B,KAAK,CAACd,OAAO,EAAE,uBAAuB,CAAC;YAAC;YAAA;cAAA,OAAAwB,SAAA,CAAA9E,IAAA;UAAA;QAAA,GAAA6E,QAAA;MAAA,CACtD,GAAC;IACJ,CAAC,CAAC;IAEFrM,QAAQ,CAAC,6BAA6B,EAAE,YAAM;MAC5CI,EAAE,CAAC,qCAAqC,EAAE,YAAM;QAC9CW,YAAY,CAAC4J,MAAM,GAAG;UACpB7C,SAAS,EAAE,IAAI;UACfyE,GAAG,EAAE;QACP,CAAC;QAED9L,sBAAM,CAACqJ,KAAK,CAAC/I,YAAY,CAACyL,wBAAwB,CAAC,CAAC,EAAE,wBAAwB,CAAC;MACjF,CAAC,CAAC;MAEFpM,EAAE,CAAC,sCAAsC,EAAE,YAAM;QAC/CW,YAAY,CAAC4J,MAAM,GAAG;UACpB7C,SAAS,EAAE,KAAK;UAChByE,GAAG,EAAE;QACP,CAAC;QAED9L,sBAAM,CAACiJ,WAAW,CAAC3I,YAAY,CAACyL,wBAAwB,CAAC,CAAC,CAAC;MAC7D,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFxM,QAAQ,CAAC,UAAU,EAAE,YAAM;MACzBI,EAAE,CAAC,oEAAoE,EAAE,YAAM;QAC7E,IAAMwL,KAAK,GAAG,OAAO;QACrB,IAAMa,KAAK,GAAG;UAAC/K,IAAI,EAAE;QAAW,CAAC;QACjCX,YAAY,CAACsJ,EAAE,CAAC,OAAO,EAAE,YAAM;UAC7B,MAAMuB,KAAK;QACb,CAAC,CAAC;QACFpI,cAAK,CAACC,IAAI,CAAC1C,YAAY,CAACyE,MAAM,EAAE,OAAO,CAAC;QAExC,OAAO7B,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC7C,YAAY,CAAC2L,SAAS,CAAC,OAAO,EAAED,KAAK,CAAC,CAAC,CAAC9E,IAAI,CAAC,UAACgF,GAAG,EAAK;UAC3ElM,sBAAM,CAACwH,UAAU,CACflH,YAAY,CAACyE,MAAM,CAACoG,KAAK,EACzB,gDAAgD,EAChDA,KAAK,EACL,cAAc,EACd,CAAC,OAAO,EAAEa,KAAK,CACjB,CAAC;UAED,OAAOE,GAAG;QACZ,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF3M,QAAQ,CAAC,gBAAgB,EAAE,YAAM;MAC/BI,EAAE,CAAC,4DAA4D,EAAE;QAAA,OAC/DW,YAAY,CAAC6L,UAAU,CAAC,mBAAmB,CAAC,CAACjF,IAAI,CAAC,UAACkF,KAAK,EAAK;UAC3DpM,sBAAM,CAACqJ,KAAK,CAAC+C,KAAK,EAAE,mBAAmB,CAAC;QAC1C,CAAC,CAAC;MAAA,EAAC;MAELzM,EAAE,CAAC,2DAA2D,EAAE;QAAA,OAC9DW,YAAY,CAAC6L,UAAU,CAAC,CAAC,CAACjF,IAAI,CAAC,UAACkF,KAAK,EAAK;UACxCpM,sBAAM,CAACqJ,KAAK,CAAC+C,KAAK,EAAE,kBAAkB,CAAC;QACzC,CAAC,CAAC;MAAA,EAAC;IACP,CAAC,CAAC;IAEF7M,QAAQ,CAAC,mBAAmB,EAAE,YAAM;MAClCA,QAAQ,CAAC,4BAA4B,EAAE,YAAM;QAC3C,IAAI8M,sBAAsB;QAE1B7I,UAAU,CAAC,YAAM;UACflD,YAAY,CAAC+G,SAAS,GAAG,IAAI;UAC7B/G,YAAY,CAAC4J,MAAM,GAAG;YACpB4B,GAAG,EAAE,qBAAqB;YAC1B1I,kBAAkB,EAAEL,cAAK,CAACC,IAAI,CAAC;UACjC,CAAC;UACDqJ,sBAAsB,GAAGtJ,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,oBAAoB,CAAC;UACvE+L,sBAAsB,CAACpJ,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;UACjDJ,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,WAAW,CAAC;QACvC,CAAC,CAAC;QAEFb,SAAS,CAAC,YAAM;UACd4M,sBAAsB,CAACzF,OAAO,CAAC,CAAC;UAChCtG,YAAY,CAAC2L,SAAS,CAACrF,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC;QAEFjH,EAAE,CAAC,qDAAqD,EAAE,YAAM;UAC9DW,YAAY,CAACgM,6BAA6B,GAAG;YAACC,WAAW,EAAE;UAAI,CAAC;UAEhEjM,YAAY,CAACkM,sBAAsB,CAAC,CAAC;UAErCxM,sBAAM,CAACgH,SAAS,CAACqF,sBAAsB,CAAC;QAC1C,CAAC,CAAC;QAEF1M,EAAE,CAAC,yCAAyC,EAAE,YAAM;UAClDW,YAAY,CAACkM,sBAAsB,CAAC,CAAC;UAErCxM,sBAAM,CAACmH,UAAU,CAACkF,sBAAsB,CAAC;UACzC,IAAMI,QAAQ,GAAGJ,sBAAsB,CAACnD,SAAS,CAAC7G,IAAI;UACtDrC,sBAAM,CAACiJ,WAAW,CAACwD,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UACjCzM,sBAAM,CAAC0M,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAC9BzM,sBAAM,CAACsH,MAAM,CAACmF,QAAQ,CAAC,CAAC,CAAC,CAACE,oBAAoB,CAAC;UAC/C3M,sBAAM,CAAC0M,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC,CAACG,cAAc,CAAC;UAC3C5M,sBAAM,CAACsH,MAAM,CAACmF,QAAQ,CAAC,CAAC,CAAC,CAACG,cAAc,CAACD,oBAAoB,CAAC;QAChE,CAAC,CAAC;QAEFhN,EAAE,CAAC,yDAAyD,EAAE,UAACkN,IAAI,EAAK;UACtEvM,YAAY,CAACkM,sBAAsB,CAAC,CAAC;UAErCzG,OAAO,CAACC,QAAQ,CAAC,YAAM;YACrBhG,sBAAM,CAACmH,UAAU,CAACkF,sBAAsB,CAAC;YACzC,IAAMI,QAAQ,GAAGJ,sBAAsB,CAACnD,SAAS,CAAC7G,IAAI;YACtDrC,sBAAM,CAACiJ,WAAW,CAACwD,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjCzM,sBAAM,CAAC0M,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9BzM,sBAAM,CAACsH,MAAM,CAACmF,QAAQ,CAAC,CAAC,CAAC,CAACE,oBAAoB,CAAC;YAC/C3M,sBAAM,CAAC0M,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC,CAACG,cAAc,CAAC;YAC3C5M,sBAAM,CAACsH,MAAM,CAACmF,QAAQ,CAAC,CAAC,CAAC,CAACG,cAAc,CAACD,oBAAoB,CAAC;YAC9DE,IAAI,CAAC,CAAC;UACR,CAAC,CAAC;QACJ,CAAC,CAAC;QAEFlN,EAAE,CAAC,4CAA4C,EAAE,YAAM;UACrD0M,sBAAsB,CAACzF,OAAO,CAAC,CAAC;UAChC7D,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,oBAAoB,CAAC,CAACwM,MAAM,CAAC,IAAIC,KAAK,CAAC,mBAAmB,CAAC,CAAC;UAErFzM,YAAY,CAACkM,sBAAsB,CAAC,CAAC;UAErCxM,sBAAM,CAACiJ,WAAW,CAAC3I,YAAY,CAACgM,6BAA6B,CAAC;UAC9DhM,YAAY,CAAC0M,kBAAkB,CAACpG,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFrH,QAAQ,CAAC,qCAAqC,EAAE,YAAM;QACpDiE,UAAU,CAAC,YAAM;UACfT,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,wBAAwB,CAAC;UAClDyC,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,WAAW,CAAC;QACvC,CAAC,CAAC;QAEFb,SAAS,CAAC,YAAM;UACda,YAAY,CAACkM,sBAAsB,CAAC5F,OAAO,CAAC,CAAC;UAC7CtG,YAAY,CAAC2L,SAAS,CAACrF,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC;QAEFjH,EAAE,CAAC,4DAA4D,EAAE,YAAM;UACrE,IAAMsN,aAAa,GAAG;YACpBhM,IAAI,EAAE;cACJsB,IAAI,EAAE;YACR;UACF,CAAC;UAED,IAAM2K,MAAM,GAAG5M,YAAY,CAAC6M,SAAS,CAACF,aAAa,CAAC;UAEpDjN,sBAAM,CAACmH,UAAU,CAAC7G,YAAY,CAACkM,sBAAsB,CAAC;UACtDxM,sBAAM,CAACwH,UAAU,CACflH,YAAY,CAAC2L,SAAS,EACtB,gCAAgC,EAChCgB,aAAa,CAAChM,IAChB,CAAC;UACDjB,sBAAM,CAACC,UAAU,CAACiN,MAAM,EAAAhK,QAAA,CAAAzF,OAAS,CAAC;QACpC,CAAC,CAAC;QAEFkC,EAAE,CAAC,mEAAmE,EAAE,YAAM;UAC5E,IAAMsN,aAAa,GAAG;YACpBhM,IAAI,EAAE;cACJsB,IAAI,EAAE;YACR;UACF,CAAC;UAEDjC,YAAY,CAAC6M,SAAS,CAACF,aAAa,CAAC;UAErCjN,sBAAM,CAACmH,UAAU,CAAC7G,YAAY,CAACkM,sBAAsB,CAAC;QACxD,CAAC,CAAC;QAEF7M,EAAE,CAAC,gEAAgE,EAAE,YAAM;UACzE,IAAMyN,YAAY,GAAG;YACnBnM,IAAI,EAAE;cACJsB,IAAI,EAAE,SAAS;cACftB,IAAI,EAAE;gBACJC,SAAS,EAAE;cACb;YACF;UACF,CAAC;UAEDZ,YAAY,CAAC6M,SAAS,CAACC,YAAY,CAAC;UAEpCpN,sBAAM,CAACgH,SAAS,CAAC1G,YAAY,CAACkM,sBAAsB,CAAC;QACvD,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFjN,QAAQ,CAAC,8CAA8C,EAAE,YAAM;QAC7DiE,UAAU,CAAC,YAAM;UACfT,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,WAAW,CAAC;QACvC,CAAC,CAAC;QAEFb,SAAS,CAAC,YAAM;UACda,YAAY,CAAC2L,SAAS,CAACrF,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC;QAEFjH,EAAE,CAAC,kDAAkD,EAAE,YAAM;UAC3D,IAAMqM,KAAK,GAAG;YACZ/K,IAAI,EAAE;cACJsB,IAAI,EAAE;cACN;YACF;UACF,CAAC;UAED,IAAM2K,MAAM,GAAG5M,YAAY,CAAC6M,SAAS,CAACnB,KAAK,CAAC;UAE5ChM,sBAAM,CAACC,UAAU,CAACiN,MAAM,EAAAhK,QAAA,CAAAzF,OAAS,CAAC;UAClCuC,sBAAM,CAACwH,UAAU,CAAClH,YAAY,CAAC2L,SAAS,EAAE,OAAO,EAAED,KAAK,CAAC/K,IAAI,CAAC;QAChE,CAAC,CAAC;QAEFtB,EAAE,CAAC,mDAAmD,EAAE,YAAM;UAC5D,IAAMqM,KAAK,GAAG;YACZ/K,IAAI,EAAE;cACJsB,IAAI,EAAE,UAAU;cAChBtB,IAAI,EAAE;gBACJ;gBACAoM,SAAS,EAAE;cACb;YACF;UACF,CAAC;UAED,IAAMH,MAAM,GAAG5M,YAAY,CAAC6M,SAAS,CAACnB,KAAK,CAAC;UAE5ChM,sBAAM,CAACC,UAAU,CAACiN,MAAM,EAAAhK,QAAA,CAAAzF,OAAS,CAAC;UAClCuC,sBAAM,CAACwH,UAAU,CAAClH,YAAY,CAAC2L,SAAS,EAAE,OAAO,EAAED,KAAK,CAAC/K,IAAI,CAAC;QAChE,CAAC,CAAC;QAEFtB,EAAE,CAAC,wFAAwF,EAAE,YAAM;UACjG,IAAMqM,KAAK,GAAG;YACZ/K,IAAI,EAAE;cACJD,EAAE,EAAE,SAAS;cACbsM,cAAc,EAAE,CAAC;cACjBrM,IAAI,EAAE;gBACJY,UAAU,EAAE;cACd;YACF;UACF,CAAC;UAED,IAAMqL,MAAM,GAAG5M,YAAY,CAAC6M,SAAS,CAACnB,KAAK,CAAC;UAE5ChM,sBAAM,CAACC,UAAU,CAACiN,MAAM,EAAAhK,QAAA,CAAAzF,OAAS,CAAC;UAClCuC,sBAAM,CAACmH,UAAU,CAAC7G,YAAY,CAAC2L,SAAS,CAAC;UACzCjM,sBAAM,CAACwH,UAAU,CAAClH,YAAY,CAAC2L,SAAS,EAAE,OAAO,EAAED,KAAK,CAAC/K,IAAI,CAAC;QAChE,CAAC,CAAC;QAEFtB,EAAE,CAAC,sDAAsD,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAoH,SAAA;UAAA,IAAAvB,KAAA;UAAA,OAAA9F,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAkH,SAAA;YAAA,kBAAAA,SAAA,CAAAhH,IAAA,GAAAgH,SAAA,CAAA/G,IAAA;cAAA;gBACnDuF,KAAK,GAAG;kBACZ/K,IAAI,EAAE;oBACJA,IAAI,EAAE;sBACJC,SAAS,EAAE;oBACb;kBACF;gBACF,CAAC;gBAAAsM,SAAA,CAAA/G,IAAA;gBAAA,OAEKnG,YAAY,CAAC6M,SAAS,CAACnB,KAAK,CAAC;cAAA;gBAEnChM,sBAAM,CAACwH,UAAU,CAAClH,YAAY,CAAC2L,SAAS,EAAE,oBAAoB,EAAED,KAAK,CAAC/K,IAAI,CAAC;gBAC3EjB,sBAAM,CAACwH,UAAU,CAAClH,YAAY,CAAC2L,SAAS,EAAE,6BAA6B,EAAED,KAAK,CAAC/K,IAAI,CAAC;cAAC;cAAA;gBAAA,OAAAuM,SAAA,CAAAzG,IAAA;YAAA;UAAA,GAAAwG,QAAA;QAAA,CACtF,GAAC;MACJ,CAAC,CAAC;MAEFhO,QAAQ,CAAC,yCAAyC,EAAE,YAAM;QACxD,IAAIkO,yBAAyB;QAE7BjK,UAAU,CAAC,YAAM;UACfiK,yBAAyB,GAAGnN,YAAY,CAACF,MAAM,CAACsN,iBAAiB;QACnE,CAAC,CAAC;QAEFjO,SAAS,CAAC,YAAM;UACda,YAAY,CAACF,MAAM,CAACsN,iBAAiB,GAAGD,yBAAyB;QACnE,CAAC,CAAC;QAEF9N,EAAE,CAAC,2CAA2C,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAwH,SAAA;UAAA,IAAArK,OAAA;UAAA,OAAA4C,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAsH,SAAA;YAAA,kBAAAA,SAAA,CAAApH,IAAA,GAAAoH,SAAA,CAAAnH,IAAA;cAAA;gBACxCnD,OAAO,GAAGP,cAAK,CAACgG,GAAG,CAACzI,YAAY,EAAE,WAAW,CAAC;gBAAAsN,SAAA,CAAAnH,IAAA;gBAAA,OAE9CnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,OAAO,CAAC,CAAC;cAAA;gBAAAiL,SAAA,CAAAnH,IAAA;gBAAA,OACjDnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,OAAO,CAAC,CAAC;cAAA;gBAEvD3C,sBAAM,CAACqJ,KAAK,CAAChG,sBAAsB,CAACC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChDA,OAAO,CAACsD,OAAO,CAAC,CAAC;cAAC;cAAA;gBAAA,OAAAgH,SAAA,CAAA7G,IAAA;YAAA;UAAA,GAAA4G,QAAA;QAAA,CACnB,GAAC;QAEFhO,EAAE,CAAC,wFAAwF,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAA0H,UAAA;UAAA,IAAAvK,OAAA;UAAA,OAAA4C,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAwH,UAAA;YAAA,kBAAAA,UAAA,CAAAtH,IAAA,GAAAsH,UAAA,CAAArH,IAAA;cAAA;gBACrFnD,OAAO,GAAGP,cAAK,CAACgG,GAAG,CAACzI,YAAY,EAAE,WAAW,CAAC;gBACpDA,YAAY,CAAC4J,MAAM,GAAGrH,mBAAmB,CAAC,CAAC;gBAACiL,UAAA,CAAArH,IAAA;gBAAA,OAEtCnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,OAAO,CAAC,CAAC;cAAA;gBAEvDrC,YAAY,CAAC4J,MAAM,GAAGrH,mBAAmB,CAAC,CAAC;gBAACiL,UAAA,CAAArH,IAAA;gBAAA,OACtCnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,OAAO,CAAC,CAAC;cAAA;gBAEvD3C,sBAAM,CAACqJ,KAAK,CAAChG,sBAAsB,CAACC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChDA,OAAO,CAACsD,OAAO,CAAC,CAAC;cAAC;cAAA;gBAAA,OAAAkH,UAAA,CAAA/G,IAAA;YAAA;UAAA,GAAA8G,SAAA;QAAA,CACnB,GAAC;QAEFlO,EAAE,CAAC,sEAAsE,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAA4H,UAAA;UAAA,IAAAzK,OAAA;UAAA,OAAA4C,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAA0H,UAAA;YAAA,kBAAAA,UAAA,CAAAxH,IAAA,GAAAwH,UAAA,CAAAvH,IAAA;cAAA;gBACnEnD,OAAO,GAAGP,cAAK,CAACgG,GAAG,CAACzI,YAAY,EAAE,WAAW,CAAC;gBAEpDA,YAAY,CAACF,MAAM,CAACsN,iBAAiB,GAAG,CAAC;gBAACM,UAAA,CAAAvH,IAAA;gBAAA,OAEpCnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,IAAI,CAAC,CAAC;cAAA;gBAAAqL,UAAA,CAAAvH,IAAA;gBAAA,OAC9CnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,IAAI,CAAC,CAAC;cAAA;gBAAAqL,UAAA,CAAAvH,IAAA;gBAAA,OAC9CnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,IAAI,CAAC,CAAC;cAAA;gBAAAqL,UAAA,CAAAvH,IAAA;gBAAA,OAC9CnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,IAAI,CAAC,CAAC;cAAA;gBAAAqL,UAAA,CAAAvH,IAAA;gBAAA,OAC9CnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,IAAI,CAAC,CAAC;cAAA;gBAAAqL,UAAA,CAAAvH,IAAA;gBAAA,OAC9CnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,IAAI,CAAC,CAAC;cAAA;gBAEpD3C,sBAAM,CAACqJ,KAAK,CAAChG,sBAAsB,CAACC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChDA,OAAO,CAACsD,OAAO,CAAC,CAAC;cAAC;cAAA;gBAAA,OAAAoH,UAAA,CAAAjH,IAAA;YAAA;UAAA,GAAAgH,SAAA;QAAA,CACnB,GAAC;QAEFpO,EAAE,CAAC,sCAAsC,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAA8H,UAAA;UAAA,IAAA3K,OAAA;UAAA,OAAA4C,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAA4H,UAAA;YAAA,kBAAAA,UAAA,CAAA1H,IAAA,GAAA0H,UAAA,CAAAzH,IAAA;cAAA;gBACnCnD,OAAO,GAAGP,cAAK,CAACgG,GAAG,CAACzI,YAAY,EAAE,WAAW,CAAC;gBAAA4N,UAAA,CAAAzH,IAAA;gBAAA,OAE9CnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,OAAO,CAAC,CAAC;cAAA;gBAEvDrC,YAAY,CAAC4J,MAAM,GAAGrH,mBAAmB,CAAC,CAAC;gBAACqL,UAAA,CAAAzH,IAAA;gBAAA,OACtCnG,YAAY,CAACqG,UAAU,CAAC,CAAC;cAAA;gBAAAuH,UAAA,CAAAzH,IAAA;gBAAA,OACzBnG,YAAY,CAAC6M,SAAS,CAACxK,gBAAgB,CAAC,OAAO,CAAC,CAAC;cAAA;gBAEvD3C,sBAAM,CAACqJ,KAAK,CAAChG,sBAAsB,CAACC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChDA,OAAO,CAACsD,OAAO,CAAC,CAAC;cAAC;cAAA;gBAAA,OAAAsH,UAAA,CAAAnH,IAAA;YAAA;UAAA,GAAAkH,SAAA;QAAA,CACnB,GAAC;MACJ,CAAC,CAAC;MAEF1O,QAAQ,CAAC,mDAAmD,EAAE,YAAM;QAClE,IAAI4O,UAAU;QACd,IAAIC,aAAa;QAEjB5K,UAAU,CAAC,YAAM;UACf2K,UAAU,GAAG;YACXrC,GAAG,EAAE,wBAAwB;YAC7B1I,kBAAkB,EAAEL,cAAK,CAACC,IAAI,CAAC;UACjC,CAAC;UACDoL,aAAa,GAAG;YACdtC,GAAG,EAAE,qBAAqB;YAC1B1I,kBAAkB,EAAEL,cAAK,CAACC,IAAI,CAAC;UACjC,CAAC;UACD1C,YAAY,CAAC4J,MAAM,GAAGiE,UAAU;UAChC7N,YAAY,CAAC+G,SAAS,GAAG,IAAI;UAC7BtE,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,WAAW,CAAC;UACrCyC,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,WAAW,CAAC;QACvC,CAAC,CAAC;QAEFb,SAAS,CAAC,YAAM;UACda,YAAY,CAAC2L,SAAS,CAACrF,OAAO,CAAC,CAAC;UAChCtG,YAAY,CAAC+N,SAAS,CAACzH,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC;QAEFjH,EAAE,CAAC,iEAAiE,EAAE,YAAM;UAC1E,IAAM2O,UAAU,GAAG;YACjB/F,IAAI,EAAE,IAAI;YACVoB,MAAM,EAAE;UACV,CAAC;UAEDrJ,YAAY,CAACiO,OAAO,CAACD,UAAU,EAAEH,UAAU,CAAC;UAE5CnO,sBAAM,CAACwH,UAAU,CAAClH,YAAY,CAAC2L,SAAS,EAAE,mBAAmB,EAAEqC,UAAU,CAAC;UAC1EtO,sBAAM,CAACgH,SAAS,CAAC1G,YAAY,CAAC+N,SAAS,CAAC;UACxCrO,sBAAM,CAACoH,OAAO,CAAC9G,YAAY,CAAC+G,SAAS,CAAC;QACxC,CAAC,CAAC;QAEF1H,EAAE,CAAC,uEAAuE,EAAE,YAAM;UAChF,IAAM2O,UAAU,GAAG;YACjB/F,IAAI,EAAE,IAAI;YACVoB,MAAM,EAAE;UACV,CAAC;UAEDrJ,YAAY,CAACiO,OAAO,CAACD,UAAU,EAAEF,aAAa,CAAC;UAE/CpO,sBAAM,CAACwH,UAAU,CAAClH,YAAY,CAAC2L,SAAS,EAAE,kBAAkB,EAAEqC,UAAU,CAAC;UACzEtO,sBAAM,CAACgH,SAAS,CAAC1G,YAAY,CAAC+N,SAAS,CAAC;UACxCrO,sBAAM,CAACsH,MAAM,CAAChH,YAAY,CAAC+G,SAAS,CAAC;UACrCrH,sBAAM,CAACwO,WAAW,CAAClO,YAAY,CAAC4J,MAAM,EAAEiE,UAAU,CAAC;QACrD,CAAC,CAAC;QAEFxO,EAAE,CAAC,gEAAgE,EAAE,YAAM;UACzE,IAAM2O,UAAU,GAAG;YACjB/F,IAAI,EAAE,IAAI;YACVoB,MAAM,EAAE;UACV,CAAC;;UAED;UACArJ,YAAY,CAACiO,OAAO,CAACD,UAAU,EAAEF,aAAa,CAAC;UAC/CpO,sBAAM,CAACwH,UAAU,CAAClH,YAAY,CAAC2L,SAAS,EAAE,kBAAkB,EAAEqC,UAAU,CAAC;;UAEzE;UACAhO,YAAY,CAAC2L,SAAS,CAACwC,YAAY,CAAC,CAAC;;UAErC;UACAnO,YAAY,CAACiO,OAAO,CAACD,UAAU,EAAEH,UAAU,CAAC;UAC5CnO,sBAAM,CAACwH,UAAU,CAAClH,YAAY,CAAC2L,SAAS,EAAE,mBAAmB,EAAEqC,UAAU,CAAC;QAC5E,CAAC,CAAC;QAEF3O,EAAE,CAAC,qEAAqE,EAAE,YAAM;UAC9E,IAAM2O,UAAU,GAAG;YACjB/F,IAAI,EAAE,IAAI;YACVoB,MAAM,EAAE;UACV,CAAC;UAEDrJ,YAAY,CAACiO,OAAO,CAACD,UAAU,EAAE3M,SAAS,CAAC;UAE3C3B,sBAAM,CAACwH,UAAU,CAAClH,YAAY,CAAC2L,SAAS,EAAE,kBAAkB,EAAEqC,UAAU,CAAC;UACzEtO,sBAAM,CAACgH,SAAS,CAAC1G,YAAY,CAAC+N,SAAS,CAAC;QAC1C,CAAC,CAAC;QAEF1O,EAAE,CAAC,uEAAuE,EAAE,YAAM;UAChF,IAAM2O,UAAU,GAAG;YACjB/F,IAAI,EAAE,IAAI;YACVoB,MAAM,EAAE;UACV,CAAC;UAEDrJ,YAAY,CAACiO,OAAO,CAACD,UAAU,EAAEF,aAAa,CAAC;UAE/CpO,sBAAM,CAACmH,UAAU,CAACiH,aAAa,CAAChL,kBAAkB,CAAC;QACrD,CAAC,CAAC;QAEFzD,EAAE,CAAC,qFAAqF,EAAE,YAAM;UAC9F,IAAM2O,UAAU,GAAG;YACjB/F,IAAI,EAAE,IAAI;YACVoB,MAAM,EAAE;UACV,CAAC;UAEDrJ,YAAY,CAACiO,OAAO,CAACD,UAAU,EAAEH,UAAU,CAAC;UAE5CnO,sBAAM,CAACmH,UAAU,CAACgH,UAAU,CAAC/K,kBAAkB,CAAC;QAClD,CAAC,CAAC;MACJ,CAAC,CAAC;MAEF7D,QAAQ,CAAC,sCAAsC,EAAE,YAAM;QACrD,IAAI8M,sBAAsB;QAE1B7I,UAAU,CAAC,YAAM;UACflD,YAAY,CAAC+G,SAAS,GAAG,IAAI;UAC7B/G,YAAY,CAAC4J,MAAM,GAAG;YACpB4B,GAAG,EAAE,qBAAqB;YAC1B1I,kBAAkB,EAAEL,cAAK,CAACC,IAAI,CAAC;UACjC,CAAC;UACDqJ,sBAAsB,GAAGtJ,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,oBAAoB,CAAC;UACvEyC,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,WAAW,CAAC;QACvC,CAAC,CAAC;QAEFb,SAAS,CAAC,YAAM;UACd4M,sBAAsB,CAACzF,OAAO,CAAC,CAAC;UAChCtG,YAAY,CAAC2L,SAAS,CAACrF,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC;QAEFjH,EAAE,CAAC,kEAAkE,EAAE,UAACkN,IAAI,EAAK;UAC/ER,sBAAsB,CAACpJ,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;UAEjD7C,YAAY,CAACkM,sBAAsB,CAAC,CAAC;UAErCzG,OAAO,CAACC,QAAQ,CAAC,YAAM;YACrBhG,sBAAM,CAACmH,UAAU,CAACkF,sBAAsB,CAAC;YACzC,IAAMI,QAAQ,GAAGJ,sBAAsB,CAACnD,SAAS,CAAC7G,IAAI;YAEtDrC,sBAAM,CAACiJ,WAAW,CAACwD,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjCzM,sBAAM,CAAC0M,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5BzM,sBAAM,CAACsH,MAAM,CAACmF,QAAQ,CAAC,CAAC,CAAC,CAACE,oBAAoB,CAAC;YAC/C3M,sBAAM,CAAC0M,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC,CAACG,cAAc,CAAC;YAC3C5M,sBAAM,CAACsH,MAAM,CAACmF,QAAQ,CAAC,CAAC,CAAC,CAACG,cAAc,CAACD,oBAAoB,CAAC;YAC9DE,IAAI,CAAC,CAAC;UACR,CAAC,CAAC;QACJ,CAAC,CAAC;QAEFlN,EAAE,CAAC,4DAA4D,EAAE,YAAM;UACrE0M,sBAAsB,CAACnH,SAAS,CAAC,YAAM;YACrC5E,YAAY,CAACgM,6BAA6B,GAAG;cAACC,WAAW,EAAE;YAAI,CAAC;YAEhE,OAAO,IAAArJ,QAAA,CAAAzF,OAAA,CAAY,YAAM,CAAC,CAAC,CAAC,CAAC,CAAC;UAChC,CAAC,CAAC;UAEF6C,YAAY,CAACkM,sBAAsB,CAAC,CAAC;UAErCxM,sBAAM,CAAC0O,IAAI,CAACpO,YAAY,CAACgM,6BAA6B,CAAC;QACzD,CAAC,CAAC;QAEF3M,EAAE,CAAC,qDAAqD,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAwI,UAAA;UAAA,IAAAC,SAAA,EAAAC,gBAAA;UAAA,OAAA3I,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAwI,UAAA;YAAA,kBAAAA,UAAA,CAAAtI,IAAA,GAAAsI,UAAA,CAAArI,IAAA;cAAA;gBACxD4F,sBAAsB,CAACnH,SAAS,CAAC,UAAC4G,GAAG,EAAEiD,OAAO,EAAK;kBACjD,IAAIA,OAAO,IAAIA,OAAO,CAACnC,cAAc,IAAImC,OAAO,CAACnC,cAAc,CAACoC,SAAS,EAAE;oBACzE,IAAMC,SAAS,GAAG;sBAACnD,GAAG,EAAE;oBAAqB,CAAC;oBAC9CiD,OAAO,CAACnC,cAAc,CAACoC,SAAS,CAACC,SAAS,EAAE,qBAAqB,CAAC;kBACpE;kBAEA,OAAO/L,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC;gBAC1B,CAAC,CAAC;gBAEF7C,YAAY,CAACkM,sBAAsB,CAAC,CAAC;gBAACsC,UAAA,CAAArI,IAAA;gBAAA,OAEhC,IAAAqB,oBAAW,EAAC,EAAE,CAAC;cAAA;gBAEf8G,SAAS,GAAGtO,YAAY,CAAC2L,SAAS,CAAC1I,QAAQ,CAAC,CAAC;gBAC7CsL,gBAAgB,GAAGD,SAAS,CAACM,IAAI,CACrC,UAAClR,IAAI;kBAAA,OAAKA,IAAI,CAACqE,IAAI,CAAC,CAAC,CAAC,KAAK,2CAA2C;gBAAA,CACxE,CAAC;gBAEDrC,sBAAM,CAACsH,MAAM,CAACuH,gBAAgB,EAAE,uCAAuC,CAAC;cAAC;cAAA;gBAAA,OAAAC,UAAA,CAAA/H,IAAA;YAAA;UAAA,GAAA4H,SAAA;QAAA,CAC1E,GAAC;QAEFhP,EAAE,CAAC,4DAA4D,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAgJ,UAAA;UAAA,IAAAC,SAAA,EAAAR,SAAA,EAAAS,eAAA;UAAA,OAAAnJ,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAgJ,UAAA;YAAA,kBAAAA,UAAA,CAAA9I,IAAA,GAAA8I,UAAA,CAAA7I,IAAA;cAAA;gBACzD2I,SAAS,GAAG,IAAIrC,KAAK,CAAC,mBAAmB,CAAC;gBAEhDV,sBAAsB,CAACpJ,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAACwH,SAAS,CAAC,CAAC;gBAEzD9O,YAAY,CAACkM,sBAAsB,CAAC,CAAC;gBAAC8C,UAAA,CAAA7I,IAAA;gBAAA,OAChC,IAAAqB,oBAAW,EAAC,EAAE,CAAC;cAAA;gBAEf8G,SAAS,GAAGtO,YAAY,CAAC2L,SAAS,CAAC1I,QAAQ,CAAC,CAAC;gBAC7C8L,eAAe,GAAGT,SAAS,CAACM,IAAI,CACpC,UAAClR,IAAI;kBAAA,OACHA,IAAI,CAACqE,IAAI,CAAC,CAAC,CAAC,KAAK,yCAAyC,IAC1DrE,IAAI,CAACqE,IAAI,CAAC,CAAC,CAAC,IACZrE,IAAI,CAACqE,IAAI,CAAC,CAAC,CAAC,CAACsH,MAAM,KAAKyF,SAAS;gBAAA,CACrC,CAAC;gBAEDpP,sBAAM,CAACsH,MAAM,CAAC+H,eAAe,EAAE,qCAAqC,CAAC;cAAC;cAAA;gBAAA,OAAAC,UAAA,CAAAvI,IAAA;YAAA;UAAA,GAAAoI,SAAA;QAAA,CACvE,GAAC;QAEFxP,EAAE,CAAC,yEAAyE,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAoJ,UAAA;UAAA,OAAArJ,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAkJ,UAAA;YAAA,kBAAAA,UAAA,CAAAhJ,IAAA,GAAAgJ,UAAA,CAAA/I,IAAA;cAAA;gBAC5E4F,sBAAsB,CAACpJ,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAImF,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAEnEzM,YAAY,CAACkM,sBAAsB,CAAC,CAAC;gBAACgD,UAAA,CAAA/I,IAAA;gBAAA,OAChC,IAAAqB,oBAAW,EAAC,EAAE,CAAC;cAAA;gBAErB9H,sBAAM,CAACqJ,KAAK,CAAC/I,YAAY,CAAC4J,MAAM,CAAC9G,kBAAkB,CAACqM,SAAS,EAAE,CAAC,CAAC;cAAC;cAAA;gBAAA,OAAAD,UAAA,CAAAzI,IAAA;YAAA;UAAA,GAAAwI,SAAA;QAAA,CACnE,GAAC;MACJ,CAAC,CAAC;MAEFhQ,QAAQ,CAAC,0BAA0B,EAAE,YAAM;QACzC,IAAI4O,UAAU;QACd,IAAIuB,cAAc;QAClB,IAAIC,gBAAgB;QAEpBnM,UAAU,CAAC,YAAM;UACf2K,UAAU,GAAG;YACXzI,IAAI,EAAE3C,cAAK,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC;UAC9C,CAAC;UACDuM,cAAc,GAAG3M,cAAK,CACnBC,IAAI,CAAC1C,YAAY,EAAE,YAAY,CAAC,CAChC2C,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,kBAAkB,CAAC,CAAC;UAC/CwM,gBAAgB,GAAG9O,KAAK,CAAC+C,WAAW,CAACE,YAAY;UACjD6L,gBAAgB,CAAC1M,OAAO,CACtBC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC;YACdY,QAAQ,EAAE,SAAVA,QAAQA,CAAA;cAAA,OAAQ,YAAY;YAAA;UAC9B,CAAC,CACH,CAAC;QACH,CAAC,CAAC;QAEFtE,SAAS,CAAC,YAAM;UACdiQ,cAAc,CAAC9I,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEFjH,EAAE,CAAC,uCAAuC,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAyJ,UAAA;UAAA,OAAA1J,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAuJ,UAAA;YAAA,kBAAAA,UAAA,CAAArJ,IAAA,GAAAqJ,UAAA,CAAApJ,IAAA;cAAA;gBAAAoJ,UAAA,CAAApJ,IAAA;gBAAA,OACpCnG,YAAY,CAACwP,oBAAoB,CAAC3B,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC;cAAA;gBAE3EnO,sBAAM,CAACmH,UAAU,CAACuI,cAAc,CAAC;gBACjC1P,sBAAM,CAACwH,UAAU,CAACkI,cAAc,EAAE,eAAe,CAAC;gBAClD1P,sBAAM,CAACmH,UAAU,CAACwI,gBAAgB,CAAC;cAAC;cAAA;gBAAA,OAAAE,UAAA,CAAA9I,IAAA;YAAA;UAAA,GAAA6I,SAAA;QAAA,CACrC,GAAC;QAEFjQ,EAAE,CAAC,+DAA+D,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAA4J,UAAA;UAAA,IAAAtD,QAAA;UAAA,OAAAvG,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAA0J,UAAA;YAAA,kBAAAA,UAAA,CAAAxJ,IAAA,GAAAwJ,UAAA,CAAAvJ,IAAA;cAAA;gBAAAuJ,UAAA,CAAAvJ,IAAA;gBAAA,OAC5DnG,YAAY,CAACwP,oBAAoB,CAAC3B,UAAU,EAAExM,SAAS,EAAE,KAAK,CAAC;cAAA;gBAErE3B,sBAAM,CAACmH,UAAU,CAACgH,UAAU,CAACzI,IAAI,CAAC;gBAC5B+G,QAAQ,GAAG0B,UAAU,CAACzI,IAAI,CAACwD,SAAS,CAAC7G,IAAI;gBAE/CrC,sBAAM,CAACqJ,KAAK,CAACoD,QAAQ,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC;gBAC7CzM,sBAAM,CAAC0M,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5BzM,sBAAM,CAACqJ,KAAK,CAACoD,QAAQ,CAAC,CAAC,CAAC,CAAC5B,KAAK,EAAE,YAAY,CAAC;gBAC7C7K,sBAAM,CAACgK,SAAS,CAACyC,QAAQ,CAAC,CAAC,CAAC,CAACwD,eAAe,CAAC;gBAC7CjQ,sBAAM,CAACgK,SAAS,CAACyC,QAAQ,CAAC,CAAC,CAAC,CAACnC,kBAAkB,CAAC;cAAC;cAAA;gBAAA,OAAA0F,UAAA,CAAAjJ,IAAA;YAAA;UAAA,GAAAgJ,SAAA;QAAA,CAClD,GAAC;QAEFpQ,EAAE,CAAC,sDAAsD,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAA+J,UAAA;UAAA,OAAAhK,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAA6J,UAAA;YAAA,kBAAAA,UAAA,CAAA3J,IAAA,GAAA2J,UAAA,CAAA1J,IAAA;cAAA;gBAAA0J,UAAA,CAAA1J,IAAA;gBAAA,OACnDnG,YAAY,CAACwP,oBAAoB,CAAC3B,UAAU,EAAExM,SAAS,EAAE,KAAK,CAAC;cAAA;gBAErE;gBACA;gBACA3B,sBAAM,CAACmH,UAAU,CAACgH,UAAU,CAACzI,IAAI,CAAC;cAAC;cAAA;gBAAA,OAAAyK,UAAA,CAAApJ,IAAA;YAAA;UAAA,GAAAmJ,SAAA;QAAA,CACpC,GAAC;QAEFvQ,EAAE,CAAC,yDAAyD,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAiK,UAAA;UAAA,OAAAlK,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAA+J,UAAA;YAAA,kBAAAA,UAAA,CAAA7J,IAAA,GAAA6J,UAAA,CAAA5J,IAAA;cAAA;gBAAA4J,UAAA,CAAA5J,IAAA;gBAAA,OACtDnG,YAAY,CAACwP,oBAAoB,CAAC3B,UAAU,EAAExM,SAAS,EAAE,IAAI,CAAC;cAAA;gBAEpE;gBACA3B,sBAAM,CAACmH,UAAU,CAACgH,UAAU,CAACzI,IAAI,CAAC;cAAC;cAAA;gBAAA,OAAA2K,UAAA,CAAAtJ,IAAA;YAAA;UAAA,GAAAqJ,SAAA;QAAA,CACpC,GAAC;QAEFzQ,EAAE,CAAC,wDAAwD,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAmK,UAAA;UAAA,IAAA7D,QAAA;UAAA,OAAAvG,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAiK,UAAA;YAAA,kBAAAA,UAAA,CAAA/J,IAAA,GAAA+J,UAAA,CAAA9J,IAAA;cAAA;gBAC3D5F,KAAK,CAACT,MAAM,CAACkJ,0BAA0B,GAAG;kBACxCkH,YAAY,EAAE,YAAY;kBAC1BlG,kBAAkB,EAAE;gBACtB,CAAC;gBAACiG,UAAA,CAAA9J,IAAA;gBAAA,OAEInG,YAAY,CAACwP,oBAAoB,CAAC3B,UAAU,EAAExM,SAAS,EAAE,KAAK,CAAC;cAAA;gBAE/D8K,QAAQ,GAAG0B,UAAU,CAACzI,IAAI,CAACwD,SAAS,CAAC7G,IAAI;gBAE/CrC,sBAAM,CAACqJ,KAAK,CAACoD,QAAQ,CAAC,CAAC,CAAC,CAAC+D,YAAY,EAAE,YAAY,CAAC;gBACpDxQ,sBAAM,CAACqJ,KAAK,CAACoD,QAAQ,CAAC,CAAC,CAAC,CAACnC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC;cAAA;cAAA;gBAAA,OAAAiG,UAAA,CAAAxJ,IAAA;YAAA;UAAA,GAAAuJ,SAAA;QAAA,CACtD,GAAC;QAEF3Q,EAAE,CAAC,8CAA8C,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAsK,UAAA;UAAA,IAAAvD,MAAA;UAAA,OAAAhH,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAoK,UAAA;YAAA,kBAAAA,UAAA,CAAAlK,IAAA,GAAAkK,UAAA,CAAAjK,IAAA;cAAA;gBAAAiK,UAAA,CAAAjK,IAAA;gBAAA,OAC5BnG,YAAY,CAACwP,oBAAoB,CAAC3B,UAAU,EAAExM,SAAS,EAAE,KAAK,CAAC;cAAA;gBAA9EuL,MAAM,GAAAwD,UAAA,CAAA5F,IAAA;gBAEZ9K,sBAAM,CAACqJ,KAAK,CAAC6D,MAAM,EAAE,kBAAkB,CAAC;cAAC;cAAA;gBAAA,OAAAwD,UAAA,CAAA3J,IAAA;YAAA;UAAA,GAAA0J,SAAA;QAAA,CAC1C,GAAC;QAEF9Q,EAAE,CAAC,yCAAyC,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAwK,UAAA;UAAA,IAAAC,GAAA;UAAA,OAAA1K,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAuK,UAAA;YAAA,kBAAAA,UAAA,CAAArK,IAAA,GAAAqK,UAAA,CAAApK,IAAA;cAAA;gBAC5C0H,UAAU,CAACzI,IAAI,CAACzC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAImF,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;gBAAC8D,UAAA,CAAArK,IAAA;gBAAAqK,UAAA,CAAApK,IAAA;gBAAA,OAG1DnG,YAAY,CAACwP,oBAAoB,CAAC3B,UAAU,EAAExM,SAAS,EAAE,KAAK,CAAC;cAAA;gBACrE3B,sBAAM,CAAC8Q,IAAI,CAAC,6BAA6B,CAAC;gBAACD,UAAA,CAAApK,IAAA;gBAAA;cAAA;gBAAAoK,UAAA,CAAArK,IAAA;gBAAAoK,GAAA,GAAAC,UAAA;gBAE3C7Q,sBAAM,CAACqJ,KAAK,CAACuH,GAAA,CAAIvG,OAAO,EAAE,aAAa,CAAC;cAAC;cAAA;gBAAA,OAAAwG,UAAA,CAAA9J,IAAA;YAAA;UAAA,GAAA4J,SAAA;QAAA,CAE5C,GAAC;MACJ,CAAC,CAAC;MAEFpR,QAAQ,CAAC,gDAAgD,EAAE,YAAM;QAC/D,IAAIwR,wBAAwB;QAC5B,IAAIC,QAAQ;QAEZxN,UAAU,CAAC,YAAM;UACfuN,wBAAwB,GAAGhO,cAAK,CAC7BC,IAAI,CAAC1C,YAAY,EAAE,sBAAsB,CAAC,CAC1C2C,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,qBAAqB,CAAC,CAAC;UAClD6N,QAAQ,GAAGjO,cAAK,CAACC,IAAI,CAAC,CAAC;UACvB1C,YAAY,CAACgM,6BAA6B,GAAG;YAAC2E,KAAK,EAAElO,cAAK,CAACC,IAAI,CAAC;UAAC,CAAC;UAClE1C,YAAY,CAAC4J,MAAM,GAAG;YAAC4B,GAAG,EAAE;UAAe,CAAC;UAC5CxL,YAAY,CAAC+G,SAAS,GAAG,IAAI;UAC7BtE,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,WAAW,CAAC;UACrCyC,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,4BAA4B,CAAC;QACxD,CAAC,CAAC;QAEFb,SAAS,CAAC,YAAM;UACdsR,wBAAwB,CAACnK,OAAO,CAAC,CAAC;UAClCtG,YAAY,CAAC2L,SAAS,CAACrF,OAAO,CAAC,CAAC;UAChCtG,YAAY,CAAC4Q,0BAA0B,CAACtK,OAAO,CAAC,CAAC;UACjDtG,YAAY,CAACgM,6BAA6B,GAAG3K,SAAS;QACxD,CAAC,CAAC;QAEFhC,EAAE,CAAC,wEAAwE,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAgL,UAAA;UAAA,IAAAC,cAAA;UAAA,OAAAlL,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAA+K,UAAA;YAAA,kBAAAA,UAAA,CAAA7K,IAAA,GAAA6K,UAAA,CAAA5K,IAAA;cAAA;gBACrE2K,cAAc,GAAG9Q,YAAY,CAAC4J,MAAM;gBAAAmH,UAAA,CAAA5K,IAAA;gBAAA,OAEpCnG,YAAY,CAAC6J,iBAAiB,CAAC,eAAe,EAAE6G,QAAQ,EAAE;kBAC9DrE,oBAAoB,EAAE,IAAI;kBAC1BqC,SAAS,EAAE,SAAXA,SAASA,CAAGC,SAAS,EAAEnD,GAAG,EAAK;oBAC7B9L,sBAAM,CAACsR,MAAM,CAACrC,SAAS,CAAC;oBACxBjP,sBAAM,CAACqJ,KAAK,CAACyC,GAAG,EAAE,eAAe,CAAC;kBACpC;gBACF,CAAC,CAAC;cAAA;gBAEF;gBACA9L,sBAAM,CAACqJ,KAAK,CAAC/I,YAAY,CAAC4J,MAAM,EAAEkH,cAAc,CAAC;cAAC;cAAA;gBAAA,OAAAC,UAAA,CAAAtK,IAAA;YAAA;UAAA,GAAAoK,SAAA;QAAA,CACnD,GAAC;QAEFxR,EAAE,CAAC,qEAAqE,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAoL,UAAA;UAAA,IAAAC,aAAA;UAAA,OAAAtL,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAmL,UAAA;YAAA,kBAAAA,UAAA,CAAAjL,IAAA,GAAAiL,UAAA,CAAAhL,IAAA;cAAA;gBAClE+K,aAAa,GAAGzO,cAAK,CAACC,IAAI,CAAC,CAAC;gBAAAyO,UAAA,CAAAhL,IAAA;gBAAA,OAE5BnG,YAAY,CAAC6J,iBAAiB,CAAC,eAAe,EAAE6G,QAAQ,EAAE;kBAC9DrE,oBAAoB,EAAE,IAAI;kBAC1BqC,SAAS,EAAEwC;gBACb,CAAC,CAAC;cAAA;gBAEFxR,sBAAM,CAACmH,UAAU,CAACqK,aAAa,CAAC;gBAChCxR,sBAAM,CAACqJ,KAAK,CAACmI,aAAa,CAACtI,SAAS,CAAC7G,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC;cAAC;cAAA;gBAAA,OAAAoP,UAAA,CAAA1K,IAAA;YAAA;UAAA,GAAAwK,SAAA;QAAA,CACtE,GAAC;QAEF5R,EAAE,CAAC,gDAAgD,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAuL,UAAA;UAAA,OAAAxL,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAqL,UAAA;YAAA,kBAAAA,UAAA,CAAAnL,IAAA,GAAAmL,UAAA,CAAAlL,IAAA;cAAA;gBAAAkL,UAAA,CAAAlL,IAAA;gBAAA,OAC7CnG,YAAY,CAAC6J,iBAAiB,CAAC,eAAe,EAAE6G,QAAQ,EAAE;kBAC9DrE,oBAAoB,EAAE,IAAI;kBAC1BqC,SAAS,EAAE,SAAXA,SAASA,CAAGC,SAAS,EAAEnD,GAAG,EAAK;oBAC7BxL,YAAY,CAAC4J,MAAM,GAAG+E,SAAS;oBAC/B3O,YAAY,CAAC+G,SAAS,GAAG,IAAI;oBAC7B/G,YAAY,CAAC2L,SAAS,CAAC,2CAA2C,EAAE;sBAClEH,GAAG,EAAHA;oBACF,CAAC,CAAC;kBACJ;gBACF,CAAC,CAAC;cAAA;gBAEF9L,sBAAM,CAACwH,UAAU,CACflH,YAAY,CAAC2L,SAAS,EACtB,2CAA2C,EAC3ClJ,cAAK,CAAC0E,KAAK,CAAC9J,GAAG,CAAC,KAAK,EAAE,qBAAqB,CAC9C,CAAC;cAAC;cAAA;gBAAA,OAAAgU,UAAA,CAAA5K,IAAA;YAAA;UAAA,GAAA2K,SAAA;QAAA,CACH,GAAC;QAEF/R,EAAE,CAAC,oEAAoE,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAyL,UAAA;UAAA,OAAA1L,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAuL,UAAA;YAAA,kBAAAA,UAAA,CAAArL,IAAA,GAAAqL,UAAA,CAAApL,IAAA;cAAA;gBACvEsK,wBAAwB,CAAC9N,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQmK,MAAM,CAAC,IAAImF,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAAC8E,UAAA,CAAApL,IAAA;gBAAA,OAE3EnG,YAAY,CACf6J,iBAAiB,CAAC,eAAe,EAAE6G,QAAQ,EAAE;kBAC5CrE,oBAAoB,EAAE;gBACxB,CAAC,CAAC,CACDmF,KAAK,CAAC,YAAM,CAAC,CAAC,CAAC;cAAA;gBAElB9R,sBAAM,CAACmH,UAAU,CAAC6J,QAAQ,CAAC;gBAC3BhR,sBAAM,CAACC,UAAU,CAAC+Q,QAAQ,CAAC9H,SAAS,CAAC7G,IAAI,CAAC,CAAC,CAAC,EAAE0K,KAAK,CAAC;cAAC;cAAA;gBAAA,OAAA8E,UAAA,CAAA9K,IAAA;YAAA;UAAA,GAAA6K,SAAA;QAAA,CACtD,GAAC;QAEFjS,EAAE,CAAC,qEAAqE,EAAE,YAAM;UAC9EW,YAAY,CAACgM,6BAA6B,GAAG3K,SAAS;UAEtD,IAAMuL,MAAM,GAAG5M,YAAY,CAAC6J,iBAAiB,CAAC,eAAe,EAAE6G,QAAQ,EAAE;YACvErE,oBAAoB,EAAE;UACxB,CAAC,CAAC;UAEF,OAAOO,MAAM,CAAC4E,KAAK,CAAC,UAACC,GAAG,EAAK;YAC3B/R,sBAAM,CAACC,UAAU,CAAC8R,GAAG,EAAEhF,KAAK,CAAC;YAC7B/M,sBAAM,CAACyH,KAAK,CAACsK,GAAG,CAAC1H,OAAO,EAAE,yBAAyB,CAAC;UACtD,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEF9K,QAAQ,CAAC,iDAAiD,EAAE,YAAM;QAChEI,EAAE,CAAC,qDAAqD,EAAE,YAAM;UAC9D,IAAM0M,sBAAsB,GAAGtJ,cAAK,CACjCC,IAAI,CAAC1C,YAAY,EAAE,oBAAoB,CAAC,CACxC2C,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;UAE7B7C,YAAY,CAACkM,sBAAsB,CAAC,CAAC;UAErCxM,sBAAM,CAACmH,UAAU,CAACkF,sBAAsB,CAAC;UACzC,IAAMI,QAAQ,GAAGJ,sBAAsB,CAACnD,SAAS,CAAC7G,IAAI;UACtDrC,sBAAM,CAACiJ,WAAW,CAACwD,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UACjCzM,sBAAM,CAAC0M,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC,CAAC;UAC5BzM,sBAAM,CAACsH,MAAM,CAACmF,QAAQ,CAAC,CAAC,CAAC,CAACE,oBAAoB,CAAC;UAE/CN,sBAAsB,CAACzF,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC;QAEFjH,EAAE,CAAC,+DAA+D,EAAE,YAAM;UACxE,IAAMqS,WAAW,GAAGjP,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,mBAAmB,CAAC;UACjE0R,WAAW,CAAC9M,SAAS,CAAC,UAAC4G,GAAG,EAAEmG,EAAE;YAAA,OAAKA,EAAE,CAAC,CAAC;UAAA,EAAC;UAExC,IAAMlD,OAAO,GAAG;YACdpC,oBAAoB,EAAE,IAAI;YAC1BC,cAAc,EAAE;cACdD,oBAAoB,EAAE,IAAI;cAC1BqC,SAAS,EAAE,SAAXA,SAASA,CAAA,EAAQ,CAAC;YACpB;UACF,CAAC;UAED,IAAMnJ,OAAO,GAAGvF,YAAY,CAAC0M,kBAAkB,CAACrL,SAAS,EAAEoN,OAAO,CAAC;UAEnE,OAAOlJ,OAAO,CAACqB,IAAI,CAAC,YAAM;YACxBlH,sBAAM,CAACmH,UAAU,CAAC6K,WAAW,CAAC;YAC9B,IAAMvF,QAAQ,GAAGuF,WAAW,CAAC9I,SAAS,CAAC7G,IAAI;YAC3CrC,sBAAM,CAAC0M,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5BzM,sBAAM,CAACsH,MAAM,CAACmF,QAAQ,CAAC,CAAC,CAAC,CAACE,oBAAoB,CAAC;YAC/CqF,WAAW,CAACpL,OAAO,CAAC,CAAC;UACvB,CAAC,CAAC;QACJ,CAAC,CAAC;QAEFjH,EAAE,CAAC,gDAAgD,EAAE,YAAM;UACzDoD,cAAK,CAACC,IAAI,CAAC1C,YAAY,EAAE,mBAAmB,CAAC,CAAC4E,SAAS,CAAC,UAAC4G,GAAG,EAAEmG,EAAE;YAAA,OAAKA,EAAE,CAAC,CAAC;UAAA,EAAC;UAE1E3R,YAAY,CAACgM,6BAA6B,GAAG;YAACC,WAAW,EAAE;UAAI,CAAC;UAEhE,IAAM1G,OAAO,GAAGvF,YAAY,CAAC0M,kBAAkB,CAACrL,SAAS,EAAE;YACzDgL,oBAAoB,EAAE,IAAI;YAC1BC,cAAc,EAAE;cAACD,oBAAoB,EAAE,IAAI;cAAEqC,SAAS,EAAE,SAAXA,SAASA,CAAA,EAAQ,CAAC;YAAC;UAClE,CAAC,CAAC;UAEF,OAAOnJ,OAAO,CAACqB,IAAI,CAAC,YAAM;YACxBlH,sBAAM,CAACiJ,WAAW,CAAC3I,YAAY,CAACgM,6BAA6B,CAAC;YAC9DhM,YAAY,CAAC6J,iBAAiB,CAACvD,OAAO,CAAC,CAAC;UAC1C,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFrH,QAAQ,CAAC,oDAAoD,EAAE,YAAM;QACnE,IAAI2S,SAAS;QAEb1O,UAAU,CAAC,YAAM;UACflD,YAAY,CAAC4J,MAAM,GAAG;YACpBpH,KAAK,EAAEC,cAAK,CAACC,IAAI,CAAC,CAAC,CAACC,OAAO,CAACC,QAAA,CAAAzF,OAAA,CAAQ0F,OAAO,CAAC,CAAC,CAAC;YAC9CC,kBAAkB,EAAEL,cAAK,CAACC,IAAI,CAAC,CAAC;YAChCuE,UAAU,EAAE,KAAK;YACjBF,SAAS,EAAE;UACb,CAAC;UACD6K,SAAS,GAAGnP,cAAK,CAACC,IAAI,CAAC,CAAC;UACxB1C,YAAY,CAACgM,6BAA6B,GAAG;YAAC2E,KAAK,EAAEiB;UAAS,CAAC;QACjE,CAAC,CAAC;QAEFvS,EAAE,CAAC,6DAA6D,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAgM,UAAA;UAAA,OAAAjM,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAA8L,UAAA;YAAA,kBAAAA,UAAA,CAAA5L,IAAA,GAAA4L,UAAA,CAAA3L,IAAA;cAAA;gBAAA2L,UAAA,CAAA3L,IAAA;gBAAA,OAC1DnG,YAAY,CAACqG,UAAU,CAAC,CAAC;cAAA;gBAE/B3G,sBAAM,CAACmH,UAAU,CAAC+K,SAAS,CAAC;cAAC;cAAA;gBAAA,OAAAE,UAAA,CAAArL,IAAA;YAAA;UAAA,GAAAoL,SAAA;QAAA,CAC9B,GAAC;QAEFxS,EAAE,CAAC,4DAA4D,mBAAAsG,kBAAA,CAAAxI,OAAA,eAAAyI,YAAA,CAAAzI,OAAA,CAAA0I,IAAA,CAAE,SAAAkM,UAAA;UAAA,OAAAnM,YAAA,CAAAzI,OAAA,CAAA6I,IAAA,WAAAgM,UAAA;YAAA,kBAAAA,UAAA,CAAA9L,IAAA,GAAA8L,UAAA,CAAA7L,IAAA;cAAA;gBAC/DnG,YAAY,CAACgM,6BAA6B,GAAG3K,SAAS;gBAAC2Q,UAAA,CAAA7L,IAAA;gBAAA,OAEjDnG,YAAY,CAACqG,UAAU,CAAC,CAAC;cAAA;gBAE/B3G,sBAAM,CAACmH,UAAU,CAAC7G,YAAY,CAAC4J,MAAM,CAACpH,KAAK,CAAC;cAAC;cAAA;gBAAA,OAAAwP,UAAA,CAAAvL,IAAA;YAAA;UAAA,GAAAsL,SAAA;QAAA,CAC9C,GAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_crypto","require","_sinon","_interopRequireDefault","_testHelperChai","_testHelperMockWebex","_testHelperMockWebSocket","_index","_interopRequireWildcard","_errors","_config","_socket","_mochaHelpers","_constants","_promiseTick","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t3","hasOwnProperty","call","_Object$defineProperty2","_Object$getOwnPropertyDescriptor","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","crypto","randomUUID","_defineProperty3","value","configurable","describe","createUuid","afterEach","resetMobiusSocketInstance","it","configuredWebex","MockWebex","instance","getMobiusSocketInstance","assert","instanceOf","MobiusSocket","deepEqual","config","mobiusConfig","mobiusSocket","consumerConfig","initialConnectionMaxRetries","backoffTimeReset","mockWebSocket","socketOpenStub","usingFakeTimers","webex","statusStartTypingMessage","_stringify","id","data","eventType","actor","conversationId","timestamp","_now","trackingId","concat","emitAuthResponse","_ref","undefined","_ref$statusCode","statusCode","_ref$statusMessage","statusMessage","authRequest","JSON","parse","send","lastCall","args","emit","type","subtype","MESSAGE_TYPES","AUTH","createAsyncEvent","eventId","createSessionSocket","close","sinon","stub","returns","_promise","resolve","removeAllListeners","countGenericEventEmits","emitSpy","getCalls","beforeEach","jest","useFakeTimers","doNotFake","credentials","refresh","getUserToken","toString","internal","device","registered","register","webSocketUrl","getWebSocketUrl","useServiceCatalogUrl","services","convertUrlToPriorityHostUrl","markFailedUrl","switchActiveClusterIds","invalidateCache","isValidHost","metrics","submitClientMetrics","logger","console","Socket","callsFake","_len","Array","_key","_construct2","MockWebSocket","origOpen","prototype","open","_len2","_key2","promise","_apply","process","nextTick","_asyncToGenerator2","_regenerator","mark","_callee","_t","wrap","_context","prev","next","useRealTimers","disconnect","restore","getWebSocketConstructor","setTimeout","stop","notCalled","connect","then","calledOnce","isFalse","connected","isTrue","connecting","calledWith","match","any","check","reject","ConnectionError","promiseTick","advanceTimersByTime","calledTwice","calledThrice","isRejected","skipInBrowser","maxRetries","hasEverConnected","all","code","onCall","BadRequest","UnknownResponse","called","NotAuthorized","Forbidden","backoffSpy","spy","_backoffSpy$firstCall","isUndefined","firstCall","_backoffSpy$firstCall2","socketUrl","equal","defaultMobiusSocketOptions","testProxyUrl","agent","proxy","href","reason","on","readyState","_callee2","_context2","isDefined","backoffCall","socket","attemptConnection","_reason","message","wssResponseTimeout","_callee3","requestPromise","requestPayload","response","_context3","sendWssRequest","token","sent","_callee4","authPayload","_context4","_callee5","error","_context5","name","_callee6","_context6","_callee7","_context7","_callee8","_context8","_callee9","_context9","url","getConnectedWebSocketUrl","event","emitEvent","res","prepareUrl","wsUrl","connectWithBackoffStub","shutdownSwitchoverBackoffCall","placeholder","handleImminentShutdown","callArgs","isObject","isShutdownSwitchover","attemptOptions","done","throws","Error","connectWithBackoff","shutdownEvent","result","onmessage","regularEvent","someField","sequenceNumber","_callee0","_context0","originalDedupCacheMaxSize","dedupCacheMaxSize","_callee1","_context1","_callee10","_context10","_callee11","_context11","_callee12","_context12","mockSocket","anotherSocket","reconnect","closeEvent","onclose","strictEqual","resetHistory","isOk","_callee13","emitCalls","hasCompleteEvent","_context13","context","onSuccess","newSocket","some","_callee14","testError","hasFailureEvent","_context14","_callee15","_context15","callCount","prepareUrlStub","getUserTokenStub","_callee16","_context16","prepareAndOpenSocket","_callee17","_context17","forceCloseDelay","_callee18","_context18","_callee19","_context19","_callee20","_context20","customOption","_callee21","_context21","_callee22","_t2","_context22","fail","prepareAndOpenSocketStub","callback","abort","attachSocketEventListeners","_callee23","originalSocket","_context23","exists","_callee24","onSuccessStub","_context24","_callee25","_context25","_callee26","_context26","catch","err","attemptStub","cb","abortStub","_callee27","_context27","_callee28","_context28"],"sources":["mobius-socket.test.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {randomUUID} from 'crypto';\nimport sinon from 'sinon';\nimport {assert} from '@webex/test-helper-chai';\nimport MockWebex from '@webex/test-helper-mock-webex';\nimport MockWebSocket from '@webex/test-helper-mock-web-socket';\nimport MobiusSocket, {getMobiusSocketInstance, resetMobiusSocketInstance} from './index';\nimport {BadRequest, NotAuthorized, Forbidden, UnknownResponse, ConnectionError} from './errors';\nimport mobiusConfig from './config';\nimport Socket from './socket';\nimport {skipInBrowser} from './test/mocha-helpers';\nimport {MESSAGE_TYPES} from './socket/constants';\n\nimport promiseTick from './test/promise-tick';\n\nif (!crypto.randomUUID) {\n Object.defineProperty(crypto, 'randomUUID', {\n value: randomUUID,\n configurable: true,\n });\n}\n\ndescribe('plugin-mobius-socket', () => {\n const createUuid = () => crypto.randomUUID();\n\n describe('getMobiusSocketInstance', () => {\n afterEach(() => {\n resetMobiusSocketInstance();\n });\n\n it('uses package config when consumer config is not provided', () => {\n const configuredWebex = new MockWebex();\n const instance = getMobiusSocketInstance(configuredWebex);\n\n assert.instanceOf(instance, MobiusSocket);\n assert.deepEqual(instance.config, mobiusConfig.mobiusSocket);\n });\n\n it('uses consumer config when it is provided', () => {\n const configuredWebex = new MockWebex();\n const consumerConfig = {\n initialConnectionMaxRetries: 0,\n backoffTimeReset: 1234,\n };\n\n const instance = getMobiusSocketInstance(configuredWebex, consumerConfig);\n\n assert.instanceOf(instance, MobiusSocket);\n assert.deepEqual(instance.config, {\n ...mobiusConfig.mobiusSocket,\n ...consumerConfig,\n });\n });\n });\n\n describe('MobiusSocket', () => {\n let mobiusSocket;\n let mockWebSocket;\n let socketOpenStub;\n let usingFakeTimers;\n let webex;\n\n const statusStartTypingMessage = JSON.stringify({\n id: createUuid(),\n data: {\n eventType: 'status.start_typing',\n actor: {\n id: 'actorId',\n },\n conversationId: createUuid(),\n },\n timestamp: Date.now(),\n trackingId: `suffix_${createUuid()}_${Date.now()}`,\n });\n\n const emitAuthResponse = ({statusCode = 200, statusMessage = 'OK'} = {}) => {\n const authRequest = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: MESSAGE_TYPES.AUTH,\n trackingId: authRequest.trackingId,\n statusCode,\n statusMessage,\n }),\n });\n };\n\n const createAsyncEvent = (eventId, eventType = 'custom.event') => ({\n data: {\n type: 'async_event',\n eventId,\n data: {\n eventType,\n },\n },\n });\n\n const createSessionSocket = () => ({\n close: sinon.stub().returns(Promise.resolve()),\n removeAllListeners: sinon.stub(),\n });\n\n const countGenericEventEmits = (emitSpy) =>\n emitSpy.getCalls().filter((call) => call.args[0] === 'event').length;\n\n beforeEach(() => {\n jest.useFakeTimers({doNotFake: ['nextTick']});\n usingFakeTimers = true;\n });\n\n beforeEach(() => {\n webex = new MockWebex();\n webex.credentials = {\n refresh: sinon.stub().returns(Promise.resolve()),\n getUserToken: sinon.stub().returns(\n Promise.resolve({\n toString() {\n return 'Bearer FAKE';\n },\n })\n ),\n };\n webex.internal.device = {\n registered: true,\n register: sinon.stub().returns(Promise.resolve()),\n refresh: sinon.stub().returns(Promise.resolve()),\n webSocketUrl: 'ws://example.com',\n getWebSocketUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),\n useServiceCatalogUrl: sinon\n .stub()\n .returns(Promise.resolve('https://service-catalog-url.com')),\n };\n webex.internal.services = {\n convertUrlToPriorityHostUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),\n markFailedUrl: sinon.stub().returns(Promise.resolve()),\n switchActiveClusterIds: sinon.stub(),\n invalidateCache: sinon.stub(),\n isValidHost: sinon.stub().returns(Promise.resolve(true)),\n };\n webex.internal.metrics.submitClientMetrics = sinon.stub();\n webex.trackingId = 'fakeTrackingId';\n webex.logger = console;\n\n sinon.stub(Socket, 'getWebSocketConstructor').callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n\n return mockWebSocket;\n }\n );\n\n const origOpen = Socket.prototype.open;\n\n socketOpenStub = sinon.stub(Socket.prototype, 'open').callsFake(function (...args) {\n const promise = Reflect.apply(origOpen, this, args);\n\n process.nextTick(() => {\n mockWebSocket.open();\n // Simulate Mobius auth response after socket open\n process.nextTick(() => {\n emitAuthResponse();\n });\n });\n\n return promise;\n });\n\n mobiusSocket = new MobiusSocket(webex, {...mobiusConfig.mobiusSocket});\n });\n\n afterEach(async () => {\n if (usingFakeTimers) {\n jest.useRealTimers();\n usingFakeTimers = false;\n }\n\n // Clean up MobiusSocket connections and internal state\n if (mobiusSocket) {\n try {\n await mobiusSocket.disconnect();\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n\n // Ensure mock socket is properly closed\n if (mockWebSocket && typeof mockWebSocket.close === 'function') {\n try {\n mockWebSocket.close();\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n\n if (socketOpenStub) {\n socketOpenStub.restore();\n }\n\n if (Socket.getWebSocketConstructor.restore) {\n Socket.getWebSocketConstructor.restore();\n }\n\n // Small delay to ensure all async operations complete\n await new Promise((resolve) => {\n setTimeout(resolve, 10);\n });\n });\n\n describe('#connect()', () => {\n it('lazily registers the device', () => {\n webex.internal.device.registered = false;\n assert.notCalled(webex.internal.device.register);\n const promise = mobiusSocket.connect();\n\n return promise.then(() => {\n assert.calledOnce(webex.internal.device.register);\n });\n });\n\n it('connects to MobiusSocket using default url', () => {\n const promise = mobiusSocket.connect();\n\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(socketOpenStub, 'ws://example.com', sinon.match.any);\n });\n });\n\n describe('when `maxRetries` is set', () => {\n const check = () => {\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.reject(new ConnectionError()));\n assert.notCalled(Socket.prototype.open);\n\n const promise = mobiusSocket.connect();\n\n return promiseTick(5)\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n\n return promiseTick(5);\n })\n .then(() => {\n jest.advanceTimersByTime(mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledTwice(Socket.prototype.open);\n jest.advanceTimersByTime(2 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n jest.advanceTimersByTime(5 * mobiusSocket.config.backoffTimeReset);\n\n return assert.isRejected(promise);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n });\n };\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n skipInBrowser(it)('fails after configured `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.maxRetries = 0;\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n\n return check();\n });\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n // if initial retries is zero and mobiusSocket has never connected, do not retry\n skipInBrowser(it)('fails immediately when `initialConnectionMaxRetries` is 0', () => {\n mobiusSocket.config.maxRetries = 2;\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.reject(new ConnectionError()));\n assert.notCalled(Socket.prototype.open);\n\n const promise = mobiusSocket.connect();\n\n return promiseTick(5)\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n\n return assert.isRejected(promise);\n })\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n });\n });\n\n // initial retries is non-zero so takes precedence over maxRetries when mobiusSocket has never connected\n skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.maxRetries = 0;\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n\n return check();\n });\n\n // initial retries is non-zero so takes precedence over maxRetries when mobiusSocket has never connected\n skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n mobiusSocket.config.maxRetries = 5;\n\n return check();\n });\n\n // when mobiusSocket has connected maxRetries is used and the initialConnectionMaxRetries is ignored\n skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 5;\n mobiusSocket.config.maxRetries = 2;\n mobiusSocket.hasEverConnected = true;\n\n return check();\n });\n });\n\n it('can safely be called multiple times', () => {\n const promise = Promise.all([\n mobiusSocket.connect(),\n mobiusSocket.connect(),\n mobiusSocket.connect(),\n mobiusSocket.connect(),\n ]);\n\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.calledOnce(Socket.prototype.open);\n });\n });\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n skipInBrowser(describe)('when the connection fails', () => {\n it('backs off exponentially', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.reject(new ConnectionError({code: 4001})));\n // Note: onCall is zero-based\n socketOpenStub.onCall(2).returns(Promise.resolve(new MockWebSocket()));\n assert.notCalled(Socket.prototype.open);\n\n const promise = mobiusSocket.connect();\n\n return promiseTick(5)\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n\n // I'm not sure why, but it's important the clock doesn't advance\n // until a tick happens\n return promiseTick(5);\n })\n .then(() => {\n jest.advanceTimersByTime(mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledTwice(Socket.prototype.open);\n jest.advanceTimersByTime(2 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n jest.advanceTimersByTime(5 * mobiusSocket.config.backoffTimeReset);\n\n return promise;\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n jest.advanceTimersByTime(8 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n });\n });\n\n describe('with `BadRequest`', () => {\n it('fails permanently', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new BadRequest({code: 4400})));\n\n return assert.isRejected(mobiusSocket.connect());\n });\n });\n\n describe('with `UnknownResponse`', () => {\n it('triggers a device refresh', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 1;\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open').returns(Promise.resolve());\n socketOpenStub.onCall(0).returns(Promise.reject(new UnknownResponse({code: 4444})));\n assert.notCalled(webex.credentials.refresh);\n assert.notCalled(webex.internal.device.refresh);\n const promise = mobiusSocket.connect();\n\n return promiseTick(7).then(() => {\n assert.notCalled(webex.credentials.refresh);\n assert.called(webex.internal.device.refresh);\n jest.advanceTimersByTime(1000);\n\n return promise;\n });\n });\n });\n\n describe('with `NotAuthorized`', () => {\n it('triggers a token refresh', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 1;\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open').returns(Promise.resolve());\n socketOpenStub.onCall(0).returns(Promise.reject(new NotAuthorized({code: 4401})));\n assert.notCalled(webex.credentials.refresh);\n assert.notCalled(webex.internal.device.refresh);\n const promise = mobiusSocket.connect();\n\n return promiseTick(7).then(() => {\n assert.called(webex.credentials.refresh);\n assert.notCalled(webex.internal.device.refresh);\n jest.advanceTimersByTime(1000);\n\n return promise;\n });\n });\n });\n\n describe('with `Forbidden`', () => {\n it('fails permanently', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new Forbidden({code: 4403})));\n\n return assert.isRejected(mobiusSocket.connect());\n });\n });\n\n // describe(`with \\`NotFound\\``, () => {\n // it(`triggers a device refresh`, () => {\n // socketOpenStub.restore();\n // socketOpenStub = sinon.stub(Socket.prototype, `open`).returns(Promise.resolve());\n // socketOpenStub.onCall(0).returns(Promise.reject(new NotFound({code: 4404})));\n // assert.notCalled(webex.credentials.refresh);\n // assert.notCalled(webex.internal.device.refresh);\n // const promise = mobiusSocket.connect();\n // return promiseTick(6)\n // .then(() => {\n // assert.notCalled(webex.credentials.refresh);\n // assert.called(webex.internal.device.refresh);\n // clock.tick(1000);\n // return assert.isFulfilled(promise);\n // });\n // });\n // });\n });\n\n describe('when connected', () => {\n it('resolves immediately', () =>\n mobiusSocket.connect().then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n const promise = mobiusSocket.connect();\n\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n\n return promise;\n }));\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n skipInBrowser(it)('does not continue attempting to connect', () => {\n const promise = mobiusSocket.connect();\n\n // Wait for the connection to be established before proceeding\n mockWebSocket.open();\n\n return promise.then(() =>\n promiseTick(2)\n .then(() => {\n jest.advanceTimersByTime(6 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(2);\n })\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n })\n );\n });\n });\n\n describe('when webSocketUrl is provided', () => {\n it('connects to MobiusSocket with provided url', () => {\n const webSocketUrl = 'ws://providedurl.com';\n const promise = mobiusSocket.connect(webSocketUrl);\n\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(Socket.prototype.open, 'ws://providedurl.com', sinon.match.any);\n });\n });\n });\n\n describe('when config.initialConnectionMaxRetries is set to 0', () => {\n it('connects successfully through the shared backoff flow', () => {\n const backoffSpy = sinon.spy(mobiusSocket, 'connectWithBackoff');\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n const promise = mobiusSocket.connect('ws://example.com');\n\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.isTrue(mobiusSocket.hasEverConnected, 'hasEverConnected is true');\n assert.calledOnce(Socket.prototype.open);\n assert.calledOnce(backoffSpy);\n assert.isUndefined(backoffSpy.firstCall.args[2]?.initialConnectionMaxRetries);\n backoffSpy.restore();\n });\n });\n\n it('rejects immediately on failure without retrying', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new ConnectionError({code: 4001})));\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n\n const promise = mobiusSocket.connect('ws://example.com');\n\n return assert.isRejected(promise).then(() => {\n assert.calledOnce(Socket.prototype.open);\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n });\n });\n\n it('uses config-driven initial retry behavior in the shared backoff strategy', () => {\n const backoffSpy = sinon.spy(mobiusSocket, 'connectWithBackoff');\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n\n const promise = mobiusSocket.connect('ws://example.com');\n\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.calledOnce(backoffSpy);\n assert.isUndefined(backoffSpy.firstCall.args[2]?.initialConnectionMaxRetries);\n backoffSpy.restore();\n });\n });\n\n it('treats a different explicit URL as a fresh initial connect', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n mobiusSocket.hasEverConnected = true;\n mobiusSocket.socketUrl = 'ws://old-url.com';\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n mobiusSocket.config.maxRetries = 5;\n\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new ConnectionError({code: 4001})));\n\n const promise = mobiusSocket.connect('ws://new-url.com');\n\n return assert.isRejected(promise).then(() => {\n assert.calledOnce(Socket.prototype.open);\n assert.equal(mobiusSocket.socketUrl, 'ws://new-url.com');\n assert.isFalse(mobiusSocket.hasEverConnected, 'hasEverConnected is false');\n });\n });\n });\n });\n\n describe('Websocket proxy agent', () => {\n afterEach(() => {\n delete webex.config.defaultMobiusSocketOptions;\n });\n\n it('connects to MobiusSocket using proxy agent', () => {\n const testProxyUrl = 'http://proxyurl.com:80';\n\n webex.config.defaultMobiusSocketOptions = {agent: {proxy: {href: testProxyUrl}}};\n const promise = mobiusSocket.connect();\n\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(\n socketOpenStub,\n 'ws://example.com',\n sinon.match.has(\n 'agent',\n sinon.match.has('proxy', sinon.match.has('href', testProxyUrl))\n )\n );\n });\n });\n\n it('connects to MobiusSocket without proxy agent', () => {\n const promise = mobiusSocket.connect();\n\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(socketOpenStub, 'ws://example.com', sinon.match({agent: undefined}));\n });\n });\n });\n\n describe('#disconnect()', () => {\n it('disconnects the WebSocket', () =>\n mobiusSocket\n .connect()\n .then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n const promise = mobiusSocket.disconnect();\n\n mockWebSocket.emit('close', {\n code: 1000,\n reason: 'Done',\n });\n\n return promise;\n })\n .then(() => {\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.isUndefined(\n mobiusSocket.mockWebSocket,\n 'MobiusSocket does not have a mockWebSocket'\n );\n }));\n\n it('disconnects the WebSocket with code 3050', () =>\n mobiusSocket\n .connect()\n .then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n const promise = mobiusSocket.disconnect();\n\n mockWebSocket.emit('close', {\n code: 3050,\n reason: 'done (permanent)',\n });\n\n return promise;\n })\n .then(() => {\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.isUndefined(\n mobiusSocket.mockWebSocket,\n 'MobiusSocket does not have a mockWebSocket'\n );\n }));\n\n it('stops emitting message events', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('event:status.start_typing', spy);\n\n return mobiusSocket\n .connect()\n .then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n\n assert.notCalled(spy);\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n })\n .then(() => {\n assert.calledOnce(spy);\n\n const promise = mobiusSocket.disconnect();\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n mockWebSocket.emit('close', {\n code: 1000,\n reason: 'Done',\n });\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n\n return promise;\n })\n\n .then(() => {\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n assert.calledOnce(spy);\n });\n });\n\n describe('when there is a connection attempt inflight', () => {\n it('stops the attempt when disconnect called', () => {\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.onCall(0).returns(\n // Delay the opening of the socket so that disconnect is called while open\n // is in progress\n promiseTick(2 * mobiusSocket.config.backoffTimeReset)\n // Pretend the socket opened successfully. Failing should be fine too but\n // it generates more console output.\n .then(() => Promise.resolve())\n );\n const promise = mobiusSocket.connect();\n\n // Wait for the connect call to setup\n return promiseTick(mobiusSocket.config.backoffTimeReset).then(async () => {\n // By this time backoffCall and mobiusSocket socket should be defined by the\n // 'connect' call\n assert.isDefined(mobiusSocket.backoffCall, 'MobiusSocket backoffCall is not defined');\n assert.isDefined(mobiusSocket.socket, 'MobiusSocket socket is not defined');\n // Calling disconnect will abort the backoffCall, close the socket, and\n // reject the connect\n mobiusSocket.disconnect();\n assert.isUndefined(\n mobiusSocket.backoffCall,\n 'MobiusSocket backoffCall is still defined'\n );\n // The socket will never be unset (which seems bad)\n assert.isDefined(mobiusSocket.socket, 'MobiusSocket socket is not defined');\n\n await assert.isRejected(promise);\n });\n });\n\n it('stops the attempt when backoffCall is undefined', () => {\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.resolve());\n\n let reason;\n\n mobiusSocket.backoffCall = undefined;\n\n const promise = mobiusSocket.attemptConnection('ws://example.com', (_reason) => {\n reason = _reason;\n });\n\n return promiseTick(mobiusSocket.config.backoffTimeReset).then(() => {\n assert.match(reason.message, /prevent socket open when backoffCall no longer defined/);\n\n // Ensure the promise was actually rejected (short-circuited)\n return assert.isRejected(promise);\n });\n });\n });\n });\n\n describe('#sendWssRequest()', () => {\n beforeEach(() => {\n mobiusSocket.config.wssResponseTimeout = 100;\n });\n\n it('resolves when a matching response_event arrives', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n await promiseTick();\n\n const requestPayload = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n assert.equal(requestPayload.data.token, 'test');\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: 'auth',\n trackingId: requestPayload.trackingId,\n statusCode: 200,\n statusMessage: 'OK',\n }),\n });\n\n const response = await requestPromise;\n\n assert.equal(response.type, 'response_event');\n assert.equal(response.subtype, 'auth');\n assert.equal(response.trackingId, requestPayload.trackingId);\n assert.equal(response.statusCode, 200);\n });\n\n it('strips the Bearer prefix from connect-time auth token', async () => {\n await mobiusSocket.connect();\n\n const authPayload = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(authPayload.type, MESSAGE_TYPES.AUTH);\n assert.equal(authPayload.data.token, 'FAKE');\n });\n\n it('rejects when a matching response_event is non-2xx', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n await promiseTick();\n\n const requestPayload = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: 'auth',\n trackingId: requestPayload.trackingId,\n statusCode: 403,\n statusMessage: 'Forbidden',\n }),\n });\n\n const error = await assert.isRejected(requestPromise);\n\n assert.equal(error.name, 'MobiusSocketResponseError');\n assert.equal(error.statusCode, 403);\n assert.equal(error.statusMessage, 'Forbidden');\n assert.equal(error.trackingId, requestPayload.trackingId);\n });\n\n it('rejects when the matching response does not arrive before timeout', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n jest.advanceTimersByTime(101);\n await promiseTick();\n\n const error = await assert.isRejected(requestPromise);\n\n assert.equal(error.name, 'MobiusSocketResponseError');\n assert.equal(error.statusCode, 408);\n assert.equal(error.statusMessage, 'Mobius websocket response timed out');\n });\n\n it('rejects with a clear error when the matching response is missing status code', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n await promiseTick();\n\n const requestPayload = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: 'auth',\n trackingId: requestPayload.trackingId,\n }),\n });\n\n const error = await assert.isRejected(requestPromise);\n\n assert.equal(error.name, 'MobiusSocketResponseError');\n assert.isUndefined(error.statusCode);\n assert.equal(error.statusMessage, 'Socket response missing status code');\n });\n\n it('rejects pending requests when the active socket closes', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n mockWebSocket.emit('close', {\n code: 1003,\n reason: 'service rejected request',\n });\n\n const error = await assert.isRejected(requestPromise);\n\n assert.instanceOf(error, ConnectionError);\n assert.equal(error.code, 1003);\n assert.equal(error.reason, 'service rejected request');\n });\n\n it('rejects array payloads', async () => {\n await mobiusSocket.connect();\n\n const error = await assert.isRejected(mobiusSocket.sendWssRequest([]));\n\n assert.equal(error.message, '`payload` is required');\n });\n });\n\n describe('#getConnectedWebSocketUrl()', () => {\n it('returns the connected websocket url', () => {\n mobiusSocket.socket = {\n connected: true,\n url: 'ws://connected-url.com',\n };\n\n assert.equal(mobiusSocket.getConnectedWebSocketUrl(), 'ws://connected-url.com');\n });\n\n it('returns undefined when not connected', () => {\n mobiusSocket.socket = {\n connected: false,\n url: 'ws://disconnected-url.com',\n };\n\n assert.isUndefined(mobiusSocket.getConnectedWebSocketUrl());\n });\n });\n\n describe('#_emit()', () => {\n it('emits Error-safe events and log the error with the call parameters', () => {\n const error = 'error';\n const event = {data: 'some data'};\n mobiusSocket.on('break', () => {\n throw error;\n });\n sinon.stub(mobiusSocket.logger, 'error');\n\n return Promise.resolve(mobiusSocket.emitEvent('break', event)).then((res) => {\n assert.calledWith(\n mobiusSocket.logger.error,\n 'MobiusSocket: error occurred in event handler:',\n error,\n ' with args: ',\n ['break', event]\n );\n\n return res;\n });\n });\n });\n\n describe('#_prepareUrl()', () => {\n it('returns the provided URL as-is (no Mercury URL transforms)', () =>\n mobiusSocket.prepareUrl('ws://provided.com').then((wsUrl) => {\n assert.equal(wsUrl, 'ws://provided.com');\n }));\n\n it('falls back to device webSocketUrl when no URL is provided', () =>\n mobiusSocket.prepareUrl().then((wsUrl) => {\n assert.equal(wsUrl, 'ws://example.com');\n }));\n });\n\n describe('shutdown protocol', () => {\n describe('#_handleImminentShutdown()', () => {\n let connectWithBackoffStub;\n\n beforeEach(() => {\n mobiusSocket.connected = true;\n mobiusSocket.socket = {\n url: 'ws://old-socket.com',\n removeAllListeners: sinon.stub(),\n };\n connectWithBackoffStub = sinon.stub(mobiusSocket, 'connectWithBackoff');\n connectWithBackoffStub.returns(Promise.resolve());\n sinon.stub(mobiusSocket, 'emitEvent');\n });\n\n afterEach(() => {\n connectWithBackoffStub.restore();\n mobiusSocket.emitEvent.restore();\n });\n\n it('should be idempotent - no-op if already in progress', () => {\n mobiusSocket.shutdownSwitchoverBackoffCall = {placeholder: true};\n\n mobiusSocket.handleImminentShutdown();\n\n assert.notCalled(connectWithBackoffStub);\n });\n\n it('should set switchover flags when called', () => {\n mobiusSocket.handleImminentShutdown();\n\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n assert.isUndefined(callArgs[0]); // webSocketUrl\n assert.isObject(callArgs[1]); // context\n assert.isTrue(callArgs[1].isShutdownSwitchover);\n assert.isObject(callArgs[1].attemptOptions);\n assert.isTrue(callArgs[1].attemptOptions.isShutdownSwitchover);\n });\n\n it('should call _connectWithBackoff with correct parameters', (done) => {\n mobiusSocket.handleImminentShutdown();\n\n process.nextTick(() => {\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n assert.isUndefined(callArgs[0]); // webSocketUrl\n assert.isObject(callArgs[1]); // context\n assert.isTrue(callArgs[1].isShutdownSwitchover);\n assert.isObject(callArgs[1].attemptOptions);\n assert.isTrue(callArgs[1].attemptOptions.isShutdownSwitchover);\n done();\n });\n });\n\n it('should handle exceptions during switchover', () => {\n connectWithBackoffStub.restore();\n sinon.stub(mobiusSocket, 'connectWithBackoff').throws(new Error('Connection failed'));\n\n mobiusSocket.handleImminentShutdown();\n\n assert.isUndefined(mobiusSocket.shutdownSwitchoverBackoffCall);\n mobiusSocket.connectWithBackoff.restore();\n });\n });\n\n describe('#_onmessage() with shutdown message', () => {\n beforeEach(() => {\n sinon.stub(mobiusSocket, 'handleImminentShutdown');\n sinon.stub(mobiusSocket, 'emitEvent');\n });\n\n afterEach(() => {\n mobiusSocket.handleImminentShutdown.restore();\n mobiusSocket.emitEvent.restore();\n });\n\n it('should trigger _handleImminentShutdown on shutdown message', () => {\n const shutdownEvent = {\n data: {\n type: 'shutdown',\n },\n };\n\n const result = mobiusSocket.onmessage(shutdownEvent);\n\n assert.calledOnce(mobiusSocket.handleImminentShutdown);\n assert.calledWith(\n mobiusSocket.emitEvent,\n 'event:mobius_shutdown_imminent',\n shutdownEvent.data\n );\n assert.instanceOf(result, Promise);\n });\n\n it('should handle shutdown message without additional data gracefully', () => {\n const shutdownEvent = {\n data: {\n type: 'shutdown',\n },\n };\n\n mobiusSocket.onmessage(shutdownEvent);\n\n assert.calledOnce(mobiusSocket.handleImminentShutdown);\n });\n\n it('should not trigger shutdown handling for non-shutdown messages', () => {\n const regularEvent = {\n data: {\n type: 'regular',\n data: {\n eventType: 'conversation.activity',\n },\n },\n };\n\n mobiusSocket.onmessage(regularEvent);\n\n assert.notCalled(mobiusSocket.handleImminentShutdown);\n });\n });\n\n describe('#_onmessage() with missing data or eventType', () => {\n beforeEach(() => {\n sinon.stub(mobiusSocket, 'emitEvent');\n });\n\n afterEach(() => {\n mobiusSocket.emitEvent.restore();\n });\n\n it('should not throw when envelope.data is undefined', () => {\n const event = {\n data: {\n type: 'someType',\n // no nested data property\n },\n };\n\n const result = mobiusSocket.onmessage(event);\n\n assert.instanceOf(result, Promise);\n assert.calledWith(mobiusSocket.emitEvent, 'event', event.data);\n });\n\n it('should not throw when data.eventType is undefined', () => {\n const event = {\n data: {\n type: 'someType',\n data: {\n // no eventType property\n someField: 'value',\n },\n },\n };\n\n const result = mobiusSocket.onmessage(event);\n\n assert.instanceOf(result, Promise);\n assert.calledWith(mobiusSocket.emitEvent, 'event', event.data);\n });\n\n it('should emit generic event for messages without eventType (e.g. subscription responses)', () => {\n const event = {\n data: {\n id: 'msg-123',\n sequenceNumber: 5,\n data: {\n statusCode: 200,\n },\n },\n };\n\n const result = mobiusSocket.onmessage(event);\n\n assert.instanceOf(result, Promise);\n assert.calledOnce(mobiusSocket.emitEvent);\n assert.calledWith(mobiusSocket.emitEvent, 'event', event.data);\n });\n\n it('should still process messages with a valid eventType', async () => {\n const event = {\n data: {\n data: {\n eventType: 'conversation.activity',\n },\n },\n };\n\n await mobiusSocket.onmessage(event);\n\n assert.calledWith(mobiusSocket.emitEvent, 'event:conversation', event.data);\n assert.calledWith(mobiusSocket.emitEvent, 'event:conversation.activity', event.data);\n });\n });\n\n describe('#_onmessage() async_event deduplication', () => {\n let originalDedupCacheMaxSize;\n\n beforeEach(() => {\n originalDedupCacheMaxSize = mobiusSocket.config.dedupCacheMaxSize;\n });\n\n afterEach(() => {\n mobiusSocket.config.dedupCacheMaxSize = originalDedupCacheMaxSize;\n });\n\n it('suppresses duplicate async_event messages', async () => {\n const emitSpy = sinon.spy(mobiusSocket, 'emitEvent');\n\n await mobiusSocket.onmessage(createAsyncEvent('evt-1'));\n await mobiusSocket.onmessage(createAsyncEvent('evt-1'));\n\n assert.equal(countGenericEventEmits(emitSpy), 1);\n emitSpy.restore();\n });\n\n it('suppresses duplicate async_event messages across socket replacement without disconnect', async () => {\n const emitSpy = sinon.spy(mobiusSocket, 'emitEvent');\n mobiusSocket.socket = createSessionSocket();\n\n await mobiusSocket.onmessage(createAsyncEvent('evt-2'));\n\n mobiusSocket.socket = createSessionSocket();\n await mobiusSocket.onmessage(createAsyncEvent('evt-2'));\n\n assert.equal(countGenericEventEmits(emitSpy), 1);\n emitSpy.restore();\n });\n\n it('evicts only the oldest eventId when the dedup cache exceeds max size', async () => {\n const emitSpy = sinon.spy(mobiusSocket, 'emitEvent');\n\n mobiusSocket.config.dedupCacheMaxSize = 3;\n\n await mobiusSocket.onmessage(createAsyncEvent('e1'));\n await mobiusSocket.onmessage(createAsyncEvent('e2'));\n await mobiusSocket.onmessage(createAsyncEvent('e3'));\n await mobiusSocket.onmessage(createAsyncEvent('e4'));\n await mobiusSocket.onmessage(createAsyncEvent('e2'));\n await mobiusSocket.onmessage(createAsyncEvent('e1'));\n\n assert.equal(countGenericEventEmits(emitSpy), 5);\n emitSpy.restore();\n });\n\n it('clears the dedup cache on disconnect', async () => {\n const emitSpy = sinon.spy(mobiusSocket, 'emitEvent');\n\n await mobiusSocket.onmessage(createAsyncEvent('evt-3'));\n\n mobiusSocket.socket = createSessionSocket();\n await mobiusSocket.disconnect();\n await mobiusSocket.onmessage(createAsyncEvent('evt-3'));\n\n assert.equal(countGenericEventEmits(emitSpy), 2);\n emitSpy.restore();\n });\n });\n\n describe('#_onclose() with code 4001 (shutdown replacement)', () => {\n let mockSocket;\n let anotherSocket;\n\n beforeEach(() => {\n mockSocket = {\n url: 'ws://active-socket.com',\n removeAllListeners: sinon.stub(),\n };\n anotherSocket = {\n url: 'ws://old-socket.com',\n removeAllListeners: sinon.stub(),\n };\n mobiusSocket.socket = mockSocket;\n mobiusSocket.connected = true;\n sinon.stub(mobiusSocket, 'emitEvent');\n sinon.stub(mobiusSocket, 'reconnect');\n });\n\n afterEach(() => {\n mobiusSocket.emitEvent.restore();\n mobiusSocket.reconnect.restore();\n });\n\n it('should handle active socket close with 4001 - permanent failure', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket.onclose(closeEvent, mockSocket);\n\n assert.calledWith(mobiusSocket.emitEvent, 'offline.permanent', closeEvent);\n assert.notCalled(mobiusSocket.reconnect);\n assert.isFalse(mobiusSocket.connected);\n });\n\n it('should handle non-active socket close with 4001 - no reconnect needed', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket.onclose(closeEvent, anotherSocket);\n\n assert.calledWith(mobiusSocket.emitEvent, 'offline.replaced', closeEvent);\n assert.notCalled(mobiusSocket.reconnect);\n assert.isTrue(mobiusSocket.connected);\n assert.strictEqual(mobiusSocket.socket, mockSocket);\n });\n\n it('should distinguish between active and non-active socket closes', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n // Test non-active socket\n mobiusSocket.onclose(closeEvent, anotherSocket);\n assert.calledWith(mobiusSocket.emitEvent, 'offline.replaced', closeEvent);\n\n // Reset the spy call history\n mobiusSocket.emitEvent.resetHistory();\n\n // Test active socket\n mobiusSocket.onclose(closeEvent, mockSocket);\n assert.calledWith(mobiusSocket.emitEvent, 'offline.permanent', closeEvent);\n });\n\n it('should handle missing sourceSocket parameter (treats as non-active)', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket.onclose(closeEvent, undefined);\n\n assert.calledWith(mobiusSocket.emitEvent, 'offline.replaced', closeEvent);\n assert.notCalled(mobiusSocket.reconnect);\n });\n\n it('should clean up event listeners from non-active socket when it closes', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket.onclose(closeEvent, anotherSocket);\n\n assert.calledOnce(anotherSocket.removeAllListeners);\n });\n\n it('should not clean up listeners from active socket listeners until close handler runs', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket.onclose(closeEvent, mockSocket);\n\n assert.calledOnce(mockSocket.removeAllListeners);\n });\n });\n\n describe('shutdown switchover with retry logic', () => {\n let connectWithBackoffStub;\n\n beforeEach(() => {\n mobiusSocket.connected = true;\n mobiusSocket.socket = {\n url: 'ws://old-socket.com',\n removeAllListeners: sinon.stub(),\n };\n connectWithBackoffStub = sinon.stub(mobiusSocket, 'connectWithBackoff');\n sinon.stub(mobiusSocket, 'emitEvent');\n });\n\n afterEach(() => {\n connectWithBackoffStub.restore();\n mobiusSocket.emitEvent.restore();\n });\n\n it('should call _connectWithBackoff with shutdown switchover context', (done) => {\n connectWithBackoffStub.returns(Promise.resolve());\n\n mobiusSocket.handleImminentShutdown();\n\n process.nextTick(() => {\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n\n assert.isUndefined(callArgs[0]); // webSocketUrl\n assert.isObject(callArgs[1]);\n assert.isTrue(callArgs[1].isShutdownSwitchover);\n assert.isObject(callArgs[1].attemptOptions);\n assert.isTrue(callArgs[1].attemptOptions.isShutdownSwitchover);\n done();\n });\n });\n\n it('should set shutdownSwitchoverBackoffCall during switchover', () => {\n connectWithBackoffStub.callsFake(() => {\n mobiusSocket.shutdownSwitchoverBackoffCall = {placeholder: true};\n\n return new Promise(() => {}); // Never resolves\n });\n\n mobiusSocket.handleImminentShutdown();\n\n assert.isOk(mobiusSocket.shutdownSwitchoverBackoffCall);\n });\n\n it('should emit success event when switchover completes', async () => {\n connectWithBackoffStub.callsFake((url, context) => {\n if (context && context.attemptOptions && context.attemptOptions.onSuccess) {\n const newSocket = {url: 'ws://new-socket.com'};\n context.attemptOptions.onSuccess(newSocket, 'ws://new-socket.com');\n }\n\n return Promise.resolve();\n });\n\n mobiusSocket.handleImminentShutdown();\n\n await promiseTick(50);\n\n const emitCalls = mobiusSocket.emitEvent.getCalls();\n const hasCompleteEvent = emitCalls.some(\n (call) => call.args[0] === 'event:mobius_shutdown_switchover_complete'\n );\n\n assert.isTrue(hasCompleteEvent, 'Should emit switchover complete event');\n });\n\n it('should emit failure event when switchover exhausts retries', async () => {\n const testError = new Error('Connection failed');\n\n connectWithBackoffStub.returns(Promise.reject(testError));\n\n mobiusSocket.handleImminentShutdown();\n await promiseTick(50);\n\n const emitCalls = mobiusSocket.emitEvent.getCalls();\n const hasFailureEvent = emitCalls.some(\n (call) =>\n call.args[0] === 'event:mobius_shutdown_switchover_failed' &&\n call.args[1] &&\n call.args[1].reason === testError\n );\n\n assert.isTrue(hasFailureEvent, 'Should emit switchover failed event');\n });\n\n it('should allow old socket to be closed by server after switchover failure', async () => {\n connectWithBackoffStub.returns(Promise.reject(new Error('Failed')));\n\n mobiusSocket.handleImminentShutdown();\n await promiseTick(50);\n\n assert.equal(mobiusSocket.socket.removeAllListeners.callCount, 0);\n });\n });\n\n describe('#_prepareAndOpenSocket()', () => {\n let mockSocket;\n let prepareUrlStub;\n let getUserTokenStub;\n\n beforeEach(() => {\n mockSocket = {\n open: sinon.stub().returns(Promise.resolve()),\n };\n prepareUrlStub = sinon\n .stub(mobiusSocket, 'prepareUrl')\n .returns(Promise.resolve('ws://example.com'));\n getUserTokenStub = webex.credentials.getUserToken;\n getUserTokenStub.returns(\n Promise.resolve({\n toString: () => 'mock-token',\n })\n );\n });\n\n afterEach(() => {\n prepareUrlStub.restore();\n });\n\n it('should prepare URL and get user token', async () => {\n await mobiusSocket.prepareAndOpenSocket(mockSocket, 'ws://test.com', false);\n\n assert.calledOnce(prepareUrlStub);\n assert.calledWith(prepareUrlStub, 'ws://test.com');\n assert.calledOnce(getUserTokenStub);\n });\n\n it('should open socket with correct options for normal connection', async () => {\n await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, false);\n\n assert.calledOnce(mockSocket.open);\n const callArgs = mockSocket.open.firstCall.args;\n\n assert.equal(callArgs[0], 'ws://example.com');\n assert.isObject(callArgs[1]);\n assert.equal(callArgs[1].token, 'mock-token');\n assert.isDefined(callArgs[1].forceCloseDelay);\n assert.isDefined(callArgs[1].wssResponseTimeout);\n });\n\n it('should log with correct prefix for normal connection', async () => {\n await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, false);\n\n // The method should complete successfully - we're testing it runs without error\n // Actual log message verification is complex due to existing stubs in parent scope\n assert.calledOnce(mockSocket.open);\n });\n\n it('should log with shutdown prefix for shutdown connection', async () => {\n await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, true);\n\n // The method should complete successfully with shutdown flag\n assert.calledOnce(mockSocket.open);\n });\n\n it('should merge custom mobiusSocket options when provided', async () => {\n webex.config.defaultMobiusSocketOptions = {\n customOption: 'test-value',\n wssResponseTimeout: 99999,\n };\n\n await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, false);\n\n const callArgs = mockSocket.open.firstCall.args;\n\n assert.equal(callArgs[1].customOption, 'test-value');\n assert.equal(callArgs[1].wssResponseTimeout, 99999); // Custom value overrides default\n });\n\n it('should return the webSocketUrl after opening', async () => {\n const result = await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, false);\n\n assert.equal(result, 'ws://example.com');\n });\n\n it('should handle errors during socket open', async () => {\n mockSocket.open.returns(Promise.reject(new Error('Open failed')));\n\n try {\n await mobiusSocket.prepareAndOpenSocket(mockSocket, undefined, false);\n assert.fail('Should have thrown an error');\n } catch (err) {\n assert.equal(err.message, 'Open failed');\n }\n });\n });\n\n describe('#_attemptConnection() with shutdown switchover', () => {\n let prepareAndOpenSocketStub;\n let callback;\n\n beforeEach(() => {\n prepareAndOpenSocketStub = sinon\n .stub(mobiusSocket, 'prepareAndOpenSocket')\n .returns(Promise.resolve('ws://new-socket.com'));\n callback = sinon.stub();\n mobiusSocket.shutdownSwitchoverBackoffCall = {abort: sinon.stub()};\n mobiusSocket.socket = {url: 'ws://test.com'};\n mobiusSocket.connected = true;\n sinon.stub(mobiusSocket, 'emitEvent');\n sinon.stub(mobiusSocket, 'attachSocketEventListeners');\n });\n\n afterEach(() => {\n prepareAndOpenSocketStub.restore();\n mobiusSocket.emitEvent.restore();\n mobiusSocket.attachSocketEventListeners.restore();\n mobiusSocket.shutdownSwitchoverBackoffCall = undefined;\n });\n\n it('should not set socket reference before opening for shutdown switchover', async () => {\n const originalSocket = mobiusSocket.socket;\n\n await mobiusSocket.attemptConnection('ws://test.com', callback, {\n isShutdownSwitchover: true,\n attemptOptions: {\n onSuccess: (newSocket, url) => {\n assert.exists(newSocket);\n assert.equal(url, 'ws://new-socket.com');\n },\n },\n });\n\n // During shutdown switchover, this.socket should remain the old socket\n assert.equal(mobiusSocket.socket, originalSocket);\n });\n\n it('should call onSuccess callback with new socket and URL for shutdown', async () => {\n const onSuccessStub = sinon.stub();\n\n await mobiusSocket.attemptConnection('ws://test.com', callback, {\n isShutdownSwitchover: true,\n attemptOptions: {\n onSuccess: onSuccessStub,\n },\n });\n\n assert.calledOnce(onSuccessStub);\n assert.equal(onSuccessStub.firstCall.args[1], 'ws://new-socket.com');\n });\n\n it('should emit shutdown switchover complete event', async () => {\n await mobiusSocket.attemptConnection('ws://test.com', callback, {\n isShutdownSwitchover: true,\n attemptOptions: {\n onSuccess: (newSocket, url) => {\n mobiusSocket.socket = newSocket;\n mobiusSocket.connected = true;\n mobiusSocket.emitEvent('event:mobius_shutdown_switchover_complete', {\n url,\n });\n },\n },\n });\n\n assert.calledWith(\n mobiusSocket.emitEvent,\n 'event:mobius_shutdown_switchover_complete',\n sinon.match.has('url', 'ws://new-socket.com')\n );\n });\n\n it('should use simpler error handling for shutdown switchover failures', async () => {\n prepareAndOpenSocketStub.returns(Promise.reject(new Error('Connection failed')));\n\n await mobiusSocket\n .attemptConnection('ws://test.com', callback, {\n isShutdownSwitchover: true,\n attemptOptions: {},\n })\n .catch(() => {});\n\n assert.calledOnce(callback);\n assert.instanceOf(callback.firstCall.args[0], Error);\n });\n\n it('should check shutdownSwitchoverBackoffCall for shutdown connections', () => {\n mobiusSocket.shutdownSwitchoverBackoffCall = undefined;\n\n const result = mobiusSocket.attemptConnection('ws://test.com', callback, {\n isShutdownSwitchover: true,\n });\n\n return result.catch((err) => {\n assert.instanceOf(err, Error);\n assert.match(err.message, /switchover backoff call/);\n });\n });\n });\n\n describe('#_connectWithBackoff() with shutdown switchover', () => {\n it('should use shutdown-specific parameters when called', () => {\n const connectWithBackoffStub = sinon\n .stub(mobiusSocket, 'connectWithBackoff')\n .returns(Promise.resolve());\n\n mobiusSocket.handleImminentShutdown();\n\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n assert.isUndefined(callArgs[0]); // webSocketUrl\n assert.isObject(callArgs[1]);\n assert.isTrue(callArgs[1].isShutdownSwitchover);\n\n connectWithBackoffStub.restore();\n });\n\n it('should pass shutdown switchover options to _attemptConnection', () => {\n const attemptStub = sinon.stub(mobiusSocket, 'attemptConnection');\n attemptStub.callsFake((url, cb) => cb());\n\n const context = {\n isShutdownSwitchover: true,\n attemptOptions: {\n isShutdownSwitchover: true,\n onSuccess: () => {},\n },\n };\n\n const promise = mobiusSocket.connectWithBackoff(undefined, context);\n\n return promise.then(() => {\n assert.calledOnce(attemptStub);\n const callArgs = attemptStub.firstCall.args;\n assert.isObject(callArgs[2]);\n assert.isTrue(callArgs[2].isShutdownSwitchover);\n attemptStub.restore();\n });\n });\n\n it('should set and clear state flags appropriately', () => {\n sinon.stub(mobiusSocket, 'attemptConnection').callsFake((url, cb) => cb());\n\n mobiusSocket.shutdownSwitchoverBackoffCall = {placeholder: true};\n\n const promise = mobiusSocket.connectWithBackoff(undefined, {\n isShutdownSwitchover: true,\n attemptOptions: {isShutdownSwitchover: true, onSuccess: () => {}},\n });\n\n return promise.then(() => {\n assert.isUndefined(mobiusSocket.shutdownSwitchoverBackoffCall);\n mobiusSocket.attemptConnection.restore();\n });\n });\n });\n\n describe('#disconnect() with shutdown switchover in progress', () => {\n let abortStub;\n\n beforeEach(() => {\n mobiusSocket.socket = {\n close: sinon.stub().returns(Promise.resolve()),\n removeAllListeners: sinon.stub(),\n connecting: false,\n connected: true,\n };\n abortStub = sinon.stub();\n mobiusSocket.shutdownSwitchoverBackoffCall = {abort: abortStub};\n });\n\n it('should abort shutdown switchover backoff call on disconnect', async () => {\n await mobiusSocket.disconnect();\n\n assert.calledOnce(abortStub);\n });\n\n it('should handle disconnect when no switchover is in progress', async () => {\n mobiusSocket.shutdownSwitchoverBackoffCall = undefined;\n\n await mobiusSocket.disconnect();\n\n assert.calledOnce(mobiusSocket.socket.close);\n });\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}