@webex/calling 3.11.0 → 3.12.0-mobius-socket.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CallHistory/CallHistory.js +596 -0
- package/dist/CallHistory/CallHistory.js.map +1 -0
- package/dist/CallHistory/CallHistory.test.js +916 -0
- package/dist/CallHistory/CallHistory.test.js.map +1 -0
- package/dist/CallHistory/callHistoryFixtures.js +650 -0
- package/dist/CallHistory/callHistoryFixtures.js.map +1 -0
- package/dist/CallHistory/constants.js +38 -0
- package/dist/CallHistory/constants.js.map +1 -0
- package/dist/CallHistory/types.js +7 -0
- package/dist/CallHistory/types.js.map +1 -0
- package/dist/CallSettings/CallSettings.js +311 -0
- package/dist/CallSettings/CallSettings.js.map +1 -0
- package/dist/CallSettings/CallSettings.test.js +122 -0
- package/dist/CallSettings/CallSettings.test.js.map +1 -0
- package/dist/CallSettings/UcmBackendConnector.js +308 -0
- package/dist/CallSettings/UcmBackendConnector.js.map +1 -0
- package/dist/CallSettings/UcmBackendConnector.test.js +411 -0
- package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -0
- package/dist/CallSettings/WxCallBackendConnector.js +597 -0
- package/dist/CallSettings/WxCallBackendConnector.js.map +1 -0
- package/dist/CallSettings/WxCallBackendConnector.test.js +904 -0
- package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -0
- package/dist/CallSettings/constants.js +31 -0
- package/dist/CallSettings/constants.js.map +1 -0
- package/dist/CallSettings/testFixtures.js +68 -0
- package/dist/CallSettings/testFixtures.js.map +1 -0
- package/dist/CallSettings/types.js +7 -0
- package/dist/CallSettings/types.js.map +1 -0
- package/dist/CallingClient/CallingClient.js +1346 -0
- package/dist/CallingClient/CallingClient.js.map +1 -0
- package/dist/CallingClient/CallingClient.test.js +1352 -0
- package/dist/CallingClient/CallingClient.test.js.map +1 -0
- package/dist/CallingClient/callRecordFixtures.js +101 -0
- package/dist/CallingClient/callRecordFixtures.js.map +1 -0
- package/dist/CallingClient/calling/CallerId/index.js +275 -0
- package/dist/CallingClient/calling/CallerId/index.js.map +1 -0
- package/dist/CallingClient/calling/CallerId/index.test.js +275 -0
- package/dist/CallingClient/calling/CallerId/index.test.js.map +1 -0
- package/dist/CallingClient/calling/CallerId/types.js +7 -0
- package/dist/CallingClient/calling/CallerId/types.js.map +1 -0
- package/dist/CallingClient/calling/call.js +3489 -0
- package/dist/CallingClient/calling/call.js.map +1 -0
- package/dist/CallingClient/calling/call.test.js +3653 -0
- package/dist/CallingClient/calling/call.test.js.map +1 -0
- package/dist/CallingClient/calling/callManager.js +481 -0
- package/dist/CallingClient/calling/callManager.js.map +1 -0
- package/dist/CallingClient/calling/callManager.test.js +776 -0
- package/dist/CallingClient/calling/callManager.test.js.map +1 -0
- package/dist/CallingClient/calling/index.js +30 -0
- package/dist/CallingClient/calling/index.js.map +1 -0
- package/dist/CallingClient/calling/types.js +76 -0
- package/dist/CallingClient/calling/types.js.map +1 -0
- package/dist/CallingClient/callingClientFixtures.js +143 -0
- package/dist/CallingClient/callingClientFixtures.js.map +1 -0
- package/dist/CallingClient/constants.js +249 -0
- package/dist/CallingClient/constants.js.map +1 -0
- package/dist/CallingClient/line/index.js +332 -0
- package/dist/CallingClient/line/index.js.map +1 -0
- package/dist/CallingClient/line/line.test.js +342 -0
- package/dist/CallingClient/line/line.test.js.map +1 -0
- package/dist/CallingClient/line/types.js +21 -0
- package/dist/CallingClient/line/types.js.map +1 -0
- package/dist/CallingClient/registration/index.js +19 -0
- package/dist/CallingClient/registration/index.js.map +1 -0
- package/dist/CallingClient/registration/register.js +1713 -0
- package/dist/CallingClient/registration/register.js.map +1 -0
- package/dist/CallingClient/registration/register.test.js +1894 -0
- package/dist/CallingClient/registration/register.test.js.map +1 -0
- package/dist/CallingClient/registration/registerFixtures.js +36 -0
- package/dist/CallingClient/registration/registerFixtures.js.map +1 -0
- package/dist/CallingClient/registration/types.js +7 -0
- package/dist/CallingClient/registration/types.js.map +1 -0
- package/dist/CallingClient/registration/webWorker.js +132 -0
- package/dist/CallingClient/registration/webWorker.js.map +1 -0
- package/dist/CallingClient/registration/webWorker.test.js +303 -0
- package/dist/CallingClient/registration/webWorker.test.js.map +1 -0
- package/dist/CallingClient/registration/webWorkerStr.js +15 -0
- package/dist/CallingClient/registration/webWorkerStr.js.map +1 -0
- package/dist/CallingClient/types.js +7 -0
- package/dist/CallingClient/types.js.map +1 -0
- package/dist/CallingClient/utils/constants.js +46 -0
- package/dist/CallingClient/utils/constants.js.map +1 -0
- package/dist/CallingClient/utils/index.js +63 -0
- package/dist/CallingClient/utils/index.js.map +1 -0
- package/dist/CallingClient/utils/mobiusSocketMapper.js +106 -0
- package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -0
- package/dist/CallingClient/utils/request.js +267 -0
- package/dist/CallingClient/utils/request.js.map +1 -0
- package/dist/CallingClient/utils/types.js +7 -0
- package/dist/CallingClient/utils/types.js.map +1 -0
- package/dist/CallingClient/utils/wsFeatureFlag.js +20 -0
- package/dist/CallingClient/utils/wsFeatureFlag.js.map +1 -0
- package/dist/CallingClient/windowsChromiumIceWarmupUtils.js +142 -0
- package/dist/CallingClient/windowsChromiumIceWarmupUtils.js.map +1 -0
- package/dist/Contacts/ContactsClient.js +1206 -0
- package/dist/Contacts/ContactsClient.js.map +1 -0
- package/dist/Contacts/ContactsClient.test.js +1004 -0
- package/dist/Contacts/ContactsClient.test.js.map +1 -0
- package/dist/Contacts/constants.js +40 -0
- package/dist/Contacts/constants.js.map +1 -0
- package/dist/Contacts/contactFixtures.js +430 -0
- package/dist/Contacts/contactFixtures.js.map +1 -0
- package/dist/Contacts/types.js +43 -0
- package/dist/Contacts/types.js.map +1 -0
- package/dist/Errors/catalog/CallError.js +89 -0
- package/dist/Errors/catalog/CallError.js.map +1 -0
- package/dist/Errors/catalog/CallingDeviceError.js +83 -0
- package/dist/Errors/catalog/CallingDeviceError.js.map +1 -0
- package/dist/Errors/catalog/ExtendedError.js +42 -0
- package/dist/Errors/catalog/ExtendedError.js.map +1 -0
- package/dist/Errors/catalog/LineError.js +85 -0
- package/dist/Errors/catalog/LineError.js.map +1 -0
- package/dist/Errors/index.js +28 -0
- package/dist/Errors/index.js.map +1 -0
- package/dist/Errors/types.js +59 -0
- package/dist/Errors/types.js.map +1 -0
- package/dist/Events/impl/index.js +79 -0
- package/dist/Events/impl/index.js.map +1 -0
- package/dist/Events/types.js +97 -0
- package/dist/Events/types.js.map +1 -0
- package/dist/Logger/index.js +228 -0
- package/dist/Logger/index.js.map +1 -0
- package/dist/Logger/index.test.js +87 -0
- package/dist/Logger/index.test.js.map +1 -0
- package/dist/Logger/types.js +34 -0
- package/dist/Logger/types.js.map +1 -0
- package/dist/Metrics/index.js +534 -0
- package/dist/Metrics/index.js.map +1 -0
- package/dist/Metrics/index.test.js +463 -0
- package/dist/Metrics/index.test.js.map +1 -0
- package/dist/Metrics/types.js +64 -0
- package/dist/Metrics/types.js.map +1 -0
- package/dist/SDKConnector/index.js +134 -0
- package/dist/SDKConnector/index.js.map +1 -0
- package/dist/SDKConnector/index.test.js +9 -0
- package/dist/SDKConnector/index.test.js.map +1 -0
- package/dist/SDKConnector/types.js +7 -0
- package/dist/SDKConnector/types.js.map +1 -0
- package/dist/SDKConnector/utils.js +39 -0
- package/dist/SDKConnector/utils.js.map +1 -0
- package/dist/SDKConnector/utils.test.js +9 -0
- package/dist/SDKConnector/utils.test.js.map +1 -0
- package/dist/Voicemail/BroadworksBackendConnector.js +699 -0
- package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -0
- package/dist/Voicemail/BroadworksBackendConnector.test.js +820 -0
- package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -0
- package/dist/Voicemail/UcmBackendConnector.js +628 -0
- package/dist/Voicemail/UcmBackendConnector.js.map +1 -0
- package/dist/Voicemail/UcmBackendConnector.test.js +738 -0
- package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -0
- package/dist/Voicemail/Voicemail.js +472 -0
- package/dist/Voicemail/Voicemail.js.map +1 -0
- package/dist/Voicemail/Voicemail.test.js +391 -0
- package/dist/Voicemail/Voicemail.test.js.map +1 -0
- package/dist/Voicemail/WxCallBackendConnector.js +657 -0
- package/dist/Voicemail/WxCallBackendConnector.js.map +1 -0
- package/dist/Voicemail/WxCallBackendConnector.test.js +1225 -0
- package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -0
- package/dist/Voicemail/constants.js +61 -0
- package/dist/Voicemail/constants.js.map +1 -0
- package/dist/Voicemail/types.js +7 -0
- package/dist/Voicemail/types.js.map +1 -0
- package/dist/Voicemail/voicemailFixture.js +524 -0
- package/dist/Voicemail/voicemailFixture.js.map +1 -0
- package/dist/api.js +157 -0
- package/dist/api.js.map +1 -0
- package/dist/common/Utils.js +1542 -0
- package/dist/common/Utils.js.map +1 -0
- package/dist/common/Utils.test.js +1989 -0
- package/dist/common/Utils.test.js.map +1 -0
- package/dist/common/constants.js +62 -0
- package/dist/common/constants.js.map +1 -0
- package/dist/common/index.js +19 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/testUtil.js +988 -0
- package/dist/common/testUtil.js.map +1 -0
- package/dist/common/types.js +75 -0
- package/dist/common/types.js.map +1 -0
- package/dist/index.js +321 -0
- package/dist/index.js.map +1 -0
- package/dist/module/CallHistory/CallHistory.js +28 -17
- package/dist/module/CallingClient/CallingClient.js +157 -4
- package/dist/module/CallingClient/calling/call.js +12 -8
- package/dist/module/CallingClient/calling/callManager.js +29 -10
- package/dist/module/CallingClient/calling/types.js +2 -0
- package/dist/module/CallingClient/constants.js +8 -0
- package/dist/module/CallingClient/registration/register.js +46 -16
- package/dist/module/CallingClient/utils/constants.js +30 -0
- package/dist/module/CallingClient/utils/index.js +5 -0
- package/dist/module/CallingClient/utils/mobiusSocketMapper.js +56 -0
- package/dist/module/CallingClient/utils/request.js +112 -0
- package/dist/module/CallingClient/utils/types.js +1 -0
- package/dist/module/CallingClient/utils/wsFeatureFlag.js +5 -0
- package/dist/module/Events/types.js +0 -10
- package/dist/module/SDKConnector/index.js +17 -0
- package/dist/module/common/Utils.js +35 -4
- package/dist/module/common/testUtil.js +3 -0
- package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
- package/dist/types/CallingClient/CallingClient.d.ts +10 -1
- package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/call.d.ts +1 -0
- package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/callManager.d.ts +5 -4
- package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/types.d.ts +21 -9
- package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
- package/dist/types/CallingClient/constants.d.ts +8 -0
- package/dist/types/CallingClient/constants.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/register.d.ts +3 -1
- package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/types.d.ts +2 -1
- package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
- package/dist/types/CallingClient/types.d.ts +3 -1
- package/dist/types/CallingClient/types.d.ts.map +1 -1
- package/dist/types/CallingClient/utils/constants.d.ts +30 -0
- package/dist/types/CallingClient/utils/constants.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/index.d.ts +6 -0
- package/dist/types/CallingClient/utils/index.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +4 -0
- package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/request.d.ts +20 -0
- package/dist/types/CallingClient/utils/request.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/types.d.ts +23 -0
- package/dist/types/CallingClient/utils/types.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts +4 -0
- package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts.map +1 -0
- package/dist/types/Events/types.d.ts +0 -10
- package/dist/types/Events/types.d.ts.map +1 -1
- package/dist/types/SDKConnector/index.d.ts +2 -0
- package/dist/types/SDKConnector/index.d.ts.map +1 -1
- package/dist/types/SDKConnector/types.d.ts +11 -0
- package/dist/types/SDKConnector/types.d.ts.map +1 -1
- package/dist/types/common/Utils.d.ts +4 -1
- package/dist/types/common/Utils.d.ts.map +1 -1
- package/dist/types/common/testUtil.d.ts +3 -0
- package/dist/types/common/testUtil.d.ts.map +1 -1
- package/dist/types/common/types.d.ts +5 -0
- package/dist/types/common/types.d.ts.map +1 -1
- package/package.json +8 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_asyncMutex","require","_register","_testUtil","_types","utils","_interopRequireWildcard","_Logger","_interopRequireDefault","_types2","_registerFixtures","_common","_types3","_constants","_types4","_LineError","_types5","_request","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","jest","mock","getMobiusSocketInstance","fn","mockReturnValue","sendWssRequest","webex","getTestUtilsWebex","MockServiceData","indicator","ServiceIndicator","CALLING","domain","logSpy","spyOn","log","infoSpy","warnSpy","handleErrorSpy","mockResolvedValue","describe","originalProcessNextTick","process","nextTick","flushPromises","_promise","resolve","lineEmitter","mobiusUris","filterMobiusUris","getMobiusDiscoveryResponse","URL","mockResponse","getMockRequestTemplate","uri","concat","primary","body","userId","internal","device","clientDeviceUri","url","serviceData","ccMockResponse","failurePayload","statusCode","mockPostResponse","headers","trackingid","failurePayload429One","failurePayload429Two","failurePayload429Three","failurePayload429Four","successPayload","reg","restartSpy","restoreSpy","postRegistrationSpy","deregisterSpy","failoverSpy","retry429Spy","metricSpy","setupRegistration","mockServiceData","mutex","Mutex","createRegistration","LOGGER","INFO","setMobiusServers","backup","clearAllMocks","metricManager","beforeEach","APIRequest","resetInstance","getInstance","isMobiusSocketEnabled","afterEach","request","clearAllTimers","useRealTimers","localStorage","clear","it","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","mockReturnValueOnce","triggerRegistration","expect","toBeCalledOnceWith","method","getStatus","toEqual","RegistrationStatus","ACTIVE","toBeCalledTimes","toBeCalledWith","LINE_EVENTS","CONNECTING","REGISTERED","deviceId","objectContaining","file","REGISTRATION_FILE","METRIC_EVENT","REGISTRATION","REG_ACTION","REGISTER","METRIC_TYPE","BEHAVIORAL","REGISTRATION_UTIL","undefined","stop","_callee2","error","_context2","mockRejectedValue","createLineError","ERROR_TYPE","TOKEN_ERROR","INACTIVE","nthCalledWith","ERROR","REGISTRATION_ERROR","_callee3","_context3","mockRejectedValueOnce","errorCode","devices","mockResolvedValueOnce","mockDeleteResponse","IDLE","anything","UNREGISTERED","loggerContext","FAILOVER_UTIL","pop","_callee4","_context4","useFakeTimers","mockClear","toHaveBeenNthCalledWith","retryAfter","advanceTimersByTime","Number","SEC_TO_MSEC_MFACTOR","not","toBeCalled","_callee5","_context5","isCCFlow","_callee6","_context6","_callee7","_context7","REG_TRY_BACKUP_TIMER_VAL_IN_SEC","_callee8","_context8","_callee9","_context9","_callee0","failurePayload429Small","_context0","setActiveMobiusUrl","RECONNECT_ON_FAILURE_UTIL","reconnectOnFailure","toHaveBeenCalledTimes","toHaveBeenCalledWith","_callee1","attemptRegistrationWithServersSpy","_context1","_callee10","_context10","_callee11","_context11","handleConnectionRestoration","METHODS","HANDLE_CONNECTION_RESTORATION","_callee12","_context12","_callee13","key","raw","state","_context13","getItem","toBeTruthy","JSON","parse","attempt","timeElapsed","retryScheduledTime","any","serverType","_callee14","now","_failoverSpy$mock$cal","attemptArg","timeElapsedArg","_context14","Math","floor","_now","setItem","_stringify","_slicedToArray2","calls","toBe","toBeGreaterThanOrEqual","_callee15","_context15","getActiveMobiusUrl","_callee16","_context16","CONTACT_CENTER","_callee17","_context17","isPrimaryActiveSpy","_callee18","_context18","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","toStrictEqual","_callee19","_context19","global","fetch","json","MINUTES_TO_SEC_MFACTOR","failback429RetryAttempts","REG_429_RETRY_UTIL","failbackTimer","_callee20","_context20","FAILBACK_UTIL","_callee21","finalErrorPayload","_context21","_callee22","_context22","_callee23","_context23","_callee24","_context24","callManager","createCall","_keys","getActiveCalls","_callee25","_context25","beforeEachSetupForKeepalive","_ref26","_callee26","_context26","webWorker","toBeDefined","clearKeepaliveTimer","reconnectPending","_values","end","_callee27","postMessageSpy","_context27","Worker","prototype","type","accessToken","String","deviceUrl","interval","retryCountThreshold","onmessage","data","RECONNECTED","_callee28","worker","_context28","err","keepAliveRetryCount","_callee29","reconnectSpy","restartRegSpy","RETRY_COUNT_THRESHOLD","failureEvent","_context29","keepaliveInterval","WorkerMessageType","KEEPALIVE_FAILURE","_callee30","_context30","toBeUndefined","KEEPALIVE_SUCCESS","_callee31","_context31","_callee32","clearKeepaliveSpy","_context32","toHaveBeenCalled","_callee33","clearTimerSpy","threshold","_context33","lastCalledWith","keepaliveTimer","callCollection","CALLS_CLEARED_HANDLER_UTIL","_callee34","handle404CbSpy","registerSpy","_context34","KEEPALIVE_UTIL","_callee35","_reg$deviceInfo$devic","keepaliveSpy","_context35","deviceInfo","_callee36","_context36","setStatus","startFailoverTimer","_callee37","_context37","_callee38","pingSuccessPayload","status","_context38","isPrimaryActive","sent","_callee39","pingFailurePayload","_context39"],"sources":["register.test.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-shadow */\nimport {Mutex} from 'async-mutex';\nimport {createRegistration} from './register';\nimport {\n getMobiusDiscoveryResponse,\n getMockRequestTemplate,\n getTestUtilsWebex,\n} from '../../common/testUtil';\nimport {\n RegistrationStatus,\n ServiceIndicator,\n WebexRequestPayload,\n WorkerMessageType,\n} from '../../common/types';\nimport * as utils from '../../common/Utils';\nimport log from '../../Logger';\nimport {LOGGER} from '../../Logger/types';\nimport {URL, mockDeleteResponse, mockPostResponse} from './registerFixtures';\nimport {filterMobiusUris} from '../../common';\nimport {ERROR_TYPE} from '../../Errors/types';\nimport {\n CALLS_CLEARED_HANDLER_UTIL,\n DEFAULT_REHOMING_INTERVAL_MAX,\n DEFAULT_REHOMING_INTERVAL_MIN,\n FAILBACK_UTIL,\n FAILOVER_UTIL,\n KEEPALIVE_UTIL,\n MINUTES_TO_SEC_MFACTOR,\n REGISTRATION_FILE,\n REGISTRATION_UTIL,\n REG_429_RETRY_UTIL,\n REG_TRY_BACKUP_TIMER_VAL_IN_SEC,\n SEC_TO_MSEC_MFACTOR,\n RECONNECT_ON_FAILURE_UTIL,\n METHODS,\n} from '../constants';\nimport {ICall} from '../calling/types';\nimport {LINE_EVENTS} from '../line/types';\nimport {createLineError} from '../../Errors/catalog/LineError';\nimport {IRegistration} from './types';\nimport {METRIC_EVENT, REG_ACTION, METRIC_TYPE} from '../../Metrics/types';\nimport {APIRequest} from '../utils/request';\n\njest.mock('@webex/internal-plugin-mobius-socket', () => ({\n getMobiusSocketInstance: jest.fn().mockReturnValue({\n sendWssRequest: jest.fn(),\n }),\n}));\n\nconst webex = getTestUtilsWebex();\nconst MockServiceData = {\n indicator: ServiceIndicator.CALLING,\n domain: '',\n};\nconst logSpy = jest.spyOn(log, 'log');\nconst infoSpy = jest.spyOn(log, 'info');\nconst warnSpy = jest.spyOn(log, 'warn');\nconst handleErrorSpy = jest.spyOn(utils, 'handleRegistrationErrors');\njest.spyOn(utils, 'uploadLogs').mockResolvedValue();\ndescribe('Registration Tests', () => {\n const originalProcessNextTick = process.nextTick;\n function flushPromises() {\n return new Promise((resolve) => {\n originalProcessNextTick(resolve);\n });\n }\n\n const lineEmitter = jest.fn();\n\n const mobiusUris = filterMobiusUris(getMobiusDiscoveryResponse(), URL);\n\n const mockResponse = {\n ...getMockRequestTemplate(),\n uri: `${mobiusUris.primary[0]}device`,\n body: {\n userId: webex.internal.device.userId,\n clientDeviceUri: webex.internal.device.url,\n serviceData: {\n domain: '',\n indicator: 'calling',\n },\n },\n };\n\n const ccMockResponse = {\n ...mockResponse,\n body: {\n ...mockResponse.body,\n serviceData: {\n domain: '',\n indicator: 'contactcenter',\n },\n },\n };\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 500,\n body: mockPostResponse,\n headers: {\n trackingid: 'webex-js-sdk_06bafdd0-2f9b-4cd7-b438-9c0d95ecec9b_15',\n },\n });\n\n const failurePayload429One = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: mockPostResponse,\n headers: {\n 'retry-after': 42,\n },\n });\n\n const failurePayload429Two = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: mockPostResponse,\n headers: {\n 'retry-after': 33,\n },\n });\n\n const failurePayload429Three = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: mockPostResponse,\n headers: {\n 'retry-after': 136,\n },\n });\n\n const failurePayload429Four = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: mockPostResponse,\n headers: {\n 'retry-after': 81,\n },\n });\n\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockPostResponse,\n headers: {\n trackingid: 'webex-js-sdk_06bafdd0-2f9b-4cd7-b438-9c0d95ecec9b_15',\n },\n });\n\n let reg: IRegistration;\n let restartSpy;\n let restoreSpy;\n let postRegistrationSpy;\n let deregisterSpy;\n let failoverSpy;\n let retry429Spy;\n let metricSpy;\n\n const setupRegistration = (mockServiceData) => {\n const mutex = new Mutex();\n reg = createRegistration(webex, mockServiceData, mutex, lineEmitter, LOGGER.INFO);\n reg.setMobiusServers(mobiusUris.primary, mobiusUris.backup);\n jest.clearAllMocks();\n restartSpy = jest.spyOn(reg, 'restartRegistration');\n restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n postRegistrationSpy = jest.spyOn(reg, 'postRegistration');\n deregisterSpy = jest.spyOn(reg, 'deregister');\n failoverSpy = jest.spyOn(reg, 'startFailoverTimer');\n retry429Spy = jest.spyOn(reg, 'handle429Retry');\n metricSpy = jest.spyOn(reg.metricManager, 'submitRegistrationMetric');\n };\n\n beforeEach(() => {\n APIRequest.resetInstance();\n APIRequest.getInstance({webex, isMobiusSocketEnabled: false});\n setupRegistration(MockServiceData);\n });\n\n afterEach(() => {\n webex.request = jest.fn();\n jest.clearAllTimers();\n jest.clearAllMocks();\n jest.useRealTimers();\n localStorage.clear();\n });\n\n it('verify successful registration', async () => {\n webex.request.mockReturnValueOnce({\n body: mockPostResponse,\n headers: {\n trackingid: 'webex-js-sdk_06bafdd0-2f9b-4cd7-b438-9c0d95ecec9b_15',\n },\n });\n\n await reg.triggerRegistration();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(lineEmitter).toBeCalledTimes(2);\n expect(lineEmitter).toBeCalledWith(LINE_EVENTS.CONNECTING);\n expect(lineEmitter).toBeCalledWith(LINE_EVENTS.REGISTERED, mockPostResponse);\n\n // Check that log.log was called for successful registration\n expect(logSpy).toBeCalledWith(\n `Registration successful for deviceId: ${mockPostResponse.device.deviceId} userId: ${mockPostResponse.userId} responseTrackingId: webex-js-sdk_06bafdd0-2f9b-4cd7-b438-9c0d95ecec9b_15`,\n expect.objectContaining({\n file: REGISTRATION_FILE,\n method: 'register',\n })\n );\n expect(metricSpy).toBeCalledWith(\n METRIC_EVENT.REGISTRATION,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n REGISTRATION_UTIL,\n 'PRIMARY',\n 'webex-js-sdk_06bafdd0-2f9b-4cd7-b438-9c0d95ecec9b_15',\n undefined,\n undefined\n );\n });\n\n it('verify failure registration', async () => {\n webex.request.mockRejectedValue({\n body: mockPostResponse,\n statusCode: 401,\n headers: {},\n });\n\n await reg.triggerRegistration();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n });\n\n const error = createLineError(\n 'User is unauthorized due to an expired token. Sign out, then sign back in.',\n {},\n ERROR_TYPE.TOKEN_ERROR,\n RegistrationStatus.INACTIVE\n );\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(lineEmitter).toBeCalledTimes(2);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.ERROR, undefined, error);\n expect(metricSpy).toBeCalledWith(\n METRIC_EVENT.REGISTRATION_ERROR,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n REGISTRATION_UTIL,\n 'PRIMARY',\n '',\n undefined,\n error\n );\n });\n\n it('verify failure registration 403-101', async () => {\n webex.request\n .mockRejectedValueOnce({\n body: {\n userId: mockPostResponse.userId,\n errorCode: 101,\n devices: [mockPostResponse.device],\n },\n statusCode: 403,\n })\n .mockResolvedValueOnce({\n statusCode: 200,\n body: mockDeleteResponse,\n })\n .mockResolvedValueOnce({\n statusCode: 200,\n body: mockPostResponse,\n headers: {\n trackingid: 'webex-js-sdk_06bafdd0-2f9b-4cd7-b438-9c0d95ecec9b_15',\n },\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n });\n expect(webex.request).toBeCalledWith(\n expect.objectContaining({\n uri: mockPostResponse.device.uri,\n method: 'DELETE',\n })\n );\n\n expect(warnSpy).toBeCalledWith('User device limit exceeded', expect.anything());\n expect(infoSpy).toBeCalledWith('Registration restoration in progress.', expect.anything());\n expect(infoSpy).toBeCalledWith('Registration restored successfully.', expect.anything());\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(lineEmitter).toBeCalledTimes(4);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).nthCalledWith(3, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(4, LINE_EVENTS.REGISTERED, mockPostResponse);\n expect(metricSpy).toBeCalledWith(\n METRIC_EVENT.REGISTRATION,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n REGISTRATION_UTIL,\n 'UNKNOWN',\n 'webex-js-sdk_06bafdd0-2f9b-4cd7-b438-9c0d95ecec9b_15',\n undefined,\n undefined\n );\n });\n\n describe('429 handling tests', () => {\n const loggerContext = {\n file: REGISTRATION_FILE,\n method: FAILOVER_UTIL,\n };\n const logSpy = jest.spyOn(log, 'log');\n\n beforeEach(() => {\n mobiusUris.backup.pop();\n });\n\n afterEach(() => {\n mobiusUris.backup.push(URL);\n jest.clearAllMocks();\n });\n\n it('handle 429 received during initial registration failure and first attempt with primary', async () => {\n jest.useFakeTimers();\n logSpy.mockClear();\n webex.request\n .mockRejectedValueOnce(failurePayload429One)\n .mockRejectedValueOnce(failurePayload429Two)\n .mockRejectedValueOnce(failurePayload);\n\n await reg.triggerRegistration();\n\n /* Initial registration failed with 429 with higher retyrAfter, interval should be updtaed with retryAfter.\n * The first attempt to register with primary should be made after retryAfter seconds.\n */\n\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(retry429Spy).toBeCalledOnceWith(\n failurePayload429One.headers['retry-after'],\n 'triggerRegistration'\n );\n expect(reg.retryAfter).toEqual(failurePayload429One.headers['retry-after']);\n expect(failoverSpy).toBeCalledOnceWith();\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in ${failurePayload429One.headers['retry-after']} seconds, number of attempts : 1`,\n loggerContext\n );\n\n retry429Spy.mockClear();\n failoverSpy.mockClear();\n jest.advanceTimersByTime(\n Number(failurePayload429One.headers['retry-after']) * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n /* The first attempt to register with primary failed with 429 with lower retryAfter, interval should remain the same.\n * The second attempt to register with primary will be scheduled as per the interval calculated.\n */\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).toBeCalledOnceWith(\n failurePayload429Two.headers['retry-after'],\n 'startFailoverTimer'\n );\n expect(reg.retryAfter).toEqual(failurePayload429Two.headers['retry-after']);\n expect(failoverSpy).toBeCalledOnceWith(2, failurePayload429One.headers['retry-after']);\n\n retry429Spy.mockClear();\n failoverSpy.mockClear();\n jest.advanceTimersByTime(43 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n /* The second attempt to register with primary failed with 500, the retryAfter should be undefined.\n * The third attempt to register with primary will be scheduled as per the interval calculated.\n */\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).not.toBeCalled();\n expect(reg.retryAfter).toEqual(undefined);\n expect(failoverSpy).toBeCalledOnceWith(3, 85);\n });\n\n it('handle 429 received with higher retryAfter than the interval when interval with elapsedTime is already reaching threshold timer so we failover immediately', async () => {\n reg.isCCFlow = true;\n jest\n .spyOn(reg as any, 'getRegRetryInterval')\n .mockReturnValueOnce(33)\n .mockReturnValueOnce(40)\n .mockReturnValueOnce(47)\n .mockReturnValueOnce(52);\n jest.useFakeTimers();\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload429One)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(retry429Spy).not.toBeCalled();\n expect(failoverSpy).toBeCalledOnceWith();\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in 33 seconds, number of attempts : 1`,\n loggerContext\n );\n\n failoverSpy.mockClear();\n jest.advanceTimersByTime(33 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).not.toBeCalled();\n expect(failoverSpy).toBeCalledOnceWith(2, 33);\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in 40 seconds, number of attempts : 2`,\n loggerContext\n );\n\n logSpy.mockClear();\n failoverSpy.mockClear();\n jest.advanceTimersByTime(40 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).toBeCalledOnceWith(\n failurePayload429One.headers['retry-after'],\n 'startFailoverTimer'\n );\n expect(failoverSpy).toBeCalledOnceWith(3, 73);\n\n expect(logSpy).not.toBeCalledWith(\n `Scheduled retry with primary in ${failurePayload429One.headers['retry-after']} seconds, number of attempts : 3`,\n loggerContext\n );\n\n expect(infoSpy).toBeCalledWith(`Failing over to backup servers.`, loggerContext);\n\n expect(webex.request).toHaveBeenNthCalledWith(4, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n\n it('handle 429 received while the last attempt for primary', async () => {\n reg.isCCFlow = true;\n jest\n .spyOn(reg as any, 'getRegRetryInterval')\n .mockReturnValueOnce(33)\n .mockReturnValueOnce(40)\n .mockReturnValueOnce(47)\n .mockReturnValueOnce(52);\n jest.useFakeTimers();\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload429One)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n\n /* Initial registration and first 2 attempts with primary failed with non-final 5xx error responses.\n * Last attempt with primary failed with 429, the retryAfter should be used to schedule the next attempt but\n * the failover is triggered before the scheduling logic kicks in.\n */\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(retry429Spy).not.toBeCalled();\n expect(failoverSpy).toBeCalledOnceWith();\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in 33 seconds, number of attempts : 1`,\n loggerContext\n );\n\n failoverSpy.mockClear();\n jest.advanceTimersByTime(33 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).not.toBeCalled();\n expect(failoverSpy).toBeCalledOnceWith(2, 33);\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in 40 seconds, number of attempts : 2`,\n loggerContext\n );\n\n logSpy.mockClear();\n failoverSpy.mockClear();\n jest.advanceTimersByTime(40 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).not.toBeCalled();\n expect(failoverSpy).toBeCalledOnceWith(3, 73);\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in 41 seconds, number of attempts : 3`,\n loggerContext\n );\n\n failoverSpy.mockClear();\n jest.advanceTimersByTime(41 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(4, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).toBeCalledOnceWith(\n failurePayload429One.headers['retry-after'],\n 'startFailoverTimer'\n );\n expect(failoverSpy).toBeCalledOnceWith(4, 114);\n\n expect(infoSpy).toBeCalledWith(`Failing over to backup servers.`, loggerContext);\n\n expect(webex.request).toHaveBeenNthCalledWith(5, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n\n it('handle 429 received while failing over to backup server for CC flow', async () => {\n reg.isCCFlow = true;\n jest.useFakeTimers();\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload429One)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n /* Failover to backup server failed with 429, the retryAfter is used to schedule the next attempt with backup server.\n * Interval will be updated with retryAfter as interval calculated is less than the retryAfter.\n */\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n\n expect(retry429Spy).toBeCalledOnceWith(\n failurePayload429One.headers['retry-after'],\n 'startFailoverTimer'\n );\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with backup servers in ${failurePayload429One.headers['retry-after']} seconds.`,\n loggerContext\n );\n\n webex.request.mockClear();\n jest.advanceTimersByTime(\n Number(failurePayload429One.headers['retry-after']) * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n\n it('checking the retryAfter exceeding the threshold timers in first attempt itself', async () => {\n reg.isCCFlow = true;\n jest.useFakeTimers();\n jest.spyOn(reg as any, 'getRegRetryInterval').mockReturnValueOnce(40);\n webex.request.mockRejectedValueOnce(failurePayload429Three);\n\n await reg.triggerRegistration();\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(failoverSpy).toBeCalledOnceWith();\n expect(infoSpy).toBeCalledWith(`Failing over to backup servers.`, loggerContext);\n\n expect(logSpy).not.toBeCalledWith(\n `Scheduled retry with primary in 40 seconds, number of attempts : 1`,\n loggerContext\n );\n\n expect(logSpy).not.toBeCalledWith(\n `Scheduled retry with primary in ${failurePayload429Three.headers['retry-after']} seconds, number of attempts : 1`,\n loggerContext\n );\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n });\n\n it('checking the retryAfter exceeding the threshold timers in later attempts', async () => {\n reg.isCCFlow = true;\n jest.useFakeTimers();\n jest\n .spyOn(reg as any, 'getRegRetryInterval')\n .mockReturnValueOnce(39)\n .mockReturnValueOnce(43);\n webex.request\n .mockRejectedValueOnce(failurePayload429One)\n .mockRejectedValueOnce(failurePayload429Four)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(failoverSpy).toBeCalledOnceWith();\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in ${failurePayload429One.headers['retry-after']} seconds, number of attempts : 1`,\n loggerContext\n );\n\n failoverSpy.mockClear();\n jest.advanceTimersByTime(\n Number(failurePayload429One.headers['retry-after']) * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(failoverSpy).toBeCalledOnceWith(2, failurePayload429One.headers['retry-after']);\n\n expect(logSpy).not.toBeCalledWith(\n `Scheduled retry with primary in 43 seconds, number of attempts : 2`,\n loggerContext\n );\n\n expect(infoSpy).toBeCalledWith(`Failing over to backup servers.`, loggerContext);\n\n expect(logSpy).not.toBeCalledWith(\n `Scheduled retry with primary in ${failurePayload429Four.headers['retry-after']} seconds, number of attempts : 2`,\n loggerContext\n );\n\n expect(infoSpy).toBeCalledWith(`Failing over to backup servers.`, loggerContext);\n\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n });\n\n describe('restorePreviousRegistration 429 handling tests', () => {\n beforeEach(() => {\n jest.useFakeTimers();\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n jest.useRealTimers();\n });\n\n it('should schedule retry when 429 with retry-after < 60 seconds during reconnect', async () => {\n restartSpy = jest.spyOn(reg, 'restartRegistration');\n reg.setActiveMobiusUrl(mobiusUris.primary[0]);\n const failurePayload429Small = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: RECONNECT_ON_FAILURE_UTIL,\n headers: {\n 'retry-after': 30,\n },\n });\n webex.request\n .mockRejectedValueOnce(failurePayload429Small)\n .mockResolvedValueOnce(successPayload);\n\n await reg.reconnectOnFailure(RECONNECT_ON_FAILURE_UTIL); // This call is being used to set the retry-after value\n // Verify restore is invoked first and retry-after captured before scheduling\n expect(restoreSpy).toBeCalledOnceWith(RECONNECT_ON_FAILURE_UTIL);\n expect(restartSpy).not.toBeCalled();\n expect(reg.retryAfter).toEqual(undefined); // Clear retryAfter after 429 retry\n\n jest.advanceTimersByTime(40 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(restartSpy).toHaveBeenCalledTimes(1);\n expect(restartSpy).toHaveBeenCalledWith(RECONNECT_ON_FAILURE_UTIL);\n });\n\n it('should try backup servers when 429 with retry-after >= 60 seconds on primary during reconnect', async () => {\n // Setup: Register successfully with primary first\n const attemptRegistrationWithServersSpy = jest.spyOn(reg, 'attemptRegistrationWithServers');\n reg.setActiveMobiusUrl(mobiusUris.primary[0]);\n const failurePayload429Small = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: RECONNECT_ON_FAILURE_UTIL,\n headers: {\n 'retry-after': 100,\n },\n });\n webex.request\n .mockRejectedValueOnce(failurePayload429Small)\n .mockResolvedValueOnce(successPayload);\n\n await reg.reconnectOnFailure(RECONNECT_ON_FAILURE_UTIL); // This call is being used to trigger the retry\n // Verify restore gets invoked, 429 with retry-after is observed and captured\n expect(restoreSpy).toBeCalledOnceWith(RECONNECT_ON_FAILURE_UTIL);\n expect(retry429Spy).toBeCalledOnceWith(100, RECONNECT_ON_FAILURE_UTIL);\n jest.advanceTimersByTime(40 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(attemptRegistrationWithServersSpy).toHaveBeenCalledTimes(2);\n expect(attemptRegistrationWithServersSpy).toHaveBeenNthCalledWith(\n 1,\n RECONNECT_ON_FAILURE_UTIL,\n [mobiusUris.primary[0]]\n );\n // Immediately try backup servers when retry-after >= 60 seconds on primary\n expect(attemptRegistrationWithServersSpy).toHaveBeenNthCalledWith(\n 2,\n RECONNECT_ON_FAILURE_UTIL,\n mobiusUris.backup\n );\n expect(restartSpy).not.toHaveBeenCalledTimes(1);\n expect(restartSpy).not.toHaveBeenCalledWith(RECONNECT_ON_FAILURE_UTIL);\n expect(reg.retryAfter).toEqual(undefined); // Clear retryAfter after 429 retry\n });\n it('should restart registration with primary if we get 429 while on backup', async () => {\n // Setup: Register successfully with primary first\n restartSpy = jest.spyOn(reg, 'restartRegistration');\n const attemptRegistrationWithServersSpy = jest.spyOn(reg, 'attemptRegistrationWithServers');\n reg.setActiveMobiusUrl(mobiusUris.backup[0]);\n const failurePayload429Small = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: RECONNECT_ON_FAILURE_UTIL,\n headers: {\n 'retry-after': 100,\n },\n });\n webex.request\n .mockRejectedValueOnce(failurePayload429Small)\n .mockResolvedValueOnce(successPayload)\n .mockRejectedValueOnce(failurePayload429Small)\n .mockResolvedValueOnce(successPayload);\n\n await reg.reconnectOnFailure(RECONNECT_ON_FAILURE_UTIL); // This call is being used to trigger the retry\n // Verify restore path taken first and 429 handling captured\n expect(restoreSpy).toBeCalledOnceWith(RECONNECT_ON_FAILURE_UTIL);\n expect(retry429Spy).toBeCalledOnceWith(100, RECONNECT_ON_FAILURE_UTIL);\n // No failover scheduling expected in this path\n expect(failoverSpy).not.toBeCalled();\n jest.advanceTimersByTime(40 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(attemptRegistrationWithServersSpy).toHaveBeenCalledTimes(2);\n expect(attemptRegistrationWithServersSpy).toHaveBeenNthCalledWith(\n 1,\n RECONNECT_ON_FAILURE_UTIL,\n [mobiusUris.backup[0]]\n );\n // Immediately try primary servers when retry-after >= 60 seconds on backup\n expect(restartSpy).toHaveBeenCalledTimes(1);\n expect(restartSpy).toHaveBeenCalledWith(RECONNECT_ON_FAILURE_UTIL);\n expect(attemptRegistrationWithServersSpy).toHaveBeenNthCalledWith(\n 2,\n RECONNECT_ON_FAILURE_UTIL,\n [mobiusUris.primary[0]]\n );\n });\n });\n\n describe('handleConnectionRestoration 429 handling tests', () => {\n beforeEach(() => {\n jest.useFakeTimers();\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n jest.useRealTimers();\n });\n\n it('should schedule retry when 429 with retry-after < 60 seconds during handleConnectionRestoration', async () => {\n reg.setActiveMobiusUrl(mobiusUris.primary[0]);\n const failurePayload429Small = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: RECONNECT_ON_FAILURE_UTIL,\n headers: {\n 'retry-after': 30,\n },\n });\n webex.request\n .mockRejectedValueOnce(failurePayload429Small)\n .mockResolvedValueOnce(successPayload)\n .mockRejectedValueOnce(failurePayload429Small)\n .mockResolvedValueOnce(successPayload);\n\n await reg.handleConnectionRestoration(true);\n expect(restoreSpy).toBeCalledOnceWith(METHODS.HANDLE_CONNECTION_RESTORATION);\n expect(restartSpy).not.toBeCalled();\n expect(reg.retryAfter).toEqual(undefined); // Clear retryAfter after 429 retry\n\n jest.advanceTimersByTime(40 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(restartSpy).toHaveBeenCalledTimes(1);\n expect(restartSpy).toHaveBeenCalledWith(METHODS.HANDLE_CONNECTION_RESTORATION);\n });\n\n it('should try backup servers when 429 with retry-after >= 60 seconds on primary during handleConnectionRestoration', async () => {\n const attemptRegistrationWithServersSpy = jest.spyOn(reg, 'attemptRegistrationWithServers');\n reg.setActiveMobiusUrl(mobiusUris.primary[0]);\n const failurePayload429Small = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: RECONNECT_ON_FAILURE_UTIL,\n headers: {\n 'retry-after': 100,\n },\n });\n webex.request\n .mockRejectedValueOnce(failurePayload429Small)\n .mockResolvedValueOnce(successPayload)\n .mockRejectedValueOnce(failurePayload429Small)\n .mockResolvedValueOnce(successPayload);\n\n await reg.handleConnectionRestoration(true);\n expect(restoreSpy).toBeCalledOnceWith(METHODS.HANDLE_CONNECTION_RESTORATION);\n expect(retry429Spy).toBeCalledOnceWith(100, METHODS.HANDLE_CONNECTION_RESTORATION);\n jest.advanceTimersByTime(40 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(attemptRegistrationWithServersSpy).toHaveBeenCalledTimes(2);\n expect(attemptRegistrationWithServersSpy).toHaveBeenNthCalledWith(\n 1,\n METHODS.HANDLE_CONNECTION_RESTORATION,\n [mobiusUris.primary[0]]\n );\n // Immediately try backup servers when retry-after >= 60 seconds on primary\n expect(attemptRegistrationWithServersSpy).toHaveBeenNthCalledWith(\n 2,\n METHODS.HANDLE_CONNECTION_RESTORATION,\n mobiusUris.backup\n );\n expect(restartSpy).not.toHaveBeenCalledTimes(1);\n expect(restartSpy).not.toHaveBeenCalledWith(METHODS.HANDLE_CONNECTION_RESTORATION);\n });\n });\n\n describe('Registration failover tests', () => {\n it('persists failover state in localStorage when primary retry is scheduled', async () => {\n jest.useFakeTimers();\n // Force initial registration to fail to schedule failover\n webex.request.mockRejectedValueOnce(failurePayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n\n // A failover timer should be scheduled; verify localStorage contains state\n const key = `wxc-failover-state.${webex.internal.device.userId}`;\n const raw = localStorage.getItem(key);\n expect(raw).toBeTruthy();\n const state = JSON.parse(raw as string);\n expect(state).toEqual(\n expect.objectContaining({\n attempt: 1,\n timeElapsed: 0,\n retryScheduledTime: expect.any(Number),\n serverType: 'primary',\n })\n );\n });\n\n it('resumes failover from localStorage on triggerRegistration', async () => {\n jest.useFakeTimers();\n const key = `wxc-failover-state.${webex.internal.device.userId}`;\n const now = Math.floor(Date.now() / 1000);\n // Seed a cached state indicating a retry should have already occurred 5s ago\n localStorage.setItem(\n key,\n JSON.stringify({\n attempt: 3,\n timeElapsed: 12,\n retryScheduledTime: now - 5,\n serverType: 'primary',\n })\n );\n\n const failoverSpy = jest.spyOn(reg as any, 'startFailoverTimer');\n\n webex.request.mockResolvedValueOnce(successPayload);\n await reg.triggerRegistration();\n\n expect(failoverSpy).toHaveBeenCalledTimes(1);\n const [attemptArg, timeElapsedArg] = failoverSpy.mock.calls[0];\n expect(attemptArg).toBe(3);\n expect(timeElapsedArg).toBeGreaterThanOrEqual(12);\n });\n\n it('verify unreachable primary with reachable backup servers', async () => {\n jest.useFakeTimers();\n // try the primary twice and register successfully with backup servers\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n expect(metricSpy).toHaveBeenNthCalledWith(\n 3,\n METRIC_EVENT.REGISTRATION,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n FAILOVER_UTIL,\n 'BACKUP',\n 'webex-js-sdk_06bafdd0-2f9b-4cd7-b438-9c0d95ecec9b_15',\n undefined,\n undefined\n );\n });\n\n it('cc: verify unreachable primary with reachable backup server', async () => {\n setupRegistration({...MockServiceData, indicator: ServiceIndicator.CONTACT_CENTER});\n\n jest.useFakeTimers();\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toBeCalledWith({\n ...ccMockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...ccMockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n });\n\n it('verify unreachable primary and backup servers', async () => {\n jest.useFakeTimers();\n // try the primary twice and register successfully with backup servers\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n /*\n * 2 calls for primary -> initial and after timer expiry.\n * 2 calls for each backup entry -> 2 * 2 = 4.\n * So a total of 6 calls to webex.request and handleErrors\n */\n expect(webex.request).toBeCalledTimes(6);\n expect(handleErrorSpy).toBeCalledTimes(6);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[1]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n });\n });\n\n describe('Registration failback tests', () => {\n let isPrimaryActiveSpy;\n beforeEach(async () => {\n isPrimaryActiveSpy = jest.spyOn(reg, 'isPrimaryActive');\n isPrimaryActiveSpy.mockReturnValue(true);\n /* keep keepalive as active so that it wont interfere with the failback tests */\n jest.useFakeTimers();\n postRegistrationSpy\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n reg.rehomingIntervalMin = DEFAULT_REHOMING_INTERVAL_MIN;\n reg.rehomingIntervalMax = DEFAULT_REHOMING_INTERVAL_MAX;\n\n /* These 2 calls to handleErrorSpy are for primary after which it fails over to backup */\n expect(handleErrorSpy).toBeCalledTimes(2);\n\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n });\n\n it('verify 429 error with failback to primary after initial registration with backup: Restore failure', async () => {\n // delete should be successful\n global.fetch = jest.fn(() => Promise.resolve({json: () => mockDeleteResponse})) as jest.Mock;\n\n // Mock to fail twice with 429 (once for executeFailback, once for restorePreviousRegistration)\n postRegistrationSpy\n .mockRejectedValueOnce(failurePayload429Two)\n .mockRejectedValueOnce(failurePayload429Two);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(infoSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n jest.advanceTimersByTime(10000);\n await flushPromises();\n\n expect(retry429Spy).toBeCalledWith(\n failurePayload429Two.headers['retry-after'],\n 'executeFailback'\n );\n // After handling 429 during failback, the counter is incremented to 1\n expect(reg.failback429RetryAttempts).toBe(1);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(REG_429_RETRY_UTIL);\n // restartRegistration is not called immediately because 429 with retry-after < 60\n // schedules a delayed retry instead\n expect(restartSpy).not.toBeCalled();\n expect(reg.failbackTimer).not.toBe(undefined); // Timer is set in handle429Retry\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore failure', async () => {\n postRegistrationSpy.mockRejectedValue(failurePayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(infoSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restartSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore failure with final error', async () => {\n const finalErrorPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 401,\n body: mockPostResponse,\n });\n postRegistrationSpy.mockClear();\n postRegistrationSpy\n .mockRejectedValue(finalErrorPayload)\n .mockRejectedValueOnce(failurePayload);\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(infoSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).not.toBeCalled();\n expect(reg.failbackTimer).toBe(undefined);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore success', async () => {\n postRegistrationSpy.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(infoSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n /* Active Url should still match backup url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).not.toBeCalled();\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify successful failback to primary after initial registration with backup', async () => {\n postRegistrationSpy.mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(infoSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n /* Active Url must now match with the primary url */\n expect(deregisterSpy).toBeCalledOnceWith();\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.primary[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reg.failbackTimer).toBe(undefined);\n expect(restoreSpy).not.toBeCalled();\n expect(reg.rehomingIntervalMin).toBe(mockPostResponse.rehomingIntervalMin);\n expect(reg.rehomingIntervalMax).toBe(mockPostResponse.rehomingIntervalMax);\n });\n\n it('verify unsuccessful failback attempt due to active call', async () => {\n /** create a new call */\n reg.callManager.createCall();\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(1);\n\n postRegistrationSpy.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(infoSpy).toBeCalledWith(\n `Active calls present or primary Mobius is down, deferring failback to next cycle.`,\n {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n }\n );\n\n /* Active Url should still match backup url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(deregisterSpy).not.toBeCalled();\n expect(restoreSpy).not.toBeCalled();\n expect(restartSpy).not.toBeCalled();\n\n expect(infoSpy).toBeCalledWith(\n 'Active calls present or primary Mobius is down, deferring failback to next cycle.',\n {\n file: REGISTRATION_FILE,\n method: FAILBACK_UTIL,\n }\n );\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback attempt due to primary server being down', async () => {\n isPrimaryActiveSpy.mockReturnValue(false);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(infoSpy).toBeCalledWith(\n `Active calls present or primary Mobius is down, deferring failback to next cycle.`,\n {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n }\n );\n\n /* Active Url should still match backup url */\n expect(deregisterSpy).not.toBeCalled();\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n });\n });\n\n // Keep-alive related test cases\n describe('Keep-alive Tests', () => {\n const beforeEachSetupForKeepalive = async () => {\n postRegistrationSpy.mockResolvedValueOnce(successPayload);\n jest.useFakeTimers();\n await reg.triggerRegistration();\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reg.webWorker).toBeDefined();\n };\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n\n reg.clearKeepaliveTimer();\n reg.reconnectPending = false;\n const calls = Object.values(reg.callManager.getActiveCalls()) as ICall[];\n\n calls.forEach((call) => {\n call.end();\n });\n });\n\n it('verify successful keep-alive cases', async () => {\n const postMessageSpy = jest.spyOn(Worker.prototype, 'postMessage');\n\n await beforeEachSetupForKeepalive();\n\n expect(reg.webWorker).toBeDefined();\n expect(postMessageSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n type: 'START_KEEPALIVE',\n accessToken: expect.any(String),\n deviceUrl: expect.any(String),\n interval: expect.any(Number),\n retryCountThreshold: expect.any(Number),\n url: expect.any(String),\n })\n );\n\n reg.webWorker.onmessage({\n data: {type: 'KEEPALIVE_SUCCESS', statusCode: 200},\n } as MessageEvent);\n\n expect(lineEmitter).toBeCalledWith(LINE_EVENTS.RECONNECTED);\n });\n\n it('verify failure keep-alive cases: Retry Success', async () => {\n await beforeEachSetupForKeepalive();\n\n const worker = reg.webWorker;\n lineEmitter.mockClear();\n\n worker.onmessage({\n data: {type: 'KEEPALIVE_FAILURE', err: {statusCode: 503}, keepAliveRetryCount: 1},\n } as MessageEvent);\n\n worker.onmessage({\n data: {type: 'KEEPALIVE_SUCCESS', statusCode: 200},\n } as MessageEvent);\n\n expect(lineEmitter).toHaveBeenCalledWith(LINE_EVENTS.RECONNECTED);\n });\n\n it('verify failure keep-alive cases: Restore failure', async () => {\n // Run any necessary setup for keepalive\n await beforeEachSetupForKeepalive();\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n\n // Clear previous event emissions\n lineEmitter.mockClear();\n\n // Assume registration is active\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n\n // Use fake timers to trigger keepalive initialization\n jest.useFakeTimers();\n jest.advanceTimersByTime(mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n\n // Simulate the worker sending a KEEPALIVE_FAILURE message with retry count at threshold.\n const RETRY_COUNT_THRESHOLD = reg.isCCFlow ? 4 : 5;\n const failureEvent = {\n data: {\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {statusCode: 503},\n keepAliveRetryCount: RETRY_COUNT_THRESHOLD,\n },\n };\n\n reg.webWorker.onmessage(failureEvent);\n await flushPromises();\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(lineEmitter).toHaveBeenCalledWith(LINE_EVENTS.UNREGISTERED);\n expect(reconnectSpy).toBeCalledOnceWith(RECONNECT_ON_FAILURE_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(RECONNECT_ON_FAILURE_UTIL);\n expect(restartRegSpy).toBeCalledOnceWith(RECONNECT_ON_FAILURE_UTIL);\n\n jest.useRealTimers();\n\n expect(warnSpy).toHaveBeenCalledWith(\n 'Keep-alive missed 5 times. Status -> 503 ',\n expect.objectContaining({\n file: REGISTRATION_FILE,\n method: 'startKeepaliveTimer',\n })\n );\n });\n\n it('verify failure keep-alive cases: Restore Success', async () => {\n await beforeEachSetupForKeepalive();\n expect(reg.webWorker).toBeDefined();\n\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const url = 'https://mobius-dfw.webex.com/api/v1/calling/web/';\n\n reg.webWorker.onmessage({\n data: {\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {statusCode: 503},\n keepAliveRetryCount: 5,\n },\n } as MessageEvent);\n\n jest.advanceTimersByTime(1000);\n await flushPromises();\n\n expect(reg.webWorker).toBeUndefined();\n expect(reconnectSpy).toBeCalledOnceWith(RECONNECT_ON_FAILURE_UTIL);\n\n localStorage.clear();\n webex.request.mockResolvedValueOnce(successPayload);\n await reg.triggerRegistration();\n await flushPromises();\n expect(reg.webWorker).toBeDefined();\n\n reg.webWorker.onmessage({\n data: {type: WorkerMessageType.KEEPALIVE_SUCCESS, statusCode: 200},\n } as MessageEvent);\n\n // Advance timers and flush any remaining promises.\n jest.advanceTimersByTime(1000);\n await flushPromises();\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n // reconnectSpy should have been called only once.\n expect(reconnectSpy).toBeCalledTimes(1);\n expect(restoreSpy).toBeCalledOnceWith(RECONNECT_ON_FAILURE_UTIL);\n expect(restartSpy).toBeCalledOnceWith(RECONNECT_ON_FAILURE_UTIL);\n // Active Mobius URL should remain unchanged.\n expect(reg.getActiveMobiusUrl()).toStrictEqual(url);\n });\n\n it('verify failure followed by recovery of keepalive', async () => {\n await beforeEachSetupForKeepalive();\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reg.webWorker).toBeDefined();\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n reg.webWorker.onmessage({\n data: {\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: failurePayload,\n keepAliveRetryCount: reg.isCCFlow ? 4 : 5,\n },\n } as MessageEvent);\n await flushPromises();\n\n expect(reg.webWorker).toBeUndefined();\n expect(handleErrorSpy).toBeCalledTimes(3);\n\n localStorage.clear();\n await reg.triggerRegistration();\n await flushPromises();\n expect(reg.webWorker).toBeDefined();\n\n reg.webWorker.onmessage({\n data: {type: WorkerMessageType.KEEPALIVE_SUCCESS, statusCode: 200},\n } as MessageEvent);\n await flushPromises();\n\n // In a complete failure‐then-recovery scenario, we expect another failure event to have been handled.\n // For that, simulate a second failure event on the new worker.\n reg.webWorker.onmessage({\n data: {\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: failurePayload,\n keepAliveRetryCount: reg.isCCFlow ? 4 : 5,\n },\n } as MessageEvent);\n await flushPromises();\n\n expect(handleErrorSpy).toBeCalledTimes(4);\n\n // And then re-register successfully:\n await reg.triggerRegistration();\n await flushPromises();\n expect(reg.webWorker).toBeDefined();\n\n reg.webWorker.onmessage({\n data: {type: WorkerMessageType.KEEPALIVE_SUCCESS, statusCode: 200},\n } as MessageEvent);\n await flushPromises();\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(reg.webWorker).toBeDefined();\n });\n\n it('cc: verify failover to backup server after 4 keep alive failure with primary server', async () => {\n // Register with contact center service\n setupRegistration({...MockServiceData, indicator: ServiceIndicator.CONTACT_CENTER});\n await beforeEachSetupForKeepalive();\n\n webex.request.mockResolvedValueOnce(successPayload);\n await reg.triggerRegistration();\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(reg.webWorker).toBeDefined();\n\n // Spy on clearKeepaliveTimer and simulate reconnectOnFailure behavior\n const clearKeepaliveSpy = jest.spyOn(reg, 'clearKeepaliveTimer');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n\n // Simulate a KEEPALIVE_FAILURE message from the worker with a retry count equal to threshold (4 for CC)\n reg.webWorker.onmessage({\n data: {\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {statusCode: 503},\n keepAliveRetryCount: 4,\n },\n } as MessageEvent);\n\n // Wait for any asynchronous actions to complete\n await flushPromises();\n\n // Verify that the keepalive timer was cleared and reconnectOnFailure was triggered\n expect(clearKeepaliveSpy).toHaveBeenCalled();\n expect(reconnectSpy).toHaveBeenCalledWith(RECONNECT_ON_FAILURE_UTIL);\n\n // Verify that the active Mobius URL has been updated to the backup server and registration is active\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n\n it('verify failure keep-alive case with active call present: Restore Success after call ends', async () => {\n await beforeEachSetupForKeepalive();\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n\n // Simulate an active call.\n reg.callManager.createCall();\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(1);\n\n const clearTimerSpy = jest.spyOn(reg, 'clearKeepaliveTimer');\n\n const threshold = reg.isCCFlow ? 4 : 5;\n\n // Simulate a KEEPALIVE_FAILURE event with a 503 error at threshold.\n const failureEvent = {\n data: {\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {statusCode: 503},\n keepAliveRetryCount: threshold,\n },\n } as MessageEvent;\n\n reg.webWorker.onmessage(failureEvent);\n await flushPromises();\n\n // At this point, clearKeepaliveTimer was called so the worker is terminated.\n expect(clearTimerSpy).toHaveBeenCalled();\n expect(reg.webWorker).toBeUndefined();\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(lineEmitter).lastCalledWith(LINE_EVENTS.UNREGISTERED);\n expect(reg.keepaliveTimer).toStrictEqual(undefined);\n expect(reg.failbackTimer).toStrictEqual(undefined);\n expect(reconnectSpy).toBeCalledOnceWith(RECONNECT_ON_FAILURE_UTIL);\n expect(restoreSpy).not.toBeCalled();\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(true);\n expect(infoSpy).toBeCalledWith(\n 'Active call(s) present, deferred reconnect till call cleanup.',\n {file: REGISTRATION_FILE, method: expect.any(String)}\n );\n\n reconnectSpy.mockClear();\n\n // Now simulate call cleanup.\n reg.callManager.callCollection = {};\n webex.request.mockResolvedValueOnce(successPayload);\n\n // Call reconnectOnFailure manually. With no active calls, this should trigger re-registration.\n await reg.reconnectOnFailure(CALLS_CLEARED_HANDLER_UTIL);\n await flushPromises();\n\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(0);\n // After re-registration, registration status becomes ACTIVE and a new worker is created.\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(reg.webWorker).toBeDefined();\n expect(reconnectSpy).toBeCalledOnceWith(CALLS_CLEARED_HANDLER_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(CALLS_CLEARED_HANDLER_UTIL);\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(false);\n });\n\n it('checks for keep-alive failure with final error: 404', async () => {\n await beforeEachSetupForKeepalive();\n webex.request.mockResolvedValueOnce(successPayload);\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const clearTimerSpy = jest.spyOn(reg, 'clearKeepaliveTimer');\n const handle404CbSpy = jest.spyOn(reg, 'handle404KeepaliveFailure');\n const registerSpy = jest.spyOn(reg, 'attemptRegistrationWithServers');\n\n reg.webWorker.onmessage({\n data: {\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {statusCode: 404},\n keepAliveRetryCount: 1,\n },\n } as MessageEvent);\n\n await flushPromises();\n\n expect(warnSpy).toBeCalledWith(\n 'Keep-alive missed 1 times. Status -> 404 ',\n expect.objectContaining({\n file: REGISTRATION_FILE,\n method: 'startKeepaliveTimer',\n })\n );\n expect(handleErrorSpy).toBeCalledOnceWith(\n {statusCode: 404},\n expect.anything(),\n {\n file: REGISTRATION_FILE,\n method: KEEPALIVE_UTIL,\n },\n expect.anything()\n );\n\n expect(lineEmitter).toHaveBeenCalledWith(LINE_EVENTS.ERROR, undefined, expect.anything());\n expect(lineEmitter).toHaveBeenCalledWith(LINE_EVENTS.UNREGISTERED);\n expect(clearTimerSpy).toBeCalledTimes(2);\n expect(reconnectSpy).not.toHaveBeenCalled();\n expect(restoreSpy).not.toHaveBeenCalled();\n expect(restartRegSpy).not.toHaveBeenCalled();\n expect(reg.reconnectPending).toStrictEqual(false);\n\n expect(handle404CbSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(registerSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n });\n\n it('checks for keep-alive failure with 429', async () => {\n await beforeEachSetupForKeepalive();\n const keepaliveSpy = jest.spyOn(reg, 'startKeepaliveTimer');\n const postMessageSpy = jest.spyOn(Worker.prototype, 'postMessage');\n const clearTimerSpy = jest.spyOn(reg, 'clearKeepaliveTimer');\n const retry429Spy = jest.spyOn(reg, 'handle429Retry');\n\n reg.webWorker.onmessage({\n data: {\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {statusCode: 429, headers: {'retry-after': 20}},\n keepAliveRetryCount: 1,\n },\n } as MessageEvent);\n await flushPromises();\n\n expect(warnSpy).toBeCalledWith(\n 'Keep-alive missed 1 times. Status -> 429 ',\n expect.objectContaining({\n file: REGISTRATION_FILE,\n method: 'startKeepaliveTimer',\n })\n );\n expect(handleErrorSpy).toBeCalledOnceWith(\n {statusCode: 429, headers: {'retry-after': 20}},\n expect.anything(),\n {\n file: REGISTRATION_FILE,\n method: KEEPALIVE_UTIL,\n },\n expect.anything()\n );\n expect(retry429Spy).toBeCalledOnceWith(20, 'startKeepaliveTimer');\n expect(clearTimerSpy).toBeCalledTimes(1);\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reg.keepaliveTimer).toBe(undefined);\n expect(reg.webWorker).toBeUndefined();\n\n jest.advanceTimersByTime(20 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(keepaliveSpy).toBeCalledOnceWith(\n reg.deviceInfo.device?.uri as string,\n reg.deviceInfo.keepaliveInterval as number,\n 'UNKNOWN'\n );\n expect(logSpy).toBeCalledWith('Resuming keepalive after 20 seconds', {\n file: REGISTRATION_FILE,\n method: 'handle429Retry',\n });\n expect(reg.webWorker).toBeDefined();\n expect(postMessageSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n type: 'START_KEEPALIVE',\n accessToken: expect.any(String),\n deviceUrl: expect.any(String),\n interval: expect.any(Number),\n retryCountThreshold: expect.any(Number),\n url: expect.any(String),\n })\n );\n });\n\n it('ensure retryAfter is set when 429 occurs during failover retry', async () => {\n await beforeEachSetupForKeepalive();\n // Simulate loss of registration so failover path attempts a new registration\n reg.clearKeepaliveTimer();\n reg.setStatus(RegistrationStatus.INACTIVE);\n const retry429Spy = jest.spyOn(reg, 'handle429Retry');\n // Make the failover interval deterministic and simulate 429 on the failover attempt\n jest.spyOn(reg as any, 'getRegRetryInterval').mockReturnValueOnce(33);\n webex.request.mockRejectedValueOnce(failurePayload429One);\n\n // Directly schedule the failover attempt\n await (reg as any).startFailoverTimer();\n\n jest.advanceTimersByTime(33 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(retry429Spy).toBeCalledWith(\n failurePayload429One.headers['retry-after'],\n 'startFailoverTimer'\n );\n expect((reg as any).retryAfter).toEqual(failurePayload429One.headers['retry-after']);\n\n jest.useRealTimers();\n });\n\n it('sets retryAfter when reconnectOnFailure caller receives 429 after keepalive threshold miss', async () => {\n await beforeEachSetupForKeepalive();\n const retry429Spy = jest.spyOn(reg, 'handle429Retry');\n // On reconnectOnFailure(RECONNECT_ON_FAILURE_UTIL) first restore attempt, make registration respond with 429 (retry-after: 20)\n webex.request.mockRejectedValueOnce({\n statusCode: 429,\n body: mockPostResponse,\n headers: {'retry-after': 20},\n });\n\n // Trigger the keepalive failure at threshold to route to reconnectOnFailure(RECONNECT_ON_FAILURE_UTIL)\n const threshold = reg.isCCFlow ? 4 : 5;\n reg.webWorker.onmessage({\n data: {\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {statusCode: 503},\n keepAliveRetryCount: threshold,\n },\n } as MessageEvent);\n\n await flushPromises();\n\n // handle429Retry is called with caller 'reconnectOnFailure' → else branch executes and sets retryAfter\n expect(retry429Spy).toBeCalledOnceWith(20, RECONNECT_ON_FAILURE_UTIL);\n expect(reg.retryAfter).toEqual(undefined); // Clear retryAfter after 429 retry\n });\n });\n\n describe('Primary server status checks', () => {\n it('success: primary server status to be up', async () => {\n const pingSuccessPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n });\n webex.request.mockResolvedValue(pingSuccessPayload);\n const status = await reg.isPrimaryActive();\n\n expect(webex.request).toBeCalledWith({\n method: 'GET',\n uri: `https://mobius-dfw.webex.com/api/v1/ping`,\n ...getMockRequestTemplate(),\n });\n expect(status).toEqual(true);\n });\n\n it('failed: primary server status to be down', async () => {\n const pingFailurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 500,\n });\n webex.request.mockResolvedValue(pingFailurePayload);\n const status = await reg.isPrimaryActive();\n\n expect(webex.request).toBeCalledWith({\n method: 'GET',\n uri: `https://mobius-dfw.webex.com/api/v1/ping`,\n ...getMockRequestTemplate(),\n });\n expect(status).toEqual(false);\n });\n });\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAKA,IAAAG,MAAA,GAAAH,OAAA;AAMA,IAAAI,KAAA,GAAAC,uBAAA,CAAAL,OAAA;AACA,IAAAM,OAAA,GAAAC,sBAAA,CAAAP,OAAA;AACA,IAAAQ,OAAA,GAAAR,OAAA;AACA,IAAAS,iBAAA,GAAAT,OAAA;AACA,IAAAU,OAAA,GAAAV,OAAA;AACA,IAAAW,OAAA,GAAAX,OAAA;AACA,IAAAY,UAAA,GAAAZ,OAAA;AAiBA,IAAAa,OAAA,GAAAb,OAAA;AACA,IAAAc,UAAA,GAAAd,OAAA;AAEA,IAAAe,OAAA,GAAAf,OAAA;AACA,IAAAgB,QAAA,GAAAhB,OAAA;AAA4C,SAAAK,wBAAAY,CAAA,EAAAC,CAAA,6BAAAC,QAAA,MAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAd,uBAAA,YAAAA,wBAAAY,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,EAAA,IAAAf,CAAA,gBAAAe,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,EAAA,OAAAR,CAAA,IAAAD,CAAA,GAAAY,sBAAA,KAAAC,gCAAA,CAAAnB,CAAA,EAAAe,EAAA,OAAAR,CAAA,CAAAM,GAAA,IAAAN,CAAA,CAAAO,GAAA,IAAAR,CAAA,CAAAE,CAAA,EAAAO,EAAA,EAAAR,CAAA,IAAAC,CAAA,CAAAO,EAAA,IAAAf,CAAA,CAAAe,EAAA,WAAAP,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAmB,QAAApB,CAAA,EAAAG,CAAA,QAAAF,CAAA,GAAAoB,aAAA,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,sBAAA,CAAAlB,CAAA,EAAAG,CAAA,EAAAgB,gCAAA,CAAAlB,CAAA,EAAAE,CAAA,iBAAAH,CAAA,IAzC5C;AA2CAmC,IAAI,CAACC,IAAI,CAAC,sCAAsC,EAAE;EAAA,OAAO;IACvDC,uBAAuB,EAAEF,IAAI,CAACG,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC;MACjDC,cAAc,EAAEL,IAAI,CAACG,EAAE,CAAC;IAC1B,CAAC;EACH,CAAC;AAAA,CAAC,CAAC;AAEH,IAAMG,KAAK,GAAG,IAAAC,2BAAiB,EAAC,CAAC;AACjC,IAAMC,eAAe,GAAG;EACtBC,SAAS,EAAEC,uBAAgB,CAACC,OAAO;EACnCC,MAAM,EAAE;AACV,CAAC;AACD,IAAMC,MAAM,GAAGb,IAAI,CAACc,KAAK,CAACC,eAAG,EAAE,KAAK,CAAC;AACrC,IAAMC,OAAO,GAAGhB,IAAI,CAACc,KAAK,CAACC,eAAG,EAAE,MAAM,CAAC;AACvC,IAAME,OAAO,GAAGjB,IAAI,CAACc,KAAK,CAACC,eAAG,EAAE,MAAM,CAAC;AACvC,IAAMG,cAAc,GAAGlB,IAAI,CAACc,KAAK,CAAC9D,KAAK,EAAE,0BAA0B,CAAC;AACpEgD,IAAI,CAACc,KAAK,CAAC9D,KAAK,EAAE,YAAY,CAAC,CAACmE,iBAAiB,CAAC,CAAC;AACnDC,QAAQ,CAAC,oBAAoB,EAAE,YAAM;EACnC,IAAMC,uBAAuB,GAAGC,OAAO,CAACC,QAAQ;EAChD,SAASC,aAAaA,CAAA,EAAG;IACvB,OAAO,IAAAC,QAAA,CAAAlD,OAAA,CAAY,UAACmD,OAAO,EAAK;MAC9BL,uBAAuB,CAACK,OAAO,CAAC;IAClC,CAAC,CAAC;EACJ;EAEA,IAAMC,WAAW,GAAG3B,IAAI,CAACG,EAAE,CAAC,CAAC;EAE7B,IAAMyB,UAAU,GAAG,IAAAC,wBAAgB,EAAC,IAAAC,oCAA0B,EAAC,CAAC,EAAEC,qBAAG,CAAC;EAEtE,IAAMC,YAAY,GAAAxC,aAAA,CAAAA,aAAA,KACb,IAAAyC,gCAAsB,EAAC,CAAC;IAC3BC,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC,WAAQ;IACrCC,IAAI,EAAE;MACJC,MAAM,EAAEhC,KAAK,CAACiC,QAAQ,CAACC,MAAM,CAACF,MAAM;MACpCG,eAAe,EAAEnC,KAAK,CAACiC,QAAQ,CAACC,MAAM,CAACE,GAAG;MAC1CC,WAAW,EAAE;QACX/B,MAAM,EAAE,EAAE;QACVH,SAAS,EAAE;MACb;IACF;EAAC,EACF;EAED,IAAMmC,cAAc,GAAApD,aAAA,CAAAA,aAAA,KACfwC,YAAY;IACfK,IAAI,EAAA7C,aAAA,CAAAA,aAAA,KACCwC,YAAY,CAACK,IAAI;MACpBM,WAAW,EAAE;QACX/B,MAAM,EAAE,EAAE;QACVH,SAAS,EAAE;MACb;IAAC;EACF,EACF;EAED,IAAMoC,cAAc,GAAkC;IACpDC,UAAU,EAAE,GAAG;IACfT,IAAI,EAAEU,kCAAgB;IACtBC,OAAO,EAAE;MACPC,UAAU,EAAE;IACd;EACF,CAAE;EAEF,IAAMC,oBAAoB,GAAkC;IAC1DJ,UAAU,EAAE,GAAG;IACfT,IAAI,EAAEU,kCAAgB;IACtBC,OAAO,EAAE;MACP,aAAa,EAAE;IACjB;EACF,CAAE;EAEF,IAAMG,oBAAoB,GAAkC;IAC1DL,UAAU,EAAE,GAAG;IACfT,IAAI,EAAEU,kCAAgB;IACtBC,OAAO,EAAE;MACP,aAAa,EAAE;IACjB;EACF,CAAE;EAEF,IAAMI,sBAAsB,GAAkC;IAC5DN,UAAU,EAAE,GAAG;IACfT,IAAI,EAAEU,kCAAgB;IACtBC,OAAO,EAAE;MACP,aAAa,EAAE;IACjB;EACF,CAAE;EAEF,IAAMK,qBAAqB,GAAkC;IAC3DP,UAAU,EAAE,GAAG;IACfT,IAAI,EAAEU,kCAAgB;IACtBC,OAAO,EAAE;MACP,aAAa,EAAE;IACjB;EACF,CAAE;EAEF,IAAMM,cAAc,GAAkC;IACpDR,UAAU,EAAE,GAAG;IACfT,IAAI,EAAEU,kCAAgB;IACtBC,OAAO,EAAE;MACPC,UAAU,EAAE;IACd;EACF,CAAE;EAEF,IAAIM,GAAkB;EACtB,IAAIC,UAAU;EACd,IAAIC,UAAU;EACd,IAAIC,mBAAmB;EACvB,IAAIC,aAAa;EACjB,IAAIC,WAAW;EACf,IAAIC,WAAW;EACf,IAAIC,SAAS;EAEb,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIC,eAAe,EAAK;IAC7C,IAAMC,KAAK,GAAG,IAAIC,iBAAK,CAAC,CAAC;IACzBX,GAAG,GAAG,IAAAY,4BAAkB,EAAC7D,KAAK,EAAE0D,eAAe,EAAEC,KAAK,EAAEtC,WAAW,EAAEyC,cAAM,CAACC,IAAI,CAAC;IACjFd,GAAG,CAACe,gBAAgB,CAAC1C,UAAU,CAACQ,OAAO,EAAER,UAAU,CAAC2C,MAAM,CAAC;IAC3DvE,IAAI,CAACwE,aAAa,CAAC,CAAC;IACpBhB,UAAU,GAAGxD,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,qBAAqB,CAAC;IACnDE,UAAU,GAAGzD,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,6BAA6B,CAAC;IAC3DG,mBAAmB,GAAG1D,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,kBAAkB,CAAC;IACzDI,aAAa,GAAG3D,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,YAAY,CAAC;IAC7CK,WAAW,GAAG5D,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,oBAAoB,CAAC;IACnDM,WAAW,GAAG7D,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,gBAAgB,CAAC;IAC/CO,SAAS,GAAG9D,IAAI,CAACc,KAAK,CAACyC,GAAG,CAACkB,aAAa,EAAE,0BAA0B,CAAC;EACvE,CAAC;EAEDC,UAAU,CAAC,YAAM;IACfC,mBAAU,CAACC,aAAa,CAAC,CAAC;IAC1BD,mBAAU,CAACE,WAAW,CAAC;MAACvE,KAAK,EAALA,KAAK;MAAEwE,qBAAqB,EAAE;IAAK,CAAC,CAAC;IAC7Df,iBAAiB,CAACvD,eAAe,CAAC;EACpC,CAAC,CAAC;EAEFuE,SAAS,CAAC,YAAM;IACdzE,KAAK,CAAC0E,OAAO,GAAGhF,IAAI,CAACG,EAAE,CAAC,CAAC;IACzBH,IAAI,CAACiF,cAAc,CAAC,CAAC;IACrBjF,IAAI,CAACwE,aAAa,CAAC,CAAC;IACpBxE,IAAI,CAACkF,aAAa,CAAC,CAAC;IACpBC,YAAY,CAACC,KAAK,CAAC,CAAC;EACtB,CAAC,CAAC;EAEFC,EAAE,CAAC,gCAAgC,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAC,QAAA;IAAA,OAAAF,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UACnCvF,KAAK,CAAC0E,OAAO,CAACc,mBAAmB,CAAC;YAChCzD,IAAI,EAAEU,kCAAgB;YACtBC,OAAO,EAAE;cACPC,UAAU,EAAE;YACd;UACF,CAAC,CAAC;UAAC0C,QAAA,CAAAE,IAAA;UAAA,OAEGtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;QAAA;UAE/BC,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACiB,kBAAkB,CAAAzG,aAAA,CAAAA,aAAA,KACnCwC,YAAY;YACfkE,MAAM,EAAE;UAAM,EACf,CAAC;UAEFF,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;UAC1DN,MAAM,CAACrE,WAAW,CAAC,CAAC4E,eAAe,CAAC,CAAC,CAAC;UACtCP,MAAM,CAACrE,WAAW,CAAC,CAAC6E,cAAc,CAACC,mBAAW,CAACC,UAAU,CAAC;UAC1DV,MAAM,CAACrE,WAAW,CAAC,CAAC6E,cAAc,CAACC,mBAAW,CAACE,UAAU,EAAE5D,kCAAgB,CAAC;;UAE5E;UACAiD,MAAM,CAACnF,MAAM,CAAC,CAAC2F,cAAc,0CAAArE,MAAA,CACcY,kCAAgB,CAACP,MAAM,CAACoE,QAAQ,eAAAzE,MAAA,CAAYY,kCAAgB,CAACT,MAAM,gFAC5G0D,MAAM,CAACa,gBAAgB,CAAC;YACtBC,IAAI,EAAEC,4BAAiB;YACvBb,MAAM,EAAE;UACV,CAAC,CACH,CAAC;UACDF,MAAM,CAAClC,SAAS,CAAC,CAAC0C,cAAc,CAC9BQ,oBAAY,CAACC,YAAY,EACzBC,kBAAU,CAACC,QAAQ,EACnBC,mBAAW,CAACC,UAAU,EACtBC,4BAAiB,EACjB,SAAS,EACT,sDAAsD,EACtDC,SAAS,EACTA,SACF,CAAC;QAAC;QAAA;UAAA,OAAA5B,QAAA,CAAA6B,IAAA;MAAA;IAAA,GAAA/B,OAAA;EAAA,CACH,GAAC;EAEFJ,EAAE,CAAC,6BAA6B,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAiC,SAAA;IAAA,IAAAC,KAAA;IAAA,OAAAnC,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAiC,SAAA;MAAA,kBAAAA,SAAA,CAAA/B,IAAA,GAAA+B,SAAA,CAAA9B,IAAA;QAAA;UAChCvF,KAAK,CAAC0E,OAAO,CAAC4C,iBAAiB,CAAC;YAC9BvF,IAAI,EAAEU,kCAAgB;YACtBD,UAAU,EAAE,GAAG;YACfE,OAAO,EAAE,CAAC;UACZ,CAAC,CAAC;UAAC2E,SAAA,CAAA9B,IAAA;UAAA,OAEGtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;QAAA;UAE/BC,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACiB,kBAAkB,CAAAzG,aAAA,CAAAA,aAAA,KACnCwC,YAAY;YACfkE,MAAM,EAAE;UAAM,EACf,CAAC;UAEIwB,KAAK,GAAG,IAAAG,0BAAe,EAC3B,4EAA4E,EAC5E,CAAC,CAAC,EACFC,kBAAU,CAACC,WAAW,EACtB1B,yBAAkB,CAAC2B,QACrB,CAAC;UAEDhC,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAAC2B,QAAQ,CAAC;UAC5DhC,MAAM,CAACrE,WAAW,CAAC,CAAC4E,eAAe,CAAC,CAAC,CAAC;UACtCP,MAAM,CAACrE,WAAW,CAAC,CAACsG,aAAa,CAAC,CAAC,EAAExB,mBAAW,CAACC,UAAU,CAAC;UAC5DV,MAAM,CAACrE,WAAW,CAAC,CAACsG,aAAa,CAAC,CAAC,EAAExB,mBAAW,CAACyB,KAAK,EAAEX,SAAS,EAAEG,KAAK,CAAC;UACzE1B,MAAM,CAAClC,SAAS,CAAC,CAAC0C,cAAc,CAC9BQ,oBAAY,CAACmB,kBAAkB,EAC/BjB,kBAAU,CAACC,QAAQ,EACnBC,mBAAW,CAACC,UAAU,EACtBC,4BAAiB,EACjB,SAAS,EACT,EAAE,EACFC,SAAS,EACTG,KACF,CAAC;QAAC;QAAA;UAAA,OAAAC,SAAA,CAAAH,IAAA;MAAA;IAAA,GAAAC,QAAA;EAAA,CACH,GAAC;EAEFpC,EAAE,CAAC,qCAAqC,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAA4C,SAAA;IAAA,OAAA7C,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA2C,SAAA;MAAA,kBAAAA,SAAA,CAAAzC,IAAA,GAAAyC,SAAA,CAAAxC,IAAA;QAAA;UACxCvF,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAAC;YACrBjG,IAAI,EAAE;cACJC,MAAM,EAAES,kCAAgB,CAACT,MAAM;cAC/BiG,SAAS,EAAE,GAAG;cACdC,OAAO,EAAE,CAACzF,kCAAgB,CAACP,MAAM;YACnC,CAAC;YACDM,UAAU,EAAE;UACd,CAAC,CAAC,CACD2F,qBAAqB,CAAC;YACrB3F,UAAU,EAAE,GAAG;YACfT,IAAI,EAAEqG;UACR,CAAC,CAAC,CACDD,qBAAqB,CAAC;YACrB3F,UAAU,EAAE,GAAG;YACfT,IAAI,EAAEU,kCAAgB;YACtBC,OAAO,EAAE;cACPC,UAAU,EAAE;YACd;UACF,CAAC,CAAC;UAEJ+C,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACsC,IAAI,CAAC;UAACN,SAAA,CAAAxC,IAAA;UAAA,OACnDtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;QAAA;UAC/BC,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACuB,eAAe,CAAC,CAAC,CAAC;UACxCP,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACwB,cAAc,CAAAhH,aAAA,CAAAA,aAAA,KAC/BwC,YAAY;YACfkE,MAAM,EAAE;UAAM,EACf,CAAC;UACFF,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACwB,cAAc,CAClCR,MAAM,CAACa,gBAAgB,CAAC;YACtB3E,GAAG,EAAEa,kCAAgB,CAACP,MAAM,CAACN,GAAG;YAChCgE,MAAM,EAAE;UACV,CAAC,CACH,CAAC;UAEDF,MAAM,CAAC/E,OAAO,CAAC,CAACuF,cAAc,CAAC,4BAA4B,EAAER,MAAM,CAAC4C,QAAQ,CAAC,CAAC,CAAC;UAC/E5C,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,CAAC,uCAAuC,EAAER,MAAM,CAAC4C,QAAQ,CAAC,CAAC,CAAC;UAC1F5C,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,CAAC,qCAAqC,EAAER,MAAM,CAAC4C,QAAQ,CAAC,CAAC,CAAC;UAExF5C,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;UAC1DN,MAAM,CAACrE,WAAW,CAAC,CAAC4E,eAAe,CAAC,CAAC,CAAC;UACtCP,MAAM,CAACrE,WAAW,CAAC,CAACsG,aAAa,CAAC,CAAC,EAAExB,mBAAW,CAACC,UAAU,CAAC;UAC5DV,MAAM,CAACrE,WAAW,CAAC,CAACsG,aAAa,CAAC,CAAC,EAAExB,mBAAW,CAACoC,YAAY,CAAC;UAC9D7C,MAAM,CAACrE,WAAW,CAAC,CAACsG,aAAa,CAAC,CAAC,EAAExB,mBAAW,CAACC,UAAU,CAAC;UAC5DV,MAAM,CAACrE,WAAW,CAAC,CAACsG,aAAa,CAAC,CAAC,EAAExB,mBAAW,CAACE,UAAU,EAAE5D,kCAAgB,CAAC;UAC9EiD,MAAM,CAAClC,SAAS,CAAC,CAAC0C,cAAc,CAC9BQ,oBAAY,CAACC,YAAY,EACzBC,kBAAU,CAACC,QAAQ,EACnBC,mBAAW,CAACC,UAAU,EACtBC,4BAAiB,EACjB,SAAS,EACT,sDAAsD,EACtDC,SAAS,EACTA,SACF,CAAC;QAAC;QAAA;UAAA,OAAAc,SAAA,CAAAb,IAAA;MAAA;IAAA,GAAAY,QAAA;EAAA,CACH,GAAC;EAEFhH,QAAQ,CAAC,oBAAoB,EAAE,YAAM;IACnC,IAAM0H,aAAa,GAAG;MACpBhC,IAAI,EAAEC,4BAAiB;MACvBb,MAAM,EAAE6C;IACV,CAAC;IACD,IAAMlI,MAAM,GAAGb,IAAI,CAACc,KAAK,CAACC,eAAG,EAAE,KAAK,CAAC;IAErC2D,UAAU,CAAC,YAAM;MACf9C,UAAU,CAAC2C,MAAM,CAACyE,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC;IAEFjE,SAAS,CAAC,YAAM;MACdnD,UAAU,CAAC2C,MAAM,CAACjF,IAAI,CAACyC,qBAAG,CAAC;MAC3B/B,IAAI,CAACwE,aAAa,CAAC,CAAC;IACtB,CAAC,CAAC;IAEFa,EAAE,CAAC,wFAAwF,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAyD,SAAA;MAAA,OAAA1D,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAwD,SAAA;QAAA,kBAAAA,SAAA,CAAAtD,IAAA,GAAAsD,SAAA,CAAArD,IAAA;UAAA;YAC3F7F,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpBtI,MAAM,CAACuI,SAAS,CAAC,CAAC;YAClB9I,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACpF,oBAAoB,CAAC,CAC3CoF,qBAAqB,CAACnF,oBAAoB,CAAC,CAC3CmF,qBAAqB,CAACzF,cAAc,CAAC;YAACqG,SAAA,CAAArD,IAAA;YAAA,OAEnCtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAE/B;AACN;AACA;;YAEMC,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAAC2B,QAAQ,CAAC;YAC5DhC,MAAM,CAACnC,WAAW,CAAC,CAACoC,kBAAkB,CACpC/C,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,EAC3C,qBACF,CAAC;YACDgD,MAAM,CAACzC,GAAG,CAAC+F,UAAU,CAAC,CAAClD,OAAO,CAAClD,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,CAAC;YAC3EgD,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC;YAExCD,MAAM,CAACnF,MAAM,CAAC,CAAC2F,cAAc,oCAAArE,MAAA,CACQe,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,uCAC9E8F,aACF,CAAC;YAEDjF,WAAW,CAACuF,SAAS,CAAC,CAAC;YACvBxF,WAAW,CAACwF,SAAS,CAAC,CAAC;YACvBpJ,IAAI,CAACuJ,mBAAmB,CACtBC,MAAM,CAACtG,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,CAAC,GAAGyG,8BACxD,CAAC;YAACP,SAAA,CAAArD,IAAA;YAAA,OACIrE,aAAa,CAAC,CAAC;UAAA;YAErB;AACN;AACA;;YAEMwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACnC,WAAW,CAAC,CAACoC,kBAAkB,CACpC9C,oBAAoB,CAACH,OAAO,CAAC,aAAa,CAAC,EAC3C,oBACF,CAAC;YACDgD,MAAM,CAACzC,GAAG,CAAC+F,UAAU,CAAC,CAAClD,OAAO,CAACjD,oBAAoB,CAACH,OAAO,CAAC,aAAa,CAAC,CAAC;YAC3EgD,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC,EAAE/C,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,CAAC;YAEtFa,WAAW,CAACuF,SAAS,CAAC,CAAC;YACvBxF,WAAW,CAACwF,SAAS,CAAC,CAAC;YACvBpJ,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAACP,SAAA,CAAArD,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErB;AACN;AACA;YACMwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACnC,WAAW,CAAC,CAAC6F,GAAG,CAACC,UAAU,CAAC,CAAC;YACpC3D,MAAM,CAACzC,GAAG,CAAC+F,UAAU,CAAC,CAAClD,OAAO,CAACmB,SAAS,CAAC;YACzCvB,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC;UAAC;UAAA;YAAA,OAAAiD,SAAA,CAAA1B,IAAA;QAAA;MAAA,GAAAyB,QAAA;IAAA,CAC/C,GAAC;IAEF5D,EAAE,CAAC,4JAA4J,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAoE,SAAA;MAAA,OAAArE,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAmE,SAAA;QAAA,kBAAAA,SAAA,CAAAjE,IAAA,GAAAiE,SAAA,CAAAhE,IAAA;UAAA;YAC/JtC,GAAG,CAACuG,QAAQ,GAAG,IAAI;YACnB9J,IAAI,CACDc,KAAK,CAACyC,GAAG,EAAS,qBAAqB,CAAC,CACxCuC,mBAAmB,CAAC,EAAE,CAAC,CACvBA,mBAAmB,CAAC,EAAE,CAAC,CACvBA,mBAAmB,CAAC,EAAE,CAAC,CACvBA,mBAAmB,CAAC,EAAE,CAAC;YAC1B9F,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpB7I,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACzF,cAAc,CAAC,CACrCyF,qBAAqB,CAACzF,cAAc,CAAC,CACrCyF,qBAAqB,CAACpF,oBAAoB,CAAC,CAC3CuF,qBAAqB,CAACnF,cAAc,CAAC;YAACuG,SAAA,CAAAhE,IAAA;YAAA,OAEnCtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAE/BC,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAAC2B,QAAQ,CAAC;YAC5DhC,MAAM,CAACnC,WAAW,CAAC,CAAC6F,GAAG,CAACC,UAAU,CAAC,CAAC;YACpC3D,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC;YAExCD,MAAM,CAACnF,MAAM,CAAC,CAAC2F,cAAc,uEAE3BsC,aACF,CAAC;YAEDlF,WAAW,CAACwF,SAAS,CAAC,CAAC;YACvBpJ,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAACI,SAAA,CAAAhE,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACnC,WAAW,CAAC,CAAC6F,GAAG,CAACC,UAAU,CAAC,CAAC;YACpC3D,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC;YAE7CD,MAAM,CAACnF,MAAM,CAAC,CAAC2F,cAAc,uEAE3BsC,aACF,CAAC;YAEDjI,MAAM,CAACuI,SAAS,CAAC,CAAC;YAClBxF,WAAW,CAACwF,SAAS,CAAC,CAAC;YACvBpJ,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAACI,SAAA,CAAAhE,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACnC,WAAW,CAAC,CAACoC,kBAAkB,CACpC/C,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,EAC3C,oBACF,CAAC;YACDgD,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC;YAE7CD,MAAM,CAACnF,MAAM,CAAC,CAAC6I,GAAG,CAAClD,cAAc,oCAAArE,MAAA,CACIe,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,uCAC9E8F,aACF,CAAC;YAED9C,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,oCAAoCsC,aAAa,CAAC;YAEhF9C,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC;YAAQ,EACrC,CAAC;YACFyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;UAAC;UAAA;YAAA,OAAAuD,SAAA,CAAArC,IAAA;QAAA;MAAA,GAAAoC,QAAA;IAAA,CAC5D,GAAC;IAEFvE,EAAE,CAAC,wDAAwD,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAuE,SAAA;MAAA,OAAAxE,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAsE,SAAA;QAAA,kBAAAA,SAAA,CAAApE,IAAA,GAAAoE,SAAA,CAAAnE,IAAA;UAAA;YAC3DtC,GAAG,CAACuG,QAAQ,GAAG,IAAI;YACnB9J,IAAI,CACDc,KAAK,CAACyC,GAAG,EAAS,qBAAqB,CAAC,CACxCuC,mBAAmB,CAAC,EAAE,CAAC,CACvBA,mBAAmB,CAAC,EAAE,CAAC,CACvBA,mBAAmB,CAAC,EAAE,CAAC,CACvBA,mBAAmB,CAAC,EAAE,CAAC;YAC1B9F,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpB7I,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACzF,cAAc,CAAC,CACrCyF,qBAAqB,CAACzF,cAAc,CAAC,CACrCyF,qBAAqB,CAACzF,cAAc,CAAC,CACrCyF,qBAAqB,CAACpF,oBAAoB,CAAC,CAC3CuF,qBAAqB,CAACnF,cAAc,CAAC;YAAC0G,SAAA,CAAAnE,IAAA;YAAA,OAEnCtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAE/B;AACN;AACA;AACA;YACMC,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAAC2B,QAAQ,CAAC;YAC5DhC,MAAM,CAACnC,WAAW,CAAC,CAAC6F,GAAG,CAACC,UAAU,CAAC,CAAC;YACpC3D,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC;YAExCD,MAAM,CAACnF,MAAM,CAAC,CAAC2F,cAAc,uEAE3BsC,aACF,CAAC;YAEDlF,WAAW,CAACwF,SAAS,CAAC,CAAC;YACvBpJ,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAACO,SAAA,CAAAnE,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACnC,WAAW,CAAC,CAAC6F,GAAG,CAACC,UAAU,CAAC,CAAC;YACpC3D,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC;YAE7CD,MAAM,CAACnF,MAAM,CAAC,CAAC2F,cAAc,uEAE3BsC,aACF,CAAC;YAEDjI,MAAM,CAACuI,SAAS,CAAC,CAAC;YAClBxF,WAAW,CAACwF,SAAS,CAAC,CAAC;YACvBpJ,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAACO,SAAA,CAAAnE,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACnC,WAAW,CAAC,CAAC6F,GAAG,CAACC,UAAU,CAAC,CAAC;YACpC3D,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC;YAE7CD,MAAM,CAACnF,MAAM,CAAC,CAAC2F,cAAc,uEAE3BsC,aACF,CAAC;YAEDlF,WAAW,CAACwF,SAAS,CAAC,CAAC;YACvBpJ,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAACO,SAAA,CAAAnE,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACnC,WAAW,CAAC,CAACoC,kBAAkB,CACpC/C,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,EAC3C,oBACF,CAAC;YACDgD,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC;YAE9CD,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,oCAAoCsC,aAAa,CAAC;YAEhF9C,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC;YAAQ,EACrC,CAAC;YACFyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;UAAC;UAAA;YAAA,OAAA0D,SAAA,CAAAxC,IAAA;QAAA;MAAA,GAAAuC,QAAA;IAAA,CAC5D,GAAC;IAEF1E,EAAE,CAAC,qEAAqE,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAyE,SAAA;MAAA,OAAA1E,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAwE,SAAA;QAAA,kBAAAA,SAAA,CAAAtE,IAAA,GAAAsE,SAAA,CAAArE,IAAA;UAAA;YACxEtC,GAAG,CAACuG,QAAQ,GAAG,IAAI;YACnB9J,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpB7I,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACzF,cAAc,CAAC,CACrCyF,qBAAqB,CAACzF,cAAc,CAAC,CACrCyF,qBAAqB,CAACpF,oBAAoB,CAAC,CAC3CuF,qBAAqB,CAACnF,cAAc,CAAC;YAAC4G,SAAA,CAAArE,IAAA;YAAA,OAEnCtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAE/B/F,IAAI,CAACuJ,mBAAmB,CAACY,0CAA+B,GAAGV,8BAAmB,CAAC;YAACS,SAAA,CAAArE,IAAA;YAAA,OAC1ErE,aAAa,CAAC,CAAC;UAAA;YACrBwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACuB,eAAe,CAAC,CAAC,CAAC;YACxCP,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;;YAEF;AACN;AACA;YACM4D,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC;YAAQ,EACrC,CAAC;YAEFyB,MAAM,CAACnC,WAAW,CAAC,CAACoC,kBAAkB,CACpC/C,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,EAC3C,oBACF,CAAC;YACDgD,MAAM,CAACnF,MAAM,CAAC,CAAC2F,cAAc,2CAAArE,MAAA,CACee,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,gBACrF8F,aACF,CAAC;YAEDxI,KAAK,CAAC0E,OAAO,CAACoE,SAAS,CAAC,CAAC;YACzBpJ,IAAI,CAACuJ,mBAAmB,CACtBC,MAAM,CAACtG,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,CAAC,GAAGyG,8BACxD,CAAC;YAACS,SAAA,CAAArE,IAAA;YAAA,OACIrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACiB,kBAAkB,CAAAzG,aAAA,CAAAA,aAAA,KACnCwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC;YAAQ,EACrC,CAAC;YAEFyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;UAAC;UAAA;YAAA,OAAA4D,SAAA,CAAA1C,IAAA;QAAA;MAAA,GAAAyC,QAAA;IAAA,CAC5D,GAAC;IAEF5E,EAAE,CAAC,gFAAgF,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAA4E,SAAA;MAAA,OAAA7E,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA2E,SAAA;QAAA,kBAAAA,SAAA,CAAAzE,IAAA,GAAAyE,SAAA,CAAAxE,IAAA;UAAA;YACnFtC,GAAG,CAACuG,QAAQ,GAAG,IAAI;YACnB9J,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpBnJ,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAS,qBAAqB,CAAC,CAACuC,mBAAmB,CAAC,EAAE,CAAC;YACrExF,KAAK,CAAC0E,OAAO,CAACsD,qBAAqB,CAAClF,sBAAsB,CAAC;YAACiH,SAAA,CAAAxE,IAAA;YAAA,OAEtDtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAC/BC,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAAC2B,QAAQ,CAAC;YAC5DhC,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC;YACxCD,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,oCAAoCsC,aAAa,CAAC;YAEhF9C,MAAM,CAACnF,MAAM,CAAC,CAAC6I,GAAG,CAAClD,cAAc,uEAE/BsC,aACF,CAAC;YAED9C,MAAM,CAACnF,MAAM,CAAC,CAAC6I,GAAG,CAAClD,cAAc,oCAAArE,MAAA,CACIiB,sBAAsB,CAACJ,OAAO,CAAC,aAAa,CAAC,uCAChF8F,aACF,CAAC;YAED9C,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC;YAAQ,EACrC,CAAC;UAAC;UAAA;YAAA,OAAA8F,SAAA,CAAA7C,IAAA;QAAA;MAAA,GAAA4C,QAAA;IAAA,CACJ,GAAC;IAEF/E,EAAE,CAAC,0EAA0E,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAA8E,SAAA;MAAA,OAAA/E,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA6E,SAAA;QAAA,kBAAAA,SAAA,CAAA3E,IAAA,GAAA2E,SAAA,CAAA1E,IAAA;UAAA;YAC7EtC,GAAG,CAACuG,QAAQ,GAAG,IAAI;YACnB9J,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpBnJ,IAAI,CACDc,KAAK,CAACyC,GAAG,EAAS,qBAAqB,CAAC,CACxCuC,mBAAmB,CAAC,EAAE,CAAC,CACvBA,mBAAmB,CAAC,EAAE,CAAC;YAC1BxF,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACpF,oBAAoB,CAAC,CAC3CoF,qBAAqB,CAACjF,qBAAqB,CAAC,CAC5CoF,qBAAqB,CAACnF,cAAc,CAAC;YAACiH,SAAA,CAAA1E,IAAA;YAAA,OAEnCtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAC/BC,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YAEF4D,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAAC2B,QAAQ,CAAC;YAC5DhC,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC;YAExCD,MAAM,CAACnF,MAAM,CAAC,CAAC2F,cAAc,oCAAArE,MAAA,CACQe,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,uCAC9E8F,aACF,CAAC;YAEDlF,WAAW,CAACwF,SAAS,CAAC,CAAC;YACvBpJ,IAAI,CAACuJ,mBAAmB,CACtBC,MAAM,CAACtG,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,CAAC,GAAGyG,8BACxD,CAAC;YAACc,SAAA,CAAA1E,IAAA;YAAA,OACIrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YACF4D,MAAM,CAACpC,WAAW,CAAC,CAACqC,kBAAkB,CAAC,CAAC,EAAE/C,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,CAAC;YAEtFgD,MAAM,CAACnF,MAAM,CAAC,CAAC6I,GAAG,CAAClD,cAAc,uEAE/BsC,aACF,CAAC;YAED9C,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,oCAAoCsC,aAAa,CAAC;YAEhF9C,MAAM,CAACnF,MAAM,CAAC,CAAC6I,GAAG,CAAClD,cAAc,oCAAArE,MAAA,CACIkB,qBAAqB,CAACL,OAAO,CAAC,aAAa,CAAC,uCAC/E8F,aACF,CAAC;YAED9C,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,oCAAoCsC,aAAa,CAAC;YAEhF9C,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACqE,uBAAuB,CAAC,CAAC,EAAA7J,aAAA,CAAAA,aAAA,KAC1CwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC;YAAQ,EACrC,CAAC;YACFyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;UAAC;UAAA;YAAA,OAAAiE,SAAA,CAAA/C,IAAA;QAAA;MAAA,GAAA8C,QAAA;IAAA,CAC5D,GAAC;EACJ,CAAC,CAAC;EAEFlJ,QAAQ,CAAC,gDAAgD,EAAE,YAAM;IAC/DsD,UAAU,CAAC,YAAM;MACf1E,IAAI,CAACmJ,aAAa,CAAC,CAAC;IACtB,CAAC,CAAC;IAEFpE,SAAS,CAAC,YAAM;MACd/E,IAAI,CAACiF,cAAc,CAAC,CAAC;MACrBjF,IAAI,CAACwE,aAAa,CAAC,CAAC;MACpBxE,IAAI,CAACkF,aAAa,CAAC,CAAC;IACtB,CAAC,CAAC;IAEFG,EAAE,CAAC,+EAA+E,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAgF,SAAA;MAAA,IAAAC,sBAAA;MAAA,OAAAlF,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAgF,SAAA;QAAA,kBAAAA,SAAA,CAAA9E,IAAA,GAAA8E,SAAA,CAAA7E,IAAA;UAAA;YAClFrC,UAAU,GAAGxD,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,qBAAqB,CAAC;YACnDA,GAAG,CAACoH,kBAAkB,CAAC/I,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC,CAAC;YACvCqI,sBAAsB,GAAkC;cAC5D3H,UAAU,EAAE,GAAG;cACfT,IAAI,EAAEuI,oCAAyB;cAC/B5H,OAAO,EAAE;gBACP,aAAa,EAAE;cACjB;YACF,CAAC;YACD1C,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACmC,sBAAsB,CAAC,CAC7ChC,qBAAqB,CAACnF,cAAc,CAAC;YAACoH,SAAA,CAAA7E,IAAA;YAAA,OAEnCtC,GAAG,CAACsH,kBAAkB,CAACD,oCAAyB,CAAC;UAAA;YAAE;YACzD;YACA5E,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAAC2E,oCAAyB,CAAC;YAChE5E,MAAM,CAACxC,UAAU,CAAC,CAACkG,GAAG,CAACC,UAAU,CAAC,CAAC;YACnC3D,MAAM,CAACzC,GAAG,CAAC+F,UAAU,CAAC,CAAClD,OAAO,CAACmB,SAAS,CAAC,CAAC,CAAC;;YAE3CvH,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAACiB,SAAA,CAAA7E,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACxC,UAAU,CAAC,CAACsH,qBAAqB,CAAC,CAAC,CAAC;YAC3C9E,MAAM,CAACxC,UAAU,CAAC,CAACuH,oBAAoB,CAACH,oCAAyB,CAAC;UAAC;UAAA;YAAA,OAAAF,SAAA,CAAAlD,IAAA;QAAA;MAAA,GAAAgD,QAAA;IAAA,CACpE,GAAC;IAEFnF,EAAE,CAAC,+FAA+F,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAwF,SAAA;MAAA,IAAAC,iCAAA,EAAAR,sBAAA;MAAA,OAAAlF,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAwF,SAAA;QAAA,kBAAAA,SAAA,CAAAtF,IAAA,GAAAsF,SAAA,CAAArF,IAAA;UAAA;YAClG;YACMoF,iCAAiC,GAAGjL,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,gCAAgC,CAAC;YAC3FA,GAAG,CAACoH,kBAAkB,CAAC/I,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC,CAAC;YACvCqI,sBAAsB,GAAkC;cAC5D3H,UAAU,EAAE,GAAG;cACfT,IAAI,EAAEuI,oCAAyB;cAC/B5H,OAAO,EAAE;gBACP,aAAa,EAAE;cACjB;YACF,CAAC;YACD1C,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACmC,sBAAsB,CAAC,CAC7ChC,qBAAqB,CAACnF,cAAc,CAAC;YAAC4H,SAAA,CAAArF,IAAA;YAAA,OAEnCtC,GAAG,CAACsH,kBAAkB,CAACD,oCAAyB,CAAC;UAAA;YAAE;YACzD;YACA5E,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAAC2E,oCAAyB,CAAC;YAChE5E,MAAM,CAACnC,WAAW,CAAC,CAACoC,kBAAkB,CAAC,GAAG,EAAE2E,oCAAyB,CAAC;YACtE5K,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAACyB,SAAA,CAAArF,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACiF,iCAAiC,CAAC,CAACH,qBAAqB,CAAC,CAAC,CAAC;YAClE9E,MAAM,CAACiF,iCAAiC,CAAC,CAAC5B,uBAAuB,CAC/D,CAAC,EACDuB,oCAAyB,EACzB,CAAChJ,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC,CACxB,CAAC;YACD;YACA4D,MAAM,CAACiF,iCAAiC,CAAC,CAAC5B,uBAAuB,CAC/D,CAAC,EACDuB,oCAAyB,EACzBhJ,UAAU,CAAC2C,MACb,CAAC;YACDyB,MAAM,CAACxC,UAAU,CAAC,CAACkG,GAAG,CAACoB,qBAAqB,CAAC,CAAC,CAAC;YAC/C9E,MAAM,CAACxC,UAAU,CAAC,CAACkG,GAAG,CAACqB,oBAAoB,CAACH,oCAAyB,CAAC;YACtE5E,MAAM,CAACzC,GAAG,CAAC+F,UAAU,CAAC,CAAClD,OAAO,CAACmB,SAAS,CAAC,CAAC,CAAC;UAAA;UAAA;YAAA,OAAA2D,SAAA,CAAA1D,IAAA;QAAA;MAAA,GAAAwD,QAAA;IAAA,CAC5C,GAAC;IACF3F,EAAE,CAAC,wEAAwE,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAA2F,UAAA;MAAA,IAAAF,iCAAA,EAAAR,sBAAA;MAAA,OAAAlF,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA0F,UAAA;QAAA,kBAAAA,UAAA,CAAAxF,IAAA,GAAAwF,UAAA,CAAAvF,IAAA;UAAA;YAC3E;YACArC,UAAU,GAAGxD,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,qBAAqB,CAAC;YAC7C0H,iCAAiC,GAAGjL,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,gCAAgC,CAAC;YAC3FA,GAAG,CAACoH,kBAAkB,CAAC/I,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC,CAAC;YACtCkG,sBAAsB,GAAkC;cAC5D3H,UAAU,EAAE,GAAG;cACfT,IAAI,EAAEuI,oCAAyB;cAC/B5H,OAAO,EAAE;gBACP,aAAa,EAAE;cACjB;YACF,CAAC;YACD1C,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACmC,sBAAsB,CAAC,CAC7ChC,qBAAqB,CAACnF,cAAc,CAAC,CACrCgF,qBAAqB,CAACmC,sBAAsB,CAAC,CAC7ChC,qBAAqB,CAACnF,cAAc,CAAC;YAAC8H,UAAA,CAAAvF,IAAA;YAAA,OAEnCtC,GAAG,CAACsH,kBAAkB,CAACD,oCAAyB,CAAC;UAAA;YAAE;YACzD;YACA5E,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAAC2E,oCAAyB,CAAC;YAChE5E,MAAM,CAACnC,WAAW,CAAC,CAACoC,kBAAkB,CAAC,GAAG,EAAE2E,oCAAyB,CAAC;YACtE;YACA5E,MAAM,CAACpC,WAAW,CAAC,CAAC8F,GAAG,CAACC,UAAU,CAAC,CAAC;YACpC3J,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAAC2B,UAAA,CAAAvF,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACiF,iCAAiC,CAAC,CAACH,qBAAqB,CAAC,CAAC,CAAC;YAClE9E,MAAM,CAACiF,iCAAiC,CAAC,CAAC5B,uBAAuB,CAC/D,CAAC,EACDuB,oCAAyB,EACzB,CAAChJ,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC,CACvB,CAAC;YACD;YACAyB,MAAM,CAACxC,UAAU,CAAC,CAACsH,qBAAqB,CAAC,CAAC,CAAC;YAC3C9E,MAAM,CAACxC,UAAU,CAAC,CAACuH,oBAAoB,CAACH,oCAAyB,CAAC;YAClE5E,MAAM,CAACiF,iCAAiC,CAAC,CAAC5B,uBAAuB,CAC/D,CAAC,EACDuB,oCAAyB,EACzB,CAAChJ,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC,CACxB,CAAC;UAAC;UAAA;YAAA,OAAAgJ,UAAA,CAAA5D,IAAA;QAAA;MAAA,GAAA2D,SAAA;IAAA,CACH,GAAC;EACJ,CAAC,CAAC;EAEF/J,QAAQ,CAAC,gDAAgD,EAAE,YAAM;IAC/DsD,UAAU,CAAC,YAAM;MACf1E,IAAI,CAACmJ,aAAa,CAAC,CAAC;IACtB,CAAC,CAAC;IAEFpE,SAAS,CAAC,YAAM;MACd/E,IAAI,CAACiF,cAAc,CAAC,CAAC;MACrBjF,IAAI,CAACwE,aAAa,CAAC,CAAC;MACpBxE,IAAI,CAACkF,aAAa,CAAC,CAAC;IACtB,CAAC,CAAC;IAEFG,EAAE,CAAC,iGAAiG,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAA6F,UAAA;MAAA,IAAAZ,sBAAA;MAAA,OAAAlF,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA4F,UAAA;QAAA,kBAAAA,UAAA,CAAA1F,IAAA,GAAA0F,UAAA,CAAAzF,IAAA;UAAA;YACpGtC,GAAG,CAACoH,kBAAkB,CAAC/I,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC,CAAC;YACvCqI,sBAAsB,GAAkC;cAC5D3H,UAAU,EAAE,GAAG;cACfT,IAAI,EAAEuI,oCAAyB;cAC/B5H,OAAO,EAAE;gBACP,aAAa,EAAE;cACjB;YACF,CAAC;YACD1C,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACmC,sBAAsB,CAAC,CAC7ChC,qBAAqB,CAACnF,cAAc,CAAC,CACrCgF,qBAAqB,CAACmC,sBAAsB,CAAC,CAC7ChC,qBAAqB,CAACnF,cAAc,CAAC;YAACgI,UAAA,CAAAzF,IAAA;YAAA,OAEnCtC,GAAG,CAACgI,2BAA2B,CAAC,IAAI,CAAC;UAAA;YAC3CvF,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAACuF,kBAAO,CAACC,6BAA6B,CAAC;YAC5EzF,MAAM,CAACxC,UAAU,CAAC,CAACkG,GAAG,CAACC,UAAU,CAAC,CAAC;YACnC3D,MAAM,CAACzC,GAAG,CAAC+F,UAAU,CAAC,CAAClD,OAAO,CAACmB,SAAS,CAAC,CAAC,CAAC;;YAE3CvH,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAAC6B,UAAA,CAAAzF,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACxC,UAAU,CAAC,CAACsH,qBAAqB,CAAC,CAAC,CAAC;YAC3C9E,MAAM,CAACxC,UAAU,CAAC,CAACuH,oBAAoB,CAACS,kBAAO,CAACC,6BAA6B,CAAC;UAAC;UAAA;YAAA,OAAAH,UAAA,CAAA9D,IAAA;QAAA;MAAA,GAAA6D,SAAA;IAAA,CAChF,GAAC;IAEFhG,EAAE,CAAC,iHAAiH,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAkG,UAAA;MAAA,IAAAT,iCAAA,EAAAR,sBAAA;MAAA,OAAAlF,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAiG,UAAA;QAAA,kBAAAA,UAAA,CAAA/F,IAAA,GAAA+F,UAAA,CAAA9F,IAAA;UAAA;YAC9GoF,iCAAiC,GAAGjL,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,gCAAgC,CAAC;YAC3FA,GAAG,CAACoH,kBAAkB,CAAC/I,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC,CAAC;YACvCqI,sBAAsB,GAAkC;cAC5D3H,UAAU,EAAE,GAAG;cACfT,IAAI,EAAEuI,oCAAyB;cAC/B5H,OAAO,EAAE;gBACP,aAAa,EAAE;cACjB;YACF,CAAC;YACD1C,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACmC,sBAAsB,CAAC,CAC7ChC,qBAAqB,CAACnF,cAAc,CAAC,CACrCgF,qBAAqB,CAACmC,sBAAsB,CAAC,CAC7ChC,qBAAqB,CAACnF,cAAc,CAAC;YAACqI,UAAA,CAAA9F,IAAA;YAAA,OAEnCtC,GAAG,CAACgI,2BAA2B,CAAC,IAAI,CAAC;UAAA;YAC3CvF,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAACuF,kBAAO,CAACC,6BAA6B,CAAC;YAC5EzF,MAAM,CAACnC,WAAW,CAAC,CAACoC,kBAAkB,CAAC,GAAG,EAAEuF,kBAAO,CAACC,6BAA6B,CAAC;YAClFzL,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAACkC,UAAA,CAAA9F,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACiF,iCAAiC,CAAC,CAACH,qBAAqB,CAAC,CAAC,CAAC;YAClE9E,MAAM,CAACiF,iCAAiC,CAAC,CAAC5B,uBAAuB,CAC/D,CAAC,EACDmC,kBAAO,CAACC,6BAA6B,EACrC,CAAC7J,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC,CACxB,CAAC;YACD;YACA4D,MAAM,CAACiF,iCAAiC,CAAC,CAAC5B,uBAAuB,CAC/D,CAAC,EACDmC,kBAAO,CAACC,6BAA6B,EACrC7J,UAAU,CAAC2C,MACb,CAAC;YACDyB,MAAM,CAACxC,UAAU,CAAC,CAACkG,GAAG,CAACoB,qBAAqB,CAAC,CAAC,CAAC;YAC/C9E,MAAM,CAACxC,UAAU,CAAC,CAACkG,GAAG,CAACqB,oBAAoB,CAACS,kBAAO,CAACC,6BAA6B,CAAC;UAAC;UAAA;YAAA,OAAAE,UAAA,CAAAnE,IAAA;QAAA;MAAA,GAAAkE,SAAA;IAAA,CACpF,GAAC;EACJ,CAAC,CAAC;EAEFtK,QAAQ,CAAC,6BAA6B,EAAE,YAAM;IAC5CiE,EAAE,CAAC,yEAAyE,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAoG,UAAA;MAAA,IAAAC,GAAA,EAAAC,GAAA,EAAAC,KAAA;MAAA,OAAAxG,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAsG,UAAA;QAAA,kBAAAA,UAAA,CAAApG,IAAA,GAAAoG,UAAA,CAAAnG,IAAA;UAAA;YAC5E7F,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpB;YACA7I,KAAK,CAAC0E,OAAO,CAACsD,qBAAqB,CAACzF,cAAc,CAAC;YAEnDmD,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACsC,IAAI,CAAC;YAACqD,UAAA,CAAAnG,IAAA;YAAA,OACnDtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAE/B;YACM8F,GAAG,yBAAA1J,MAAA,CAAyB7B,KAAK,CAACiC,QAAQ,CAACC,MAAM,CAACF,MAAM;YACxDwJ,GAAG,GAAG3G,YAAY,CAAC8G,OAAO,CAACJ,GAAG,CAAC;YACrC7F,MAAM,CAAC8F,GAAG,CAAC,CAACI,UAAU,CAAC,CAAC;YAClBH,KAAK,GAAGI,IAAI,CAACC,KAAK,CAACN,GAAa,CAAC;YACvC9F,MAAM,CAAC+F,KAAK,CAAC,CAAC3F,OAAO,CACnBJ,MAAM,CAACa,gBAAgB,CAAC;cACtBwF,OAAO,EAAE,CAAC;cACVC,WAAW,EAAE,CAAC;cACdC,kBAAkB,EAAEvG,MAAM,CAACwG,GAAG,CAAChD,MAAM,CAAC;cACtCiD,UAAU,EAAE;YACd,CAAC,CACH,CAAC;UAAC;UAAA;YAAA,OAAAT,UAAA,CAAAxE,IAAA;QAAA;MAAA,GAAAoE,SAAA;IAAA,CACH,GAAC;IAEFvG,EAAE,CAAC,2DAA2D,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAkH,UAAA;MAAA,IAAAb,GAAA,EAAAc,GAAA,EAAA/I,WAAA,EAAAgJ,qBAAA,EAAAC,UAAA,EAAAC,cAAA;MAAA,OAAAvH,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAqH,UAAA;QAAA,kBAAAA,UAAA,CAAAnH,IAAA,GAAAmH,UAAA,CAAAlH,IAAA;UAAA;YAC9D7F,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACd0C,GAAG,yBAAA1J,MAAA,CAAyB7B,KAAK,CAACiC,QAAQ,CAACC,MAAM,CAACF,MAAM;YACxDqK,GAAG,GAAGK,IAAI,CAACC,KAAK,CAAC,IAAAC,IAAA,CAAA3O,OAAA,EAAS,CAAC,GAAG,IAAI,CAAC,EACzC;YACA4G,YAAY,CAACgI,OAAO,CAClBtB,GAAG,EACH,IAAAuB,UAAA,CAAA7O,OAAA,EAAe;cACb8N,OAAO,EAAE,CAAC;cACVC,WAAW,EAAE,EAAE;cACfC,kBAAkB,EAAEI,GAAG,GAAG,CAAC;cAC3BF,UAAU,EAAE;YACd,CAAC,CACH,CAAC;YAEK7I,WAAW,GAAG5D,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAS,oBAAoB,CAAC;YAEhEjD,KAAK,CAAC0E,OAAO,CAACyD,qBAAqB,CAACnF,cAAc,CAAC;YAACyJ,UAAA,CAAAlH,IAAA;YAAA,OAC9CtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAE/BC,MAAM,CAACpC,WAAW,CAAC,CAACkH,qBAAqB,CAAC,CAAC,CAAC;YAAC8B,qBAAA,OAAAS,eAAA,CAAA9O,OAAA,EACRqF,WAAW,CAAC3D,IAAI,CAACqN,KAAK,CAAC,CAAC,CAAC,MAAvDT,UAAU,GAAAD,qBAAA,KAAEE,cAAc,GAAAF,qBAAA;YACjC5G,MAAM,CAAC6G,UAAU,CAAC,CAACU,IAAI,CAAC,CAAC,CAAC;YAC1BvH,MAAM,CAAC8G,cAAc,CAAC,CAACU,sBAAsB,CAAC,EAAE,CAAC;UAAC;UAAA;YAAA,OAAAT,UAAA,CAAAvF,IAAA;QAAA;MAAA,GAAAkF,SAAA;IAAA,CACnD,GAAC;IAEFrH,EAAE,CAAC,0DAA0D,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAiI,UAAA;MAAA,OAAAlI,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAgI,UAAA;QAAA,kBAAAA,UAAA,CAAA9H,IAAA,GAAA8H,UAAA,CAAA7H,IAAA;UAAA;YAC7D7F,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpB;YACA7I,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACzF,cAAc,CAAC,CACrCyF,qBAAqB,CAACzF,cAAc,CAAC,CACrC4F,qBAAqB,CAACnF,cAAc,CAAC;YAExC0C,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACsC,IAAI,CAAC;YAAC+E,UAAA,CAAA7H,IAAA;YAAA,OACnDtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAC/B/F,IAAI,CAACuJ,mBAAmB,CAACY,0CAA+B,GAAGV,8BAAmB,CAAC;YAACiE,UAAA,CAAA7H,IAAA;YAAA,OAC1ErE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACuB,eAAe,CAAC,CAAC,CAAC;YACxCP,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACwB,cAAc,CAAAhH,aAAA,CAAAA,aAAA,KAC/BwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YACF4D,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACwB,cAAc,CAAAhH,aAAA,CAAAA,aAAA,KAC/BwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC;YAAQ,EACrC,CAAC;YACFyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;YAC1D;YACAN,MAAM,CAACzC,GAAG,CAACoK,kBAAkB,CAAC,CAAC,CAAC,CAACvH,OAAO,CAACxE,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC,CAAC;YAC9DyB,MAAM,CAAClC,SAAS,CAAC,CAACuF,uBAAuB,CACvC,CAAC,EACDrC,oBAAY,CAACC,YAAY,EACzBC,kBAAU,CAACC,QAAQ,EACnBC,mBAAW,CAACC,UAAU,EACtB0B,wBAAa,EACb,QAAQ,EACR,sDAAsD,EACtDxB,SAAS,EACTA,SACF,CAAC;UAAC;UAAA;YAAA,OAAAmG,UAAA,CAAAlG,IAAA;QAAA;MAAA,GAAAiG,SAAA;IAAA,CACH,GAAC;IAEFpI,EAAE,CAAC,6DAA6D,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAoI,UAAA;MAAA,OAAArI,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAmI,UAAA;QAAA,kBAAAA,UAAA,CAAAjI,IAAA,GAAAiI,UAAA,CAAAhI,IAAA;UAAA;YAChE9B,iBAAiB,CAAAvE,aAAA,CAAAA,aAAA,KAAKgB,eAAe;cAAEC,SAAS,EAAEC,uBAAgB,CAACoN;YAAc,EAAC,CAAC;YAEnF9N,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpB7I,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACzF,cAAc,CAAC,CACrCyF,qBAAqB,CAACzF,cAAc,CAAC,CACrC4F,qBAAqB,CAACnF,cAAc,CAAC;YAExC0C,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACsC,IAAI,CAAC;YAACkF,UAAA,CAAAhI,IAAA;YAAA,OACnDtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAC/B/F,IAAI,CAACuJ,mBAAmB,CAACY,0CAA+B,GAAGV,8BAAmB,CAAC;YAACoE,UAAA,CAAAhI,IAAA;YAAA,OAC1ErE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACuB,eAAe,CAAC,CAAC,CAAC;YACxCP,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACwB,cAAc,CAAAhH,aAAA,CAAAA,aAAA,KAC/BoD,cAAc;cACjBsD,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YACF4D,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACwB,cAAc,CAAAhH,aAAA,CAAAA,aAAA,KAC/BoD,cAAc;cACjBsD,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC;YAAQ,EACrC,CAAC;YACFyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;YAC1D;YACAN,MAAM,CAACzC,GAAG,CAACoK,kBAAkB,CAAC,CAAC,CAAC,CAACvH,OAAO,CAACxE,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC,CAAC;UAAC;UAAA;YAAA,OAAAsJ,UAAA,CAAArG,IAAA;QAAA;MAAA,GAAAoG,SAAA;IAAA,CAChE,GAAC;IAEFvI,EAAE,CAAC,+CAA+C,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAuI,UAAA;MAAA,OAAAxI,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAsI,UAAA;QAAA,kBAAAA,UAAA,CAAApI,IAAA,GAAAoI,UAAA,CAAAnI,IAAA;UAAA;YAClD7F,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpB;YACA7I,KAAK,CAAC0E,OAAO,CAAC4C,iBAAiB,CAAC/E,cAAc,CAAC;YAE/CmD,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACsC,IAAI,CAAC;YAACqF,UAAA,CAAAnI,IAAA;YAAA,OACnDtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAC/B/F,IAAI,CAACuJ,mBAAmB,CAACY,0CAA+B,GAAGV,8BAAmB,CAAC;YAACuE,UAAA,CAAAnI,IAAA;YAAA,OAC1ErE,aAAa,CAAC,CAAC;UAAA;YACrBxB,IAAI,CAACuJ,mBAAmB,CAACY,0CAA+B,GAAGV,8BAAmB,CAAC;YAACuE,UAAA,CAAAnI,IAAA;YAAA,OAC1ErE,aAAa,CAAC,CAAC;UAAA;YAErB;AACN;AACA;AACA;AACA;YACMwE,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACuB,eAAe,CAAC,CAAC,CAAC;YACxCP,MAAM,CAAC9E,cAAc,CAAC,CAACqF,eAAe,CAAC,CAAC,CAAC;YACzCP,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACwB,cAAc,CAAAhH,aAAA,CAAAA,aAAA,KAC/BwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC;YAAQ,EACtC,CAAC;YACF4D,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACwB,cAAc,CAAAhH,aAAA,CAAAA,aAAA,KAC/BwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC;YAAQ,EACrC,CAAC;YACFyB,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACwB,cAAc,CAAAhH,aAAA,CAAAA,aAAA,KAC/BwC,YAAY;cACfkE,MAAM,EAAE,MAAM;cACdhE,GAAG,KAAAC,MAAA,CAAKP,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC;YAAQ,EACrC,CAAC;YACFyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAAC2B,QAAQ,CAAC;UAAC;UAAA;YAAA,OAAAgG,UAAA,CAAAxG,IAAA;QAAA;MAAA,GAAAuG,SAAA;IAAA,CAC9D,GAAC;EACJ,CAAC,CAAC;EAEF3M,QAAQ,CAAC,6BAA6B,EAAE,YAAM;IAC5C,IAAI6M,kBAAkB;IACtBvJ,UAAU,kBAAAY,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAC,SAAA0I,UAAA;MAAA,OAAA3I,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAyI,UAAA;QAAA,kBAAAA,UAAA,CAAAvI,IAAA,GAAAuI,UAAA,CAAAtI,IAAA;UAAA;YACToI,kBAAkB,GAAGjO,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,iBAAiB,CAAC;YACvD0K,kBAAkB,CAAC7N,eAAe,CAAC,IAAI,CAAC;YACxC;YACAJ,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpBzF,mBAAmB,CAChB4E,qBAAqB,CAACzF,cAAc,CAAC,CACrCyF,qBAAqB,CAACzF,cAAc,CAAC,CACrC4F,qBAAqB,CAACnF,cAAc,CAAC;YAAC6K,UAAA,CAAAtI,IAAA;YAAA,OAEnCtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAE/B/F,IAAI,CAACuJ,mBAAmB,CAACY,0CAA+B,GAAGV,8BAAmB,CAAC;YAAC0E,UAAA,CAAAtI,IAAA;YAAA,OAC1ErE,aAAa,CAAC,CAAC;UAAA;YACrB+B,GAAG,CAAC6K,mBAAmB,GAAGC,wCAA6B;YACvD9K,GAAG,CAAC+K,mBAAmB,GAAGC,wCAA6B;;YAEvD;YACAvI,MAAM,CAAC9E,cAAc,CAAC,CAACqF,eAAe,CAAC,CAAC,CAAC;;YAEzC;YACAP,MAAM,CAACzC,GAAG,CAACoK,kBAAkB,CAAC,CAAC,CAAC,CAACa,aAAa,CAAC5M,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC,CAAC;YACpEyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;UAAC;UAAA;YAAA,OAAA6H,UAAA,CAAA3G,IAAA;QAAA;MAAA,GAAA0G,SAAA;IAAA,CAC5D,GAAC;IAEFnJ,SAAS,CAAC,YAAM;MACd/E,IAAI,CAACiF,cAAc,CAAC,CAAC;MACrBjF,IAAI,CAACwE,aAAa,CAAC,CAAC;IACtB,CAAC,CAAC;IAEFa,EAAE,CAAC,mGAAmG,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAiJ,UAAA;MAAA,OAAAlJ,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAgJ,UAAA;QAAA,kBAAAA,UAAA,CAAA9I,IAAA,GAAA8I,UAAA,CAAA7I,IAAA;UAAA;YACtG;YACA8I,MAAM,CAACC,KAAK,GAAG5O,IAAI,CAACG,EAAE,CAAC;cAAA,OAAMsB,QAAA,CAAAlD,OAAA,CAAQmD,OAAO,CAAC;gBAACmN,IAAI,EAAE,SAANA,IAAIA,CAAA;kBAAA,OAAQnG,oCAAkB;gBAAA;cAAA,CAAC,CAAC;YAAA,EAAc;;YAE5F;YACAhF,mBAAmB,CAChB4E,qBAAqB,CAACnF,oBAAoB,CAAC,CAC3CmF,qBAAqB,CAACnF,oBAAoB,CAAC;;YAE9C;YACAnD,IAAI,CAACuJ,mBAAmB,CACtBhG,GAAG,CAAC+K,mBAAmB,GAAGQ,iCAAsB,GAAGrF,8BACrD,CAAC;YAACiF,UAAA,CAAA7I,IAAA;YAAA,OACIrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,oCAAoC;cAChEN,MAAM,EAAE,iBAAiB;cACzBY,IAAI,EAAEC;YACR,CAAC,CAAC;YAEF/G,IAAI,CAACuJ,mBAAmB,CAAC,KAAK,CAAC;YAACmF,UAAA,CAAA7I,IAAA;YAAA,OAC1BrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACnC,WAAW,CAAC,CAAC2C,cAAc,CAChCrD,oBAAoB,CAACH,OAAO,CAAC,aAAa,CAAC,EAC3C,iBACF,CAAC;YACD;YACAgD,MAAM,CAACzC,GAAG,CAACwL,wBAAwB,CAAC,CAACxB,IAAI,CAAC,CAAC,CAAC;YAC5CvH,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACoH,IAAI,CAAClH,yBAAkB,CAAC2B,QAAQ,CAAC;YACzDhC,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAAC+I,6BAAkB,CAAC;YACzD;YACA;YACAhJ,MAAM,CAACxC,UAAU,CAAC,CAACkG,GAAG,CAACC,UAAU,CAAC,CAAC;YACnC3D,MAAM,CAACzC,GAAG,CAAC0L,aAAa,CAAC,CAACvF,GAAG,CAAC6D,IAAI,CAAChG,SAAS,CAAC,CAAC,CAAC;YAC/CvB,MAAM,CAACzC,GAAG,CAAC6K,mBAAmB,CAAC,CAACb,IAAI,CAACc,wCAA6B,CAAC;YACnErI,MAAM,CAACzC,GAAG,CAAC+K,mBAAmB,CAAC,CAACf,IAAI,CAACgB,wCAA6B,CAAC;UAAC;UAAA;YAAA,OAAAG,UAAA,CAAAlH,IAAA;QAAA;MAAA,GAAAiH,SAAA;IAAA,CACrE,GAAC;IAEFpJ,EAAE,CAAC,iGAAiG,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAA0J,UAAA;MAAA,OAAA3J,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAyJ,UAAA;QAAA,kBAAAA,UAAA,CAAAvJ,IAAA,GAAAuJ,UAAA,CAAAtJ,IAAA;UAAA;YACpGnC,mBAAmB,CAACkE,iBAAiB,CAAC/E,cAAc,CAAC;;YAErD;YACA7C,IAAI,CAACuJ,mBAAmB,CACtBhG,GAAG,CAAC+K,mBAAmB,GAAGQ,iCAAsB,GAAGrF,8BACrD,CAAC;YAAC0F,UAAA,CAAAtJ,IAAA;YAAA,OACIrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,oCAAoC;cAChEN,MAAM,EAAE,iBAAiB;cACzBY,IAAI,EAAEC;YACR,CAAC,CAAC;YACFf,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACoH,IAAI,CAAClH,yBAAkB,CAAC2B,QAAQ,CAAC;YACzDhC,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAACmJ,wBAAa,CAAC;YACpDpJ,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACoH,IAAI,CAAClH,yBAAkB,CAAC2B,QAAQ,CAAC;YACzDhC,MAAM,CAACxC,UAAU,CAAC,CAACyC,kBAAkB,CAACmJ,wBAAa,CAAC;YACpDpJ,MAAM,CAACzC,GAAG,CAAC6K,mBAAmB,CAAC,CAACb,IAAI,CAACc,wCAA6B,CAAC;YACnErI,MAAM,CAACzC,GAAG,CAAC+K,mBAAmB,CAAC,CAACf,IAAI,CAACgB,wCAA6B,CAAC;UAAC;UAAA;YAAA,OAAAY,UAAA,CAAA3H,IAAA;QAAA;MAAA,GAAA0H,SAAA;IAAA,CACrE,GAAC;IAEF7J,EAAE,CAAC,kHAAkH,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAA6J,UAAA;MAAA,IAAAC,iBAAA;MAAA,OAAA/J,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA6J,UAAA;QAAA,kBAAAA,UAAA,CAAA3J,IAAA,GAAA2J,UAAA,CAAA1J,IAAA;UAAA;YAC/GyJ,iBAAiB,GAAkC;cACvDxM,UAAU,EAAE,GAAG;cACfT,IAAI,EAAEU;YACR,CAAC;YACDW,mBAAmB,CAAC0F,SAAS,CAAC,CAAC;YAC/B1F,mBAAmB,CAChBkE,iBAAiB,CAAC0H,iBAAiB,CAAC,CACpChH,qBAAqB,CAACzF,cAAc,CAAC;YACxC;YACA7C,IAAI,CAACuJ,mBAAmB,CACtBhG,GAAG,CAAC+K,mBAAmB,GAAGQ,iCAAsB,GAAGrF,8BACrD,CAAC;YAAC8F,UAAA,CAAA1J,IAAA;YAAA,OACIrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,oCAAoC;cAChEN,MAAM,EAAE,iBAAiB;cACzBY,IAAI,EAAEC;YACR,CAAC,CAAC;YACFf,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACoH,IAAI,CAAClH,yBAAkB,CAAC2B,QAAQ,CAAC;YACzDhC,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAACmJ,wBAAa,CAAC;YACpDpJ,MAAM,CAACxC,UAAU,CAAC,CAACkG,GAAG,CAACC,UAAU,CAAC,CAAC;YACnC3D,MAAM,CAACzC,GAAG,CAAC0L,aAAa,CAAC,CAAC1B,IAAI,CAAChG,SAAS,CAAC;YACzCvB,MAAM,CAACzC,GAAG,CAAC6K,mBAAmB,CAAC,CAACb,IAAI,CAACc,wCAA6B,CAAC;YACnErI,MAAM,CAACzC,GAAG,CAAC+K,mBAAmB,CAAC,CAACf,IAAI,CAACgB,wCAA6B,CAAC;UAAC;UAAA;YAAA,OAAAgB,UAAA,CAAA/H,IAAA;QAAA;MAAA,GAAA6H,SAAA;IAAA,CACrE,GAAC;IAEFhK,EAAE,CAAC,iGAAiG,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAgK,UAAA;MAAA,OAAAjK,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA+J,UAAA;QAAA,kBAAAA,UAAA,CAAA7J,IAAA,GAAA6J,UAAA,CAAA5J,IAAA;UAAA;YACpGnC,mBAAmB,CAAC4E,qBAAqB,CAACzF,cAAc,CAAC,CAAC1B,iBAAiB,CAACmC,cAAc,CAAC;;YAE3F;YACAtD,IAAI,CAACuJ,mBAAmB,CACtBhG,GAAG,CAAC+K,mBAAmB,GAAGQ,iCAAsB,GAAGrF,8BACrD,CAAC;YAACgG,UAAA,CAAA5J,IAAA;YAAA,OACIrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,oCAAoC;cAChEN,MAAM,EAAE,iBAAiB;cACzBY,IAAI,EAAEC;YACR,CAAC,CAAC;YACF;YACAf,MAAM,CAACzC,GAAG,CAACoK,kBAAkB,CAAC,CAAC,CAAC,CAACa,aAAa,CAAC5M,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC,CAAC;YACpEyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACoH,IAAI,CAAClH,yBAAkB,CAACC,MAAM,CAAC;YACvDN,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAACmJ,wBAAa,CAAC;YACpDpJ,MAAM,CAACxC,UAAU,CAAC,CAACkG,GAAG,CAACC,UAAU,CAAC,CAAC;YACnC3D,MAAM,CAACzC,GAAG,CAAC6K,mBAAmB,CAAC,CAACb,IAAI,CAACc,wCAA6B,CAAC;YACnErI,MAAM,CAACzC,GAAG,CAAC+K,mBAAmB,CAAC,CAACf,IAAI,CAACgB,wCAA6B,CAAC;UAAC;UAAA;YAAA,OAAAkB,UAAA,CAAAjI,IAAA;QAAA;MAAA,GAAAgI,SAAA;IAAA,CACrE,GAAC;IAEFnK,EAAE,CAAC,8EAA8E,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAkK,UAAA;MAAA,OAAAnK,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAiK,UAAA;QAAA,kBAAAA,UAAA,CAAA/J,IAAA,GAAA+J,UAAA,CAAA9J,IAAA;UAAA;YACjFnC,mBAAmB,CAACvC,iBAAiB,CAACmC,cAAc,CAAC;;YAErD;YACAtD,IAAI,CAACuJ,mBAAmB,CACtBhG,GAAG,CAAC+K,mBAAmB,GAAGQ,iCAAsB,GAAGrF,8BACrD,CAAC;YAACkG,UAAA,CAAA9J,IAAA;YAAA,OACIrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,oCAAoC;cAChEN,MAAM,EAAE,iBAAiB;cACzBY,IAAI,EAAEC;YACR,CAAC,CAAC;;YAEF;YACAf,MAAM,CAACrC,aAAa,CAAC,CAACsC,kBAAkB,CAAC,CAAC;YAC1CD,MAAM,CAACzC,GAAG,CAACoK,kBAAkB,CAAC,CAAC,CAAC,CAACa,aAAa,CAAC5M,UAAU,CAACQ,OAAO,CAAC,CAAC,CAAC,CAAC;YACrE4D,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACoH,IAAI,CAAClH,yBAAkB,CAACC,MAAM,CAAC;YACvDN,MAAM,CAACzC,GAAG,CAAC0L,aAAa,CAAC,CAAC1B,IAAI,CAAChG,SAAS,CAAC;YACzCvB,MAAM,CAACvC,UAAU,CAAC,CAACiG,GAAG,CAACC,UAAU,CAAC,CAAC;YACnC3D,MAAM,CAACzC,GAAG,CAAC6K,mBAAmB,CAAC,CAACb,IAAI,CAACxK,kCAAgB,CAACqL,mBAAmB,CAAC;YAC1EpI,MAAM,CAACzC,GAAG,CAAC+K,mBAAmB,CAAC,CAACf,IAAI,CAACxK,kCAAgB,CAACuL,mBAAmB,CAAC;UAAC;UAAA;YAAA,OAAAqB,UAAA,CAAAnI,IAAA;QAAA;MAAA,GAAAkI,SAAA;IAAA,CAC5E,GAAC;IAEFrK,EAAE,CAAC,yDAAyD,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAoK,UAAA;MAAA,OAAArK,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAmK,UAAA;QAAA,kBAAAA,UAAA,CAAAjK,IAAA,GAAAiK,UAAA,CAAAhK,IAAA;UAAA;YAC5D;YACAtC,GAAG,CAACuM,WAAW,CAACC,UAAU,CAAC,CAAC;YAC5B/J,MAAM,CAAC,IAAAgK,KAAA,CAAAzR,OAAA,EAAYgF,GAAG,CAACuM,WAAW,CAACG,cAAc,CAAC,CAAC,CAAC,CAACvQ,MAAM,CAAC,CAAC6N,IAAI,CAAC,CAAC,CAAC;YAEpE7J,mBAAmB,CAAC4E,qBAAqB,CAACzF,cAAc,CAAC,CAAC1B,iBAAiB,CAACmC,cAAc,CAAC;;YAE3F;YACAtD,IAAI,CAACuJ,mBAAmB,CACtBhG,GAAG,CAAC+K,mBAAmB,GAAGQ,iCAAsB,GAAGrF,8BACrD,CAAC;YAACoG,UAAA,CAAAhK,IAAA;YAAA,OACIrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,sFAE5B;cACEN,MAAM,EAAE,iBAAiB;cACzBY,IAAI,EAAEC;YACR,CACF,CAAC;;YAED;YACAf,MAAM,CAACzC,GAAG,CAACoK,kBAAkB,CAAC,CAAC,CAAC,CAACa,aAAa,CAAC5M,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC,CAAC;YACpEyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACoH,IAAI,CAAClH,yBAAkB,CAACC,MAAM,CAAC;YACvDN,MAAM,CAACrC,aAAa,CAAC,CAAC+F,GAAG,CAACC,UAAU,CAAC,CAAC;YACtC3D,MAAM,CAACvC,UAAU,CAAC,CAACiG,GAAG,CAACC,UAAU,CAAC,CAAC;YACnC3D,MAAM,CAACxC,UAAU,CAAC,CAACkG,GAAG,CAACC,UAAU,CAAC,CAAC;YAEnC3D,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,CAC5B,mFAAmF,EACnF;cACEM,IAAI,EAAEC,4BAAiB;cACvBb,MAAM,EAAEkJ;YACV,CACF,CAAC;YACDpJ,MAAM,CAACzC,GAAG,CAAC6K,mBAAmB,CAAC,CAACb,IAAI,CAACc,wCAA6B,CAAC;YACnErI,MAAM,CAACzC,GAAG,CAAC+K,mBAAmB,CAAC,CAACf,IAAI,CAACgB,wCAA6B,CAAC;UAAC;UAAA;YAAA,OAAAsB,UAAA,CAAArI,IAAA;QAAA;MAAA,GAAAoI,SAAA;IAAA,CACrE,GAAC;IAEFvK,EAAE,CAAC,uEAAuE,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAA0K,UAAA;MAAA,OAAA3K,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAyK,UAAA;QAAA,kBAAAA,UAAA,CAAAvK,IAAA,GAAAuK,UAAA,CAAAtK,IAAA;UAAA;YAC1EoI,kBAAkB,CAAC7N,eAAe,CAAC,KAAK,CAAC;;YAEzC;YACAJ,IAAI,CAACuJ,mBAAmB,CACtBhG,GAAG,CAAC+K,mBAAmB,GAAGQ,iCAAsB,GAAGrF,8BACrD,CAAC;YAAC0G,UAAA,CAAAtK,IAAA;YAAA,OACIrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,sFAE5B;cACEN,MAAM,EAAE,iBAAiB;cACzBY,IAAI,EAAEC;YACR,CACF,CAAC;;YAED;YACAf,MAAM,CAACrC,aAAa,CAAC,CAAC+F,GAAG,CAACC,UAAU,CAAC,CAAC;YACtC3D,MAAM,CAACzC,GAAG,CAACoK,kBAAkB,CAAC,CAAC,CAAC,CAACa,aAAa,CAAC5M,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC,CAAC;YACpEyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACoH,IAAI,CAAClH,yBAAkB,CAACC,MAAM,CAAC;UAAC;UAAA;YAAA,OAAA6J,UAAA,CAAA3I,IAAA;QAAA;MAAA,GAAA0I,SAAA;IAAA,CACzD,GAAC;EACJ,CAAC,CAAC;;EAEF;EACA9O,QAAQ,CAAC,kBAAkB,EAAE,YAAM;IACjC,IAAMgP,2BAA2B;MAAA,IAAAC,MAAA,OAAA/K,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAG,SAAA8K,UAAA;QAAA,OAAA/K,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA6K,UAAA;UAAA,kBAAAA,UAAA,CAAA3K,IAAA,GAAA2K,UAAA,CAAA1K,IAAA;YAAA;cAClCnC,mBAAmB,CAAC+E,qBAAqB,CAACnF,cAAc,CAAC;cACzDtD,IAAI,CAACmJ,aAAa,CAAC,CAAC;cAACoH,UAAA,CAAA1K,IAAA;cAAA,OACftC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;YAAA;cAC/BC,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACoH,IAAI,CAAClH,yBAAkB,CAACC,MAAM,CAAC;cACvDN,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;YAAC;YAAA;cAAA,OAAAF,UAAA,CAAA/I,IAAA;UAAA;QAAA,GAAA8I,SAAA;MAAA,CACrC;MAAA,gBANKF,2BAA2BA,CAAA;QAAA,OAAAC,MAAA,CAAA9Q,KAAA,OAAAE,SAAA;MAAA;IAAA,GAMhC;IAEDsF,SAAS,CAAC,YAAM;MACd/E,IAAI,CAACiF,cAAc,CAAC,CAAC;MACrBjF,IAAI,CAACwE,aAAa,CAAC,CAAC;MAEpBjB,GAAG,CAACmN,mBAAmB,CAAC,CAAC;MACzBnN,GAAG,CAACoN,gBAAgB,GAAG,KAAK;MAC5B,IAAMrD,KAAK,GAAG,IAAAsD,OAAA,CAAArS,OAAA,EAAcgF,GAAG,CAACuM,WAAW,CAACG,cAAc,CAAC,CAAC,CAAY;MAExE3C,KAAK,CAAC1N,OAAO,CAAC,UAACd,IAAI,EAAK;QACtBA,IAAI,CAAC+R,GAAG,CAAC,CAAC;MACZ,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFxL,EAAE,CAAC,oCAAoC,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAsL,UAAA;MAAA,IAAAC,cAAA;MAAA,OAAAxL,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAsL,UAAA;QAAA,kBAAAA,UAAA,CAAApL,IAAA,GAAAoL,UAAA,CAAAnL,IAAA;UAAA;YACjCkL,cAAc,GAAG/Q,IAAI,CAACc,KAAK,CAACmQ,MAAM,CAACC,SAAS,EAAE,aAAa,CAAC;YAAAF,UAAA,CAAAnL,IAAA;YAAA,OAE5DuK,2BAA2B,CAAC,CAAC;UAAA;YAEnCpK,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;YACnCzK,MAAM,CAAC+K,cAAc,CAAC,CAAChG,oBAAoB,CACzC/E,MAAM,CAACa,gBAAgB,CAAC;cACtBsK,IAAI,EAAE,iBAAiB;cACvBC,WAAW,EAAEpL,MAAM,CAACwG,GAAG,CAAC6E,MAAM,CAAC;cAC/BC,SAAS,EAAEtL,MAAM,CAACwG,GAAG,CAAC6E,MAAM,CAAC;cAC7BE,QAAQ,EAAEvL,MAAM,CAACwG,GAAG,CAAChD,MAAM,CAAC;cAC5BgI,mBAAmB,EAAExL,MAAM,CAACwG,GAAG,CAAChD,MAAM,CAAC;cACvC9G,GAAG,EAAEsD,MAAM,CAACwG,GAAG,CAAC6E,MAAM;YACxB,CAAC,CACH,CAAC;YAED9N,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAAC;cACtBC,IAAI,EAAE;gBAACP,IAAI,EAAE,mBAAmB;gBAAErO,UAAU,EAAE;cAAG;YACnD,CAAiB,CAAC;YAElBkD,MAAM,CAACrE,WAAW,CAAC,CAAC6E,cAAc,CAACC,mBAAW,CAACkL,WAAW,CAAC;UAAC;UAAA;YAAA,OAAAX,UAAA,CAAAxJ,IAAA;QAAA;MAAA,GAAAsJ,SAAA;IAAA,CAC7D,GAAC;IAEFzL,EAAE,CAAC,gDAAgD,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAoM,UAAA;MAAA,IAAAC,MAAA;MAAA,OAAAtM,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAoM,UAAA;QAAA,kBAAAA,UAAA,CAAAlM,IAAA,GAAAkM,UAAA,CAAAjM,IAAA;UAAA;YAAAiM,UAAA,CAAAjM,IAAA;YAAA,OAC7CuK,2BAA2B,CAAC,CAAC;UAAA;YAE7ByB,MAAM,GAAGtO,GAAG,CAACiN,SAAS;YAC5B7O,WAAW,CAACyH,SAAS,CAAC,CAAC;YAEvByI,MAAM,CAACJ,SAAS,CAAC;cACfC,IAAI,EAAE;gBAACP,IAAI,EAAE,mBAAmB;gBAAEY,GAAG,EAAE;kBAACjP,UAAU,EAAE;gBAAG,CAAC;gBAAEkP,mBAAmB,EAAE;cAAC;YAClF,CAAiB,CAAC;YAElBH,MAAM,CAACJ,SAAS,CAAC;cACfC,IAAI,EAAE;gBAACP,IAAI,EAAE,mBAAmB;gBAAErO,UAAU,EAAE;cAAG;YACnD,CAAiB,CAAC;YAElBkD,MAAM,CAACrE,WAAW,CAAC,CAACoJ,oBAAoB,CAACtE,mBAAW,CAACkL,WAAW,CAAC;UAAC;UAAA;YAAA,OAAAG,UAAA,CAAAtK,IAAA;QAAA;MAAA,GAAAoK,SAAA;IAAA,CACnE,GAAC;IAEFvM,EAAE,CAAC,kDAAkD,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAyM,UAAA;MAAA,IAAAC,YAAA,EAAAzO,UAAA,EAAA0O,aAAA,EAAAC,qBAAA,EAAAC,YAAA;MAAA,OAAA9M,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA4M,UAAA;QAAA,kBAAAA,UAAA,CAAA1M,IAAA,GAAA0M,UAAA,CAAAzM,IAAA;UAAA;YAAAyM,UAAA,CAAAzM,IAAA;YAAA,OAE/CuK,2BAA2B,CAAC,CAAC;UAAA;YAC7B8B,YAAY,GAAGlS,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,oBAAoB,CAAC;YACpDE,UAAU,GAAGzD,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,6BAA6B,CAAC;YAC3D4O,aAAa,GAAGnS,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,qBAAqB,CAAC,EAE5D;YACA5B,WAAW,CAACyH,SAAS,CAAC,CAAC;;YAEvB;YACApD,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;;YAE1D;YACAtG,IAAI,CAACmJ,aAAa,CAAC,CAAC;YACpBnJ,IAAI,CAACuJ,mBAAmB,CAACxG,kCAAgB,CAACwP,iBAAiB,GAAG9I,8BAAmB,CAAC;;YAElF;YACM2I,qBAAqB,GAAG7O,GAAG,CAACuG,QAAQ,GAAG,CAAC,GAAG,CAAC;YAC5CuI,YAAY,GAAG;cACnBX,IAAI,EAAE;gBACJP,IAAI,EAAEqB,wBAAiB,CAACC,iBAAiB;gBACzCV,GAAG,EAAE;kBAACjP,UAAU,EAAE;gBAAG,CAAC;gBACtBkP,mBAAmB,EAAEI;cACvB;YACF,CAAC;YAED7O,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAACY,YAAY,CAAC;YAACC,UAAA,CAAAzM,IAAA;YAAA,OAChCrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAAC2B,QAAQ,CAAC;YAC5DhC,MAAM,CAACrE,WAAW,CAAC,CAACoJ,oBAAoB,CAACtE,mBAAW,CAACoC,YAAY,CAAC;YAClE7C,MAAM,CAACkM,YAAY,CAAC,CAACjM,kBAAkB,CAAC2E,oCAAyB,CAAC;YAClE5E,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAAC2E,oCAAyB,CAAC;YAChE5E,MAAM,CAACmM,aAAa,CAAC,CAAClM,kBAAkB,CAAC2E,oCAAyB,CAAC;YAEnE5K,IAAI,CAACkF,aAAa,CAAC,CAAC;YAEpBc,MAAM,CAAC/E,OAAO,CAAC,CAAC8J,oBAAoB,CAClC,2CAA2C,EAC3C/E,MAAM,CAACa,gBAAgB,CAAC;cACtBC,IAAI,EAAEC,4BAAiB;cACvBb,MAAM,EAAE;YACV,CAAC,CACH,CAAC;UAAC;UAAA;YAAA,OAAAoM,UAAA,CAAA9K,IAAA;QAAA;MAAA,GAAAyK,SAAA;IAAA,CACH,GAAC;IAEF5M,EAAE,CAAC,kDAAkD,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAkN,UAAA;MAAA,IAAAR,YAAA,EAAAxP,GAAA;MAAA,OAAA6C,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAiN,UAAA;QAAA,kBAAAA,UAAA,CAAA/M,IAAA,GAAA+M,UAAA,CAAA9M,IAAA;UAAA;YAAA8M,UAAA,CAAA9M,IAAA;YAAA,OAC/CuK,2BAA2B,CAAC,CAAC;UAAA;YACnCpK,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;YAE7ByB,YAAY,GAAGlS,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,oBAAoB,CAAC;YACpDb,GAAG,GAAG,kDAAkD;YAE9Da,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAAC;cACtBC,IAAI,EAAE;gBACJP,IAAI,EAAEqB,wBAAiB,CAACC,iBAAiB;gBACzCV,GAAG,EAAE;kBAACjP,UAAU,EAAE;gBAAG,CAAC;gBACtBkP,mBAAmB,EAAE;cACvB;YACF,CAAiB,CAAC;YAElBhS,IAAI,CAACuJ,mBAAmB,CAAC,IAAI,CAAC;YAACoJ,UAAA,CAAA9M,IAAA;YAAA,OACzBrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACoC,aAAa,CAAC,CAAC;YACrC5M,MAAM,CAACkM,YAAY,CAAC,CAACjM,kBAAkB,CAAC2E,oCAAyB,CAAC;YAElEzF,YAAY,CAACC,KAAK,CAAC,CAAC;YACpB9E,KAAK,CAAC0E,OAAO,CAACyD,qBAAqB,CAACnF,cAAc,CAAC;YAACqP,UAAA,CAAA9M,IAAA;YAAA,OAC9CtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAAA4M,UAAA,CAAA9M,IAAA;YAAA,OACzBrE,aAAa,CAAC,CAAC;UAAA;YACrBwE,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;YAEnClN,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAAC;cACtBC,IAAI,EAAE;gBAACP,IAAI,EAAEqB,wBAAiB,CAACK,iBAAiB;gBAAE/P,UAAU,EAAE;cAAG;YACnE,CAAiB,CAAC;;YAElB;YACA9C,IAAI,CAACuJ,mBAAmB,CAAC,IAAI,CAAC;YAACoJ,UAAA,CAAA9M,IAAA;YAAA,OACzBrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;YAC1D;YACAN,MAAM,CAACkM,YAAY,CAAC,CAAC3L,eAAe,CAAC,CAAC,CAAC;YACvCP,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAAC2E,oCAAyB,CAAC;YAChE5E,MAAM,CAACxC,UAAU,CAAC,CAACyC,kBAAkB,CAAC2E,oCAAyB,CAAC;YAChE;YACA5E,MAAM,CAACzC,GAAG,CAACoK,kBAAkB,CAAC,CAAC,CAAC,CAACa,aAAa,CAAC9L,GAAG,CAAC;UAAC;UAAA;YAAA,OAAAiQ,UAAA,CAAAnL,IAAA;QAAA;MAAA,GAAAkL,SAAA;IAAA,CACrD,GAAC;IAEFrN,EAAE,CAAC,kDAAkD,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAsN,UAAA;MAAA,OAAAvN,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAqN,UAAA;QAAA,kBAAAA,UAAA,CAAAnN,IAAA,GAAAmN,UAAA,CAAAlN,IAAA;UAAA;YAAAkN,UAAA,CAAAlN,IAAA;YAAA,OAC/CuK,2BAA2B,CAAC,CAAC;UAAA;YACnCpK,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACoH,IAAI,CAAClH,yBAAkB,CAACC,MAAM,CAAC;YACvDN,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;YAEnCnQ,KAAK,CAAC0E,OAAO,CACVsD,qBAAqB,CAACzF,cAAc,CAAC,CACrCyF,qBAAqB,CAACzF,cAAc,CAAC,CACrC1B,iBAAiB,CAACmC,cAAc,CAAC;YAEpCC,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAAC;cACtBC,IAAI,EAAE;gBACJP,IAAI,EAAEqB,wBAAiB,CAACC,iBAAiB;gBACzCV,GAAG,EAAElP,cAAc;gBACnBmP,mBAAmB,EAAEzO,GAAG,CAACuG,QAAQ,GAAG,CAAC,GAAG;cAC1C;YACF,CAAiB,CAAC;YAACiJ,UAAA,CAAAlN,IAAA;YAAA,OACbrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACoC,aAAa,CAAC,CAAC;YACrC5M,MAAM,CAAC9E,cAAc,CAAC,CAACqF,eAAe,CAAC,CAAC,CAAC;YAEzCpB,YAAY,CAACC,KAAK,CAAC,CAAC;YAAC2N,UAAA,CAAAlN,IAAA;YAAA,OACftC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAAAgN,UAAA,CAAAlN,IAAA;YAAA,OACzBrE,aAAa,CAAC,CAAC;UAAA;YACrBwE,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;YAEnClN,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAAC;cACtBC,IAAI,EAAE;gBAACP,IAAI,EAAEqB,wBAAiB,CAACK,iBAAiB;gBAAE/P,UAAU,EAAE;cAAG;YACnE,CAAiB,CAAC;YAACiQ,UAAA,CAAAlN,IAAA;YAAA,OACbrE,aAAa,CAAC,CAAC;UAAA;YAErB;YACA;YACA+B,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAAC;cACtBC,IAAI,EAAE;gBACJP,IAAI,EAAEqB,wBAAiB,CAACC,iBAAiB;gBACzCV,GAAG,EAAElP,cAAc;gBACnBmP,mBAAmB,EAAEzO,GAAG,CAACuG,QAAQ,GAAG,CAAC,GAAG;cAC1C;YACF,CAAiB,CAAC;YAACiJ,UAAA,CAAAlN,IAAA;YAAA,OACbrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC9E,cAAc,CAAC,CAACqF,eAAe,CAAC,CAAC,CAAC;;YAEzC;YAAAwM,UAAA,CAAAlN,IAAA;YAAA,OACMtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAAAgN,UAAA,CAAAlN,IAAA;YAAA,OACzBrE,aAAa,CAAC,CAAC;UAAA;YACrBwE,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;YAEnClN,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAAC;cACtBC,IAAI,EAAE;gBAACP,IAAI,EAAEqB,wBAAiB,CAACK,iBAAiB;gBAAE/P,UAAU,EAAE;cAAG;YACnE,CAAiB,CAAC;YAACiQ,UAAA,CAAAlN,IAAA;YAAA,OACbrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;YAC1DN,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;UAAC;UAAA;YAAA,OAAAsC,UAAA,CAAAvL,IAAA;QAAA;MAAA,GAAAsL,SAAA;IAAA,CACrC,GAAC;IAEFzN,EAAE,CAAC,qFAAqF,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAwN,UAAA;MAAA,IAAAC,iBAAA,EAAAf,YAAA;MAAA,OAAA3M,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAwN,UAAA;QAAA,kBAAAA,UAAA,CAAAtN,IAAA,GAAAsN,UAAA,CAAArN,IAAA;UAAA;YACxF;YACA9B,iBAAiB,CAAAvE,aAAA,CAAAA,aAAA,KAAKgB,eAAe;cAAEC,SAAS,EAAEC,uBAAgB,CAACoN;YAAc,EAAC,CAAC;YAACoF,UAAA,CAAArN,IAAA;YAAA,OAC9EuK,2BAA2B,CAAC,CAAC;UAAA;YAEnC9P,KAAK,CAAC0E,OAAO,CAACyD,qBAAqB,CAACnF,cAAc,CAAC;YAAC4P,UAAA,CAAArN,IAAA;YAAA,OAC9CtC,GAAG,CAACwC,mBAAmB,CAAC,CAAC;UAAA;YAE/BC,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;YAC1DN,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;;YAEnC;YACMwC,iBAAiB,GAAGjT,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,qBAAqB,CAAC;YAC1D2O,YAAY,GAAGlS,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,oBAAoB,CAAC,EAE1D;YACAA,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAAC;cACtBC,IAAI,EAAE;gBACJP,IAAI,EAAEqB,wBAAiB,CAACC,iBAAiB;gBACzCV,GAAG,EAAE;kBAACjP,UAAU,EAAE;gBAAG,CAAC;gBACtBkP,mBAAmB,EAAE;cACvB;YACF,CAAiB,CAAC;;YAElB;YAAAkB,UAAA,CAAArN,IAAA;YAAA,OACMrE,aAAa,CAAC,CAAC;UAAA;YAErB;YACAwE,MAAM,CAACiN,iBAAiB,CAAC,CAACE,gBAAgB,CAAC,CAAC;YAC5CnN,MAAM,CAACkM,YAAY,CAAC,CAACnH,oBAAoB,CAACH,oCAAyB,CAAC;;YAEpE;YACA5E,MAAM,CAACzC,GAAG,CAACoK,kBAAkB,CAAC,CAAC,CAAC,CAACvH,OAAO,CAACxE,UAAU,CAAC2C,MAAM,CAAC,CAAC,CAAC,CAAC;YAC9DyB,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;UAAC;UAAA;YAAA,OAAA4M,UAAA,CAAA1L,IAAA;QAAA;MAAA,GAAAwL,SAAA;IAAA,CAC5D,GAAC;IAEF3N,EAAE,CAAC,0FAA0F,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAA4N,UAAA;MAAA,IAAAlB,YAAA,EAAAzO,UAAA,EAAA0O,aAAA,EAAAkB,aAAA,EAAAC,SAAA,EAAAjB,YAAA;MAAA,OAAA9M,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA6N,UAAA;QAAA,kBAAAA,UAAA,CAAA3N,IAAA,GAAA2N,UAAA,CAAA1N,IAAA;UAAA;YAAA0N,UAAA,CAAA1N,IAAA;YAAA,OACvFuK,2BAA2B,CAAC,CAAC;UAAA;YAC7B8B,YAAY,GAAGlS,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,oBAAoB,CAAC;YACpDE,UAAU,GAAGzD,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,6BAA6B,CAAC;YAC3D4O,aAAa,GAAGnS,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,qBAAqB,CAAC,EAE5D;YACAA,GAAG,CAACuM,WAAW,CAACC,UAAU,CAAC,CAAC;YAC5B/J,MAAM,CAAC,IAAAgK,KAAA,CAAAzR,OAAA,EAAYgF,GAAG,CAACuM,WAAW,CAACG,cAAc,CAAC,CAAC,CAAC,CAACvQ,MAAM,CAAC,CAAC6N,IAAI,CAAC,CAAC,CAAC;YAE9D8F,aAAa,GAAGrT,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,qBAAqB,CAAC;YAEtD+P,SAAS,GAAG/P,GAAG,CAACuG,QAAQ,GAAG,CAAC,GAAG,CAAC,EAEtC;YACMuI,YAAY,GAAG;cACnBX,IAAI,EAAE;gBACJP,IAAI,EAAEqB,wBAAiB,CAACC,iBAAiB;gBACzCV,GAAG,EAAE;kBAACjP,UAAU,EAAE;gBAAG,CAAC;gBACtBkP,mBAAmB,EAAEsB;cACvB;YACF,CAAC;YAED/P,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAACY,YAAY,CAAC;YAACkB,UAAA,CAAA1N,IAAA;YAAA,OAChCrE,aAAa,CAAC,CAAC;UAAA;YAErB;YACAwE,MAAM,CAACqN,aAAa,CAAC,CAACF,gBAAgB,CAAC,CAAC;YACxCnN,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACoC,aAAa,CAAC,CAAC;YACrC5M,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAAC2B,QAAQ,CAAC;YAC5DhC,MAAM,CAACrE,WAAW,CAAC,CAAC6R,cAAc,CAAC/M,mBAAW,CAACoC,YAAY,CAAC;YAC5D7C,MAAM,CAACzC,GAAG,CAACkQ,cAAc,CAAC,CAACjF,aAAa,CAACjH,SAAS,CAAC;YACnDvB,MAAM,CAACzC,GAAG,CAAC0L,aAAa,CAAC,CAACT,aAAa,CAACjH,SAAS,CAAC;YAClDvB,MAAM,CAACkM,YAAY,CAAC,CAACjM,kBAAkB,CAAC2E,oCAAyB,CAAC;YAClE5E,MAAM,CAACvC,UAAU,CAAC,CAACiG,GAAG,CAACC,UAAU,CAAC,CAAC;YACnC3D,MAAM,CAACmM,aAAa,CAAC,CAACzI,GAAG,CAACC,UAAU,CAAC,CAAC;YACtC3D,MAAM,CAACzC,GAAG,CAACoN,gBAAgB,CAAC,CAACnC,aAAa,CAAC,IAAI,CAAC;YAChDxI,MAAM,CAAChF,OAAO,CAAC,CAACwF,cAAc,CAC5B,+DAA+D,EAC/D;cAACM,IAAI,EAAEC,4BAAiB;cAAEb,MAAM,EAAEF,MAAM,CAACwG,GAAG,CAAC6E,MAAM;YAAC,CACtD,CAAC;YAEDa,YAAY,CAAC9I,SAAS,CAAC,CAAC;;YAExB;YACA7F,GAAG,CAACuM,WAAW,CAAC4D,cAAc,GAAG,CAAC,CAAC;YACnCpT,KAAK,CAAC0E,OAAO,CAACyD,qBAAqB,CAACnF,cAAc,CAAC;;YAEnD;YAAAiQ,UAAA,CAAA1N,IAAA;YAAA,OACMtC,GAAG,CAACsH,kBAAkB,CAAC8I,qCAA0B,CAAC;UAAA;YAAAJ,UAAA,CAAA1N,IAAA;YAAA,OAClDrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC,IAAAgK,KAAA,CAAAzR,OAAA,EAAYgF,GAAG,CAACuM,WAAW,CAACG,cAAc,CAAC,CAAC,CAAC,CAACvQ,MAAM,CAAC,CAAC6N,IAAI,CAAC,CAAC,CAAC;YACpE;YACAvH,MAAM,CAACzC,GAAG,CAAC4C,SAAS,CAAC,CAAC,CAAC,CAACC,OAAO,CAACC,yBAAkB,CAACC,MAAM,CAAC;YAC1DN,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;YACnCzK,MAAM,CAACkM,YAAY,CAAC,CAACjM,kBAAkB,CAAC0N,qCAA0B,CAAC;YACnE3N,MAAM,CAACvC,UAAU,CAAC,CAACwC,kBAAkB,CAAC0N,qCAA0B,CAAC;YACjE3N,MAAM,CAACmM,aAAa,CAAC,CAACzI,GAAG,CAACC,UAAU,CAAC,CAAC;YACtC3D,MAAM,CAACzC,GAAG,CAACoN,gBAAgB,CAAC,CAACnC,aAAa,CAAC,KAAK,CAAC;UAAC;UAAA;YAAA,OAAA+E,UAAA,CAAA/L,IAAA;QAAA;MAAA,GAAA4L,SAAA;IAAA,CACnD,GAAC;IAEF/N,EAAE,CAAC,qDAAqD,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAoO,UAAA;MAAA,IAAA1B,YAAA,EAAAzO,UAAA,EAAA0O,aAAA,EAAAkB,aAAA,EAAAQ,cAAA,EAAAC,WAAA;MAAA,OAAAvO,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAqO,UAAA;QAAA,kBAAAA,UAAA,CAAAnO,IAAA,GAAAmO,UAAA,CAAAlO,IAAA;UAAA;YAAAkO,UAAA,CAAAlO,IAAA;YAAA,OAClDuK,2BAA2B,CAAC,CAAC;UAAA;YACnC9P,KAAK,CAAC0E,OAAO,CAACyD,qBAAqB,CAACnF,cAAc,CAAC;YAC7C4O,YAAY,GAAGlS,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,oBAAoB,CAAC;YACpDE,UAAU,GAAGzD,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,6BAA6B,CAAC;YAC3D4O,aAAa,GAAGnS,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,qBAAqB,CAAC;YACtD8P,aAAa,GAAGrT,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,qBAAqB,CAAC;YACtDsQ,cAAc,GAAG7T,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,2BAA2B,CAAC;YAC7DuQ,WAAW,GAAG9T,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,gCAAgC,CAAC;YAErEA,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAAC;cACtBC,IAAI,EAAE;gBACJP,IAAI,EAAEqB,wBAAiB,CAACC,iBAAiB;gBACzCV,GAAG,EAAE;kBAACjP,UAAU,EAAE;gBAAG,CAAC;gBACtBkP,mBAAmB,EAAE;cACvB;YACF,CAAiB,CAAC;YAAC+B,UAAA,CAAAlO,IAAA;YAAA,OAEbrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC/E,OAAO,CAAC,CAACuF,cAAc,CAC5B,2CAA2C,EAC3CR,MAAM,CAACa,gBAAgB,CAAC;cACtBC,IAAI,EAAEC,4BAAiB;cACvBb,MAAM,EAAE;YACV,CAAC,CACH,CAAC;YACDF,MAAM,CAAC9E,cAAc,CAAC,CAAC+E,kBAAkB,CACvC;cAACnD,UAAU,EAAE;YAAG,CAAC,EACjBkD,MAAM,CAAC4C,QAAQ,CAAC,CAAC,EACjB;cACE9B,IAAI,EAAEC,4BAAiB;cACvBb,MAAM,EAAE8N;YACV,CAAC,EACDhO,MAAM,CAAC4C,QAAQ,CAAC,CAClB,CAAC;YAED5C,MAAM,CAACrE,WAAW,CAAC,CAACoJ,oBAAoB,CAACtE,mBAAW,CAACyB,KAAK,EAAEX,SAAS,EAAEvB,MAAM,CAAC4C,QAAQ,CAAC,CAAC,CAAC;YACzF5C,MAAM,CAACrE,WAAW,CAAC,CAACoJ,oBAAoB,CAACtE,mBAAW,CAACoC,YAAY,CAAC;YAClE7C,MAAM,CAACqN,aAAa,CAAC,CAAC9M,eAAe,CAAC,CAAC,CAAC;YACxCP,MAAM,CAACkM,YAAY,CAAC,CAACxI,GAAG,CAACyJ,gBAAgB,CAAC,CAAC;YAC3CnN,MAAM,CAACvC,UAAU,CAAC,CAACiG,GAAG,CAACyJ,gBAAgB,CAAC,CAAC;YACzCnN,MAAM,CAACmM,aAAa,CAAC,CAACzI,GAAG,CAACyJ,gBAAgB,CAAC,CAAC;YAC5CnN,MAAM,CAACzC,GAAG,CAACoN,gBAAgB,CAAC,CAACnC,aAAa,CAAC,KAAK,CAAC;YAEjDxI,MAAM,CAAC6N,cAAc,CAAC,CAAC5N,kBAAkB,CAAC+N,yBAAc,CAAC;YACzDhO,MAAM,CAAC8N,WAAW,CAAC,CAAC7N,kBAAkB,CAAC+N,yBAAc,CAAC;UAAC;UAAA;YAAA,OAAAD,UAAA,CAAAvM,IAAA;QAAA;MAAA,GAAAoM,SAAA;IAAA,CACxD,GAAC;IAEFvO,EAAE,CAAC,wCAAwC,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAyO,UAAA;MAAA,IAAAC,qBAAA;MAAA,IAAAC,YAAA,EAAApD,cAAA,EAAAsC,aAAA,EAAAxP,WAAA;MAAA,OAAA0B,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA0O,UAAA;QAAA,kBAAAA,UAAA,CAAAxO,IAAA,GAAAwO,UAAA,CAAAvO,IAAA;UAAA;YAAAuO,UAAA,CAAAvO,IAAA;YAAA,OACrCuK,2BAA2B,CAAC,CAAC;UAAA;YAC7B+D,YAAY,GAAGnU,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,qBAAqB,CAAC;YACrDwN,cAAc,GAAG/Q,IAAI,CAACc,KAAK,CAACmQ,MAAM,CAACC,SAAS,EAAE,aAAa,CAAC;YAC5DmC,aAAa,GAAGrT,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,qBAAqB,CAAC;YACtDM,WAAW,GAAG7D,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,gBAAgB,CAAC;YAErDA,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAAC;cACtBC,IAAI,EAAE;gBACJP,IAAI,EAAEqB,wBAAiB,CAACC,iBAAiB;gBACzCV,GAAG,EAAE;kBAACjP,UAAU,EAAE,GAAG;kBAAEE,OAAO,EAAE;oBAAC,aAAa,EAAE;kBAAE;gBAAC,CAAC;gBACpDgP,mBAAmB,EAAE;cACvB;YACF,CAAiB,CAAC;YAACoC,UAAA,CAAAvO,IAAA;YAAA,OACbrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAAC/E,OAAO,CAAC,CAACuF,cAAc,CAC5B,2CAA2C,EAC3CR,MAAM,CAACa,gBAAgB,CAAC;cACtBC,IAAI,EAAEC,4BAAiB;cACvBb,MAAM,EAAE;YACV,CAAC,CACH,CAAC;YACDF,MAAM,CAAC9E,cAAc,CAAC,CAAC+E,kBAAkB,CACvC;cAACnD,UAAU,EAAE,GAAG;cAAEE,OAAO,EAAE;gBAAC,aAAa,EAAE;cAAE;YAAC,CAAC,EAC/CgD,MAAM,CAAC4C,QAAQ,CAAC,CAAC,EACjB;cACE9B,IAAI,EAAEC,4BAAiB;cACvBb,MAAM,EAAE8N;YACV,CAAC,EACDhO,MAAM,CAAC4C,QAAQ,CAAC,CAClB,CAAC;YACD5C,MAAM,CAACnC,WAAW,CAAC,CAACoC,kBAAkB,CAAC,EAAE,EAAE,qBAAqB,CAAC;YACjED,MAAM,CAACqN,aAAa,CAAC,CAAC9M,eAAe,CAAC,CAAC,CAAC;YACxCP,MAAM,CAACzC,GAAG,CAACoN,gBAAgB,CAAC,CAACnC,aAAa,CAAC,KAAK,CAAC;YACjDxI,MAAM,CAACzC,GAAG,CAACkQ,cAAc,CAAC,CAAClG,IAAI,CAAChG,SAAS,CAAC;YAC1CvB,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACoC,aAAa,CAAC,CAAC;YAErC5S,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAAC2K,UAAA,CAAAvO,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACmO,YAAY,CAAC,CAAClO,kBAAkB,EAAAiO,qBAAA,GACrC3Q,GAAG,CAAC8Q,UAAU,CAAC7R,MAAM,cAAA0R,qBAAA,uBAArBA,qBAAA,CAAuBhS,GAAG,EAC1BqB,GAAG,CAAC8Q,UAAU,CAAC9B,iBAAiB,EAChC,SACF,CAAC;YACDvM,MAAM,CAACnF,MAAM,CAAC,CAAC2F,cAAc,CAAC,qCAAqC,EAAE;cACnEM,IAAI,EAAEC,4BAAiB;cACvBb,MAAM,EAAE;YACV,CAAC,CAAC;YACFF,MAAM,CAACzC,GAAG,CAACiN,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;YACnCzK,MAAM,CAAC+K,cAAc,CAAC,CAAChG,oBAAoB,CACzC/E,MAAM,CAACa,gBAAgB,CAAC;cACtBsK,IAAI,EAAE,iBAAiB;cACvBC,WAAW,EAAEpL,MAAM,CAACwG,GAAG,CAAC6E,MAAM,CAAC;cAC/BC,SAAS,EAAEtL,MAAM,CAACwG,GAAG,CAAC6E,MAAM,CAAC;cAC7BE,QAAQ,EAAEvL,MAAM,CAACwG,GAAG,CAAChD,MAAM,CAAC;cAC5BgI,mBAAmB,EAAExL,MAAM,CAACwG,GAAG,CAAChD,MAAM,CAAC;cACvC9G,GAAG,EAAEsD,MAAM,CAACwG,GAAG,CAAC6E,MAAM;YACxB,CAAC,CACH,CAAC;UAAC;UAAA;YAAA,OAAA+C,UAAA,CAAA5M,IAAA;QAAA;MAAA,GAAAyM,SAAA;IAAA,CACH,GAAC;IAEF5O,EAAE,CAAC,gEAAgE,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAA8O,UAAA;MAAA,IAAAzQ,WAAA;MAAA,OAAA0B,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA6O,UAAA;QAAA,kBAAAA,UAAA,CAAA3O,IAAA,GAAA2O,UAAA,CAAA1O,IAAA;UAAA;YAAA0O,UAAA,CAAA1O,IAAA;YAAA,OAC7DuK,2BAA2B,CAAC,CAAC;UAAA;YACnC;YACA7M,GAAG,CAACmN,mBAAmB,CAAC,CAAC;YACzBnN,GAAG,CAACiR,SAAS,CAACnO,yBAAkB,CAAC2B,QAAQ,CAAC;YACpCnE,WAAW,GAAG7D,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,gBAAgB,CAAC,EACrD;YACAvD,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAS,qBAAqB,CAAC,CAACuC,mBAAmB,CAAC,EAAE,CAAC;YACrExF,KAAK,CAAC0E,OAAO,CAACsD,qBAAqB,CAACpF,oBAAoB,CAAC;;YAEzD;YAAAqR,UAAA,CAAA1O,IAAA;YAAA,OACOtC,GAAG,CAASkR,kBAAkB,CAAC,CAAC;UAAA;YAEvCzU,IAAI,CAACuJ,mBAAmB,CAAC,EAAE,GAAGE,8BAAmB,CAAC;YAAC8K,UAAA,CAAA1O,IAAA;YAAA,OAC7CrE,aAAa,CAAC,CAAC;UAAA;YAErBwE,MAAM,CAACnC,WAAW,CAAC,CAAC2C,cAAc,CAChCtD,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,EAC3C,oBACF,CAAC;YACDgD,MAAM,CAAEzC,GAAG,CAAS+F,UAAU,CAAC,CAAClD,OAAO,CAAClD,oBAAoB,CAACF,OAAO,CAAC,aAAa,CAAC,CAAC;YAEpFhD,IAAI,CAACkF,aAAa,CAAC,CAAC;UAAC;UAAA;YAAA,OAAAqP,UAAA,CAAA/M,IAAA;QAAA;MAAA,GAAA8M,SAAA;IAAA,CACtB,GAAC;IAEFjP,EAAE,CAAC,4FAA4F,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAkP,UAAA;MAAA,IAAA7Q,WAAA,EAAAyP,SAAA;MAAA,OAAA/N,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAiP,UAAA;QAAA,kBAAAA,UAAA,CAAA/O,IAAA,GAAA+O,UAAA,CAAA9O,IAAA;UAAA;YAAA8O,UAAA,CAAA9O,IAAA;YAAA,OACzFuK,2BAA2B,CAAC,CAAC;UAAA;YAC7BvM,WAAW,GAAG7D,IAAI,CAACc,KAAK,CAACyC,GAAG,EAAE,gBAAgB,CAAC,EACrD;YACAjD,KAAK,CAAC0E,OAAO,CAACsD,qBAAqB,CAAC;cAClCxF,UAAU,EAAE,GAAG;cACfT,IAAI,EAAEU,kCAAgB;cACtBC,OAAO,EAAE;gBAAC,aAAa,EAAE;cAAE;YAC7B,CAAC,CAAC;;YAEF;YACMsQ,SAAS,GAAG/P,GAAG,CAACuG,QAAQ,GAAG,CAAC,GAAG,CAAC;YACtCvG,GAAG,CAACiN,SAAS,CAACiB,SAAS,CAAC;cACtBC,IAAI,EAAE;gBACJP,IAAI,EAAEqB,wBAAiB,CAACC,iBAAiB;gBACzCV,GAAG,EAAE;kBAACjP,UAAU,EAAE;gBAAG,CAAC;gBACtBkP,mBAAmB,EAAEsB;cACvB;YACF,CAAiB,CAAC;YAACqB,UAAA,CAAA9O,IAAA;YAAA,OAEbrE,aAAa,CAAC,CAAC;UAAA;YAErB;YACAwE,MAAM,CAACnC,WAAW,CAAC,CAACoC,kBAAkB,CAAC,EAAE,EAAE2E,oCAAyB,CAAC;YACrE5E,MAAM,CAACzC,GAAG,CAAC+F,UAAU,CAAC,CAAClD,OAAO,CAACmB,SAAS,CAAC,CAAC,CAAC;UAAA;UAAA;YAAA,OAAAoN,UAAA,CAAAnN,IAAA;QAAA;MAAA,GAAAkN,SAAA;IAAA,CAC5C,GAAC;EACJ,CAAC,CAAC;EAEFtT,QAAQ,CAAC,8BAA8B,EAAE,YAAM;IAC7CiE,EAAE,CAAC,yCAAyC,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAAoP,UAAA;MAAA,IAAAC,kBAAA,EAAAC,MAAA;MAAA,OAAAvP,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAAqP,UAAA;QAAA,kBAAAA,UAAA,CAAAnP,IAAA,GAAAmP,UAAA,CAAAlP,IAAA;UAAA;YACtCgP,kBAAkB,GAAkC;cACxD/R,UAAU,EAAE;YACd,CAAC;YACDxC,KAAK,CAAC0E,OAAO,CAAC7D,iBAAiB,CAAC0T,kBAAkB,CAAC;YAACE,UAAA,CAAAlP,IAAA;YAAA,OAC/BtC,GAAG,CAACyR,eAAe,CAAC,CAAC;UAAA;YAApCF,MAAM,GAAAC,UAAA,CAAAE,IAAA;YAEZjP,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACwB,cAAc,CAAAhH,aAAA;cAClC0G,MAAM,EAAE,KAAK;cACbhE,GAAG;YAA4C,GAC5C,IAAAD,gCAAsB,EAAC,CAAC,CAC5B,CAAC;YACF+D,MAAM,CAAC8O,MAAM,CAAC,CAAC1O,OAAO,CAAC,IAAI,CAAC;UAAC;UAAA;YAAA,OAAA2O,UAAA,CAAAvN,IAAA;QAAA;MAAA,GAAAoN,SAAA;IAAA,CAC9B,GAAC;IAEFvP,EAAE,CAAC,0CAA0C,mBAAAC,kBAAA,CAAA/G,OAAA,eAAAgH,YAAA,CAAAhH,OAAA,CAAAiH,IAAA,CAAE,SAAA0P,UAAA;MAAA,IAAAC,kBAAA,EAAAL,MAAA;MAAA,OAAAvP,YAAA,CAAAhH,OAAA,CAAAmH,IAAA,WAAA0P,UAAA;QAAA,kBAAAA,UAAA,CAAAxP,IAAA,GAAAwP,UAAA,CAAAvP,IAAA;UAAA;YACvCsP,kBAAkB,GAAkC;cACxDrS,UAAU,EAAE;YACd,CAAC;YACDxC,KAAK,CAAC0E,OAAO,CAAC7D,iBAAiB,CAACgU,kBAAkB,CAAC;YAACC,UAAA,CAAAvP,IAAA;YAAA,OAC/BtC,GAAG,CAACyR,eAAe,CAAC,CAAC;UAAA;YAApCF,MAAM,GAAAM,UAAA,CAAAH,IAAA;YAEZjP,MAAM,CAAC1F,KAAK,CAAC0E,OAAO,CAAC,CAACwB,cAAc,CAAAhH,aAAA;cAClC0G,MAAM,EAAE,KAAK;cACbhE,GAAG;YAA4C,GAC5C,IAAAD,gCAAsB,EAAC,CAAC,CAC5B,CAAC;YACF+D,MAAM,CAAC8O,MAAM,CAAC,CAAC1O,OAAO,CAAC,KAAK,CAAC;UAAC;UAAA;YAAA,OAAAgP,UAAA,CAAA5N,IAAA;QAAA;MAAA,GAAA0N,SAAA;IAAA,CAC/B,GAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.mockPostResponse = exports.mockDeleteResponse = exports.URL = exports.DEVICE_ID = exports.CLIENT_DEVICE_URL = void 0;
|
|
8
|
+
var DEVICE_ID = exports.DEVICE_ID = '9381a370-b26b-3c5b-8901-4e8dab405dcc';
|
|
9
|
+
var CLIENT_DEVICE_URL = exports.CLIENT_DEVICE_URL = 'https://clientDeviceUrl';
|
|
10
|
+
var URL = exports.URL = 'https://wdm-intb.ciscospark.com/wdm/api/v1/';
|
|
11
|
+
var mockPostResponse = exports.mockPostResponse = {
|
|
12
|
+
userId: '8a67806f-fc4d-446b-a131-31e71ea5b0e9',
|
|
13
|
+
device: {
|
|
14
|
+
deviceId: 'beb3c025-8c6a-3c44-8f3d-9b7d65363ac1',
|
|
15
|
+
uri: 'https://wdm-intb.ciscospark.com/wdm/api/v1/calling/web/devices/beb3c025-8c6a-3c44-8f3d-9b7d65363ac1',
|
|
16
|
+
status: 'active',
|
|
17
|
+
lastSeen: '2022-04-05T05:08:46Z',
|
|
18
|
+
addresses: ['sip:pbs9p4cbr9_G6JJNI5DD5NP@64941297.int10.bcld.webex.com'],
|
|
19
|
+
clientDeviceUri: CLIENT_DEVICE_URL
|
|
20
|
+
},
|
|
21
|
+
keepaliveInterval: 30,
|
|
22
|
+
rehomingIntervalMin: 90,
|
|
23
|
+
rehomingIntervalMax: 180
|
|
24
|
+
};
|
|
25
|
+
var mockDeleteResponse = exports.mockDeleteResponse = {
|
|
26
|
+
userId: '8a67806f-fc4d-446b-a131-31e71ea5b0e9',
|
|
27
|
+
device: {
|
|
28
|
+
deviceId: DEVICE_ID,
|
|
29
|
+
uri: 'https://wdm-intb.ciscospark.com/wdm/api/v1/calling/web/devices/9381a370-b26b-3c5b-8901-4e8dab405dcc',
|
|
30
|
+
status: 'active',
|
|
31
|
+
lastSeen: '2022-04-05T05:16:37Z',
|
|
32
|
+
addresses: ['sip:pbs9p4cbr9_G6JJNI5DD5NP@64941297.int10.bcld.webex.com'],
|
|
33
|
+
clientDeviceUri: CLIENT_DEVICE_URL
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=registerFixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEVICE_ID","exports","CLIENT_DEVICE_URL","URL","mockPostResponse","userId","device","deviceId","uri","status","lastSeen","addresses","clientDeviceUri","keepaliveInterval","rehomingIntervalMin","rehomingIntervalMax","mockDeleteResponse"],"sources":["registerFixtures.ts"],"sourcesContent":["export const DEVICE_ID = '9381a370-b26b-3c5b-8901-4e8dab405dcc';\nexport const CLIENT_DEVICE_URL = 'https://clientDeviceUrl';\n\nexport const URL = 'https://wdm-intb.ciscospark.com/wdm/api/v1/';\nexport const mockPostResponse = {\n userId: '8a67806f-fc4d-446b-a131-31e71ea5b0e9',\n device: {\n deviceId: 'beb3c025-8c6a-3c44-8f3d-9b7d65363ac1',\n uri: 'https://wdm-intb.ciscospark.com/wdm/api/v1/calling/web/devices/beb3c025-8c6a-3c44-8f3d-9b7d65363ac1',\n status: 'active',\n lastSeen: '2022-04-05T05:08:46Z',\n addresses: ['sip:pbs9p4cbr9_G6JJNI5DD5NP@64941297.int10.bcld.webex.com'],\n clientDeviceUri: CLIENT_DEVICE_URL,\n },\n keepaliveInterval: 30,\n rehomingIntervalMin: 90,\n rehomingIntervalMax: 180,\n};\n\nexport const mockDeleteResponse = {\n userId: '8a67806f-fc4d-446b-a131-31e71ea5b0e9',\n device: {\n deviceId: DEVICE_ID,\n uri: 'https://wdm-intb.ciscospark.com/wdm/api/v1/calling/web/devices/9381a370-b26b-3c5b-8901-4e8dab405dcc',\n status: 'active',\n lastSeen: '2022-04-05T05:16:37Z',\n addresses: ['sip:pbs9p4cbr9_G6JJNI5DD5NP@64941297.int10.bcld.webex.com'],\n clientDeviceUri: CLIENT_DEVICE_URL,\n },\n};\n"],"mappings":";;;;;;;AAAO,IAAMA,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG,sCAAsC;AACxD,IAAME,iBAAiB,GAAAD,OAAA,CAAAC,iBAAA,GAAG,yBAAyB;AAEnD,IAAMC,GAAG,GAAAF,OAAA,CAAAE,GAAA,GAAG,6CAA6C;AACzD,IAAMC,gBAAgB,GAAAH,OAAA,CAAAG,gBAAA,GAAG;EAC9BC,MAAM,EAAE,sCAAsC;EAC9CC,MAAM,EAAE;IACNC,QAAQ,EAAE,sCAAsC;IAChDC,GAAG,EAAE,qGAAqG;IAC1GC,MAAM,EAAE,QAAQ;IAChBC,QAAQ,EAAE,sBAAsB;IAChCC,SAAS,EAAE,CAAC,2DAA2D,CAAC;IACxEC,eAAe,EAAEV;EACnB,CAAC;EACDW,iBAAiB,EAAE,EAAE;EACrBC,mBAAmB,EAAE,EAAE;EACvBC,mBAAmB,EAAE;AACvB,CAAC;AAEM,IAAMC,kBAAkB,GAAAf,OAAA,CAAAe,kBAAA,GAAG;EAChCX,MAAM,EAAE,sCAAsC;EAC9CC,MAAM,EAAE;IACNC,QAAQ,EAAEP,SAAS;IACnBQ,GAAG,EAAE,qGAAqG;IAC1GC,MAAM,EAAE,QAAQ;IAChBC,QAAQ,EAAE,sBAAsB;IAChCC,SAAS,EAAE,CAAC,2DAA2D,CAAC;IACxEC,eAAe,EAAEV;EACnB;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {Devices, IDeviceInfo, RegistrationStatus} from '../../common/types';\n\nexport type Header = {\n [key: string]: string;\n};\n\nexport type restoreRegistrationCallBack = (\n restoreData: IDeviceInfo,\n caller: string\n) => Promise<boolean>;\n\nexport type retry429CallBack = (retryAfter: number, caller: string) => void;\n\nexport type FailoverCacheState = {\n attempt: number;\n timeElapsed: number;\n retryScheduledTime: number;\n serverType: 'primary' | 'backup';\n};\n\n/**\n * Represents an interface for managing registration-related operations.\n */\nexport interface IRegistration {\n /**\n * Sets the primary and backup Mobius server URLs.\n *\n * @param primaryMobiusUris - An array of primary Mobius server URLs.\n * @param backupMobiusUris - An array of backup Mobius server URLs.\n */\n setMobiusServers(primaryMobiusUris: string[], backupMobiusUris: string[]): void;\n\n /**\n * Triggers the registration process with the given list of servers\n * Registration is attempted with primary and backup until it succeeds or the list is exhausted\n */\n triggerRegistration(): Promise<void>;\n\n /**\n * Checks if the device is currently registered.\n *\n */\n isDeviceRegistered(): boolean;\n\n /**\n * Sets the status of the registration.\n *\n * @param value - The registration status to set.\n */\n setStatus(value: RegistrationStatus): void;\n\n /**\n * Retrieves the current registration status.\n *\n */\n getStatus(): RegistrationStatus;\n\n /**\n * Retrieves information about the device as {@link IDeviceInfo}.\n *\n */\n getDeviceInfo(): IDeviceInfo;\n\n /**\n * Clears the keep-alive timer used for registration.\n */\n clearKeepaliveTimer(): void;\n\n /**\n * Deregisters the device.\n */\n deregister(): void;\n\n /**\n * Sets the active Mobius server URL to use for registration.\n *\n * @param url - The Mobius server URL to set as active.\n */\n setActiveMobiusUrl(url: string): void;\n\n /**\n * Retrieves the active Mobius server URL.\n *\n */\n getActiveMobiusUrl(): string;\n\n /**\n * Attempts to reconnect after a connection failure.\n *\n * @param caller - The caller's identifier for reconnection.\n */\n reconnectOnFailure(caller: string): Promise<void>;\n\n /**\n * Checks if a reconnection attempt is pending.\n *\n */\n isReconnectPending(): boolean;\n\n /**\n * Restores the connection and attempts refreshing existing registration with server.\n * Allows retry if not restored in the first attempt.\n *\n * @param retry - Set to `true` to trigger a retry after restoration.\n */\n handleConnectionRestoration(retry: boolean): Promise<boolean>;\n\n /**\n * Populate deviceInfo from a devices response (e.g., getDevices API).\n */\n setDeviceInfo(body: Devices): void;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
11
|
+
var _uuid = require("uuid");
|
|
12
|
+
var _types = require("../../common/types");
|
|
13
|
+
/* eslint-env worker */
|
|
14
|
+
|
|
15
|
+
var keepaliveTimer;
|
|
16
|
+
var messageHandler = function messageHandler(event) {
|
|
17
|
+
var type = event.data.type;
|
|
18
|
+
|
|
19
|
+
// TODO: Use APIRequest to make the request
|
|
20
|
+
var postKeepAlive = /*#__PURE__*/function () {
|
|
21
|
+
var _ref = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(accessToken, deviceUrl, url) {
|
|
22
|
+
var response;
|
|
23
|
+
return _regenerator.default.wrap(function (_context) {
|
|
24
|
+
while (1) switch (_context.prev = _context.next) {
|
|
25
|
+
case 0:
|
|
26
|
+
_context.next = 1;
|
|
27
|
+
return fetch("".concat(url, "/status"), {
|
|
28
|
+
method: _types.HTTP_METHODS.POST,
|
|
29
|
+
headers: {
|
|
30
|
+
'cisco-device-url': deviceUrl,
|
|
31
|
+
'spark-user-agent': 'webex-calling/beta',
|
|
32
|
+
Authorization: "".concat(accessToken),
|
|
33
|
+
trackingId: "web_worker_".concat((0, _uuid.v4)())
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
case 1:
|
|
37
|
+
response = _context.sent;
|
|
38
|
+
if (response.ok) {
|
|
39
|
+
_context.next = 2;
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
throw response;
|
|
43
|
+
case 2:
|
|
44
|
+
return _context.abrupt("return", response);
|
|
45
|
+
case 3:
|
|
46
|
+
case "end":
|
|
47
|
+
return _context.stop();
|
|
48
|
+
}
|
|
49
|
+
}, _callee);
|
|
50
|
+
}));
|
|
51
|
+
return function postKeepAlive(_x, _x2, _x3) {
|
|
52
|
+
return _ref.apply(this, arguments);
|
|
53
|
+
};
|
|
54
|
+
}();
|
|
55
|
+
if (type === _types.WorkerMessageType.START_KEEPALIVE) {
|
|
56
|
+
var keepAliveRetryCount = 0;
|
|
57
|
+
var _event$data = event.data,
|
|
58
|
+
accessToken = _event$data.accessToken,
|
|
59
|
+
deviceUrl = _event$data.deviceUrl,
|
|
60
|
+
interval = _event$data.interval,
|
|
61
|
+
retryCountThreshold = _event$data.retryCountThreshold,
|
|
62
|
+
url = _event$data.url;
|
|
63
|
+
if (keepaliveTimer) {
|
|
64
|
+
clearInterval(keepaliveTimer);
|
|
65
|
+
keepaliveTimer = undefined;
|
|
66
|
+
}
|
|
67
|
+
keepaliveTimer = setInterval(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
68
|
+
var res, statusCode, _err$headers, _err$headers2, headers, error, _t;
|
|
69
|
+
return _regenerator.default.wrap(function (_context2) {
|
|
70
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
71
|
+
case 0:
|
|
72
|
+
if (!(keepAliveRetryCount < retryCountThreshold)) {
|
|
73
|
+
_context2.next = 4;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
_context2.prev = 1;
|
|
77
|
+
_context2.next = 2;
|
|
78
|
+
return postKeepAlive(accessToken, deviceUrl, url);
|
|
79
|
+
case 2:
|
|
80
|
+
res = _context2.sent;
|
|
81
|
+
statusCode = res.status;
|
|
82
|
+
if (keepAliveRetryCount > 0) {
|
|
83
|
+
postMessage({
|
|
84
|
+
type: _types.WorkerMessageType.KEEPALIVE_SUCCESS,
|
|
85
|
+
statusCode: statusCode
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
keepAliveRetryCount = 0;
|
|
89
|
+
_context2.next = 4;
|
|
90
|
+
break;
|
|
91
|
+
case 3:
|
|
92
|
+
_context2.prev = 3;
|
|
93
|
+
_t = _context2["catch"](1);
|
|
94
|
+
headers = {};
|
|
95
|
+
if ((_err$headers = _t.headers) !== null && _err$headers !== void 0 && _err$headers.has('Retry-After')) {
|
|
96
|
+
headers['retry-after'] = _t.headers.get('Retry-After');
|
|
97
|
+
}
|
|
98
|
+
if ((_err$headers2 = _t.headers) !== null && _err$headers2 !== void 0 && _err$headers2.has('Trackingid')) {
|
|
99
|
+
// eslint-disable-next-line dot-notation
|
|
100
|
+
headers['trackingid'] = _t.headers.get('Trackingid');
|
|
101
|
+
}
|
|
102
|
+
error = {
|
|
103
|
+
headers: headers,
|
|
104
|
+
statusCode: _t.status,
|
|
105
|
+
statusText: _t.statusText,
|
|
106
|
+
type: _t.type
|
|
107
|
+
};
|
|
108
|
+
keepAliveRetryCount += 1;
|
|
109
|
+
postMessage({
|
|
110
|
+
type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
|
|
111
|
+
err: error,
|
|
112
|
+
keepAliveRetryCount: keepAliveRetryCount
|
|
113
|
+
});
|
|
114
|
+
case 4:
|
|
115
|
+
case "end":
|
|
116
|
+
return _context2.stop();
|
|
117
|
+
}
|
|
118
|
+
}, _callee2, null, [[1, 3]]);
|
|
119
|
+
})), interval * 1000);
|
|
120
|
+
}
|
|
121
|
+
if (type === _types.WorkerMessageType.CLEAR_KEEPALIVE) {
|
|
122
|
+
if (keepaliveTimer) {
|
|
123
|
+
clearInterval(keepaliveTimer);
|
|
124
|
+
keepaliveTimer = undefined;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
// eslint-disable-next-line no-restricted-globals
|
|
130
|
+
self.addEventListener('message', messageHandler);
|
|
131
|
+
var _default = exports.default = messageHandler;
|
|
132
|
+
//# sourceMappingURL=webWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_uuid","require","_types","keepaliveTimer","messageHandler","event","type","data","postKeepAlive","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","accessToken","deviceUrl","url","response","wrap","_context","prev","next","fetch","concat","method","HTTP_METHODS","POST","headers","Authorization","trackingId","uuid","sent","ok","abrupt","stop","_x","_x2","_x3","apply","arguments","WorkerMessageType","START_KEEPALIVE","keepAliveRetryCount","_event$data","interval","retryCountThreshold","clearInterval","undefined","setInterval","_callee2","res","statusCode","_err$headers","_err$headers2","error","_t","_context2","status","postMessage","KEEPALIVE_SUCCESS","has","get","statusText","KEEPALIVE_FAILURE","err","CLEAR_KEEPALIVE","self","addEventListener","_default","exports"],"sources":["webWorker.ts"],"sourcesContent":["/* eslint-env worker */\nimport {v4 as uuid} from 'uuid';\nimport {HTTP_METHODS, KeepaliveStatusMessage, WorkerMessageType} from '../../common/types';\n\nlet keepaliveTimer: NodeJS.Timeout | undefined;\n\nconst messageHandler = (event: MessageEvent) => {\n const {type} = event.data;\n\n // TODO: Use APIRequest to make the request\n const postKeepAlive = async (accessToken: string, deviceUrl: string, url: string) => {\n const response = await fetch(`${url}/status`, {\n method: HTTP_METHODS.POST,\n headers: {\n 'cisco-device-url': deviceUrl,\n 'spark-user-agent': 'webex-calling/beta',\n Authorization: `${accessToken}`,\n trackingId: `web_worker_${uuid()}`,\n },\n });\n\n if (!response.ok) {\n throw response;\n }\n\n return response;\n };\n\n if (type === WorkerMessageType.START_KEEPALIVE) {\n let keepAliveRetryCount = 0;\n const {accessToken, deviceUrl, interval, retryCountThreshold, url} = event.data;\n\n if (keepaliveTimer) {\n clearInterval(keepaliveTimer);\n keepaliveTimer = undefined;\n }\n\n keepaliveTimer = setInterval(async () => {\n if (keepAliveRetryCount < retryCountThreshold) {\n try {\n const res = await postKeepAlive(accessToken, deviceUrl, url);\n const statusCode = res.status;\n if (keepAliveRetryCount > 0) {\n postMessage({\n type: WorkerMessageType.KEEPALIVE_SUCCESS,\n statusCode,\n } as KeepaliveStatusMessage);\n }\n keepAliveRetryCount = 0;\n } catch (err: any) {\n const headers = {} as Record<string, string>;\n if (err.headers?.has('Retry-After')) {\n headers['retry-after'] = err.headers.get('Retry-After');\n }\n\n if (err.headers?.has('Trackingid')) {\n // eslint-disable-next-line dot-notation\n headers['trackingid'] = err.headers.get('Trackingid');\n }\n\n const error = {\n headers,\n statusCode: err.status,\n statusText: err.statusText,\n type: err.type,\n };\n keepAliveRetryCount += 1;\n postMessage({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: error,\n keepAliveRetryCount,\n } as KeepaliveStatusMessage);\n }\n }\n }, interval * 1000);\n }\n\n if (type === WorkerMessageType.CLEAR_KEEPALIVE) {\n if (keepaliveTimer) {\n clearInterval(keepaliveTimer);\n keepaliveTimer = undefined;\n }\n }\n};\n\n// eslint-disable-next-line no-restricted-globals\nself.addEventListener('message', messageHandler);\nexport default messageHandler;\n"],"mappings":"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","ignoreList":[]}
|