@vgroup/dialbox 0.4.19 → 0.4.21
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/esm2020/lib/components/call-progress/call-progress.component.mjs +9 -6
- package/esm2020/lib/service/extension.service.mjs +3 -3
- package/fesm2015/vgroup-dialbox.mjs +12 -9
- package/fesm2015/vgroup-dialbox.mjs.map +1 -1
- package/fesm2020/vgroup-dialbox.mjs +10 -7
- package/fesm2020/vgroup-dialbox.mjs.map +1 -1
- package/lib/service/extension.service.d.ts +3 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgroup-dialbox.mjs","sources":["../../../projects/dialbox/src/keypad.ts","../../../projects/dialbox/src/lib/environments/environments.ts","../../../projects/dialbox/src/lib/service/ip-address.service.ts","../../../projects/dialbox/src/lib/service/extension.service.ts","../../../projects/dialbox/src/lib/service/Notification.service.ts","../../../projects/dialbox/src/lib/service/twilio.service.ts","../../../projects/dialbox/src/lib/service/incomeing-call-socket.service.ts","../../../projects/dialbox/src/lib/components/call-progress/call-progress.component.ts","../../../projects/dialbox/src/lib/components/call-progress/call-progress.component.html","../../../projects/dialbox/src/lib/dialbox.component.ts","../../../projects/dialbox/src/lib/dialbox.component.html","../../../projects/dialbox/src/lib/shared/global-constant.ts","../../../projects/dialbox/src/lib/components/call-progress/incoming-call/incoming-call.component.ts","../../../projects/dialbox/src/lib/components/call-progress/incoming-call/incoming-call.component.html","../../../projects/dialbox/src/lib/components/caller-id-dialog/caller-id-dialog.component.ts","../../../projects/dialbox/src/lib/components/caller-id-dialog/caller-id-dialog.component.html","../../../projects/dialbox/src/lib/dialbox.module.ts","../../../projects/dialbox/src/public-api.ts","../../../projects/dialbox/src/vgroup-dialbox.ts"],"sourcesContent":["\r\nexport const keypad: any[] =\r\n [\r\n {\r\n num: 1,\r\n text: 'voicemail'\r\n },\r\n {\r\n num: 2,\r\n text: 'abc'\r\n },\r\n {\r\n num: 3,\r\n text: 'def'\r\n }, {\r\n num: 4,\r\n text: 'ghi'\r\n }, {\r\n num: 5,\r\n text: 'jkl'\r\n }, {\r\n num: 6,\r\n text: 'mno'\r\n }, {\r\n num: 7,\r\n text: 'pqrs'\r\n }, {\r\n num: 8,\r\n text: 'tuv'\r\n }, {\r\n num: 9,\r\n text: 'wxyz'\r\n },\r\n {\r\n num: '*',\r\n text: ' '\r\n },\r\n {\r\n num: 0,\r\n text: '+'\r\n },\r\n {\r\n num: '#',\r\n text: ''\r\n }\r\n ];\r\n","export const environment = {\r\n abb: \"d\",\r\n production: false,\r\n secureCookies: true,\r\n feUrl: 'https://dev.vgroupinc.com:91/',\r\n apiUrl: 'https://dev-api-t10.vgroupinc.com/dev_softphone_p91/',\r\n captchaKey: \"6LfpOmEaAAAAAGsI6JXlMzOl3b7rW4YmYXFDjldD\",\r\n websocketUrl: 'wss://dev-api-t10.vgroupinc.com/dev_softphone_p91/',\r\n stripePublishableKey: \"pk_test_51K6aTuBiNVV2TMlQfmBWY8jziwiDo0IZ3TrqWPqth1m32cpMAAg5Qpi2AlSMDEAX6hCZRBXoTzBB1uQQLc8B4tco00q2SgG6zO\",\r\n sessionTimeout: 15, //in mins,\r\n deviceType: \"web\",\r\n appVersion: \"2.3\",\r\n channelId: '61481b12e138eb7dc3007579',\r\n c2c_support_point_id: '60424735f74ac306c1bfa900',\r\n c2c_support_channel_id: '677f67f3be93ab507fbbfdfc',\r\n c2c_point_url: 'https://bit.ly/3blWnPv',\r\n c2c_call_label_id: 'ye2XFLfOHCr12GFVRzPh',// dev\r\n c2c_email_label_id: 'mvjVgOP2VCiYsVovQqdq',// dev\r\n radarAPIKey: 'prj_live_sk_569b6f639edde6120a26f703511c61aaecd3f7ef',\r\n firebase: {\r\n apiKey: \"AIzaSyCA8LSPrqlDq_thk26LhBQexAQeY6pkU5Y\",\r\n authDomain: \"softphone-d5777.firebaseapp.com\",\r\n projectId: \"softphone-d5777\",\r\n storageBucket: \"softphone-d5777.appspot.com\",\r\n messagingSenderId: \"850812494538\",\r\n appId: \"1:850812494538:web:74f8a30fc18e28ded78a33\",\r\n measurementId: \"G-NGXTSV9SH3\",\r\n vapidKey: \"BD6EgcQgbZTjOQfleG3YlEc0_SajB03prqTdDy-qGJkxTxezbq-A_qtuXE1l3yT47o8hnTAbTKBcH15D2AJB2To\"\r\n },\r\n perspectiveApiKey: 'AIzaSyClf32lvLH4QOy-vOnzLzwSNntKIgapH8s',\r\n keycloakURL: 'https://test-keycloak.vgroupinc.com/',\r\n keycloakRealm: 'vgroup-dev',\r\n keycloakClientId: 'c2c-softphone-app'\r\n};","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { environment } from \"../environments/environments\";\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class IpAddressService {\r\n private apiUrl = 'https://api.radar.io/v1/geocode/ip';\r\n\r\n constructor(private http: HttpClient) {}\r\n\r\n getIpAddressInfo(): Observable<any> {\r\n const authKey = environment.radarAPIKey;\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Authorization': authKey }),\r\n fraud: true\r\n };\r\n \r\n return this.http.get(this.apiUrl, httpOptions).pipe(\r\n catchError((error) => {\r\n return throwError(new Error(\"Network is blocking the server, please check the proxy or your network.\"));\r\n })\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http'\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\r\nimport { environment } from \"../environments/environments\";\r\nimport { catchError, debounceTime, map, switchMap } from 'rxjs/operators';\r\nimport { IpAddressService } from './ip-address.service';\r\n\r\nimport { forkJoin } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExtensionService {\r\n private callSid: string = '';\r\n private recordCall: any;\r\n setCallSid(callSid: string, recordCall: any) {\r\n this.callSid = callSid;\r\n this.recordCall = recordCall;\r\n }\r\n getCallSid(): { callSid: string; recordCall: any } {\r\n return {\r\n callSid: this.callSid,\r\n recordCall: this.recordCall\r\n };\r\n }\r\n\r\n public messageSource = new BehaviorSubject<any>('');\r\n private channelId = environment.channelId;\r\n currentMessage = this.messageSource.asObservable();\r\n \r\n platform='web';\r\n\r\n public dedicatedStateSource = new BehaviorSubject<any>('');\r\n dedicatedState = this.dedicatedStateSource.asObservable();\r\n\r\n\r\n public callerIdStateSource = new BehaviorSubject<any>('');\r\n callerIdState = this.callerIdStateSource.asObservable();\r\n\r\n public sendSmsSource = new BehaviorSubject<any>('');\r\n sendMessage = this.sendSmsSource.asObservable();\r\n\r\n public draftSmsSource = new BehaviorSubject<any>('');\r\n draftMessage = this.draftSmsSource.asObservable();\r\n\r\n public isInputFocus$ = new BehaviorSubject<boolean>(false);\r\n token: string = localStorage.getItem('ext_token') || '';\r\n isNewContactAdded = new BehaviorSubject<boolean>(false);\r\n isProfileUpdated = new BehaviorSubject<boolean>(false);\r\n\r\n private callerIdSubject = new BehaviorSubject<any>(null);\r\n callerId$ = this.callerIdSubject.asObservable();\r\n\r\n setCallerId(callerId: any) {\r\n this.callerIdSubject.next(callerId);\r\n }\r\n\r\n constructor(private http: HttpClient,\r\n private ipAddressService: IpAddressService\r\n )\r\n { }\r\n\r\n changeMessage(message: string) {\r\n this.messageSource.next(message)\r\n }\r\n\r\n GetUserUsage(token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/ext/usage', httpOptions);\r\n }\r\n\r\n GetUserProfile(token: string, data:any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/user', data, httpOptions);\r\n }\r\n\r\n\r\n UpdateProfile(userProfile: any, token: string): Observable<[]> {\r\n const userProfileObj = {\r\n \"billingAddress1\": userProfile.billingAddress1,\r\n \"billingAddress2\": userProfile.billingAddress2,\r\n \"billingCityid\": userProfile.billingCity,\r\n \"billingCountryid\": userProfile.billingCountry,\r\n \"billingStateid\": userProfile.billingState,\r\n \"billingZipid\": userProfile.billingZip,\r\n \"email\": userProfile.email,\r\n \"mobile\": userProfile.mobile,\r\n \"countrycode\": userProfile.countrycode,\r\n \"timezone\": userProfile.timezone,\r\n \"firstname\": userProfile.firstname,\r\n \"lastname\": userProfile.lastname,\r\n \"shippingAddress1\": (userProfile.shippingAddress1 !== null && userProfile.shippingAddress1 !== undefined && userProfile.shippingAddress1 !== \"\") ? userProfile.shippingAddress1 : userProfile.billingAddress1,\r\n \"shippingAddress2\": (userProfile.shippingAddress2 !== null && userProfile.shippingAddress2 !== undefined && userProfile.shippingAddress2 !== \"\") ? userProfile.shippingAddress2 : userProfile.billingAddress2,\r\n \"shippingCityid\": (userProfile.shippingCity !== null && userProfile.shippingCity !== undefined && userProfile.shippingCity !== \"\") ? userProfile.shippingCity : userProfile.billingCity,\r\n \"shippingCountryid\": (userProfile.shippingCountry !== null && userProfile.shippingCountry !== undefined && userProfile.shippingCountry !== \"\") ? userProfile.shippingCountry : userProfile.billingCountry,\r\n \"shippingStateid\": (userProfile.shippingState !== null && userProfile.shippingState !== undefined && userProfile.shippingState !== \"\") ? userProfile.shippingState : userProfile.billingState,\r\n \"shippingZipid\": (userProfile.shippingZip !== null && userProfile.shippingZip !== undefined && userProfile.shippingZip !== \"\") ? userProfile.shippingZip : userProfile.billingZip,\r\n \"imageId\": (userProfile.imageId),\r\n \"imageName\": (userProfile.imageName),\r\n \"companyName\": userProfile.companyName, \r\n \"companySize\": userProfile.companySize, \r\n \"companyFirstName\": userProfile.companyFirstName, \r\n \"companyLastName\": userProfile.companyLastName, \r\n \"companyContactNumber\": userProfile.companyContactNumber\r\n };\r\n\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.put<[]>(environment.apiUrl + '/utilities/ext/update', userProfileObj, httpOptions);\r\n }\r\n deleteProfilePhoto(token: string): Observable<[]> {\r\n const params = {\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + token }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/delete/profile/photo', params, httpOptions);\r\n\r\n }\r\n\r\n getOtpCode(countryCode: string, number: string, mode : string, token: string){\r\n\r\n\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const numberObj = {\r\n \"countrycode\": countryCode,\r\n \"number\": number,\r\n \"mode\" : mode\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/sms/otp', numberObj, httpOptions);\r\n }\r\n getVerifyMobile(countryName: string, countrycode: string, number: string, otp: string,token: string){\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const verifyObj = {\r\n \"countryName\": countryName,\r\n \"countrycode\": countrycode,\r\n \"number\": number,\r\n \"otp\": otp\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/sms/verify/otp', verifyObj,httpOptions);\r\n }\r\n connectWithStripe(token: string): Observable<[]> {\r\n const params = {\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + token }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/stripe/connect', params, httpOptions);\r\n\r\n }\r\n\r\n connectWithStripeRedirection(redirection: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Auth-Key': \"Bearer \" + token,\r\n \"redirection\": redirection\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + token }) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/ext/stripe/connect/${redirection}`, params, httpOptions);\r\n }\r\n\r\n\r\n validateStripeSession(sessionId: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const data = {\r\n \"sessionid\": sessionId,\r\n };\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/validate/session', data, httpOptions);\r\n }\r\n\r\n loadPaymentMethods(token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/ext/payment/methods', httpOptions);\r\n }\r\n\r\n setPaymentDefaultMethod(paymentMethodId: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const data = {\r\n \"methodid\": paymentMethodId,\r\n };\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/update/default', data, httpOptions);\r\n }\r\n\r\n sendEmailVerifyLink(emailval: any, token: string): Observable<[]> {\r\n const params = {\r\n 'Auth-Key': \"Bearer \" + token,\r\n \"email\": emailval\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + token }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/verify/email', params, httpOptions);\r\n }\r\n\r\n VerifyEmailLink(key: string): Observable<[]> {\r\n const keyobj = { \"key\": key };\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/verify/request', keyobj, httpOptions);\r\n }\r\n\r\n DeleteMethod(paymentMethodId: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const data = {\r\n \"methodid\": paymentMethodId,\r\n };\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/detach/method', data, httpOptions);\r\n }\r\n\r\n VerifySession(token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/ext/verify/session', httpOptions);\r\n }\r\n\r\n GetAllCountryList(): Observable<string> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.get<string>(environment.apiUrl + '/global/master/ur/countrylist', httpOptions);\r\n }\r\n\r\n GetAllStateList(_countryId: any): Observable<string> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.get<string>(environment.apiUrl + '/global/master/ur/statelist/' + _countryId,\r\n httpOptions);\r\n }\r\n\r\n LogoutUser(authKey: any): Observable<[]> {\r\n const auth = { \"Auth-Key\": authKey }\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': authKey }) };\r\n return this.http.post<[]>(environment.apiUrl + '/client/user/logout', auth, httpOptions);\r\n }\r\n\r\n\r\n purchasedNumber(token: string): Observable<string> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<string>(environment.apiUrl + '/utilities/softphone/view/purchased/number', httpOptions);\r\n }\r\n\r\n availableNumber(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json;charset=UTF-8',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/available/number', dtModel, httpOptions);\r\n }\r\n\r\n urAvailableNumber(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json;charset=UTF-8',\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/ur/available/number', dtModel, httpOptions);\r\n }\r\n\r\n stagingNumber(token: string, dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/save/staging/number', dtModel, httpOptions);\r\n }\r\n\r\n saveCompanyDetail(dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/signup/company/details', dtModel, httpOptions);\r\n }\r\n\r\n saveAddressInfo(dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/signup/address', dtModel, httpOptions);\r\n }\r\n\r\n saveStripeInfo(userId: string): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/stripe/connect/'+ userId, httpOptions);\r\n }\r\n\r\n saveCardInfo(dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/save/card/info', dtModel, httpOptions);\r\n }\r\n deleteCard(dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/delete/saved/card', dtModel, httpOptions);\r\n }\r\n purchasePlan(dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/ur/purchase/signup/number', dtModel, httpOptions);\r\n }\r\n\r\n getUserStagingInfo(data: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/signup/staging',data, httpOptions);\r\n }\r\n\r\n costCheckOut(token: string, cost: any): Observable<string> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<string>(environment.apiUrl + '/utilities/softphone/number/checkout/' + cost, httpOptions);\r\n }\r\n buyNumber(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/purchase/number', dtModel, httpOptions);\r\n }\r\n\r\n fetchCallerId(token: string): Observable<string> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<string>(environment.apiUrl + '/utilities/softphone/fetch/callerid', httpOptions);\r\n }\r\n\r\n updateNumberLabel(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.put<[]>(environment.apiUrl + '/utilities/softphone/update/number/label', dtModel, httpOptions);\r\n }\r\n\r\n releaseNumber(token: string, twilioNum: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/delete/twilio/number', httpOptions);\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/softphone/delete/twilio/number/'+twilioNum, httpOptions);\r\n }\r\n\r\n // Call forwarding api's\r\n\r\n sendOTP(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/send/otp', dtModel, httpOptions);\r\n }\r\n verifyOTP(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/verify/otp', dtModel, httpOptions);\r\n }\r\n updateCallForwarding(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/configure/call/forwarding', dtModel, httpOptions);\r\n }\r\n getSingleNumForwardingSetting(token:string, number:string){\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/softphone/view/call/forwarding/'+number, httpOptions);\r\n }\r\n deleteCallForwarding(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/call/forwarding/action', dtModel, httpOptions);\r\n }\r\n \r\n\r\n\r\n //calling prefernece api\r\n displayID(token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/softphone/display/callerids', httpOptions);\r\n }\r\n verifyNumber(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/add/callerid', dtModel, httpOptions);\r\n }\r\n\r\n verifyStatus(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/softphone/callerid/status/' + dtModel, httpOptions);\r\n }\r\n\r\n existingListmakeCallerID(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/make/callerid', dtModel, httpOptions);\r\n }\r\n\r\n makeCallerID(token: string, dtModel: any, number: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/softphone/markas/callerid/${number}`, dtModel, httpOptions);\r\n }\r\n\r\n deleteCallerID(token: string, dtModel: any, id: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/softphone/delete/callerid/${id}`, dtModel, httpOptions);\r\n }\r\n\r\n deregisterCallerID(token: string, dtModel: any, id: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/softphone/deregister/callerid/${id}`, dtModel, httpOptions);\r\n }\r\n\r\n updateCallerIDLabel(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.put<[]>(environment.apiUrl + '/utilities/softphone/update/callerid/label', dtModel, httpOptions);\r\n }\r\n\r\n // initiateCall(payload: any): Observable<any> {\r\n // return this.fetchBlockedCountries().pipe(\r\n // switchMap(blockedCountries => {\r\n // return this.ipAddressService.getIpAddressInfo().pipe(\r\n // switchMap(ipAddressInfo => {\r\n // const params = {\r\n // 'Content-Type': 'application/json',\r\n // 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token'),\r\n // 'ip-address': ipAddressInfo.ip,\r\n // 'ip-country': ipAddressInfo.address.country,\r\n // };\r\n // payload = {...payload, proxy:ipAddressInfo.proxy.toString()}\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/initiate/call', payload, httpOptions).pipe(\r\n // catchError(error => {\r\n // return throwError(error);\r\n // }), \r\n // );\r\n // }),\r\n // catchError(error => {\r\n // // Catch error from getIpAddressInfo\r\n // return throwError(error);\r\n // })\r\n // );\r\n // })\r\n // );\r\n // }\r\n\r\n \r\n initiateCall(payload: any): Observable<any> {\r\n return this.fetchBlockedCountries().pipe(\r\n switchMap(blockedCountries => {\r\n return this.ipAddressService.getIpAddressInfo().pipe(\r\n switchMap(ipAddressInfo => {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token'),\r\n 'ip-address': ipAddressInfo.ip,\r\n 'ip-country': ipAddressInfo.address.country,\r\n };\r\n payload = {...payload, proxy:ipAddressInfo.proxy.toString()}\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/initiate/conference/call', payload, httpOptions).pipe(\r\n catchError(error => {\r\n return throwError(error);\r\n }), \r\n );\r\n }),\r\n catchError(error => {\r\n // Catch error from getIpAddressInfo\r\n return throwError(error);\r\n })\r\n );\r\n })\r\n ); \r\n }\r\n \r\n\r\n getConferenceCallToken(payload: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': payload.authId,\r\n 'c2c-request': window.location.hostname\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/generate/conference/token',payload, httpOptions);\r\n }\r\n \r\n addParticipant(payload: any) {\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n console.log(payload, 'payload');\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/add/participant', payload, httpOptions);\r\n }\r\n\r\n holdParticipant(payload:any){\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/hold/participant', payload, httpOptions);\r\n }\r\n \r\n onMuteParticipant(payload:any){\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/mute/participant', payload, httpOptions);\r\n }\r\n\r\n getAllParticipants(conferenceSid:any) {\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.get<[]>(environment.apiUrl + `/utilities/ext/ur/all/participent/${conferenceSid}`, httpOptions);\r\n }\r\n\r\n updateHoldUnhold(payload:any){\r\n const params = {\r\n \"conferenceId\": payload.conferenceId,\r\n \"participantIds\": payload.participantIds,\r\n \"hold\": payload.hold\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/update/hold/unhold', params, httpOptions);\r\n }\r\n\r\n\r\n \r\n getCallStatusOfParticipants(participantId:any) { \r\n const params = {\r\n \r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + `/utilities/ext/ur/call/status/participant/${participantId}`, httpOptions);\r\n }\r\n\r\n getRemoveParticipants(participantId:any, conferenceId:any) {\r\n return this.http.get<[]>(environment.apiUrl + `/utilities/ext/ur/remove/participant/${participantId}/${conferenceId}`,);\r\n }\r\n\r\n muteParticipant(){ \r\n const params = {\r\n \r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/ext/ur/mute/participant', httpOptions);\r\n }\r\n\r\n fetchBlockedCountries(): Observable<string[]> {\r\n return this.http.get<any>(environment.apiUrl + '/global/master/ur/blacklisted/countrylist').pipe(\r\n map(response => {\r\n if (response.response === 'Success' && Array.isArray(response.countries)) {\r\n return response.countries.map((country: any) => country.isocode);\r\n } else {\r\n throw new Error('Unable to fetch blocked countries');\r\n }\r\n })\r\n );\r\n }\r\n \r\n // initiateCall(payload: any): Observable<any> {\r\n // return this.ipAddressService.getIpAddressInfo().pipe(\r\n // switchMap(ipAddressInfo => {\r\n // const params = {\r\n // 'Content-Type': 'application/json',\r\n // 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token'),\r\n // 'ip-address': ipAddressInfo.ip,\r\n // 'ip-country': ipAddressInfo.address.country\r\n // };\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/initiate/call', payload, httpOptions);\r\n // })\r\n // );\r\n // }\r\n getIncomingCallToken(deviceId: any) {\r\n const headers = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\r\n }\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n const params = new HttpParams().set('deviceId', deviceId);\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/twilio/incomingcall/token/web', { headers, params });\r\n }\r\n getOutgoingCallToken(payload: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token'),\r\n 'c2c-request': window.location.hostname\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/generate/token', payload, httpOptions);\r\n }\r\n getCallRecording(callSid: string) {\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.post(environment.apiUrl + '/utilities/twilio/conference/callrecording', {}, httpOptions);\r\n } \r\n pauseOrResumeRecording(callSid: string,status: any) {\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.post(environment.apiUrl + `/utilities/twilio/update/recording/status?callSid=${callSid}&status=${status}`,{}, httpOptions);\r\n }\r\n getCallStatus(callAuthId: string) {\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.get(environment.apiUrl + `/utilities/twilio/call/status/${callAuthId}`, httpOptions);\r\n }\r\n\r\n //sms api\r\n sendSms(c2c_latlong: string, c2c_request: string, dtModel: any): Observable<any> {\r\n return this.fetchBlockedCountries().pipe(\r\n switchMap(blockedCountries => {\r\n return this.ipAddressService.getIpAddressInfo().pipe(\r\n switchMap((ipAddressInfo: any) => {\r\n if (blockedCountries.includes(ipAddressInfo.address.countryCode)) {\r\n return throwError({ message: ['User from blocked country'] });\r\n } else {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'c2c-latlong': c2c_latlong,\r\n 'c2c-request': c2c_request,\r\n 'ip-address': ipAddressInfo.ip,\r\n 'ip-country': ipAddressInfo.address.country,\r\n };\r\n dtModel = { ...dtModel, proxy: ipAddressInfo.proxy.toString() };\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/send/sms', dtModel, httpOptions).pipe(\r\n catchError(error => {\r\n // Handle HTTP errors here if needed\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n }),\r\n catchError(error => {\r\n // Catch error from getIpAddressInfo\r\n return throwError(error);\r\n })\r\n );\r\n }),\r\n catchError(error => {\r\n // Catch error from fetchBlockedCountries\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n\r\n\r\n\r\n\r\n // sendSms(c2c_latlong: string, c2c_request: string, dtModel: any): Observable<any> {\r\n // return this.ipAddressService.getIpAddressInfo().pipe(\r\n // switchMap(ipAddressInfo => {\r\n // const params = {\r\n // 'Content-Type': 'application/json',\r\n // 'c2c-latlong': c2c_latlong,\r\n // 'c2c-request': c2c_request,\r\n // 'ip-address': ipAddressInfo.ip,\r\n // 'ip-country': ipAddressInfo.address.country\r\n // };\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/send/sms', dtModel, httpOptions);\r\n // })\r\n // );\r\n // }\r\n readContacts(token: string) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/read/contacts', httpOptions);\r\n }\r\n\r\n sentSMS(token: string, pageSize?: string, pageIndex?: string) {\r\n const headers = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token,\r\n }\r\n let params = new HttpParams();\r\n params = params.set('size', pageSize || '10');\r\n params = params.set('page', pageIndex || '1');\r\n const httpOptions = { headers, params };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/sent/', httpOptions);\r\n }\r\n\r\n deleteSMS(token: string, recordIds: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/sms/delete/${recordIds}`, dtModel, httpOptions);\r\n }\r\n\r\n // inboxSMS(token: string) {\r\n // const params = {\r\n // 'Content-Type': 'application/json',\r\n // 'Auth-Key': \"Bearer \" + token\r\n // }\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.get<[]>(environment.apiUrl + '/utilities/sms/inbox', httpOptions);\r\n // }\r\n inboxSMS(token: string, page: number, size: number) {\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n \r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/inbox', httpOptions);\r\n }\r\n readInboxStatus(token: string, recordId: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/sms/markas/read/${recordId}`, dtModel, httpOptions);\r\n }\r\n markAsFavourite(token: string, recordIds: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/sms/mark/favourite/${recordIds}`, dtModel, httpOptions);\r\n }\r\n\r\n markAsUnFavourite(token: string, recordIds: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/sms/mark/unfavourite/${recordIds}`, dtModel, httpOptions);\r\n }\r\n viewfavouriteSMS(token: string, page: number, size: number) {\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n \r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/view/favourite', httpOptions);\r\n }\r\n saveDraft(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/sms/save/draft', dtModel, httpOptions);\r\n }\r\n\r\n viewDraft(token: string, page: number, size: number) {\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n \r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/view/draft', httpOptions);\r\n }\r\n \r\n deleteDraftSMS(token: string, draftIds: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/sms/delete/draft/${draftIds}`, dtModel, httpOptions);\r\n }\r\n\r\n //Address Book \r\n viewContactLists(token: string) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/read/contacts', httpOptions);\r\n }\r\n deleteContact(token: string, phonebookid: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/phonebook/delete/contact/${phonebookid}`, dtModel, httpOptions);\r\n }\r\n updateFavContacts(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/update/favourite', dtModel, httpOptions);\r\n }\r\n // saveContacts(token: string, dtModel: any){\r\n // const params = {\r\n // 'Content-Type': 'application/json',\r\n // 'Auth-Key': \"Bearer \" + token\r\n // }\r\n\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/add/contacts/manually',dtModel, httpOptions);\r\n // }\r\n\r\n uploadImage(token: string, dtModel: any) {\r\n const params = {\r\n //'Content-Type': 'multipart/form-data',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/upload/photo', dtModel, httpOptions);\r\n }\r\n\r\n //Call Histroy \r\n recentCallHistory(token: string,page:number,size:number) {\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n \r\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/recent/calls', httpOptions);\r\n }\r\n\r\n deleteCalls(token: string, recordId: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/phonebook/delete/calls/${recordId}`, dtModel, httpOptions);\r\n }\r\n\r\n //SMS History\r\n recentSMSHistory(token: string, page: number, size: number) {\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n \r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/history', httpOptions);\r\n }\r\n\r\n getRecentVoiceRecordingData(token: string, filterData:any, page: number, size: number){\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n const filterObj={}\r\n \r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/recent/voicerecording', filterData, httpOptions);\r\n }\r\n\r\n // save voice mail recording \r\n saveVoiceMailReocrding(token: string, recordingData: any, ) {\r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n // params: params\r\n };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/update/recording', recordingData, httpOptions);\r\n }\r\n deleteVoiceRecording(token:string, recordingId: any){\r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n // params: params\r\n };\r\n return this.http.delete<[]>(environment.apiUrl + `/utilities/phonebook/delete/voicerecordings/${recordingId}`, httpOptions);\r\n }\r\n markAsVoiceRecording(token:string, recordingId: any, dtModel: any){\r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/phonebook/markas/voicemail/read/${recordingId}`,dtModel, httpOptions);\r\n }\r\n editContactById(token: string, id: string) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/search/contactid/' + id, httpOptions);\r\n }\r\n\r\n updateContacts(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/update/contact', dtModel, httpOptions);\r\n }\r\n\r\n uploadPhoto(payload:any) {\r\n let httpOptions = {\r\n headers: new HttpHeaders({\r\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\r\n })\r\n };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/upload/photo', payload, httpOptions);\r\n }\r\n \r\n saveContacts(token: string, payload:any) {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + token }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/add/contacts/manually', payload, httpOptions);\r\n }\r\n\r\n //Dowload csv template \r\n downloadCsvTemplate(token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/download/csv', httpOptions);\r\n }\r\n\r\n //Upload csv contacts \r\n updateCSVContacts(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/add/contacts', dtModel, httpOptions);\r\n }\r\n\r\n //City list \r\n GetAllCityList(_countryId: any, _stateName: any): Observable<string> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.get<string>(environment.apiUrl + '/global/master/ur/citylist/' + _countryId + '/' + _stateName,\r\n httpOptions);\r\n }\r\n //zip list\r\n GetAllZipList(dataModel: any): Observable<string> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<string>(environment.apiUrl + '/global/master/ur/postalcodes', dataModel,\r\n httpOptions);\r\n }\r\n\r\n //Get all invoices \r\n GetInvoices(viewType: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/billing/invoices/' + viewType, httpOptions);\r\n }\r\n DownloadInvoice(invoiceId: string, token: string): Observable<[]> {\r\n const httpOptions = {\r\n responseType: 'blob' as 'json',\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n })\r\n };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/billing/invoice/file/' + invoiceId, httpOptions);\r\n }\r\n\r\n GetInvoice(invoiceId: string): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/billing/invoice/' + invoiceId, httpOptions);\r\n }\r\n\r\n //Billing summary \r\n GetBillingSummary(token: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/billing/summary', httpOptions);\r\n }\r\n\r\n //Billing Plan & Pricing\r\n GetAllPlans(token: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/billing/tiers', httpOptions);\r\n }\r\n\r\n //Pay Now\r\n payNow(invoiceId: string, cardId: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const data = {\r\n \"invoiceId\": invoiceId,\r\n \"cardId\": cardId\r\n };\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/billing/pay/invoice/${invoiceId}/${cardId}`, data, httpOptions);\r\n }\r\n confirmInvoicePayment(customerId: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/billing/invoice/confirmation/${customerId}`,{}, httpOptions);\r\n }\r\n\r\n loadStripeMethods(sessionid: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/ext/duplicate/card/' + sessionid, httpOptions);\r\n }\r\n\r\n logOut(authKey:any): Observable<[]> {\r\n const auth = { \"Auth-Key\": authKey }\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + authKey }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/logout', {}, httpOptions);\r\n }\r\n\r\n registerFCMToken(payload:any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n return this.http.post<[]>(environment.apiUrl + '/firebase/register/device', payload, httpOptions);\r\n }\r\n getNotificationList(pageIndex?: string, pageSize?: string) {\r\n let params = new HttpParams();\r\n params = params.set('size', pageSize || '10');\r\n params = params.set('page', pageIndex || '1');\r\n const headers = { 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') };\r\n const httpOptions = { headers, params };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/stored/notification', httpOptions);\r\n }\r\n getTotalUnreadCount(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/notification/count', httpOptions);\r\n }\r\n markNotification(payload: any) {\r\n //const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json'}) };\r\n return this.http.post<[]>(environment.apiUrl + '/firebase/ur/markas/seen/' + payload.notificationId + '/' + payload.status, {}, httpOptions);\r\n }\r\n deleteNotification(payload: any) {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n return this.http.post<[]>(environment.apiUrl + '/firebase/markas/seen/' + payload.notificationId + '/' + payload.status, {}, httpOptions);\r\n }\r\n getVoicemailDetails(recordId: string, token: string): Observable<any> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl +`/utilities/phonebook/play/voicerecordings/${recordId}`, httpOptions);\r\n }\r\n deleteNotifications(token: string, notificationIds: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + `/utilities/sms/delete/notification/${notificationIds}`, httpOptions);\r\n }\r\n getReports( filterData:any, pageIndex?:number,pageSize?:number) {\r\n const filterObj = {\r\n accountStatus: filterData.accountStatus || \"\",\r\n dateType: filterData.dateType || \"\" ,\r\n fieldType: filterData.fieldType || \"\" ,\r\n fieldValue: filterData.fieldValue || \"\",\r\n fromDate: filterData.fromDate || \"\",\r\n pendingDues: filterData.pendingDues,\r\n toDate: filterData.toDate || \"\",\r\n }\r\n const params = new HttpParams()\r\n .set('page', pageIndex?.toString() || '1')\r\n .set('size', pageSize?.toString() || '10');\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')}),\r\n params: params };\r\n return this.http.post<[]>(environment.apiUrl+ '/utilities/report/user/details',filterObj, httpOptions);\r\n }\r\n getReportsFilter(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.get<[]>(environment.apiUrl+ '/utilities/report/dropdown', httpOptions);\r\n }\r\n getSyncReportData(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json','Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')})};\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/report/update/cache', {}, httpOptions);\r\n }\r\n getDownloadCSV(filterData: any, pageIndex:any, pageSize:any): Observable<any> {\r\n const filterObj = {\r\n accountStatus: filterData.accountStatus || \"\",\r\n dateType: filterData.dateType || \"\" ,\r\n fieldType: filterData.fieldType || \"\" ,\r\n fieldValue: filterData.fieldValue || \"\",\r\n fromDate: filterData.fromDate || \"\",\r\n pendingDues: filterData.pendingDues,\r\n toDate: filterData.toDate || \"\",\r\n }\r\n const params = new HttpParams()\r\n .set('page', pageIndex > 0 ? pageIndex.toString() : '1')\r\n .set('size', pageSize.toString());\r\n const httpOptions = { headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')}), params: params};\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/report/csv/download' ,filterObj, httpOptions);\r\n }\r\n getDeleteFile(filePathValue: string):Observable<any> {\r\n const httpOptions = { \r\n body: { filePath: filePathValue },\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/report/download/complete' , httpOptions);\r\n }\r\n\r\n getDownloadPDF(filterData: any, pageIndex:any, pageSize:any){\r\n const filterObj = { \r\n accountStatus: filterData.accountStatus || \"\",\r\n dateType: filterData.dateType || \"\" ,\r\n fieldType: filterData.fieldType || \"\" ,\r\n fieldValue: filterData.fieldValue || \"\",\r\n fromDate: filterData.fromDate || \"\",\r\n pendingDues: filterData.pendingDues,\r\n toDate: filterData.toDate || \"\",\r\n }\r\n const params = new HttpParams()\r\n .set('page', pageIndex > 0 ? pageIndex.toString() : '1')\r\n .set('size', pageSize.toString());\r\n const httpOptions = {headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')}), params: params};\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/report/pdf/download' ,filterObj, httpOptions);\r\n }\r\n getSuspendCategoriesData(){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/report/suspend/category/dropdown' , httpOptions);\r\n }\r\n getUserDetailsForSuspend(userIds:any){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<any[]>(`${environment.apiUrl}/admin/suspension/data/${encodeURIComponent(userIds)}`, null, httpOptions);\r\n }\r\n suspendUsers(userData:any){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<any[]>(`${environment.apiUrl}/admin/suspend/user`, userData, httpOptions);\r\n }\r\n resumeUser(userData: any){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<any[]>(`${environment.apiUrl}/admin/resume/user`, userData, httpOptions);\r\n }\r\n resumeUnpaidUsers(userData: any){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<any[]>(`${environment.apiUrl}/admin/resume/unpaid/user`, userData, httpOptions);\r\n }\r\n deleteUser(userData: any){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<any[]>(`${environment.apiUrl}/admin/delete/user`, userData, httpOptions);\r\n }\r\n \r\n deleteUserAccount(){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n // return this.http.post<any[]>(`${environment.apiUrl}/utilities/ext/delete/user/`, userData, httpOptions);\r\n return this.ipAddressService.getIpAddressInfo().pipe(\r\n switchMap((ipAddressInfo: any) => {\r\n return this.http.post<any>(\r\n `${environment.apiUrl}/utilities/ext/delete/user/${this.platform}/${ipAddressInfo.ip}`,\r\n null,\r\n httpOptions\r\n );\r\n }),\r\n catchError((error) => {\r\n // Properly catch errors\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n getIPDetailsForCall(recordId:any, callStatus:any, deviceId:any): Observable<any> {\r\n return this.ipAddressService.getIpAddressInfo().pipe(\r\n switchMap((ipAddressInfo: any) => {\r\n const IpObj = {\r\n 'ipAddress': ipAddressInfo.ip,\r\n 'ipCountry': ipAddressInfo.address.country,\r\n 'recordId': recordId,\r\n 'callStatus': callStatus,\r\n 'deviceId': deviceId\r\n };\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n \r\n return this.http.post<[]>(environment.apiUrl + '/utilities/twilio/incoming/call/ip', IpObj, httpOptions).pipe(\r\n catchError(postError => {\r\n // console.log('Error during HTTP POST request:', postError);\r\n return throwError(postError);\r\n })\r\n );\r\n }),\r\n catchError(ipError => {\r\n // console.log('Error fetching IP address info:', ipError);\r\n return throwError(ipError);\r\n })\r\n );\r\n }\r\n\r\ngetIPDetailsForSMS(recordId:any): Observable<any> {\r\n \r\n return this.ipAddressService.getIpAddressInfo().pipe(\r\n switchMap((ipAddressInfo: any) => {\r\n const IpObj = {\r\n 'ipAddress': ipAddressInfo.ip,\r\n 'ipCountry': ipAddressInfo.address.country,\r\n 'recordId':recordId,\r\n \r\n };\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/twilio/inbound/sms/ip', IpObj, httpOptions);\r\n }, \r\n catchError(error => {\r\n // Catch error from getIpAddressInfo\r\n return throwError(error);\r\n })\r\n )\r\n );\r\n }\r\n \r\n GetAllAvailableCountryList(): Observable<string> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.get<string>(environment.apiUrl + '/global/master/ur/dedicated/countrylist')\r\n // return this.http.get<string>(environment.apiUrl + '/global/master/ur/countrylist', httpOptions);\r\n }\r\n\r\n getUserSettings(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json','Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')})};\r\n return this.http.get<string>(environment.apiUrl + '/utilities/ext/settings', httpOptions)\r\n }\r\n\r\n updateDialCodePreference(settings: any) {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token') }) };\r\n return this.http.put<[]>(environment.apiUrl + '/utilities/ext/update/settings', settings, httpOptions)\r\n }\r\n\r\n updateLongPressTime(time: number) {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token') }) };\r\n return this.http.put<[]>(environment.apiUrl + '/utilities/ext/update/longpress/' + time,{}, httpOptions)\r\n }\r\n\r\n exportToCSV(){\r\n const httpOptions = { headers: new HttpHeaders({'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')}),responseType: 'blob' as 'json'};\r\n return this.http.get<string>(environment.apiUrl + '/utilities/phonebook/download/contacts', httpOptions)\r\n }\r\n\r\n getDialPreferenceNums(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json','Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')})};\r\n return this.http.get<string>(environment.apiUrl + '/utilities/ext/dial/preference/dropdown', httpOptions)\r\n }\r\n updateVASSettings(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/value/added/service', dtModel, httpOptions);\r\n }\r\n updateVoiceMailSettings(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/update/voicemail/setting', dtModel, httpOptions);\r\n }\r\n updateVoiceRecordSettings(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/update/call/recording/setting', dtModel, httpOptions);\r\n }\r\n\r\n getManualLinks(deviceType: string): string {\r\n return `${environment.apiUrl}/landing/support/ur/user/manual/${deviceType}`;\r\n }\r\n\r\n updateSignupProfile(body: any) {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token') }) };\r\n return this.http.put<any>(environment.apiUrl + '/utilities/ext/ur/update/signup/profile' ,body, httpOptions)\r\n }\r\n getAdminSettings(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.get<[]>(environment.apiUrl+ '/admin/settings', httpOptions);\r\n }\r\n updateActions(token: string, dtModel: any){\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/admin/change/settings', dtModel, httpOptions);\r\n }\r\n updateValueAddedServices(token: string, dtModel: any){\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/admin/value/added/service', dtModel, httpOptions);\r\n }\r\n \r\n deleteAdminUsers(token: string, userIds: string) { // Change type to string\r\n const httpOptions = { \r\n headers: new HttpHeaders({ \r\n 'Content-Type': 'application/json', \r\n 'Auth-Key': 'Bearer ' + token \r\n })\r\n };\r\n return this.http.delete<[]>(environment.apiUrl + `/admin/delete/value/usage/${userIds}`, httpOptions);\r\n }\r\n \r\n getUserInformation(twilioAuthId: string){\r\n const httpOptions = { \r\n headers: new HttpHeaders({ \r\n 'Content-Type': 'application/json', \r\n 'Auth-Key': 'Bearer ' + this.token \r\n })\r\n };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/twilio/c2c/information/'+twilioAuthId, httpOptions);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Call } from '@twilio/voice-sdk';\r\nimport { TwilioService } from './twilio.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class NotificationService {\r\n twilioCallData?: Call;\r\n twilioAuthId?: string;\r\n constructor(\r\n private twilioService: TwilioService\r\n ){\r\n\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.addEventListener('message', this.handleServiceWorkerMessage.bind(this));\r\n }\r\n }\r\n\r\n redirectUrl = window.location.href;\r\n showNotification(callData :any) {\r\n this.twilioAuthId = callData.customParameters.get('twilioAuthId');\r\n this.twilioCallData = callData;\r\n const incomingNumber = callData.parameters.From;\r\n const callerName = callData.customParameters.get('name');\r\n const callerImage = callData.customParameters.get('image');\r\n if (('serviceWorker' in navigator))\r\n {\r\n navigator.serviceWorker.ready.then((registration:any) => {\r\n const options = {\r\n body: `Incoming call from ${callerName || incomingNumber}`,\r\n icon: callerImage,\r\n actions: [\r\n { \r\n action: 'accept', \r\n title: 'Accept', \r\n icon: '../../../assets/images/notification-icons/call-accept-icon.png' \r\n },\r\n { \r\n action: 'reject', \r\n title: 'Reject', \r\n icon: '../../../assets/images/notification-icons/call-reject-icon.jpg' \r\n }\r\n ],\r\n data: {\r\n url: this.redirectUrl,\r\n },\r\n requireInteraction: true,\r\n \r\n };\r\n registration.showNotification('Icoming Call', options);\r\n });\r\n }\r\n }\r\n\r\n private handleServiceWorkerMessage(event: MessageEvent) {\r\n if (!event.data) return;\r\n \r\n switch (event.data.action) {\r\n case 'accept':\r\n this.onNotificationAccept();\r\n break;\r\n case 'reject':\r\n this.onNotificationReject();\r\n break;\r\n default:\r\n console.log('default action:');\r\n break;\r\n }\r\n }\r\n onNotificationAccept() {\r\n this.twilioService.callhandleFromNotification.next({ callStatus: 'accept'})\r\n }\r\n \r\n onNotificationReject() {\r\n this.twilioService.callhandleFromNotification.next({ callStatus: 'reject'})\r\n }\r\n \r\n}\r\n\r\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable, of, throwError } from 'rxjs';\nimport { catchError, shareReplay, tap } from 'rxjs/operators';\nimport { Device, Call } from '@twilio/voice-sdk';\nimport { ExtensionService } from './extension.service';\nimport { NotificationService } from './Notification.service';\nimport { environment } from '../environments/environments';\n\nexport interface DialPayload {\n number: string;\n name: string;\n img: string;\n callerId:string;\n isDialFromHistory:boolean;\n from:string;\n}\n\n@Injectable({\n providedIn: 'root' \n})\nexport class TwilioService {\n \n openInProgressDialpad = new BehaviorSubject<boolean>(false);\n currentCall = new BehaviorSubject<Call | null>(null);\n currentCallState = new BehaviorSubject<any>('none'); //in-progress, out-progress, none\n device:any;\n incomingCallToken?:string;\n outgoingCallToken?:string;\n callType = new BehaviorSubject<string>('NIL');\n isIncomingCallPicked = new BehaviorSubject<boolean>(false); // for both incoming and outgoing\n token:any = localStorage.getItem('ext_token');\n isNewContactAdded = new BehaviorSubject<boolean>(false);\n updateRecentCall = new BehaviorSubject<boolean>(false);\n callhandleFromNotification = new BehaviorSubject<any>({});\n\n endCall = new BehaviorSubject<boolean>(false);\n dialNumberFromOtherModule = new BehaviorSubject<DialPayload>({ number: '', name: '', img: '', callerId: '', isDialFromHistory: false, from: '' });\n\n toggleCallerIdAlert = new BehaviorSubject<boolean>(true);\n isTrialOver = new BehaviorSubject<boolean>(false);\n isPaymentDue = new BehaviorSubject<boolean>(false);\n isAvailableNumber = new BehaviorSubject<boolean>(false);\n callerIdList = new BehaviorSubject<any[]>([]);\n triggerSMSReload = new BehaviorSubject<boolean>(false);\n\n private tokenInitialized = false;\n private tokenInitialization$: Observable<any> | null = null;\n deviceId: any;\n conferenceCallInfo: any;\n\n constructor(\n private http: HttpClient, \n private extensionService: ExtensionService,\n private notificationSerivce: NotificationService\n ) {\n this.initializeToken();\n }\n\n private initializeToken() {\n if (this.tokenInitialized) {\n return this.tokenInitialization$ || of(null);\n }\n\n this.tokenInitialization$ = this.extensionService.getIncomingCallToken(this.deviceId).pipe(\n tap((data: any) => {\n this.incomingCallToken = data.token;\n localStorage.setItem('in-token', data.token);\n this.tokenInitialized = true;\n console.log('dfdfdsfdsfds')\n this.initializeDevice();\n }),\n catchError(error => {\n console.error('Error initializing Twilio token:', error);\n return throwError(() => error);\n }),\n shareReplay(1) // Cache the result for subsequent subscribers\n );\n\n return this.tokenInitialization$;\n }\n\n public initializeTwilioDevice(deviceId: any) {\n this.deviceId = deviceId;\n if (this.tokenInitialized && this.incomingCallToken) {\n this.initializeDevice();\n } else {\n this.initializeToken().subscribe();\n }\n }\n\n private initializeDevice() {\n if (this.device) {\n this.device.destroy();\n }\n\n if (!this.incomingCallToken) {\n console.error('No Twilio token available');\n return;\n }\n\n this.device = new Device(this.incomingCallToken, { \n allowIncomingWhileBusy: true,\n closeProtection: true\n });\n console.log(\"device created\")\n \n this.device.register();\n\n this.device.on('incoming', (call: Call) => {\n console.log(\"incoming call\",call)\n this.currentCall.next(call);\n this.callType.next('INCOMING');\n this.currentCallState.next('incoming');\n this.notificationSerivce.showNotification(call);\n });\n\n this.device.on('error', (error: any) => {\n console.error('Twilio Device Error:', error);\n // Reset initialization state on error to allow retry\n this.tokenInitialized = false;\n });\n\n this.device.on('registered', () => {\n console.log('Twilio Device registered successfully');\n });\n\n this.device.on('unregistered', () => {\n console.log('Twilio Device unregistered');\n this.tokenInitialized = false;\n });\n }\n\n // onIncomingCall(){\n // this.device.on('incoming', (call:any) => {\n // console.log(call);\n \n // //call.accept();\n // });\n // }\n saveContact(payload: any): Observable<[]> {\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')}) };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/add/contacts/manually', payload, httpOptions);\n }\n updateContact(payload:any){\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + this.token}) };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/update/contact', payload, httpOptions);\n }\n \n deleteContact(id:string){\n let payload = {\n phonebookid: id\n }\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/delete/contact/'+id,payload, httpOptions);\n }\n getContactList(){\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/read/contacts', httpOptions);\n }\n\n addContactToFavourite(payload: any){\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/update/favourite', payload, httpOptions);\n }\n\n getFavouritContacts(){\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/favourite/contacts', httpOptions);\n }\n\n getRecentCalls(pageIndex?: string, pageSize?: string,){\n // let params = new HttpParams();\n // params = params.set('size', pageSize);\n // params = params.set('page', pageIndex);\n const headers = { 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') };\n const httpOptions ={headers}\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/recent/calls', httpOptions);\n }\n deleteRecentCallLog(id:string| string[]){\n let payload = {\n recordId: id\n }\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/delete/calls/'+id,payload, httpOptions);\n }\n\n uploadPhoto(payload: any){\n let httpOptions = {\n headers: new HttpHeaders({\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\n })\n };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/upload/photo',payload, httpOptions);\n }\n\n deletePhoto(id:string){\n let payload = {\n phonebookid: id\n }\n let httpOptions = {\n headers: new HttpHeaders({\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\n })\n };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/delete/photo/'+id,payload, httpOptions);\n }\n\n // toggleCallerIdAlertFn(val: any) {\n // let httpOptions = {\n // headers: new HttpHeaders({\n // 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\n // })\n // };\n // return this.http.put<[]>(environment.apiUrl + '/utilities/softphone/callerid/alert/' + val, {}, httpOptions);\n // }\n\n toggleCoutryCodeToast(val:any){\n let httpOptions = {\n headers: new HttpHeaders({\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\n })\n };\n return this.http.put<[]>(environment.apiUrl + '/utilities/softphone/countrycode/alert/' + val, {}, httpOptions);\n }\n getToNumber(dialledNo: string, isoCode: string) {\n const httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }),\n params: new HttpParams().set('isoCode', isoCode)\n };\n const params = new HttpParams().set('isoCode', isoCode)\n return this.http.get<[]>(environment.apiUrl + '/utilities/softphone/check/countryCode/' + dialledNo, httpOptions);\n } \n \n addIncomingParticipant(participantId: string, conferenceId: string) {\n const httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }),\n };\n return this.http.get<[]>(`${environment.apiUrl}/utilities/ext/add/incoming/participant/${participantId}/${conferenceId}`,httpOptions);\n } \n connect(data?: any){\n // this.device.disconnect();\n if (this.device._activeCall) {\n this.device.disconnectAll();\n }\n return this.device.connect({\n params: {\n Token: this.conferenceCallInfo.conferenceId,\n ConferenceName: this.conferenceCallInfo.conferenceName\n },\n rtcConstraints: { audio: { deviceId: 'default' } },\n })\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { environment } from '../environments/environments';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class IncomeingCallSocketService {\r\n\r\n private socket?: WebSocket;\r\n private eventSubject = new Subject<any>();\r\n\r\n connect() {\r\n // Replace with your WebSocket URL\r\n this.socket = new WebSocket(`${environment.websocketUrl}incoming/call`);\r\n\r\n this.socket.onopen = () => {\r\n console.log(\"WebSocket connected\");\r\n\r\n // Authenticate (if needed)\r\n const authMessage = {\"incomingCall\":{\r\n \"userId\": localStorage.getItem('userId')\r\n }}\r\n // {\r\n // userId: localStorage.getItem('userId'),\r\n // authKey: localStorage.getItem('ext_token')\r\n // };\r\n setInterval(() =>{\r\n this.socket?.send(JSON.stringify(authMessage));\r\n },1000)\r\n };\r\n\r\n this.socket.onmessage = (msg) => {\r\n // console.log(\"WS RAW:\", msg.data);\r\n try {\r\n const data = JSON.parse(msg.data);\r\n this.eventSubject.next(data);\r\n } catch (e) {\r\n console.error(\"WS PARSE ERROR:\", msg.data);\r\n }\r\n };\r\n\r\n this.socket.onerror = (err) => {\r\n console.error(\"WebSocket Error:\", err);\r\n };\r\n\r\n this.socket.onclose = () => {\r\n console.warn(\"WebSocket disconnected\");\r\n setTimeout(() => this.connect(), 100); // Auto-reconnect\r\n };\r\n }\r\n\r\n listen(): Observable<any> {\r\n return this.eventSubject.asObservable();\r\n }\r\n}\r\n","\nimport { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { Call, Device } from '@twilio/voice-sdk';\nimport { ExtensionService } from '../../service/extension.service';\nimport { TwilioService } from '../../service/twilio.service';\nimport { environment } from '../../environments/environments';\nimport swal from 'sweetalert2';\nimport { keypad } from '../../../keypad';\nimport { interval, Subscription } from 'rxjs';\n\n\n\ninterface CallDetails {\n callSid: string;\n callStatus: string;\n}\ninterface CallStatusResponse {\n callDetails: CallDetails;\n response: string;\n errorType: number;\n message: string;\n status: number;\n}\n\n@Component({\n selector: 'lib-call-progress',\n templateUrl: './call-progress.component.html',\n styleUrls: ['./call-progress.component.css']\n})\nexport class CallProgressComponent implements OnInit, OnChanges, AfterViewInit {\n @Input() callData: any;\n @Input() selectedCallerId: any;\n @Input() newIncomingCallData?: Call;\n @Input() newIncomingCallsList: any = [];\n @Input() deviceId: any;\n @Output() endCallEvent: EventEmitter<void> = new EventEmitter<void>();\n @Output() incomingCallsNewInfo: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() minimiseEvent: EventEmitter<boolean> = new EventEmitter<boolean>();\n device?: Device;\n call?: Call | any;\n showRingAnimation: boolean = false;\n timer: string = '00:00';\n intervalId: any;\n showKeypad: boolean = false;\n keypadVal = keypad;\n callInput: string = '';\n isMute: boolean = false;\n disbaleEndCallBtn: boolean = true;\n showClearBtn: boolean = false;\n isCollops = false;\n currentCall: any;\n // Conference state flag\n isConference: boolean = false;\n isOutgoingCall: boolean = true;\n // Incoming call variables\n incomingCallDiv: boolean = false;\n //@Output() showCallProgressEvent: EventEmitter<void> = new EventEmitter<void>();\n @Output() incomingCallInitiated: EventEmitter<void> = new EventEmitter<void>();\n\n // Recording variables\n callSid: any;\n isRecording: boolean = false;\n isPaused: boolean = false;\n timerSubscription?: Subscription;\n timeElapsed = 0; // in seconds\n recordCall: boolean = false;\n incomingCallSid: any;\n callStatus: string = 'ringing';\n incomingRecordCall?: any;\n selectedIncomingCall: any;\n showContactsPanel: boolean = false;\n isAddRemoveParticipant: boolean = false;\n isConcurrentIncoming: boolean = false;\n heldCall?: Call | any;\n isCallOnHold: boolean = false;\n contacts: any[] = [];\n currentCallList: any[] = [];\n conferenceId: any;\n allParticipentList: any;\n isClickExpand: boolean = false;\n isCallInProgress!: boolean;\n isCurrentIncomingCallList: any = [];\n isConferenceCallHold: boolean = false;\n // contacts: any[] = [\n // { name: 'Pamela Cox', title: 'Product Designer', img: 'assets/images/user.jpg' },\n // { name: 'Roger S. Wood', title: 'JavaScript Programmer', img: 'assets/images/user.jpg' },\n // { name: 'Victor Blackston', title: 'Database Administrator', img: 'assets/images/user.jpg' },\n // { name: 'Tammy Rios', title: 'Support', img: 'assets/images/user.jpg' },\n // { name: 'Carlos Henderson', title: 'Software Architect', img: 'assets/images/user.jpg' },\n // { name: 'Elizabeth Bailey', title: 'HR', img: 'assets/images/user.jpg' }\n // ];\n constructor(private extensionService: ExtensionService, private cdr: ChangeDetectorRef, private twilioService: TwilioService) {\n console.log('Call Progress Component');\n this.call = this.twilioService.device;\n }\n\n ngOnInit() {\n console.log('Call Progress Component ngOnInit');\n // Subscribe to incoming calls from TwilioService\n try {\n this.twilioService.currentCall.subscribe((incoming: any) => {\n if (!incoming) { return; }\n console.log('TwilioService.currentCall emitted:', incoming);\n // console.log('Current call status:', this.call?.status());\n // If there is an ongoing call, show concurrent incoming banner\n console.log('Concurrent incoming detected - showing banner');\n this.isConcurrentIncoming = true;\n this.incomingCallDiv = true;\n // Add to list if not present\n const exists = (this.newIncomingCallsList || []).some((c: any) => c?.parameters?.CallSid === incoming?.parameters?.CallSid);\n if (!exists) {\n this.newIncomingCallsList = [...(this.newIncomingCallsList || []), incoming];\n this.incomingCallsNewInfo.emit(this.newIncomingCallsList);\n }\n this.cdr.detectChanges();\n // }\n });\n } catch (e) {\n console.error('Error subscribing to incoming calls:', e);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['callData']) {\n if (changes['callData'].currentValue?.isIncomingCall) {\n this.incomingCallDiv = true;\n this.call['callInfo'] = JSON.parse(JSON.stringify(this.callData));\n this.cdr.detectChanges();\n } else if (changes['callData'].currentValue?.displayNum || changes['callData'].currentValue?.from) {\n console.log('test-startCall123', changes['callData'].currentValue)\n // this.currentCall = { ...changes['callData'].currentValue, img: 'assets/images/user.jpg' };\n this.startCall(changes['callData'].currentValue);\n }\n }\n if (changes['newIncomingCallsList']) {\n try {\n if (this.newIncomingCallsList.length) {\n // Check if there's an active ongoing call\n this.conferenceId = this.newIncomingCallsList[0].conferenceId;\n this.newIncomingCallsList.forEach(async (res: any) => {\n if (this.currentCallList.length > 0) {\n let index = this.currentCallList.findIndex((item: any) => item.id == res.id);\n if (index == -1 && !res.isLeft) {\n this.currentCallList.push({\n ...res,\n img: 'assets/images/user.jpg',\n isIncomingCall: res.direction == \"incoming-call\",\n isHold: res.isHold,\n isMute: false,\n isConference: res.isConference,\n isAcceptCall: res.direction == \"incoming-call\" ? this.getStatus(res) : true,\n dial: true,\n phone: res.direction == \"incoming-call\" ? res?.from : res?.to,\n participantId: res.id,\n name: res.name || res?.fromName || res?.toName,\n time: this.getTimeDifference(res.joinedAt || new Date().toUTCString()),\n });\n } else if (index != -1 && res.isLeft) {\n if (this.currentCallList[index]?.id == this.currentCall?.id) {\n this.currentCallList.splice(index, 1);\n this.currentCall = this.currentCallList.length > 0 ? this.currentCallList[0] : {};\n if (this.currentCall?.isHold && !this.currentCall?.isConference) {\n await this.onholdOrUnholdParticipant({\n participantId: [this.currentCall?.participantId],\n conferenceId: this.conferenceId,\n hold: false,\n conference: this.currentCall?.isConference\n });\n this.currentCallList[0].isHold = false;\n } else if (this.currentCall?.isHold && this.currentCall?.isConference) {\n let conferenceCalllist = this.currentCallList.filter((item: any) => item.isConference);\n if (conferenceCalllist.length > 0) {\n await this.onholdOrUnholdParticipant({\n participantId: conferenceCalllist.map((item: any) => item.participantId),\n conferenceId: this.conferenceId,\n hold: false,\n conference: this.currentCall?.isConference\n });\n // this.currentCallList.forEach((item: any) => {\n // if (item.isConference) {\n // item.isHold = false;\n // } else {\n // item.isHold = true;\n // }\n // })\n this.isConferenceCallHold = false;\n }\n }\n } else {\n this.currentCallList.splice(index, 1);\n }\n } else if (index != -1) {\n this.currentCallList[index] = {\n ...res,\n img: 'assets/images/user.jpg',\n isIncomingCall: res.direction == \"incoming-call\",\n isHold: res.isHold,\n isMute: false,\n isConference: res.isConference,\n isAcceptCall: res.direction == \"incoming-call\" ? this.getStatus(res) : true,\n dial: true,\n phone: res.direction == \"incoming-call\" ? res?.from : res?.to,\n participantId: res.id,\n name: res.name || res?.fromName || res?.toName,\n time: this.getTimeDifference(res.joinedAt || new Date().toUTCString()),\n };\n }\n if(this.currentCallList.length == 1 && this.currentCallList[0].isHold){\n setTimeout(() => {\n if(this.currentCallList.length == 1 && this.currentCallList[0].isHold) {\n this.onholdOrUnholdParticipant({\n participantId: [this.currentCallList[0].participantId],\n conferenceId: this.conferenceId,\n hold: false,\n conference: this.currentCallList[0].isConference\n });\n }\n }, 1000);\n }\n } else {\n this.currentCallList.push({\n ...res,\n img: 'assets/images/user.jpg',\n isIncomingCall: res.direction == \"incoming-call\",\n isHold: res.isHold,\n isMute: false,\n isConference: res.isConference,\n isAcceptCall: res.direction == \"incoming-call\" ? this.getStatus(res) : true,\n dial: true,\n phone: res.direction == \"incoming-call\" ? res?.from : res?.to,\n participantId: res.id,\n name: res.name || res?.fromName || res?.toName,\n time: this.getTimeDifference(res.joinedAt || new Date().toUTCString()),\n });\n this.timer = '00:00';\n this.startTimer();\n }\n })\n this.currentCall = this.currentCallList.find((item: any) => item.isAcceptCall && !item.isHold);\n this.cdr.detectChanges();\n console.log('currentCallList', this.currentCallList);\n } else if (!this.newIncomingCallsList.length) {\n this.isConcurrentIncoming = false;\n this.incomingCallDiv = false;\n this.cdr.detectChanges();\n this.currentCallList = [];\n this.currentCall ={}\n this.isCallInProgress = false;\n \n this.isConferenceCallHold = false;\n this.stopTimer();\n if(this.twilioService.device._activeCall){\n this.twilioService.device.disconnectAll();\n }\n if(this.call?.callInfo){\n this.call.disconnect();\n }\n }\n } catch (e) {\n console.log(e);\n }\n }\n }\n\n getStatus(res: any) {\n const statusList = [\"answered\", \"participant-hold\", \"participant-mute\", \"participant-join\", \"queued\", \"in-progress\", \"initiated\", 'ringing', '\"connected\"'];\n if (statusList.includes(res.status) && res.direction != \"incoming-call\") {\n return true;\n } else if (res.direction == \"incoming-call\") {\n return this.isCurrentIncomingCallList.includes(res.id);\n } else {\n return false;\n }\n }\n\n ngAfterViewInit() {\n // this.isRecording = false;\n // setTimeout(() => {\n // this.isRecording = false;\n // }, 3000);\n\n }\n\n GetContactsList() {\n const token = localStorage.getItem('ext_token') || '';\n this.extensionService.readContacts(token).subscribe(\n (res: any) => {\n console.log('API Response:', res);\n\n // Note: Capital B in phoneBook\n if (res && res.phoneBook) {\n this.contacts = res.phoneBook;\n console.log('Contacts array:', this.contacts);\n } else if (Array.isArray(res)) {\n this.contacts = res;\n } else {\n this.contacts = [];\n }\n console.log('Contacts array:', this.contacts);\n this.cdr.detectChanges();\n },\n (error) => {\n console.error('Error fetching contacts:', error);\n this.contacts = [];\n }\n );\n }\n addRes: any;\n async startCall(callData: any) {\n console.log(callData, 'callData');\n try {\n this.showRingAnimation = true;\n const payload = {\n channelId: environment.channelId,\n userId: localStorage.getItem('userId'),\n to: callData.phone,\n fromNumber: callData.from,\n scope: 'local',\n };\n\n const response = await this.initiateCall(payload);\n this.conferenceId = response?.callauth?.id;\n if (response.status == 200) {\n const { id: callAuthId, recordCall } = await this.getCallAuthId(response);\n this.getUserInformation(callAuthId)\n this.recordCall = recordCall; // Store the recordCall value\n const tokenData: any = await this.getOutgoingCallToken(callAuthId);\n await this.connectToDevice(tokenData.token, callData);\n await this.pollCallStatus(callAuthId);\n\n setTimeout(async () => {\n try {\n this.addRes = await this.addParticipantToCall({\n from: callData?.from,\n route: \"OUTGOING\",\n participantNumber: callData?.phone,\n conferenceId: this.conferenceId\n });\n this.callData = { ...callData, participantId: this.addRes?.participantId, isHold: false, isLeft: false, isIncomingCall: false, isConference: false, isAcceptCall: true };\n // this.call['callInfo'] = JSON.parse(JSON.stringify(this.callData));\n console.log('test111111');\n // this.currentCall = {...this.callData, img: callData.img ||'assets/images/user.jpg'};\n // Initialize isAcceptCall based on current call state to ensure UI renders if already connected\n // this.currentCallList.push({\n // ...this.callData,\n // img: callData.img || 'assets/images/user.jpg',\n // isAcceptCall: true\n // });\n console.log('Initial participantId:', this.addRes?.participantId);\n } catch (e) {\n console.error('Error adding initial participant:', e);\n }\n }, 1000)\n // Poll the status for 30-45 seconds\n } else if (response.status == 201) {\n swal(\"Error\", response.message.join(\"<br/>\"), \"error\");\n console.log('test2')\n this.endCall();\n }\n\n } catch (error) {\n this.showRingAnimation = false;\n this.handleError(error);\n console.log('test3')\n this.endCall();\n }\n }\n\n onHoldCall(c: any) {\n console.log(c, 'dsdsdsdsdsdsadsa');\n this.onholdOrUnholdParticipant({\n participantId: [c.participantId],\n conferenceId: this.conferenceId,\n hold: !c.hold,\n conference: true\n })\n c.hold = !c.hold;\n this.cdr.detectChanges();\n }\n\n async onEndCall(c: any, isAllCallEnd?: boolean) {\n console.log(c, 'dsdsdsdsdsdsadsa');\n let participantId = isAllCallEnd ? 'all' : c.participantId || c.participantId;\n let res: any = await this.getRemoveParticipants(participantId, this.conferenceId);\n if (res?.status == 201 && res?.message == 'participant already left') {\n // this.currentCallList = this.currentCallList.filter((item: any) => item.participantId !== c.participantId);\n // this.currentCall = this.currentCallList.length > 0 ? this.currentCallList[0] : null;\n this.cdr.detectChanges();\n }\n await this.getAllParticipants(this.twilioService.conferenceCallInfo.conferenceSid);\n }\n\n private async initiateCall(payload: any) {\n return await this.extensionService.initiateCall(payload).toPromise();\n }\n\n async onholdOrUnholdParticipant(payload: any) {\n return await this.extensionService.holdParticipant(payload).toPromise();\n }\n\n private async addParticipantToCall(payload: any) {\n return await this.extensionService.addParticipant(payload).toPromise();\n }\n\n private async getCallStatusOfParticipants(participantId: any) {\n return await this.extensionService.getCallStatusOfParticipants(participantId).toPromise();\n }\n\n private async onMuteParticipant(payload: any) {\n return await this.extensionService.onMuteParticipant(payload).toPromise();\n }\n\n private async getRemoveParticipants(participantId: any, conferenceId: any) {\n return await this.extensionService.getRemoveParticipants(participantId, conferenceId).toPromise();\n }\n\n private async getCallAuthId(response: any) {\n return {\n id: response.callauth.id,\n recordCall: response.callauth.recordCall\n };\n }\n\n private async getOutgoingCallToken(callAuthId: string) {\n return await this.extensionService.getConferenceCallToken({ authId: callAuthId }).toPromise();\n }\n\n private async connectToDevice(token: any, callData: any) {\n const options: any = {\n codecPreferences: ['opus', 'pcmu'],\n closeProtection: true,\n };\n\n this.device = new Device(token.value, options);\n this.call = await this.device.connect({\n params: {\n From: callData.from,\n To: callData.phone,\n Env: environment.abb,\n Token: token.id,\n Ext: callData.extNum\n },\n rtcConstraints: { audio: { deviceId: 'default' } },\n });\n console.log('test98998111111', this.call);\n // this.call['callInfo'] = JSON.parse(JSON.stringify(callData));\n this.setupEventListeners();\n }\n\n private setupEventListeners() {\n\n this.startTimer();\n this.device?.on('error', (err) => {\n console.log(err);\n this.showRingAnimation = false;\n this.stopTimer();\n });\n\n this.call?.on('error', (error: any) => {\n this.showRingAnimation = false;\n this.stopTimer();\n });\n\n this.call?.on('disconnect', (item: any) => {\n console.log('test-disconnect')\n // this.endCall();\n });\n\n this.call?.on('ringing', () => {\n });\n\n this.call?.on('reject', () => {\n console.log('test5')\n this.endCall();\n });\n\n this.call?.on('accept', () => {\n this.showRingAnimation = false;\n this.disbaleEndCallBtn = false;\n // Ensure the active outgoing call is marked as accepted so the UI switches to the connected view\n try {\n const pid = this.callData?.participantId;\n if (Array.isArray(this.currentCallList) && this.currentCallList.length) {\n const idx = this.currentCallList.findIndex((c: any) => (pid && c?.participantId === pid) || (!pid && c?.phone === this.callData?.phone));\n if (idx !== -1) {\n this.currentCallList[idx].isAcceptCall = true;\n this.currentCall = this.currentCallList[idx];\n }\n }\n this.cdr.detectChanges();\n } catch (e) {\n console.log('Error updating accept state:', e);\n }\n // Start recording if recordCall is true and call is accepted for 30 seconds\n // if (this.recordCall) {\n // setTimeout(() => {\n // if (this.isRecording) return; // If already recording, skip\n // this.startRecording();\n // }, 30000);\n // } else {\n // this.stopRecording();\n // }\n });\n this.call?.on('messageReceived', (message: any) => {\n });\n }\n\n private startTimer() {\n let seconds = 0;\n this.intervalId = setInterval(() => {\n seconds++;\n this.timer = this.formatTime(seconds);\n this.cdr.detectChanges();\n }, 1000);\n }\n\n private stopTimer() {\n clearInterval(this.intervalId);\n this.timer = '00:00';\n }\n\n private formatTime(totalSeconds: number): string {\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return `${this.pad(minutes)}:${this.pad(seconds)}`;\n }\n\n private pad(value: number): string {\n return value < 10 ? `0${value}` : `${value}`;\n }\n private handleError(error: any) {\n swal(\"Error\", error, \"error\");\n }\n\n // endCall() {\n // console.log('endCall() called');\n // console.log('Current call:', this.call?.parameters['From']);\n // console.log('Held call exists:', !!this.heldCall);\n\n // // Disconnect the current active call\n // if (this.call) {\n // this.call.disconnect();\n // this.call = undefined;\n // }\n\n // this.showRingAnimation = false;\n // this.stopTimer();\n\n // // If there's a held call, make it active\n // if (this.heldCall) {\n // console.log('Resuming held call:', this.heldCall.parameters['From']);\n\n // // Make held call the active call\n // this.call = this.heldCall;\n // this.heldCall = undefined;\n // // this.isCallOnHold = false;\n // this.isCallOnHold = !!this.heldCall;\n\n\n // // Unmute the resumed call\n // this.call.mute(false);\n\n // // Update UI with the resumed call info\n // const fromNumber = this.call.parameters['From'];\n // const callerName = this.call.customParameters?.get('name') || '-';\n // const callerImg = this.call.customParameters?.get('image') || 'assets/images/user.jpg';\n\n // this.callData = {\n // ...this.callData,\n // phone: fromNumber,\n // displayNum: fromNumber,\n // name: callerName,\n // img: callerImg\n // };\n\n // // Restart timer for the resumed call\n // this.startTimer();\n // this.disbaleEndCallBtn = false;\n\n // console.log('Held call is now active:', this.callData);\n // this.cdr.detectChanges();\n // } else {\n // // No held call, completely end\n // console.log('No held call, ending completely');\n // this.endCallEvent.emit();\n // this.maximiseDialpad();\n // }\n // }\n\n async endCall(isAllCallEnd?: boolean) {\n console.log('endCall() called');\n // console.log('Current call:', this.call?.parameters['From']);\n console.log('Held call exists:', !!this.heldCall);\n // Leaving conference state when ending current call action\n this.isConference = false;\n\n // if (this.call) {\n // this.call.disconnect();\n // this.call.reject();\n // this.call = undefined;\n // }\n\n this.showRingAnimation = false;\n if (isAllCallEnd) {\n this.stopTimer();\n this.onEndCall({}, isAllCallEnd);\n this.currentCallList = [];\n this.endCallEvent.emit();\n } else {\n this.onEndCall(this.currentCall, isAllCallEnd);\n this.currentCallList = this.currentCallList.filter((c: any) => c?.participantId !== this.currentCall.participantId);\n if (this.currentCallList.length > 0) {\n this.currentCallList[0].isHold = false;\n this.currentCall = this.currentCallList[0];\n await this.onholdOrUnholdParticipant({\n participantId: [this.currentCall?.participantId],\n conferenceId: this.conferenceId,\n hold: false,\n isConference: this.currentCall?.isConference\n });\n } else {\n this.currentCall = null;\n this.currentCallList = [];\n this.endCallEvent.emit();\n }\n }\n // if (this.heldCall) {\n // if (this.call) {\n // // this.call.disconnect();\n // // this.call = undefined;\n // this.onEndCall(this.call?.callInfo, isAllCallEnd);\n // }\n // console.log('Resuming held call:', this.heldCall.parameters['From']);\n\n // // Promote held call\n // // this.call = this.heldCall;\n // this.heldCall = undefined;\n // // this.isCallOnHold = false;\n // // this.incomingCallDiv = false; // Ensure UI renders\n\n // // this.call.mute(false);\n\n // // Update callData\n // const fromNumber = this.call.parameters['From'];\n // const callerName = this.call.customParameters?.get('name') || '-';\n // const callerImg = this.call.customParameters?.get('image') || 'assets/images/user.jpg';\n\n // this.callData = {\n // phone: fromNumber,\n // displayNum: fromNumber,\n // name: callerName,\n // img: callerImg\n // };\n\n // this.startTimer();\n // this.disbaleEndCallBtn = false;\n\n // // Force UI update\n // setTimeout(() => this.cdr.detectChanges());\n\n // console.log('Held call is now active:', this.callData);\n // } else {\n // console.log('No held call, ending completely');\n // console.log('test6')\n // this.endCallEvent.emit();\n // if (this.call) {\n // this.call.disconnect();\n // this.onEndCall(this.call?.callInfo, isAllCallEnd);\n // // this.call = undefined;\n // }\n // this.maximiseDialpad();\n // }\n }\n\n\n async toggleMute(isConference?: boolean) {\n await this.onMuteParticipant({\n participantId: [this.currentCall?.participantId],\n conferenceId: this.conferenceId,\n mute: !this.isMute,\n })\n this.isMute = !this.isMute;\n // this.call?.mute(this.isMute);\n // if (isConference) {\n this.currentCall.isMute = this.isMute;\n // } else {\n\n // }\n }\n toggleKeypad() {\n this.showKeypad = !this.showKeypad;\n this.callInput = '';\n }\n toggleContactsPanel(isRemove?: boolean) {\n if (isRemove) {\n this.showContactsPanel = false;\n this.isAddRemoveParticipant = !this.isAddRemoveParticipant;\n } else {\n this.isAddRemoveParticipant = false;\n this.showContactsPanel = !this.showContactsPanel;\n this.GetContactsList();\n }\n }\n\n addRemoveParticipant() {\n // const conferenceSId = this.addRes?.conferenceSid;\n this.isAddRemoveParticipant = !this.isAddRemoveParticipant;\n this.allParticipentList = this.getAllParticipants(this.twilioService.conferenceCallInfo.conferenceSid);\n }\n\n async add(data?: any) {\n // if(data?.status != 'ringing'){\n this.conferenceId = this.twilioService.conferenceCallInfo.conferenceId;\n if (this.currentCallList.length > 1 && this.currentCall?.isAcceptCall) {\n if (this.currentCall?.isConference) {\n this.isConferenceCallHold = true;\n this.currentCallList.forEach((res) => {\n if (res.isConference) {\n res.isHold = true;\n this.onholdOrUnholdParticipant({\n participantId: [res.participantId],\n conferenceId: this.conferenceId,\n hold: true,\n conference: res.isConference\n });\n }\n })\n } else {\n this.isConferenceCallHold = false;\n const index = this.currentCallList.findIndex((item: any) => item.participantId == this.currentCall?.participantId);\n if (index != -1) {\n // this.currentCallList[index].isHold = true;\n }\n await this.onholdOrUnholdParticipant({\n participantId: this.currentCall?.isIncomingCall ? [this.currentCall?.id] : [this.currentCall?.participantId],\n conferenceId: this.conferenceId,\n hold: true,\n conference: this.currentCall?.isConference\n });\n data.isHold = false;\n }\n }\n // let incomingCallData = this.currentCallList.filter((item: any) => item.isIncomingCall && item.isAcceptCall);\n if (this.currentCallList.length > 1) {\n // this.call = await this.twilioService.connect('');\n this.twilioService.addIncomingParticipant(data?.id, this.twilioService.conferenceCallInfo.conferenceId).subscribe((res: any) => {\n console.log(res, 'bhhhhhhhhhhhhhhhhhhh')\n this.isCurrentIncomingCallList.push(data?.id || data?.participantId);\n data.isAcceptCall = true;\n this.currentCall = data;\n })\n } else {\n this.call = await this.twilioService.connect('');\n this.isCurrentIncomingCallList.push(data?.id);\n console.log(this.call, 'callConnect');\n data.isAcceptCall = true;\n this.currentCall = data;\n }\n // } else if(data?.status == 'ringing'){\n // this.twilioService.addIncomingParticipant(data?.id, this.twilioService.conferenceCallInfo.conferenceId).subscribe((data: any) => {\n // console.log(data,'bhhhhhhhhhhhhhhhhhhh')\n // })\n // }\n\n // this.device = new Device();/\n // Device.connect({ conferenceName: 'my-conference-room' });\n // this.device = new Device({ conferenceName: 'my-conference-room' });\n }\n\n rejectCallFromList(data?: any) {\n console.log(data, '266565655')\n // this.twilioService.rejectIncomingParticipant(data?.id, this.twilioService.conferenceCallInfo.conferenceId).subscribe((data: any) => {\n // console.log(data,'bhhhhhhhhhhhhhhhhhhh')\n // })\n }\n async callContact(contact: any) {\n console.log('Adding participant:', contact);\n console.log('this.call', this.call)\n // console.log('this.call', this.call.status())\n // Check if there's an active call\n // if (!this.call || this.call.status() !== 'open') {\n // console.error('No active call');\n // return;\n // }\n\n // Get the phone number from the contact\n const phoneNumber = contact?.numbersList?.[0]?.number;\n const currentCall = this.currentCallList.find((c: any) => c?.phone === phoneNumber);\n if (!phoneNumber || currentCall) {\n console.error('No phone number found for contact');\n return;\n }\n\n try {\n if (this.isConference) {\n let data: any = await this.addParticipantToCall({\n from: this.callData?.from || this.selectedCallerId?.number,\n route: \"OUTGOING\",\n participantNumber: phoneNumber,\n conferenceId: this.conferenceId\n });\n this.callData = {\n // ...this.callData,\n phone: phoneNumber,\n displayNum: phoneNumber,\n name: contact?.name || `${contact?.firstName} ${contact?.lastName}` || phoneNumber,\n img: contact?.img || 'assets/images/user.jpg',\n participantId: data?.participantId,\n from: this.selectedCallerId?.number,\n isIncomingCall: false,\n isHold: false,\n isLeft: false,\n isConference: true\n };\n this.cdr.detectChanges();\n console.log(this.callData, 'this.callData5656')\n console.log('test1111115555555555');\n this.currentCall = this.callData;\n // this.currentCallList.push({...this.callData});\n console.log(\"Participant added to conference:\", phoneNumber);\n this.showRingAnimation = false;\n } else {\n this.currentCallList.forEach(async (c: any) => {\n if (c?.participantId && !c?.isHold) {\n c.isHold = true;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n }\n });\n // Put current call on hold\n // this.heldCall = this.call;\n this.isCallOnHold = true;\n // this.heldCall.mute(true);\n // this.heldCall['parameters']['caller_name'] = { ...this.callData }\n // this.call=null\n // Close contacts panel and show ring animation\n this.showContactsPanel = false;\n this.showRingAnimation = true;\n // Update UI to reflect the new outbound leg being dialed\n const contactName = [contact?.firstName, contact?.middleName, contact?.lastName]\n .filter(Boolean)\n .join(' ');\n // this.call['callInfo'] = JSON.parse(JSON.stringify(this.callData));\n\n // Get the conference ID from the current call or use the stored one\n // const conferenceId = this.conferenceId;\n\n if (!this.conferenceId) {\n console.error(\"No conferenceId found for active call\");\n swal(\"Error\", \"Cannot add participant: conference not found\", \"error\");\n this.showRingAnimation = false;\n return;\n }\n\n // Add participant to the conference\n let data: any = await this.addParticipantToCall({\n from: this.callData?.from || this.selectedCallerId?.number,\n route: \"OUTGOING\",\n participantNumber: phoneNumber,\n conferenceId: this.conferenceId\n });\n\n // this.callData = {\n // ...this.callData,\n // participantId: ,\n // }\n this.callData = {\n // ...this.callData,\n phone: phoneNumber,\n displayNum: phoneNumber,\n name: contact?.name || `${contact?.firstName} ${contact?.lastName}` || phoneNumber,\n img: contact?.img || 'assets/images/user.jpg',\n participantId: data?.participantId,\n from: this.selectedCallerId?.number,\n isIncomingCall: false,\n isHold: false,\n isLeft: false,\n isConference: false\n };\n this.cdr.detectChanges();\n console.log(this.callData, 'this.callData')\n console.log('test111111');\n this.currentCall = this.callData;\n // this.currentCallList.push({...this.callData});\n console.log(\"Participant added to conference:\", phoneNumber);\n this.showRingAnimation = false;\n }\n } catch (error) {\n console.error('Error adding participant:', error);\n this.showRingAnimation = false;\n // Restore held call on error\n if (this.heldCall) {\n // this.call = this.heldCall;\n // this.heldCall = undefined;\n // this.isCallOnHold = false;\n // this.call.mute(false);\n }\n this.handleError(error);\n }\n }\n\n getAllParticipants(conferenceSid: string) {\n this.extensionService.getAllParticipants(conferenceSid).subscribe((res: any) => {\n this.allParticipentList = res.participants;\n })\n }\n\n // acceptConcurrentCall(incomingCall: any) {\n // if (!incomingCall) return;\n\n // // Put current call on hold instead of disconnecting\n // if (this.call) {\n // this.heldCall = this.call;\n // this.isCallOnHold = true;\n // // Mute the held call\n // this.heldCall.mute(true);\n // }\n\n // incomingCall.accept();\n // this.call = incomingCall;\n // this.callData.phone = incomingCall.parameters['From'];\n // this.callData.name = incomingCall.customParameters?.get('name') || '-';\n // this.callData.img = incomingCall.customParameters?.get('image') || 'assets/images/user.jpg';\n // this.isConcurrentIncoming = false;\n // this.incomingCallDiv = false;\n // this.disbaleEndCallBtn = false;\n\n // // Reset timer for new call\n // this.stopTimer();\n // this.startTimer();\n // this.cdr.detectChanges();\n // }\n\n\n acceptConcurrentCall(incomingCall: any) {\n if (!incomingCall) return;\n\n\n // Put current call on hold instead of disconnecting\n // if (this.call) {\n // // this.heldCall = this.call;\n // this.isCallOnHold = true;\n // // // Mute the held call\n // // this.heldCall.mute(true);\n // // }\n\n // // Accept the new call\n // incomingCall.accept();\n // this.call = incomingCall;\n // this.callData.phone = incomingCall.parameters['From'];\n // this.callData.name = incomingCall.customParameters?.get('name') || '-';\n // this.callData.img = incomingCall.customParameters?.get('image') || 'assets/images/user.jpg';\n // this.isConcurrentIncoming = false;\n // this.incomingCallDiv = false;\n // this.disbaleEndCallBtn = false;\n\n // // 🟢 Remove the accepted call from incoming list\n // this.newIncomingCallsList = (this.newIncomingCallsList || []).filter(\n // (c: any) => c?.parameters?.CallSid !== incomingCall?.parameters?.CallSid\n // );\n // this.incomingCallsNewInfo.emit(this.newIncomingCallsList);\n\n // // 🕒 Reset timer for new call\n // this.stopTimer();\n // this.startTimer();\n\n // this.cdr.detectChanges();\n }\n\n async swapCalls(callInfo: any,isConferenceCall?: boolean) {\n // if (!this.heldCall || !this.call) return;\n console.log(this.call, 'this.call');\n console.log(this.heldCall, 'this.heldCall');\n console.log(this.currentCallList, 'this.currentCallList');\n console.log(callInfo, 'callInfo for swapCalls');\n if(this.currentCall?.isConference){\n this.currentCallList.forEach(async (c: any) => {\n if (c?.isConference && !c?.isHold) {\n c.isHold = true;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n } else if (callInfo?.isHold && c?.participantId === callInfo?.participantId) {\n c.isHold = false;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n this.currentCall = c;\n }\n });\n this.isConferenceCallHold = true;\n } else if(isConferenceCall) {\n this.isConferenceCallHold = false;\n this.currentCallList.forEach(async (c: any) => {\n if (c?.isConference) {\n c.isHold = false;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n } else {\n c.isHold = true;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n }\n });\n } else {\n this.isConferenceCallHold = false;\n this.currentCallList.forEach(async (c: any) => {\n if (c?.participantId && !c?.isHold) {\n c.isHold = true;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n } else if (callInfo?.isHold && c?.participantId === callInfo?.participantId) {\n c.isHold = false;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n this.currentCall = c;\n }\n });\n }\n // await this.onholdOrUnholdParticipant({\n // participantId: this.call?.callInfo?.participantId,\n // conferenceId: this.conferenceId,\n // hold: true\n // });\n // await this.onholdOrUnholdParticipant({\n // participantId: this.heldCall?.callInfo?.participantId,\n // conferenceId: this.conferenceId,\n // hold: false\n // });\n console.log('Swapping calls...');\n // console.log('Before swap - Active call:', this.call.parameters['From']);\n // console.log('Before swap - Held call:', this.heldCall.parameters['From']);\n\n // Swap the calls\n // const temp = this.call;\n // this.call = this.heldCall;\n // this.heldCall = temp;\n\n\n // this.call.mute(false);\n // this.heldCall.mute(true);\n\n // Update UI with active call info - extract from call parameters\n // const fromNumber = this.call.parameters['From'];\n // const callerName = this.call.customParameters?.get('name') || '-';\n // const callerImg = this.call.customParameters?.get('image') || 'assets/images/user.jpg';\n // const displayNumber = this.call.customParameters?.get('displayNumber') || '-';\n\n // Update callData to refresh the main UI\n // this.callData = {\n // ...this.callData,\n // phone: fromNumber,\n // displayNum: (displayNumber && displayNumber !== '-') ? displayNumber : fromNumber,\n // name: (callerName && callerName !== '-') ? callerName : (this.callData?.name || fromNumber),\n // img: callerImg || this.callData?.img || 'assets/images/user.jpg'\n // };\n\n // console.log('After swap - Active call:', this.call.parameters['From']);\n // console.log('After swap - Held call:', this.heldCall.parameters['From']);\n // console.log('Updated callData:', this.callData);\n console.log('this.currentCallList after swap', this.currentCallList);\n this.cdr.detectChanges();\n }\n\n async mergeCalls() {\n // Merge functionality - unmute both calls for conference\n if (this.currentCallList.length > 1) {\n this.currentCallList.forEach(async (c: any) => {\n if (c?.participantId) {\n c.isHold = false;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: false,\n conference: true\n });\n c.isConference = true;\n // } else if(c?.participantId && c.isIncomingCall){\n // await this.twilioService.addIncomingParticipant(c?.participantId, this.conferenceId).subscribe((data: any) => {\n // console.log(data,'bhhhhhhhhhhhhhhhhhhh')\n // })\n // c.isHold = false;\n // c.isConference = true;\n }\n this.isConferenceCallHold = false;\n });\n // await this.onholdOrUnholdParticipant({\n // participantId: this.heldCall?.callInfo?.participantId,\n // conferenceId: this.conferenceId,\n // hold: false\n // });\n // this.heldCall.mute(false);\n // this.call.mute(false);\n this.isCallOnHold = false;\n this.isConference = true;\n this.cdr.detectChanges();\n }\n }\n\n endHeldCall() {\n // if (this.heldCall) {\n // this.heldCall.disconnect();\n // this.heldCall = undefined;\n // this.isCallOnHold = false;\n // this.cdr.detectChanges();\n // }\n }\n\n\n hasDetailedInfo(callData: any): boolean {\n if (!callData) return false;\n\n // Check if userInfo exists and has meaningful data\n if (callData.userInfo && callData.userInfo.c2cInformation) {\n const info = callData.userInfo.c2cInformation;\n return !!(\n info.subject && info.subject !== '-' ||\n info.email && info.email !== '-' ||\n info.message && info.message !== '-' ||\n info.pointName && info.pointName !== '-' ||\n info.sourceName && info.sourceName !== '-' ||\n info.extension && info.extension !== '-' ||\n info.url ||\n info.latitude ||\n info.longitude\n );\n }\n\n return false;\n }\n\n // onClickExpand(data?: any): void {\n // if (this.selectedIncomingCall === data && this.isClickExpand) {\n // this.isClickExpand = false;\n // this.selectedIncomingCall = null;\n // // this.selectedIncomingCallInfo.emit({});\n // return;\n // }\n // this.isClickExpand = true;\n // this.selectedIncomingCall = data;\n\n // if (this.selectedIncomingCall) {\n // this.selectedIncomingCall['isClickExpand'] = true;\n\n // if (this.newIncomingCallsList && this.newIncomingCallsList.length > 0) {\n // this.newIncomingCallsList.forEach((call: any) => {\n // if (call !== this.selectedIncomingCall) {\n // call['isClickExpand'] = false;\n // }\n // });\n // }\n\n // // this.selectedIncomingCallInfo.emit(this.selectedIncomingCall);\n\n // if (!this.selectedIncomingCall.userInfo || this.selectedIncomingCall.userInfo.status == 201) {\n // // this.getUserInformation(this.selectedIncomingCall);\n // }\n // }\n // }\n\n // getUserInformation(incomingCallData: any) {\n // let data = this.fromEntries(Array.from(incomingCallData.customParameters.entries()));\n // this.extensionService.getUserInformation(data['twilioAuthId']).subscribe(\n // response => {\n // setTimeout(()=>{\n // incomingCallData['userInfo']=response\n // }, 5000)\n // }, error => {\n // console.error('Error starting recording', error);\n // });\n // }\n\n rejectConcurrentCall(incomingCall: any) {\n\n if (!incomingCall) return;\n if (incomingCall.reject) {\n incomingCall.reject();\n }\n if (incomingCall.disconnect) incomingCall.disconnect();\n // Remove from list\n this.newIncomingCallsList = (this.newIncomingCallsList || []).filter((c: any) => c?.parameters?.CallSid !== incomingCall?.parameters?.CallSid);\n this.incomingCallsNewInfo.emit(this.newIncomingCallsList);\n // If no more incoming, hide banner\n if (!this.newIncomingCallsList || this.newIncomingCallsList.length === 0) {\n this.isConcurrentIncoming = false;\n this.incomingCallDiv = false;\n }\n this.cdr.detectChanges();\n }\n onCallInputs(num: any) {\n try {\n if (Number.isInteger(num) || num == '+' || num == '*' || num == '#') {\n if (num == '#') {\n new Audio(`/assets/dial-tones/dtmf/dtmf-hash-.mp3`).play();\n } else if (num == '*') {\n new Audio(`/assets/dial-tones/dtmf/dtmf-star-.mp3`).play();\n } else {\n new Audio(`/assets/dial-tones/dtmf/dtmf-${num}-.mp3`).play();\n }\n\n this.callInput = this.callInput + String(num);\n this.showClearBtn = true;\n }\n let str = String(num);\n this.call?.sendDigits(str);\n } catch (e) {\n console.log(e);\n }\n }\n onCallInputEnter(ev: any) {\n try {\n this.call?.sendDigits(String(ev.key));\n } catch (e) {\n console.log(e);\n }\n }\n closeIncomingCall(data: any) {\n // this.incomingCallDiv = false;\n if (data.show) {\n //this.showCallProgressEvent.emit()\n // handle incoming call accepted\n this.startTimer();\n this.disbaleEndCallBtn = false;\n // this.call = data.call;\n this.isConcurrentIncoming = false;\n this.incomingCallDiv = false;\n\n const incomingDetail = this.extensionService.getCallSid();\n this.incomingRecordCall = incomingDetail.recordCall;\n\n if (this.incomingRecordCall) {\n this.startRecording();\n } else {\n this.isRecording = false;\n }\n this.cdr.detectChanges();\n } else {\n // incoming call rejected or auto-cancelled\n this.isConcurrentIncoming = false;\n this.incomingCallDiv = false;\n // If there is NO active call, then propagate end. Otherwise keep ongoing UI.\n if (!this.call || this.call.status() !== 'open') {\n console.log('test7')\n this.endCallEvent.emit();\n }\n }\n }\n clearInputs() {\n this.callInput = this.callInput.slice(0, -1);\n }\n isMinimised: boolean = false;\n minimiseDialpad() {\n this.minimiseEvent.emit(true);\n this.isMinimised = true;\n }\n maximiseDialpad() {\n this.minimiseEvent.emit(false);\n this.isMinimised = false;\n }\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n }\n startRecording() {\n let sid;\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n sid = this.incomingCallSid ? this.incomingCallSid : this.callSid || this.addRes?.conferenceSid;\n\n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n this.extensionService.getCallRecording(sid).subscribe(response => {\n this.isRecording = true;\n this.isPaused = false;\n this.timeElapsed = 0;\n this.startTimer1();\n }, error => {\n console.error('Error starting recording', error);\n });\n }\n stopRecording() {\n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n this.isRecording = false;\n this.isPaused = false;\n if (this.timerSubscription) {\n this.timerSubscription.unsubscribe();\n }\n }\n pauseRecording() {\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n const sid = this.incomingCallSid ? this.incomingCallSid : this.callSid;\n\n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n\n this.extensionService.pauseOrResumeRecording(sid, 'pause').subscribe(\n response => {\n this.stopRecordingTimer();\n this.isPaused = true;\n },\n (error) => {\n console.error('Error pausing recording:', error);\n // Consider updating the UI to show the error state\n }\n );\n }\n resumeRecording() {\n let sid;\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n sid = this.incomingCallSid ? this.incomingCallSid : this.callSid;\n\n // if (!this.incomingRecordCall && !this.recordCall) {\n // return; // Skip if recording is not enabled\n // }\n this.extensionService.pauseOrResumeRecording(sid, 'resume').subscribe(response => {\n this.isPaused = false;\n this.startTimer1();\n }, error => {\n console.error('Error resuming recording', error);\n });\n }\n getTimeDifference(inputTime: string): string {\n const pastTime = new Date(inputTime).getTime();\n const currentTime = new Date().getTime();\n\n let diff = Math.floor((currentTime - pastTime) / 1000); // total seconds\n\n const minutes = Math.floor(diff / 60);\n const seconds = diff % 60;\n\n const mm = minutes < 10 ? '0' + minutes : minutes;\n const ss = seconds < 10 ? '0' + seconds : seconds;\n\n return `${mm}:${ss}`;\n }\n startTimer1() {\n this.timerSubscription = interval(1000).subscribe(() => {\n this.timeElapsed++;\n });\n }\n stopRecordingTimer() {\n if (this.timerSubscription) {\n this.timerSubscription.unsubscribe(); // Pause the timer\n this.timerSubscription = undefined; // Optionally reset the subscription\n }\n }\n getFormattedTime() {\n const minutes = Math.floor(this.timeElapsed / 60);\n const seconds = this.timeElapsed % 60;\n return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\n }\n pollCallStatus(callAuthId: string) {\n const maxTime = 30000; // Poll for up to 30 seconds\n const pollInterval = 3000; // Poll every 3 seconds\n let elapsedTime = 0;\n const intervalId = setInterval(async () => {\n elapsedTime += pollInterval;\n try {\n const statusResponse = await this.extensionService.getCallStatus(callAuthId).toPromise() as CallStatusResponse;\n if (statusResponse && statusResponse.callDetails) {\n this.callStatus = statusResponse.callDetails.callStatus;\n if (this.callStatus === 'in-progress') {\n this.callSid = statusResponse.callDetails.callSid;\n if (this.recordCall && !this.isRecording) {\n this.startRecording();\n }\n clearInterval(intervalId);\n } else if (this.callStatus === 'completed') {\n clearInterval(intervalId);\n console.log('test1')\n this.endCall();\n this.stopRecording();\n } else if (this.callStatus === 'ringing') {\n // Continue polling; do not clear the interval yet\n }\n }\n } catch (error) {\n clearInterval(intervalId);\n }\n if (elapsedTime >= maxTime) {\n // console.log('Max polling time reached. Stopping poll.');\n clearInterval(intervalId);\n }\n }, pollInterval);\n }\n\n getUserInformation(id: any) {\n this.extensionService.getUserInformation(id).subscribe(\n response => {\n console.log(response)\n }, error => {\n console.error('Error starting recording', error);\n });\n }\n incomingCallsNewList(data: any) {\n console.log(data, 'newIncomingCallsListOUR')\n this.newIncomingCallsList = data;\n this.incomingCallsNewInfo.emit(this.newIncomingCallsList);\n }\n selectedIncomingCallInfo(data: any) {\n this.selectedIncomingCall = data;\n }\n\n getHoldCallList(){\n let holdList: any[] = [];\n let isConference = false;\n this.currentCallList.forEach((c: any) => {\n if(c?.isHold && !c?.isConference){\n holdList.push(c);\n }\n if(c?.isConference && !isConference){\n isConference = true;\n c['isConferenceCallHold'] = true;\n holdList.push(c);\n }\n });\n return holdList;\n }\n\n onClickExpand(data: any){\n this.isClickExpand = true;\n }\n ngOnDestroy() {\n this.callData.dial = false;\n if (this.timerSubscription) {\n this.timerSubscription.unsubscribe();\n }\n }\n}","<div class=\"d-flex\">\n <div class=\"call-container\" *ngIf=\"!isMinimised\"\n [ngClass]=\"{'collops': isCollops, 'incoming-call-container': isClickExpand, 'contacts-open': showContactsPanel }\">\n <!-- <div id=\"minimize-btn-div\">\n <span class=\"material-symbols-outlined minimize-btn\" (click)=\"minimiseDialpad()\">\n minimize\n </span>\n </div> -->\n <!-- <lib-incoming-call *ngIf=\"incomingCallDiv && !isConcurrentIncoming\" [incomingCallData]=\"callData\"\n [deviceId]=\"deviceId\" [newIncomingCallsList]=\"newIncomingCallsList\"\n (closeIncomingCallDiv)=\"closeIncomingCall($event)\" (incomingCallsNewList)=\"incomingCallsNewList($event)\"\n (selectedIncomingCallInfo)=\"selectedIncomingCallInfo($event)\"></lib-incoming-call> -->\n {{currentCallList.length }}tttttttttttttttttttt\n <ng-container *ngIf=\"!incomingCallDiv || isConcurrentIncoming || true\">\n <!-- All type Call Hold list -->\n <div class=\"held-call-banner\"\n *ngIf=\"currentCallList.length > 1 && !!currentCall && ((isConferenceCallHold || !isConference) || isConference)\">\n <div class=\"held-call-content\" *ngIf=\"isConferenceCallHold\">\n <div class=\"held-info\">\n <span class=\"material-symbols-outlined hold-icon\">pause_circle</span>\n <div class=\"held-caller\">\n <span class=\"held-label\">Hold</span>\n <span class=\"held-name\">Conference Call</span>\n <!-- <span class=\"held-number\" *ngFor=\"let heldCall of currentCallList\">{{heldCall?.phone || ''}}</span> -->\n </div>\n </div>\n <div class=\"held-actions\">\n <button class=\"held-btn swap-btn\" (click)=\"swapCalls({},true)\" title=\"Swap calls\">\n <span class=\"material-symbols-outlined\"> swap_vert </span>\n </button>\n </div>\n </div>\n <ng-container *ngFor=\"let heldCall of currentCallList\">\n <div class=\"held-call-content\" *ngIf=\"heldCall?.isHold && !heldCall?.isConference\">\n <div class=\"held-info\">\n <span class=\"material-symbols-outlined hold-icon\">pause_circle</span>\n <div class=\"held-caller\">\n <span class=\"held-label\">Hold</span>\n <span class=\"held-name\">{{heldCall?.name || 'Unknown number'}}</span>\n <span class=\"held-number\">{{heldCall?.phone || ''}}</span>\n </div>\n </div>\n <div class=\"held-actions\">\n <button class=\"held-btn swap-btn\" (click)=\"swapCalls(heldCall)\" title=\"Swap calls\">\n <span class=\"material-symbols-outlined hold-icon\">swap_vert</span>\n </button>\n </div>\n </div>\n <div class=\"held-call-content\" *ngIf=\"heldCall?.isIncomingCall && !heldCall?.isAcceptCall\">\n <div class=\"held-info\">\n <span class=\"material-symbols-outlined hold-icon\">phone_callback</span>\n <div class=\"held-caller\">\n <span class=\"held-label\">Incoming Call</span>\n <span class=\"held-name\">{{heldCall?.name || 'Unknown number'}}</span>\n <span class=\"held-number\">{{heldCall?.phone || ''}}</span>\n </div>\n </div>\n <div class=\"held-actions\">\n <button class=\"banner-btn receive-btn\" *ngIf=\"!heldCall?.isAcceptCall\">\n <span class=\"material-symbols-outlined\" (click)=\"add(heldCall)\"> call </span>\n </button>\n <!-- <button class=\"call-btn-wrapper receive-btn\" *ngIf=\"heldCall?.isAcceptCall\">\n <span class=\"material-symbols-outlined\"> call_merge </span>\n </button> -->\n <button class=\"call-btn-wrapper banner-btn receive-btn\" *ngIf=\"heldCall?.isAcceptCall\">\n <span class=\"material-symbols-outlined\"> swap_vert </span>\n </button>\n <button class=\"call-btn-wrapper banner-btn reject-btn\">\n <span class=\"material-symbols-outlined\" (click)=\"rejectCallFromList(heldCall)\"> call_end\n </span>\n </button>\n <div class=\"togglearrow-arrow banner-btn me-2\" id=\"togglearrow\" (click)=\"onClickExpand(heldCall)\">\n <i class=\"fa fa-angle-right\"></i>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Compact banners for concurrent incoming (one per call) -->\n <ng-container *ngIf=\"currentCallList.length > 1\">\n <div class=\"incoming-banners-container\" *ngIf=\"!isConference && currentCallList.length > 1\">\n <div class=\"\" style=\"position: absolute;width: 100%;top: 0px;\">\n <ng-container *ngFor=\"let inc of currentCallList; let i = index\">\n <div class=\"incoming-banner\" *ngIf=\"inc?.isIncomingCall && !inc?.isAcceptCall\"\n [ngStyle]=\"{ top: ((isCallOnHold && heldCall) ? 64 : 0) + (i * 70) + 'px' }\">\n <div class=\"incoming-banner-content\">\n <div class=\"incoming-info\">\n <span class=\"incom ing-label\">Incoming call</span>\n <div class=\"incoming-caller\">\n <span class=\"caller-name\">{{ inc?.userInfo?.c2cInformation?.name ||\n inc?.customParameters?.get('name') || '-' }}</span>\n <span class=\"caller-number\">{{ inc?.userInfo?.c2cInformation?.number ||\n inc?.parameters?.From || '' }}</span>\n </div>\n </div>\n <div class=\"incoming-actions\">\n <button class=\"banner-btn accept-btn\" (click)=\"add(inc)\">\n <span class=\"material-symbols-outlined\">call</span>\n </button>\n <button class=\"banner-btn reject-btn\" (click)=\"onEndCall(inc)\">\n <span class=\"material-symbols-outlined\">call_end</span>\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- For single incoming call -->\n <div class=\"h-100 my-5\" style=\"display: flex; flex-direction: column;\"\n *ngIf=\"currentCallList.length === 1 && currentCallList[0]?.isIncomingCall && !currentCallList[0]?.isAcceptCall \">\n <div class=\"callToNum\">Incoming call on <br /><span>{{currentCallList[0]?.phone || 'Unknown\n Number'}}</span>\n </div>\n <div class=\"call-animation\" [ngClass]=\"{'call-animation-play': showRingAnimation}\">\n <img class=\"avatar-img\" [src]=\"currentCallList[0]?.img\" alt=\"\" width=\"120\" />\n </div>\n <div class=\"callerDetails\">\n <h1>{{currentCallList[0]?.c2cInformation?.name || 'Unknown Number'}}</h1>\n <p>{{currentCallList[0]?.c2cInformation?.number}}</p>\n </div>\n\n <div class=\"call-action-btns mt-auto\">\n <button class=\"call-btn receive-btn\" *ngIf=\"!newIncomingCallsList[0]?.isCallConnected\">\n <span class=\"material-symbols-outlined\" (click)=\"add(currentCallList[0])\"> call </span>\n </button>\n <button class=\"call-btn reject-btn\">\n <span class=\"material-symbols-outlined\" (click)=\"onEndCall(currentCallList[0])\"> call_end\n </span>\n </button>\n </div>\n </div>\n\n <!-- For multiple incoming calls but not any call progress -->\n\n\n <!-- For single active call -->\n {{!isConference}} === {{isConferenceCallHold}} === {{!!currentCall?.id}}0000\n <div *ngIf=\"(!isConference || isConferenceCallHold) && !!currentCall?.id\"\n [ngStyle]=\"{'display': 'flex', 'flex-direction': 'column', 'position': 'relative'}\" class=\"active-call\">\n\n <div class=\"call-animation\" [ngClass]=\"{'call-animation-play': showRingAnimation}\">\n <img class=\"avatar-img\" [src]=\"currentCall.img\" alt=\"\" width=\"120\" />\n </div>\n <div class=\"callerDetails\">\n <h1 [ngStyle]=\"{'margin-top': showKeypad ? '0': '8px'}\">{{currentCall.name || 'Unknown number'}}\n </h1>\n <p>{{currentCall.phone }}</p>\n <h4 style=\"margin-top: 4px\">{{currentCall.time || timer}}</h4>\n </div>\n\n <div class=\"record-action-btns\" *ngIf=\"!showKeypad\"\n [ngStyle]=\"{'margin-top': showKeypad ? '0': '20px'}\">\n <div class=\"record-btn-container\">\n <button class=\"record-btn start-stop\" *ngIf=\"!isRecording\"\n [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording()\"\n [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\"\n [disabled]=\"!currentCall?.isAcceptCall\">\n <span class=\"recording-icon\"></span>\n </button>\n <div class=\"pause-resume-btns\">\n <button class=\"record-btn pause-resume\" *ngIf=\"isRecording && !isPaused\"\n (click)=\"pauseRecording()\">\n <span class=\"material-symbols-outlined\"> pause </span>\n </button>\n <button class=\"record-btn pause-resume\" *ngIf=\"isPaused\" (click)=\"resumeRecording()\">\n <span class=\"material-symbols-outlined\"> play_arrow </span>\n </button>\n </div>\n </div>\n <div *ngIf=\"isRecording\" class=\"timer-display\">\n {{ getFormattedTime() }}\n </div>\n </div>\n <div *ngIf=\"showKeypad\" class=\"sendDigit\">\n <input type=\"text\" name=\"call-inputs\" id=\"call-input\" [(ngModel)]=\"callInput\"\n (keyup)=\"onCallInputEnter($event)\">\n <span class=\"material-symbols-outlined input-clear-btn\" *ngIf=\"callInput\"\n (click)=\"clearInputs()\">close_small</span>\n </div>\n <div class=\"btn-container justify-content-center\" *ngIf=\"showKeypad\">\n <div class=\"key-btn\" *ngFor=\"let key of keypadVal\" (click)=\"onCallInputs(key.num)\">\n {{key.num}}\n <span class=\"btn-albhabets\">{{key.text ? key.text : ' '}}</span>\n </div>\n </div>\n\n <div class=\"call-action-btns\" [ngStyle]=\"{'margin-top': showKeypad ? '0': '110px'}\">\n <div class=\"mb-3\" *ngIf=\"!incomingCallDiv || isConcurrentIncoming\">\n <button class=\"held-btn merge-btn\" (click)=\"mergeCalls()\" title=\"Merge calls\"\n [disabled]=\"currentCallList.length < 2\">\n <span>Merge</span>\n </button>\n </div>\n <div class=\"flex align-items-center justify-content-evenly mb-3\">\n <button class=\"call-sec-btn mr-3\" [disabled]=\"!currentCall?.isAcceptCall\"\n (click)=\"toggleMute()\">\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic </span>\n\n </button>\n <button class=\"call-sec-btn mr-3\" [disabled]=\"!currentCall?.isAcceptCall\">\n <span class=\"material-symbols-outlined\" (click)=\"toggleKeypad()\"> transition_dissolve\n </span>\n </button>\n <button class=\"call-sec-btn\" [disabled]=\"!currentCall?.isAcceptCall\"\n (click)=\"toggleContactsPanel()\">\n <span class=\"material-symbols-outlined\"> add </span>\n </button>\n </div>\n\n <div>\n <button class=\"call-btn end-call-btn\" [disabled]=\"!currentCall?.isAcceptCall\"\n (click)=\"endCall()\">\n <span class=\"material-symbols-outlined\"> call_end </span>\n </button>\n </div>\n </div>\n\n\n <!-- <div class=\"contacts-panel\" *ngIf=\"showContactsPanel\">\n <div class=\"contacts-header\">\n <span class=\"material-symbols-outlined back\" (click)=\"toggleContactsPanel()\"> chevron_left </span>\n <div class=\"title\">Contacts</div>\n <span class=\"material-symbols-outlined search\"> search </span>\n </div>\n <div class=\"contacts-list\">\n <div class=\"contact-item\" *ngFor=\"let c of contacts\">\n <img class=\"contact-avatar\" [src]=\"c.img || 'assets/images/user.jpg'\" alt=\"\" />\n <div class=\"contact-info\">\n <div class=\"contact-name\">{{c.firstName}} {{c.middleName}} {{c.lastName}}</div>\n <div class=\"contact-title\">{{ (c.numbersList && c.numbersList[0]?.number)}}</div>\n </div>\n <button class=\"contact-call-btn\" (click)=\"callContact(c)\">\n <span class=\"material-symbols-outlined\"> call </span>\n <span class=\"label\">Call</span>\n </button>\n </div>\n </div>\n </div> -->\n\n\n <!-- <div class=\"mt-2 px-3 call-info-wrapper \" [ngClass]=\"{'open-collops': isCollops}\">\n <div class=\"text-center\" >\n <i class=\"fa fa-angle-down\" *ngIf=\"isCollops\" (click)=\"isCollops = !isCollops\"></i>\n <i class=\"fa fa-angle-up\" *ngIf=\"!isCollops\" (click)=\"isCollops = !isCollops\"></i>\n </div>\n <ng-container *ngIf=\"isCollops\">\n <div class=\"row mb-2\">\n <div class=\"col-6\">\n <div >First Name:</div>\n <div >test ttttt</div>\n </div>\n <div class=\"col-6\">\n <div>Last Name:</div>\n <div>tetst test </div>\n </div>\n </div>\n <div class=\"mb-2\">\n <div class=\"\">Email:</div>\n <div class=\"\">abcdeft@vgroup.com</div>\n </div>\n <div class=\"row mb-2\">\n <div class=\"col-6\">\n <div class=\"\">Number:</div>\n <div class=\"\">63545985264225</div>\n </div>\n <div class=\"col-6\">\n <div class=\"\">Language:</div>\n <div class=\"\">English</div>\n </div>\n </div>\n <div class=\"row mb-2\">\n <div class=\"col-6\">\n <div class=\"\">Image :</div>\n <div class=\"\">test.jpg </div>\n </div>\n <div class=\"col-6\">\n <div class=\"\">Extension :</div>\n <div class=\"\">4596</div>\n </div>\n </div>\n <div class=\" mb-2\">\n <div class=\"\">Note :</div>\n <div class=\"\">tes test test </div>\n </div>\n <div class=\" mb-2\">\n <div class=\"\">\n <div class=\"\">Subject:</div>\n <div class=\"\">hello world | test</div>\n </div>\n </div>\n <div class=\" mb-4\">\n <div class=\"\">\n <div class=\"\">Message:</div>\n <div class=\"\">test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test </div>\n </div>\n </div>\n </ng-container>\n </div> -->\n </div>\n\n\n <!-- conference call view -->\n <div class=\"conference-call-view\" *ngIf=\"isConference && !isConferenceCallHold\">\n <div class=\"conf-heading\">\n <span class=\"conf-icon material-symbols-outlined\"> groups </span>\n <span class=\"conf-title\">Conference Call</span>\n </div>\n\n <div class=\"scroll-container\">\n <div class=\"scroll-text conf-name\">\n <ng-container *ngFor=\"let call of currentCallList; let i = index\">\n <ng-container *ngIf=\"call?.isConference\">\n <span *ngIf=\"i != 0\">&</span>\n {{call?.name ? call?.name : call?.phone || 'Unknown number'}}\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div class=\"conf-timer\">{{ timer }}</div>\n <!-- <div class=\"conf-record\">\n <button class=\"record-stop-btn\" *ngIf=\"isRecording\" (click)=\"toggleRecording()\" title=\"Stop Recording\">\n <span class=\"material-symbols-outlined\"> stop_circle </span>\n </button>\n </div> -->\n\n <div class=\"record-action-btns mt-auto\" *ngIf=\"!showKeypad\"\n [ngStyle]=\"{'margin-top': showKeypad ? '0': '20px'}\">\n <div class=\"record-btn-container\">\n <button class=\"record-btn start-stop\" *ngIf=\"!isRecording\"\n [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording()\"\n [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\">\n <span class=\"recording-icon\"></span>\n </button>\n <div class=\"pause-resume-btns\">\n <button class=\"record-btn pause-resume\" *ngIf=\"isRecording && !isPaused\"\n (click)=\"pauseRecording()\">\n <span class=\"material-symbols-outlined\"> pause </span>\n </button>\n <button class=\"record-btn pause-resume\" *ngIf=\"isPaused\" (click)=\"resumeRecording()\">\n <span class=\"material-symbols-outlined\"> play_arrow </span>\n </button>\n </div>\n </div>\n <div *ngIf=\"isRecording\" class=\"timer-display\">\n {{ getFormattedTime() }}\n </div>\n </div>\n\n <div *ngIf=\"showKeypad\" class=\"sendDigit mt-2\">\n <input type=\"text\" name=\"call-inputs\" id=\"call-input\" [(ngModel)]=\"callInput\"\n (keyup)=\"onCallInputEnter($event)\">\n <span class=\"material-symbols-outlined input-clear-btn\" *ngIf=\"callInput\"\n (click)=\"clearInputs()\">close_small</span>\n </div>\n <div class=\"btn-container justify-content-center\" *ngIf=\"showKeypad\">\n <div class=\"key-btn\" *ngFor=\"let key of keypadVal\" (click)=\"onCallInputs(key.num)\">\n {{key.num}}\n <span class=\"btn-albhabets\">{{key.text ? key.text : ' '}}</span>\n </div>\n </div>\n\n <div class=\"conf-remove\">\n <button class=\"remove-btn\" (click)=\"addRemoveParticipant()\">Remove</button>\n </div>\n\n <div class=\"conf-actions\">\n <button class=\"circle-btn\" [ngClass]=\"{'active': isMute}\" (click)=\"toggleMute(true)\">\n <span class=\"material-symbols-outlined\"> {{ isMute ? 'mic_off' : 'mic' }} </span>\n </button>\n <button class=\"circle-btn\" (click)=\"toggleKeypad()\">\n <span class=\"material-symbols-outlined\"> transition_dissolve </span>\n </button>\n <button class=\"circle-btn\" (click)=\"toggleContactsPanel()\">\n <span class=\"material-symbols-outlined\"> add </span>\n </button>\n </div>\n\n <div class=\"conf-end\">\n <button class=\"circle-btn danger\" (click)=\"endCall(true)\">\n <span class=\"material-symbols-outlined\"> call_end </span>\n </button>\n </div>\n </div>\n\n\n\n <div class=\"wave-container\">\n <svg class=\"waves\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 24 150 28\" preserveAspectRatio=\"none\" shape-rendering=\"auto\">\n <defs>\n <path id=\"gentle-wave\"\n d=\"M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z\" />\n </defs>\n <g class=\"parallax\">\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"0\" fill=\"rgba(255,255,255,0.7)\" />\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"3\" fill=\"rgba(255,255,255,0.5)\" />\n <!-- <use\n xlink:href=\"#gentle-wave\"\n x=\"48\"\n y=\"5\"\n fill=\"rgba(255,255,255,0.3)\"\n /> -->\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"7\" fill=\"#fff\" />\n </g>\n </svg>\n </div>\n </ng-container>\n </div>\n\n <!-- Add remove participant panel -->\n <div class=\"contacts-panel\" *ngIf=\"isAddRemoveParticipant\">\n <div class=\"contacts-header\">\n <span class=\"material-symbols-outlined back\" (click)=\"toggleContactsPanel(true)\"> chevron_left </span>\n <div class=\"title\">Contacts</div>\n <span class=\"material-symbols-outlined search\"> search </span>\n </div>\n <div class=\"contacts-list\">\n <div class=\"contact-item\" *ngFor=\"let c of allParticipentList\">\n <img class=\"contact-avatar\" [src]=\"c.img || 'assets/images/user.jpg'\" alt=\"\" />\n <div class=\"contact-info\">\n <div class=\"contact-name\">{{c.direction == 'outgoing-call' ? c?.toName : c?.fromName || 'Unknown'}}</div>\n <div class=\"contact-title\">{{ c.direction == 'outgoing-call' ? c?.to || 'Unknown' : c?.from || 'Unknown'}}</div>\n </div>\n <button class=\"conference-hold-contact mr-2\" [ngClass]=\"{ 'on-hold': c.hold }\" (click)=\"onHoldCall(c)\">\n <span class=\"material-symbols-outlined\" title=\"Hold\"> phone_paused </span>\n <!-- <span class=\"label\">Hold</span> -->\n </button>\n <button class=\"conference-contact\" (click)=\"onEndCall(c)\">\n <span class=\"material-symbols-outlined\" title=\"Call End\"> call_end </span>\n <!-- <span class=\"label\">End</span> -->\n </button>\n </div>\n </div>\n </div>\n\n <!-- contact list panel -->\n <div class=\"contacts-panel\" *ngIf=\"showContactsPanel\">\n <div class=\"contacts-header\">\n <span class=\"material-symbols-outlined back\" (click)=\"toggleContactsPanel()\"> chevron_left </span>\n <div class=\"title\">Contacts</div>\n <span class=\"material-symbols-outlined search\"> search </span>\n </div>\n <div class=\"contacts-list\">\n <div class=\"contact-item\" *ngFor=\"let c of contacts\">\n <img class=\"contact-avatar\" [src]=\"c.img || 'assets/images/user.jpg'\" alt=\"\" />\n <div class=\"contact-info\">\n <div class=\"contact-name\">{{c.firstName}} {{c.middleName}} {{c.lastName}}</div>\n <div class=\"contact-title\">{{ (c.numbersList && c.numbersList[0]?.number)}}</div>\n </div>\n <button class=\"contact-call-btn\" (click)=\"callContact(c)\">\n <span class=\"material-symbols-outlined\"> call </span>\n <span class=\"label\">Call</span>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Incoming call user details shown in model -->\n <div class=\"call-container-model p-3 text-white model-content call-container\" *ngIf=\"isClickExpand\">\n <div class=\"mb-2\" style=\"width: 100%; height: 100%;\">\n <div class=\"call-animation\" [ngClass]=\"{'call-animation-play': showRingAnimation}\">\n <img class=\"avatar-img\" [src]=\"'assets/images/user.jpg'\" alt=\"\" width=\"100\" />\n </div>\n <div class=\"text-center\">\n <h3 class=\"text-white\">test</h3>\n </div>\n <div class=\"f-13\">\n <div class=\"row mb-3\">\n <div class=\"col-12 d-flex align-items-center mb-2\">\n <div class=\"me-2\">Subject:</div>\n <div class=\"ml-2\">test ww</div>\n </div>\n </div>\n\n <div class=\"row mb-2\">\n <div class=\"col-12 d-flex align-items-center mb-2\">\n <div class=\"me-2\">Email:</div>\n <div>test</div>\n </div>\n </div>\n\n <div class=\"row mb-2\">\n <div class=\"col-6 mb-2\">\n <div class=\"\">Number:</div>\n <div class=\"\">test</div>\n </div>\n <div class=\"col-6\">\n <div class=\"\">Language:</div>\n <div class=\"ml-2\">test</div>\n </div>\n </div>\n <div class=\"row mb-2\">\n <div class=\"col-6 mb-2\">\n <div class=\"\">Extension:</div>\n <div class=\"ml-2\">test</div>\n </div>\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-12 d-flex align-items-center mb-2\">\n <div class=\"me-2\">Image:</div>\n <div class=\"text-ellipsis\">\n <!-- <ng-container *ngIf=\"selectedIncomingCall?.userInfo?.c2cInformation?.image && selectedIncomingCall?.userInfo?.c2cInformation?.image !== '-'; else noImage\">\n <img src=\"{{selectedIncomingCall?.userInfo?.c2cInformation?.image}}\" alt=\"\" width=\"42\" height=\"42\" class=\"ml-2\"/>\n </ng-container> -->\n <ng-template #noImage>\n <span class=\"ml-2\">No Image Available</span>\n </ng-template>\n </div>\n </div>\n </div>\n\n <div class=\" mb-4\">\n <div class=\"\">\n <div class=\"\">Message:</div>\n <div class=\"text-ellipsis\">test</div>\n </div>\n </div>\n\n <div class=\"row mb-2\">\n <div class=\"col-6 mb-2\">\n <div class=\"\">Point Name:</div>\n <div class=\"\">test</div>\n </div>\n <div class=\"col-6 mb-2\">\n <div class=\"\">Source Name:</div>\n <div class=\"\">test</div>\n </div>\n </div>\n </div>\n <!-- <div class=\"call-action-btns mt-0\">\n <button class=\"call-btn receive-btn\" *ngIf=\"!selectedIncomingCall?.isCallConnected\">\n <span class=\"material-symbols-outlined\" (click)=\"acceptCallFromList(selectedIncomingCall)\"> call </span>\n </button>\n <button class=\"call-btn mute-btn\" *ngIf=\"selectedIncomingCall?.isCallConnected\" (click)=\"toggleMute(selectedIncomingCall)\" [ngClass]=\"{'active-mute': isMute}\">\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic </span>\n </button>\n <div class=\"record-btn-container\">\n <button class=\"record-btn start-stop\" *ngIf=\"selectedIncomingCall?.isCallConnected && !isRecording\" [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording('')\" [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\" [disabled]=\"disbaleEndCallBtn\">\n <span class=\"recording-icon\"></span>\n </button> \n <div class=\"pause-resume-btns\">\n <button class=\"record-btn pause-resume\" *ngIf=\"selectedIncomingCall?.isCallConnected && isRecording && !isPaused\" (click)=\"pauseRecording()\">\n <span class=\"material-symbols-outlined\"> pause </span>\n </button>\n <button class=\"record-btn pause-resume\" *ngIf=\"selectedIncomingCall?.isCallConnected && isPaused\" (click)=\"resumeRecording('')\">\n <span class=\"material-symbols-outlined\"> play_arrow </span>\n </button>\n </div>\n </div>\n <button class=\"call-btn reject-btn\">\n <span class=\"material-symbols-outlined\" (click)=\"rejectCallFromList(selectedIncomingCall)\"> call_end </span>\n </button>\n </div> -->\n </div>\n </div>\n</div>\n\n<div class=\"min-call-container\" *ngIf=\"isMinimised\">\n <span class=\"material-symbols-outlined fullscreen\" (click)=\"maximiseDialpad()\"> open_in_full </span>\n <div style=\"display: flex; width: 100%\">\n <div>\n <div class=\"min-call-animation\" id=\"call-avatar\">\n <img class=\"min-avatar-img\" [src]=\"callData.img\" alt=\"\" />\n </div>\n </div>\n <div>\n <div class=\"min-callerDetails\">\n <div class=\"name\">\n {{callData.name}}\n </div>\n <p style=\"margin: 0\">{{callData.displayNum ? callData.displayNum : callData.phone }}</p>\n </div>\n </div>\n </div>\n <div class=\"min-btn-container\">\n <div class=\"min-timer\">{{timer}}</div>\n <button class=\"min-call-sec-btn\" (click)=\"toggleMute()\" [disabled]=\"disbaleEndCallBtn\">\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic </span>\n </button>\n <button class=\"min-call-btn end-call-btn\" [disabled]=\"disbaleEndCallBtn\" (click)=\"endCall()\">\n <span class=\"material-symbols-outlined\"> call_end </span>\n </button>\n </div>\n</div>","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { TwilioService } from './service/twilio.service';\nimport swal from 'sweetalert2';\nimport { ExtensionService } from './service/extension.service';\nimport { CallerIdDialogComponent } from './components/caller-id-dialog/caller-id-dialog.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport parsePhoneNumberFromString, { AsYouType } from 'libphonenumber-js';\nimport { keypad } from '../keypad';\nimport { Subscription } from 'rxjs'\nimport { IpAddressService } from './service/ip-address.service';\nimport { Router } from '@angular/router';\nimport { Call } from '@twilio/voice-sdk';\nimport { IncomeingCallSocketService } from './service/incomeing-call-socket.service';\n\n\n@Component({\n selector: 'lib-dialbox',\n templateUrl: './dialbox.component.html',\n styleUrls: ['./dialbox.component.css']\n})\nexport class DialboxComponent implements OnInit, AfterViewInit {\n \n private _isDialpadHidden: boolean = true;\n // Let the library decide to auto-open on incoming call without host wiring\n @Input() autoOpenOnIncoming: boolean = true;\n @Input() contactInfo: any; \n @Input() deviceId: any; \n \n @Input() set isDialpadHidden(value: boolean) {\n this._isDialpadHidden = value;\n if (!value) {\n // When dialpad becomes visible, ensure Twilio is initialized\n this.initializeTwilio();\n }\n }\n @Input() incomingCallData: any\n \n get isDialpadHidden(): boolean {\n return this._isDialpadHidden;\n }\n @Output() closeDialpadEvent: EventEmitter<void> = new EventEmitter<void>();\n @Output() callInitiated: EventEmitter<any> = new EventEmitter<any>();\n @Output() endCallEvent: EventEmitter<void> = new EventEmitter<void>();\n @Output() minimiseEvent: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() incomingCallsNewInfoEvent: EventEmitter<any[]> = new EventEmitter<any[]>();\n @Output() incomingCallInitiated: EventEmitter<void> = new EventEmitter<void>();\n @ViewChild('dialInput') dialInputElement!: ElementRef;\n\n \n @Output() numberDialed = new EventEmitter<string>();\n\n\n isCallInProgress: boolean = false;\n keypadVal = keypad;\n \n showInputClearBtn: boolean = false;\n dialedNumber: string = '';\n contactList: any[] = [];\n filteredContactList: any[] = [];\n callerIdList: any[] = [];\n selectedCallerId: any;\n isCallerIdHidden: boolean = true;\n\n isTrialPeriodOver: boolean = false;\n isPaymentDue: boolean = false;\n terminateCall = false;\n toastTimeout = 7000;\n callNumberToast = {\n show: false,\n type: 'alert-success',\n number: '',\n displayNum: ''\n }\n callData: any = {\n phone: '',\n displayNum: '',\n dial: false,\n name: '',\n img: 'assets/images/user.jpg',\n isIncomingCall: false,\n extNum:''\n };\n lastDialed: { name?: string; image?: string; number: string } | null = null;\n sanitizedNum: any;\n dialAlert = {\n msg: '',\n show: false\n }\n token?:string;\n \n showDedicatedPopup:boolean = false;\n newIncomingCalls: any = [];\n incomingCallsList: any = [];\n newIncomingCallData?:Call;\n private subscriptions: Subscription = new Subscription();\n callPreference: any;\n shakeDedicatedBtn: boolean = false;\n isSmartDialCall: boolean = false;\n\n private isInitialized = false;\n\n constructor( \n private twilioService: TwilioService,\n private extService: ExtensionService,\n private dialog: MatDialog,\n private ipService: IpAddressService,\n private extensionService: ExtensionService,\n private cdk: ChangeDetectorRef,\n private router: Router,\n private incomeingCallSocketService: IncomeingCallSocketService,\n ) { \n // Initialize if dialpad is visible by default\n if (!this.isDialpadHidden) {\n console.log('sfsdfdsf')\n this.initializeTwilio();\n }\n console.log('DialboxComponent constructor');\n }\n private initializeTwilio() {\n if (!this.isInitialized) {\n this.token = localStorage.getItem('ext_token') || '';\n if (!this.token) {\n console.error('No authentication token found');\n return;\n }\n \n this.isInitialized = true;\n \n // Initialize Twilio service\n this.twilioService.initializeTwilioDevice(this.deviceId);\n }\n }\n // ngOnChange() {\n // this.initializeTwilio();\n // }\n\n // ngOnInit() {\n // try {\n // this.getContactList();\n // this.getUserCallSetting();\n \n // // Subscribe to dial number events\n // const sub1 = this.twilioService.dialNumberFromOtherModule.subscribe((contact: any) => {\n // if (contact.number) {\n // this.isSmartDialCall = false;\n // if (contact.isDialFromHistory) {\n // //handle dialing from history page\n // if(contact.callerId == 'smartDialing'){\n \n // this.selectedCallerId = { number: contact.from };\n // this.isSmartDialCall = true;\n // setTimeout(() => {\n // this.isDialpadHidden = false;\n // }, 2000);\n // this.callData.phone = contact.number;\n // this.callData.name = contact.name;\n // this.callData.img = contact.img;\n // this.callData.from = contact.from;\n // this.sanitizedNum = contact.number;\n // this.getUserInformation(contact);\n // // this.incomingCallsList.push(contact)\n // this.initiateCall();\n // }else{\n // this.getUserCallSetting();\n // setTimeout(() => {\n // this.isDialpadHidden = false;\n // }, 1000);\n // this.getUserInformation(contact);\n // // this.incomingCallsList.push(contact)\n // this.dialedNumber = contact.number;\n // this.sanitizedNum = contact.number;\n // }\n // } else {\n // if (contact.callerId == 'alwaysAsk' || contact.callerId == 'smartDialing') {\n // this.getUserCallSetting();\n // setTimeout(() => {\n // this.isDialpadHidden = false;\n // }, 1000);\n // this.dialedNumber = contact.number;\n // this.sanitizedNum = contact.number;\n \n // } else {\n // setTimeout(() => {\n // this.isDialpadHidden = false;\n // }, 2000);\n // this.callData.phone = contact.number;\n // this.callData.name = contact.name;\n // this.callData.img = contact.img;\n // this.sanitizedNum = contact.number;\n // this.initiateCall();\n // }\n // }\n \n // }\n // })\n \n // // handle incoming call\n // const sub2 = this.twilioService.currentCall.subscribe(incomingCallData => {\n // // if (incomingCallData) {\n // // this.isCallInProgress = true;\n // // this.isDialpadHidden = false;\n // // this.callData.phone = incomingCallData.parameters.From;\n // // this.callData.name = incomingCallData.customParameters.get('name');\n // // this.callData.img = incomingCallData.customParameters.get('image');\n // // this.callData.isIncomingCall = true;\n // // }\n // if (incomingCallData) {\n // if (this.isCallInProgress) {\n // this.newIncomingCalls.push(incomingCallData);\n // this.getUserInformation(incomingCallData);\n // } else {\n // this.isCallInProgress = true;\n // this.isDialpadHidden = false;\n // this.callData.phone = incomingCallData.parameters['From'];\n\n // this.getUserInformation(incomingCallData);\n // this.callData.name = incomingCallData.customParameters.get('name');\n // this.callData.img = incomingCallData.customParameters.get('image') || 'assets/images/user.jpg';\n // this.callData.isIncomingCall = true;\n // }\n // incomingCallData.on('cancel', () => {\n // this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters.CallSid !== incomingCallData.parameters['CallSid']);\n // if(this.incomingCallsList.length == 0){\n // this.isCallInProgress = false;\n // }\n // });\n\n // incomingCallData.on('disconnect', () => {\n // this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters.CallSid !== incomingCallData.parameters['CallSid']);\n // if(this.incomingCallsList.length == 0){\n // this.isCallInProgress = false;\n // }\n // });\n // }\n // });\n\n // this.subscriptions.add(sub1);\n // this.subscriptions.add(sub2);\n // }catch(e){\n // console.log(e)\n // }\n \n // }\n\n\n\n ngOnInit() {\n console.log('ngOnInit')\n // Ensure Twilio is initialized even when dialpad starts hidden,\n // so we can auto-open on incoming calls.\n this.initializeTwilio();\n this.incomeingCallSocketService.connect();\n\n\n try{\n this.incomeingCallSocketService.listen().subscribe(async(incomingCallData: any) => {\n // const data = JSON.parse(incomingCallData.data);\n // console.log(\"WS Event Received:\", incomingCallData);\n // console.log(\"WS Event Received:\", incomingCallData.data);\n this.twilioService.conferenceCallInfo = incomingCallData;\n if(!!incomingCallData.participants){\n // this.incomingCallsList = incomingCallData.participants.filter((item: any) => !item.isLeft) || [];\n this.incomingCallsList = incomingCallData.participants || [];\n // if (this.incomingCallsList.length) {\n this.isCallInProgress = true;\n this.isDialpadHidden = false;\n // } else {\n // this.callData = [];\n // this.incomingCallsList = [];\n // this.isDialpadHidden = true;\n // }\n } else {\n this.callData = [];\n this.incomingCallsList = [];\n this.isCallInProgress = false;\n }\n // incomingCallData.participants.length ? incomingCallData.participants.filter((item: any) => !item.isLeft) : [];\n // this.initializeTwilio();\n // if (incomingCallData.type === \"/incoming/call\") {\n // if (incomingCallData) {\n // if (this.autoOpenOnIncoming && this._isDialpadHidden) {\n // this._isDialpadHidden = false;\n // }\n\n // if (this.isCallInProgress) {\n // this.newIncomingCalls.push(incomingCallData);\n // console.log('325', incomingCallData)\n // this.getUserInformation(incomingCallData);\n // } else {\n // incomingCallData['isFirstCall'] = true;\n // console.log('dd1')\n // this.isCallInProgress = true;\n // this.isDialpadHidden = false;\n // this.callData.phone = incomingCallData.parameters['From'];\n // console.log('dd2')\n // this.getUserInformation(incomingCallData);\n // this.callData.name = incomingCallData.customParameters.get('name');\n // this.callData.img = incomingCallData.customParameters.get('image') || 'assets/images/user.jpg';\n // this.callData.isIncomingCall = true;\n // }\n // incomingCallData.on('cancel', () => {\n // this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== incomingCallData.parameters['CallSid']);\n // // if(this.incomingCallsList.length == 0){\n // // console.log('dd3')\n // // this.isCallInProgress = false;\n // // }\n // });\n\n // incomingCallData.on('disconnect', () => {\n // this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== incomingCallData.parameters['CallSid']);\n // // if(this.incomingCallsList.length == 0){\n // // console.log('dd4')\n // // this.isCallInProgress = false;\n // // }\n // });\n // }\n // }\n });\n this.token = localStorage.getItem('ext_token') || '';\n //this.isCallInProgress = true;\n this.getContactList();\n \n this.getUserCallSetting();\n const sub1 = this.twilioService.dialNumberFromOtherModule.subscribe((contact:any) => {\n if (contact.number) {\n this.isSmartDialCall = false;\n if (contact.isDialFromHistory) {\n //handle dialing from history page\n if(contact.callerId == 'smartDialing'){\n \n this.selectedCallerId = { number: contact.from };\n this.isSmartDialCall = true;\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 2000);\n this.callData.phone = contact.number;\n this.callData.name = contact.name;\n this.callData.img = contact.img;\n this.callData.from = contact.from;\n this.sanitizedNum = contact.number;\n console.log('274', contact)\n this.getUserInformation(contact);\n // this.incomingCallsList.push(contact)\n this.initiateCall();\n }else{\n this.getUserCallSetting();\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 1000);\n console.log('282', contact)\n this.getUserInformation(contact);\n // this.incomingCallsList.push(contact)\n this.dialedNumber = contact.number;\n this.sanitizedNum = contact.number;\n }\n } else {\n if (contact.callerId == 'alwaysAsk' || contact.callerId == 'smartDialing') {\n this.getUserCallSetting();\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 1000);\n this.dialedNumber = contact.number;\n this.sanitizedNum = contact.number;\n \n } else {\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 2000);\n this.callData.phone = contact.number;\n this.callData.name = contact.name;\n this.callData.img = contact.img;\n this.sanitizedNum = contact.number;\n this.initiateCall();\n }\n }\n \n }\n })\n \n // handle incoming call (managed internally; host need not pass incomingCallData)\n const sub2 = this.twilioService.currentCall.subscribe((incomingCallData: any) => {\n // if (incomingCallData) {\n // this.isCallInProgress = true;\n // this.isDialpadHidden = false;\n // this.callData.phone = incomingCallData.parameters.From;\n // this.callData.name = incomingCallData.customParameters.get('name');\n // this.callData.img = incomingCallData.customParameters.get('image');\n // this.callData.isIncomingCall = true;\n // }\n if (incomingCallData) {\n if (this.autoOpenOnIncoming && this._isDialpadHidden) {\n this._isDialpadHidden = false;\n }\n\n if (this.isCallInProgress) {\n this.newIncomingCalls.push(incomingCallData);\n console.log('325', incomingCallData)\n this.getUserInformation(incomingCallData);\n } else {\n incomingCallData['isFirstCall'] = true;\n console.log('dd1')\n this.isCallInProgress = true;\n this.isDialpadHidden = false;\n this.callData.phone = incomingCallData.parameters['From'];\n console.log('dd2')\n this.getUserInformation(incomingCallData);\n this.callData.name = incomingCallData.customParameters.get('name');\n this.callData.img = incomingCallData.customParameters.get('image') || 'assets/images/user.jpg';\n this.callData.isIncomingCall = true;\n }\n incomingCallData.on('cancel', () => {\n this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== incomingCallData.parameters['CallSid']);\n // if(this.incomingCallsList.length == 0){\n // console.log('dd3')\n // this.isCallInProgress = false;\n // }\n });\n\n incomingCallData.on('disconnect', () => {\n this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== incomingCallData.parameters['CallSid']);\n // if(this.incomingCallsList.length == 0){\n // console.log('dd4')\n // this.isCallInProgress = false;\n // }\n });\n }\n });\n\n this.subscriptions.add(sub1);\n this.subscriptions.add(sub2);\n }catch(e){\n console.log(e)\n }\n }\n\n \n getUserInformation(incomingCallData: any) {\n // console.log('getUserInformation', incomingCallData);\n let data = this.fromEntries(Array.from(incomingCallData.customParameters.entries()));\n console.log('366---', data)\n this.extensionService.getUserInformation(data['twilioAuthId']).subscribe(\n response => {\n incomingCallData['userInfo']=response\n const alreadyExists = this.incomingCallsList.some((call: any) => call.parameters?.CallSid === incomingCallData.parameters?.CallSid);\n if(!alreadyExists){\n this.incomingCallsList.push(incomingCallData);\n }\n this.cdk.detectChanges();\n }, error => {\n console.error('Error starting recording', error);\n });\n }\n\n fromEntries(entries: [string, any][]): Record<string, any> {\n return entries.reduce((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {} as Record<string, any>);\n }\n\n ngAfterViewInit() {\n this.registerDragElement();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if(changes['deviceId']) {\n localStorage.setItem('deviceId', changes['deviceId'].currentValue);\n console.log('Set deviceId in localStorage:', changes['deviceId'].currentValue);\n }\n if (changes['isDialpadHidden'] && !this.isDialpadHidden) {\n this.getContactList();\n this.getUserCallSetting();\n setTimeout(() => {\n this.dialInputElement.nativeElement.focus();\n }, 0);\n if(this.incomingCallData) {\n if (this.isCallInProgress) {\n this.newIncomingCalls.push(this.incomingCallData);\n console.log('404', this.incomingCallData)\n this.getUserInformation(this.incomingCallData);\n } else {\n console.log('dd5')\n this.isCallInProgress = true;\n this.isDialpadHidden = false;\n this.callData.phone = this.incomingCallData.parameters['From'];\n console.log('411', this.incomingCallData)\n this.getUserInformation(this.incomingCallData);\n this.callData.name = this.incomingCallData.customParameters.get('name');\n this.callData.img = this.incomingCallData.customParameters.get('image') || 'assets/images/user.jpg';\n this.callData.isIncomingCall = true;\n }\n this.incomingCallData.on('cancel', () => {\n this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== this.incomingCallData.parameters['CallSid']);\n // if(this.incomingCallsList.length == 0){\n // console.log('dd6')\n // this.isCallInProgress = false;\n // }\n this.incomingCallData.disconnect();\n });\n \n this.incomingCallData.on('disconnect', () => {\n this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== this.incomingCallData.parameters['CallSid']);\n this.incomingCallData.disconnect();\n // if(this.incomingCallsList.length == 0){\n // console.log('dd7')\n // this.isCallInProgress = false;\n // }\n });\n }\n }\n if (changes['contactInfo'] && this.contactInfo) {\n let contact = this.contactInfo;\n if (contact.number) {\n this.isSmartDialCall = false;\n if (contact.isDialFromHistory) {\n //handle dialing from history page\n if(contact.callerId == 'smartDialing'){\n \n this.selectedCallerId = { number: contact.from };\n this.isSmartDialCall = true;\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 2000);\n this.callData.phone = contact.number;\n this.callData.name = contact.name;\n this.callData.img = contact.img;\n this.callData.from = contact.from;\n this.sanitizedNum = contact.number;\n console.log('274', contact)\n this.getUserInformation(contact);\n console.log('454', contact)\n // this.incomingCallsList.push(contact)\n this.initiateCall();\n }else{\n this.getUserCallSetting();\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 1000);\n console.log('282', contact)\n this.getUserInformation(contact);\n console.log('464', contact)\n // this.incomingCallsList.push(contact)\n this.dialedNumber = contact.number;\n this.sanitizedNum = contact.number;\n }\n } else {\n if (contact.callerId == 'alwaysAsk' || contact.callerId == 'smartDialing') {\n this.getUserCallSetting();\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 1000);\n this.dialedNumber = contact.number;\n this.sanitizedNum = contact.number;\n \n } else {\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 2000);\n this.callData.phone = contact.number;\n this.callData.name = contact.name;\n this.callData.img = contact.img;\n this.sanitizedNum = contact.number;\n this.initiateCall();\n }\n }\n \n }\n }\n }\n private registerDragElement() {\n try {\n const elmnt = document.getElementById('dragparent1');\n if (!elmnt) {\n console.error('Drag element not found');\n return;\n }\n\n let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;\n\n const dragMouseDown = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName.toLowerCase() === 'input') {\n return;\n }\n\n e.preventDefault();\n pos3 = e.clientX;\n pos4 = e.clientY;\n \n const onMouseMove = (moveEvent: MouseEvent) => elementDrag(moveEvent);\n const onMouseUp = () => {\n document.removeEventListener('mouseup', onMouseUp);\n document.removeEventListener('mousemove', onMouseMove);\n };\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n };\n\n const elementDrag = (e: MouseEvent) => {\n e.preventDefault();\n pos1 = pos3 - e.clientX;\n pos2 = pos4 - e.clientY;\n pos3 = e.clientX;\n pos4 = e.clientY;\n \n elmnt.style.top = (elmnt.offsetTop - pos2) + 'px';\n elmnt.style.left = (elmnt.offsetLeft - pos1) + 'px';\n };\n\n // Check for header element\n const header = document.getElementById(elmnt.id + 'header');\n if (header) {\n header.onmousedown = dragMouseDown;\n } else {\n elmnt.onmousedown = dragMouseDown;\n }\n } catch (e) {\n console.log(e)\n }\n }\n\n addNumber(num: any) {\n if ( num == '#' || num == '*' ||num == '+' || Number.isInteger(num)) {\n if (num == '#') {\n new Audio(`/assets/dial-tones/dtmf/dtmf-hash-.mp3`).play();\n } else if (num == '*') {\n new Audio(`/assets/dial-tones/dtmf/dtmf-star-.mp3`).play();\n } else {\n new Audio(`/assets/dial-tones/dtmf/dtmf-${num}-.mp3`).play();\n }\n\n this.dialedNumber += num;\n this.showInputClearBtn = true;\n\n this.numberDialed.emit(this.dialedNumber);\n\n this.onDialInputChange(this.dialedNumber)\n // this.dialInputRef.nativeElement.focus();\n }else if(num === 'voicemail'){\n // this.showDedicatedPopup = true;\n this.router.navigate(['extension/voicemail/'+this.token]);\n }\n }\n \n hideDialpad() {\n this.isDialpadHidden = true;\n this.closeDialpadEvent.emit();\n this.clearAllDialed();\n this.filteredContactList = [];\n }\n \n onDialInputChange(inputVal: any) {\n try {\n // Updated regex to include x, X, ext., Ext., and ,\n const isNumericInput = /^[\\d\\s+\\-]+$/.test(inputVal);\n let mainNumber = inputVal;\n\n // Check for extension indicators and split the input\n const extMatch = inputVal.match(/(x|X|ext\\.|Ext\\.|,)(.*)/);\n if (extMatch) {\n mainNumber = inputVal.substring(0, extMatch.index).trim();\n this.callData.extNum = extMatch[2].trim();\n }\n this.sanitizedNum = isNumericInput ? mainNumber.replace(/[\\s\\-]+/g, '') : mainNumber;\n\n this.callData.phone = isNumericInput ? this.sanitizedNum : '';\n this.showInputClearBtn = inputVal.length > 0;\n\n if (isNumericInput) {\n this.dialedNumber = new AsYouType().input(this.sanitizedNum);\n }\n\n // emit current number whenever input changes\n this.numberDialed.emit(this.dialedNumber);\n\n if (inputVal.length > 2) {\n this.filteredContactList = this.contactList.filter(contact => {\n const fullName = `${contact.firstName} ${contact.middleName} ${contact.lastName}`.toLowerCase();\n return fullName.includes(this.sanitizedNum.toLowerCase()) || contact.numbersList.some((num: any) => num.number.includes(this.sanitizedNum));\n }).slice(0, 2);\n } else {\n this.filteredContactList = [];\n }\n\n } catch (e) {\n console.log(e);\n }\n }\n\n getFirstLetter(name: string): string {\n return name ? name.charAt(0).toUpperCase() : '';\n }\n clearInput() {\n if (this.dialedNumber.length > 0) {\n this.dialedNumber = this.dialedNumber.slice(0, -1);\n this.showInputClearBtn = this.dialedNumber.length !== 0;\n\n this.onDialInputChange(this.dialedNumber)\n }\n }\n clearAllDialed() {\n this.dialedNumber = '';\n this.sanitizedNum = '';\n this.showInputClearBtn = false;\n }\n getCallerIdList() {\n this.extService.displayID(this.token || '').subscribe((res: any) => {\n //this.callerIdList = res.callerIdList.filter(item => item.type === \"C2C Softphone Number\");\n this.callerIdList = res.callerIdList.filter((item: any) => item.voiceFeature === true);\n // this.callerIdList = res.callerIdList;\n if (this.callerIdList.length == 1) {\n this.selectedCallerId = this.callerIdList[0];\n } else {\n if (this.callPreference === 'alwaysAsk' || this.callPreference === 'smartDialing') {\n this.selectedCallerId = null;\n } else {\n this.selectedCallerId = this.callerIdList.find(item => (item.number == this.callPreference));\n }\n }\n });\n }\n getContactList() {\n this.twilioService.getContactList().subscribe((resp: any) => {\n if (resp.response == 'Success') {\n this.contactList = resp.phoneBook;\n }\n }, err => {\n console.log(err)\n })\n }\n getFullName(contact: any): string {\n let fullName = contact.firstName || '';\n if (contact.middleName) {\n fullName += ` ${contact.middleName}`;\n }\n if (contact.lastName) {\n fullName += ` ${contact.lastName}`;\n }\n return fullName.trim();\n }\n\n\n toggleCallerIdDiv() {\n this.isCallerIdHidden = !this.isCallerIdHidden;\n }\n\n onContactSelect(contact: any) {\n this.dialedNumber = contact.numbersList[0].number;\n this.callData.name = this.getFullName(contact);\n this.callData.img = contact.image || 'assets/images/user.jpg';\n this.onDialInputChange(this.dialedNumber);\n this.filteredContactList = [];\n }\n\n endCall() {\n try {\n console.log('Ending call');\n console.log('dd8')\n this.isCallInProgress = false;\n this.filteredContactList = [];\n \n // Reset call data\n this.callData = {\n phone: '',\n name: '',\n img: 'assets/images/user.jpg',\n isIncomingCall: false,\n dial: false,\n displayNum: '',\n extNum: ''\n };\n \n // Reset dialed number\n this.dialedNumber = '';\n this.sanitizedNum = '';\n \n // Emit end call event\n this.endCallEvent.emit();\n console.log('Call ended successfully');\n \n } catch (error) {\n console.error('Error in endCall:', error);\n // Even if there's an error, try to reset the state\n console.log('dd9')\n this.isCallInProgress = false;\n this.callData = {\n phone: '',\n name: '',\n img: 'assets/images/user.jpg',\n isIncomingCall: false,\n dial: false,\n displayNum: '',\n extNum: ''\n };\n this.endCallEvent.emit();\n }\n }\n\n // async initiateCall() {\n // try {\n // console.log('Initiating call with number:', this.dialedNumber);\n \n // if (!this.dialedNumber && this.lastDialed) {\n // console.log('Using last dialed number:', this.lastDialed.number);\n // this.sanitizedNum = this.lastDialed.number;\n // }\n\n // const isInvalid = await this.isInvalidNumber();\n // if (isInvalid) {\n // console.error('Invalid number format');\n // return false;\n // }\n\n // this.saveLastDialed();\n // this.isSavedContactDialled();\n \n // // Check payment status\n // this.isPaymentDue = localStorage.getItem('paymentDue') === 'true';\n // if (this.isPaymentDue) {\n // console.warn('Payment is due');\n // swal('Warning', 'Please note that your payment is due. To continue using our services, kindly subscribe to avoid interruptions.');\n // return false;\n // }\n\n // // Check if dialing own number\n // if (this.sanitizedNum === localStorage.getItem('twilioNumber')) {\n // console.error('Attempted to dial own number');\n // swal('Error', 'You cannot dial your own number');\n // return false;\n // }\n\n // // Check microphone permissions\n // const hasPermission = await this.checkMicrophonePermission();\n // if (!hasPermission) {\n // console.warn('Microphone permission not granted');\n // await this.askForMicrophonePermission();\n // return false;\n // }\n\n // if (!this.selectedCallerId) {\n // console.error('No caller ID selected');\n // this.shakeDedicatedBtn = true;\n // this.showDialAlert('Please select a C2C number to call from');\n // setTimeout(() => {\n // this.shakeDedicatedBtn = false;\n // }, 3000);\n // return false;\n // }\n\n // console.log('Getting number with country code...');\n // this.callData.displayNum = '';\n \n // try {\n // await this.getToNumber(this.sanitizedNum);\n // } catch (error) {\n // console.error('Error getting number with country code:', error);\n // this.showDialAlert('Error processing number. Please try again.');\n // return false;\n // }\n\n // if (this.terminateCall) {\n // console.log('Call terminated by user');\n // this.terminateCall = false;\n // return false;\n // }\n\n // // Prepare call data\n // this.callData = {\n // ...this.callData,\n // phone: this.sanitizedNum,\n // isIncomingCall: false,\n // dial: true,\n // from: this.isSmartDialCall ? this.callData.from : this.selectedCallerId.number,\n // timestamp: new Date().toISOString()\n // };\n\n // console.log('Initiating call with data:', this.callData);\n // this.isCallInProgress = true;\n // this.callInitiated.emit({ ...this.callData });\n \n // return true;\n \n // } catch (error) {\n // console.error('Error in initiateCall:', error);\n // this.showDialAlert('Failed to initiate call. Please try again.');\n // this.isCallInProgress = false;\n // return false;\n // }\n // //this.clearAllDialed();\n // // } else {\n // // swal('Error', 'Trial period is over. Please setup payment method to continue services')\n // // }\n // }\n\n\n // async initiateCall() {\n // if (!this.dialedNumber && this.lastDialed) {\n // this.sanitizedNum = this.lastDialed.number;\n // }\n // const isInvalid = await this.isInvalidNumber();\n // if (isInvalid) {\n // return false;\n // }\n // this.saveLastDialed();\n // this.isSavedContactDialled();\n // //let isCallerIdSet = await this.isCallerIdSet();\n // this.isPaymentDue = localStorage.getItem('paymentDue') == 'false' ? false : true;\n // if (this.isPaymentDue) {\n // swal('Warning', 'Please note that your payment is due, To continue on your services kindly subscribe to use uninterrupted services.');\n // return;\n // }\n // this.isTrialPeriodOver = localStorage.getItem('trialOver') == 'false' ? false : true;\n // // if (!this.isTrialPeriodOver) {\n // if (this.sanitizedNum == localStorage.getItem('twilioNumber')) {\n // swal('Error', 'You can not dial this number');\n // return;\n // }\n\n // const hasPermission = await this.checkMicrophonePermission();\n // if (hasPermission) {\n // if (this.selectedCallerId) {\n // //clear displayNum if value is binded from previous call\n // this.callData.displayNum = '';\n // // get number to be dialled from backend\n // await this.getToNumber(this.sanitizedNum);\n // if (this.terminateCall) {\n // this.terminateCall = false;\n // return;\n // }\n // this.callData.phone = this.sanitizedNum;\n // this.callData.isIncomingCall = false;\n // this.callData.dial = true;\n // if (!this.isSmartDialCall) {\n // this.callData.from = this.selectedCallerId.number;\n // }\n \n // this.isCallInProgress = true;\n // this.callData = {\n // ...this.callData,\n // phone: this.sanitizedNum,\n // isIncomingCall: false,\n // dial: true,\n // from: this.isSmartDialCall ? this.callData.from : this.selectedCallerId.number,\n // timestamp: new Date().toISOString()\n // };\n\n // console.log('Initiating call with data:', this.callData);\n // this.isCallInProgress = true;\n // this.callInitiated.emit({ ...this.callData });\n // return true;\n // } else {\n // this.shakeDedicatedBtn = true;\n // this.showDialAlert('Select a C2C number to call');\n // setTimeout(() => {\n // this.shakeDedicatedBtn = false;\n // }, 3000);\n // return false;\n // }\n // //this.callingOpenEvent.emit({ phone: this.dialedNumber });\n // } else {\n // await this.askForMicrophonePermission();\n // }\n // //this.clearAllDialed();\n // // } else {\n // // swal('Error', 'Trial period is over. Please setup payment method to continue services')\n // // }\n // }\n\n\n // async initiateCall() {\n // try{\n // if (!this.dialedNumber && this.lastDialed) {\n // this.sanitizedNum = this.lastDialed.number;\n // }\n\n // const isInvalid = await this.isInvalidNumber();\n // if (isInvalid) {\n // return false;\n // }\n // this.saveLastDialed();\n // this.isSavedContactDialled();\n // //let isCallerIdSet = await this.isCallerIdSet();\n\n // this.isPaymentDue = localStorage.getItem('paymentDue') == 'false' ? false : true;\n // if (this.isPaymentDue) {\n // swal('Warning', 'Please note that your payment is due, To continue on your services kindly subscribe to use uninterrupted services.');\n // return false;\n // }\n\n // this.isTrialPeriodOver = localStorage.getItem('trialOver') == 'false' ? false : true;\n // // if (!this.isTrialPeriodOver) {\n // if (this.sanitizedNum == localStorage.getItem('twilioNumber')) {\n // swal('Error', 'You can not dial this number');\n // return false;\n // }\n\n // const hasPermission = await this.checkMicrophonePermission();\n // if (hasPermission) {\n // if (this.selectedCallerId) {\n // //clear displayNum if value is binded from previous call\n // this.callData.displayNum = '';\n // // get number to be dialled from backend\n // await this.getToNumber(this.sanitizedNum);\n // if (this.terminateCall) {\n // this.terminateCall = false;\n // return;\n // }\n // this.callData.phone = this.sanitizedNum;\n // this.callData.isIncomingCall = false;\n // this.callData.dial = true;\n // if (!this.isSmartDialCall) {\n // this.callData.from = this.selectedCallerId.number;\n // }\n \n // this.isCallInProgress = true;\n // this.callData = {\n // ...this.callData,\n // phone: this.sanitizedNum,\n // isIncomingCall: false,\n // dial: true,\n // from: this.isSmartDialCall ? this.callData.from : this.selectedCallerId.number,\n // timestamp: new Date().toISOString()\n // };\n\n // console.log('Initiating call with data:', this.callData);\n // this.isCallInProgress = true;\n // this.callInitiated.emit({ ...this.callData });\n // return true;\n // } else {\n // this.shakeDedicatedBtn = true;\n // this.showDialAlert('Select a C2C number to call');\n // setTimeout(() => {\n // this.shakeDedicatedBtn = false;\n // }, 3000);\n // return false;\n // }\n // //this.callingOpenEvent.emit({ phone: this.dialedNumber });\n // } else {\n // await this.askForMicrophonePermission();\n // }\n // //this.clearAllDialed();\n // // } else {\n // // swal('Error', 'Trial period is over. Please setup payment method to continue services')\n // // }\n // }catch(e){\n // console.error('Error in initiateCall:', e);\n\n // this.showDialAlert('Failed to initiate call. Please try again.');\n\n // this.isCallInProgress = false;\n\n // return false;\n // }\n // }\n\n\n async initiateCall() {\n try {\n if (!this.dialedNumber && this.lastDialed) {\n this.sanitizedNum = this.lastDialed.number;\n }\n \n const isInvalid = await this.isInvalidNumber();\n if (isInvalid) {\n return false;\n }\n this.saveLastDialed();\n this.isSavedContactDialled();\n \n this.isPaymentDue = localStorage.getItem('paymentDue') === 'false' ? false : true;\n if (this.isPaymentDue) {\n swal('Warning', 'Please note that your payment is due, To continue on your services kindly subscribe to use uninterrupted services.');\n return false;\n }\n \n this.isTrialPeriodOver = localStorage.getItem('trialOver') === 'false' ? false : true;\n \n if (this.sanitizedNum === localStorage.getItem('twilioNumber')) {\n swal('Error', 'You can not dial this number');\n return false;\n }\n \n const hasPermission = await this.checkMicrophonePermission();\n if (!hasPermission) {\n await this.askForMicrophonePermission();\n return false;\n }\n \n if (!this.selectedCallerId) {\n this.shakeDedicatedBtn = true;\n this.showDialAlert('Select a C2C number to call');\n setTimeout(() => {\n this.shakeDedicatedBtn = false;\n }, 3000);\n return false;\n }\n \n // Clear displayNum if value is bound from previous call\n this.callData.displayNum = '';\n \n // Get number to be dialed from backend\n await this.getToNumber(this.sanitizedNum);\n if (this.terminateCall) {\n this.terminateCall = false;\n return;\n }\n \n // Update call data in a single operation\n this.callData = {\n ...this.callData,\n phone: this.sanitizedNum,\n isIncomingCall: false,\n dial: true,\n from: this.isSmartDialCall ? this.callData.from : this.selectedCallerId.number,\n timestamp: new Date().toISOString()\n };\n \n // console.log('Initiating call with data:', this.callData);\n console.log('dd10')\n this.isCallInProgress = true;\n this.callInitiated.emit({ ...this.callData });\n return true;\n \n } catch (e) {\n // console.error('Error in initiateCall:', e);\n this.showDialAlert('Failed to initiate call. Please try again.');\n console.log('dd11')\n this.isCallInProgress = false;\n return false;\n }\n }\n\n async isInvalidNumber() {\n try {\n if(this.sanitizedNum == ''){\n this.showDialAlert('Invalid Number');\n return true;\n }\n const validNumberPattern = /^[+\\d\\s()-]*$/; // Regular expression to match valid characters\n const phoneNumber = this.sanitizedNum;\n if (!validNumberPattern.test(phoneNumber)) {\n this.showDialAlert('Invalid Number');\n return true;\n }\n return false;\n } catch (error) {\n this.showDialAlert('Invalid Number');\n return true; // Return true if an error occurred, meaning the number is invalid\n }\n }\n \n saveLastDialed() {\n const contact = this.filteredContactList.find((c: any) => c.numbersList.some((n: any) => n.number === this.dialedNumber));\n if (contact) {\n this.lastDialed = {\n name: contact.name,\n image: contact.image,\n number: this.dialedNumber\n };\n } else {\n if(this.dialedNumber){\n this.lastDialed = { number: this.dialedNumber };\n }\n \n }\n }\n isSavedContactDialled(){\n let phoneNum = this.sanitizedNum.replace(/\\s+/g, '');\n let contact = this.contactList.filter((contact: any) => {\n return contact.numbersList.some((num: any) => num.number === phoneNum)\n });\n if(contact.length){\n this.callData.name = `${contact[0].firstName} ${contact[0].middleName} ${contact[0].lastName}`.toLowerCase();\n this.callData.img = contact[0].image || 'assets/images/user.jpg';\n this.callData.phone = this.sanitizedNum;\n\n return true;\n }\n return false;\n }\n showDialAlert(message: string) {\n this.dialAlert = {\n msg: message,\n show: true\n };\n setTimeout(() => {\n this.dialAlert.show = false;\n }, 3000);\n }\n async isCallerIdSet(): Promise<boolean> {\n try {\n const tkn = localStorage.getItem('ext_token');\n const res: any = await this.extService.fetchCallerId(tkn || '').toPromise();\n if (res.status == 200) {\n localStorage.setItem('trialOver', res.trialOver);\n this.twilioService.isTrialOver.next(res.trialOver);\n localStorage.setItem('paymentDue', res.paymentDue);\n this.twilioService.isPaymentDue.next(res.paymentDue);\n }\n if (res.callerid) {\n localStorage.setItem('callerID', res.callerid);\n\n this.extService.changeMessage(res.callerid);\n } else {\n localStorage.setItem('callerID', 'Not set');\n this.extService.changeMessage('Not set');\n }\n\n return (localStorage.getItem('callerID') !== 'Not set');\n } catch (e) {\n console.log(e);\n return false;\n }\n }\n async checkMicrophonePermission(): Promise<boolean> {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n stream.getTracks().forEach(track => track.stop());\n return true;\n } catch (error) {\n if ((error as any).name === 'NotAllowedError') {\n return false;\n } else {\n return false;\n }\n }\n }\n async askForMicrophonePermission(): Promise<void> {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n stream.getTracks().forEach(track => track.stop());\n } catch (error) {\n console.error('User denied microphone permission:', error);\n }\n }\n // below function is to get the country code with number from server \n async getToNumber(dialedNumber: string) {\n \n if (dialedNumber[0] !== '+') {\n // this is case when user geolocation dial code is on\n let ipAddress: any = await this.ipService.getIpAddressInfo().toPromise();\n const res: any = await this.twilioService.getToNumber(dialedNumber,ipAddress.address.countryCode).toPromise();\n if (res.status == 200) {\n this.toastTimeout = res.timeInterval * 1000;\n await this.showNumberToast(res);\n }\n }\n }\n isAlertEnable() {\n return localStorage.getItem('isAlertEnable');\n }\n async showNumberToast(data: any) {\n const isAlertOn = (localStorage.getItem('isCountryCodeToastOn'));\n if (isAlertOn == 'true') {\n this.callNumberToast.show = true;\n this.callNumberToast.number = data.toNumber;\n this.callNumberToast.displayNum = data.displayNumber;\n }\n \n \n this.callData.displayNum = data.displayNumber;\n //this.callData.phone = data.toNumber;\n await this.delay(this.toastTimeout);\n this.dialedNumber = data.toNumber;\n this.sanitizedNum = data.toNumber;\n this.callNumberToast.show = false;\n this.callNumberToast.number = '';\n this.callNumberToast.displayNum = '';\n }\n delay(ms: number) {\n return new Promise<void>(resolve => setTimeout(resolve, ms));\n }\n isMinimised: boolean = false;\n onMinimise(isMinimised: boolean) {\n this.isMinimised = isMinimised;\n this.minimiseEvent.emit(isMinimised);\n }\n handleNumberPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const clipboardData = event.clipboardData || (window as any).clipboardData;\n const pastedData = clipboardData.getData('text');\n\n // Log the pasted content to the console\n if(pastedData){\n this.dialedNumber = pastedData;\n this.sanitizedNum = pastedData;\n }\n \n }\n onEnter(num:string) {\n // console.log(num, 'number fn')\n this.dialedNumber = this.dialedNumber +num;\n this.sanitizedNum = this.dialedNumber;\n this.showInputClearBtn = true;\n this.numberDialed.emit(this.dialedNumber);\n }\n \n getUserCallSetting() {\n const tkn = localStorage.getItem('ext_token');\n this.extService.fetchCallerId(tkn || '').subscribe((resp: any) => {\n if (resp.status == 200) {\n //this.callPrefernce = resp.userSetting;\n this.callPreference = resp.callerid;\n this.getCallerIdList();\n }\n })\n }\n onDedicatedNumSelect(id: any) {\n this.selectedCallerId = id;\n this.isCallerIdHidden = true;\n this.extService.setCallerId(id);\n }\n cancelDialNumber() {\n this.terminateCall = true;\n this.callNumberToast.show = false;\n }\n\n handleDivKeydown(ev:any){\n if(this.dialedNumber.length == 0){\n this.dialInputElement.nativeElement.focus();\n }\n if (ev.key === 'Enter') {\n // Check if the dialpad is open\n if (!this.isDialpadHidden) {\n if(this.dialedNumber.length > 2 && this.selectedCallerId){\n this.initiateCall();\n }\n if(!this.selectedCallerId){\n this.shakeDedicatedBtn = true;\n setTimeout(() => {\n this.shakeDedicatedBtn = false;\n }, 10000);\n }\n }\n }\n }\n onCallBtnMouseEnter(ev: any) {\n if (!this.selectedCallerId || (this.selectedCallerId == 'alwaysAsk') || (this.selectedCallerId == 'smartDialing')) {\n this.shakeDedicatedBtn = true;\n }\n\n }\n onCallBtnMouseLeave(ev: any) {\n if (!this.selectedCallerId || (this.selectedCallerId == 'alwaysAsk') || (this.selectedCallerId == 'smartDialing')) {\n this.shakeDedicatedBtn = false;\n }\n }\n acceptNewIncomingCall(call: Call) {\n //first cut the current call\n //this.callData = call;\n this.newIncomingCallData = call;\n }\n rejectNewIncomingCall(call: Call) {\n call.reject();\n this.newIncomingCalls = this.newIncomingCalls.filter((item: any) => item.parameters.CallSid !== call.parameters['CallSid']);\n this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters.CallSid !== call.parameters['CallSid']);\n }\n newIncomingCallInitiated() {\n console.log('dd12')\n this.isCallInProgress = true;\n this.newIncomingCalls = [];\n this.incomingCallInitiated.emit();\n }\n incomingCallsNewInfo(data:any){\n this.incomingCallsList = data;\n this.incomingCallsNewInfoEvent.emit(data);\n }\n ngOnDestroy() {\n try {\n console.log('Cleaning up C2cDialpadComponent');\n \n // Unsubscribe from all subscriptions\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n // Clean up Twilio device when component is destroyed\n if (this.twilioService['device']) {\n this.twilioService['device'].destroy();\n }\n \n // End any active call\n if (this.isCallInProgress) {\n this.endCall();\n }\n \n // Clear any timeouts or intervals if they exist\n if (this.toastTimeout) {\n clearTimeout(this.toastTimeout);\n }\n \n console.log('C2cDialpadComponent cleanup complete');\n \n } catch (error) {\n console.error('Error during component cleanup:', error);\n }\n }\n}\n","<div id=\"dragparent1\" [ngStyle]=\"{'display':isDialpadHidden ? 'none': 'block'}\">\r\n <lib-call-progress *ngIf=\"isCallInProgress\"\r\n (endCallEvent)=\"endCall()\"\r\n (minimiseEvent)=\"onMinimise($event)\"\r\n (incomingCallInitiated)=\"newIncomingCallInitiated()\"\r\n [newIncomingCallData]=\"newIncomingCallData\"\r\n [deviceId]=\"deviceId\"\r\n [newIncomingCallsList]=\"incomingCallsList\"\r\n (incomingCallsNewInfo)=\"incomingCallsNewInfo($event)\"\r\n [selectedCallerId]=\"selectedCallerId\"\r\n [callData]=\"callData\">\r\n </lib-call-progress>\r\n <div class=\"dialpad-container\" *ngIf=\"!isCallInProgress\" [ngClass]=\"{'mini-dialpad': isMinimised}\" tabindex=\"0\" (keydown)=\"handleDivKeydown($event)\">\r\n <div id=\"topPanel\" [ngStyle]=\"{'height': callerIdList.length ? '40%' : '39%'}\">\r\n <div class=\"dialpad-alerts\" *ngIf=\"dialAlert.show\">\r\n <div class=\"no-selection-alert\">\r\n <!-- <p class=\"mb-0\">Select C2C number to call</p> -->\r\n <p class=\"mb-0\">{{dialAlert.msg}}</p>\r\n <span class=\"fa fa-times\" (click)=\"shakeDedicatedBtn = false\"></span>\r\n </div>\r\n </div>\r\n <div class=\"dialpad-alerts\" *ngIf=\"callNumberToast.show\">\r\n <div class=\"dialbox-pop1 alert fade show\" [ngClass]=\"callNumberToast.type\" role=\"alert\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"flex-grow-1 my-auto text-left\">\r\n You'r calling <strong>{{callNumberToast.displayNum}}</strong>\r\n </div>\r\n <div class=\"text-right\">\r\n <button class=\"btn btn-link btn-disc p-0 px-1\" (click)=\"cancelDialNumber()\">Cancel Call</button>\r\n <!-- <button class=\"btn btn-link btn-success btn-disc p-0 px-2\">Continue</button> -->\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"padding: 0 18px\" (paste)=\"handleNumberPaste($event)\">\r\n <div class=\"d-flex justify-content-between mt-2\">\r\n <p></p>\r\n <span class=\"material-symbols-outlined dial-close-btn\" (click)=\"hideDialpad()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#ffffff\"><path d=\"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\"/></svg>\r\n </span>\r\n </div>\r\n <div class=\"input-box\">\r\n <input type=\"text\" #dialInput placeholder=\"Enter a name or number\" tabindex=\"1\" [(ngModel)]=\"dialedNumber\" (ngModelChange)=\"onDialInputChange($event)\"/>\r\n <span class=\"\" id=\"input-clear-btn\" (click)=\"clearInput()\" *ngIf=\"showInputClearBtn\">\r\n <svg width=\"50px\" height=\"30px\" viewBox=\"0 10 40 60\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" baseProfile=\"full\" enable-background=\"new 0 0 76.00 76.00\" xml:space=\"preserve\">\r\n <path fill=\"#5d6061\" fill-opacity=\"1\" stroke-width=\"0.2\" stroke-linejoin=\"round\" d=\"M 47.5282,42.9497L 42.5784,38L 47.5282,33.0502L 44.9497,30.4718L 40,35.4216L 35.0502,30.4718L 32.4718,33.0502L 37.4216,38L 32.4718,42.9497L 35.0502,45.5282L 40,40.5784L 44.9497,45.5282L 47.5282,42.9497 Z M 18.0147,41.5355L 26.9646,50.4854C 28.0683,51.589 29,52 31,52L 52,52C 54.7614,52 57,49.7614 57,47L 57,29C 57,26.2386 54.7614,24 52,24L 31,24C 29,24 28.0683,24.4113 26.9646,25.5149L 18.0147,34.4645C 16.0621,36.4171 16.0621,39.5829 18.0147,41.5355 Z M 31,49C 30,49 29.6048,48.8828 29.086,48.3641L 20.1361,39.4142C 19.355,38.6332 19.355,37.3669 20.1361,36.5858L 29.086,27.6362C 29.6048,27.1175 30,27 31,27.0001L 52,27.0001C 53.1046,27.0001 54,27.8955 54,29.0001L 54,47.0001C 54,48.1046 53.1046,49.0001 52,49.0001L 31,49 Z \"/>\r\n </svg> \r\n </span>\r\n <span class=\"input-info-icon\" placement=\"bottom-right\" tooltipClass=\"input-tooltip\" ngbTooltip=\"For extension dialing, use formats like +12345678910 x123,+12345678910 ext.123, +12345678910,123\"><i class=\"fa fa-info-circle\"></i></span>\r\n </div>\r\n <div class=\"guide\" *ngIf=\"callerIdList.length && !(dialedNumber.length > 2)\">\r\n <span class=\"guidetext\">Please enter a number or select a saved contact</span>\r\n </div>\r\n <!-- <div class=\"input-error\" *ngIf=\"dialAlert.show\">\r\n <span>{{dialAlert.msg}}</span>\r\n </div> -->\r\n <div>\r\n <div class=\"contact-card\" *ngFor=\"let contact of filteredContactList\" (click)=\"onContactSelect(contact)\">\r\n <div class=\"contact-img\">\r\n <img [src]=\"contact.image\" alt=\"user image\" loading=\"lazy\" *ngIf=\"contact.image else alphaName\"/>\r\n <ng-template #alphaName>\r\n <span class=\"contact-alpha-img\">{{getFirstLetter(contact.firstName)}}</span>\r\n </ng-template>\r\n </div>\r\n <div class=\"contact-details\">\r\n <p style=\"margin-bottom: 4px\" class=\"contact-name\">{{getFullName(contact) }}</p>\r\n <p>{{contact.numbersList[0].number}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wave-container\">\r\n <svg\r\n class=\"waves\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n viewBox=\"0 24 150 28\"\r\n preserveAspectRatio=\"none\"\r\n shape-rendering=\"auto\"\r\n >\r\n <defs>\r\n <path\r\n id=\"gentle-wave\"\r\n d=\"M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z\"\r\n />\r\n </defs>\r\n <g class=\"parallax\">\r\n <use\r\n xlink:href=\"#gentle-wave\"\r\n x=\"48\"\r\n y=\"0\"\r\n fill=\"rgba(255,255,255,0.7)\"\r\n />\r\n <use\r\n xlink:href=\"#gentle-wave\"\r\n x=\"48\"\r\n y=\"3\"\r\n fill=\"rgba(255,255,255,0.5)\"\r\n />\r\n <!-- <use\r\n xlink:href=\"#gentle-wave\"\r\n x=\"48\"\r\n y=\"5\"\r\n fill=\"rgba(255,255,255,0.3)\"\r\n /> -->\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"7\" fill=\"#fff\" />\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"btn-container\" *ngIf=\"!isMinimised\">\r\n <button class=\"dial-btn\" *ngFor=\"let key of keypadVal;let i = index\"\r\n (keydown.enter)=\"onEnter(key.num)\" (click)=\"addNumber(key.num)\"\r\n [ngStyle]=\"{'margin-top': key.text === '+' ? '3px' : '0'}\"\r\n [tabindex]=\"dialedNumber.length ? '0': i+2\" longPress (longPress)=\"addNumber(key.text)\" shortPress (shortPress)=\"addNumber(key.num)\">\r\n {{key.num}} \r\n <span *ngIf=\"key.num == 1;else otherThanOne\" class=\"material-symbols-outlined voicemail\">\r\n voicemail\r\n </span>\r\n <ng-template #otherThanOne>\r\n <span class=\"btn-albhabets\" [ngClass]=\"{'plusSign': key.text === '+'}\">{{key.text ? key.text : ' '}}</span>\r\n </ng-template>\r\n </button>\r\n </div>\r\n <div class=\"call-btn-container\" *ngIf=\"!isMinimised\" (mouseenter)=\"onCallBtnMouseEnter($event)\" (mouseleave)=\"onCallBtnMouseLeave($event)\">\r\n <div class=\"call-btn\" (click)=\"initiateCall()\" [tabindex]=\"dialedNumber.length ? '2': '15'\"\r\n [ngStyle]=\"{'pointer-events': dialedNumber.length && selectedCallerId ? 'auto' : 'none', 'opacity': dialedNumber.length && selectedCallerId ? '1' : '0.5'}\">\r\n <span class=\"material-symbols-outlined\" style=\"color: white\">\r\n call\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"callerIdList.length && !isMinimised\" class=\"position-relative\">\r\n <div class=\"shownCallerId\" *ngIf=\"selectedCallerId; else askBlock\" (click)=\"toggleCallerIdDiv()\">\r\n <div>\r\n <span [ngClass]=\"'fi fi-' + selectedCallerId?.isoCode?.toLowerCase()\"></span>\r\n {{selectedCallerId?.number}}\r\n </div>\r\n </div>\r\n <ng-template #askBlock>\r\n <div class=\"shownCallerId\" (click)=\"toggleCallerIdDiv()\" [ngClass]=\"{ 'tilt-shaking': shakeDedicatedBtn }\">\r\n <div class=\"d-flex justify-content-center\">\r\n <h5 class=\"mb-0\">Select C2C number</h5>\r\n <!-- <span class=\"ml-2\" style=\"opacity:.8;margin-top:2px\">\r\n <img src=\"assets/images/icon_down_arrow.svg\" alt=\"down\" width=\"10px\">\r\n </span> -->\r\n <span class=\"fa fa-angle-down ml-2 text-blue\" style=\"margin-top:2px\"></span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <div class=\"guide2\" *ngIf=\"shakeDedicatedBtn\">\r\n <span class=\"guidetext\">Please select a number from below dropdown</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"callerIdList.length; else noCallerIdMessage\">\r\n <div class=\"caller-id-list-container\" *ngIf=\"callerIdList.length && !isMinimised\" id=\"callerIdContainer\" [ngClass]=\"{'visible': !isCallerIdHidden}\" >\r\n <div style=\"display: flex; justify-content: space-between\">\r\n <!-- <h4>Select C2C Softphone Number</h4> -->\r\n <h4>Make outgoing call using</h4>\r\n <span\r\n class=\"material-symbols-outlined\"\r\n style=\"cursor: pointer\"\r\n (click)=\"isCallerIdHidden = true\"\r\n >\r\n close\r\n </span>\r\n </div>\r\n <ul>\r\n <ng-container *ngFor=\"let callerId of callerIdList\">\r\n <li [ngClass]=\"{'selectedCallerIdClass': callerId?.number == selectedCallerId?.number}\" (click)=\"onDedicatedNumSelect(callerId)\">\r\n <div>\r\n <span [ngClass]=\"'fi fi-' + callerId?.isoCode?.toLowerCase()\"></span>\r\n {{callerId?.number}}\r\n </div>\r\n <span>{{callerId?.countryName}}</span>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n <ng-template #noCallerIdMessage>\r\n <span class=\"no-caller-id-message\">To make any voice calls, please <a routerLink=\"/extension/dedicatednumber/{{token}}\" class=\"click-here-link\" title=\"Settings > C2C Number\">subscribe</a> to a voice capable C2C Number.\r\n </span>\r\n </ng-template>\r\n <div class=\"dedicated-overlay\" *ngIf=\"showDedicatedPopup\">\r\n <div class=\"card dedicatedNumPopup\">\r\n <div class=\"card-header chooseDedicatedHeader\">\r\n <h5>Choose C2C Number</h5>\r\n <span class=\"material-symbols-outlined dial-close-btn\" (click)=\"showDedicatedPopup = false\">close</span>\r\n </div>\r\n <div class=\"card-body dedicatedNumList\">\r\n <ul>\r\n <ng-container *ngFor=\"let callerId of callerIdList\">\r\n <li [ngClass]=\"{'selectedCallerIdClass': callerId?.number == selectedCallerId?.number}\" (click)=\"showDedicatedPopup = false\">\r\n <div>\r\n <span [ngClass]=\"'fi fi-' + callerId?.isoCode?.toLowerCase()\"></span>\r\n {{callerId?.number}}\r\n </div>\r\n <span>{{callerId?.countryName}}</span>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"incoming-call-widget\" *ngFor=\"let call of newIncomingCalls;let i = index\" [ngStyle]=\"{'top': (30 + i * 72) + 'px'}\">\r\n <div>\r\n <div class=\"inc-user-img\">\r\n <img src=\"assets/images/user.jpg\" alt=\"user image\">\r\n </div>\r\n \r\n </div>\r\n <div class=\"flex-grow-1\">\r\n <p class=\"inc-user-name\">{{call.customParameters.get('name')}}</p>\r\n <p>{{call.parameters.From}}</p>\r\n </div>\r\n <div class=\"d-flex\">\r\n <button class=\"inc-call-btn inc-accept-btn mr-2\" (click)=\"acceptNewIncomingCall(call)\">\r\n <span class=\"material-symbols-outlined\" style=\"color: white\">\r\n call\r\n </span>\r\n </button>\r\n <button class=\"inc-call-btn inc-reject-btn\" (click)=\"rejectNewIncomingCall(call)\">\r\n <span class=\"material-symbols-outlined\" style=\"color: white\">\r\n call_end\r\n </span>\r\n </button>\r\n </div>\r\n \r\n </div> -->\r\n </div>\r\n</div>\r\n","\r\nexport const GlobalConstant = {\r\n ErrorMsg500:\"Unable to process request. Please try again later.\",\r\n isSMSVisible:true,\r\n dedicatedNumText: 'C2C Number'\r\n };\r\n ","import { AfterViewInit, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { Call, Device } from '@twilio/voice-sdk';\nimport { ExtensionService } from '../../../service/extension.service';\nimport { TwilioService } from '../../../service/twilio.service';\nimport { GlobalConstant } from '../../../shared/global-constant';\nimport { NotificationService } from '../../../service/Notification.service';\nimport swal from 'sweetalert2';\nimport { interval, Subscription } from 'rxjs';\n\n\n@Component({ \n selector: 'lib-incoming-call',\n templateUrl: './incoming-call.component.html',\n styleUrls: ['./incoming-call.component.css']\n})\nexport class IncomingCallComponent implements OnInit {\n @Input() incomingCallData: any;\n @Input() newIncomingCallsList: any;\n @Input() deviceId: any;\n showRingAnimation: boolean = true;\n selectedIncomingCall: any = {};\n twilioCallData?: Call;\n twilioAuthId?: string;\n dedicatedNum:string = '';\n CallSid: any;\n recordCall?: boolean;\n shouldRecordCall: boolean = false;\n isClickExpand: boolean = false;\n isRecording: boolean = false;\n isPaused: boolean = false;\n isTwilioConnected: boolean = false;\n\n @Output() closeIncomingCallDiv: EventEmitter<{ show: number, call: any }> = new EventEmitter<{ show: number, call: any }>();\n @Output() incomingCallsNewList: EventEmitter<any> = new EventEmitter<any>();\n @Output() selectedIncomingCallInfo: EventEmitter<any> = new EventEmitter<any>();\n isMute?: boolean;\n \n constructor(\n private extensionService: ExtensionService,\n private twilioService: TwilioService,\n private notificationSerivce: NotificationService\n ) { \n console.log('IncomingCallComponent')\n }\n\n ngOnInit() {\n\n\n // this.twilioService.currentCall.subscribe((call: any) => {\n // if (call) {\n // this.twilioCallData = call;\n // this.notificationSerivce.showNotification(call);\n // // Handle the call UI\n // }\n // });\n console.log('IncomingCallComponent ngOnInit')\n try {\n this.twilioService.currentCall.subscribe(call => {\n if (call) {\n this.twilioCallData = call;\n this.twilioAuthId = call.customParameters.get('twilioAuthId');\n if (!call.parameters) {\n call.parameters = {};\n }\n this.sendIPforIncomingCall(this.twilioAuthId, '');\n call.on('cancel', () => {\n if (this.incomingCallData && this.incomingCallData.parameters && this.incomingCallData.parameters.CallSid) {\n this.newIncomingCallsList = this.newIncomingCallsList.filter((item: any) => item.parameters && item.parameters.CallSid !== this.incomingCallData.parameters.CallSid);\n }\n this.rejectCallFromList(call);\n });\n\n call.on('disconnect', () => {\n if (this.incomingCallData && this.incomingCallData.parameters && this.incomingCallData.parameters.CallSid) {\n this.newIncomingCallsList = this.newIncomingCallsList.filter((item: any) => item.parameters && item.parameters.CallSid !== this.incomingCallData.parameters.CallSid);\n }\n this.rejectCallFromList(call);\n });\n }\n });\n } catch (e) {\n console.log(e);\n }\n }\n\n acceptCallFromList(data?: any) {\n if (!data) { return; }\n // Disconnect any other connected call before accepting this one\n if (this.newIncomingCallsList && this.newIncomingCallsList.length) {\n const otherConnected = this.newIncomingCallsList.find((item: any) => item.isCallConnected && item !== data);\n if (otherConnected) {\n try { otherConnected.disconnect(); } catch {}\n otherConnected.isCallConnected = false;\n otherConnected.isFirstCall = false; \n }\n }\n\n // Accept this call and mark as the active one\n data.accept();\n data.isCallConnected = true;\n data.isFirstCall = true;\n\n this.extensionService.setCallSid(this.CallSid, this.recordCall);\n this.sendIPforIncomingCall(data.customParameters.get('twilioAuthId'), 'answered').then(() => {\n this.closeIncomingCallWrapper(1);\n });\n }\n rejectCallFromList(data?: any) {\n if (!data) return;\n \n if (data.reject) data.reject();\n if (data.disconnect) data.disconnect();\n \n if (data.parameters) {\n data.parameters['isCallConnected'] = false; // Should be false when rejecting\n }\n\n if (data.customParameters) {\n this.sendIPforIncomingCall(data.customParameters.get('twilioAuthId'), 'answered');\n }\n \n if (this.newIncomingCallsList && data && data.parameters && data.parameters.CallSid) {\n this.newIncomingCallsList = this.newIncomingCallsList.filter((item: any) => item.parameters && item.parameters.CallSid !== data.parameters.CallSid);\n this.incomingCallsNewList.emit(this.newIncomingCallsList);\n if(this.newIncomingCallsList.length == 0){\n this.closeIncomingCallDiv.emit({ show: 0, call: data });\n }\n }\n }\n\n closeIncomingCallWrapper(val: any) {\n this.closeIncomingCallDiv.emit({ show: val, call: this.twilioCallData });\n }\n\n toggleMute(data?: any) {\n this.isMute = !this.isMute;\n data.mute(this.isMute);\n }\n\n sendIPforIncomingCall(recordId: any, callstatus: any): Promise<void> {\n console.log('sendIPforIncomingCall')\n return new Promise((resolve, reject) => {\n this.extensionService.getIPDetailsForCall(recordId, callstatus, this.deviceId).subscribe((res: any) => {\n const resp: any = res;\n if (res.status == 200) {\n if (resp.callAuth) {\n this.CallSid = resp.callAuth.callSid;\n this.recordCall = resp.callAuth.recordCall;\n // Handle the recordCall flag\n if (resp.callAuth.recordCall) {\n this.shouldRecordCall = true;\n } else {\n this.shouldRecordCall = false;\n }\n } else {\n // swal(\"Error\", \"Missing call authentication details.\", \"error\");\n }\n \n resolve();\n } else {\n swal(\"Error\", resp.message.join(\"<br/>\"), \"error\");\n resolve();\n }\n }, (error) => {\n swal(\"Error\", GlobalConstant.ErrorMsg500, \"error\");\n resolve();\n });\n });\n }\n onUserInfoByCallSid(){\n if (this.selectedIncomingCall && this.selectedIncomingCall.userInfo) {\n }\n return this.selectedIncomingCall ? Object.keys(this.selectedIncomingCall).length ? true : false : false;\n }\n\n // Check if call has detailed information available for expansion\n hasDetailedInfo(callData: any): boolean {\n if (!callData) return false;\n \n // Check if userInfo exists and has meaningful data\n if (callData.userInfo && callData.userInfo.c2cInformation) {\n const info = callData.userInfo.c2cInformation;\n return !!(\n info.subject && info.subject !== '-' ||\n info.email && info.email !== '-' ||\n info.message && info.message !== '-' ||\n info.pointName && info.pointName !== '-' ||\n info.sourceName && info.sourceName !== '-' ||\n info.extension && info.extension !== '-' ||\n info.url ||\n info.latitude ||\n info.longitude\n );\n }\n \n return false;\n }\n \n onClickExpand(data?: any): void {\n if (this.selectedIncomingCall === data && this.isClickExpand) {\n this.isClickExpand = false;\n this.selectedIncomingCall = null;\n this.selectedIncomingCallInfo.emit({});\n return;\n }\n this.isClickExpand = true;\n this.selectedIncomingCall = data;\n \n if (this.selectedIncomingCall) {\n this.selectedIncomingCall['isClickExpand'] = true;\n \n if (this.newIncomingCallsList && this.newIncomingCallsList.length > 0) {\n this.newIncomingCallsList.forEach((call: any) => {\n if (call !== this.selectedIncomingCall) {\n call['isClickExpand'] = false;\n }\n });\n }\n \n this.selectedIncomingCallInfo.emit(this.selectedIncomingCall);\n \n if(!this.selectedIncomingCall.userInfo || this.selectedIncomingCall.userInfo.status == 201){\n this.getUserInformation(this.selectedIncomingCall);\n }\n }\n }\n\n getUserInformation(incomingCallData: any) {\n let data = this.fromEntries(Array.from(incomingCallData.customParameters.entries()));\n this.extensionService.getUserInformation(data['twilioAuthId']).subscribe(\n response => {\n setTimeout(()=>{\n incomingCallData['userInfo']=response\n }, 5000)\n }, error => {\n console.error('Error starting recording', error);\n });\n }\n\n fromEntries(entries: [string, any][]): Record<string, any> {\n return entries.reduce((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {} as Record<string, any>); \n }\n\n disbaleEndCallBtn = false;\n incomingCallSid = '';\n incomingRecordCall = false;\n timerSubscription?: Subscription;\n timeElapsed = 0;\n toggleRecording(sid: string) {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n }\n startRecording() {\n let sid;\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n sid = this.incomingCallSid ? this.incomingCallSid : this.CallSid;\n \n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n this.extensionService.getCallRecording(sid).subscribe(response => {\n this.isRecording = true;\n this.isPaused = false; \n // this.timeElapsed = 0;\n this.startTimer1();\n }, error => {\n console.error('Error starting recording', error);\n });\n }\n stopRecording() {\n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n this.isRecording = false;\n this.isPaused = false;\n if (this.timerSubscription) {\n this.timerSubscription.unsubscribe();\n }\n }\n pauseRecording() {\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n const sid = this.incomingCallSid ? this.incomingCallSid : this.CallSid;\n \n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n \n this.extensionService.pauseOrResumeRecording(sid, 'pause').subscribe(\n response => {\n // this.stopRecordingTimer();\n this.isPaused = true;\n },\n error => {\n console.error('Error pausing recording:', error);\n // Consider updating the UI to show the error state\n }\n );\n }\n resumeRecording(sid: any) {\n // let sid;\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n sid = this.incomingCallSid ? this.incomingCallSid : this.CallSid;\n \n // if (!this.incomingRecordCall && !this.recordCall) {\n // return; // Skip if recording is not enabled\n // }\n this.extensionService.pauseOrResumeRecording(sid, 'resume').subscribe(response => {\n this.isPaused = false;\n this.startTimer1();\n }, error => {\n console.error('Error resuming recording', error);\n });\n }\n startTimer1() {\n this.timerSubscription = interval(1000).subscribe(() => {\n this.timeElapsed++;\n });\n }\n stopRecordingTimer() {\n if (this.timerSubscription) {\n this.timerSubscription.unsubscribe(); // Pause the timer\n this.timerSubscription = undefined; // Optionally reset the subscription\n }\n }\n // device: any;\n onEndCall(){\n this.extensionService.getRemoveParticipants(this.incomingCallData.participantId,this.incomingCallData.conferenceId).toPromise();\n }\n async add(data?: any) {\n if(data?.status != 'ringing'){\n let device = await this.twilioService.connect('');\n console.log(device, 'callConnect');\n } else if(data?.status == 'ringing'){\n this.twilioService.addIncomingParticipant(data?.id, this.twilioService.conferenceCallInfo.conferenceId).subscribe((data: any) => {\n console.log(data,'bhhhhhhhhhhhhhhhhhhh')\n })\n }\n \n // this.device = new Device();/\n // Device.connect({ conferenceName: 'my-conference-room' });\n // this.device = new Device({ conferenceName: 'my-conference-room' });\n }\n}\n\n\n// this.twilioService.addIncomingParticipant(data?.id, this.twilioService.conferenceCallInfo.conferenceId).subscribe((data: any) => {\n// console.log(data,'bhhhhhhhhhhhhhhhhhhh')\n// })\n// }","<div class=\"call-container\" *ngIf=\"newIncomingCallsList?.length === 1\">\r\n <div style=\"display: flex; flex-direction: column;\">\r\n <div class=\"callToNum\">Incoming call on <br/><span>{{incomingCallData?.phone || 'Unknown Number'}}</span></div>\r\n <div class=\"call-animation\" [ngClass]=\"{'call-animation-play': showRingAnimation}\">\r\n <img class=\"avatar-img\" [src]=\"newIncomingCallsList[0]?.img || incomingCallData?.img\" alt=\"\" width=\"120\" />\r\n </div>\r\n <div class=\"callerDetails\">\r\n <!-- <h1>{{newIncomingCallsList[0]?.userInfo?.c2cInformation?.name || incomingCallData?.name || 'Unknown Number'}}</h1> -->\r\n <!-- <p>{{newIncomingCallsList[0]?.userInfo?.displayNum ? newIncomingCallsList[0]?.userInfo?.c2cInformation?.number : newIncomingCallsList[0]?.userInfo?.c2cInformation?.number || incomingCallData?.displayNum || incomingCallData?.phone}}</p> -->\r\n <h1>{{incomingCallData?.name || 'Unknown Number'}}</h1>\r\n <p>{{incomingCallData?.phone}}</p>\r\n </div>\r\n \r\n <!-- <div class=\"callerDetails\">\r\n <h1 [ngStyle]=\"{'margin-top': showKeypad ? '0': '8px'}\">{{callData.name}}</h1>\r\n <p>{{callData.displayNum ? callData.displayNum : callData.phone }}</p>\r\n <h4 style=\"margin-top: 4px\">{{timer}}</h4>\r\n </div> -->\r\n <div class=\"call-action-btns\">\r\n <button class=\"call-btn receive-btn\" *ngIf=\"!newIncomingCallsList[0]?.isCallConnected || incomingCallData\">\r\n <span class=\"material-symbols-outlined\" (click)=\"add(newIncomingCallsList[0])\"> call </span> \r\n </button>\r\n <!-- <button class=\"call-btn receive-btn\" *ngIf=\"!newIncomingCallsList[0]?.isCallConnected || incomingCallData\">\r\n <span class=\"material-symbols-outlined\" (click)=\"acceptCallFromList(newIncomingCallsList[0])\"> call </span>\r\n </button> -->\r\n <button class=\"call-btn mute-btn\" *ngIf=\"newIncomingCallsList[0]?.isCallConnected\" (click)=\"toggleMute(newIncomingCallsList[0])\" [ngClass]=\"{'active-mute': isMute}\">\r\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\r\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic</span>\r\n </button>\r\n <div class=\"record-btn-container \">\r\n <button class=\"record-btn start-stop\" *ngIf=\"newIncomingCallsList[0]?.isCallConnected && !isRecording\" [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording('')\" [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\" [disabled]=\"disbaleEndCallBtn\">\r\n <span class=\"recording-icon\"></span>\r\n </button> \r\n <div class=\"\">\r\n <button class=\"record-btn pause-resume\" *ngIf=\"newIncomingCallsList[0]?.isCallConnected && isRecording && !isPaused\" (click)=\"pauseRecording()\">\r\n <span class=\"material-symbols-outlined\"> pause </span>\r\n </button>\r\n <button class=\"record-btn pause-resume\" *ngIf=\"newIncomingCallsList[0]?.isCallConnected && isPaused\" (click)=\"resumeRecording('')\">\r\n <span class=\"material-symbols-outlined\"> play_arrow </span>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- <button class=\"call-btn reject-btn\">\r\n <span class=\"material-symbols-outlined\" (click)=\"rejectCallFromList(newIncomingCallsList[0])\"> call_end </span>\r\n </button> -->\r\n <button class=\"call-btn reject-btn\">\r\n <span class=\"material-symbols-outlined\" (click)=\"onEndCall()\"> call_end </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"wave-container\">\r\n <svg class=\"waves\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n viewBox=\"0 24 150 28\" preserveAspectRatio=\"none\" shape-rendering=\"auto\">\r\n <defs>\r\n <path id=\"gentle-wave\" d=\"M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z\" />\r\n </defs>\r\n <g class=\"parallax\">\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"0\" fill=\"rgba(255,255,255,0.7)\" />\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"3\" fill=\"rgba(255,255,255,0.5)\" />\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"7\" fill=\"#fff\" />\r\n </g>\r\n </svg>\r\n </div>\r\n</div>\r\n\r\n<div class=\"call-container\" style=\"width: 100%;\" *ngIf=\"newIncomingCallsList?.length > 1\" [ngClass]=\"{'call-container-open': selectedIncomingCall?.isClickExpand}\">\r\n <div class=\"collops\">\r\n <div class=\"d-flex w-100\">\r\n <div class=\"d-flex flex-column container-fluid\" >\r\n <div class=\"callToNum\">Incoming call <br/><span>{{dedicatedNum}}</span></div>\r\n <ng-container *ngFor=\"let data of newIncomingCallsList\"> \r\n <div class=\"p-2 \">\r\n <div class=\"call-info-wrapper w-100 d-flex align-items-center\">\r\n <div class=\"img\">\r\n <img class=\"avatar-img-wrapper\" [src]=\"data?.img\" alt=\"\" width=\"45\" />\r\n </div>\r\n <div class=\"d-flex justify-content-between w-100 align-items-center mr-2\">\r\n <div class=\"callerDetails-wrapper\">\r\n <h5 class=\"break-word\">{{data?.userInfo?.c2cInformation?.name || '-'}}</h5>\r\n <p class=\"break-word\">{{data?.userInfo?.displayNum ? data?.userInfo?.c2cInformation?.number : data?.userInfo?.c2cInformation?.number }}</p>\r\n </div> \r\n <div class=\"d-flex align-items-center\">\r\n <button class=\"call-btn-wrapper receive-btn\" *ngIf=\"!data?.isCallConnected\">\r\n <!-- <span class=\"material-symbols-outlined\" (click)=\"acceptCallFromList(data)\"> call </span> -->\r\n <span class=\"material-symbols-outlined\" (click)=\"add(data)\"> call </span>\r\n </button>\r\n <button class=\"call-btn-wrapper mute-btn\" *ngIf=\"data?.isCallConnected\" (click)=\"toggleMute(data)\" [ngClass]=\"{'active-mute': isMute}\">\r\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\r\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic</span>\r\n </button>\r\n <div class=\"record-btn-container\">\r\n <button class=\"record-btn start-stop\" *ngIf=\"data?.isCallConnected && !isRecording\" [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording('')\" [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\" [disabled]=\"disbaleEndCallBtn\">\r\n <span class=\"recording-icon\"></span>\r\n </button> \r\n <div class=\"\">\r\n <button class=\"record-btn pause-resume\" *ngIf=\"data?.isCallConnected && isRecording && !isPaused\" (click)=\"pauseRecording()\">\r\n <span class=\"material-symbols-outlined\"> pause </span>\r\n </button>\r\n <button class=\"record-btn pause-resume\" *ngIf=\"data?.isCallConnected && isPaused\" (click)=\"resumeRecording('')\">\r\n <span class=\"material-symbols-outlined\"> play_arrow </span>\r\n </button>\r\n </div>\r\n </div>\r\n <button class=\"call-btn-wrapper reject-btn\">\r\n <span class=\"material-symbols-outlined\" (click)=\"rejectCallFromList(data)\"> call_end </span>\r\n </button>\r\n <div class=\"togglearrow-arrow me-2\" id=\"togglearrow\" \r\n (click)=\"hasDetailedInfo(data) ? onClickExpand(data) : null\" \r\n [ngClass]=\"{'disabled': !hasDetailedInfo(data)}\"\r\n [title]=\"hasDetailedInfo(data) ? 'View details' : 'No details available'\">\r\n <i class=\"fa fa-angle-right\"></i>\r\n </div>\r\n <!-- <div *ngIf=\"data?.customParameters?.get('c2cNumber') === true || data?.customParameters?.get('c2cNumber') === 'true'\" class=\"togglearrow-arrow me-2\" id=\"togglearrow\" (click)=\"onClickExpand(data)\"> \r\n <i class=\"fa fa-angle-right\"></i> \r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"call-container p-3 text-white model-content\" *ngIf=\"isClickExpand \"> \r\n <div class=\"mb-2\" style=\"width: 100%; height: 100%;\">\r\n <div class=\"call-animation\" [ngClass]=\"{'call-animation-play': showRingAnimation}\">\r\n <img class=\"avatar-img\" [src]=\"incomingCallData.img\" alt=\"\" width=\"100\" />\r\n </div>\r\n <div class=\"text-center\">\r\n <h3 class=\"text-white\">{{selectedIncomingCall?.userInfo?.c2cInformation?.name || '-'}}</h3>\r\n </div>\r\n <div class=\"f-13\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-12 d-flex align-items-center mb-2\">\r\n <div class=\"me-2\">Subject:</div>\r\n <div class=\"ml-2\">{{selectedIncomingCall?.userInfo?.c2cInformation?.subject || '-'}}</div>\r\n </div> \r\n </div>\r\n\r\n <div class=\"row mb-2\">\r\n <div class=\"col-12 d-flex align-items-center mb-2\">\r\n <div class=\"me-2\">Email:</div>\r\n <div>{{selectedIncomingCall?.userInfo?.c2cInformation?.email || '-'}}</div>\r\n </div> \r\n </div>\r\n\r\n <div class=\"row mb-2\">\r\n <div class=\"col-6 mb-2\">\r\n <div class=\"\">Number:</div>\r\n <div class=\"\">{{selectedIncomingCall?.userInfo?.c2cInformation?.number}}</div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"\">Language:</div>\r\n <div class=\"ml-2\">{{selectedIncomingCall?.userInfo?.c2cInformation?.language || '-'}}</div>\r\n </div>\r\n </div>\r\n <div class=\"row mb-2\">\r\n <div class=\"col-6 mb-2\">\r\n <div class=\"\">Extension:</div>\r\n <div class=\"ml-2\">{{selectedIncomingCall?.userInfo?.c2cInformation?.extension || '-'}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-12 d-flex align-items-center mb-2\">\r\n <div class=\"me-2\">Image:</div>\r\n <div class=\"text-ellipsis\">\r\n <ng-container *ngIf=\"selectedIncomingCall?.userInfo?.c2cInformation?.image && selectedIncomingCall?.userInfo?.c2cInformation?.image !== '-'; else noImage\">\r\n <img src=\"{{selectedIncomingCall?.userInfo?.c2cInformation?.image}}\" alt=\"\" width=\"42\" height=\"42\" class=\"ml-2\"/>\r\n </ng-container>\r\n <ng-template #noImage>\r\n <span class=\"ml-2\">No Image Available</span>\r\n </ng-template>\r\n </div>\r\n </div> \r\n </div>\r\n\r\n <div class=\" mb-4\">\r\n <div class=\"\">\r\n <div class=\"\">Message:</div>\r\n <div class=\"text-ellipsis\">{{selectedIncomingCall?.userInfo?.c2cInformation?.message || '-'}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-2\">\r\n <div class=\"col-6 mb-2\">\r\n <div class=\"\">Point Name:</div>\r\n <div class=\"\">{{selectedIncomingCall?.userInfo?.c2cInformation?.pointName || '-'}}</div>\r\n </div>\r\n <div class=\"col-6 mb-2\">\r\n <div class=\"\">Source Name:</div>\r\n <div class=\"\">{{selectedIncomingCall?.userInfo?.c2cInformation?.sourceName || '-'}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"call-action-btns mt-0\">\r\n <button class=\"call-btn receive-btn\" *ngIf=\"!selectedIncomingCall?.isCallConnected\">\r\n <span class=\"material-symbols-outlined\" (click)=\"acceptCallFromList(selectedIncomingCall)\"> call </span>\r\n </button>\r\n <button class=\"call-btn mute-btn\" *ngIf=\"selectedIncomingCall?.isCallConnected\" (click)=\"toggleMute(selectedIncomingCall)\" [ngClass]=\"{'active-mute': isMute}\">\r\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\r\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic </span>\r\n </button>\r\n <div class=\"record-btn-container\">\r\n <button class=\"record-btn start-stop\" *ngIf=\"selectedIncomingCall?.isCallConnected && !isRecording\" [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording('')\" [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\" [disabled]=\"disbaleEndCallBtn\">\r\n <span class=\"recording-icon\"></span>\r\n </button> \r\n <div class=\"pause-resume-btns\">\r\n <button class=\"record-btn pause-resume\" *ngIf=\"selectedIncomingCall?.isCallConnected && isRecording && !isPaused\" (click)=\"pauseRecording()\">\r\n <span class=\"material-symbols-outlined\"> pause </span>\r\n </button>\r\n <button class=\"record-btn pause-resume\" *ngIf=\"selectedIncomingCall?.isCallConnected && isPaused\" (click)=\"resumeRecording('')\">\r\n <span class=\"material-symbols-outlined\"> play_arrow </span>\r\n </button>\r\n </div>\r\n </div>\r\n <button class=\"call-btn reject-btn\">\r\n <span class=\"material-symbols-outlined\" (click)=\"rejectCallFromList(selectedIncomingCall)\"> call_end </span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"wave-container\">\r\n <svg class=\"waves\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n viewBox=\"0 24 150 28\" preserveAspectRatio=\"none\" shape-rendering=\"auto\" [ngStyle]=\"{'width': '756px'}\">\r\n <defs>\r\n <path id=\"gentle-wave\" d=\"M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z\" />\r\n </defs>\r\n <g class=\"parallax\">\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"0\" fill=\"rgba(255,255,255,0.7)\" />\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"3\" fill=\"rgba(255,255,255,0.5)\" /> \r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"7\" fill=\"#fff\" />\r\n </g>\r\n </svg>\r\n </div>\r\n</div>","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { TwilioService } from '../../service/twilio.service';\n\n@Component({\n selector: 'lib-caller-id-dialog',\n templateUrl: './caller-id-dialog.component.html',\n styleUrls: ['./caller-id-dialog.component.css']\n})\nexport class CallerIdDialogComponent implements OnInit {\n storedTheme: string = localStorage.getItem('theme-color') || 'blue';\n alertToggle: boolean = true;\n constructor(\n private router: Router,\n private twilServ: TwilioService,\n public dialogRef: MatDialogRef<CallerIdDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) {}\n\n token:string = '';\n ngOnInit(){\n this.alertToggle = (localStorage.getItem('alertToggle') == 'true') ? true: false;\n this.token = localStorage.getItem('ext_token') || '';\n }\n onConfirm(): void {\n this.dialogRef.close(true);\n }\n\n onCancel(): void {\n this.dialogRef.close(false);\n }\n redirectToCallingPreference(){\n this.router.navigateByUrl('/extension/caller-id/'+this.token);\n this.dialogRef.close({event:'redirect', alertToggle: this.alertToggle});\n }\n proceed() {\n this.dialogRef.close({ event: 'proceed', alertToggle: this.alertToggle });\n }\n closeModal(){\n this.dialogRef.close();\n }\n\n hideMessage(ev: any) {\n this.twilServ.toggleCallerIdAlert.next(ev.target.checked);\n let val = ev.target.checked ? 'true' : 'false';\n localStorage.setItem('isAlertEnable', val);\n \n }\n doNotShowAgain() {\n console.log('doNotShowAgain');\n \n }\n}","<div class=\"main-theme {{storedTheme}}\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\"> Caller ID Not Set</h5>\n <button class=\"close\" (click)=\"closeModal()\">\n <span>x</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <p class=\"mb-1\"><strong>There is no caller ID set in your account</strong> <br /></p>\n <p>The receiver will not be able to identify your call or call you back</p>\n <div class=\"d-flex align-items-center justify-content-center\">\n <input type=\"checkbox\" checked (change)=\"hideMessage($event)\" [(ngModel)]=\"alertToggle\" class=\"mr-2\">\n <label for=\"\" class=\"mb-0 text-muted\">I do not want to see this message again</label>\n </div>\n <button class=\"btn btn-black-outline\" (click)=\"doNotShowAgain()\">Do not show this message again</button>\n </div>\n <div class=\"modal-footer border-top d-flex justify-content-between\">\n <button class=\"btn btn-black-outline\" (click)=\"redirectToCallingPreference()\">Click to set caller ID</button>\n \n <button class=\"btn btn-blue ms-2\" (click)=\"proceed()\">Proceed without Caller ID</button>\n </div>\n</div>","import { NgModule } from '@angular/core';\nimport { DialboxComponent } from './dialbox.component';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { HttpClient, HttpClientModule } from '@angular/common/http';\nimport { RouterLink, RouterModule } from '@angular/router';\nimport { CallProgressComponent } from './components/call-progress/call-progress.component';\n\nimport { IncomingCallComponent } from './components/call-progress/incoming-call/incoming-call.component';\nimport { CallerIdDialogComponent } from './components/caller-id-dialog/caller-id-dialog.component';\nimport { BrowserModule } from '@angular/platform-browser';\n\n@NgModule({\n declarations: [\n DialboxComponent,\n CallProgressComponent,\n CallerIdDialogComponent,\n IncomingCallComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n HttpClientModule,\n RouterLink,\n RouterModule,\n BrowserModule\n ],\n exports: [\n DialboxComponent,\n IncomingCallComponent,\n CallProgressComponent,\n CallerIdDialogComponent,\n ]\n})\nexport class DialboxModule { }\n","/*\n * Public API Surface of dialbox\n */\n\nexport * from './lib/dialbox.component';\nexport * from './lib/dialbox.module';\n\n// Components\nexport * from './lib/components/call-progress/call-progress.component';\n// export * from './lib/components/call-progress/incoming-call/incoming-call.component';\nexport * from './lib/components/call-progress/incoming-call/incoming-call.component';\nexport * from './lib/components/caller-id-dialog/caller-id-dialog.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.IpAddressService","i1.TwilioService","i2.ExtensionService","i3.NotificationService","i1.ExtensionService","i2.TwilioService","i3","i4.IpAddressService","i6.IncomeingCallSocketService","i7","i8","i9.CallProgressComponent","i4"],"mappings":";;;;;;;;;;;;;;;;;;;AACO,MAAM,MAAM,GACf;AACI,IAAA;AACI,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,WAAW;AACpB,KAAA;AACD,IAAA;AACI,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,KAAK;AACd,KAAA;AACD,IAAA;AACI,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,KAAK;KACd,EAAE;AACC,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,KAAK;KACd,EAAE;AACC,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,KAAK;KACd,EAAE;AACC,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,KAAK;KACd,EAAE;AACC,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,MAAM;KACf,EAAE;AACC,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,KAAK;KACd,EAAE;AACC,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,MAAM;AACf,KAAA;AACD,IAAA;AACI,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,IAAI,EAAE,GAAG;AACZ,KAAA;AACD,IAAA;AACI,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,GAAG;AACZ,KAAA;AACD,IAAA;AACI,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,IAAI,EAAE,EAAE;AACX,KAAA;CACJ;;AC7CE,MAAM,WAAW,GAAG;AACzB,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,KAAK,EAAE,+BAA+B;AACtC,IAAA,MAAM,EAAE,sDAAsD;AAC9D,IAAA,UAAU,EAAE,0CAA0C;AACtD,IAAA,YAAY,EAAE,oDAAoD;AAClE,IAAA,oBAAoB,EAAE,6GAA6G;AACnI,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,SAAS,EAAE,0BAA0B;AACrC,IAAA,oBAAoB,EAAE,0BAA0B;AAChD,IAAA,sBAAsB,EAAE,0BAA0B;AAClD,IAAA,aAAa,EAAE,wBAAwB;AACvC,IAAA,iBAAiB,EAAE,sBAAsB;AACzC,IAAA,kBAAkB,EAAE,sBAAsB;AAC1C,IAAA,WAAW,EAAE,sDAAsD;AACnE,IAAA,QAAQ,EAAE;AACR,QAAA,MAAM,EAAE,yCAAyC;AACjD,QAAA,UAAU,EAAE,iCAAiC;AAC7C,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,aAAa,EAAE,6BAA6B;AAC5C,QAAA,iBAAiB,EAAE,cAAc;AACjC,QAAA,KAAK,EAAE,2CAA2C;AAClD,QAAA,aAAa,EAAE,cAAc;AAC7B,QAAA,QAAQ,EAAE,yFAAyF;AACpG,KAAA;AACD,IAAA,iBAAiB,EAAE,yCAAyC;AAC5D,IAAA,WAAW,EAAE,sCAAsC;AACnD,IAAA,aAAa,EAAE,YAAY;AAC3B,IAAA,gBAAgB,EAAE,mBAAmB;CACtC;;MCxBY,gBAAgB,CAAA;AAG3B,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAF5B,IAAM,CAAA,MAAA,GAAG,oCAAoC,CAAC;KAEd;IAExC,gBAAgB,GAAA;AACd,QAAA,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC;AACxC,QAAA,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;AACtD,YAAA,KAAK,EAAE,IAAI;SACZ,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CACjD,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC,CAAC;SACzG,CAAC,CACH,CAAC;KACH;;8GAjBU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCKY,gBAAgB,CAAA;IAG3B,UAAU,CAAC,OAAe,EAAE,UAAe,EAAA;AACzC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAC9B;IACD,UAAU,GAAA;QACR,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;KACH;AA6BD,IAAA,WAAW,CAAC,QAAa,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACrC;IAED,WAAoB,CAAA,IAAgB,EAC1B,gBAAkC,EAAA;QADxB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAC1B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QA7CpC,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;AAatB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;AAC5C,QAAA,IAAA,CAAA,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;QAEpD,IAAQ,CAAA,QAAA,GAAC,KAAK,CAAC;AAEP,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;AAC3D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;AAGnD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;AAC1D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;AAEjD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;AACpD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAEzC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;AACrD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;AAE3C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QAC3D,IAAK,CAAA,KAAA,GAAW,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACxD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACxD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAE/C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;KAS3C;AAEL,IAAA,aAAa,CAAC,OAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KACjC;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,sBAAsB,EAAE,WAAW,CAAC,CAAC;KACpF;IAED,cAAc,CAAC,KAAa,EAAE,IAAQ,EAAA;AACpC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,qBAAqB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;KAC1F;IAGD,aAAa,CAAC,WAAgB,EAAE,KAAa,EAAA;AAC3C,QAAA,MAAM,cAAc,GAAG;YACrB,iBAAiB,EAAE,WAAW,CAAC,eAAe;YAC9C,iBAAiB,EAAE,WAAW,CAAC,eAAe;YAC9C,eAAe,EAAE,WAAW,CAAC,WAAW;YACxC,kBAAkB,EAAE,WAAW,CAAC,cAAc;YAC9C,gBAAgB,EAAE,WAAW,CAAC,YAAY;YAC1C,cAAc,EAAE,WAAW,CAAC,UAAU;YACtC,OAAO,EAAE,WAAW,CAAC,KAAK;YAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM;YAC5B,aAAa,EAAE,WAAW,CAAC,WAAW;YACtC,UAAU,EAAE,WAAW,CAAC,QAAQ;YAChC,WAAW,EAAE,WAAW,CAAC,SAAS;YAClC,UAAU,EAAE,WAAW,CAAC,QAAQ;AAChC,YAAA,kBAAkB,EAAE,CAAC,WAAW,CAAC,gBAAgB,KAAK,IAAI,IAAI,WAAW,CAAC,gBAAgB,KAAK,SAAS,IAAI,WAAW,CAAC,gBAAgB,KAAK,EAAE,IAAI,WAAW,CAAC,gBAAgB,GAAG,WAAW,CAAC,eAAe;AAC7M,YAAA,kBAAkB,EAAE,CAAC,WAAW,CAAC,gBAAgB,KAAK,IAAI,IAAI,WAAW,CAAC,gBAAgB,KAAK,SAAS,IAAI,WAAW,CAAC,gBAAgB,KAAK,EAAE,IAAI,WAAW,CAAC,gBAAgB,GAAG,WAAW,CAAC,eAAe;AAC7M,YAAA,gBAAgB,EAAE,CAAC,WAAW,CAAC,YAAY,KAAK,IAAI,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,IAAI,WAAW,CAAC,YAAY,KAAK,EAAE,IAAI,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,WAAW;AACvL,YAAA,mBAAmB,EAAE,CAAC,WAAW,CAAC,eAAe,KAAK,IAAI,IAAI,WAAW,CAAC,eAAe,KAAK,SAAS,IAAI,WAAW,CAAC,eAAe,KAAK,EAAE,IAAI,WAAW,CAAC,eAAe,GAAG,WAAW,CAAC,cAAc;AACzM,YAAA,iBAAiB,EAAE,CAAC,WAAW,CAAC,aAAa,KAAK,IAAI,IAAI,WAAW,CAAC,aAAa,KAAK,SAAS,IAAI,WAAW,CAAC,aAAa,KAAK,EAAE,IAAI,WAAW,CAAC,aAAa,GAAG,WAAW,CAAC,YAAY;AAC7L,YAAA,eAAe,EAAE,CAAC,WAAW,CAAC,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,WAAW,KAAK,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC,UAAU;AACjL,YAAA,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC;AAChC,YAAA,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC;YACpC,aAAa,EAAE,WAAW,CAAC,WAAW;YACtC,aAAa,EAAE,WAAW,CAAC,WAAW;YACtC,kBAAkB,EAAE,WAAW,CAAC,gBAAgB;YAChD,iBAAiB,EAAE,WAAW,CAAC,eAAe;YAC9C,sBAAsB,EAAE,WAAW,CAAC,oBAAoB;SACzD,CAAC;AAEF,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,uBAAuB,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;KACrG;AACD,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG;YACb,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC;AACxH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,qCAAqC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;KAE5G;AAED,IAAA,UAAU,CAAC,WAAmB,EAAE,MAAc,EAAE,IAAa,EAAE,KAAa,EAAA;AAG1E,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;AACD,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,aAAa,EAAE,WAAW;AAC1B,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,MAAM,EAAG,IAAI;SACd,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,wBAAwB,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;KAClG;IACD,eAAe,CAAC,WAAmB,EAAE,WAAmB,EAAE,MAAc,EAAE,GAAW,EAAC,KAAa,EAAA;AACjG,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;AACD,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,aAAa,EAAE,WAAW;AAC1B,YAAA,aAAa,EAAE,WAAW;AAC1B,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,KAAK,EAAE,GAAG;SACX,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,+BAA+B,EAAE,SAAS,EAAC,WAAW,CAAC,CAAC;KACxG;AACD,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG;YACb,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC;AACxH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,+BAA+B,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;KAEtG;IAED,4BAA4B,CAAC,WAAmB,EAAE,KAAa,EAAA;AAC7D,QAAA,MAAM,MAAM,GAAG;YACb,UAAU,EAAE,SAAS,GAAG,KAAK;AAC7B,YAAA,aAAa,EAAE,WAAW;SAC3B,CAAA;QAED,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC;AACxH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,8BAAA,EAAiC,WAAW,CAAE,CAAA,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;KACrH;IAGD,qBAAqB,CAAC,SAAiB,EAAE,KAAa,EAAA;AACpD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;AACD,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,WAAW,EAAE,SAAS;SACvB,CAAC;QACF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,iCAAiC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;KACtG;AAED,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,gCAAgC,EAAE,WAAW,CAAC,CAAC;KAC9F;IAED,uBAAuB,CAAC,eAAuB,EAAE,KAAa,EAAA;AAC5D,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;AACD,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,UAAU,EAAE,eAAe;SAC5B,CAAC;QACF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,+BAA+B,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;KACpG;IAED,mBAAmB,CAAC,QAAa,EAAE,KAAa,EAAA;AAC9C,QAAA,MAAM,MAAM,GAAG;YACb,UAAU,EAAE,SAAS,GAAG,KAAK;AAC7B,YAAA,OAAO,EAAE,QAAQ;SAClB,CAAA;QAED,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC;AACxH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,6BAA6B,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;KACpG;AAED,IAAA,eAAe,CAAC,GAAW,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC9B,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,kCAAkC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;KACzG;IAED,YAAY,CAAC,eAAuB,EAAE,KAAa,EAAA;AACjD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;AACD,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,UAAU,EAAE,eAAe;SAC5B,CAAC;QACF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,8BAA8B,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;KACnG;AAED,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QAED,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,+BAA+B,EAAE,WAAW,CAAC,CAAC;KAC7F;IAED,iBAAiB,GAAA;AACf,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,WAAW,CAAC,MAAM,GAAG,+BAA+B,EAAE,WAAW,CAAC,CAAC;KACjG;AAED,IAAA,eAAe,CAAC,UAAe,EAAA;AAC7B,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,WAAW,CAAC,MAAM,GAAG,8BAA8B,GAAG,UAAU,EAC3F,WAAW,CAAC,CAAC;KAChB;AAED,IAAA,UAAU,CAAC,OAAY,EAAA;AACrB,QAAA,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAA;AACpC,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC9G,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,qBAAqB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;KAC1F;AAGD,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,WAAW,CAAC,MAAM,GAAG,4CAA4C,EAAE,WAAW,CAAC,CAAC;KAC9G;IAED,eAAe,CAAC,KAAa,EAAE,OAAY,EAAA;AACzC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,gCAAgC;YAChD,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,uCAAuC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC/G;IAED,iBAAiB,CAAC,KAAa,EAAE,OAAY,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,gCAAgC;SACjD,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,0CAA0C,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAClH;IAED,aAAa,CAAC,KAAa,EAAE,OAAY,EAAA;AACvC,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,uCAAuC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC/G;AAED,IAAA,iBAAiB,CAAC,OAAY,EAAA;AAC5B,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,0CAA0C,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAClH;AAED,IAAA,eAAe,CAAC,OAAY,EAAA;AAC1B,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,kCAAkC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC1G;AAED,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,mCAAmC,GAAE,MAAM,EAAE,WAAW,CAAC,CAAC;KAC1G;AAED,IAAA,YAAY,CAAC,OAAY,EAAA;AACvB,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,kCAAkC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC1G;AACD,IAAA,UAAU,CAAC,OAAY,EAAA;AACrB,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,qCAAqC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC7G;AACD,IAAA,YAAY,CAAC,OAAY,EAAA;AACvB,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,gDAAgD,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACxH;AAED,IAAA,kBAAkB,CAAC,IAAS,EAAA;AAC1B,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,kCAAkC,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;KACtG;IAED,YAAY,CAAC,KAAa,EAAE,IAAS,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,WAAW,CAAC,MAAM,GAAG,uCAAuC,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC;KAChH;IACD,SAAS,CAAC,KAAa,EAAE,OAAY,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,sCAAsC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC9G;AAED,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,WAAW,CAAC,MAAM,GAAG,qCAAqC,EAAE,WAAW,CAAC,CAAC;KACvG;IAED,iBAAiB,CAAC,KAAa,EAAE,OAAY,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,0CAA0C,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACjH;IAED,aAAa,CAAC,KAAa,EAAE,SAAiB,EAAA;AAC5C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;;AAEzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,4CAA4C,GAAC,SAAS,EAAE,WAAW,CAAC,CAAC;KACpH;;IAID,OAAO,CAAC,KAAa,EAAE,OAAY,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,yBAAyB,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACnG;IACD,SAAS,CAAC,KAAa,EAAE,OAAY,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,2BAA2B,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACnG;IACD,oBAAoB,CAAC,KAAa,EAAE,OAAY,EAAA;AAC9C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,gDAAgD,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACxH;IACD,6BAA6B,CAAC,KAAY,EAAE,MAAa,EAAA;AACvD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,4CAA4C,GAAC,MAAM,EAAE,WAAW,CAAC,CAAC;KACjH;IACD,oBAAoB,CAAC,KAAa,EAAE,OAAY,EAAA;AAC9C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,6CAA6C,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACrH;;AAKD,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,wCAAwC,EAAE,WAAW,CAAC,CAAC;KACtG;IACD,YAAY,CAAC,KAAa,EAAE,OAAY,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,mCAAmC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC3G;IAED,YAAY,CAAC,KAAa,EAAE,OAAY,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,uCAAuC,GAAG,OAAO,EAAE,WAAW,CAAC,CAAC;KAC/G;IAED,wBAAwB,CAAC,KAAa,EAAE,OAAY,EAAA;AAClD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC5G;AAED,IAAA,YAAY,CAAC,KAAa,EAAE,OAAY,EAAE,MAAW,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,qCAAA,EAAwC,MAAM,CAAE,CAAA,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACxH;AAED,IAAA,cAAc,CAAC,KAAa,EAAE,OAAY,EAAE,EAAO,EAAA;AACjD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,qCAAA,EAAwC,EAAE,CAAE,CAAA,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACpH;AAED,IAAA,kBAAkB,CAAC,KAAa,EAAE,OAAY,EAAE,EAAO,EAAA;AACrD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,yCAAA,EAA4C,EAAE,CAAE,CAAA,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACxH;IAED,mBAAmB,CAAC,KAAa,EAAE,OAAY,EAAA;AAC7C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,4CAA4C,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACnH;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BD,IAAA,YAAY,CAAC,OAAY,EAAA;QACvB,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CACtC,SAAS,CAAC,gBAAgB,IAAG;AAC3B,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAClD,SAAS,CAAC,aAAa,IAAG;AACtB,gBAAA,MAAM,MAAM,GAAG;AACb,oBAAA,cAAc,EAAE,kBAAkB;oBAClC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;oBACzD,YAAY,EAAE,aAAa,CAAC,EAAE;AAC9B,oBAAA,YAAY,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO;iBAC5C,CAAC;AACF,gBAAA,OAAO,GAAG,EAAC,GAAG,OAAO,EAAE,KAAK,EAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAC,CAAA;gBAC5D,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,4CAA4C,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,IAAI,CACrH,UAAU,CAAC,KAAK,IAAG;AACjB,oBAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;iBAC1B,CAAC,CACH,CAAC;AACN,aAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;;AAEjB,gBAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;aAC1B,CAAC,CACH,CAAC;SACH,CAAC,CACH,CAAC;KACH;AAGA,IAAA,sBAAsB,CAAC,OAAY,EAAA;AAClC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,OAAO,CAAC,MAAM;AAC1B,YAAA,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;SACxC,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,6CAA6C,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;KACpH;AAED,IAAA,cAAc,CAAC,OAAY,EAAA;AACxB,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;AAC/B,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1D,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACzC,QAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAChC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,mCAAmC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC3G;AAED,IAAA,eAAe,CAAC,OAAW,EAAA;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;AAC9B,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1D,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC5G;AAED,IAAA,iBAAiB,CAAC,OAAW,EAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;AAC9B,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1D,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC5G;AAED,IAAA,kBAAkB,CAAC,aAAiB,EAAA;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;AAC9B,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1D,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,qCAAqC,aAAa,CAAA,CAAE,EAAE,WAAW,CAAC,CAAC;KAClH;AAED,IAAA,gBAAgB,CAAC,OAAW,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG;YACb,cAAc,EAAE,OAAO,CAAC,YAAY;YACpC,gBAAgB,EAAE,OAAO,CAAC,cAAc;YACxC,MAAM,EAAE,OAAO,CAAC,IAAI;SACrB,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,qBAAqB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;KAC5F;AAID,IAAA,2BAA2B,CAAC,aAAiB,EAAA;QAC3C,MAAM,MAAM,GAAG,EAEd,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,6CAA6C,aAAa,CAAA,CAAE,EAAE,WAAW,CAAC,CAAC;KAC1H;IAED,qBAAqB,CAAC,aAAiB,EAAE,YAAgB,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,wCAAwC,aAAa,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAE,CAAC;KACzH;IAED,eAAe,GAAA;QACb,MAAM,MAAM,GAAG,EAEd,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACxD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,EAAE,WAAW,CAAC,CAAC;KACnG;IAED,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,WAAW,CAAC,MAAM,GAAG,2CAA2C,CAAC,CAAC,IAAI,CAC9F,GAAG,CAAC,QAAQ,IAAG;AACb,YAAA,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACxE,gBAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAClE,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACtD,aAAA;SACF,CAAC,CACH,CAAC;KACH;;;;;;;;;;;;;;;AAgBD,IAAA,oBAAoB,CAAC,QAAa,EAAA;AAChC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;SAC1D,CAAA;;AAED,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC1D,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,0CAA0C,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;KAChH;AACD,IAAA,oBAAoB,CAAC,OAAY,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AACzD,YAAA,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;SACxC,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,kCAAkC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC1G;AACD,IAAA,gBAAgB,CAAC,OAAe,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;AAC9B,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1D,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,4CAA4C,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;KAC3G;IACD,sBAAsB,CAAC,OAAe,EAAC,MAAW,EAAA;AAChD,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;AAC9B,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1D,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,qDAAqD,OAAO,CAAA,QAAA,EAAW,MAAM,CAAE,CAAA,EAAC,EAAE,EAAE,WAAW,CAAC,CAAC;KAC7I;AACD,IAAA,aAAa,CAAC,UAAkB,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;AAC9B,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1D,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,iCAAiC,UAAU,CAAA,CAAE,EAAE,WAAW,CAAC,CAAC;KACvG;;AAGD,IAAA,OAAO,CAAC,WAAmB,EAAE,WAAmB,EAAE,OAAY,EAAA;QAC5D,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CACtC,SAAS,CAAC,gBAAgB,IAAG;AAC3B,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAClD,SAAS,CAAC,CAAC,aAAkB,KAAI;gBAC/B,IAAI,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;oBAChE,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;AAC/D,iBAAA;AAAM,qBAAA;AACL,oBAAA,MAAM,MAAM,GAAG;AACb,wBAAA,cAAc,EAAE,kBAAkB;AAClC,wBAAA,aAAa,EAAE,WAAW;AAC1B,wBAAA,aAAa,EAAE,WAAW;wBAC1B,YAAY,EAAE,aAAa,CAAC,EAAE;AAC9B,wBAAA,YAAY,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO;qBAC5C,CAAC;AACF,oBAAA,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAChE,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,4BAA4B,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,IAAI,CACrG,UAAU,CAAC,KAAK,IAAG;;AAEjB,wBAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;qBAC1B,CAAC,CACH,CAAC;AACH,iBAAA;AACH,aAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;;AAEjB,gBAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;aAC1B,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;;AAEjB,YAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;SAC1B,CAAC,CACH,CAAC;KACH;;;;;;;;;;;;;;;;AAqBD,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,EAAE,WAAW,CAAC,CAAC;KAClG;AAED,IAAA,OAAO,CAAC,KAAa,EAAE,QAAiB,EAAE,SAAkB,EAAA;AAC1D,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;AACD,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG,CAAC,CAAC;AAC9C,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,sBAAsB,EAAE,WAAW,CAAC,CAAC;KACpF;AAED,IAAA,SAAS,CAAC,KAAa,EAAE,SAAc,EAAE,OAAY,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,sBAAA,EAAyB,SAAS,CAAE,CAAA,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC5G;;;;;;;;;AAUD,IAAA,QAAQ,CAAC,KAAa,EAAE,IAAY,EAAE,IAAY,EAAA;AAChD,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,aAAA,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;aAC5B,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEhC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC;AAC/F,YAAA,MAAM,EAAE,MAAM;SACf,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,sBAAsB,EAAE,WAAW,CAAC,CAAC;KACpF;AACD,IAAA,eAAe,CAAC,KAAa,EAAE,QAAa,EAAE,OAAY,EAAA;AACxD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,2BAAA,EAA8B,QAAQ,CAAE,CAAA,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAChH;AACD,IAAA,eAAe,CAAC,KAAa,EAAE,SAAc,EAAE,OAAY,EAAA;AACzD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,8BAAA,EAAiC,SAAS,CAAE,CAAA,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACpH;AAED,IAAA,iBAAiB,CAAC,KAAa,EAAE,SAAc,EAAE,OAAY,EAAA;AAC3D,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,gCAAA,EAAmC,SAAS,CAAE,CAAA,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACtH;AACD,IAAA,gBAAgB,CAAC,KAAa,EAAE,IAAY,EAAE,IAAY,EAAA;AACxD,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,aAAA,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;aAC5B,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEhC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC;AAC/F,YAAA,MAAM,EAAE,MAAM;SACf,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,+BAA+B,EAAE,WAAW,CAAC,CAAC;KAC7F;IACD,SAAS,CAAC,KAAa,EAAE,OAAY,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,2BAA2B,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACnG;AAED,IAAA,SAAS,CAAC,KAAa,EAAE,IAAY,EAAE,IAAY,EAAA;AACjD,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,aAAA,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;aAC5B,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEhC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC;AAC/F,YAAA,MAAM,EAAE,MAAM;SACf,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,2BAA2B,EAAE,WAAW,CAAC,CAAC;KACzF;AAED,IAAA,cAAc,CAAC,KAAa,EAAE,QAAa,EAAE,OAAY,EAAA;AACvD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,4BAAA,EAA+B,QAAQ,CAAE,CAAA,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACjH;;AAGD,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,EAAE,WAAW,CAAC,CAAC;KAClG;AACD,IAAA,aAAa,CAAC,KAAa,EAAE,WAAgB,EAAE,OAAY,EAAA;AACzD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,oCAAA,EAAuC,WAAW,CAAE,CAAA,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC5H;IACD,iBAAiB,CAAC,KAAa,EAAE,OAAY,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,uCAAuC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC/G;;;;;;;;;IAWD,WAAW,CAAC,KAAa,EAAE,OAAY,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG;;YAEb,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QAED,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,mCAAmC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC3G;;AAGD,IAAA,iBAAiB,CAAC,KAAa,EAAC,IAAW,EAAC,IAAW,EAAA;AACrD,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,aAAA,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;aAC5B,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEhC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC;AAC/F,YAAA,MAAM,EAAE,MAAM;SACf,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,mCAAmC,EAAE,WAAW,CAAC,CAAC;KACjG;AAED,IAAA,WAAW,CAAC,KAAa,EAAE,QAAa,EAAE,OAAY,EAAA;AACpD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,kCAAA,EAAqC,QAAQ,CAAE,CAAA,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACvH;;AAGD,IAAA,gBAAgB,CAAC,KAAa,EAAE,IAAY,EAAE,IAAY,EAAA;AACxD,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,aAAA,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;aAC5B,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEhC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC;AAC/F,YAAA,MAAM,EAAE,MAAM;SACf,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,wBAAwB,EAAE,WAAW,CAAC,CAAC;KACtF;AAED,IAAA,2BAA2B,CAAC,KAAa,EAAE,UAAc,EAAE,IAAY,EAAE,IAAY,EAAA;AACnF,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC1B,aAAA,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;aAC5B,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEhC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC;AAC/F,YAAA,MAAM,EAAE,MAAM;SACf,CAAC;QACF,MAAM,SAAS,GAAC,EAAE,CAAA;AAEnB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,4CAA4C,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;KACxH;;IAGD,sBAAsB,CAAC,KAAa,EAAE,aAAkB,EAAA;AACtD,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC;;SAEhG,CAAC;AACH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,uCAAuC,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;KACpH;IACD,oBAAoB,CAAC,KAAY,EAAE,WAAgB,EAAA;AACjD,QAAA,MAAM,WAAW,GAAG;AACd,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC;;SAEhG,CAAC;AACH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAK,WAAW,CAAC,MAAM,GAAG,+CAA+C,WAAW,CAAA,CAAE,EAAE,WAAW,CAAC,CAAC;KAChI;AACD,IAAA,oBAAoB,CAAC,KAAY,EAAE,WAAgB,EAAE,OAAY,EAAA;AAC/D,QAAA,MAAM,WAAW,GAAG;AACd,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC;SAChG,CAAC;AACH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,2CAAA,EAA8C,WAAW,CAAE,CAAA,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;KACrI;IACD,eAAe,CAAC,KAAa,EAAE,EAAU,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,wCAAwC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;KAC3G;IAED,cAAc,CAAC,KAAa,EAAE,OAAY,EAAA;AACxC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QAED,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,qCAAqC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC7G;AAED,IAAA,WAAW,CAAC,OAAW,EAAA;AACrB,QAAA,IAAI,WAAW,GAAG;YAChB,OAAO,EAAE,IAAI,WAAW,CAAC;gBACvB,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;aAC1D,CAAC;SACH,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,mCAAmC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC3G;IAED,YAAY,CAAC,KAAa,EAAE,OAAW,EAAA;QACrC,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC;AACxH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,4CAA4C,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACpH;;AAGD,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,mCAAmC,EAAE,WAAW,CAAC,CAAC;KACjG;;IAGD,iBAAiB,CAAC,KAAa,EAAE,OAAY,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QAED,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,mCAAmC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC3G;;IAGD,cAAc,CAAC,UAAe,EAAE,UAAe,EAAA;AAC7C,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;QACzF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,WAAW,CAAC,MAAM,GAAG,6BAA6B,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,EAC7G,WAAW,CAAC,CAAC;KAChB;;AAED,IAAA,aAAa,CAAC,SAAc,EAAA;AAC1B,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAS,WAAW,CAAC,MAAM,GAAG,+BAA+B,EAAE,SAAS,EAC3F,WAAW,CAAC,CAAC;KAChB;;IAGD,WAAW,CAAC,QAAgB,EAAE,KAAa,EAAA;AACzC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,8BAA8B,GAAG,QAAQ,EAAE,WAAW,CAAC,CAAC;KACvG;IACD,eAAe,CAAC,SAAiB,EAAE,KAAa,EAAA;AAC9C,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,YAAY,EAAE,MAAgB;YAC9B,OAAO,EAAE,IAAI,WAAW,CAAC;AACvB,gBAAA,cAAc,EAAE,kBAAkB;gBAClC,UAAU,EAAE,SAAS,GAAG,KAAK;aAC9B,CAAC;SACH,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,kCAAkC,GAAG,SAAS,EAAE,WAAW,CAAC,CAAC;KAC5G;AAED,IAAA,UAAU,CAAC,SAAiB,EAAA;AAC1B,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,6BAA6B,GAAG,SAAS,EAAE,WAAW,CAAC,CAAC;KACvG;;AAGD,IAAA,iBAAiB,CAAC,KAAU,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,4BAA4B,EAAE,WAAW,CAAC,CAAC;KAC1F;;AAGD,IAAA,WAAW,CAAC,KAAU,EAAA;AACpB,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,0BAA0B,EAAE,WAAW,CAAC,CAAC;KACxF;;AAGD,IAAA,MAAM,CAAC,SAAiB,EAAE,MAAc,EAAE,KAAa,EAAA;AACrD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;AACD,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,QAAQ,EAAE,MAAM;SACjB,CAAC;QACF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,kCAAkC,SAAS,CAAA,CAAA,EAAI,MAAM,CAAE,CAAA,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;KAC5H;IACD,qBAAqB,CAAC,UAAkB,EAAE,KAAa,EAAA;AACrD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,CAAA,wCAAA,EAA2C,UAAU,CAAE,CAAA,EAAC,EAAE,EAAE,WAAW,CAAC,CAAC;KACzH;IAED,iBAAiB,CAAC,SAAiB,EAAE,KAAa,EAAA;AAChD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,gCAAgC,GAAG,SAAS,EAAE,WAAW,CAAC,CAAC;KAC1G;AAED,IAAA,MAAM,CAAC,OAAW,EAAA;AAChB,QAAA,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAA;QACpC,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,OAAO,EAAE,CAAC,EAAE,CAAC;AAC1H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,uBAAuB,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;KAC1F;AAED,IAAA,gBAAgB,CAAC,OAAW,EAAA;QAC1B,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,2BAA2B,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACnG;IACD,mBAAmB,CAAC,SAAkB,EAAE,QAAiB,EAAA;AACvD,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG,CAAC,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;AAClH,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,EAAE,WAAW,CAAC,CAAC;KAClG;IACD,mBAAmB,GAAA;QACjB,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,mCAAmC,EAAE,WAAW,CAAC,CAAC;KACjG;AACD,IAAA,gBAAgB,CAAC,OAAY,EAAA;;AAE3B,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAC,CAAC,EAAE,CAAC;QACxF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,2BAA2B,GAAG,OAAO,CAAC,cAAc,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;KAC9I;AACD,IAAA,kBAAkB,CAAC,OAAY,EAAA;QAC7B,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;QACpJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,wBAAwB,GAAG,OAAO,CAAC,cAAc,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;KAC3I;IACD,mBAAmB,CAAC,QAAgB,EAAE,KAAa,EAAA;AACjD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAE,6CAA6C,QAAQ,CAAA,CAAE,EAAE,WAAW,CAAC,CAAC;KACpH;IACD,mBAAmB,CAAC,KAAa,EAAE,eAAoB,EAAA;AACrD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,sCAAsC,eAAe,CAAA,CAAE,EAAE,WAAW,CAAC,CAAC;KACrH;AACD,IAAA,UAAU,CAAE,UAAc,EAAE,SAAiB,EAAC,QAAgB,EAAA;AAC5D,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,EAAE;AAC7C,YAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;AACnC,YAAA,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,EAAE;AACrC,YAAA,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,EAAE;AACvC,YAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;YACnC,WAAW,EAAG,UAAU,CAAC,WAAW;AACpC,YAAA,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,EAAE;SAChC,CAAA;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;aAC9B,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC;aACzC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC;YAChJ,MAAM,EAAE,MAAM,EAAE,CAAC;AACjB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAE,gCAAgC,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;KACxG;IACD,gBAAgB,GAAA;QACd,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,EAAC,CAAC;AAClJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAE,4BAA4B,EAAE,WAAW,CAAC,CAAC;KACzF;IACD,iBAAiB,GAAA;QACf,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,EAAC,CAAC;AACjJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,gCAAgC,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;KACnG;AACD,IAAA,cAAc,CAAC,UAAe,EAAE,SAAa,EAAE,QAAY,EAAA;AACzD,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,EAAE;AAC7C,YAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;AACnC,YAAA,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,EAAE;AACrC,YAAA,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,EAAE;AACvC,YAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;YACnC,WAAW,EAAG,UAAU,CAAC,WAAW;AACpC,YAAA,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,EAAE;SAChC,CAAA;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC9B,aAAA,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;aACvD,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC;AAC9H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,gCAAgC,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;KAC1G;AACF,IAAA,aAAa,CAAC,aAAqB,EAAA;AAClC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,IAAI,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;AACjC,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC;SAAC,CAAC;AAC1F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,qCAAqC,EAAG,WAAW,CAAC,CAAC;KACpG;AAED,IAAA,cAAc,CAAC,UAAe,EAAE,SAAa,EAAE,QAAY,EAAA;AAC1D,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,EAAE;AAC7C,YAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;AACnC,YAAA,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,EAAE;AACrC,YAAA,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,EAAE;AACvC,YAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;YACnC,WAAW,EAAG,UAAU,CAAC,WAAW;AACpC,YAAA,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,EAAE;SAChC,CAAA;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC9B,aAAA,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;aACvD,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,EAAC,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC;AAC7H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,gCAAgC,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;KAC1G;IACD,wBAAwB,GAAA;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC;SAAC,CAAC;AAC1F,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,6CAA6C,EAAG,WAAW,CAAC,CAAC;KAC5G;AACD,IAAA,wBAAwB,CAAC,OAAW,EAAA;AAClC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC;SAAC,CAAC;QACxF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAQ,CAAA,EAAG,WAAW,CAAC,MAAM,0BAA0B,kBAAkB,CAAC,OAAO,CAAC,CAAA,CAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;KACjI;AACD,IAAA,YAAY,CAAC,QAAY,EAAA;AACvB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC;SAAC,CAAC;AACxF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAQ,CAAG,EAAA,WAAW,CAAC,MAAM,qBAAqB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;KACnG;AACD,IAAA,UAAU,CAAC,QAAa,EAAA;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC;SAAC,CAAC;AACxF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAQ,CAAG,EAAA,WAAW,CAAC,MAAM,oBAAoB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;KAClG;AACD,IAAA,iBAAiB,CAAC,QAAa,EAAA;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC;SAAC,CAAC;AACxF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAQ,CAAG,EAAA,WAAW,CAAC,MAAM,2BAA2B,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;KACzG;AACD,IAAA,UAAU,CAAC,QAAa,EAAA;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC;SAAC,CAAC;AACxF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAQ,CAAG,EAAA,WAAW,CAAC,MAAM,oBAAoB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;KAClG;IAED,iBAAiB,GAAA;AACf,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC;SAAC,CAAC;;AAExF,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAClD,SAAS,CAAC,CAAC,aAAkB,KAAI;YACjC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAG,EAAA,WAAW,CAAC,MAAM,CAA8B,2BAAA,EAAA,IAAI,CAAC,QAAQ,CAAA,CAAA,EAAI,aAAa,CAAC,EAAE,CAAA,CAAE,EACtF,IAAI,EACJ,WAAW,CACZ,CAAC;AACJ,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;;AAEnB,YAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;SAC1B,CAAC,CACH,CAAC;KACH;AAED,IAAA,mBAAmB,CAAC,QAAY,EAAE,UAAc,EAAE,QAAY,EAAA;AAC5D,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAClD,SAAS,CAAC,CAAC,aAAkB,KAAI;AAC/B,YAAA,MAAM,KAAK,GAAG;gBACZ,WAAW,EAAE,aAAa,CAAC,EAAE;AAC7B,gBAAA,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO;AAC1C,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,YAAY,EAAE,UAAU;AACxB,gBAAA,UAAU,EAAE,QAAQ;aACrB,CAAC;YACF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;YAEpJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,IAAI,CAC3G,UAAU,CAAC,SAAS,IAAG;;AAErB,gBAAA,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;aAC9B,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,EACF,UAAU,CAAC,OAAO,IAAG;;AAEnB,YAAA,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;SAC5B,CAAC,CACH,CAAC;KACH;AAEH,IAAA,kBAAkB,CAAC,QAAY,EAAA;AAE3B,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,IAAI,CACnD,SAAS,CAAC,CAAC,aAAkB,KAAI;AAC7B,YAAA,MAAM,KAAK,GAAG;gBACb,WAAW,EAAE,aAAa,CAAC,EAAE;AAC7B,gBAAA,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO;AACzC,gBAAA,UAAU,EAAC,QAAQ;aAEpB,CAAC;YACF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AACpJ,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,kCAAkC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AACzG,SAAC,EACD,UAAU,CAAC,KAAK,IAAG;;AAElB,YAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;SAC1B,CAAC,CACD,CACD,CAAC;KACL;IAEA,0BAA0B,GAAA;AACxB,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,WAAW,CAAC,MAAM,GAAG,yCAAyC,CAAC,CAAA;;KAE7F;IAED,eAAe,GAAA;QACb,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,EAAC,CAAC;AACjJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,WAAW,CAAC,MAAM,GAAG,yBAAyB,EAAE,WAAW,CAAC,CAAA;KAC1F;AAED,IAAA,wBAAwB,CAAC,QAAa,EAAA;QACpC,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,gCAAgC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;KACvG;AAED,IAAA,mBAAmB,CAAC,IAAY,EAAA;QAC9B,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,kCAAkC,GAAG,IAAI,EAAC,EAAE,EAAE,WAAW,CAAC,CAAA;KACzG;IAED,WAAW,GAAA;QACT,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,EAAC,YAAY,EAAE,MAAgB,EAAC,CAAC;AAC5I,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,WAAW,CAAC,MAAM,GAAG,wCAAwC,EAAE,WAAW,CAAC,CAAA;KACzG;IAED,qBAAqB,GAAA;QACnB,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAC,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,EAAC,CAAC;AACjJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,WAAW,CAAC,MAAM,GAAG,yCAAyC,EAAE,WAAW,CAAC,CAAA;KAC1G;IACD,iBAAiB,CAAC,KAAa,EAAE,OAAY,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC5G;IACD,uBAAuB,CAAC,KAAa,EAAE,OAAY,EAAA;AACjD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,yCAAyC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACjH;IACD,yBAAyB,CAAC,KAAa,EAAE,OAAY,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,8CAA8C,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACtH;AAED,IAAA,cAAc,CAAC,UAAkB,EAAA;AAC/B,QAAA,OAAO,GAAG,WAAW,CAAC,MAAM,CAAmC,gCAAA,EAAA,UAAU,EAAE,CAAC;KAC7E;AAED,IAAA,mBAAmB,CAAC,IAAS,EAAA;QAC3B,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,WAAW,CAAC,MAAM,GAAG,yCAAyC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;KAC7G;IACD,gBAAgB,GAAA;QACd,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,EAAC,CAAC;AAClJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;KAC9E;IACD,aAAa,CAAC,KAAa,EAAE,OAAY,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,wBAAwB,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAChG;IACD,wBAAwB,CAAC,KAAa,EAAE,OAAY,EAAA;AAClD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,SAAS,GAAG,KAAK;SAC9B,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,4BAA4B,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACpG;IAED,gBAAgB,CAAC,KAAa,EAAE,OAAe,EAAA;AAC7C,QAAA,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,IAAI,WAAW,CAAC;AACvB,gBAAA,cAAc,EAAE,kBAAkB;gBAClC,UAAU,EAAE,SAAS,GAAG,KAAK;aAC9B,CAAC;SACH,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAK,WAAW,CAAC,MAAM,GAAG,6BAA6B,OAAO,CAAA,CAAE,EAAE,WAAW,CAAC,CAAC;KACvG;AAED,IAAA,kBAAkB,CAAC,YAAoB,EAAA;AACrC,QAAA,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,IAAI,WAAW,CAAC;AACvB,gBAAA,cAAc,EAAE,kBAAkB;AAClC,gBAAA,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC,KAAK;aACnC,CAAC;SACH,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,GAAC,YAAY,EAAE,WAAW,CAAC,CAAC;KAC/G;;8GA15CU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCJY,mBAAmB,CAAA;AAG9B,IAAA,WAAA,CACU,aAA4B,EAAA;QAA5B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;AAQtC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QALjC,IAAI,eAAe,IAAI,SAAS,EAAE;AAChC,YAAA,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjG,SAAA;KACF;AAGC,IAAA,gBAAgB,CAAC,QAAa,EAAA;QAC5B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;AAC/B,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzD,QAAA,KAAK,eAAe,IAAI,SAAS,GAC/B;YACE,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,YAAgB,KAAI;AACxD,gBAAA,MAAM,OAAO,GAAG;AACd,oBAAA,IAAI,EAAE,CAAA,mBAAA,EAAsB,UAAU,IAAI,cAAc,CAAE,CAAA;AAC1D,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,OAAO,EAAE;AACP,wBAAA;AACE,4BAAA,MAAM,EAAE,QAAQ;AAChB,4BAAA,KAAK,EAAE,QAAQ;AACf,4BAAA,IAAI,EAAE,gEAAgE;AACvE,yBAAA;AACD,wBAAA;AACE,4BAAA,MAAM,EAAE,QAAQ;AAChB,4BAAA,KAAK,EAAE,QAAQ;AACf,4BAAA,IAAI,EAAE,gEAAgE;AACvE,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,EAAE;wBACJ,GAAG,EAAE,IAAI,CAAC,WAAW;AACtB,qBAAA;AACD,oBAAA,kBAAkB,EAAE,IAAI;iBAEzB,CAAC;AACF,gBAAA,YAAY,CAAC,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AACzD,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;AAEO,IAAA,0BAA0B,CAAC,KAAmB,EAAA;QACpD,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,OAAO;AAExB,QAAA,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM;AACvB,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,MAAM;AACR,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,MAAM;AACR,YAAA;AACE,gBAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBAC/B,MAAM;AACT,SAAA;KACF;IACD,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAC,CAAC,CAAA;KAC5E;IAED,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAC,CAAC,CAAA;KAC5E;;iHArEM,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAHlB,MAAM,EAAA,CAAA,CAAA;4FAGP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCeY,aAAa,CAAA;AA8BxB,IAAA,WAAA,CACU,IAAgB,EAChB,gBAAkC,EAClC,mBAAwC,EAAA;QAFxC,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAChB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;AA/BlD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAC5D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAc,IAAI,CAAC,CAAC;QACrD,IAAgB,CAAA,gBAAA,GAAG,IAAI,eAAe,CAAM,MAAM,CAAC,CAAC;AAIpD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAS,KAAK,CAAC,CAAC;QAC9C,IAAoB,CAAA,oBAAA,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAC3D,QAAA,IAAA,CAAA,KAAK,GAAO,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC9C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACxD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACvD,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;AAE1D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAC9C,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,eAAe,CAAc,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAElJ,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACnD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACxD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC,CAAC;AAC9C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QAE/C,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QACzB,IAAoB,CAAA,oBAAA,GAA2B,IAAI,CAAC;QAS1D,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAEO,eAAe,GAAA;QACrB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;AAC9C,SAAA;QAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACxF,GAAG,CAAC,CAAC,IAAS,KAAI;AAChB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC;YACpC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1B,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;AACzD,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;AACjC,SAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC;SACf,CAAC;QAEF,OAAO,IAAI,CAAC,oBAAoB,CAAC;KAClC;AAEM,IAAA,sBAAsB,CAAC,QAAa,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACnD,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACzB,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,CAAC;AACpC,SAAA;KACF;IAEO,gBAAgB,GAAA;QACtB,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AACvB,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC3C,OAAO;AACR,SAAA;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC/C,YAAA,sBAAsB,EAAE,IAAI;AAC5B,YAAA,eAAe,EAAE,IAAI;AACtB,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAE7B,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEvB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,IAAU,KAAI;AACxC,YAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAC,IAAI,CAAC,CAAA;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAClD,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,KAAI;AACrC,YAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;;AAE7C,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAChC,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAK;AAChC,YAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;AACvD,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,MAAK;AAClC,YAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAChC,SAAC,CAAC,CAAC;KACJ;;;;;;;AASD,IAAA,WAAW,CAAC,OAAY,EAAA;QACtB,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,CAAC,EAAE,CAAC;AACnJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,4CAA4C,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACpH;AACD,IAAA,aAAa,CAAC,OAAW,EAAA;QACvB,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC,KAAK,EAAC,CAAC,EAAE,CAAC;AAC5H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,qCAAqC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC7G;AAED,IAAA,aAAa,CAAC,EAAS,EAAA;AACrB,QAAA,IAAI,OAAO,GAAG;AACZ,YAAA,WAAW,EAAE,EAAE;SAChB,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,sCAAsC,GAAC,EAAE,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;KAChH;IACD,cAAc,GAAA;QACZ,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,EAAE,WAAW,CAAC,CAAC;KAClG;AAED,IAAA,qBAAqB,CAAC,OAAY,EAAA;QAChC,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,uCAAuC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC/G;IAED,mBAAmB,GAAA;QACjB,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,yCAAyC,EAAE,WAAW,CAAC,CAAC;KACvG;IAED,cAAc,CAAC,SAAkB,EAAE,QAAiB,EAAA;;;;AAIlD,QAAA,MAAM,OAAO,GAAI,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;AACnH,QAAA,MAAM,WAAW,GAAE,EAAC,OAAO,EAAC,CAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,mCAAmC,EAAE,WAAW,CAAC,CAAC;KACjG;AACD,IAAA,mBAAmB,CAAC,EAAmB,EAAA;AACrC,QAAA,IAAI,OAAO,GAAG;AACZ,YAAA,QAAQ,EAAE,EAAE;SACb,CAAA;QACD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,GAAC,EAAE,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;KAC9G;AAED,IAAA,WAAW,CAAC,OAAY,EAAA;AACtB,QAAA,IAAI,WAAW,GAAG;YAChB,OAAO,EAAE,IAAI,WAAW,CAAC;gBACvB,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;aAC1D,CAAC;SACH,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,mCAAmC,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;KAC1G;AAED,IAAA,WAAW,CAAC,EAAS,EAAA;AACnB,QAAA,IAAI,OAAO,GAAG;AACZ,YAAA,WAAW,EAAE,EAAE;SAChB,CAAA;AACD,QAAA,IAAI,WAAW,GAAG;YAChB,OAAO,EAAE,IAAI,WAAW,CAAC;gBACvB,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;aAC1D,CAAC;SACH,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAK,WAAW,CAAC,MAAM,GAAG,oCAAoC,GAAC,EAAE,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;KAC9G;;;;;;;;;AAWD,IAAA,qBAAqB,CAAC,GAAO,EAAA;AAC3B,QAAA,IAAI,WAAW,GAAG;YAChB,OAAO,EAAE,IAAI,WAAW,CAAC;gBACvB,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;aAC1D,CAAC;SACH,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,yCAAyC,GAAG,GAAG,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;KACjH;IACD,WAAW,CAAC,SAAiB,EAAE,OAAe,EAAA;AAC5C,QAAA,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3H,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;SACjD,CAAC;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AACvD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,WAAW,CAAC,MAAM,GAAG,yCAAyC,GAAG,SAAS,EAAE,WAAW,CAAC,CAAC;KACnH;IAED,sBAAsB,CAAC,aAAqB,EAAE,YAAoB,EAAA;AAChE,QAAA,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;SAC5H,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAK,GAAG,WAAW,CAAC,MAAM,CAAA,wCAAA,EAA2C,aAAa,CAAI,CAAA,EAAA,YAAY,EAAE,EAAC,WAAW,CAAC,CAAC;KACvI;AACD,IAAA,OAAO,CAAC,IAAU,EAAA;;AAEhB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;AAC7B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACzB,YAAA,MAAM,EAAE;AACN,gBAAA,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY;AAC3C,gBAAA,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,cAAc;AACvD,aAAA;YACD,cAAc,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;AACnD,SAAA,CAAC,CAAA;KACH;;2GAvOU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,aAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCbY,0BAA0B,CAAA;AAHvC,IAAA,WAAA,GAAA;AAMU,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAO,CAAC;AA6C3C,KAAA;IA3CC,OAAO,GAAA;;AAEL,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,CAAG,EAAA,WAAW,CAAC,YAAY,CAAe,aAAA,CAAA,CAAC,CAAC;AAExE,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAK;AACxB,YAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;;AAGnC,YAAA,MAAM,WAAW,GAAG,EAAC,cAAc,EAAC;AAClC,oBAAA,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC;AACzC,iBAAA,EAAC,CAAA;;;;;YAKF,WAAW,CAAC,MAAK;AACf,gBAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;aAChD,EAAC,IAAI,CAAC,CAAA;AACT,SAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,KAAI;;YAE9B,IAAI;gBACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,aAAA;AAAC,YAAA,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5C,aAAA;AACH,SAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,KAAI;AAC5B,YAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;AACzC,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAK;AACzB,YAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACvC,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;AACxC,SAAC,CAAC;KACH;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;KACzC;;wHA/CU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA,CAAA;4FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCuBY,qBAAqB,CAAA;;;;;;;;;AA+DhC,IAAA,WAAA,CAAoB,gBAAkC,EAAU,GAAsB,EAAU,aAA4B,EAAA;QAAxG,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAAU,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QA3DnH,IAAoB,CAAA,oBAAA,GAAQ,EAAE,CAAC;AAE9B,QAAA,IAAA,CAAA,YAAY,GAAuB,IAAI,YAAY,EAAQ,CAAC;AAC5D,QAAA,IAAA,CAAA,oBAAoB,GAAsB,IAAI,YAAY,EAAO,CAAC;AAElE,QAAA,IAAA,CAAA,aAAa,GAA0B,IAAI,YAAY,EAAW,CAAC;QAG7E,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;QACnC,IAAK,CAAA,KAAA,GAAW,OAAO,CAAC;QAExB,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;QAC5B,IAAS,CAAA,SAAA,GAAG,MAAM,CAAC;QACnB,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;QACvB,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;QACxB,IAAiB,CAAA,iBAAA,GAAY,IAAI,CAAC;QAClC,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;QAC9B,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;;QAGlB,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;QAC9B,IAAc,CAAA,cAAA,GAAY,IAAI,CAAC;;QAE/B,IAAe,CAAA,eAAA,GAAY,KAAK,CAAC;;AAEvB,QAAA,IAAA,CAAA,qBAAqB,GAAuB,IAAI,YAAY,EAAQ,CAAC;QAI/E,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;QAC7B,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAE1B,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,CAAC;QAChB,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;QAE5B,IAAU,CAAA,UAAA,GAAW,SAAS,CAAC;QAG/B,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;QACnC,IAAsB,CAAA,sBAAA,GAAY,KAAK,CAAC;QACxC,IAAoB,CAAA,oBAAA,GAAY,KAAK,CAAC;QAEtC,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;QAC9B,IAAQ,CAAA,QAAA,GAAU,EAAE,CAAC;QACrB,IAAe,CAAA,eAAA,GAAU,EAAE,CAAC;QAG5B,IAAa,CAAA,aAAA,GAAY,KAAK,CAAC;QAE/B,IAAyB,CAAA,yBAAA,GAAQ,EAAE,CAAC;QACpC,IAAoB,CAAA,oBAAA,GAAY,KAAK,CAAC;QA0qCtC,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAhqC3B,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;KACvC;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;;QAEhD,IAAI;YACF,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;gBACzD,IAAI,CAAC,QAAQ,EAAE;oBAAE,OAAO;AAAE,iBAAA;AAC1B,gBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,QAAQ,CAAC,CAAC;;;AAG5D,gBAAA,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAC7D,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;;AAE5B,gBAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,KAAK,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC5H,IAAI,CAAC,MAAM,EAAE;AACX,oBAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC7E,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC3D,iBAAA;AACD,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;;AAE3B,aAAC,CAAC,CAAC;AACJ,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,CAAC,CAAC,CAAC;AAC1D,SAAA;KACF;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YACvB,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE;AACpD,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClE,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC1B,aAAA;AAAM,iBAAA,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE;AACjG,gBAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAA;;gBAElE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;AAClD,aAAA;AACF,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,sBAAsB,CAAC,EAAE;YACnC,IAAI;AACF,gBAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;;oBAEpC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC9D,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,GAAQ,KAAI;AACnD,wBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;4BACnC,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;4BAC7E,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AAC9B,gCAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,oCAAA,GAAG,GAAG;AACN,oCAAA,GAAG,EAAE,wBAAwB;AAC7B,oCAAA,cAAc,EAAE,GAAG,CAAC,SAAS,IAAI,eAAe;oCAChD,MAAM,EAAE,GAAG,CAAC,MAAM;AAClB,oCAAA,MAAM,EAAE,KAAK;oCACb,YAAY,EAAE,GAAG,CAAC,YAAY;AAC9B,oCAAA,YAAY,EAAE,GAAG,CAAC,SAAS,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI;AAC3E,oCAAA,IAAI,EAAE,IAAI;AACV,oCAAA,KAAK,EAAE,GAAG,CAAC,SAAS,IAAI,eAAe,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE;oCAC7D,aAAa,EAAE,GAAG,CAAC,EAAE;oCACrB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM;AAC9C,oCAAA,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACvE,iCAAA,CAAC,CAAC;AACJ,6BAAA;iCAAM,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE;AACpC,gCAAA,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE;oCAC3D,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oCACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAClF,oCAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE;wCAC/D,MAAM,IAAI,CAAC,yBAAyB,CAAC;AACnC,4CAAA,aAAa,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;4CAChD,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,4CAAA,IAAI,EAAE,KAAK;AACX,4CAAA,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY;AAC3C,yCAAA,CAAC,CAAC;wCACH,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;AACxC,qCAAA;yCAAM,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE;AACrE,wCAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;AACvF,wCAAA,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;4CACjC,MAAM,IAAI,CAAC,yBAAyB,CAAC;AACnC,gDAAA,aAAa,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,aAAa,CAAC;gDACxE,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,gDAAA,IAAI,EAAE,KAAK;AACX,gDAAA,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY;AAC3C,6CAAA,CAAC,CAAC;;;;;;;;AAQH,4CAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AACnC,yCAAA;AACF,qCAAA;AACF,iCAAA;AAAM,qCAAA;oCACL,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACvC,iCAAA;AACF,6BAAA;AAAM,iCAAA,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;AACtB,gCAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG;AAC5B,oCAAA,GAAG,GAAG;AACN,oCAAA,GAAG,EAAE,wBAAwB;AAC7B,oCAAA,cAAc,EAAE,GAAG,CAAC,SAAS,IAAI,eAAe;oCAChD,MAAM,EAAE,GAAG,CAAC,MAAM;AAClB,oCAAA,MAAM,EAAE,KAAK;oCACb,YAAY,EAAE,GAAG,CAAC,YAAY;AAC9B,oCAAA,YAAY,EAAE,GAAG,CAAC,SAAS,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI;AAC3E,oCAAA,IAAI,EAAE,IAAI;AACV,oCAAA,KAAK,EAAE,GAAG,CAAC,SAAS,IAAI,eAAe,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE;oCAC7D,aAAa,EAAE,GAAG,CAAC,EAAE;oCACrB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM;AAC9C,oCAAA,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;iCACvE,CAAC;AACH,6BAAA;AACD,4BAAA,IAAG,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC;gCACpE,UAAU,CAAC,MAAK;AACd,oCAAA,IAAG,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;wCACvE,IAAI,CAAC,yBAAyB,CAAC;4CAC7B,aAAa,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;4CACtD,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,4CAAA,IAAI,EAAE,KAAK;4CACX,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,YAAY;AACjD,yCAAA,CAAC,CAAC;AACJ,qCAAA;iCACA,EAAE,IAAI,CAAC,CAAC;AACV,6BAAA;AACF,yBAAA;AAAM,6BAAA;AACL,4BAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gCAAA,GAAG,GAAG;AACN,gCAAA,GAAG,EAAE,wBAAwB;AAC7B,gCAAA,cAAc,EAAE,GAAG,CAAC,SAAS,IAAI,eAAe;gCAChD,MAAM,EAAE,GAAG,CAAC,MAAM;AAClB,gCAAA,MAAM,EAAE,KAAK;gCACb,YAAY,EAAE,GAAG,CAAC,YAAY;AAC9B,gCAAA,YAAY,EAAE,GAAG,CAAC,SAAS,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI;AAC3E,gCAAA,IAAI,EAAE,IAAI;AACV,gCAAA,KAAK,EAAE,GAAG,CAAC,SAAS,IAAI,eAAe,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE;gCAC7D,aAAa,EAAE,GAAG,CAAC,EAAE;gCACrB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM;AAC9C,gCAAA,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACvE,6BAAA,CAAC,CAAC;AACH,4BAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;4BACrB,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,yBAAA;AACH,qBAAC,CAAC,CAAA;oBACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/F,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACtD,iBAAA;AAAM,qBAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;AAC5C,oBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AAClC,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC7B,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,oBAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,oBAAA,IAAI,CAAC,WAAW,GAAE,EAAE,CAAA;AACpB,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAE9B,oBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;oBAClC,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,oBAAA,IAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAC;AACvC,wBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;AAC3C,qBAAA;AACD,oBAAA,IAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAC;AACrB,wBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACxB,qBAAA;AACF,iBAAA;AACF,aAAA;AAAC,YAAA,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,aAAA;AACF,SAAA;KACF;AAED,IAAA,SAAS,CAAC,GAAQ,EAAA;QAChB,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAC5J,QAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,IAAI,eAAe,EAAE;AACvE,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA,IAAI,GAAG,CAAC,SAAS,IAAI,eAAe,EAAE;YAC3C,OAAO,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACxD,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;IAED,eAAe,GAAA;;;;;KAMd;IAED,eAAe,GAAA;QACb,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,CACjD,CAAC,GAAQ,KAAI;AACX,YAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;;AAGlC,YAAA,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE;AACxB,gBAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/C,aAAA;AAAM,iBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;AACrB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACpB,aAAA;YACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC3B,SAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACrB,SAAC,CACF,CAAC;KACH;IAED,MAAM,SAAS,CAAC,QAAa,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClC,IAAI;AACF,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,YAAA,MAAM,OAAO,GAAG;gBACd,SAAS,EAAE,WAAW,CAAC,SAAS;AAChC,gBAAA,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACtC,EAAE,EAAE,QAAQ,CAAC,KAAK;gBAClB,UAAU,EAAE,QAAQ,CAAC,IAAI;AACzB,gBAAA,KAAK,EAAE,OAAO;aACf,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,YAAY,GAAG,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;AAC3C,YAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE;AAC1B,gBAAA,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1E,gBAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAA;AACnC,gBAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC7B,MAAM,SAAS,GAAQ,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;gBACnE,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACtD,gBAAA,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBAEtC,UAAU,CAAC,YAAW;oBACpB,IAAI;AACF,wBAAA,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC;4BAC5C,IAAI,EAAE,QAAQ,EAAE,IAAI;AACpB,4BAAA,KAAK,EAAE,UAAU;4BACjB,iBAAiB,EAAE,QAAQ,EAAE,KAAK;4BAClC,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,yBAAA,CAAC,CAAC;AACH,wBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;;AAEzK,wBAAA,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;;;;;;;;wBAQ1B,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACnE,qBAAA;AAAC,oBAAA,OAAO,CAAC,EAAE;AACV,wBAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAC;AACvD,qBAAA;iBACF,EAAE,IAAI,CAAC,CAAA;;AAET,aAAA;AAAM,iBAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE;AACjC,gBAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AACvD,gBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACpB,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,aAAA;AAEF,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACxB,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACpB,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,SAAA;KACF;AAED,IAAA,UAAU,CAAC,CAAM,EAAA;AACf,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACnC,IAAI,CAAC,yBAAyB,CAAC;AAC7B,YAAA,aAAa,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;YAChC,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;AACb,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC,CAAA;AACF,QAAA,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;AAED,IAAA,MAAM,SAAS,CAAC,CAAM,EAAE,YAAsB,EAAA;AAC5C,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;AACnC,QAAA,IAAI,aAAa,GAAG,YAAY,GAAG,KAAK,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,CAAC;AAC9E,QAAA,IAAI,GAAG,GAAQ,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAClF,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,OAAO,IAAI,0BAA0B,EAAE;;;AAGpE,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC1B,SAAA;AACD,QAAA,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;KACpF;IAEO,MAAM,YAAY,CAAC,OAAY,EAAA;AACrC,QAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;KACtE;IAED,MAAM,yBAAyB,CAAC,OAAY,EAAA;AAC1C,QAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;KACzE;IAEO,MAAM,oBAAoB,CAAC,OAAY,EAAA;AAC7C,QAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;KACxE;IAEO,MAAM,2BAA2B,CAAC,aAAkB,EAAA;AAC1D,QAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE,CAAC;KAC3F;IAEO,MAAM,iBAAiB,CAAC,OAAY,EAAA;AAC1C,QAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;KAC3E;AAEO,IAAA,MAAM,qBAAqB,CAAC,aAAkB,EAAE,YAAiB,EAAA;AACvE,QAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;KACnG;IAEO,MAAM,aAAa,CAAC,QAAa,EAAA;QACvC,OAAO;AACL,YAAA,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACxB,YAAA,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,UAAU;SACzC,CAAC;KACH;IAEO,MAAM,oBAAoB,CAAC,UAAkB,EAAA;AACnD,QAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;KAC/F;AAEO,IAAA,MAAM,eAAe,CAAC,KAAU,EAAE,QAAa,EAAA;AACrD,QAAA,MAAM,OAAO,GAAQ;AACnB,YAAA,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AAClC,YAAA,eAAe,EAAE,IAAI;SACtB,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACpC,YAAA,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,EAAE,EAAE,QAAQ,CAAC,KAAK;gBAClB,GAAG,EAAE,WAAW,CAAC,GAAG;gBACpB,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,GAAG,EAAE,QAAQ,CAAC,MAAM;AACrB,aAAA;YACD,cAAc,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;AACnD,SAAA,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;;QAE1C,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAEO,mBAAmB,GAAA;QAEzB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAI;AAC/B,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;AACnB,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,KAAI;AACpC,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;AACnB,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC,IAAS,KAAI;AACxC,YAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;;AAEhC,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,MAAK;AAC9B,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAK;AAC3B,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACpB,IAAI,CAAC,OAAO,EAAE,CAAC;AACjB,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAK;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;;YAE/B,IAAI;AACF,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AACzC,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;AACtE,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAM,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,aAAa,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACzI,oBAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;wBACd,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC;wBAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9C,qBAAA;AACF,iBAAA;AACD,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC1B,aAAA;AAAC,YAAA,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;AAChD,aAAA;;;;;;;;;;AAUH,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,CAAC,OAAY,KAAI;AAClD,SAAC,CAAC,CAAC;KACJ;IAEO,UAAU,GAAA;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,MAAK;AACjC,YAAA,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B,EAAE,IAAI,CAAC,CAAC;KACV;IAEO,SAAS,GAAA;AACf,QAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;KACtB;AAEO,IAAA,UAAU,CAAC,YAAoB,EAAA;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;AAClC,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;KACpD;AAEO,IAAA,GAAG,CAAC,KAAa,EAAA;AACvB,QAAA,OAAO,KAAK,GAAG,EAAE,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,GAAG,CAAG,EAAA,KAAK,EAAE,CAAC;KAC9C;AACO,IAAA,WAAW,CAAC,KAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;KAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyDD,MAAM,OAAO,CAAC,YAAsB,EAAA;AAClC,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;;QAEhC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAElD,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;;;;;;AAQ1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,QAAA,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC1B,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC/C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AACpH,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;gBACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,IAAI,CAAC,yBAAyB,CAAC;AACnC,oBAAA,aAAa,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;oBAChD,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY;AAC7C,iBAAA,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,gBAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC1B,aAAA;AACF,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+CF;IAGD,MAAM,UAAU,CAAC,YAAsB,EAAA;QACrC,MAAM,IAAI,CAAC,iBAAiB,CAAC;AAC3B,YAAA,aAAa,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;YAChD,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM;AACnB,SAAA,CAAC,CAAA;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;;;QAGzB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;;;KAIzC;IACD,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AACD,IAAA,mBAAmB,CAAC,QAAkB,EAAA;AACpC,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,YAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC5D,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACpC,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACjD,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KACF;IAED,oBAAoB,GAAA;;AAElB,QAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC3D,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;KACxG;IAED,MAAM,GAAG,CAAC,IAAU,EAAA;;QAElB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,YAAY,CAAC;AACvE,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE;AACrE,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE;AAClC,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;oBACnC,IAAI,GAAG,CAAC,YAAY,EAAE;AACpB,wBAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;wBAClB,IAAI,CAAC,yBAAyB,CAAC;AAC7B,4BAAA,aAAa,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC;4BAClC,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,4BAAA,IAAI,EAAE,IAAI;4BACV,UAAU,EAAE,GAAG,CAAC,YAAY;AAC7B,yBAAA,CAAC,CAAC;AACJ,qBAAA;AACH,iBAAC,CAAC,CAAA;AACH,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;gBAClC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACnH,gBAAA,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;;AAEhB,iBAAA;gBACD,MAAM,IAAI,CAAC,yBAAyB,CAAC;oBACnC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;oBAC5G,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY;AAC3C,iBAAA,CAAC,CAAC;AACH,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACrB,aAAA;AACF,SAAA;;AAED,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;;YAEnC,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;AAC7H,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAA;AACxC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,aAAa,CAAC,CAAC;AACrE,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC1B,aAAC,CAAC,CAAA;AACH,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACzB,SAAA;;;;;;;;;KAUF;AAED,IAAA,kBAAkB,CAAC,IAAU,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;;;;KAI/B;IACD,MAAM,WAAW,CAAC,OAAY,EAAA;AAC5B,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;;;;;;;;QASnC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;AACtD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC;AACpF,QAAA,IAAI,CAAC,WAAW,IAAI,WAAW,EAAE;AAC/B,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACnD,OAAO;AACR,SAAA;QAED,IAAI;YACF,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,IAAI,GAAQ,MAAM,IAAI,CAAC,oBAAoB,CAAC;oBAC9C,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,MAAM;AAC1D,oBAAA,KAAK,EAAE,UAAU;AACjB,oBAAA,iBAAiB,EAAE,WAAW;oBAC9B,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,iBAAA,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,GAAG;;AAEd,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,UAAU,EAAE,WAAW;AACvB,oBAAA,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,CAAG,EAAA,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,QAAQ,CAAA,CAAE,IAAI,WAAW;AAClF,oBAAA,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,wBAAwB;oBAC7C,aAAa,EAAE,IAAI,EAAE,aAAa;AAClC,oBAAA,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM;AACnC,oBAAA,cAAc,EAAE,KAAK;AACrB,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,YAAY,EAAE,IAAI;iBACnB,CAAC;AACF,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAA;AAC/C,gBAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AACpC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;;AAEjC,gBAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC;AAC7D,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAChC,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAM,KAAI;oBAC5C,IAAI,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AAClC,wBAAA,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;wBAChB,MAAM,IAAI,CAAC,yBAAyB,CAAC;AACnC,4BAAA,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC;4BACjC,YAAY,EAAE,IAAI,CAAC,YAAY;4BAC/B,IAAI,EAAE,CAAC,EAAE,MAAM;4BACf,UAAU,EAAE,CAAC,EAAE,YAAY;AAC5B,yBAAA,CAAC,CAAC;AACJ,qBAAA;AACH,iBAAC,CAAC,CAAC;;;AAGH,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;;;;;AAKzB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;;AAE9B,gBAAA,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;qBAC7E,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,GAAG,CAAC,CAAC;;;;AAMb,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,oBAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACvD,oBAAA,IAAI,CAAC,OAAO,EAAE,8CAA8C,EAAE,OAAO,CAAC,CAAC;AACvE,oBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;oBAC/B,OAAO;AACR,iBAAA;;AAGD,gBAAA,IAAI,IAAI,GAAQ,MAAM,IAAI,CAAC,oBAAoB,CAAC;oBAC9C,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,MAAM;AAC1D,oBAAA,KAAK,EAAE,UAAU;AACjB,oBAAA,iBAAiB,EAAE,WAAW;oBAC9B,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,iBAAA,CAAC,CAAC;;;;;gBAMH,IAAI,CAAC,QAAQ,GAAG;;AAEd,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,UAAU,EAAE,WAAW;AACvB,oBAAA,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,CAAG,EAAA,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,QAAQ,CAAA,CAAE,IAAI,WAAW;AAClF,oBAAA,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,wBAAwB;oBAC7C,aAAa,EAAE,IAAI,EAAE,aAAa;AAClC,oBAAA,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM;AACnC,oBAAA,cAAc,EAAE,KAAK;AACrB,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,YAAY,EAAE,KAAK;iBACpB,CAAC;AACF,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;AAC3C,gBAAA,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC1B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;;AAEjC,gBAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC;AAC7D,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAChC,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;;YAE/B,IAAI,IAAI,CAAC,QAAQ,EAAE;;;;;AAKlB,aAAA;AACD,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACzB,SAAA;KACF;AAED,IAAA,kBAAkB,CAAC,aAAqB,EAAA;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;AAC7E,YAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,YAAY,CAAC;AAC7C,SAAC,CAAC,CAAA;KACH;;;;;;;;;;;;;;;;;;;;;;;AA6BD,IAAA,oBAAoB,CAAC,YAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,YAAY;YAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;KAgC3B;AAED,IAAA,MAAM,SAAS,CAAC,QAAa,EAAC,gBAA0B,EAAA;;QAEtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC;AAC1D,QAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;AAChD,QAAA,IAAG,IAAI,CAAC,WAAW,EAAE,YAAY,EAAC;YAChC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAM,KAAI;gBAC5C,IAAI,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AACjC,oBAAA,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;oBAChB,MAAM,IAAI,CAAC,yBAAyB,CAAC;AACnC,wBAAA,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC;wBACjC,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,IAAI,EAAE,CAAC,EAAE,MAAM;wBACf,UAAU,EAAE,CAAC,EAAE,YAAY;AAC5B,qBAAA,CAAC,CAAC;AACJ,iBAAA;qBAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC,EAAE,aAAa,KAAK,QAAQ,EAAE,aAAa,EAAE;AAC3E,oBAAA,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;oBACjB,MAAM,IAAI,CAAC,yBAAyB,CAAC;AACnC,wBAAA,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC;wBACjC,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,IAAI,EAAE,CAAC,EAAE,MAAM;wBACf,UAAU,EAAE,CAAC,EAAE,YAAY;AAC5B,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACtB,iBAAA;AACH,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AAClC,SAAA;AAAM,aAAA,IAAG,gBAAgB,EAAE;AAC1B,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAClC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAM,KAAI;gBAC5C,IAAI,CAAC,EAAE,YAAY,EAAE;AACnB,oBAAA,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;oBACjB,MAAM,IAAI,CAAC,yBAAyB,CAAC;AACnC,wBAAA,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC;wBACjC,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,IAAI,EAAE,CAAC,EAAE,MAAM;wBACf,UAAU,EAAE,CAAC,EAAE,YAAY;AAC5B,qBAAA,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA;AACL,oBAAA,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;oBAChB,MAAM,IAAI,CAAC,yBAAyB,CAAC;AACnC,wBAAA,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC;wBACjC,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,IAAI,EAAE,CAAC,EAAE,MAAM;wBACf,UAAU,EAAE,CAAC,EAAE,YAAY;AAC5B,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAM,KAAI;gBAC5C,IAAI,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AAClC,oBAAA,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;oBAChB,MAAM,IAAI,CAAC,yBAAyB,CAAC;AACnC,wBAAA,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC;wBACjC,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,IAAI,EAAE,CAAC,EAAE,MAAM;wBACf,UAAU,EAAE,CAAC,EAAE,YAAY;AAC5B,qBAAA,CAAC,CAAC;AACJ,iBAAA;qBAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC,EAAE,aAAa,KAAK,QAAQ,EAAE,aAAa,EAAE;AAC3E,oBAAA,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;oBACjB,MAAM,IAAI,CAAC,yBAAyB,CAAC;AACnC,wBAAA,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC;wBACjC,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,IAAI,EAAE,CAAC,EAAE,MAAM;wBACf,UAAU,EAAE,CAAC,EAAE,YAAY;AAC5B,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACtB,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;;;;;;;;;;;AAWC,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;QA+BjC,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;AAED,IAAA,MAAM,UAAU,GAAA;;AAEd,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAM,KAAI;gBAC5C,IAAI,CAAC,EAAE,aAAa,EAAE;AACpB,oBAAA,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;oBACjB,MAAM,IAAI,CAAC,yBAAyB,CAAC;AACnC,wBAAA,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC;wBACjC,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,UAAU,EAAE,IAAI;AACjB,qBAAA,CAAC,CAAC;AACH,oBAAA,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC;;;;;;;AAOvB,iBAAA;AACD,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AACpC,aAAC,CAAC,CAAC;;;;;;;;AAQH,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC1B,SAAA;KACF;IAED,WAAW,GAAA;;;;;;;KAOV;AAGD,IAAA,eAAe,CAAC,QAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC;;QAG5B,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE;AACzD,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC9C,OAAO,CAAC,EACN,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG;AACpC,gBAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,GAAG;AAChC,gBAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG;AACpC,gBAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG;AACxC,gBAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG;AAC1C,gBAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG;AACxC,gBAAA,IAAI,CAAC,GAAG;AACR,gBAAA,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,SAAS,CACf,CAAC;AACH,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CD,IAAA,oBAAoB,CAAC,YAAiB,EAAA;AAEpC,QAAA,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,IAAI,YAAY,CAAC,MAAM,EAAE;YACvB,YAAY,CAAC,MAAM,EAAE,CAAC;AACvB,SAAA;QACD,IAAI,YAAY,CAAC,UAAU;YAAE,YAAY,CAAC,UAAU,EAAE,CAAC;;AAEvD,QAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,KAAK,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/I,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;;AAE1D,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;AACxE,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC9B,SAAA;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;AACD,IAAA,YAAY,CAAC,GAAQ,EAAA;QACnB,IAAI;AACF,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;gBACnE,IAAI,GAAG,IAAI,GAAG,EAAE;AACd,oBAAA,IAAI,KAAK,CAAC,CAAA,sCAAA,CAAwC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5D,iBAAA;qBAAM,IAAI,GAAG,IAAI,GAAG,EAAE;AACrB,oBAAA,IAAI,KAAK,CAAC,CAAA,sCAAA,CAAwC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5D,iBAAA;AAAM,qBAAA;oBACL,IAAI,KAAK,CAAC,CAAgC,6BAAA,EAAA,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9D,iBAAA;gBAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC1B,aAAA;AACD,YAAA,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACtB,YAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;AAC5B,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,SAAA;KACF;AACD,IAAA,gBAAgB,CAAC,EAAO,EAAA;QACtB,IAAI;AACF,YAAA,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,SAAA;KACF;AACD,IAAA,iBAAiB,CAAC,IAAS,EAAA;;QAEzB,IAAI,IAAI,CAAC,IAAI,EAAE;;;YAGb,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;;AAE/B,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAE7B,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AAC1D,YAAA,IAAI,CAAC,kBAAkB,GAAG,cAAc,CAAC,UAAU,CAAC;YAEpD,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,aAAA;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC1B,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;;AAE7B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE;AAC/C,gBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACpB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC1B,aAAA;AACF,SAAA;KACF;IACD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAC9C;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;IACD,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;IACD,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;KACF;IACD,cAAc,GAAA;AACZ,QAAA,IAAI,GAAG,CAAC;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;QAC7C,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;;;;AAK/F,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAG;AAC/D,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB,EAAE,KAAK,IAAG;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACJ;IACD,aAAa,GAAA;;;;AAIX,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AACtC,SAAA;KACF;IACD,cAAc,GAAA;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;;;;AAMvE,QAAA,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,SAAS,CAClE,QAAQ,IAAG;YACT,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,SAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;;AAEnD,SAAC,CACF,CAAC;KACH;IACD,eAAe,GAAA;AACb,QAAA,IAAI,GAAG,CAAC;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;AAC7C,QAAA,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;;;;AAKjE,QAAA,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAG;AAC/E,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB,EAAE,KAAK,IAAG;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACJ;AACD,IAAA,iBAAiB,CAAC,SAAiB,EAAA;QACjC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAEzC,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACtC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;AAE1B,QAAA,MAAM,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;AAClD,QAAA,MAAM,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;AAElD,QAAA,OAAO,CAAG,EAAA,EAAE,CAAI,CAAA,EAAA,EAAE,EAAE,CAAC;KACtB;IACD,WAAW,GAAA;QACT,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAK;YACrD,IAAI,CAAC,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;KACJ;IACD,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACpC,SAAA;KACF;IACD,gBAAgB,GAAA;AACd,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;AAClD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtC,QAAA,OAAO,GAAG,OAAO,CAAA,CAAA,EAAI,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAG,EAAA,OAAO,EAAE,CAAC;KAC1D;AACD,IAAA,cAAc,CAAC,UAAkB,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC;AACtB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC;QAC1B,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,YAAW;YACxC,WAAW,IAAI,YAAY,CAAC;YAC5B,IAAI;AACF,gBAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,SAAS,EAAwB,CAAC;AAC/G,gBAAA,IAAI,cAAc,IAAI,cAAc,CAAC,WAAW,EAAE;oBAChD,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC;AACxD,oBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,aAAa,EAAE;wBACrC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC;wBAClD,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;4BACxC,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,yBAAA;wBACD,aAAa,CAAC,UAAU,CAAC,CAAC;AAC3B,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE;wBAC1C,aAAa,CAAC,UAAU,CAAC,CAAC;AAC1B,wBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;wBACpB,IAAI,CAAC,OAAO,EAAE,CAAC;wBACf,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;;AAEzC,qBAAA;AACF,iBAAA;AACF,aAAA;AAAC,YAAA,OAAO,KAAK,EAAE;gBACd,aAAa,CAAC,UAAU,CAAC,CAAC;AAC3B,aAAA;YACD,IAAI,WAAW,IAAI,OAAO,EAAE;;gBAE1B,aAAa,CAAC,UAAU,CAAC,CAAC;AAC3B,aAAA;SACF,EAAE,YAAY,CAAC,CAAC;KAClB;AAED,IAAA,kBAAkB,CAAC,EAAO,EAAA;AACxB,QAAA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,SAAS,CACpD,QAAQ,IAAG;AACT,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;SACtB,EAAE,KAAK,IAAG;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACN;AACD,IAAA,oBAAoB,CAAC,IAAS,EAAA;AAC5B,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA;AAC5C,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;KAC3D;AACD,IAAA,wBAAwB,CAAC,IAAS,EAAA;AAChC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;KAClC;IAED,eAAe,GAAA;QACb,IAAI,QAAQ,GAAU,EAAE,CAAC;QACzB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAM,KAAI;YACtC,IAAG,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,YAAY,EAAC;AAC/B,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,aAAA;AACD,YAAA,IAAG,CAAC,EAAE,YAAY,IAAI,CAAC,YAAY,EAAC;gBAClC,YAAY,GAAG,IAAI,CAAC;AACpB,gBAAA,CAAC,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;AACjC,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,aAAa,CAAC,IAAS,EAAA;AACrB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAC3B;IACD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC;QAC3B,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AACtC,SAAA;KACF;;mHA75CU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,+aC7BlC,q8iCA+kBM,EAAA,MAAA,EAAA,CAAA,yoZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDljBO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,q8iCAAA,EAAA,MAAA,EAAA,CAAA,yoZAAA,CAAA,EAAA,CAAA;6JAKpB,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;gBAEG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAoBG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;;;MEtCI,gBAAgB,CAAA;IAQ3B,IAAa,eAAe,CAAC,KAAc,EAAA;AACzC,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE;;YAEV,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACzB,SAAA;KACF;AAGD,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAC9B;AA8DD,IAAA,WAAA,CACU,aAA4B,EAC5B,UAA4B,EAC5B,MAAiB,EACjB,SAA2B,EAC3B,gBAAkC,EAClC,GAAsB,EACtB,MAAc,EACd,0BAAsD,EAAA;QAPtD,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAC5B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAkB;QAC5B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QACjB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAC3B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B,CAA4B;QAvFxD,IAAgB,CAAA,gBAAA,GAAY,IAAI,CAAC;;QAEhC,IAAkB,CAAA,kBAAA,GAAY,IAAI,CAAC;AAgBlC,QAAA,IAAA,CAAA,iBAAiB,GAAuB,IAAI,YAAY,EAAQ,CAAC;AACjE,QAAA,IAAA,CAAA,aAAa,GAAsB,IAAI,YAAY,EAAO,CAAC;AAC3D,QAAA,IAAA,CAAA,YAAY,GAAuB,IAAI,YAAY,EAAQ,CAAC;AAC5D,QAAA,IAAA,CAAA,aAAa,GAA0B,IAAI,YAAY,EAAW,CAAC;AACnE,QAAA,IAAA,CAAA,yBAAyB,GAAwB,IAAI,YAAY,EAAS,CAAC;AAC3E,QAAA,IAAA,CAAA,qBAAqB,GAAuB,IAAI,YAAY,EAAQ,CAAC;AAIrE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;QAGpD,IAAgB,CAAA,gBAAA,GAAY,KAAK,CAAC;QAClC,IAAS,CAAA,SAAA,GAAG,MAAM,CAAC;QAEnB,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;QACnC,IAAY,CAAA,YAAA,GAAW,EAAE,CAAC;QAC1B,IAAW,CAAA,WAAA,GAAU,EAAE,CAAC;QACxB,IAAmB,CAAA,mBAAA,GAAU,EAAE,CAAC;QAChC,IAAY,CAAA,YAAA,GAAU,EAAE,CAAC;QAEzB,IAAgB,CAAA,gBAAA,GAAY,IAAI,CAAC;QAEjC,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;QACnC,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;QAC9B,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QACtB,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;AACpB,QAAA,IAAA,CAAA,eAAe,GAAG;AAChB,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,UAAU,EAAE,EAAE;SACf,CAAA;AACD,QAAA,IAAA,CAAA,QAAQ,GAAQ;AACd,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,GAAG,EAAE,wBAAwB;AAC7B,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,MAAM,EAAC,EAAE;SACV,CAAC;QACF,IAAU,CAAA,UAAA,GAA6D,IAAI,CAAC;AAE5E,QAAA,IAAA,CAAA,SAAS,GAAG;AACV,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,IAAI,EAAE,KAAK;SACZ,CAAA;QAGD,IAAkB,CAAA,kBAAA,GAAW,KAAK,CAAC;QACnC,IAAgB,CAAA,gBAAA,GAAQ,EAAE,CAAC;QAC3B,IAAiB,CAAA,iBAAA,GAAQ,EAAE,CAAC;AAEpB,QAAA,IAAA,CAAA,aAAa,GAAiB,IAAI,YAAY,EAAE,CAAC;QAEzD,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;QACnC,IAAe,CAAA,eAAA,GAAY,KAAK,CAAC;QAEzB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAspC9B,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;;AAzoC3B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACzB,SAAA;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;KAC7C;IACO,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC/C,OAAO;AACR,aAAA;AAED,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;;YAG1B,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1D,SAAA;KACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmHD,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;;;QAGvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,CAAC;QAG1C,IAAG;AACG,YAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,OAAM,gBAAqB,KAAI;;;;AAIlF,gBAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;AACzD,gBAAA,IAAG,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAC;;oBAEjC,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,YAAY,IAAI,EAAE,CAAC;;AAEzD,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;;;;;;AAMhC,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,oBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;AAC5B,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC/B,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CT,aAAC,CAAC,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;;YAErD,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,OAAW,KAAI;gBAClF,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;oBAC7B,IAAI,OAAO,CAAC,iBAAiB,EAAE;;AAE7B,wBAAA,IAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,EAAC;4BAEpC,IAAI,CAAC,gBAAgB,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AACjD,4BAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;4BAC5B,UAAU,CAAC,MAAK;AACd,gCAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;6BAC9B,EAAE,IAAI,CAAC,CAAC;4BACT,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;4BACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;4BAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;4BAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAClC,4BAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC,4BAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC3B,4BAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;;4BAEnC,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,yBAAA;AAAI,6BAAA;4BACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BAC1B,UAAU,CAAC,MAAK;AACd,gCAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;6BAC9B,EAAE,IAAI,CAAC,CAAC;AACT,4BAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC3B,4BAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;;AAE/B,4BAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC,4BAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;AACpC,yBAAA;AACF,qBAAA;AAAM,yBAAA;wBACL,IAAI,OAAO,CAAC,QAAQ,IAAI,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,cAAc,EAAE;4BACzE,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BAC1B,UAAU,CAAC,MAAK;AACd,gCAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;6BAC9B,EAAE,IAAI,CAAC,CAAC;AACT,4BAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC,4BAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;AAEpC,yBAAA;AAAM,6BAAA;4BACL,UAAU,CAAC,MAAK;AACd,gCAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;6BAC9B,EAAE,IAAI,CAAC,CAAC;4BACT,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;4BACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;4BAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AAChC,4BAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;4BACnC,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,yBAAA;AACF,qBAAA;AAEF,iBAAA;AACH,aAAC,CAAC,CAAA;;AAGF,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,gBAAqB,KAAI;;;;;;;;;AAS9E,gBAAA,IAAI,gBAAgB,EAAE;AACpB,oBAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACpD,wBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC/B,qBAAA;oBAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC7C,wBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAA;AACpC,wBAAA,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAC3C,qBAAA;AAAM,yBAAA;AACL,wBAAA,gBAAgB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;AACvC,wBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAClB,wBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,wBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;wBAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC1D,wBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAClB,wBAAA,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAC1C,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACnE,wBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,wBAAwB,CAAC;AAC/F,wBAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC;AACrC,qBAAA;AACD,oBAAA,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAK;AACjC,wBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;;;;;AAK/I,qBAAC,CAAC,CAAC;AAEH,oBAAA,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAK;AACnC,wBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;;;;;AAKjJ,qBAAC,CAAC,CAAC;AACJ,iBAAA;AACH,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,SAAA;AAAA,QAAA,OAAM,CAAC,EAAC;AACP,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACf,SAAA;KACF;AAGD,IAAA,kBAAkB,CAAC,gBAAqB,EAAA;;AAEtC,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACrF,QAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;AAC3B,QAAA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CACxE,QAAQ,IAAG;AACT,YAAA,gBAAgB,CAAC,UAAU,CAAC,GAAC,QAAQ,CAAA;YACrC,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,UAAU,EAAE,OAAO,KAAK,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpI,IAAG,CAAC,aAAa,EAAC;AAChB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC/C,aAAA;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B,EAAE,KAAK,IAAG;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,OAAwB,EAAA;AAClC,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAC1C,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACjB,YAAA,OAAO,GAAG,CAAC;SACZ,EAAE,EAAyB,CAAC,CAAC;KAC/B;IAED,eAAe,GAAA;QACb,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAG,OAAO,CAAC,UAAU,CAAC,EAAE;AACtB,YAAA,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;AACnE,YAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;AAChF,SAAA;QACD,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvD,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;aAC7C,EAAE,CAAC,CAAC,CAAC;YACN,IAAG,IAAI,CAAC,gBAAgB,EAAE;gBACxB,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACzB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAClD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;AACzC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAChD,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAClB,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC7B,oBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;AACzC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC/C,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACxE,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,wBAAwB,CAAC;AACpG,oBAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC;AACrC,iBAAA;gBACD,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAK;AACtC,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;;;;;AAKlJ,oBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AACrC,iBAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAK;AAC1C,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAClJ,oBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;;;;;AAKrC,iBAAC,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;QACD,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9C,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;YACjC,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,OAAO,CAAC,iBAAiB,EAAE;;AAE7B,oBAAA,IAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,EAAC;wBAEpC,IAAI,CAAC,gBAAgB,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AACjD,wBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;wBAC5B,UAAU,CAAC,MAAK;AACd,4BAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;yBAC9B,EAAE,IAAI,CAAC,CAAC;wBACT,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;wBACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;wBAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;wBAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAClC,wBAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC,wBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC3B,wBAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACjC,wBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;;wBAE7B,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,qBAAA;AAAI,yBAAA;wBACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC1B,UAAU,CAAC,MAAK;AACd,4BAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;yBAC9B,EAAE,IAAI,CAAC,CAAC;AACT,wBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC3B,wBAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACjC,wBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;;AAEzB,wBAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC,wBAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;AACpC,qBAAA;AACF,iBAAA;AAAM,qBAAA;oBACL,IAAI,OAAO,CAAC,QAAQ,IAAI,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,cAAc,EAAE;wBACzE,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC1B,UAAU,CAAC,MAAK;AACd,4BAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;yBAC9B,EAAE,IAAI,CAAC,CAAC;AACT,wBAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC,wBAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;AAEpC,qBAAA;AAAM,yBAAA;wBACL,UAAU,CAAC,MAAK;AACd,4BAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;yBAC9B,EAAE,IAAI,CAAC,CAAC;wBACT,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;wBACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;wBAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AAChC,wBAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;wBACnC,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,qBAAA;AACF,iBAAA;AAEF,aAAA;AACF,SAAA;KACA;IACO,mBAAmB,GAAA;QACzB,IAAI;YACF,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBACxC,OAAO;AACR,aAAA;AAED,YAAA,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AAE3C,YAAA,MAAM,aAAa,GAAG,CAAC,CAAa,KAAI;AACtC,gBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;gBACvC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;oBAC5C,OAAO;AACR,iBAAA;gBAED,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,gBAAA,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;AACjB,gBAAA,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;gBAEjB,MAAM,WAAW,GAAG,CAAC,SAAqB,KAAK,WAAW,CAAC,SAAS,CAAC,CAAC;gBACtE,MAAM,SAAS,GAAG,MAAK;AACrB,oBAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnD,oBAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACzD,iBAAC,CAAC;AAEF,gBAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACpD,gBAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAClD,aAAC,CAAC;AAEF,YAAA,MAAM,WAAW,GAAG,CAAC,CAAa,KAAI;gBACpC,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;AACxB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;AACxB,gBAAA,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;AACjB,gBAAA,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;AAEjB,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC;AAClD,gBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,IAAI,CAAC;AACtD,aAAC,CAAC;;AAGF,YAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;AAC5D,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC;AACpC,aAAA;AAAM,iBAAA;AACL,gBAAA,KAAK,CAAC,WAAW,GAAG,aAAa,CAAC;AACnC,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACf,SAAA;KACF;AAED,IAAA,SAAS,CAAC,GAAQ,EAAA;AAChB,QAAA,IAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAG,GAAG,IAAI,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YACnE,IAAI,GAAG,IAAI,GAAG,EAAE;AACd,gBAAA,IAAI,KAAK,CAAC,CAAA,sCAAA,CAAwC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5D,aAAA;iBAAM,IAAI,GAAG,IAAI,GAAG,EAAE;AACrB,gBAAA,IAAI,KAAK,CAAC,CAAA,sCAAA,CAAwC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5D,aAAA;AAAM,iBAAA;gBACL,IAAI,KAAK,CAAC,CAAgC,6BAAA,EAAA,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9D,aAAA;AAED,YAAA,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC;AACzB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAE9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAE1C,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;;AAE1C,SAAA;aAAK,IAAG,GAAG,KAAK,WAAW,EAAC;;AAE3B,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,sBAAsB,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3D,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;KAC/B;AAED,IAAA,iBAAiB,CAAC,QAAa,EAAA;QAC7B,IAAI;;YAEF,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,UAAU,GAAG,QAAQ,CAAC;;YAG1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC3D,YAAA,IAAI,QAAQ,EAAE;AACZ,gBAAA,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1D,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,aAAA;AACD,YAAA,IAAI,CAAC,YAAY,GAAG,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC;AAErF,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YAC9D,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAE7C,YAAA,IAAI,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC9D,aAAA;;YAGD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAE1C,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,IAAG;AAC3D,oBAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,UAAU,CAAA,CAAA,EAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;AAChG,oBAAA,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;iBAC7I,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC/B,aAAA;AAEF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,SAAA;KACF;AAED,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,OAAO,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;KACjD;IACD,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;AAExD,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AAC1C,SAAA;KACF;IACD,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;KAChC;IACD,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;;YAEjE,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;;AAEvF,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;gBACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC9C,aAAA;AAAM,iBAAA;gBACL,IAAI,IAAI,CAAC,cAAc,KAAK,WAAW,IAAI,IAAI,CAAC,cAAc,KAAK,cAAc,EAAE;AACjF,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AAC9F,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IACD,cAAc,GAAA;QACZ,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AAC1D,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE;AAC9B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;AACnC,aAAA;SACF,EAAE,GAAG,IAAG;AACP,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAClB,SAAC,CAAC,CAAA;KACH;AACD,IAAA,WAAW,CAAC,OAAY,EAAA;AACtB,QAAA,IAAI,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,UAAU,EAAE;AACtB,YAAA,QAAQ,IAAI,CAAI,CAAA,EAAA,OAAO,CAAC,UAAU,EAAE,CAAC;AACtC,SAAA;QACD,IAAI,OAAO,CAAC,QAAQ,EAAE;AACpB,YAAA,QAAQ,IAAI,CAAI,CAAA,EAAA,OAAO,CAAC,QAAQ,EAAE,CAAC;AACpC,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;KACxB;IAGD,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;KAChD;AAED,IAAA,eAAe,CAAC,OAAY,EAAA;QAC1B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,wBAAwB,CAAC;AAC9D,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;KAC/B;IAED,OAAO,GAAA;QACL,IAAI;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC3B,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAClB,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;;YAG9B,IAAI,CAAC,QAAQ,GAAG;AACd,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,GAAG,EAAE,wBAAwB;AAC7B,gBAAA,cAAc,EAAE,KAAK;AACrB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,MAAM,EAAE,EAAE;aACX,CAAC;;AAGF,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;;AAGvB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACzB,YAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAExC,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;;AAE1C,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAClB,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,QAAQ,GAAG;AACd,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,GAAG,EAAE,wBAAwB;AAC7B,gBAAA,cAAc,EAAE,KAAK;AACrB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,MAAM,EAAE,EAAE;aACX,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC1B,SAAA;KACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoQD,IAAA,MAAM,YAAY,GAAA;QAChB,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;gBACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AAC5C,aAAA;AAED,YAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;AAC/C,YAAA,IAAI,SAAS,EAAE;AACb,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;YACD,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAE7B,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;YAClF,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,EAAE,oHAAoH,CAAC,CAAC;AACtI,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AAED,YAAA,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;YAEtF,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AAC9D,gBAAA,IAAI,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;AAC9C,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AAED,YAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC7D,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACxC,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,gBAAA,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,CAAC;gBAClD,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;iBAChC,EAAE,IAAI,CAAC,CAAC;AACT,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;;AAGD,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC;;YAG9B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC3B,OAAO;AACR,aAAA;;YAGD,IAAI,CAAC,QAAQ,GAAG;gBACd,GAAG,IAAI,CAAC,QAAQ;gBAChB,KAAK,EAAE,IAAI,CAAC,YAAY;AACxB,gBAAA,cAAc,EAAE,KAAK;AACrB,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,IAAI,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM;AAC9E,gBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;;AAGF,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AACnB,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9C,YAAA,OAAO,IAAI,CAAC;AAEb,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;;AAEV,YAAA,IAAI,CAAC,aAAa,CAAC,4CAA4C,CAAC,CAAC;AACjE,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AACnB,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;AAED,IAAA,MAAM,eAAe,GAAA;QACnB,IAAI;AACF,YAAA,IAAG,IAAI,CAAC,YAAY,IAAI,EAAE,EAAC;AACzB,gBAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;AACrC,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAC3C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;AACtC,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;AACrC,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC;AACb,SAAA;KACF;IAED,cAAc,GAAA;AACZ,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1H,QAAA,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,UAAU,GAAG;gBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,IAAI,CAAC,YAAY;aAC1B,CAAC;AACH,SAAA;AAAM,aAAA;YACL,IAAG,IAAI,CAAC,YAAY,EAAC;gBACnB,IAAI,CAAC,UAAU,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACjD,aAAA;AAEF,SAAA;KACF;IACD,qBAAqB,GAAA;AACnB,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,OAAO,GAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAY,KAAI;AACtD,YAAA,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAA;AACxE,SAAC,CAAC,CAAC;QACH,IAAG,OAAO,CAAC,MAAM,EAAC;AAChB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAA,EAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAI,CAAA,EAAA,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA,CAAE,CAAC,WAAW,EAAE,CAAC;AAC7G,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,wBAAwB,CAAC;YACjE,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;AAExC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD,IAAA,aAAa,CAAC,OAAe,EAAA;QAC3B,IAAI,CAAC,SAAS,GAAG;AACf,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,IAAI,EAAE,IAAI;SACX,CAAC;QACF,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC;SAC7B,EAAE,IAAI,CAAC,CAAC;KACV;AACD,IAAA,MAAM,aAAa,GAAA;QACjB,IAAI;YACF,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC9C,YAAA,MAAM,GAAG,GAAQ,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5E,YAAA,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;gBACrB,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;gBACjD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACnD,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;gBACnD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACtD,aAAA;YACD,IAAI,GAAG,CAAC,QAAQ,EAAE;gBAChB,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAE/C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7C,aAAA;AAAM,iBAAA;AACL,gBAAA,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC5C,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AAC1C,aAAA;YAED,QAAQ,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;AACzD,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;AACD,IAAA,MAAM,yBAAyB,GAAA;QAC7B,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1E,YAAA,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAK,KAAa,CAAC,IAAI,KAAK,iBAAiB,EAAE;AAC7C,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACF,SAAA;KACF;AACD,IAAA,MAAM,0BAA0B,GAAA;QAC9B,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1E,YAAA,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACnD,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;AAC5D,SAAA;KACF;;IAED,MAAM,WAAW,CAAC,YAAoB,EAAA;AAElC,QAAA,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;;AAE3B,YAAA,IAAI,SAAS,GAAQ,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,CAAC;YACzE,MAAM,GAAG,GAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,EAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC;AAC9G,YAAA,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;gBACrB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC;AAC5C,gBAAA,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACjC,aAAA;AACF,SAAA;KACJ;IACD,aAAa,GAAA;AACX,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;KAC9C;IACD,MAAM,eAAe,CAAC,IAAS,EAAA;QAC7B,MAAM,SAAS,IAAI,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACjE,IAAI,SAAS,IAAI,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;AACtD,SAAA;QAGD,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;;QAE9C,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,EAAE,CAAC;KACtC;AACD,IAAA,KAAK,CAAC,EAAU,EAAA;AACd,QAAA,OAAO,IAAI,OAAO,CAAO,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;KAC9D;AAED,IAAA,UAAU,CAAC,WAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACtC;AACD,IAAA,iBAAiB,CAAC,KAAqB,EAAA;QACrC,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAK,MAAc,CAAC,aAAa,CAAC;QAC3E,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;;AAGjD,QAAA,IAAG,UAAU,EAAC;AACZ,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;AAChC,SAAA;KAEF;AACD,IAAA,OAAO,CAAC,GAAU,EAAA;;QAEhB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAE,GAAG,CAAC;AAC3C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC3C;IAED,kBAAkB,GAAA;QAChB,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AAC/D,YAAA,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;;AAEtB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACpC,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,aAAA;AACH,SAAC,CAAC,CAAA;KACH;AACD,IAAA,oBAAoB,CAAC,EAAO,EAAA;AAC1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;KACjC;IACD,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,KAAK,CAAC;KACnC;AAED,IAAA,gBAAgB,CAAC,EAAM,EAAA;AACrB,QAAA,IAAG,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAC;AAC/B,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC7C,SAAA;AACD,QAAA,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,EAAE;;AAEtB,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACzB,IAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAC;oBACvD,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,iBAAA;AACD,gBAAA,IAAG,CAAC,IAAI,CAAC,gBAAgB,EAAC;AACxB,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBAC9B,UAAU,CAAC,MAAK;AACd,wBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;qBAChC,EAAE,KAAK,CAAC,CAAC;AACX,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AACD,IAAA,mBAAmB,CAAC,EAAO,EAAA;QACzB,IAAI,CAAC,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,gBAAgB,IAAI,WAAW,CAAC,KAAK,IAAI,CAAC,gBAAgB,IAAI,cAAc,CAAC,EAAE;AACjH,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,SAAA;KAEF;AACD,IAAA,mBAAmB,CAAC,EAAO,EAAA;QACzB,IAAI,CAAC,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,gBAAgB,IAAI,WAAW,CAAC,KAAK,IAAI,CAAC,gBAAgB,IAAI,cAAc,CAAC,EAAE;AACjH,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAChC,SAAA;KACF;AACD,IAAA,qBAAqB,CAAC,IAAU,EAAA;;;AAG9B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;KACjC;AACD,IAAA,qBAAqB,CAAC,IAAU,EAAA;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5H,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;KAC/H;IACD,wBAAwB,GAAA;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AACnB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;KACnC;AACD,IAAA,oBAAoB,CAAC,IAAQ,EAAA;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3C;IACD,WAAW,GAAA;QACT,IAAI;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;;YAG/C,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;AAClC,aAAA;;AAED,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;gBAChC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;AACxC,aAAA;;YAGD,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACzB,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,aAAA;;YAGD,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjC,aAAA;AAED,YAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;AAErD,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;AACzD,SAAA;KACF;;8GAh2CU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,koBCpB7B,mhZA0OA,EAAA,MAAA,EAAA,CAAA,mrPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDtNa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,aAAa,EAAA,QAAA,EAAA,mhZAAA,EAAA,MAAA,EAAA,CAAA,mrPAAA,CAAA,EAAA,CAAA;0SAQd,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEO,eAAe,EAAA,CAAA;sBAA3B,KAAK;gBAOG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAKI,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,yBAAyB,EAAA,CAAA;sBAAlC,MAAM;gBACG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBACiB,gBAAgB,EAAA,CAAA;sBAAvC,SAAS;uBAAC,WAAW,CAAA;gBAGZ,YAAY,EAAA,CAAA;sBAArB,MAAM;;;AEhDF,MAAM,cAAc,GAAG;AAC1B,IAAA,WAAW,EAAC,oDAAoD;AAChE,IAAA,YAAY,EAAC,IAAI;AACjB,IAAA,gBAAgB,EAAE,YAAY;CAChC;;MCUW,qBAAqB,CAAA;AAsB9B,IAAA,WAAA,CACY,gBAAkC,EAClC,aAA4B,EAC5B,mBAAwC,EAAA;QAFxC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAC5B,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QArBpD,IAAiB,CAAA,iBAAA,GAAY,IAAI,CAAC;QAClC,IAAoB,CAAA,oBAAA,GAAQ,EAAE,CAAC;QAG/B,IAAY,CAAA,YAAA,GAAU,EAAE,CAAC;QAGzB,IAAgB,CAAA,gBAAA,GAAY,KAAK,CAAC;QAClC,IAAa,CAAA,aAAA,GAAY,KAAK,CAAC;QAC/B,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;QAC7B,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;QAC1B,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;AAEzB,QAAA,IAAA,CAAA,oBAAoB,GAA8C,IAAI,YAAY,EAA+B,CAAC;AAClH,QAAA,IAAA,CAAA,oBAAoB,GAAsB,IAAI,YAAY,EAAO,CAAC;AAClE,QAAA,IAAA,CAAA,wBAAwB,GAAsB,IAAI,YAAY,EAAO,CAAC;QAoN9E,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC;QAC1B,IAAe,CAAA,eAAA,GAAG,EAAE,CAAC;QACrB,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;QAE3B,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;AAhNd,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;KACvC;IAED,QAAQ,GAAA;;;;;;;;AAUJ,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;QAC7C,IAAI;YACA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,IAAG;AAC5C,gBAAA,IAAI,IAAI,EAAE;AACN,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;oBAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC9D,oBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,wBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACtB,qBAAA;oBACH,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAClD,oBAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAK;AACnB,wBAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,EAAE;AACvG,4BAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACxK,yBAAA;AACD,wBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,qBAAC,CAAC,CAAC;AAEH,oBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,MAAK;AACvB,wBAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,EAAE;AACvG,4BAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACxK,yBAAA;AACD,wBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,qBAAC,CAAC,CAAC;AACN,iBAAA;AACL,aAAC,CAAC,CAAC;AACN,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACR,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,SAAA;KACJ;AAED,IAAA,kBAAkB,CAAC,IAAU,EAAA;QACzB,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO;AAAE,SAAA;;QAEtB,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;YAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,eAAe,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;AAC5G,YAAA,IAAI,cAAc,EAAE;gBAChB,IAAI;oBAAE,cAAc,CAAC,UAAU,EAAE,CAAC;AAAE,iBAAA;AAAC,gBAAA,MAAM,GAAE;AAC7C,gBAAA,cAAc,CAAC,eAAe,GAAG,KAAK,CAAC;AACvC,gBAAA,cAAc,CAAC,WAAW,GAAG,KAAK,CAAC;AACtC,aAAA;AACJ,SAAA;;QAGD,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAExB,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAK;AACxF,YAAA,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;AACrC,SAAC,CAAC,CAAC;KACN;AACD,IAAA,kBAAkB,CAAC,IAAU,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QAEvC,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC;AAC9C,SAAA;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;AACrF,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACjF,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACpJ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC1D,YAAA,IAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,CAAC,EAAC;AACrC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,wBAAwB,CAAC,GAAQ,EAAA;AAC7B,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;KAC5E;AAED,IAAA,UAAU,CAAC,IAAU,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC1B;IAED,qBAAqB,CAAC,QAAa,EAAE,UAAe,EAAA;AAChD,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;gBAClG,MAAM,IAAI,GAAQ,GAAG,CAAC;AACtB,gBAAA,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;oBACnB,IAAI,IAAI,CAAC,QAAQ,EAAE;wBACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;wBACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;;AAE3C,wBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC5B,4BAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B,yBAAA;AAAM,6BAAA;AACL,4BAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC/B,yBAAA;AACJ,qBAAA;AAAM,yBAAA;;AAEA,qBAAA;AAEP,oBAAA,OAAO,EAAE,CAAC;AACb,iBAAA;AAAM,qBAAA;AACH,oBAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AACnD,oBAAA,OAAO,EAAE,CAAC;AACb,iBAAA;AACL,aAAC,EAAE,CAAC,KAAK,KAAI;gBACT,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACnD,gBAAA,OAAO,EAAE,CAAC;AACd,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACN;IACD,mBAAmB,GAAA;QACf,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE;AACpE,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;KAC3G;;AAGD,IAAA,eAAe,CAAC,QAAa,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC;;QAG5B,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE;AACvD,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC9C,OAAO,CAAC,EACJ,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG;AACpC,gBAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,GAAG;AAChC,gBAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG;AACpC,gBAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG;AACxC,gBAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG;AAC1C,gBAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG;AACxC,gBAAA,IAAI,CAAC,GAAG;AACR,gBAAA,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,SAAS,CACjB,CAAC;AACL,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,aAAa,CAAC,IAAU,EAAA;QACpB,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;AAC1D,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAEjC,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;YAElD,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;AAC5C,oBAAA,IAAI,IAAI,KAAK,IAAI,CAAC,oBAAoB,EAAE;AACpC,wBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC;AACjC,qBAAA;AACL,iBAAC,CAAC,CAAC;AACN,aAAA;YAED,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAE9D,YAAA,IAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAC;AACvF,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACtD,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,kBAAkB,CAAC,gBAAqB,EAAA;AACpC,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CACxE,QAAQ,IAAG;YACT,UAAU,CAAC,MAAI;AACb,gBAAA,gBAAgB,CAAC,UAAU,CAAC,GAAC,QAAQ,CAAA;aACtC,EAAE,IAAI,CAAC,CAAA;SACT,EAAE,KAAK,IAAG;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,OAAwB,EAAA;AAClC,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAC1C,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACjB,YAAA,OAAO,GAAG,CAAC;SACZ,EAAE,EAAyB,CAAC,CAAC;KAC/B;AAOD,IAAA,eAAe,CAAC,GAAW,EAAA;QACzB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;KACF;IACC,cAAc,GAAA;AACZ,QAAA,IAAI,GAAG,CAAC;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;AAC7C,QAAA,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;;;;AAKjE,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAG;AAC/D,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;;YAEtB,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB,EAAE,KAAK,IAAG;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACJ;IACD,aAAa,GAAA;;;;AAIX,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AACtC,SAAA;KACF;IACD,cAAc,GAAA;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;;;;AAMvE,QAAA,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,SAAS,CAClE,QAAQ,IAAG;;AAET,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACtB,EACD,KAAK,IAAG;AACN,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;;AAEnD,SAAC,CACF,CAAC;KACH;AACD,IAAA,eAAe,CAAC,GAAQ,EAAA;;QAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;AAC7C,QAAA,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;;;;AAKjE,QAAA,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAG;AAC/E,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB,EAAE,KAAK,IAAG;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACJ;IACD,WAAW,GAAA;QACT,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAK;YACrD,IAAI,CAAC,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;KACJ;IACD,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACpC,SAAA;KACF;;IAED,SAAS,GAAA;QACP,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;KACjI;IACD,MAAM,GAAG,CAAC,IAAU,EAAA;AAClB,QAAA,IAAG,IAAI,EAAE,MAAM,IAAI,SAAS,EAAC;YAC7B,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAClD,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAClC,SAAA;AAAM,aAAA,IAAG,IAAI,EAAE,MAAM,IAAI,SAAS,EAAC;YAClC,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AAC9H,gBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAC,sBAAsB,CAAC,CAAA;AAC1C,aAAC,CAAC,CAAA;AACH,SAAA;;;;KAKF;;mHAlVI,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,8UCflC,y3hBA6OM,EAAA,MAAA,EAAA,CAAA,ivMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAS,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD9NO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,y3hBAAA,EAAA,MAAA,EAAA,CAAA,ivMAAA,CAAA,EAAA,CAAA;4JAKlB,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAcI,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;gBACG,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;gBACG,wBAAwB,EAAA,CAAA;sBAAjC,MAAM;;;MExBE,uBAAuB,CAAA;AAGlC,IAAA,WAAA,CACU,MAAc,EACd,QAAuB,EACxB,SAAgD,EACvB,IAAS,EAAA;QAHjC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAe;QACxB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAuC;QACvB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAK;QAN3C,IAAW,CAAA,WAAA,GAAW,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC;QACpE,IAAW,CAAA,WAAA,GAAY,IAAI,CAAC;QAQ5B,IAAK,CAAA,KAAA,GAAU,EAAE,CAAC;KAFd;IAGJ,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,MAAM,IAAI,IAAI,GAAE,KAAK,CAAC;QACjF,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACtD;IACD,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC5B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC7B;IACD,2BAA2B,GAAA;QACzB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,uBAAuB,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAC,CAAC,CAAC;KACzE;IACD,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;KAC3E;IACD,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KACxB;AAED,IAAA,WAAW,CAAC,EAAO,EAAA;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1D,QAAA,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAC/C,QAAA,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;KAE5C;IACD,cAAc,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;KAE/B;;AA1CU,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,gGAOxB,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAPd,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,4DCVpC,qpCAqBM,EAAA,MAAA,EAAA,CAAA,8VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDXO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,qpCAAA,EAAA,MAAA,EAAA,CAAA,8VAAA,CAAA,EAAA,CAAA;;0BAW7B,MAAM;2BAAC,eAAe,CAAA;;;MEkBd,aAAa,CAAA;;2GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,aAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,iBArBtB,gBAAgB;QAChB,qBAAqB;QACrB,uBAAuB;AACvB,QAAA,qBAAqB,aAGrB,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,gBAAgB;QAChB,UAAU;QACV,YAAY;AACZ,QAAA,aAAa,aAGb,gBAAgB;QAChB,qBAAqB;QACrB,qBAAqB;QACrB,uBAAuB,CAAA,EAAA,CAAA,CAAA;AAGd,aAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAftB,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,gBAAgB;QAEhB,YAAY;QACZ,aAAa,CAAA,EAAA,CAAA,CAAA;4FASJ,aAAa,EAAA,UAAA,EAAA,CAAA;kBAvBzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,gBAAgB;wBAChB,qBAAqB;wBACrB,uBAAuB;wBACvB,qBAAqB;AACtB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,gBAAgB;wBAChB,UAAU;wBACV,YAAY;wBACZ,aAAa;AACd,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,gBAAgB;wBAChB,qBAAqB;wBACrB,qBAAqB;wBACrB,uBAAuB;AACxB,qBAAA;AACF,iBAAA,CAAA;;;AClCD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"vgroup-dialbox.mjs","sources":["../../../projects/dialbox/src/keypad.ts","../../../projects/dialbox/src/lib/environments/environments.ts","../../../projects/dialbox/src/lib/service/ip-address.service.ts","../../../projects/dialbox/src/lib/service/extension.service.ts","../../../projects/dialbox/src/lib/service/Notification.service.ts","../../../projects/dialbox/src/lib/service/twilio.service.ts","../../../projects/dialbox/src/lib/service/incomeing-call-socket.service.ts","../../../projects/dialbox/src/lib/components/call-progress/call-progress.component.ts","../../../projects/dialbox/src/lib/components/call-progress/call-progress.component.html","../../../projects/dialbox/src/lib/dialbox.component.ts","../../../projects/dialbox/src/lib/dialbox.component.html","../../../projects/dialbox/src/lib/shared/global-constant.ts","../../../projects/dialbox/src/lib/components/call-progress/incoming-call/incoming-call.component.ts","../../../projects/dialbox/src/lib/components/call-progress/incoming-call/incoming-call.component.html","../../../projects/dialbox/src/lib/components/caller-id-dialog/caller-id-dialog.component.ts","../../../projects/dialbox/src/lib/components/caller-id-dialog/caller-id-dialog.component.html","../../../projects/dialbox/src/lib/dialbox.module.ts","../../../projects/dialbox/src/public-api.ts","../../../projects/dialbox/src/vgroup-dialbox.ts"],"sourcesContent":["\r\nexport const keypad: any[] =\r\n [\r\n {\r\n num: 1,\r\n text: 'voicemail'\r\n },\r\n {\r\n num: 2,\r\n text: 'abc'\r\n },\r\n {\r\n num: 3,\r\n text: 'def'\r\n }, {\r\n num: 4,\r\n text: 'ghi'\r\n }, {\r\n num: 5,\r\n text: 'jkl'\r\n }, {\r\n num: 6,\r\n text: 'mno'\r\n }, {\r\n num: 7,\r\n text: 'pqrs'\r\n }, {\r\n num: 8,\r\n text: 'tuv'\r\n }, {\r\n num: 9,\r\n text: 'wxyz'\r\n },\r\n {\r\n num: '*',\r\n text: ' '\r\n },\r\n {\r\n num: 0,\r\n text: '+'\r\n },\r\n {\r\n num: '#',\r\n text: ''\r\n }\r\n ];\r\n","export const environment = {\r\n abb: \"d\",\r\n production: false,\r\n secureCookies: true,\r\n feUrl: 'https://dev.vgroupinc.com:91/',\r\n apiUrl: 'https://dev-api-t10.vgroupinc.com/dev_softphone_p91/',\r\n captchaKey: \"6LfpOmEaAAAAAGsI6JXlMzOl3b7rW4YmYXFDjldD\",\r\n websocketUrl: 'wss://dev-api-t10.vgroupinc.com/dev_softphone_p91/',\r\n stripePublishableKey: \"pk_test_51K6aTuBiNVV2TMlQfmBWY8jziwiDo0IZ3TrqWPqth1m32cpMAAg5Qpi2AlSMDEAX6hCZRBXoTzBB1uQQLc8B4tco00q2SgG6zO\",\r\n sessionTimeout: 15, //in mins,\r\n deviceType: \"web\",\r\n appVersion: \"2.3\",\r\n channelId: '61481b12e138eb7dc3007579',\r\n c2c_support_point_id: '60424735f74ac306c1bfa900',\r\n c2c_support_channel_id: '677f67f3be93ab507fbbfdfc',\r\n c2c_point_url: 'https://bit.ly/3blWnPv',\r\n c2c_call_label_id: 'ye2XFLfOHCr12GFVRzPh',// dev\r\n c2c_email_label_id: 'mvjVgOP2VCiYsVovQqdq',// dev\r\n radarAPIKey: 'prj_live_sk_569b6f639edde6120a26f703511c61aaecd3f7ef',\r\n firebase: {\r\n apiKey: \"AIzaSyCA8LSPrqlDq_thk26LhBQexAQeY6pkU5Y\",\r\n authDomain: \"softphone-d5777.firebaseapp.com\",\r\n projectId: \"softphone-d5777\",\r\n storageBucket: \"softphone-d5777.appspot.com\",\r\n messagingSenderId: \"850812494538\",\r\n appId: \"1:850812494538:web:74f8a30fc18e28ded78a33\",\r\n measurementId: \"G-NGXTSV9SH3\",\r\n vapidKey: \"BD6EgcQgbZTjOQfleG3YlEc0_SajB03prqTdDy-qGJkxTxezbq-A_qtuXE1l3yT47o8hnTAbTKBcH15D2AJB2To\"\r\n },\r\n perspectiveApiKey: 'AIzaSyClf32lvLH4QOy-vOnzLzwSNntKIgapH8s',\r\n keycloakURL: 'https://test-keycloak.vgroupinc.com/',\r\n keycloakRealm: 'vgroup-dev',\r\n keycloakClientId: 'c2c-softphone-app'\r\n};","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { environment } from \"../environments/environments\";\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class IpAddressService {\r\n private apiUrl = 'https://api.radar.io/v1/geocode/ip';\r\n\r\n constructor(private http: HttpClient) {}\r\n\r\n getIpAddressInfo(): Observable<any> {\r\n const authKey = environment.radarAPIKey;\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Authorization': authKey }),\r\n fraud: true\r\n };\r\n \r\n return this.http.get(this.apiUrl, httpOptions).pipe(\r\n catchError((error) => {\r\n return throwError(new Error(\"Network is blocking the server, please check the proxy or your network.\"));\r\n })\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http'\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\r\nimport { environment } from \"../environments/environments\";\r\nimport { catchError, debounceTime, map, switchMap } from 'rxjs/operators';\r\nimport { IpAddressService } from './ip-address.service';\r\n\r\nimport { forkJoin } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExtensionService {\r\n private callSid: string = '';\r\n private recordCall: any;\r\n setCallSid(callSid: string, recordCall: any) {\r\n this.callSid = callSid;\r\n this.recordCall = recordCall;\r\n }\r\n getCallSid(): { callSid: string; recordCall: any } {\r\n return {\r\n callSid: this.callSid,\r\n recordCall: this.recordCall\r\n };\r\n }\r\n\r\n public messageSource = new BehaviorSubject<any>('');\r\n private channelId = environment.channelId;\r\n currentMessage = this.messageSource.asObservable();\r\n \r\n platform='web';\r\n\r\n public dedicatedStateSource = new BehaviorSubject<any>('');\r\n dedicatedState = this.dedicatedStateSource.asObservable();\r\n\r\n\r\n public callerIdStateSource = new BehaviorSubject<any>('');\r\n callerIdState = this.callerIdStateSource.asObservable();\r\n\r\n public sendSmsSource = new BehaviorSubject<any>('');\r\n sendMessage = this.sendSmsSource.asObservable();\r\n\r\n public draftSmsSource = new BehaviorSubject<any>('');\r\n draftMessage = this.draftSmsSource.asObservable();\r\n\r\n public isInputFocus$ = new BehaviorSubject<boolean>(false);\r\n token: string = localStorage.getItem('ext_token') || '';\r\n isNewContactAdded = new BehaviorSubject<boolean>(false);\r\n isProfileUpdated = new BehaviorSubject<boolean>(false);\r\n\r\n private callerIdSubject = new BehaviorSubject<any>(null);\r\n callerId$ = this.callerIdSubject.asObservable();\r\n\r\n setCallerId(callerId: any) {\r\n this.callerIdSubject.next(callerId);\r\n }\r\n\r\n constructor(private http: HttpClient,\r\n private ipAddressService: IpAddressService\r\n )\r\n { }\r\n\r\n changeMessage(message: string) {\r\n this.messageSource.next(message)\r\n }\r\n\r\n GetUserUsage(token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/ext/usage', httpOptions);\r\n }\r\n\r\n GetUserProfile(token: string, data:any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/user', data, httpOptions);\r\n }\r\n\r\n\r\n UpdateProfile(userProfile: any, token: string): Observable<[]> {\r\n const userProfileObj = {\r\n \"billingAddress1\": userProfile.billingAddress1,\r\n \"billingAddress2\": userProfile.billingAddress2,\r\n \"billingCityid\": userProfile.billingCity,\r\n \"billingCountryid\": userProfile.billingCountry,\r\n \"billingStateid\": userProfile.billingState,\r\n \"billingZipid\": userProfile.billingZip,\r\n \"email\": userProfile.email,\r\n \"mobile\": userProfile.mobile,\r\n \"countrycode\": userProfile.countrycode,\r\n \"timezone\": userProfile.timezone,\r\n \"firstname\": userProfile.firstname,\r\n \"lastname\": userProfile.lastname,\r\n \"shippingAddress1\": (userProfile.shippingAddress1 !== null && userProfile.shippingAddress1 !== undefined && userProfile.shippingAddress1 !== \"\") ? userProfile.shippingAddress1 : userProfile.billingAddress1,\r\n \"shippingAddress2\": (userProfile.shippingAddress2 !== null && userProfile.shippingAddress2 !== undefined && userProfile.shippingAddress2 !== \"\") ? userProfile.shippingAddress2 : userProfile.billingAddress2,\r\n \"shippingCityid\": (userProfile.shippingCity !== null && userProfile.shippingCity !== undefined && userProfile.shippingCity !== \"\") ? userProfile.shippingCity : userProfile.billingCity,\r\n \"shippingCountryid\": (userProfile.shippingCountry !== null && userProfile.shippingCountry !== undefined && userProfile.shippingCountry !== \"\") ? userProfile.shippingCountry : userProfile.billingCountry,\r\n \"shippingStateid\": (userProfile.shippingState !== null && userProfile.shippingState !== undefined && userProfile.shippingState !== \"\") ? userProfile.shippingState : userProfile.billingState,\r\n \"shippingZipid\": (userProfile.shippingZip !== null && userProfile.shippingZip !== undefined && userProfile.shippingZip !== \"\") ? userProfile.shippingZip : userProfile.billingZip,\r\n \"imageId\": (userProfile.imageId),\r\n \"imageName\": (userProfile.imageName),\r\n \"companyName\": userProfile.companyName, \r\n \"companySize\": userProfile.companySize, \r\n \"companyFirstName\": userProfile.companyFirstName, \r\n \"companyLastName\": userProfile.companyLastName, \r\n \"companyContactNumber\": userProfile.companyContactNumber\r\n };\r\n\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.put<[]>(environment.apiUrl + '/utilities/ext/update', userProfileObj, httpOptions);\r\n }\r\n deleteProfilePhoto(token: string): Observable<[]> {\r\n const params = {\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + token }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/delete/profile/photo', params, httpOptions);\r\n\r\n }\r\n\r\n getOtpCode(countryCode: string, number: string, mode : string, token: string){\r\n\r\n\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const numberObj = {\r\n \"countrycode\": countryCode,\r\n \"number\": number,\r\n \"mode\" : mode\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/sms/otp', numberObj, httpOptions);\r\n }\r\n getVerifyMobile(countryName: string, countrycode: string, number: string, otp: string,token: string){\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const verifyObj = {\r\n \"countryName\": countryName,\r\n \"countrycode\": countrycode,\r\n \"number\": number,\r\n \"otp\": otp\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/sms/verify/otp', verifyObj,httpOptions);\r\n }\r\n connectWithStripe(token: string): Observable<[]> {\r\n const params = {\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + token }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/stripe/connect', params, httpOptions);\r\n\r\n }\r\n\r\n connectWithStripeRedirection(redirection: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Auth-Key': \"Bearer \" + token,\r\n \"redirection\": redirection\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + token }) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/ext/stripe/connect/${redirection}`, params, httpOptions);\r\n }\r\n\r\n\r\n validateStripeSession(sessionId: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const data = {\r\n \"sessionid\": sessionId,\r\n };\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/validate/session', data, httpOptions);\r\n }\r\n\r\n loadPaymentMethods(token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/ext/payment/methods', httpOptions);\r\n }\r\n\r\n setPaymentDefaultMethod(paymentMethodId: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const data = {\r\n \"methodid\": paymentMethodId,\r\n };\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/update/default', data, httpOptions);\r\n }\r\n\r\n sendEmailVerifyLink(emailval: any, token: string): Observable<[]> {\r\n const params = {\r\n 'Auth-Key': \"Bearer \" + token,\r\n \"email\": emailval\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + token }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/verify/email', params, httpOptions);\r\n }\r\n\r\n VerifyEmailLink(key: string): Observable<[]> {\r\n const keyobj = { \"key\": key };\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/verify/request', keyobj, httpOptions);\r\n }\r\n\r\n DeleteMethod(paymentMethodId: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const data = {\r\n \"methodid\": paymentMethodId,\r\n };\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/detach/method', data, httpOptions);\r\n }\r\n\r\n VerifySession(token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/ext/verify/session', httpOptions);\r\n }\r\n\r\n GetAllCountryList(): Observable<string> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.get<string>(environment.apiUrl + '/global/master/ur/countrylist', httpOptions);\r\n }\r\n\r\n GetAllStateList(_countryId: any): Observable<string> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.get<string>(environment.apiUrl + '/global/master/ur/statelist/' + _countryId,\r\n httpOptions);\r\n }\r\n\r\n LogoutUser(authKey: any): Observable<[]> {\r\n const auth = { \"Auth-Key\": authKey }\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': authKey }) };\r\n return this.http.post<[]>(environment.apiUrl + '/client/user/logout', auth, httpOptions);\r\n }\r\n\r\n\r\n purchasedNumber(token: string): Observable<string> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<string>(environment.apiUrl + '/utilities/softphone/view/purchased/number', httpOptions);\r\n }\r\n\r\n availableNumber(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json;charset=UTF-8',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/available/number', dtModel, httpOptions);\r\n }\r\n\r\n urAvailableNumber(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json;charset=UTF-8',\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/ur/available/number', dtModel, httpOptions);\r\n }\r\n\r\n stagingNumber(token: string, dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/save/staging/number', dtModel, httpOptions);\r\n }\r\n\r\n saveCompanyDetail(dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/signup/company/details', dtModel, httpOptions);\r\n }\r\n\r\n saveAddressInfo(dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/signup/address', dtModel, httpOptions);\r\n }\r\n\r\n saveStripeInfo(userId: string): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/stripe/connect/'+ userId, httpOptions);\r\n }\r\n\r\n saveCardInfo(dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/save/card/info', dtModel, httpOptions);\r\n }\r\n deleteCard(dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/delete/saved/card', dtModel, httpOptions);\r\n }\r\n purchasePlan(dtModel: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/ur/purchase/signup/number', dtModel, httpOptions);\r\n }\r\n\r\n getUserStagingInfo(data: any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/signup/staging',data, httpOptions);\r\n }\r\n\r\n costCheckOut(token: string, cost: any): Observable<string> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<string>(environment.apiUrl + '/utilities/softphone/number/checkout/' + cost, httpOptions);\r\n }\r\n buyNumber(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/purchase/number', dtModel, httpOptions);\r\n }\r\n\r\n fetchCallerId(token: string): Observable<string> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<string>(environment.apiUrl + '/utilities/softphone/fetch/callerid', httpOptions);\r\n }\r\n\r\n updateNumberLabel(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.put<[]>(environment.apiUrl + '/utilities/softphone/update/number/label', dtModel, httpOptions);\r\n }\r\n\r\n releaseNumber(token: string, twilioNum: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/delete/twilio/number', httpOptions);\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/softphone/delete/twilio/number/'+twilioNum, httpOptions);\r\n }\r\n\r\n // Call forwarding api's\r\n\r\n sendOTP(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/send/otp', dtModel, httpOptions);\r\n }\r\n verifyOTP(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/verify/otp', dtModel, httpOptions);\r\n }\r\n updateCallForwarding(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/configure/call/forwarding', dtModel, httpOptions);\r\n }\r\n getSingleNumForwardingSetting(token:string, number:string){\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/softphone/view/call/forwarding/'+number, httpOptions);\r\n }\r\n deleteCallForwarding(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/call/forwarding/action', dtModel, httpOptions);\r\n }\r\n \r\n\r\n\r\n //calling prefernece api\r\n displayID(token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/softphone/display/callerids', httpOptions);\r\n }\r\n verifyNumber(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/add/callerid', dtModel, httpOptions);\r\n }\r\n\r\n verifyStatus(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/softphone/callerid/status/' + dtModel, httpOptions);\r\n }\r\n\r\n existingListmakeCallerID(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/softphone/make/callerid', dtModel, httpOptions);\r\n }\r\n\r\n makeCallerID(token: string, dtModel: any, number: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/softphone/markas/callerid/${number}`, dtModel, httpOptions);\r\n }\r\n\r\n deleteCallerID(token: string, dtModel: any, id: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/softphone/delete/callerid/${id}`, dtModel, httpOptions);\r\n }\r\n\r\n deregisterCallerID(token: string, dtModel: any, id: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/softphone/deregister/callerid/${id}`, dtModel, httpOptions);\r\n }\r\n\r\n updateCallerIDLabel(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.put<[]>(environment.apiUrl + '/utilities/softphone/update/callerid/label', dtModel, httpOptions);\r\n }\r\n\r\n // initiateCall(payload: any): Observable<any> {\r\n // return this.fetchBlockedCountries().pipe(\r\n // switchMap(blockedCountries => {\r\n // return this.ipAddressService.getIpAddressInfo().pipe(\r\n // switchMap(ipAddressInfo => {\r\n // const params = {\r\n // 'Content-Type': 'application/json',\r\n // 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token'),\r\n // 'ip-address': ipAddressInfo.ip,\r\n // 'ip-country': ipAddressInfo.address.country,\r\n // };\r\n // payload = {...payload, proxy:ipAddressInfo.proxy.toString()}\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/initiate/call', payload, httpOptions).pipe(\r\n // catchError(error => {\r\n // return throwError(error);\r\n // }), \r\n // );\r\n // }),\r\n // catchError(error => {\r\n // // Catch error from getIpAddressInfo\r\n // return throwError(error);\r\n // })\r\n // );\r\n // })\r\n // );\r\n // }\r\n\r\n \r\n initiateCall(payload: any): Observable<any> {\r\n return this.fetchBlockedCountries().pipe(\r\n switchMap(blockedCountries => {\r\n return this.ipAddressService.getIpAddressInfo().pipe(\r\n switchMap(ipAddressInfo => {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token'),\r\n 'ip-address': ipAddressInfo.ip,\r\n 'ip-country': ipAddressInfo.address.country,\r\n };\r\n payload = {...payload, proxy:ipAddressInfo.proxy.toString()}\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/initiate/conference/call', payload, httpOptions).pipe(\r\n catchError(error => {\r\n return throwError(error);\r\n }), \r\n );\r\n }),\r\n catchError(error => {\r\n // Catch error from getIpAddressInfo\r\n return throwError(error);\r\n })\r\n );\r\n })\r\n ); \r\n }\r\n \r\n\r\n getConferenceCallToken(payload: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': payload.authId,\r\n 'c2c-request': window.location.hostname\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/generate/conference/token',payload, httpOptions);\r\n }\r\n \r\n addParticipant(payload: any) {\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n console.log(payload, 'payload');\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/add/participant', payload, httpOptions);\r\n }\r\n\r\n holdParticipant(payload:any){\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/hold/participant', payload, httpOptions);\r\n }\r\n \r\n onMuteParticipant(payload:any){\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/mute/participant', payload, httpOptions);\r\n }\r\n\r\n getAllParticipants(conferenceSid:any) {\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.get<[]>(environment.apiUrl + `/utilities/ext/ur/all/participent/${conferenceSid}`, httpOptions);\r\n }\r\n\r\n updateHoldUnhold(payload:any){\r\n const params = {\r\n \"conferenceId\": payload.conferenceId,\r\n \"participantIds\": payload.participantIds,\r\n \"hold\": payload.hold\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/update/hold/unhold', params, httpOptions);\r\n }\r\n\r\n\r\n \r\n getCallStatusOfParticipants(participantId:any) { \r\n const params = {\r\n \r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + `/utilities/ext/ur/call/status/participant/${participantId}`, httpOptions);\r\n }\r\n\r\n getRemoveParticipants(participantId:any, conferenceId:any) {\r\n return this.http.get<[]>(environment.apiUrl + `/utilities/ext/ur/remove/participant/${participantId}/${conferenceId}`,);\r\n }\r\n\r\n muteParticipant(){ \r\n const params = {\r\n \r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/ext/ur/mute/participant', httpOptions);\r\n }\r\n\r\n fetchBlockedCountries(): Observable<string[]> {\r\n return this.http.get<any>(environment.apiUrl + '/global/master/ur/blacklisted/countrylist').pipe(\r\n map(response => {\r\n if (response.response === 'Success' && Array.isArray(response.countries)) {\r\n return response.countries.map((country: any) => country.isocode);\r\n } else {\r\n throw new Error('Unable to fetch blocked countries');\r\n }\r\n })\r\n );\r\n }\r\n \r\n // initiateCall(payload: any): Observable<any> {\r\n // return this.ipAddressService.getIpAddressInfo().pipe(\r\n // switchMap(ipAddressInfo => {\r\n // const params = {\r\n // 'Content-Type': 'application/json',\r\n // 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token'),\r\n // 'ip-address': ipAddressInfo.ip,\r\n // 'ip-country': ipAddressInfo.address.country\r\n // };\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/initiate/call', payload, httpOptions);\r\n // })\r\n // );\r\n // }\r\n getIncomingCallToken(deviceId: any) {\r\n const headers = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\r\n }\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n const params = new HttpParams().set('deviceId', deviceId);\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/twilio/incomingcall/token/web', { headers, params });\r\n }\r\n getOutgoingCallToken(payload: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token'),\r\n 'c2c-request': window.location.hostname\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/generate/token', payload, httpOptions);\r\n }\r\n getCallRecording(payload: {conferenceId: string}) {\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.post(environment.apiUrl + '/utilities/twilio/conference/callrecording', payload, httpOptions);\r\n } \r\n pauseOrResumeRecording(callSid: string,status: any) {\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.post(environment.apiUrl + `/utilities/twilio/update/recording/status?callSid=${callSid}&status=${status}`,{}, httpOptions);\r\n }\r\n getCallStatus(callAuthId: string) {\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')\r\n });\r\n const httpOptions = { headers: headers };\r\n return this.http.get(environment.apiUrl + `/utilities/twilio/call/status/${callAuthId}`, httpOptions);\r\n }\r\n\r\n //sms api\r\n sendSms(c2c_latlong: string, c2c_request: string, dtModel: any): Observable<any> {\r\n return this.fetchBlockedCountries().pipe(\r\n switchMap(blockedCountries => {\r\n return this.ipAddressService.getIpAddressInfo().pipe(\r\n switchMap((ipAddressInfo: any) => {\r\n if (blockedCountries.includes(ipAddressInfo.address.countryCode)) {\r\n return throwError({ message: ['User from blocked country'] });\r\n } else {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'c2c-latlong': c2c_latlong,\r\n 'c2c-request': c2c_request,\r\n 'ip-address': ipAddressInfo.ip,\r\n 'ip-country': ipAddressInfo.address.country,\r\n };\r\n dtModel = { ...dtModel, proxy: ipAddressInfo.proxy.toString() };\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/send/sms', dtModel, httpOptions).pipe(\r\n catchError(error => {\r\n // Handle HTTP errors here if needed\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n }),\r\n catchError(error => {\r\n // Catch error from getIpAddressInfo\r\n return throwError(error);\r\n })\r\n );\r\n }),\r\n catchError(error => {\r\n // Catch error from fetchBlockedCountries\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n\r\n\r\n\r\n\r\n // sendSms(c2c_latlong: string, c2c_request: string, dtModel: any): Observable<any> {\r\n // return this.ipAddressService.getIpAddressInfo().pipe(\r\n // switchMap(ipAddressInfo => {\r\n // const params = {\r\n // 'Content-Type': 'application/json',\r\n // 'c2c-latlong': c2c_latlong,\r\n // 'c2c-request': c2c_request,\r\n // 'ip-address': ipAddressInfo.ip,\r\n // 'ip-country': ipAddressInfo.address.country\r\n // };\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.post<[]>(environment.apiUrl + '/utilities/ext/ur/send/sms', dtModel, httpOptions);\r\n // })\r\n // );\r\n // }\r\n readContacts(token: string) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/read/contacts', httpOptions);\r\n }\r\n\r\n sentSMS(token: string, pageSize?: string, pageIndex?: string) {\r\n const headers = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token,\r\n }\r\n let params = new HttpParams();\r\n params = params.set('size', pageSize || '10');\r\n params = params.set('page', pageIndex || '1');\r\n const httpOptions = { headers, params };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/sent/', httpOptions);\r\n }\r\n\r\n deleteSMS(token: string, recordIds: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/sms/delete/${recordIds}`, dtModel, httpOptions);\r\n }\r\n\r\n // inboxSMS(token: string) {\r\n // const params = {\r\n // 'Content-Type': 'application/json',\r\n // 'Auth-Key': \"Bearer \" + token\r\n // }\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.get<[]>(environment.apiUrl + '/utilities/sms/inbox', httpOptions);\r\n // }\r\n inboxSMS(token: string, page: number, size: number) {\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n \r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/inbox', httpOptions);\r\n }\r\n readInboxStatus(token: string, recordId: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/sms/markas/read/${recordId}`, dtModel, httpOptions);\r\n }\r\n markAsFavourite(token: string, recordIds: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/sms/mark/favourite/${recordIds}`, dtModel, httpOptions);\r\n }\r\n\r\n markAsUnFavourite(token: string, recordIds: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/sms/mark/unfavourite/${recordIds}`, dtModel, httpOptions);\r\n }\r\n viewfavouriteSMS(token: string, page: number, size: number) {\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n \r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/view/favourite', httpOptions);\r\n }\r\n saveDraft(token: string, dtModel: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/sms/save/draft', dtModel, httpOptions);\r\n }\r\n\r\n viewDraft(token: string, page: number, size: number) {\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n \r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/view/draft', httpOptions);\r\n }\r\n \r\n deleteDraftSMS(token: string, draftIds: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/sms/delete/draft/${draftIds}`, dtModel, httpOptions);\r\n }\r\n\r\n //Address Book \r\n viewContactLists(token: string) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/read/contacts', httpOptions);\r\n }\r\n deleteContact(token: string, phonebookid: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/phonebook/delete/contact/${phonebookid}`, dtModel, httpOptions);\r\n }\r\n updateFavContacts(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/update/favourite', dtModel, httpOptions);\r\n }\r\n // saveContacts(token: string, dtModel: any){\r\n // const params = {\r\n // 'Content-Type': 'application/json',\r\n // 'Auth-Key': \"Bearer \" + token\r\n // }\r\n\r\n // const httpOptions = { headers: new HttpHeaders(params) };\r\n // return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/add/contacts/manually',dtModel, httpOptions);\r\n // }\r\n\r\n uploadImage(token: string, dtModel: any) {\r\n const params = {\r\n //'Content-Type': 'multipart/form-data',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/upload/photo', dtModel, httpOptions);\r\n }\r\n\r\n //Call Histroy \r\n recentCallHistory(token: string,page:number,size:number) {\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n \r\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/recent/calls', httpOptions);\r\n }\r\n\r\n deleteCalls(token: string, recordId: any, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/phonebook/delete/calls/${recordId}`, dtModel, httpOptions);\r\n }\r\n\r\n //SMS History\r\n recentSMSHistory(token: string, page: number, size: number) {\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n \r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/history', httpOptions);\r\n }\r\n\r\n getRecentVoiceRecordingData(token: string, filterData:any, page: number, size: number){\r\n const params = new HttpParams()\r\n .set('page', page.toString())\r\n .set('size', size.toString());\r\n \r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n params: params\r\n };\r\n const filterObj={}\r\n \r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/recent/voicerecording', filterData, httpOptions);\r\n }\r\n\r\n // save voice mail recording \r\n saveVoiceMailReocrding(token: string, recordingData: any, ) {\r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n // params: params\r\n };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/update/recording', recordingData, httpOptions);\r\n }\r\n deleteVoiceRecording(token:string, recordingId: any){\r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n // params: params\r\n };\r\n return this.http.delete<[]>(environment.apiUrl + `/utilities/phonebook/delete/voicerecordings/${recordingId}`, httpOptions);\r\n }\r\n markAsVoiceRecording(token:string, recordingId: any, dtModel: any){\r\n const httpOptions = { \r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + token }),\r\n };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/phonebook/markas/voicemail/read/${recordingId}`,dtModel, httpOptions);\r\n }\r\n editContactById(token: string, id: string) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/search/contactid/' + id, httpOptions);\r\n }\r\n\r\n updateContacts(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/update/contact', dtModel, httpOptions);\r\n }\r\n\r\n uploadPhoto(payload:any) {\r\n let httpOptions = {\r\n headers: new HttpHeaders({\r\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\r\n })\r\n };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/upload/photo', payload, httpOptions);\r\n }\r\n \r\n saveContacts(token: string, payload:any) {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + token }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/add/contacts/manually', payload, httpOptions);\r\n }\r\n\r\n //Dowload csv template \r\n downloadCsvTemplate(token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/download/csv', httpOptions);\r\n }\r\n\r\n //Upload csv contacts \r\n updateCSVContacts(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/add/contacts', dtModel, httpOptions);\r\n }\r\n\r\n //City list \r\n GetAllCityList(_countryId: any, _stateName: any): Observable<string> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.get<string>(environment.apiUrl + '/global/master/ur/citylist/' + _countryId + '/' + _stateName,\r\n httpOptions);\r\n }\r\n //zip list\r\n GetAllZipList(dataModel: any): Observable<string> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.post<string>(environment.apiUrl + '/global/master/ur/postalcodes', dataModel,\r\n httpOptions);\r\n }\r\n\r\n //Get all invoices \r\n GetInvoices(viewType: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/billing/invoices/' + viewType, httpOptions);\r\n }\r\n DownloadInvoice(invoiceId: string, token: string): Observable<[]> {\r\n const httpOptions = {\r\n responseType: 'blob' as 'json',\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n })\r\n };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/billing/invoice/file/' + invoiceId, httpOptions);\r\n }\r\n\r\n GetInvoice(invoiceId: string): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/billing/invoice/' + invoiceId, httpOptions);\r\n }\r\n\r\n //Billing summary \r\n GetBillingSummary(token: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/billing/summary', httpOptions);\r\n }\r\n\r\n //Billing Plan & Pricing\r\n GetAllPlans(token: any): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/billing/tiers', httpOptions);\r\n }\r\n\r\n //Pay Now\r\n payNow(invoiceId: string, cardId: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const data = {\r\n \"invoiceId\": invoiceId,\r\n \"cardId\": cardId\r\n };\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/billing/pay/invoice/${invoiceId}/${cardId}`, data, httpOptions);\r\n }\r\n confirmInvoicePayment(customerId: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + `/utilities/billing/invoice/confirmation/${customerId}`,{}, httpOptions);\r\n }\r\n\r\n loadStripeMethods(sessionid: string, token: string): Observable<[]> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/ext/duplicate/card/' + sessionid, httpOptions);\r\n }\r\n\r\n logOut(authKey:any): Observable<[]> {\r\n const auth = { \"Auth-Key\": authKey }\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + authKey }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/logout', {}, httpOptions);\r\n }\r\n\r\n registerFCMToken(payload:any): Observable<[]> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n return this.http.post<[]>(environment.apiUrl + '/firebase/register/device', payload, httpOptions);\r\n }\r\n getNotificationList(pageIndex?: string, pageSize?: string) {\r\n let params = new HttpParams();\r\n params = params.set('size', pageSize || '10');\r\n params = params.set('page', pageIndex || '1');\r\n const headers = { 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') };\r\n const httpOptions = { headers, params };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/stored/notification', httpOptions);\r\n }\r\n getTotalUnreadCount(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/sms/notification/count', httpOptions);\r\n }\r\n markNotification(payload: any) {\r\n //const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json'}) };\r\n return this.http.post<[]>(environment.apiUrl + '/firebase/ur/markas/seen/' + payload.notificationId + '/' + payload.status, {}, httpOptions);\r\n }\r\n deleteNotification(payload: any) {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n return this.http.post<[]>(environment.apiUrl + '/firebase/markas/seen/' + payload.notificationId + '/' + payload.status, {}, httpOptions);\r\n }\r\n getVoicemailDetails(recordId: string, token: string): Observable<any> {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl +`/utilities/phonebook/play/voicerecordings/${recordId}`, httpOptions);\r\n }\r\n deleteNotifications(token: string, notificationIds: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.get<[]>(environment.apiUrl + `/utilities/sms/delete/notification/${notificationIds}`, httpOptions);\r\n }\r\n getReports( filterData:any, pageIndex?:number,pageSize?:number) {\r\n const filterObj = {\r\n accountStatus: filterData.accountStatus || \"\",\r\n dateType: filterData.dateType || \"\" ,\r\n fieldType: filterData.fieldType || \"\" ,\r\n fieldValue: filterData.fieldValue || \"\",\r\n fromDate: filterData.fromDate || \"\",\r\n pendingDues: filterData.pendingDues,\r\n toDate: filterData.toDate || \"\",\r\n }\r\n const params = new HttpParams()\r\n .set('page', pageIndex?.toString() || '1')\r\n .set('size', pageSize?.toString() || '10');\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')}),\r\n params: params };\r\n return this.http.post<[]>(environment.apiUrl+ '/utilities/report/user/details',filterObj, httpOptions);\r\n }\r\n getReportsFilter(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.get<[]>(environment.apiUrl+ '/utilities/report/dropdown', httpOptions);\r\n }\r\n getSyncReportData(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json','Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')})};\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/report/update/cache', {}, httpOptions);\r\n }\r\n getDownloadCSV(filterData: any, pageIndex:any, pageSize:any): Observable<any> {\r\n const filterObj = {\r\n accountStatus: filterData.accountStatus || \"\",\r\n dateType: filterData.dateType || \"\" ,\r\n fieldType: filterData.fieldType || \"\" ,\r\n fieldValue: filterData.fieldValue || \"\",\r\n fromDate: filterData.fromDate || \"\",\r\n pendingDues: filterData.pendingDues,\r\n toDate: filterData.toDate || \"\",\r\n }\r\n const params = new HttpParams()\r\n .set('page', pageIndex > 0 ? pageIndex.toString() : '1')\r\n .set('size', pageSize.toString());\r\n const httpOptions = { headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')}), params: params};\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/report/csv/download' ,filterObj, httpOptions);\r\n }\r\n getDeleteFile(filePathValue: string):Observable<any> {\r\n const httpOptions = { \r\n body: { filePath: filePathValue },\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/report/download/complete' , httpOptions);\r\n }\r\n\r\n getDownloadPDF(filterData: any, pageIndex:any, pageSize:any){\r\n const filterObj = { \r\n accountStatus: filterData.accountStatus || \"\",\r\n dateType: filterData.dateType || \"\" ,\r\n fieldType: filterData.fieldType || \"\" ,\r\n fieldValue: filterData.fieldValue || \"\",\r\n fromDate: filterData.fromDate || \"\",\r\n pendingDues: filterData.pendingDues,\r\n toDate: filterData.toDate || \"\",\r\n }\r\n const params = new HttpParams()\r\n .set('page', pageIndex > 0 ? pageIndex.toString() : '1')\r\n .set('size', pageSize.toString());\r\n const httpOptions = {headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')}), params: params};\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/report/pdf/download' ,filterObj, httpOptions);\r\n }\r\n getSuspendCategoriesData(){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/report/suspend/category/dropdown' , httpOptions);\r\n }\r\n getUserDetailsForSuspend(userIds:any){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<any[]>(`${environment.apiUrl}/admin/suspension/data/${encodeURIComponent(userIds)}`, null, httpOptions);\r\n }\r\n suspendUsers(userData:any){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<any[]>(`${environment.apiUrl}/admin/suspend/user`, userData, httpOptions);\r\n }\r\n resumeUser(userData: any){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<any[]>(`${environment.apiUrl}/admin/resume/user`, userData, httpOptions);\r\n }\r\n resumeUnpaidUsers(userData: any){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<any[]>(`${environment.apiUrl}/admin/resume/unpaid/user`, userData, httpOptions);\r\n }\r\n deleteUser(userData: any){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.post<any[]>(`${environment.apiUrl}/admin/delete/user`, userData, httpOptions);\r\n }\r\n \r\n deleteUserAccount(){\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n // return this.http.post<any[]>(`${environment.apiUrl}/utilities/ext/delete/user/`, userData, httpOptions);\r\n return this.ipAddressService.getIpAddressInfo().pipe(\r\n switchMap((ipAddressInfo: any) => {\r\n return this.http.post<any>(\r\n `${environment.apiUrl}/utilities/ext/delete/user/${this.platform}/${ipAddressInfo.ip}`,\r\n null,\r\n httpOptions\r\n );\r\n }),\r\n catchError((error) => {\r\n // Properly catch errors\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n getIPDetailsForCall(recordId:any, callStatus:any, deviceId:any): Observable<any> {\r\n return this.ipAddressService.getIpAddressInfo().pipe(\r\n switchMap((ipAddressInfo: any) => {\r\n const IpObj = {\r\n 'ipAddress': ipAddressInfo.ip,\r\n 'ipCountry': ipAddressInfo.address.country,\r\n 'recordId': recordId,\r\n 'callStatus': callStatus,\r\n 'deviceId': deviceId\r\n };\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n \r\n return this.http.post<[]>(environment.apiUrl + '/utilities/twilio/incoming/call/ip', IpObj, httpOptions).pipe(\r\n catchError(postError => {\r\n // console.log('Error during HTTP POST request:', postError);\r\n return throwError(postError);\r\n })\r\n );\r\n }),\r\n catchError(ipError => {\r\n // console.log('Error fetching IP address info:', ipError);\r\n return throwError(ipError);\r\n })\r\n );\r\n }\r\n\r\ngetIPDetailsForSMS(recordId:any): Observable<any> {\r\n \r\n return this.ipAddressService.getIpAddressInfo().pipe(\r\n switchMap((ipAddressInfo: any) => {\r\n const IpObj = {\r\n 'ipAddress': ipAddressInfo.ip,\r\n 'ipCountry': ipAddressInfo.address.country,\r\n 'recordId':recordId,\r\n \r\n };\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/twilio/inbound/sms/ip', IpObj, httpOptions);\r\n }, \r\n catchError(error => {\r\n // Catch error from getIpAddressInfo\r\n return throwError(error);\r\n })\r\n )\r\n );\r\n }\r\n \r\n GetAllAvailableCountryList(): Observable<string> {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };\r\n return this.http.get<string>(environment.apiUrl + '/global/master/ur/dedicated/countrylist')\r\n // return this.http.get<string>(environment.apiUrl + '/global/master/ur/countrylist', httpOptions);\r\n }\r\n\r\n getUserSettings(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json','Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')})};\r\n return this.http.get<string>(environment.apiUrl + '/utilities/ext/settings', httpOptions)\r\n }\r\n\r\n updateDialCodePreference(settings: any) {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token') }) };\r\n return this.http.put<[]>(environment.apiUrl + '/utilities/ext/update/settings', settings, httpOptions)\r\n }\r\n\r\n updateLongPressTime(time: number) {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token') }) };\r\n return this.http.put<[]>(environment.apiUrl + '/utilities/ext/update/longpress/' + time,{}, httpOptions)\r\n }\r\n\r\n exportToCSV(){\r\n const httpOptions = { headers: new HttpHeaders({'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')}),responseType: 'blob' as 'json'};\r\n return this.http.get<string>(environment.apiUrl + '/utilities/phonebook/download/contacts', httpOptions)\r\n }\r\n\r\n getDialPreferenceNums(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json','Auth-Key': 'Bearer ' + localStorage.getItem('ext_token')})};\r\n return this.http.get<string>(environment.apiUrl + '/utilities/ext/dial/preference/dropdown', httpOptions)\r\n }\r\n updateVASSettings(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/value/added/service', dtModel, httpOptions);\r\n }\r\n updateVoiceMailSettings(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/update/voicemail/setting', dtModel, httpOptions);\r\n }\r\n updateVoiceRecordSettings(token: string, dtModel: any) {\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/utilities/ext/update/call/recording/setting', dtModel, httpOptions);\r\n }\r\n\r\n getManualLinks(deviceType: string): string {\r\n return `${environment.apiUrl}/landing/support/ur/user/manual/${deviceType}`;\r\n }\r\n\r\n updateSignupProfile(body: any) {\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': 'Bearer ' + localStorage.getItem('ext_token') }) };\r\n return this.http.put<any>(environment.apiUrl + '/utilities/ext/ur/update/signup/profile' ,body, httpOptions)\r\n }\r\n getAdminSettings(){\r\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')})};\r\n return this.http.get<[]>(environment.apiUrl+ '/admin/settings', httpOptions);\r\n }\r\n updateActions(token: string, dtModel: any){\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/admin/change/settings', dtModel, httpOptions);\r\n }\r\n updateValueAddedServices(token: string, dtModel: any){\r\n const params = {\r\n 'Content-Type': 'application/json',\r\n 'Auth-Key': \"Bearer \" + token\r\n }\r\n const httpOptions = { headers: new HttpHeaders(params) };\r\n return this.http.post<[]>(environment.apiUrl + '/admin/value/added/service', dtModel, httpOptions);\r\n }\r\n \r\n deleteAdminUsers(token: string, userIds: string) { // Change type to string\r\n const httpOptions = { \r\n headers: new HttpHeaders({ \r\n 'Content-Type': 'application/json', \r\n 'Auth-Key': 'Bearer ' + token \r\n })\r\n };\r\n return this.http.delete<[]>(environment.apiUrl + `/admin/delete/value/usage/${userIds}`, httpOptions);\r\n }\r\n \r\n getUserInformation(twilioAuthId: string){\r\n const httpOptions = { \r\n headers: new HttpHeaders({ \r\n 'Content-Type': 'application/json', \r\n 'Auth-Key': 'Bearer ' + this.token \r\n })\r\n };\r\n return this.http.get<[]>(environment.apiUrl + '/utilities/twilio/c2c/information/'+twilioAuthId, httpOptions);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Call } from '@twilio/voice-sdk';\r\nimport { TwilioService } from './twilio.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class NotificationService {\r\n twilioCallData?: Call;\r\n twilioAuthId?: string;\r\n constructor(\r\n private twilioService: TwilioService\r\n ){\r\n\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.addEventListener('message', this.handleServiceWorkerMessage.bind(this));\r\n }\r\n }\r\n\r\n redirectUrl = window.location.href;\r\n showNotification(callData :any) {\r\n this.twilioAuthId = callData.customParameters.get('twilioAuthId');\r\n this.twilioCallData = callData;\r\n const incomingNumber = callData.parameters.From;\r\n const callerName = callData.customParameters.get('name');\r\n const callerImage = callData.customParameters.get('image');\r\n if (('serviceWorker' in navigator))\r\n {\r\n navigator.serviceWorker.ready.then((registration:any) => {\r\n const options = {\r\n body: `Incoming call from ${callerName || incomingNumber}`,\r\n icon: callerImage,\r\n actions: [\r\n { \r\n action: 'accept', \r\n title: 'Accept', \r\n icon: '../../../assets/images/notification-icons/call-accept-icon.png' \r\n },\r\n { \r\n action: 'reject', \r\n title: 'Reject', \r\n icon: '../../../assets/images/notification-icons/call-reject-icon.jpg' \r\n }\r\n ],\r\n data: {\r\n url: this.redirectUrl,\r\n },\r\n requireInteraction: true,\r\n \r\n };\r\n registration.showNotification('Icoming Call', options);\r\n });\r\n }\r\n }\r\n\r\n private handleServiceWorkerMessage(event: MessageEvent) {\r\n if (!event.data) return;\r\n \r\n switch (event.data.action) {\r\n case 'accept':\r\n this.onNotificationAccept();\r\n break;\r\n case 'reject':\r\n this.onNotificationReject();\r\n break;\r\n default:\r\n console.log('default action:');\r\n break;\r\n }\r\n }\r\n onNotificationAccept() {\r\n this.twilioService.callhandleFromNotification.next({ callStatus: 'accept'})\r\n }\r\n \r\n onNotificationReject() {\r\n this.twilioService.callhandleFromNotification.next({ callStatus: 'reject'})\r\n }\r\n \r\n}\r\n\r\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable, of, throwError } from 'rxjs';\nimport { catchError, shareReplay, tap } from 'rxjs/operators';\nimport { Device, Call } from '@twilio/voice-sdk';\nimport { ExtensionService } from './extension.service';\nimport { NotificationService } from './Notification.service';\nimport { environment } from '../environments/environments';\n\nexport interface DialPayload {\n number: string;\n name: string;\n img: string;\n callerId:string;\n isDialFromHistory:boolean;\n from:string;\n}\n\n@Injectable({\n providedIn: 'root' \n})\nexport class TwilioService {\n \n openInProgressDialpad = new BehaviorSubject<boolean>(false);\n currentCall = new BehaviorSubject<Call | null>(null);\n currentCallState = new BehaviorSubject<any>('none'); //in-progress, out-progress, none\n device:any;\n incomingCallToken?:string;\n outgoingCallToken?:string;\n callType = new BehaviorSubject<string>('NIL');\n isIncomingCallPicked = new BehaviorSubject<boolean>(false); // for both incoming and outgoing\n token:any = localStorage.getItem('ext_token');\n isNewContactAdded = new BehaviorSubject<boolean>(false);\n updateRecentCall = new BehaviorSubject<boolean>(false);\n callhandleFromNotification = new BehaviorSubject<any>({});\n\n endCall = new BehaviorSubject<boolean>(false);\n dialNumberFromOtherModule = new BehaviorSubject<DialPayload>({ number: '', name: '', img: '', callerId: '', isDialFromHistory: false, from: '' });\n\n toggleCallerIdAlert = new BehaviorSubject<boolean>(true);\n isTrialOver = new BehaviorSubject<boolean>(false);\n isPaymentDue = new BehaviorSubject<boolean>(false);\n isAvailableNumber = new BehaviorSubject<boolean>(false);\n callerIdList = new BehaviorSubject<any[]>([]);\n triggerSMSReload = new BehaviorSubject<boolean>(false);\n\n private tokenInitialized = false;\n private tokenInitialization$: Observable<any> | null = null;\n deviceId: any;\n conferenceCallInfo: any;\n\n constructor(\n private http: HttpClient, \n private extensionService: ExtensionService,\n private notificationSerivce: NotificationService\n ) {\n this.initializeToken();\n }\n\n private initializeToken() {\n if (this.tokenInitialized) {\n return this.tokenInitialization$ || of(null);\n }\n\n this.tokenInitialization$ = this.extensionService.getIncomingCallToken(this.deviceId).pipe(\n tap((data: any) => {\n this.incomingCallToken = data.token;\n localStorage.setItem('in-token', data.token);\n this.tokenInitialized = true;\n console.log('dfdfdsfdsfds')\n this.initializeDevice();\n }),\n catchError(error => {\n console.error('Error initializing Twilio token:', error);\n return throwError(() => error);\n }),\n shareReplay(1) // Cache the result for subsequent subscribers\n );\n\n return this.tokenInitialization$;\n }\n\n public initializeTwilioDevice(deviceId: any) {\n this.deviceId = deviceId;\n if (this.tokenInitialized && this.incomingCallToken) {\n this.initializeDevice();\n } else {\n this.initializeToken().subscribe();\n }\n }\n\n private initializeDevice() {\n if (this.device) {\n this.device.destroy();\n }\n\n if (!this.incomingCallToken) {\n console.error('No Twilio token available');\n return;\n }\n\n this.device = new Device(this.incomingCallToken, { \n allowIncomingWhileBusy: true,\n closeProtection: true\n });\n console.log(\"device created\")\n \n this.device.register();\n\n this.device.on('incoming', (call: Call) => {\n console.log(\"incoming call\",call)\n this.currentCall.next(call);\n this.callType.next('INCOMING');\n this.currentCallState.next('incoming');\n this.notificationSerivce.showNotification(call);\n });\n\n this.device.on('error', (error: any) => {\n console.error('Twilio Device Error:', error);\n // Reset initialization state on error to allow retry\n this.tokenInitialized = false;\n });\n\n this.device.on('registered', () => {\n console.log('Twilio Device registered successfully');\n });\n\n this.device.on('unregistered', () => {\n console.log('Twilio Device unregistered');\n this.tokenInitialized = false;\n });\n }\n\n // onIncomingCall(){\n // this.device.on('incoming', (call:any) => {\n // console.log(call);\n \n // //call.accept();\n // });\n // }\n saveContact(payload: any): Observable<[]> {\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')}) };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/add/contacts/manually', payload, httpOptions);\n }\n updateContact(payload:any){\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + this.token}) };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/update/contact', payload, httpOptions);\n }\n \n deleteContact(id:string){\n let payload = {\n phonebookid: id\n }\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/delete/contact/'+id,payload, httpOptions);\n }\n getContactList(){\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/read/contacts', httpOptions);\n }\n\n addContactToFavourite(payload: any){\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/update/favourite', payload, httpOptions);\n }\n\n getFavouritContacts(){\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/favourite/contacts', httpOptions);\n }\n\n getRecentCalls(pageIndex?: string, pageSize?: string,){\n // let params = new HttpParams();\n // params = params.set('size', pageSize);\n // params = params.set('page', pageIndex);\n const headers = { 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') };\n const httpOptions ={headers}\n return this.http.get<[]>(environment.apiUrl + '/utilities/phonebook/recent/calls', httpOptions);\n }\n deleteRecentCallLog(id:string| string[]){\n let payload = {\n recordId: id\n }\n const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }) };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/delete/calls/'+id,payload, httpOptions);\n }\n\n uploadPhoto(payload: any){\n let httpOptions = {\n headers: new HttpHeaders({\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\n })\n };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/upload/photo',payload, httpOptions);\n }\n\n deletePhoto(id:string){\n let payload = {\n phonebookid: id\n }\n let httpOptions = {\n headers: new HttpHeaders({\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\n })\n };\n return this.http.post<[]>(environment.apiUrl + '/utilities/phonebook/delete/photo/'+id,payload, httpOptions);\n }\n\n // toggleCallerIdAlertFn(val: any) {\n // let httpOptions = {\n // headers: new HttpHeaders({\n // 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\n // })\n // };\n // return this.http.put<[]>(environment.apiUrl + '/utilities/softphone/callerid/alert/' + val, {}, httpOptions);\n // }\n\n toggleCoutryCodeToast(val:any){\n let httpOptions = {\n headers: new HttpHeaders({\n 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token')\n })\n };\n return this.http.put<[]>(environment.apiUrl + '/utilities/softphone/countrycode/alert/' + val, {}, httpOptions);\n }\n getToNumber(dialledNo: string, isoCode: string) {\n const httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }),\n params: new HttpParams().set('isoCode', isoCode)\n };\n const params = new HttpParams().set('isoCode', isoCode)\n return this.http.get<[]>(environment.apiUrl + '/utilities/softphone/check/countryCode/' + dialledNo, httpOptions);\n } \n \n addIncomingParticipant(participantId: string, conferenceId: string) {\n const httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Auth-Key': \"Bearer \" + localStorage.getItem('ext_token') }),\n };\n return this.http.get<[]>(`${environment.apiUrl}/utilities/ext/add/incoming/participant/${participantId}/${conferenceId}`,httpOptions);\n } \n connect(data?: any){\n // this.device.disconnect();\n if (this.device._activeCall) {\n this.device.disconnectAll();\n }\n return this.device.connect({\n params: {\n Token: this.conferenceCallInfo.conferenceId,\n ConferenceName: this.conferenceCallInfo.conferenceName\n },\n rtcConstraints: { audio: { deviceId: 'default' } },\n })\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { environment } from '../environments/environments';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class IncomeingCallSocketService {\r\n\r\n private socket?: WebSocket;\r\n private eventSubject = new Subject<any>();\r\n\r\n connect() {\r\n // Replace with your WebSocket URL\r\n this.socket = new WebSocket(`${environment.websocketUrl}incoming/call`);\r\n\r\n this.socket.onopen = () => {\r\n console.log(\"WebSocket connected\");\r\n\r\n // Authenticate (if needed)\r\n const authMessage = {\"incomingCall\":{\r\n \"userId\": localStorage.getItem('userId')\r\n }}\r\n // {\r\n // userId: localStorage.getItem('userId'),\r\n // authKey: localStorage.getItem('ext_token')\r\n // };\r\n setInterval(() =>{\r\n this.socket?.send(JSON.stringify(authMessage));\r\n },1000)\r\n };\r\n\r\n this.socket.onmessage = (msg) => {\r\n // console.log(\"WS RAW:\", msg.data);\r\n try {\r\n const data = JSON.parse(msg.data);\r\n this.eventSubject.next(data);\r\n } catch (e) {\r\n console.error(\"WS PARSE ERROR:\", msg.data);\r\n }\r\n };\r\n\r\n this.socket.onerror = (err) => {\r\n console.error(\"WebSocket Error:\", err);\r\n };\r\n\r\n this.socket.onclose = () => {\r\n console.warn(\"WebSocket disconnected\");\r\n setTimeout(() => this.connect(), 100); // Auto-reconnect\r\n };\r\n }\r\n\r\n listen(): Observable<any> {\r\n return this.eventSubject.asObservable();\r\n }\r\n}\r\n","\nimport { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { Call, Device } from '@twilio/voice-sdk';\nimport { ExtensionService } from '../../service/extension.service';\nimport { TwilioService } from '../../service/twilio.service';\nimport { environment } from '../../environments/environments';\nimport swal from 'sweetalert2';\nimport { keypad } from '../../../keypad';\nimport { interval, Subscription } from 'rxjs';\n\n\n\ninterface CallDetails {\n callSid: string;\n callStatus: string;\n}\ninterface CallStatusResponse {\n callDetails: CallDetails;\n response: string;\n errorType: number;\n message: string;\n status: number;\n}\n\n@Component({\n selector: 'lib-call-progress',\n templateUrl: './call-progress.component.html',\n styleUrls: ['./call-progress.component.css']\n})\nexport class CallProgressComponent implements OnInit, OnChanges, AfterViewInit {\n @Input() callData: any;\n @Input() selectedCallerId: any;\n @Input() newIncomingCallData?: Call;\n @Input() newIncomingCallsList: any = [];\n @Input() deviceId: any;\n @Output() endCallEvent: EventEmitter<void> = new EventEmitter<void>();\n @Output() incomingCallsNewInfo: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() minimiseEvent: EventEmitter<boolean> = new EventEmitter<boolean>();\n device?: Device;\n call?: Call | any;\n showRingAnimation: boolean = false;\n timer: string = '00:00';\n intervalId: any;\n showKeypad: boolean = false;\n keypadVal = keypad;\n callInput: string = '';\n isMute: boolean = false;\n disbaleEndCallBtn: boolean = true;\n showClearBtn: boolean = false;\n isCollops = false;\n currentCall: any;\n // Conference state flag\n isConference: boolean = false;\n isOutgoingCall: boolean = true;\n // Incoming call variables\n incomingCallDiv: boolean = false;\n //@Output() showCallProgressEvent: EventEmitter<void> = new EventEmitter<void>();\n @Output() incomingCallInitiated: EventEmitter<void> = new EventEmitter<void>();\n\n // Recording variables\n callSid: any;\n isRecording: boolean = false;\n isPaused: boolean = false;\n timerSubscription?: Subscription;\n timeElapsed = 0; // in seconds\n recordCall: boolean = false;\n incomingCallSid: any;\n callStatus: string = 'ringing';\n incomingRecordCall?: any;\n selectedIncomingCall: any;\n showContactsPanel: boolean = false;\n isAddRemoveParticipant: boolean = false;\n isConcurrentIncoming: boolean = false;\n heldCall?: Call | any;\n isCallOnHold: boolean = false;\n contacts: any[] = [];\n currentCallList: any[] = [];\n conferenceId: any;\n allParticipentList: any;\n isClickExpand: boolean = false;\n isCallInProgress!: boolean;\n isCurrentIncomingCallList: any = [];\n isConferenceCallHold: boolean = false;\n // contacts: any[] = [\n // { name: 'Pamela Cox', title: 'Product Designer', img: 'assets/images/user.jpg' },\n // { name: 'Roger S. Wood', title: 'JavaScript Programmer', img: 'assets/images/user.jpg' },\n // { name: 'Victor Blackston', title: 'Database Administrator', img: 'assets/images/user.jpg' },\n // { name: 'Tammy Rios', title: 'Support', img: 'assets/images/user.jpg' },\n // { name: 'Carlos Henderson', title: 'Software Architect', img: 'assets/images/user.jpg' },\n // { name: 'Elizabeth Bailey', title: 'HR', img: 'assets/images/user.jpg' }\n // ];\n constructor(private extensionService: ExtensionService, private cdr: ChangeDetectorRef, private twilioService: TwilioService) {\n console.log('Call Progress Component');\n this.call = this.twilioService.device;\n }\n\n ngOnInit() {\n console.log('Call Progress Component ngOnInit');\n // Subscribe to incoming calls from TwilioService\n try {\n this.twilioService.currentCall.subscribe((incoming: any) => {\n if (!incoming) { return; }\n console.log('TwilioService.currentCall emitted:', incoming);\n // console.log('Current call status:', this.call?.status());\n // If there is an ongoing call, show concurrent incoming banner\n console.log('Concurrent incoming detected - showing banner');\n this.isConcurrentIncoming = true;\n this.incomingCallDiv = true;\n // Add to list if not present\n const exists = (this.newIncomingCallsList || []).some((c: any) => c?.parameters?.CallSid === incoming?.parameters?.CallSid);\n if (!exists) {\n this.newIncomingCallsList = [...(this.newIncomingCallsList || []), incoming];\n this.incomingCallsNewInfo.emit(this.newIncomingCallsList);\n }\n this.cdr.detectChanges();\n // }\n });\n } catch (e) {\n console.error('Error subscribing to incoming calls:', e);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['callData']) {\n if (changes['callData'].currentValue?.isIncomingCall) {\n this.incomingCallDiv = true;\n this.call['callInfo'] = JSON.parse(JSON.stringify(this.callData));\n this.cdr.detectChanges();\n } else if (changes['callData'].currentValue?.displayNum || changes['callData'].currentValue?.from) {\n console.log('test-startCall123', changes['callData'].currentValue)\n // this.currentCall = { ...changes['callData'].currentValue, img: 'assets/images/user.jpg' };\n this.startCall(changes['callData'].currentValue);\n }\n }\n if (changes['newIncomingCallsList']) {\n try {\n if (this.newIncomingCallsList.length) {\n // Check if there's an active ongoing call\n this.conferenceId = this.newIncomingCallsList[0].conferenceId;\n this.newIncomingCallsList.forEach(async (res: any) => {\n if (this.currentCallList.length > 0) {\n let index = this.currentCallList.findIndex((item: any) => item.id == res.id);\n if (index == -1 && !res.isLeft) {\n this.currentCallList.push({\n ...res,\n img: 'assets/images/user.jpg',\n isIncomingCall: res.direction == \"incoming-call\",\n isHold: res.isHold,\n isMute: false,\n isConference: res.isConference,\n isAcceptCall: res.direction == \"incoming-call\" ? this.getStatus(res) : true,\n dial: true,\n phone: res.direction == \"incoming-call\" ? res?.from : res?.to,\n participantId: res.id,\n name: res.name || res?.fromName || res?.toName,\n time: this.getTimeDifference(res.joinedAt || new Date().toUTCString()),\n });\n } else if (index != -1 && res.isLeft) {\n if (this.currentCallList[index]?.id == this.currentCall?.id) {\n this.currentCallList.splice(index, 1);\n this.currentCall = this.currentCallList.length > 0 ? this.currentCallList[0] : {};\n if (this.currentCall?.isHold && !this.currentCall?.isConference) {\n await this.onholdOrUnholdParticipant({\n participantId: [this.currentCall?.participantId],\n conferenceId: this.conferenceId,\n hold: false,\n conference: this.currentCall?.isConference\n });\n this.currentCallList[0].isHold = false;\n } else if (this.currentCall?.isHold && this.currentCall?.isConference) {\n let conferenceCalllist = this.currentCallList.filter((item: any) => item.isConference);\n if (conferenceCalllist.length > 0) {\n await this.onholdOrUnholdParticipant({\n participantId: conferenceCalllist.map((item: any) => item.participantId),\n conferenceId: this.conferenceId,\n hold: false,\n conference: this.currentCall?.isConference\n });\n // this.currentCallList.forEach((item: any) => {\n // if (item.isConference) {\n // item.isHold = false;\n // } else {\n // item.isHold = true;\n // }\n // })\n this.isConferenceCallHold = false;\n }\n }\n } else {\n this.currentCallList.splice(index, 1);\n }\n } else if (index != -1) {\n this.currentCallList[index] = {\n ...res,\n img: 'assets/images/user.jpg',\n isIncomingCall: res.direction == \"incoming-call\",\n isHold: res.isHold,\n isMute: false,\n isConference: res.isConference,\n isAcceptCall: res.direction == \"incoming-call\" ? this.getStatus(res) : true,\n dial: true,\n phone: res.direction == \"incoming-call\" ? res?.from : res?.to,\n participantId: res.id,\n name: res.name || res?.fromName || res?.toName,\n time: this.getTimeDifference(res.joinedAt || new Date().toUTCString()),\n };\n }\n if(this.currentCallList.length == 1 && this.currentCallList[0].isHold){\n setTimeout(() => {\n if(this.currentCallList.length == 1 && this.currentCallList[0].isHold) {\n this.onholdOrUnholdParticipant({\n participantId: [this.currentCallList[0].participantId],\n conferenceId: this.conferenceId,\n hold: false,\n conference: this.currentCallList[0].isConference\n });\n }\n }, 1000);\n }\n } else {\n this.currentCallList.push({\n ...res,\n img: 'assets/images/user.jpg',\n isIncomingCall: res.direction == \"incoming-call\",\n isHold: res.isHold,\n isMute: false,\n isConference: res.isConference,\n isAcceptCall: res.direction == \"incoming-call\" ? this.getStatus(res) : true,\n dial: true,\n phone: res.direction == \"incoming-call\" ? res?.from : res?.to,\n participantId: res.id,\n name: res.name || res?.fromName || res?.toName,\n time: this.getTimeDifference(res.joinedAt || new Date().toUTCString()),\n });\n this.timer = '00:00';\n this.startTimer();\n }\n })\n this.currentCall = this.currentCallList.find((item: any) => item.isAcceptCall && !item.isHold);\n this.cdr.detectChanges();\n console.log('currentCallList', this.currentCallList);\n } else if (!this.newIncomingCallsList.length) {\n this.isConcurrentIncoming = false;\n this.incomingCallDiv = false;\n this.cdr.detectChanges();\n this.currentCallList = [];\n this.currentCall ={}\n this.isCallInProgress = false;\n \n this.isConferenceCallHold = false;\n this.stopTimer();\n if(this.twilioService.device){\n this.twilioService.device.disconnectAll();\n }\n if(this.call?.callInfo){\n this.call.disconnect();\n }\n }\n } catch (e) {\n console.log(e);\n }\n }\n }\n\n getStatus(res: any) {\n const statusList = [\"answered\", \"participant-hold\", \"participant-mute\", \"participant-join\", \"queued\", \"in-progress\", \"initiated\", 'ringing', '\"connected\"'];\n if (statusList.includes(res.status) && res.direction != \"incoming-call\") {\n return true;\n } else if (res.direction == \"incoming-call\") {\n return this.isCurrentIncomingCallList.includes(res.id);\n } else {\n return false;\n }\n }\n\n ngAfterViewInit() {\n // this.isRecording = false;\n // setTimeout(() => {\n // this.isRecording = false;\n // }, 3000);\n\n }\n\n GetContactsList() {\n const token = localStorage.getItem('ext_token') || '';\n this.extensionService.readContacts(token).subscribe(\n (res: any) => {\n console.log('API Response:', res);\n\n // Note: Capital B in phoneBook\n if (res && res.phoneBook) {\n this.contacts = res.phoneBook;\n console.log('Contacts array:', this.contacts);\n } else if (Array.isArray(res)) {\n this.contacts = res;\n } else {\n this.contacts = [];\n }\n console.log('Contacts array:', this.contacts);\n this.cdr.detectChanges();\n },\n (error) => {\n console.error('Error fetching contacts:', error);\n this.contacts = [];\n }\n );\n }\n addRes: any;\n async startCall(callData: any) {\n console.log(callData, 'callData');\n try {\n this.showRingAnimation = true;\n const payload = {\n channelId: environment.channelId,\n userId: localStorage.getItem('userId'),\n to: callData.phone,\n fromNumber: callData.from,\n scope: 'local',\n };\n\n const response = await this.initiateCall(payload);\n this.conferenceId = response?.callauth?.id;\n if (response.status == 200) {\n const { id: callAuthId, recordCall } = await this.getCallAuthId(response);\n this.getUserInformation(callAuthId)\n this.recordCall = recordCall; // Store the recordCall value\n const tokenData: any = await this.getOutgoingCallToken(callAuthId);\n await this.connectToDevice(tokenData.token, callData);\n await this.pollCallStatus(callAuthId);\n\n setTimeout(async () => {\n try {\n this.addRes = await this.addParticipantToCall({\n from: callData?.from,\n route: \"OUTGOING\",\n participantNumber: callData?.phone,\n conferenceId: this.conferenceId\n });\n // this.callData = { ...callData, participantId: this.addRes?.participantId, isHold: false, isLeft: false, isIncomingCall: false, isConference: false, isAcceptCall: true };\n // this.call['callInfo'] = JSON.parse(JSON.stringify(this.callData));\n console.log('test111111');\n // this.currentCall = {...this.callData, img: callData.img ||'assets/images/user.jpg'};\n // Initialize isAcceptCall based on current call state to ensure UI renders if already connected\n // this.currentCallList.push({\n // ...this.callData,\n // img: callData.img || 'assets/images/user.jpg',\n // isAcceptCall: true\n // });\n console.log('Initial participantId:', this.addRes?.participantId);\n } catch (e) {\n console.error('Error adding initial participant:', e);\n }\n }, 1000)\n // Poll the status for 30-45 seconds\n } else if (response.status == 201) {\n swal(\"Error\", response.message.join(\"<br/>\"), \"error\");\n console.log('test2')\n this.endCall();\n }\n\n } catch (error) {\n this.showRingAnimation = false;\n this.handleError(error);\n console.log('test3')\n this.endCall();\n }\n }\n\n onHoldCall(c: any) {\n console.log(c, 'dsdsdsdsdsdsadsa');\n this.onholdOrUnholdParticipant({\n participantId: [c.participantId],\n conferenceId: this.conferenceId,\n hold: !c.hold,\n conference: true\n })\n c.hold = !c.hold;\n this.cdr.detectChanges();\n }\n\n async onEndCall(c: any, isAllCallEnd?: boolean) {\n console.log(c, 'dsdsdsdsdsdsadsa');\n let participantId = isAllCallEnd ? 'all' : c.participantId || c.participantId;\n let res: any = await this.getRemoveParticipants(participantId, this.conferenceId);\n if (res?.status == 201 && res?.message == 'participant already left') {\n // this.currentCallList = this.currentCallList.filter((item: any) => item.participantId !== c.participantId);\n // this.currentCall = this.currentCallList.length > 0 ? this.currentCallList[0] : null;\n this.cdr.detectChanges();\n }\n await this.getAllParticipants(this.twilioService.conferenceCallInfo.conferenceSid);\n }\n\n private async initiateCall(payload: any) {\n return await this.extensionService.initiateCall(payload).toPromise();\n }\n\n async onholdOrUnholdParticipant(payload: any) {\n return await this.extensionService.holdParticipant(payload).toPromise();\n }\n\n private async addParticipantToCall(payload: any) {\n return await this.extensionService.addParticipant(payload).toPromise();\n }\n\n private async getCallStatusOfParticipants(participantId: any) {\n return await this.extensionService.getCallStatusOfParticipants(participantId).toPromise();\n }\n\n private async onMuteParticipant(payload: any) {\n return await this.extensionService.onMuteParticipant(payload).toPromise();\n }\n\n private async getRemoveParticipants(participantId: any, conferenceId: any) {\n return await this.extensionService.getRemoveParticipants(participantId, conferenceId).toPromise();\n }\n\n private async getCallAuthId(response: any) {\n return {\n id: response.callauth.id,\n recordCall: response.callauth.recordCall\n };\n }\n\n private async getOutgoingCallToken(callAuthId: string) {\n return await this.extensionService.getConferenceCallToken({ authId: callAuthId }).toPromise();\n }\n\n private async connectToDevice(token: any, callData: any) {\n const options: any = {\n codecPreferences: ['opus', 'pcmu'],\n closeProtection: true,\n };\n\n this.device = new Device(token.value, options);\n this.call = await this.device.connect({\n params: {\n From: callData.from,\n To: callData.phone,\n Env: environment.abb,\n Token: token.id,\n Ext: callData.extNum\n },\n rtcConstraints: { audio: { deviceId: 'default' } },\n });\n console.log('test98998111111', this.call);\n // this.call['callInfo'] = JSON.parse(JSON.stringify(callData));\n this.setupEventListeners();\n }\n\n private setupEventListeners() {\n\n this.startTimer();\n this.device?.on('error', (err) => {\n console.log(err);\n this.showRingAnimation = false;\n this.stopTimer();\n });\n\n this.call?.on('error', (error: any) => {\n this.showRingAnimation = false;\n this.stopTimer();\n });\n\n this.call?.on('disconnect', (item: any) => {\n console.log('test-disconnect')\n // this.endCall();\n });\n\n this.call?.on('ringing', () => {\n });\n\n this.call?.on('reject', () => {\n console.log('test5')\n this.endCall();\n });\n\n this.call?.on('accept', () => {\n this.showRingAnimation = false;\n this.disbaleEndCallBtn = false;\n // Ensure the active outgoing call is marked as accepted so the UI switches to the connected view\n try {\n const pid = this.callData?.participantId;\n if (Array.isArray(this.currentCallList) && this.currentCallList.length) {\n const idx = this.currentCallList.findIndex((c: any) => (pid && c?.participantId === pid) || (!pid && c?.phone === this.callData?.phone));\n if (idx !== -1) {\n this.currentCallList[idx].isAcceptCall = true;\n this.currentCall = this.currentCallList[idx];\n }\n }\n this.cdr.detectChanges();\n } catch (e) {\n console.log('Error updating accept state:', e);\n }\n // Start recording if recordCall is true and call is accepted for 30 seconds\n // if (this.recordCall) {\n // setTimeout(() => {\n // if (this.isRecording) return; // If already recording, skip\n // this.startRecording();\n // }, 30000);\n // } else {\n // this.stopRecording();\n // }\n });\n this.call?.on('messageReceived', (message: any) => {\n });\n }\n\n private startTimer() {\n let seconds = 0;\n this.intervalId = setInterval(() => {\n seconds++;\n this.timer = this.formatTime(seconds);\n this.cdr.detectChanges();\n }, 1000);\n }\n\n private stopTimer() {\n clearInterval(this.intervalId);\n this.timer = '00:00';\n }\n\n private formatTime(totalSeconds: number): string {\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return `${this.pad(minutes)}:${this.pad(seconds)}`;\n }\n\n private pad(value: number): string {\n return value < 10 ? `0${value}` : `${value}`;\n }\n private handleError(error: any) {\n swal(\"Error\", error, \"error\");\n }\n\n // endCall() {\n // console.log('endCall() called');\n // console.log('Current call:', this.call?.parameters['From']);\n // console.log('Held call exists:', !!this.heldCall);\n\n // // Disconnect the current active call\n // if (this.call) {\n // this.call.disconnect();\n // this.call = undefined;\n // }\n\n // this.showRingAnimation = false;\n // this.stopTimer();\n\n // // If there's a held call, make it active\n // if (this.heldCall) {\n // console.log('Resuming held call:', this.heldCall.parameters['From']);\n\n // // Make held call the active call\n // this.call = this.heldCall;\n // this.heldCall = undefined;\n // // this.isCallOnHold = false;\n // this.isCallOnHold = !!this.heldCall;\n\n\n // // Unmute the resumed call\n // this.call.mute(false);\n\n // // Update UI with the resumed call info\n // const fromNumber = this.call.parameters['From'];\n // const callerName = this.call.customParameters?.get('name') || '-';\n // const callerImg = this.call.customParameters?.get('image') || 'assets/images/user.jpg';\n\n // this.callData = {\n // ...this.callData,\n // phone: fromNumber,\n // displayNum: fromNumber,\n // name: callerName,\n // img: callerImg\n // };\n\n // // Restart timer for the resumed call\n // this.startTimer();\n // this.disbaleEndCallBtn = false;\n\n // console.log('Held call is now active:', this.callData);\n // this.cdr.detectChanges();\n // } else {\n // // No held call, completely end\n // console.log('No held call, ending completely');\n // this.endCallEvent.emit();\n // this.maximiseDialpad();\n // }\n // }\n\n async endCall(isAllCallEnd?: boolean) {\n console.log('endCall() called');\n // console.log('Current call:', this.call?.parameters['From']);\n console.log('Held call exists:', !!this.heldCall);\n // Leaving conference state when ending current call action\n this.isConference = false;\n\n // if (this.call) {\n // this.call.disconnect();\n // this.call.reject();\n // this.call = undefined;\n // }\n\n this.showRingAnimation = false;\n if (isAllCallEnd) {\n this.stopTimer();\n this.onEndCall({}, isAllCallEnd);\n this.currentCallList = [];\n this.endCallEvent.emit();\n } else {\n this.onEndCall(this.currentCall, isAllCallEnd);\n this.currentCallList = this.currentCallList.filter((c: any) => c?.participantId !== this.currentCall.participantId);\n if (this.currentCallList.length > 0) {\n this.currentCallList[0].isHold = false;\n this.currentCall = this.currentCallList[0];\n await this.onholdOrUnholdParticipant({\n participantId: [this.currentCall?.participantId],\n conferenceId: this.conferenceId,\n hold: false,\n isConference: this.currentCall?.isConference\n });\n } else {\n this.currentCall = null;\n this.currentCallList = [];\n this.endCallEvent.emit();\n }\n }\n // if (this.heldCall) {\n // if (this.call) {\n // // this.call.disconnect();\n // // this.call = undefined;\n // this.onEndCall(this.call?.callInfo, isAllCallEnd);\n // }\n // console.log('Resuming held call:', this.heldCall.parameters['From']);\n\n // // Promote held call\n // // this.call = this.heldCall;\n // this.heldCall = undefined;\n // // this.isCallOnHold = false;\n // // this.incomingCallDiv = false; // Ensure UI renders\n\n // // this.call.mute(false);\n\n // // Update callData\n // const fromNumber = this.call.parameters['From'];\n // const callerName = this.call.customParameters?.get('name') || '-';\n // const callerImg = this.call.customParameters?.get('image') || 'assets/images/user.jpg';\n\n // this.callData = {\n // phone: fromNumber,\n // displayNum: fromNumber,\n // name: callerName,\n // img: callerImg\n // };\n\n // this.startTimer();\n // this.disbaleEndCallBtn = false;\n\n // // Force UI update\n // setTimeout(() => this.cdr.detectChanges());\n\n // console.log('Held call is now active:', this.callData);\n // } else {\n // console.log('No held call, ending completely');\n // console.log('test6')\n // this.endCallEvent.emit();\n // if (this.call) {\n // this.call.disconnect();\n // this.onEndCall(this.call?.callInfo, isAllCallEnd);\n // // this.call = undefined;\n // }\n // this.maximiseDialpad();\n // }\n }\n\n\n async toggleMute(isConference?: boolean) {\n await this.onMuteParticipant({\n participantId: [this.currentCall?.participantId],\n conferenceId: this.conferenceId,\n mute: !this.isMute,\n })\n this.isMute = !this.isMute;\n // this.call?.mute(this.isMute);\n // if (isConference) {\n this.currentCall.isMute = this.isMute;\n // } else {\n\n // }\n }\n toggleKeypad() {\n this.showKeypad = !this.showKeypad;\n this.callInput = '';\n }\n toggleContactsPanel(isRemove?: boolean) {\n if (isRemove) {\n this.showContactsPanel = false;\n this.isAddRemoveParticipant = !this.isAddRemoveParticipant;\n } else {\n this.isAddRemoveParticipant = false;\n this.showContactsPanel = !this.showContactsPanel;\n this.GetContactsList();\n }\n }\n\n addRemoveParticipant() {\n // const conferenceSId = this.addRes?.conferenceSid;\n this.isAddRemoveParticipant = !this.isAddRemoveParticipant;\n this.allParticipentList = this.getAllParticipants(this.twilioService.conferenceCallInfo.conferenceSid);\n }\n\n async add(data?: any) {\n // if(data?.status != 'ringing'){\n this.conferenceId = this.twilioService.conferenceCallInfo.conferenceId;\n if (this.currentCallList.length > 1 && this.currentCall?.isAcceptCall) {\n if (this.currentCall?.isConference) {\n this.isConferenceCallHold = true;\n this.currentCallList.forEach((res) => {\n if (res.isConference) {\n res.isHold = true;\n this.onholdOrUnholdParticipant({\n participantId: [res.participantId],\n conferenceId: this.conferenceId,\n hold: true,\n conference: res.isConference\n });\n }\n })\n } else {\n this.isConferenceCallHold = false;\n const index = this.currentCallList.findIndex((item: any) => item.participantId == this.currentCall?.participantId);\n if (index != -1) {\n // this.currentCallList[index].isHold = true;\n }\n await this.onholdOrUnholdParticipant({\n participantId: this.currentCall?.isIncomingCall ? [this.currentCall?.id] : [this.currentCall?.participantId],\n conferenceId: this.conferenceId,\n hold: true,\n conference: this.currentCall?.isConference\n });\n data.isHold = false;\n }\n }\n // let incomingCallData = this.currentCallList.filter((item: any) => item.isIncomingCall && item.isAcceptCall);\n if (this.currentCallList.length > 1) {\n // this.call = await this.twilioService.connect('');\n this.twilioService.addIncomingParticipant(data?.id, this.twilioService.conferenceCallInfo.conferenceId).subscribe((res: any) => {\n console.log(res, 'bhhhhhhhhhhhhhhhhhhh')\n this.isCurrentIncomingCallList.push(data?.id || data?.participantId);\n data.isAcceptCall = true;\n this.currentCall = data;\n })\n } else {\n this.call = await this.twilioService.connect('');\n this.isCurrentIncomingCallList.push(data?.id);\n console.log(this.call, 'callConnect');\n data.isAcceptCall = true;\n this.currentCall = data;\n }\n // } else if(data?.status == 'ringing'){\n // this.twilioService.addIncomingParticipant(data?.id, this.twilioService.conferenceCallInfo.conferenceId).subscribe((data: any) => {\n // console.log(data,'bhhhhhhhhhhhhhhhhhhh')\n // })\n // }\n\n // this.device = new Device();/\n // Device.connect({ conferenceName: 'my-conference-room' });\n // this.device = new Device({ conferenceName: 'my-conference-room' });\n }\n\n rejectCallFromList(data?: any) {\n console.log(data, '266565655')\n // this.twilioService.rejectIncomingParticipant(data?.id, this.twilioService.conferenceCallInfo.conferenceId).subscribe((data: any) => {\n // console.log(data,'bhhhhhhhhhhhhhhhhhhh')\n // })\n }\n async callContact(contact: any) {\n console.log('Adding participant:', contact);\n console.log('this.call', this.call)\n // console.log('this.call', this.call.status())\n // Check if there's an active call\n // if (!this.call || this.call.status() !== 'open') {\n // console.error('No active call');\n // return;\n // }\n\n // Get the phone number from the contact\n const phoneNumber = contact?.numbersList?.[0]?.number;\n const currentCall = this.currentCallList.find((c: any) => c?.phone === phoneNumber);\n if (!phoneNumber || currentCall) {\n console.error('No phone number found for contact');\n return;\n }\n\n try {\n if (this.isConference) {\n let data: any = await this.addParticipantToCall({\n from: this.callData?.from || this.selectedCallerId?.number,\n route: \"OUTGOING\",\n participantNumber: phoneNumber,\n conferenceId: this.conferenceId\n });\n this.callData = {\n // ...this.callData,\n phone: phoneNumber,\n displayNum: phoneNumber,\n name: contact?.name || `${contact?.firstName} ${contact?.lastName}` || phoneNumber,\n img: contact?.img || 'assets/images/user.jpg',\n participantId: data?.participantId,\n from: this.selectedCallerId?.number,\n isIncomingCall: false,\n isHold: false,\n isLeft: false,\n isConference: true\n };\n this.cdr.detectChanges();\n console.log(this.callData, 'this.callData5656')\n console.log('test1111115555555555');\n this.currentCall = this.callData;\n // this.currentCallList.push({...this.callData});\n console.log(\"Participant added to conference:\", phoneNumber);\n this.showRingAnimation = false;\n } else {\n this.currentCallList.forEach(async (c: any) => {\n if (c?.participantId && !c?.isHold) {\n c.isHold = true;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n }\n });\n // Put current call on hold\n // this.heldCall = this.call;\n this.isCallOnHold = true;\n // this.heldCall.mute(true);\n // this.heldCall['parameters']['caller_name'] = { ...this.callData }\n // this.call=null\n // Close contacts panel and show ring animation\n this.showContactsPanel = false;\n this.showRingAnimation = true;\n // Update UI to reflect the new outbound leg being dialed\n const contactName = [contact?.firstName, contact?.middleName, contact?.lastName]\n .filter(Boolean)\n .join(' ');\n // this.call['callInfo'] = JSON.parse(JSON.stringify(this.callData));\n\n // Get the conference ID from the current call or use the stored one\n // const conferenceId = this.conferenceId;\n\n if (!this.conferenceId) {\n console.error(\"No conferenceId found for active call\");\n swal(\"Error\", \"Cannot add participant: conference not found\", \"error\");\n this.showRingAnimation = false;\n return;\n }\n\n // Add participant to the conference\n let data: any = await this.addParticipantToCall({\n from: this.callData?.from || this.selectedCallerId?.number,\n route: \"OUTGOING\",\n participantNumber: phoneNumber,\n conferenceId: this.conferenceId\n });\n\n // this.callData = {\n // ...this.callData,\n // participantId: ,\n // }\n this.callData = {\n // ...this.callData,\n phone: phoneNumber,\n displayNum: phoneNumber,\n name: contact?.name || `${contact?.firstName} ${contact?.lastName}` || phoneNumber,\n img: contact?.img || 'assets/images/user.jpg',\n participantId: data?.participantId,\n from: this.selectedCallerId?.number,\n isIncomingCall: false,\n isHold: false,\n isLeft: false,\n isConference: false\n };\n this.cdr.detectChanges();\n console.log(this.callData, 'this.callData')\n console.log('test111111');\n this.currentCall = this.callData;\n // this.currentCallList.push({...this.callData});\n console.log(\"Participant added to conference:\", phoneNumber);\n this.showRingAnimation = false;\n }\n } catch (error) {\n console.error('Error adding participant:', error);\n this.showRingAnimation = false;\n // Restore held call on error\n if (this.heldCall) {\n // this.call = this.heldCall;\n // this.heldCall = undefined;\n // this.isCallOnHold = false;\n // this.call.mute(false);\n }\n this.handleError(error);\n }\n }\n\n getAllParticipants(conferenceSid: string) {\n this.extensionService.getAllParticipants(conferenceSid).subscribe((res: any) => {\n this.allParticipentList = res.participants;\n })\n }\n\n // acceptConcurrentCall(incomingCall: any) {\n // if (!incomingCall) return;\n\n // // Put current call on hold instead of disconnecting\n // if (this.call) {\n // this.heldCall = this.call;\n // this.isCallOnHold = true;\n // // Mute the held call\n // this.heldCall.mute(true);\n // }\n\n // incomingCall.accept();\n // this.call = incomingCall;\n // this.callData.phone = incomingCall.parameters['From'];\n // this.callData.name = incomingCall.customParameters?.get('name') || '-';\n // this.callData.img = incomingCall.customParameters?.get('image') || 'assets/images/user.jpg';\n // this.isConcurrentIncoming = false;\n // this.incomingCallDiv = false;\n // this.disbaleEndCallBtn = false;\n\n // // Reset timer for new call\n // this.stopTimer();\n // this.startTimer();\n // this.cdr.detectChanges();\n // }\n\n\n acceptConcurrentCall(incomingCall: any) {\n if (!incomingCall) return;\n\n\n // Put current call on hold instead of disconnecting\n // if (this.call) {\n // // this.heldCall = this.call;\n // this.isCallOnHold = true;\n // // // Mute the held call\n // // this.heldCall.mute(true);\n // // }\n\n // // Accept the new call\n // incomingCall.accept();\n // this.call = incomingCall;\n // this.callData.phone = incomingCall.parameters['From'];\n // this.callData.name = incomingCall.customParameters?.get('name') || '-';\n // this.callData.img = incomingCall.customParameters?.get('image') || 'assets/images/user.jpg';\n // this.isConcurrentIncoming = false;\n // this.incomingCallDiv = false;\n // this.disbaleEndCallBtn = false;\n\n // // 🟢 Remove the accepted call from incoming list\n // this.newIncomingCallsList = (this.newIncomingCallsList || []).filter(\n // (c: any) => c?.parameters?.CallSid !== incomingCall?.parameters?.CallSid\n // );\n // this.incomingCallsNewInfo.emit(this.newIncomingCallsList);\n\n // // 🕒 Reset timer for new call\n // this.stopTimer();\n // this.startTimer();\n\n // this.cdr.detectChanges();\n }\n\n async swapCalls(callInfo: any,isConferenceCall?: boolean) {\n // if (!this.heldCall || !this.call) return;\n console.log(this.call, 'this.call');\n console.log(this.heldCall, 'this.heldCall');\n console.log(this.currentCallList, 'this.currentCallList');\n console.log(callInfo, 'callInfo for swapCalls');\n if(this.currentCall?.isConference){\n this.currentCallList.forEach(async (c: any) => {\n if (c?.isConference && !c?.isHold) {\n c.isHold = true;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n } else if (callInfo?.isHold && c?.participantId === callInfo?.participantId) {\n c.isHold = false;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n this.currentCall = c;\n }\n });\n this.isConferenceCallHold = true;\n } else if(isConferenceCall) {\n this.isConferenceCallHold = false;\n this.currentCallList.forEach(async (c: any) => {\n if (c?.isConference) {\n c.isHold = false;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n } else {\n c.isHold = true;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n }\n });\n } else {\n this.isConferenceCallHold = false;\n this.currentCallList.forEach(async (c: any) => {\n if (c?.participantId && !c?.isHold) {\n c.isHold = true;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n } else if (callInfo?.isHold && c?.participantId === callInfo?.participantId) {\n c.isHold = false;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: c?.isHold,\n conference: c?.isConference\n });\n this.currentCall = c;\n }\n });\n }\n // await this.onholdOrUnholdParticipant({\n // participantId: this.call?.callInfo?.participantId,\n // conferenceId: this.conferenceId,\n // hold: true\n // });\n // await this.onholdOrUnholdParticipant({\n // participantId: this.heldCall?.callInfo?.participantId,\n // conferenceId: this.conferenceId,\n // hold: false\n // });\n console.log('Swapping calls...');\n // console.log('Before swap - Active call:', this.call.parameters['From']);\n // console.log('Before swap - Held call:', this.heldCall.parameters['From']);\n\n // Swap the calls\n // const temp = this.call;\n // this.call = this.heldCall;\n // this.heldCall = temp;\n\n\n // this.call.mute(false);\n // this.heldCall.mute(true);\n\n // Update UI with active call info - extract from call parameters\n // const fromNumber = this.call.parameters['From'];\n // const callerName = this.call.customParameters?.get('name') || '-';\n // const callerImg = this.call.customParameters?.get('image') || 'assets/images/user.jpg';\n // const displayNumber = this.call.customParameters?.get('displayNumber') || '-';\n\n // Update callData to refresh the main UI\n // this.callData = {\n // ...this.callData,\n // phone: fromNumber,\n // displayNum: (displayNumber && displayNumber !== '-') ? displayNumber : fromNumber,\n // name: (callerName && callerName !== '-') ? callerName : (this.callData?.name || fromNumber),\n // img: callerImg || this.callData?.img || 'assets/images/user.jpg'\n // };\n\n // console.log('After swap - Active call:', this.call.parameters['From']);\n // console.log('After swap - Held call:', this.heldCall.parameters['From']);\n // console.log('Updated callData:', this.callData);\n console.log('this.currentCallList after swap', this.currentCallList);\n this.cdr.detectChanges();\n }\n\n async mergeCalls() {\n // Merge functionality - unmute both calls for conference\n if (this.currentCallList.length > 1) {\n this.currentCallList.forEach(async (c: any) => {\n if (c?.participantId) {\n c.isHold = false;\n await this.onholdOrUnholdParticipant({\n participantId: [c?.participantId],\n conferenceId: this.conferenceId,\n hold: false,\n conference: true\n });\n c.isConference = true;\n // } else if(c?.participantId && c.isIncomingCall){\n // await this.twilioService.addIncomingParticipant(c?.participantId, this.conferenceId).subscribe((data: any) => {\n // console.log(data,'bhhhhhhhhhhhhhhhhhhh')\n // })\n // c.isHold = false;\n // c.isConference = true;\n }\n this.isConferenceCallHold = false;\n });\n // await this.onholdOrUnholdParticipant({\n // participantId: this.heldCall?.callInfo?.participantId,\n // conferenceId: this.conferenceId,\n // hold: false\n // });\n // this.heldCall.mute(false);\n // this.call.mute(false);\n this.isCallOnHold = false;\n this.isConference = true;\n this.cdr.detectChanges();\n }\n }\n\n endHeldCall() {\n // if (this.heldCall) {\n // this.heldCall.disconnect();\n // this.heldCall = undefined;\n // this.isCallOnHold = false;\n // this.cdr.detectChanges();\n // }\n }\n\n\n hasDetailedInfo(callData: any): boolean {\n if (!callData) return false;\n\n // Check if userInfo exists and has meaningful data\n if (callData.userInfo && callData.userInfo.c2cInformation) {\n const info = callData.userInfo.c2cInformation;\n return !!(\n info.subject && info.subject !== '-' ||\n info.email && info.email !== '-' ||\n info.message && info.message !== '-' ||\n info.pointName && info.pointName !== '-' ||\n info.sourceName && info.sourceName !== '-' ||\n info.extension && info.extension !== '-' ||\n info.url ||\n info.latitude ||\n info.longitude\n );\n }\n\n return false;\n }\n\n // onClickExpand(data?: any): void {\n // if (this.selectedIncomingCall === data && this.isClickExpand) {\n // this.isClickExpand = false;\n // this.selectedIncomingCall = null;\n // // this.selectedIncomingCallInfo.emit({});\n // return;\n // }\n // this.isClickExpand = true;\n // this.selectedIncomingCall = data;\n\n // if (this.selectedIncomingCall) {\n // this.selectedIncomingCall['isClickExpand'] = true;\n\n // if (this.newIncomingCallsList && this.newIncomingCallsList.length > 0) {\n // this.newIncomingCallsList.forEach((call: any) => {\n // if (call !== this.selectedIncomingCall) {\n // call['isClickExpand'] = false;\n // }\n // });\n // }\n\n // // this.selectedIncomingCallInfo.emit(this.selectedIncomingCall);\n\n // if (!this.selectedIncomingCall.userInfo || this.selectedIncomingCall.userInfo.status == 201) {\n // // this.getUserInformation(this.selectedIncomingCall);\n // }\n // }\n // }\n\n // getUserInformation(incomingCallData: any) {\n // let data = this.fromEntries(Array.from(incomingCallData.customParameters.entries()));\n // this.extensionService.getUserInformation(data['twilioAuthId']).subscribe(\n // response => {\n // setTimeout(()=>{\n // incomingCallData['userInfo']=response\n // }, 5000)\n // }, error => {\n // console.error('Error starting recording', error);\n // });\n // }\n\n rejectConcurrentCall(incomingCall: any) {\n\n if (!incomingCall) return;\n if (incomingCall.reject) {\n incomingCall.reject();\n }\n if (incomingCall.disconnect) incomingCall.disconnect();\n // Remove from list\n this.newIncomingCallsList = (this.newIncomingCallsList || []).filter((c: any) => c?.parameters?.CallSid !== incomingCall?.parameters?.CallSid);\n this.incomingCallsNewInfo.emit(this.newIncomingCallsList);\n // If no more incoming, hide banner\n if (!this.newIncomingCallsList || this.newIncomingCallsList.length === 0) {\n this.isConcurrentIncoming = false;\n this.incomingCallDiv = false;\n }\n this.cdr.detectChanges();\n }\n onCallInputs(num: any) {\n try {\n if (Number.isInteger(num) || num == '+' || num == '*' || num == '#') {\n if (num == '#') {\n new Audio(`/assets/dial-tones/dtmf/dtmf-hash-.mp3`).play();\n } else if (num == '*') {\n new Audio(`/assets/dial-tones/dtmf/dtmf-star-.mp3`).play();\n } else {\n new Audio(`/assets/dial-tones/dtmf/dtmf-${num}-.mp3`).play();\n }\n\n this.callInput = this.callInput + String(num);\n this.showClearBtn = true;\n }\n let str = String(num);\n this.call?.sendDigits(str);\n } catch (e) {\n console.log(e);\n }\n }\n onCallInputEnter(ev: any) {\n try {\n this.call?.sendDigits(String(ev.key));\n } catch (e) {\n console.log(e);\n }\n }\n closeIncomingCall(data: any) {\n // this.incomingCallDiv = false;\n if (data.show) {\n //this.showCallProgressEvent.emit()\n // handle incoming call accepted\n this.startTimer();\n this.disbaleEndCallBtn = false;\n // this.call = data.call;\n this.isConcurrentIncoming = false;\n this.incomingCallDiv = false;\n\n const incomingDetail = this.extensionService.getCallSid();\n this.incomingRecordCall = incomingDetail.recordCall;\n\n if (this.incomingRecordCall) {\n this.startRecording();\n } else {\n this.isRecording = false;\n }\n this.cdr.detectChanges();\n } else {\n // incoming call rejected or auto-cancelled\n this.isConcurrentIncoming = false;\n this.incomingCallDiv = false;\n // If there is NO active call, then propagate end. Otherwise keep ongoing UI.\n if (!this.call || this.call.status() !== 'open') {\n console.log('test7')\n this.endCallEvent.emit();\n }\n }\n }\n clearInputs() {\n this.callInput = this.callInput.slice(0, -1);\n }\n isMinimised: boolean = false;\n minimiseDialpad() {\n this.minimiseEvent.emit(true);\n this.isMinimised = true;\n }\n maximiseDialpad() {\n this.minimiseEvent.emit(false);\n this.isMinimised = false;\n }\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n }\n startRecording() {\n let sid;\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n sid = this.incomingCallSid ? this.incomingCallSid : this.callSid || this.addRes?.conferenceSid;\n\n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n let payload = {\n \"conferenceId\": this.conferenceId,\n }\n this.extensionService.getCallRecording(payload).subscribe(response => {\n this.isRecording = true;\n this.isPaused = false;\n this.timeElapsed = 0;\n this.startTimer1();\n }, error => {\n console.error('Error starting recording', error);\n });\n }\n stopRecording() {\n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n this.isRecording = false;\n this.isPaused = false;\n if (this.timerSubscription) {\n this.timerSubscription.unsubscribe();\n }\n }\n pauseRecording() {\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n const sid = this.incomingCallSid ? this.incomingCallSid : this.callSid;\n\n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n\n this.extensionService.pauseOrResumeRecording(sid, 'pause').subscribe(\n response => {\n this.stopRecordingTimer();\n this.isPaused = true;\n },\n (error) => {\n console.error('Error pausing recording:', error);\n // Consider updating the UI to show the error state\n }\n );\n }\n resumeRecording() {\n let sid;\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n sid = this.incomingCallSid ? this.incomingCallSid : this.callSid;\n\n // if (!this.incomingRecordCall && !this.recordCall) {\n // return; // Skip if recording is not enabled\n // }\n this.extensionService.pauseOrResumeRecording(sid, 'resume').subscribe(response => {\n this.isPaused = false;\n this.startTimer1();\n }, error => {\n console.error('Error resuming recording', error);\n });\n }\n getTimeDifference(inputTime: string): string {\n const pastTime = new Date(inputTime).getTime();\n const currentTime = new Date().getTime();\n\n let diff = Math.floor((currentTime - pastTime) / 1000); // total seconds\n\n const minutes = Math.floor(diff / 60);\n const seconds = diff % 60;\n\n const mm = minutes < 10 ? '0' + minutes : minutes;\n const ss = seconds < 10 ? '0' + seconds : seconds;\n\n return `${mm}:${ss}`;\n }\n startTimer1() {\n this.timerSubscription = interval(1000).subscribe(() => {\n this.timeElapsed++;\n });\n }\n stopRecordingTimer() {\n if (this.timerSubscription) {\n this.timerSubscription.unsubscribe(); // Pause the timer\n this.timerSubscription = undefined; // Optionally reset the subscription\n }\n }\n getFormattedTime() {\n const minutes = Math.floor(this.timeElapsed / 60);\n const seconds = this.timeElapsed % 60;\n return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\n }\n pollCallStatus(callAuthId: string) {\n const maxTime = 30000; // Poll for up to 30 seconds\n const pollInterval = 3000; // Poll every 3 seconds\n let elapsedTime = 0;\n const intervalId = setInterval(async () => {\n elapsedTime += pollInterval;\n try {\n const statusResponse = await this.extensionService.getCallStatus(callAuthId).toPromise() as CallStatusResponse;\n if (statusResponse && statusResponse.callDetails) {\n this.callStatus = statusResponse.callDetails.callStatus;\n if (this.callStatus === 'in-progress') {\n this.callSid = statusResponse.callDetails.callSid;\n if (this.recordCall && !this.isRecording) {\n this.startRecording();\n }\n clearInterval(intervalId);\n } else if (this.callStatus === 'completed') {\n clearInterval(intervalId);\n console.log('test1')\n this.endCall();\n this.stopRecording();\n } else if (this.callStatus === 'ringing') {\n // Continue polling; do not clear the interval yet\n }\n }\n } catch (error) {\n clearInterval(intervalId);\n }\n if (elapsedTime >= maxTime) {\n // console.log('Max polling time reached. Stopping poll.');\n clearInterval(intervalId);\n }\n }, pollInterval);\n }\n\n getUserInformation(id: any) {\n this.extensionService.getUserInformation(id).subscribe(\n response => {\n console.log(response)\n }, error => {\n console.error('Error starting recording', error);\n });\n }\n incomingCallsNewList(data: any) {\n console.log(data, 'newIncomingCallsListOUR')\n this.newIncomingCallsList = data;\n this.incomingCallsNewInfo.emit(this.newIncomingCallsList);\n }\n selectedIncomingCallInfo(data: any) {\n this.selectedIncomingCall = data;\n }\n\n getHoldCallList(){\n let holdList: any[] = [];\n let isConference = false;\n this.currentCallList.forEach((c: any) => {\n if(c?.isHold && !c?.isConference){\n holdList.push(c);\n }\n if(c?.isConference && !isConference){\n isConference = true;\n c['isConferenceCallHold'] = true;\n holdList.push(c);\n }\n });\n return holdList;\n }\n\n onClickExpand(data: any){\n this.isClickExpand = true;\n }\n ngOnDestroy() {\n this.callData.dial = false;\n if (this.timerSubscription) {\n this.timerSubscription.unsubscribe();\n }\n }\n}","<div class=\"d-flex\">\n <div class=\"call-container\" *ngIf=\"!isMinimised && currentCallList?.length\"\n [ngClass]=\"{'collops': isCollops, 'incoming-call-container': isClickExpand, 'contacts-open': showContactsPanel }\">\n <!-- <div id=\"minimize-btn-div\">\n <span class=\"material-symbols-outlined minimize-btn\" (click)=\"minimiseDialpad()\">\n minimize\n </span>\n </div> -->\n <!-- <lib-incoming-call *ngIf=\"incomingCallDiv && !isConcurrentIncoming\" [incomingCallData]=\"callData\"\n [deviceId]=\"deviceId\" [newIncomingCallsList]=\"newIncomingCallsList\"\n (closeIncomingCallDiv)=\"closeIncomingCall($event)\" (incomingCallsNewList)=\"incomingCallsNewList($event)\"\n (selectedIncomingCallInfo)=\"selectedIncomingCallInfo($event)\"></lib-incoming-call> -->\n {{currentCallList.length }}tttttttttttttttttttt\n <ng-container *ngIf=\"!incomingCallDiv || isConcurrentIncoming || true\">\n <!-- All type Call Hold list -->\n <div class=\"held-call-banner\"\n *ngIf=\"currentCallList.length > 1 && !!currentCall && ((isConferenceCallHold && isConference) || !isConference)\">\n <div class=\"held-call-content\" *ngIf=\"isConferenceCallHold\">\n <div class=\"held-info\">\n <span class=\"material-symbols-outlined hold-icon\">pause_circle</span>\n <div class=\"held-caller\">\n <span class=\"held-label\">Hold</span>\n <span class=\"held-name\">Conference Call</span>\n <!-- <span class=\"held-number\" *ngFor=\"let heldCall of currentCallList\">{{heldCall?.phone || ''}}</span> -->\n </div>\n </div>\n <div class=\"held-actions\">\n <button class=\"held-btn swap-btn\" (click)=\"swapCalls({},true)\" title=\"Swap calls\">\n <span class=\"material-symbols-outlined\"> swap_vert </span>\n </button>\n </div>\n </div>\n <ng-container *ngFor=\"let heldCall of currentCallList\">\n <div class=\"held-call-content\" *ngIf=\"heldCall?.isHold && !heldCall?.isConference\">\n <div class=\"held-info\">\n <span class=\"material-symbols-outlined hold-icon\">pause_circle</span>\n <div class=\"held-caller\">\n <span class=\"held-label\">Hold</span>\n <span class=\"held-name\">{{heldCall?.name || 'Unknown number'}}</span>\n <span class=\"held-number\">{{heldCall?.phone || ''}}</span>\n </div>\n </div>\n <div class=\"held-actions\">\n <button class=\"held-btn swap-btn\" (click)=\"swapCalls(heldCall)\" title=\"Swap calls\">\n <span class=\"material-symbols-outlined hold-icon\">swap_vert</span>\n </button>\n </div>\n </div>\n <div class=\"held-call-content\" *ngIf=\"heldCall?.isIncomingCall && !heldCall?.isAcceptCall\">\n <div class=\"held-info\">\n <span class=\"material-symbols-outlined hold-icon\">phone_callback</span>\n <div class=\"held-caller\">\n <span class=\"held-label\">Incoming Call</span>\n <span class=\"held-name\">{{heldCall?.name || 'Unknown number'}}</span>\n <span class=\"held-number\">{{heldCall?.phone || ''}}</span>\n </div>\n </div>\n <div class=\"held-actions\">\n <button class=\"banner-btn receive-btn\" *ngIf=\"!heldCall?.isAcceptCall\">\n <span class=\"material-symbols-outlined\" (click)=\"add(heldCall)\"> call </span>\n </button>\n <!-- <button class=\"call-btn-wrapper receive-btn\" *ngIf=\"heldCall?.isAcceptCall\">\n <span class=\"material-symbols-outlined\"> call_merge </span>\n </button> -->\n <button class=\"call-btn-wrapper banner-btn receive-btn\" *ngIf=\"heldCall?.isAcceptCall\">\n <span class=\"material-symbols-outlined\"> swap_vert </span>\n </button>\n <button class=\"call-btn-wrapper banner-btn reject-btn\">\n <span class=\"material-symbols-outlined\" (click)=\"rejectCallFromList(heldCall)\"> call_end\n </span>\n </button>\n <div class=\"togglearrow-arrow banner-btn me-2\" id=\"togglearrow\" (click)=\"onClickExpand(heldCall)\">\n <i class=\"fa fa-angle-right\"></i>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Compact banners for concurrent incoming (one per call) -->\n <ng-container *ngIf=\"currentCallList.length > 1\">\n <div class=\"incoming-banners-container\" *ngIf=\"!isConference && currentCallList.length > 1\">\n <div class=\"\" style=\"position: absolute;width: 100%;top: 0px;\">\n <ng-container *ngFor=\"let inc of currentCallList; let i = index\">\n <div class=\"incoming-banner\" *ngIf=\"inc?.isIncomingCall && !inc?.isAcceptCall\"\n [ngStyle]=\"{ top: ((isCallOnHold && heldCall) ? 64 : 0) + (i * 70) + 'px' }\">\n <div class=\"incoming-banner-content\">\n <div class=\"incoming-info\">\n <span class=\"incom ing-label\">Incoming call</span>\n <div class=\"incoming-caller\">\n <span class=\"caller-name\">{{ inc?.userInfo?.c2cInformation?.name ||\n inc?.customParameters?.get('name') || '-' }}</span>\n <span class=\"caller-number\">{{ inc?.userInfo?.c2cInformation?.number ||\n inc?.parameters?.From || '' }}</span>\n </div>\n </div>\n <div class=\"incoming-actions\">\n <button class=\"banner-btn accept-btn\" (click)=\"add(inc)\">\n <span class=\"material-symbols-outlined\">call</span>\n </button>\n <button class=\"banner-btn reject-btn\" (click)=\"onEndCall(inc)\">\n <span class=\"material-symbols-outlined\">call_end</span>\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- For single incoming call -->\n <div class=\"h-100 my-5\" style=\"display: flex; flex-direction: column;\"\n *ngIf=\"currentCallList.length === 1 && currentCallList[0]?.isIncomingCall && !currentCallList[0]?.isAcceptCall \">\n <div class=\"callToNum\">Incoming call on <br /><span>{{currentCallList[0]?.phone || 'Unknown\n Number'}}</span>\n </div>\n <div class=\"call-animation\" [ngClass]=\"{'call-animation-play': showRingAnimation}\">\n <img class=\"avatar-img\" [src]=\"currentCallList[0]?.img\" alt=\"\" width=\"120\" />\n </div>\n <div class=\"callerDetails\">\n <h1>{{currentCallList[0]?.c2cInformation?.name || 'Unknown Number'}}</h1>\n <p>{{currentCallList[0]?.c2cInformation?.number}}</p>\n </div>\n\n <div class=\"call-action-btns mt-auto\">\n <button class=\"call-btn receive-btn\" *ngIf=\"!newIncomingCallsList[0]?.isCallConnected\">\n <span class=\"material-symbols-outlined\" (click)=\"add(currentCallList[0])\"> call </span>\n </button>\n <button class=\"call-btn reject-btn\">\n <span class=\"material-symbols-outlined\" (click)=\"onEndCall(currentCallList[0])\"> call_end\n </span>\n </button>\n </div>\n </div>\n\n <!-- For multiple incoming calls but not any call progress -->\n\n\n <!-- For single active call -->\n {{!isConference}} === {{isConferenceCallHold}} === {{!!currentCall?.id}}0000\n <div *ngIf=\"(!isConference || isConferenceCallHold) && !!currentCall?.id\"\n [ngStyle]=\"{'display': 'flex', 'flex-direction': 'column', 'position': 'relative'}\" class=\"active-call\">\n\n <div class=\"call-animation\" [ngClass]=\"{'call-animation-play': showRingAnimation}\">\n <img class=\"avatar-img\" [src]=\"currentCall.img\" alt=\"\" width=\"120\" />\n </div>\n <div class=\"callerDetails\">\n <h1 [ngStyle]=\"{'margin-top': showKeypad ? '0': '8px'}\">{{currentCall.name || 'Unknown number'}}\n </h1>\n <p>{{currentCall?.phone }}</p>\n <h4 style=\"margin-top: 4px\">{{currentCall?.time || timer}}</h4>\n </div>\n\n <div class=\"record-action-btns\" *ngIf=\"!showKeypad\"\n [ngStyle]=\"{'margin-top': showKeypad ? '0': '20px'}\">\n <div class=\"record-btn-container\">\n <button class=\"record-btn start-stop\" *ngIf=\"!isRecording\"\n [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording()\"\n [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\"\n [disabled]=\"!currentCall?.isAcceptCall\">\n <span class=\"recording-icon\"></span>\n </button>\n <div class=\"pause-resume-btns\">\n <button class=\"record-btn pause-resume\" *ngIf=\"isRecording && !isPaused\"\n (click)=\"pauseRecording()\">\n <span class=\"material-symbols-outlined\"> pause </span>\n </button>\n <button class=\"record-btn pause-resume\" *ngIf=\"isPaused\" (click)=\"resumeRecording()\">\n <span class=\"material-symbols-outlined\"> play_arrow </span>\n </button>\n </div>\n </div>\n <div *ngIf=\"isRecording\" class=\"timer-display\">\n {{ getFormattedTime() }}\n </div>\n </div>\n <div *ngIf=\"showKeypad\" class=\"sendDigit\">\n <input type=\"text\" name=\"call-inputs\" id=\"call-input\" [(ngModel)]=\"callInput\"\n (keyup)=\"onCallInputEnter($event)\">\n <span class=\"material-symbols-outlined input-clear-btn\" *ngIf=\"callInput\"\n (click)=\"clearInputs()\">close_small</span>\n </div>\n <div class=\"btn-container justify-content-center\" *ngIf=\"showKeypad\">\n <div class=\"key-btn\" *ngFor=\"let key of keypadVal\" (click)=\"onCallInputs(key.num)\">\n {{key.num}}\n <span class=\"btn-albhabets\">{{key.text ? key.text : ' '}}</span>\n </div>\n </div>\n\n <div class=\"call-action-btns\" [ngStyle]=\"{'margin-top': showKeypad ? '0': '110px'}\">\n <div class=\"mb-3\" *ngIf=\"!incomingCallDiv || isConcurrentIncoming\">\n <button class=\"held-btn merge-btn\" (click)=\"mergeCalls()\" title=\"Merge calls\"\n [disabled]=\"currentCallList.length < 2\">\n <span>Merge</span>\n </button>\n </div>\n <div class=\"flex align-items-center justify-content-evenly mb-3\">\n <button class=\"call-sec-btn mr-3\" [disabled]=\"!currentCall?.isAcceptCall\"\n (click)=\"toggleMute()\">\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic </span>\n\n </button>\n <button class=\"call-sec-btn mr-3\" [disabled]=\"!currentCall?.isAcceptCall\">\n <span class=\"material-symbols-outlined\" (click)=\"toggleKeypad()\"> transition_dissolve\n </span>\n </button>\n <button class=\"call-sec-btn\" [disabled]=\"!currentCall?.isAcceptCall\"\n (click)=\"toggleContactsPanel()\">\n <span class=\"material-symbols-outlined\"> add </span>\n </button>\n </div>\n\n <div>\n <button class=\"call-btn end-call-btn\" [disabled]=\"!currentCall?.isAcceptCall\"\n (click)=\"endCall()\">\n <span class=\"material-symbols-outlined\"> call_end </span>\n </button>\n </div>\n </div>\n\n\n <!-- <div class=\"contacts-panel\" *ngIf=\"showContactsPanel\">\n <div class=\"contacts-header\">\n <span class=\"material-symbols-outlined back\" (click)=\"toggleContactsPanel()\"> chevron_left </span>\n <div class=\"title\">Contacts</div>\n <span class=\"material-symbols-outlined search\"> search </span>\n </div>\n <div class=\"contacts-list\">\n <div class=\"contact-item\" *ngFor=\"let c of contacts\">\n <img class=\"contact-avatar\" [src]=\"c.img || 'assets/images/user.jpg'\" alt=\"\" />\n <div class=\"contact-info\">\n <div class=\"contact-name\">{{c.firstName}} {{c.middleName}} {{c.lastName}}</div>\n <div class=\"contact-title\">{{ (c.numbersList && c.numbersList[0]?.number)}}</div>\n </div>\n <button class=\"contact-call-btn\" (click)=\"callContact(c)\">\n <span class=\"material-symbols-outlined\"> call </span>\n <span class=\"label\">Call</span>\n </button>\n </div>\n </div>\n </div> -->\n\n\n <!-- <div class=\"mt-2 px-3 call-info-wrapper \" [ngClass]=\"{'open-collops': isCollops}\">\n <div class=\"text-center\" >\n <i class=\"fa fa-angle-down\" *ngIf=\"isCollops\" (click)=\"isCollops = !isCollops\"></i>\n <i class=\"fa fa-angle-up\" *ngIf=\"!isCollops\" (click)=\"isCollops = !isCollops\"></i>\n </div>\n <ng-container *ngIf=\"isCollops\">\n <div class=\"row mb-2\">\n <div class=\"col-6\">\n <div >First Name:</div>\n <div >test ttttt</div>\n </div>\n <div class=\"col-6\">\n <div>Last Name:</div>\n <div>tetst test </div>\n </div>\n </div>\n <div class=\"mb-2\">\n <div class=\"\">Email:</div>\n <div class=\"\">abcdeft@vgroup.com</div>\n </div>\n <div class=\"row mb-2\">\n <div class=\"col-6\">\n <div class=\"\">Number:</div>\n <div class=\"\">63545985264225</div>\n </div>\n <div class=\"col-6\">\n <div class=\"\">Language:</div>\n <div class=\"\">English</div>\n </div>\n </div>\n <div class=\"row mb-2\">\n <div class=\"col-6\">\n <div class=\"\">Image :</div>\n <div class=\"\">test.jpg </div>\n </div>\n <div class=\"col-6\">\n <div class=\"\">Extension :</div>\n <div class=\"\">4596</div>\n </div>\n </div>\n <div class=\" mb-2\">\n <div class=\"\">Note :</div>\n <div class=\"\">tes test test </div>\n </div>\n <div class=\" mb-2\">\n <div class=\"\">\n <div class=\"\">Subject:</div>\n <div class=\"\">hello world | test</div>\n </div>\n </div>\n <div class=\" mb-4\">\n <div class=\"\">\n <div class=\"\">Message:</div>\n <div class=\"\">test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test </div>\n </div>\n </div>\n </ng-container>\n </div> -->\n </div>\n\n\n <!-- conference call view -->\n <div class=\"conference-call-view\" *ngIf=\"isConference && !isConferenceCallHold\">\n <div class=\"conf-heading\">\n <span class=\"conf-icon material-symbols-outlined\"> groups </span>\n <span class=\"conf-title\">Conference Call</span>\n </div>\n\n <div class=\"scroll-container\">\n <div class=\"scroll-text conf-name\">\n <ng-container *ngFor=\"let call of currentCallList; let i = index\">\n <ng-container *ngIf=\"call?.isConference\">\n <span *ngIf=\"i != 0\">&</span>\n {{call?.name ? call?.name : call?.phone || 'Unknown number'}}\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div class=\"conf-timer\">{{ timer }}</div>\n <!-- <div class=\"conf-record\">\n <button class=\"record-stop-btn\" *ngIf=\"isRecording\" (click)=\"toggleRecording()\" title=\"Stop Recording\">\n <span class=\"material-symbols-outlined\"> stop_circle </span>\n </button>\n </div> -->\n\n <div class=\"record-action-btns mt-auto\" *ngIf=\"!showKeypad\"\n [ngStyle]=\"{'margin-top': showKeypad ? '0': '20px'}\">\n <div class=\"record-btn-container\">\n <button class=\"record-btn start-stop\" *ngIf=\"!isRecording\"\n [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording()\"\n [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\">\n <span class=\"recording-icon\"></span>\n </button>\n <div class=\"pause-resume-btns\">\n <button class=\"record-btn pause-resume\" *ngIf=\"isRecording && !isPaused\"\n (click)=\"pauseRecording()\">\n <span class=\"material-symbols-outlined\"> pause </span>\n </button>\n <button class=\"record-btn pause-resume\" *ngIf=\"isPaused\" (click)=\"resumeRecording()\">\n <span class=\"material-symbols-outlined\"> play_arrow </span>\n </button>\n </div>\n </div>\n <div *ngIf=\"isRecording\" class=\"timer-display\">\n {{ getFormattedTime() }}\n </div>\n </div>\n\n <div *ngIf=\"showKeypad\" class=\"sendDigit mt-2\">\n <input type=\"text\" name=\"call-inputs\" id=\"call-input\" [(ngModel)]=\"callInput\"\n (keyup)=\"onCallInputEnter($event)\">\n <span class=\"material-symbols-outlined input-clear-btn\" *ngIf=\"callInput\"\n (click)=\"clearInputs()\">close_small</span>\n </div>\n <div class=\"btn-container justify-content-center\" *ngIf=\"showKeypad\">\n <div class=\"key-btn\" *ngFor=\"let key of keypadVal\" (click)=\"onCallInputs(key.num)\">\n {{key.num}}\n <span class=\"btn-albhabets\">{{key.text ? key.text : ' '}}</span>\n </div>\n </div>\n\n <div class=\"conf-remove\">\n <button class=\"remove-btn\" (click)=\"addRemoveParticipant()\">Remove</button>\n </div>\n\n <div class=\"conf-actions\">\n <button class=\"circle-btn\" [ngClass]=\"{'active': isMute}\" (click)=\"toggleMute(true)\">\n <span class=\"material-symbols-outlined\"> {{ isMute ? 'mic_off' : 'mic' }} </span>\n </button>\n <button class=\"circle-btn\" (click)=\"toggleKeypad()\">\n <span class=\"material-symbols-outlined\"> transition_dissolve </span>\n </button>\n <button class=\"circle-btn\" (click)=\"toggleContactsPanel()\">\n <span class=\"material-symbols-outlined\"> add </span>\n </button>\n </div>\n\n <div class=\"conf-end\">\n <button class=\"circle-btn danger\" (click)=\"endCall(true)\">\n <span class=\"material-symbols-outlined\"> call_end </span>\n </button>\n </div>\n </div>\n\n\n\n <div class=\"wave-container\">\n <svg class=\"waves\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 24 150 28\" preserveAspectRatio=\"none\" shape-rendering=\"auto\">\n <defs>\n <path id=\"gentle-wave\"\n d=\"M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z\" />\n </defs>\n <g class=\"parallax\">\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"0\" fill=\"rgba(255,255,255,0.7)\" />\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"3\" fill=\"rgba(255,255,255,0.5)\" />\n <!-- <use\n xlink:href=\"#gentle-wave\"\n x=\"48\"\n y=\"5\"\n fill=\"rgba(255,255,255,0.3)\"\n /> -->\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"7\" fill=\"#fff\" />\n </g>\n </svg>\n </div>\n </ng-container>\n </div>\n\n <!-- Add remove participant panel -->\n <div class=\"contacts-panel\" *ngIf=\"isAddRemoveParticipant\">\n <div class=\"contacts-header\">\n <span class=\"material-symbols-outlined back\" (click)=\"toggleContactsPanel(true)\"> chevron_left </span>\n <div class=\"title\">Contacts</div>\n <span class=\"material-symbols-outlined search\"> search </span>\n </div>\n <div class=\"contacts-list\">\n <div class=\"contact-item\" *ngFor=\"let c of allParticipentList\">\n <img class=\"contact-avatar\" [src]=\"c.img || 'assets/images/user.jpg'\" alt=\"\" />\n <div class=\"contact-info\">\n <div class=\"contact-name\">{{c.direction == 'outgoing-call' ? c?.toName : c?.fromName || 'Unknown'}}</div>\n <div class=\"contact-title\">{{ c.direction == 'outgoing-call' ? c?.to || 'Unknown' : c?.from || 'Unknown'}}</div>\n </div>\n <button class=\"conference-hold-contact mr-2\" [ngClass]=\"{ 'on-hold': c.hold }\" (click)=\"onHoldCall(c)\">\n <span class=\"material-symbols-outlined\" title=\"Hold\"> phone_paused </span>\n <!-- <span class=\"label\">Hold</span> -->\n </button>\n <button class=\"conference-contact\" (click)=\"onEndCall(c)\">\n <span class=\"material-symbols-outlined\" title=\"Call End\"> call_end </span>\n <!-- <span class=\"label\">End</span> -->\n </button>\n </div>\n </div>\n </div>\n\n <!-- contact list panel -->\n <div class=\"contacts-panel\" *ngIf=\"showContactsPanel\">\n <div class=\"contacts-header\">\n <span class=\"material-symbols-outlined back\" (click)=\"toggleContactsPanel()\"> chevron_left </span>\n <div class=\"title\">Contacts</div>\n <span class=\"material-symbols-outlined search\"> search </span>\n </div>\n <div class=\"contacts-list\">\n <div class=\"contact-item\" *ngFor=\"let c of contacts\">\n <img class=\"contact-avatar\" [src]=\"c.img || 'assets/images/user.jpg'\" alt=\"\" />\n <div class=\"contact-info\">\n <div class=\"contact-name\">{{c.firstName}} {{c.middleName}} {{c.lastName}}</div>\n <div class=\"contact-title\">{{ (c.numbersList && c.numbersList[0]?.number)}}</div>\n </div>\n <button class=\"contact-call-btn\" (click)=\"callContact(c)\">\n <span class=\"material-symbols-outlined\"> call </span>\n <span class=\"label\">Call</span>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Incoming call user details shown in model -->\n <div class=\"call-container-model p-3 text-white model-content call-container\" *ngIf=\"isClickExpand\">\n <div class=\"mb-2\" style=\"width: 100%; height: 100%;\">\n <div class=\"call-animation\" [ngClass]=\"{'call-animation-play': showRingAnimation}\">\n <img class=\"avatar-img\" [src]=\"'assets/images/user.jpg'\" alt=\"\" width=\"100\" />\n </div>\n <div class=\"text-center\">\n <h3 class=\"text-white\">test</h3>\n </div>\n <div class=\"f-13\">\n <div class=\"row mb-3\">\n <div class=\"col-12 d-flex align-items-center mb-2\">\n <div class=\"me-2\">Subject:</div>\n <div class=\"ml-2\">test ww</div>\n </div>\n </div>\n\n <div class=\"row mb-2\">\n <div class=\"col-12 d-flex align-items-center mb-2\">\n <div class=\"me-2\">Email:</div>\n <div>test</div>\n </div>\n </div>\n\n <div class=\"row mb-2\">\n <div class=\"col-6 mb-2\">\n <div class=\"\">Number:</div>\n <div class=\"\">test</div>\n </div>\n <div class=\"col-6\">\n <div class=\"\">Language:</div>\n <div class=\"ml-2\">test</div>\n </div>\n </div>\n <div class=\"row mb-2\">\n <div class=\"col-6 mb-2\">\n <div class=\"\">Extension:</div>\n <div class=\"ml-2\">test</div>\n </div>\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-12 d-flex align-items-center mb-2\">\n <div class=\"me-2\">Image:</div>\n <div class=\"text-ellipsis\">\n <!-- <ng-container *ngIf=\"selectedIncomingCall?.userInfo?.c2cInformation?.image && selectedIncomingCall?.userInfo?.c2cInformation?.image !== '-'; else noImage\">\n <img src=\"{{selectedIncomingCall?.userInfo?.c2cInformation?.image}}\" alt=\"\" width=\"42\" height=\"42\" class=\"ml-2\"/>\n </ng-container> -->\n <ng-template #noImage>\n <span class=\"ml-2\">No Image Available</span>\n </ng-template>\n </div>\n </div>\n </div>\n\n <div class=\" mb-4\">\n <div class=\"\">\n <div class=\"\">Message:</div>\n <div class=\"text-ellipsis\">test</div>\n </div>\n </div>\n\n <div class=\"row mb-2\">\n <div class=\"col-6 mb-2\">\n <div class=\"\">Point Name:</div>\n <div class=\"\">test</div>\n </div>\n <div class=\"col-6 mb-2\">\n <div class=\"\">Source Name:</div>\n <div class=\"\">test</div>\n </div>\n </div>\n </div>\n <!-- <div class=\"call-action-btns mt-0\">\n <button class=\"call-btn receive-btn\" *ngIf=\"!selectedIncomingCall?.isCallConnected\">\n <span class=\"material-symbols-outlined\" (click)=\"acceptCallFromList(selectedIncomingCall)\"> call </span>\n </button>\n <button class=\"call-btn mute-btn\" *ngIf=\"selectedIncomingCall?.isCallConnected\" (click)=\"toggleMute(selectedIncomingCall)\" [ngClass]=\"{'active-mute': isMute}\">\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic </span>\n </button>\n <div class=\"record-btn-container\">\n <button class=\"record-btn start-stop\" *ngIf=\"selectedIncomingCall?.isCallConnected && !isRecording\" [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording('')\" [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\" [disabled]=\"disbaleEndCallBtn\">\n <span class=\"recording-icon\"></span>\n </button> \n <div class=\"pause-resume-btns\">\n <button class=\"record-btn pause-resume\" *ngIf=\"selectedIncomingCall?.isCallConnected && isRecording && !isPaused\" (click)=\"pauseRecording()\">\n <span class=\"material-symbols-outlined\"> pause </span>\n </button>\n <button class=\"record-btn pause-resume\" *ngIf=\"selectedIncomingCall?.isCallConnected && isPaused\" (click)=\"resumeRecording('')\">\n <span class=\"material-symbols-outlined\"> play_arrow </span>\n </button>\n </div>\n </div>\n <button class=\"call-btn reject-btn\">\n <span class=\"material-symbols-outlined\" (click)=\"rejectCallFromList(selectedIncomingCall)\"> call_end </span>\n </button>\n </div> -->\n </div>\n </div>\n</div>\n\n<div class=\"min-call-container\" *ngIf=\"isMinimised\">\n <span class=\"material-symbols-outlined fullscreen\" (click)=\"maximiseDialpad()\"> open_in_full </span>\n <div style=\"display: flex; width: 100%\">\n <div>\n <div class=\"min-call-animation\" id=\"call-avatar\">\n <img class=\"min-avatar-img\" [src]=\"callData.img\" alt=\"\" />\n </div>\n </div>\n <div>\n <div class=\"min-callerDetails\">\n <div class=\"name\">\n {{callData.name}}\n </div>\n <p style=\"margin: 0\">{{callData.displayNum ? callData.displayNum : callData.phone }}</p>\n </div>\n </div>\n </div>\n <div class=\"min-btn-container\">\n <div class=\"min-timer\">{{timer}}</div>\n <button class=\"min-call-sec-btn\" (click)=\"toggleMute()\" [disabled]=\"disbaleEndCallBtn\">\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic </span>\n </button>\n <button class=\"min-call-btn end-call-btn\" [disabled]=\"disbaleEndCallBtn\" (click)=\"endCall()\">\n <span class=\"material-symbols-outlined\"> call_end </span>\n </button>\n </div>\n</div>","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { TwilioService } from './service/twilio.service';\nimport swal from 'sweetalert2';\nimport { ExtensionService } from './service/extension.service';\nimport { CallerIdDialogComponent } from './components/caller-id-dialog/caller-id-dialog.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport parsePhoneNumberFromString, { AsYouType } from 'libphonenumber-js';\nimport { keypad } from '../keypad';\nimport { Subscription } from 'rxjs'\nimport { IpAddressService } from './service/ip-address.service';\nimport { Router } from '@angular/router';\nimport { Call } from '@twilio/voice-sdk';\nimport { IncomeingCallSocketService } from './service/incomeing-call-socket.service';\n\n\n@Component({\n selector: 'lib-dialbox',\n templateUrl: './dialbox.component.html',\n styleUrls: ['./dialbox.component.css']\n})\nexport class DialboxComponent implements OnInit, AfterViewInit {\n \n private _isDialpadHidden: boolean = true;\n // Let the library decide to auto-open on incoming call without host wiring\n @Input() autoOpenOnIncoming: boolean = true;\n @Input() contactInfo: any; \n @Input() deviceId: any; \n \n @Input() set isDialpadHidden(value: boolean) {\n this._isDialpadHidden = value;\n if (!value) {\n // When dialpad becomes visible, ensure Twilio is initialized\n this.initializeTwilio();\n }\n }\n @Input() incomingCallData: any\n \n get isDialpadHidden(): boolean {\n return this._isDialpadHidden;\n }\n @Output() closeDialpadEvent: EventEmitter<void> = new EventEmitter<void>();\n @Output() callInitiated: EventEmitter<any> = new EventEmitter<any>();\n @Output() endCallEvent: EventEmitter<void> = new EventEmitter<void>();\n @Output() minimiseEvent: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() incomingCallsNewInfoEvent: EventEmitter<any[]> = new EventEmitter<any[]>();\n @Output() incomingCallInitiated: EventEmitter<void> = new EventEmitter<void>();\n @ViewChild('dialInput') dialInputElement!: ElementRef;\n\n \n @Output() numberDialed = new EventEmitter<string>();\n\n\n isCallInProgress: boolean = false;\n keypadVal = keypad;\n \n showInputClearBtn: boolean = false;\n dialedNumber: string = '';\n contactList: any[] = [];\n filteredContactList: any[] = [];\n callerIdList: any[] = [];\n selectedCallerId: any;\n isCallerIdHidden: boolean = true;\n\n isTrialPeriodOver: boolean = false;\n isPaymentDue: boolean = false;\n terminateCall = false;\n toastTimeout = 7000;\n callNumberToast = {\n show: false,\n type: 'alert-success',\n number: '',\n displayNum: ''\n }\n callData: any = {\n phone: '',\n displayNum: '',\n dial: false,\n name: '',\n img: 'assets/images/user.jpg',\n isIncomingCall: false,\n extNum:''\n };\n lastDialed: { name?: string; image?: string; number: string } | null = null;\n sanitizedNum: any;\n dialAlert = {\n msg: '',\n show: false\n }\n token?:string;\n \n showDedicatedPopup:boolean = false;\n newIncomingCalls: any = [];\n incomingCallsList: any = [];\n newIncomingCallData?:Call;\n private subscriptions: Subscription = new Subscription();\n callPreference: any;\n shakeDedicatedBtn: boolean = false;\n isSmartDialCall: boolean = false;\n\n private isInitialized = false;\n\n constructor( \n private twilioService: TwilioService,\n private extService: ExtensionService,\n private dialog: MatDialog,\n private ipService: IpAddressService,\n private extensionService: ExtensionService,\n private cdk: ChangeDetectorRef,\n private router: Router,\n private incomeingCallSocketService: IncomeingCallSocketService,\n ) { \n // Initialize if dialpad is visible by default\n if (!this.isDialpadHidden) {\n console.log('sfsdfdsf')\n this.initializeTwilio();\n }\n console.log('DialboxComponent constructor');\n }\n private initializeTwilio() {\n if (!this.isInitialized) {\n this.token = localStorage.getItem('ext_token') || '';\n if (!this.token) {\n console.error('No authentication token found');\n return;\n }\n \n this.isInitialized = true;\n \n // Initialize Twilio service\n this.twilioService.initializeTwilioDevice(this.deviceId);\n }\n }\n // ngOnChange() {\n // this.initializeTwilio();\n // }\n\n // ngOnInit() {\n // try {\n // this.getContactList();\n // this.getUserCallSetting();\n \n // // Subscribe to dial number events\n // const sub1 = this.twilioService.dialNumberFromOtherModule.subscribe((contact: any) => {\n // if (contact.number) {\n // this.isSmartDialCall = false;\n // if (contact.isDialFromHistory) {\n // //handle dialing from history page\n // if(contact.callerId == 'smartDialing'){\n \n // this.selectedCallerId = { number: contact.from };\n // this.isSmartDialCall = true;\n // setTimeout(() => {\n // this.isDialpadHidden = false;\n // }, 2000);\n // this.callData.phone = contact.number;\n // this.callData.name = contact.name;\n // this.callData.img = contact.img;\n // this.callData.from = contact.from;\n // this.sanitizedNum = contact.number;\n // this.getUserInformation(contact);\n // // this.incomingCallsList.push(contact)\n // this.initiateCall();\n // }else{\n // this.getUserCallSetting();\n // setTimeout(() => {\n // this.isDialpadHidden = false;\n // }, 1000);\n // this.getUserInformation(contact);\n // // this.incomingCallsList.push(contact)\n // this.dialedNumber = contact.number;\n // this.sanitizedNum = contact.number;\n // }\n // } else {\n // if (contact.callerId == 'alwaysAsk' || contact.callerId == 'smartDialing') {\n // this.getUserCallSetting();\n // setTimeout(() => {\n // this.isDialpadHidden = false;\n // }, 1000);\n // this.dialedNumber = contact.number;\n // this.sanitizedNum = contact.number;\n \n // } else {\n // setTimeout(() => {\n // this.isDialpadHidden = false;\n // }, 2000);\n // this.callData.phone = contact.number;\n // this.callData.name = contact.name;\n // this.callData.img = contact.img;\n // this.sanitizedNum = contact.number;\n // this.initiateCall();\n // }\n // }\n \n // }\n // })\n \n // // handle incoming call\n // const sub2 = this.twilioService.currentCall.subscribe(incomingCallData => {\n // // if (incomingCallData) {\n // // this.isCallInProgress = true;\n // // this.isDialpadHidden = false;\n // // this.callData.phone = incomingCallData.parameters.From;\n // // this.callData.name = incomingCallData.customParameters.get('name');\n // // this.callData.img = incomingCallData.customParameters.get('image');\n // // this.callData.isIncomingCall = true;\n // // }\n // if (incomingCallData) {\n // if (this.isCallInProgress) {\n // this.newIncomingCalls.push(incomingCallData);\n // this.getUserInformation(incomingCallData);\n // } else {\n // this.isCallInProgress = true;\n // this.isDialpadHidden = false;\n // this.callData.phone = incomingCallData.parameters['From'];\n\n // this.getUserInformation(incomingCallData);\n // this.callData.name = incomingCallData.customParameters.get('name');\n // this.callData.img = incomingCallData.customParameters.get('image') || 'assets/images/user.jpg';\n // this.callData.isIncomingCall = true;\n // }\n // incomingCallData.on('cancel', () => {\n // this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters.CallSid !== incomingCallData.parameters['CallSid']);\n // if(this.incomingCallsList.length == 0){\n // this.isCallInProgress = false;\n // }\n // });\n\n // incomingCallData.on('disconnect', () => {\n // this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters.CallSid !== incomingCallData.parameters['CallSid']);\n // if(this.incomingCallsList.length == 0){\n // this.isCallInProgress = false;\n // }\n // });\n // }\n // });\n\n // this.subscriptions.add(sub1);\n // this.subscriptions.add(sub2);\n // }catch(e){\n // console.log(e)\n // }\n \n // }\n\n\n\n ngOnInit() {\n console.log('ngOnInit')\n // Ensure Twilio is initialized even when dialpad starts hidden,\n // so we can auto-open on incoming calls.\n this.initializeTwilio();\n this.incomeingCallSocketService.connect();\n\n\n try{\n this.incomeingCallSocketService.listen().subscribe(async(incomingCallData: any) => {\n // const data = JSON.parse(incomingCallData.data);\n // console.log(\"WS Event Received:\", incomingCallData);\n // console.log(\"WS Event Received:\", incomingCallData.data);\n this.twilioService.conferenceCallInfo = incomingCallData;\n if(!!incomingCallData.participants){\n // this.incomingCallsList = incomingCallData.participants.filter((item: any) => !item.isLeft) || [];\n this.incomingCallsList = incomingCallData.participants || [];\n // if (this.incomingCallsList.length) {\n this.isCallInProgress = true;\n this.isDialpadHidden = false;\n // } else {\n // this.callData = [];\n // this.incomingCallsList = [];\n // this.isDialpadHidden = true;\n // }\n } else {\n this.callData = [];\n this.incomingCallsList = [];\n this.isCallInProgress = false;\n }\n // incomingCallData.participants.length ? incomingCallData.participants.filter((item: any) => !item.isLeft) : [];\n // this.initializeTwilio();\n // if (incomingCallData.type === \"/incoming/call\") {\n // if (incomingCallData) {\n // if (this.autoOpenOnIncoming && this._isDialpadHidden) {\n // this._isDialpadHidden = false;\n // }\n\n // if (this.isCallInProgress) {\n // this.newIncomingCalls.push(incomingCallData);\n // console.log('325', incomingCallData)\n // this.getUserInformation(incomingCallData);\n // } else {\n // incomingCallData['isFirstCall'] = true;\n // console.log('dd1')\n // this.isCallInProgress = true;\n // this.isDialpadHidden = false;\n // this.callData.phone = incomingCallData.parameters['From'];\n // console.log('dd2')\n // this.getUserInformation(incomingCallData);\n // this.callData.name = incomingCallData.customParameters.get('name');\n // this.callData.img = incomingCallData.customParameters.get('image') || 'assets/images/user.jpg';\n // this.callData.isIncomingCall = true;\n // }\n // incomingCallData.on('cancel', () => {\n // this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== incomingCallData.parameters['CallSid']);\n // // if(this.incomingCallsList.length == 0){\n // // console.log('dd3')\n // // this.isCallInProgress = false;\n // // }\n // });\n\n // incomingCallData.on('disconnect', () => {\n // this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== incomingCallData.parameters['CallSid']);\n // // if(this.incomingCallsList.length == 0){\n // // console.log('dd4')\n // // this.isCallInProgress = false;\n // // }\n // });\n // }\n // }\n });\n this.token = localStorage.getItem('ext_token') || '';\n //this.isCallInProgress = true;\n this.getContactList();\n \n this.getUserCallSetting();\n const sub1 = this.twilioService.dialNumberFromOtherModule.subscribe((contact:any) => {\n if (contact.number) {\n this.isSmartDialCall = false;\n if (contact.isDialFromHistory) {\n //handle dialing from history page\n if(contact.callerId == 'smartDialing'){\n \n this.selectedCallerId = { number: contact.from };\n this.isSmartDialCall = true;\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 2000);\n this.callData.phone = contact.number;\n this.callData.name = contact.name;\n this.callData.img = contact.img;\n this.callData.from = contact.from;\n this.sanitizedNum = contact.number;\n console.log('274', contact)\n this.getUserInformation(contact);\n // this.incomingCallsList.push(contact)\n this.initiateCall();\n }else{\n this.getUserCallSetting();\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 1000);\n console.log('282', contact)\n this.getUserInformation(contact);\n // this.incomingCallsList.push(contact)\n this.dialedNumber = contact.number;\n this.sanitizedNum = contact.number;\n }\n } else {\n if (contact.callerId == 'alwaysAsk' || contact.callerId == 'smartDialing') {\n this.getUserCallSetting();\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 1000);\n this.dialedNumber = contact.number;\n this.sanitizedNum = contact.number;\n \n } else {\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 2000);\n this.callData.phone = contact.number;\n this.callData.name = contact.name;\n this.callData.img = contact.img;\n this.sanitizedNum = contact.number;\n this.initiateCall();\n }\n }\n \n }\n })\n \n // handle incoming call (managed internally; host need not pass incomingCallData)\n const sub2 = this.twilioService.currentCall.subscribe((incomingCallData: any) => {\n // if (incomingCallData) {\n // this.isCallInProgress = true;\n // this.isDialpadHidden = false;\n // this.callData.phone = incomingCallData.parameters.From;\n // this.callData.name = incomingCallData.customParameters.get('name');\n // this.callData.img = incomingCallData.customParameters.get('image');\n // this.callData.isIncomingCall = true;\n // }\n if (incomingCallData) {\n if (this.autoOpenOnIncoming && this._isDialpadHidden) {\n this._isDialpadHidden = false;\n }\n\n if (this.isCallInProgress) {\n this.newIncomingCalls.push(incomingCallData);\n console.log('325', incomingCallData)\n this.getUserInformation(incomingCallData);\n } else {\n incomingCallData['isFirstCall'] = true;\n console.log('dd1')\n this.isCallInProgress = true;\n this.isDialpadHidden = false;\n this.callData.phone = incomingCallData.parameters['From'];\n console.log('dd2')\n this.getUserInformation(incomingCallData);\n this.callData.name = incomingCallData.customParameters.get('name');\n this.callData.img = incomingCallData.customParameters.get('image') || 'assets/images/user.jpg';\n this.callData.isIncomingCall = true;\n }\n incomingCallData.on('cancel', () => {\n this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== incomingCallData.parameters['CallSid']);\n // if(this.incomingCallsList.length == 0){\n // console.log('dd3')\n // this.isCallInProgress = false;\n // }\n });\n\n incomingCallData.on('disconnect', () => {\n this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== incomingCallData.parameters['CallSid']);\n // if(this.incomingCallsList.length == 0){\n // console.log('dd4')\n // this.isCallInProgress = false;\n // }\n });\n }\n });\n\n this.subscriptions.add(sub1);\n this.subscriptions.add(sub2);\n }catch(e){\n console.log(e)\n }\n }\n\n \n getUserInformation(incomingCallData: any) {\n // console.log('getUserInformation', incomingCallData);\n let data = this.fromEntries(Array.from(incomingCallData.customParameters.entries()));\n console.log('366---', data)\n this.extensionService.getUserInformation(data['twilioAuthId']).subscribe(\n response => {\n incomingCallData['userInfo']=response\n const alreadyExists = this.incomingCallsList.some((call: any) => call.parameters?.CallSid === incomingCallData.parameters?.CallSid);\n if(!alreadyExists){\n this.incomingCallsList.push(incomingCallData);\n }\n this.cdk.detectChanges();\n }, error => {\n console.error('Error starting recording', error);\n });\n }\n\n fromEntries(entries: [string, any][]): Record<string, any> {\n return entries.reduce((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {} as Record<string, any>);\n }\n\n ngAfterViewInit() {\n this.registerDragElement();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if(changes['deviceId']) {\n localStorage.setItem('deviceId', changes['deviceId'].currentValue);\n console.log('Set deviceId in localStorage:', changes['deviceId'].currentValue);\n }\n if (changes['isDialpadHidden'] && !this.isDialpadHidden) {\n this.getContactList();\n this.getUserCallSetting();\n setTimeout(() => {\n this.dialInputElement.nativeElement.focus();\n }, 0);\n if(this.incomingCallData) {\n if (this.isCallInProgress) {\n this.newIncomingCalls.push(this.incomingCallData);\n console.log('404', this.incomingCallData)\n this.getUserInformation(this.incomingCallData);\n } else {\n console.log('dd5')\n this.isCallInProgress = true;\n this.isDialpadHidden = false;\n this.callData.phone = this.incomingCallData.parameters['From'];\n console.log('411', this.incomingCallData)\n this.getUserInformation(this.incomingCallData);\n this.callData.name = this.incomingCallData.customParameters.get('name');\n this.callData.img = this.incomingCallData.customParameters.get('image') || 'assets/images/user.jpg';\n this.callData.isIncomingCall = true;\n }\n this.incomingCallData.on('cancel', () => {\n this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== this.incomingCallData.parameters['CallSid']);\n // if(this.incomingCallsList.length == 0){\n // console.log('dd6')\n // this.isCallInProgress = false;\n // }\n this.incomingCallData.disconnect();\n });\n \n this.incomingCallData.on('disconnect', () => {\n this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters['CallSid'] !== this.incomingCallData.parameters['CallSid']);\n this.incomingCallData.disconnect();\n // if(this.incomingCallsList.length == 0){\n // console.log('dd7')\n // this.isCallInProgress = false;\n // }\n });\n }\n }\n if (changes['contactInfo'] && this.contactInfo) {\n let contact = this.contactInfo;\n if (contact.number) {\n this.isSmartDialCall = false;\n if (contact.isDialFromHistory) {\n //handle dialing from history page\n if(contact.callerId == 'smartDialing'){\n \n this.selectedCallerId = { number: contact.from };\n this.isSmartDialCall = true;\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 2000);\n this.callData.phone = contact.number;\n this.callData.name = contact.name;\n this.callData.img = contact.img;\n this.callData.from = contact.from;\n this.sanitizedNum = contact.number;\n console.log('274', contact)\n this.getUserInformation(contact);\n console.log('454', contact)\n // this.incomingCallsList.push(contact)\n this.initiateCall();\n }else{\n this.getUserCallSetting();\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 1000);\n console.log('282', contact)\n this.getUserInformation(contact);\n console.log('464', contact)\n // this.incomingCallsList.push(contact)\n this.dialedNumber = contact.number;\n this.sanitizedNum = contact.number;\n }\n } else {\n if (contact.callerId == 'alwaysAsk' || contact.callerId == 'smartDialing') {\n this.getUserCallSetting();\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 1000);\n this.dialedNumber = contact.number;\n this.sanitizedNum = contact.number;\n \n } else {\n setTimeout(() => {\n this.isDialpadHidden = false;\n }, 2000);\n this.callData.phone = contact.number;\n this.callData.name = contact.name;\n this.callData.img = contact.img;\n this.sanitizedNum = contact.number;\n this.initiateCall();\n }\n }\n \n }\n }\n }\n private registerDragElement() {\n try {\n const elmnt = document.getElementById('dragparent1');\n if (!elmnt) {\n console.error('Drag element not found');\n return;\n }\n\n let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;\n\n const dragMouseDown = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName.toLowerCase() === 'input') {\n return;\n }\n\n e.preventDefault();\n pos3 = e.clientX;\n pos4 = e.clientY;\n \n const onMouseMove = (moveEvent: MouseEvent) => elementDrag(moveEvent);\n const onMouseUp = () => {\n document.removeEventListener('mouseup', onMouseUp);\n document.removeEventListener('mousemove', onMouseMove);\n };\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n };\n\n const elementDrag = (e: MouseEvent) => {\n e.preventDefault();\n pos1 = pos3 - e.clientX;\n pos2 = pos4 - e.clientY;\n pos3 = e.clientX;\n pos4 = e.clientY;\n \n elmnt.style.top = (elmnt.offsetTop - pos2) + 'px';\n elmnt.style.left = (elmnt.offsetLeft - pos1) + 'px';\n };\n\n // Check for header element\n const header = document.getElementById(elmnt.id + 'header');\n if (header) {\n header.onmousedown = dragMouseDown;\n } else {\n elmnt.onmousedown = dragMouseDown;\n }\n } catch (e) {\n console.log(e)\n }\n }\n\n addNumber(num: any) {\n if ( num == '#' || num == '*' ||num == '+' || Number.isInteger(num)) {\n if (num == '#') {\n new Audio(`/assets/dial-tones/dtmf/dtmf-hash-.mp3`).play();\n } else if (num == '*') {\n new Audio(`/assets/dial-tones/dtmf/dtmf-star-.mp3`).play();\n } else {\n new Audio(`/assets/dial-tones/dtmf/dtmf-${num}-.mp3`).play();\n }\n\n this.dialedNumber += num;\n this.showInputClearBtn = true;\n\n this.numberDialed.emit(this.dialedNumber);\n\n this.onDialInputChange(this.dialedNumber)\n // this.dialInputRef.nativeElement.focus();\n }else if(num === 'voicemail'){\n // this.showDedicatedPopup = true;\n this.router.navigate(['extension/voicemail/'+this.token]);\n }\n }\n \n hideDialpad() {\n this.isDialpadHidden = true;\n this.closeDialpadEvent.emit();\n this.clearAllDialed();\n this.filteredContactList = [];\n }\n \n onDialInputChange(inputVal: any) {\n try {\n // Updated regex to include x, X, ext., Ext., and ,\n const isNumericInput = /^[\\d\\s+\\-]+$/.test(inputVal);\n let mainNumber = inputVal;\n\n // Check for extension indicators and split the input\n const extMatch = inputVal.match(/(x|X|ext\\.|Ext\\.|,)(.*)/);\n if (extMatch) {\n mainNumber = inputVal.substring(0, extMatch.index).trim();\n this.callData.extNum = extMatch[2].trim();\n }\n this.sanitizedNum = isNumericInput ? mainNumber.replace(/[\\s\\-]+/g, '') : mainNumber;\n\n this.callData.phone = isNumericInput ? this.sanitizedNum : '';\n this.showInputClearBtn = inputVal.length > 0;\n\n if (isNumericInput) {\n this.dialedNumber = new AsYouType().input(this.sanitizedNum);\n }\n\n // emit current number whenever input changes\n this.numberDialed.emit(this.dialedNumber);\n\n if (inputVal.length > 2) {\n this.filteredContactList = this.contactList.filter(contact => {\n const fullName = `${contact.firstName} ${contact.middleName} ${contact.lastName}`.toLowerCase();\n return fullName.includes(this.sanitizedNum.toLowerCase()) || contact.numbersList.some((num: any) => num.number.includes(this.sanitizedNum));\n }).slice(0, 2);\n } else {\n this.filteredContactList = [];\n }\n\n } catch (e) {\n console.log(e);\n }\n }\n\n getFirstLetter(name: string): string {\n return name ? name.charAt(0).toUpperCase() : '';\n }\n clearInput() {\n if (this.dialedNumber.length > 0) {\n this.dialedNumber = this.dialedNumber.slice(0, -1);\n this.showInputClearBtn = this.dialedNumber.length !== 0;\n\n this.onDialInputChange(this.dialedNumber)\n }\n }\n clearAllDialed() {\n this.dialedNumber = '';\n this.sanitizedNum = '';\n this.showInputClearBtn = false;\n }\n getCallerIdList() {\n this.extService.displayID(this.token || '').subscribe((res: any) => {\n //this.callerIdList = res.callerIdList.filter(item => item.type === \"C2C Softphone Number\");\n this.callerIdList = res.callerIdList.filter((item: any) => item.voiceFeature === true);\n // this.callerIdList = res.callerIdList;\n if (this.callerIdList.length == 1) {\n this.selectedCallerId = this.callerIdList[0];\n } else {\n if (this.callPreference === 'alwaysAsk' || this.callPreference === 'smartDialing') {\n this.selectedCallerId = null;\n } else {\n this.selectedCallerId = this.callerIdList.find(item => (item.number == this.callPreference));\n }\n }\n });\n }\n getContactList() {\n this.twilioService.getContactList().subscribe((resp: any) => {\n if (resp.response == 'Success') {\n this.contactList = resp.phoneBook;\n }\n }, err => {\n console.log(err)\n })\n }\n getFullName(contact: any): string {\n let fullName = contact.firstName || '';\n if (contact.middleName) {\n fullName += ` ${contact.middleName}`;\n }\n if (contact.lastName) {\n fullName += ` ${contact.lastName}`;\n }\n return fullName.trim();\n }\n\n\n toggleCallerIdDiv() {\n this.isCallerIdHidden = !this.isCallerIdHidden;\n }\n\n onContactSelect(contact: any) {\n this.dialedNumber = contact.numbersList[0].number;\n this.callData.name = this.getFullName(contact);\n this.callData.img = contact.image || 'assets/images/user.jpg';\n this.onDialInputChange(this.dialedNumber);\n this.filteredContactList = [];\n }\n\n endCall() {\n try {\n console.log('Ending call');\n console.log('dd8')\n this.isCallInProgress = false;\n this.filteredContactList = [];\n \n // Reset call data\n this.callData = {\n phone: '',\n name: '',\n img: 'assets/images/user.jpg',\n isIncomingCall: false,\n dial: false,\n displayNum: '',\n extNum: ''\n };\n \n // Reset dialed number\n this.dialedNumber = '';\n this.sanitizedNum = '';\n \n // Emit end call event\n this.endCallEvent.emit();\n console.log('Call ended successfully');\n \n } catch (error) {\n console.error('Error in endCall:', error);\n // Even if there's an error, try to reset the state\n console.log('dd9')\n this.isCallInProgress = false;\n this.callData = {\n phone: '',\n name: '',\n img: 'assets/images/user.jpg',\n isIncomingCall: false,\n dial: false,\n displayNum: '',\n extNum: ''\n };\n this.endCallEvent.emit();\n }\n }\n\n // async initiateCall() {\n // try {\n // console.log('Initiating call with number:', this.dialedNumber);\n \n // if (!this.dialedNumber && this.lastDialed) {\n // console.log('Using last dialed number:', this.lastDialed.number);\n // this.sanitizedNum = this.lastDialed.number;\n // }\n\n // const isInvalid = await this.isInvalidNumber();\n // if (isInvalid) {\n // console.error('Invalid number format');\n // return false;\n // }\n\n // this.saveLastDialed();\n // this.isSavedContactDialled();\n \n // // Check payment status\n // this.isPaymentDue = localStorage.getItem('paymentDue') === 'true';\n // if (this.isPaymentDue) {\n // console.warn('Payment is due');\n // swal('Warning', 'Please note that your payment is due. To continue using our services, kindly subscribe to avoid interruptions.');\n // return false;\n // }\n\n // // Check if dialing own number\n // if (this.sanitizedNum === localStorage.getItem('twilioNumber')) {\n // console.error('Attempted to dial own number');\n // swal('Error', 'You cannot dial your own number');\n // return false;\n // }\n\n // // Check microphone permissions\n // const hasPermission = await this.checkMicrophonePermission();\n // if (!hasPermission) {\n // console.warn('Microphone permission not granted');\n // await this.askForMicrophonePermission();\n // return false;\n // }\n\n // if (!this.selectedCallerId) {\n // console.error('No caller ID selected');\n // this.shakeDedicatedBtn = true;\n // this.showDialAlert('Please select a C2C number to call from');\n // setTimeout(() => {\n // this.shakeDedicatedBtn = false;\n // }, 3000);\n // return false;\n // }\n\n // console.log('Getting number with country code...');\n // this.callData.displayNum = '';\n \n // try {\n // await this.getToNumber(this.sanitizedNum);\n // } catch (error) {\n // console.error('Error getting number with country code:', error);\n // this.showDialAlert('Error processing number. Please try again.');\n // return false;\n // }\n\n // if (this.terminateCall) {\n // console.log('Call terminated by user');\n // this.terminateCall = false;\n // return false;\n // }\n\n // // Prepare call data\n // this.callData = {\n // ...this.callData,\n // phone: this.sanitizedNum,\n // isIncomingCall: false,\n // dial: true,\n // from: this.isSmartDialCall ? this.callData.from : this.selectedCallerId.number,\n // timestamp: new Date().toISOString()\n // };\n\n // console.log('Initiating call with data:', this.callData);\n // this.isCallInProgress = true;\n // this.callInitiated.emit({ ...this.callData });\n \n // return true;\n \n // } catch (error) {\n // console.error('Error in initiateCall:', error);\n // this.showDialAlert('Failed to initiate call. Please try again.');\n // this.isCallInProgress = false;\n // return false;\n // }\n // //this.clearAllDialed();\n // // } else {\n // // swal('Error', 'Trial period is over. Please setup payment method to continue services')\n // // }\n // }\n\n\n // async initiateCall() {\n // if (!this.dialedNumber && this.lastDialed) {\n // this.sanitizedNum = this.lastDialed.number;\n // }\n // const isInvalid = await this.isInvalidNumber();\n // if (isInvalid) {\n // return false;\n // }\n // this.saveLastDialed();\n // this.isSavedContactDialled();\n // //let isCallerIdSet = await this.isCallerIdSet();\n // this.isPaymentDue = localStorage.getItem('paymentDue') == 'false' ? false : true;\n // if (this.isPaymentDue) {\n // swal('Warning', 'Please note that your payment is due, To continue on your services kindly subscribe to use uninterrupted services.');\n // return;\n // }\n // this.isTrialPeriodOver = localStorage.getItem('trialOver') == 'false' ? false : true;\n // // if (!this.isTrialPeriodOver) {\n // if (this.sanitizedNum == localStorage.getItem('twilioNumber')) {\n // swal('Error', 'You can not dial this number');\n // return;\n // }\n\n // const hasPermission = await this.checkMicrophonePermission();\n // if (hasPermission) {\n // if (this.selectedCallerId) {\n // //clear displayNum if value is binded from previous call\n // this.callData.displayNum = '';\n // // get number to be dialled from backend\n // await this.getToNumber(this.sanitizedNum);\n // if (this.terminateCall) {\n // this.terminateCall = false;\n // return;\n // }\n // this.callData.phone = this.sanitizedNum;\n // this.callData.isIncomingCall = false;\n // this.callData.dial = true;\n // if (!this.isSmartDialCall) {\n // this.callData.from = this.selectedCallerId.number;\n // }\n \n // this.isCallInProgress = true;\n // this.callData = {\n // ...this.callData,\n // phone: this.sanitizedNum,\n // isIncomingCall: false,\n // dial: true,\n // from: this.isSmartDialCall ? this.callData.from : this.selectedCallerId.number,\n // timestamp: new Date().toISOString()\n // };\n\n // console.log('Initiating call with data:', this.callData);\n // this.isCallInProgress = true;\n // this.callInitiated.emit({ ...this.callData });\n // return true;\n // } else {\n // this.shakeDedicatedBtn = true;\n // this.showDialAlert('Select a C2C number to call');\n // setTimeout(() => {\n // this.shakeDedicatedBtn = false;\n // }, 3000);\n // return false;\n // }\n // //this.callingOpenEvent.emit({ phone: this.dialedNumber });\n // } else {\n // await this.askForMicrophonePermission();\n // }\n // //this.clearAllDialed();\n // // } else {\n // // swal('Error', 'Trial period is over. Please setup payment method to continue services')\n // // }\n // }\n\n\n // async initiateCall() {\n // try{\n // if (!this.dialedNumber && this.lastDialed) {\n // this.sanitizedNum = this.lastDialed.number;\n // }\n\n // const isInvalid = await this.isInvalidNumber();\n // if (isInvalid) {\n // return false;\n // }\n // this.saveLastDialed();\n // this.isSavedContactDialled();\n // //let isCallerIdSet = await this.isCallerIdSet();\n\n // this.isPaymentDue = localStorage.getItem('paymentDue') == 'false' ? false : true;\n // if (this.isPaymentDue) {\n // swal('Warning', 'Please note that your payment is due, To continue on your services kindly subscribe to use uninterrupted services.');\n // return false;\n // }\n\n // this.isTrialPeriodOver = localStorage.getItem('trialOver') == 'false' ? false : true;\n // // if (!this.isTrialPeriodOver) {\n // if (this.sanitizedNum == localStorage.getItem('twilioNumber')) {\n // swal('Error', 'You can not dial this number');\n // return false;\n // }\n\n // const hasPermission = await this.checkMicrophonePermission();\n // if (hasPermission) {\n // if (this.selectedCallerId) {\n // //clear displayNum if value is binded from previous call\n // this.callData.displayNum = '';\n // // get number to be dialled from backend\n // await this.getToNumber(this.sanitizedNum);\n // if (this.terminateCall) {\n // this.terminateCall = false;\n // return;\n // }\n // this.callData.phone = this.sanitizedNum;\n // this.callData.isIncomingCall = false;\n // this.callData.dial = true;\n // if (!this.isSmartDialCall) {\n // this.callData.from = this.selectedCallerId.number;\n // }\n \n // this.isCallInProgress = true;\n // this.callData = {\n // ...this.callData,\n // phone: this.sanitizedNum,\n // isIncomingCall: false,\n // dial: true,\n // from: this.isSmartDialCall ? this.callData.from : this.selectedCallerId.number,\n // timestamp: new Date().toISOString()\n // };\n\n // console.log('Initiating call with data:', this.callData);\n // this.isCallInProgress = true;\n // this.callInitiated.emit({ ...this.callData });\n // return true;\n // } else {\n // this.shakeDedicatedBtn = true;\n // this.showDialAlert('Select a C2C number to call');\n // setTimeout(() => {\n // this.shakeDedicatedBtn = false;\n // }, 3000);\n // return false;\n // }\n // //this.callingOpenEvent.emit({ phone: this.dialedNumber });\n // } else {\n // await this.askForMicrophonePermission();\n // }\n // //this.clearAllDialed();\n // // } else {\n // // swal('Error', 'Trial period is over. Please setup payment method to continue services')\n // // }\n // }catch(e){\n // console.error('Error in initiateCall:', e);\n\n // this.showDialAlert('Failed to initiate call. Please try again.');\n\n // this.isCallInProgress = false;\n\n // return false;\n // }\n // }\n\n\n async initiateCall() {\n try {\n if (!this.dialedNumber && this.lastDialed) {\n this.sanitizedNum = this.lastDialed.number;\n }\n \n const isInvalid = await this.isInvalidNumber();\n if (isInvalid) {\n return false;\n }\n this.saveLastDialed();\n this.isSavedContactDialled();\n \n this.isPaymentDue = localStorage.getItem('paymentDue') === 'false' ? false : true;\n if (this.isPaymentDue) {\n swal('Warning', 'Please note that your payment is due, To continue on your services kindly subscribe to use uninterrupted services.');\n return false;\n }\n \n this.isTrialPeriodOver = localStorage.getItem('trialOver') === 'false' ? false : true;\n \n if (this.sanitizedNum === localStorage.getItem('twilioNumber')) {\n swal('Error', 'You can not dial this number');\n return false;\n }\n \n const hasPermission = await this.checkMicrophonePermission();\n if (!hasPermission) {\n await this.askForMicrophonePermission();\n return false;\n }\n \n if (!this.selectedCallerId) {\n this.shakeDedicatedBtn = true;\n this.showDialAlert('Select a C2C number to call');\n setTimeout(() => {\n this.shakeDedicatedBtn = false;\n }, 3000);\n return false;\n }\n \n // Clear displayNum if value is bound from previous call\n this.callData.displayNum = '';\n \n // Get number to be dialed from backend\n await this.getToNumber(this.sanitizedNum);\n if (this.terminateCall) {\n this.terminateCall = false;\n return;\n }\n \n // Update call data in a single operation\n this.callData = {\n ...this.callData,\n phone: this.sanitizedNum,\n isIncomingCall: false,\n dial: true,\n from: this.isSmartDialCall ? this.callData.from : this.selectedCallerId.number,\n timestamp: new Date().toISOString()\n };\n \n // console.log('Initiating call with data:', this.callData);\n console.log('dd10')\n this.isCallInProgress = true;\n this.callInitiated.emit({ ...this.callData });\n return true;\n \n } catch (e) {\n // console.error('Error in initiateCall:', e);\n this.showDialAlert('Failed to initiate call. Please try again.');\n console.log('dd11')\n this.isCallInProgress = false;\n return false;\n }\n }\n\n async isInvalidNumber() {\n try {\n if(this.sanitizedNum == ''){\n this.showDialAlert('Invalid Number');\n return true;\n }\n const validNumberPattern = /^[+\\d\\s()-]*$/; // Regular expression to match valid characters\n const phoneNumber = this.sanitizedNum;\n if (!validNumberPattern.test(phoneNumber)) {\n this.showDialAlert('Invalid Number');\n return true;\n }\n return false;\n } catch (error) {\n this.showDialAlert('Invalid Number');\n return true; // Return true if an error occurred, meaning the number is invalid\n }\n }\n \n saveLastDialed() {\n const contact = this.filteredContactList.find((c: any) => c.numbersList.some((n: any) => n.number === this.dialedNumber));\n if (contact) {\n this.lastDialed = {\n name: contact.name,\n image: contact.image,\n number: this.dialedNumber\n };\n } else {\n if(this.dialedNumber){\n this.lastDialed = { number: this.dialedNumber };\n }\n \n }\n }\n isSavedContactDialled(){\n let phoneNum = this.sanitizedNum.replace(/\\s+/g, '');\n let contact = this.contactList.filter((contact: any) => {\n return contact.numbersList.some((num: any) => num.number === phoneNum)\n });\n if(contact.length){\n this.callData.name = `${contact[0].firstName} ${contact[0].middleName} ${contact[0].lastName}`.toLowerCase();\n this.callData.img = contact[0].image || 'assets/images/user.jpg';\n this.callData.phone = this.sanitizedNum;\n\n return true;\n }\n return false;\n }\n showDialAlert(message: string) {\n this.dialAlert = {\n msg: message,\n show: true\n };\n setTimeout(() => {\n this.dialAlert.show = false;\n }, 3000);\n }\n async isCallerIdSet(): Promise<boolean> {\n try {\n const tkn = localStorage.getItem('ext_token');\n const res: any = await this.extService.fetchCallerId(tkn || '').toPromise();\n if (res.status == 200) {\n localStorage.setItem('trialOver', res.trialOver);\n this.twilioService.isTrialOver.next(res.trialOver);\n localStorage.setItem('paymentDue', res.paymentDue);\n this.twilioService.isPaymentDue.next(res.paymentDue);\n }\n if (res.callerid) {\n localStorage.setItem('callerID', res.callerid);\n\n this.extService.changeMessage(res.callerid);\n } else {\n localStorage.setItem('callerID', 'Not set');\n this.extService.changeMessage('Not set');\n }\n\n return (localStorage.getItem('callerID') !== 'Not set');\n } catch (e) {\n console.log(e);\n return false;\n }\n }\n async checkMicrophonePermission(): Promise<boolean> {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n stream.getTracks().forEach(track => track.stop());\n return true;\n } catch (error) {\n if ((error as any).name === 'NotAllowedError') {\n return false;\n } else {\n return false;\n }\n }\n }\n async askForMicrophonePermission(): Promise<void> {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n stream.getTracks().forEach(track => track.stop());\n } catch (error) {\n console.error('User denied microphone permission:', error);\n }\n }\n // below function is to get the country code with number from server \n async getToNumber(dialedNumber: string) {\n \n if (dialedNumber[0] !== '+') {\n // this is case when user geolocation dial code is on\n let ipAddress: any = await this.ipService.getIpAddressInfo().toPromise();\n const res: any = await this.twilioService.getToNumber(dialedNumber,ipAddress.address.countryCode).toPromise();\n if (res.status == 200) {\n this.toastTimeout = res.timeInterval * 1000;\n await this.showNumberToast(res);\n }\n }\n }\n isAlertEnable() {\n return localStorage.getItem('isAlertEnable');\n }\n async showNumberToast(data: any) {\n const isAlertOn = (localStorage.getItem('isCountryCodeToastOn'));\n if (isAlertOn == 'true') {\n this.callNumberToast.show = true;\n this.callNumberToast.number = data.toNumber;\n this.callNumberToast.displayNum = data.displayNumber;\n }\n \n \n this.callData.displayNum = data.displayNumber;\n //this.callData.phone = data.toNumber;\n await this.delay(this.toastTimeout);\n this.dialedNumber = data.toNumber;\n this.sanitizedNum = data.toNumber;\n this.callNumberToast.show = false;\n this.callNumberToast.number = '';\n this.callNumberToast.displayNum = '';\n }\n delay(ms: number) {\n return new Promise<void>(resolve => setTimeout(resolve, ms));\n }\n isMinimised: boolean = false;\n onMinimise(isMinimised: boolean) {\n this.isMinimised = isMinimised;\n this.minimiseEvent.emit(isMinimised);\n }\n handleNumberPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const clipboardData = event.clipboardData || (window as any).clipboardData;\n const pastedData = clipboardData.getData('text');\n\n // Log the pasted content to the console\n if(pastedData){\n this.dialedNumber = pastedData;\n this.sanitizedNum = pastedData;\n }\n \n }\n onEnter(num:string) {\n // console.log(num, 'number fn')\n this.dialedNumber = this.dialedNumber +num;\n this.sanitizedNum = this.dialedNumber;\n this.showInputClearBtn = true;\n this.numberDialed.emit(this.dialedNumber);\n }\n \n getUserCallSetting() {\n const tkn = localStorage.getItem('ext_token');\n this.extService.fetchCallerId(tkn || '').subscribe((resp: any) => {\n if (resp.status == 200) {\n //this.callPrefernce = resp.userSetting;\n this.callPreference = resp.callerid;\n this.getCallerIdList();\n }\n })\n }\n onDedicatedNumSelect(id: any) {\n this.selectedCallerId = id;\n this.isCallerIdHidden = true;\n this.extService.setCallerId(id);\n }\n cancelDialNumber() {\n this.terminateCall = true;\n this.callNumberToast.show = false;\n }\n\n handleDivKeydown(ev:any){\n if(this.dialedNumber.length == 0){\n this.dialInputElement.nativeElement.focus();\n }\n if (ev.key === 'Enter') {\n // Check if the dialpad is open\n if (!this.isDialpadHidden) {\n if(this.dialedNumber.length > 2 && this.selectedCallerId){\n this.initiateCall();\n }\n if(!this.selectedCallerId){\n this.shakeDedicatedBtn = true;\n setTimeout(() => {\n this.shakeDedicatedBtn = false;\n }, 10000);\n }\n }\n }\n }\n onCallBtnMouseEnter(ev: any) {\n if (!this.selectedCallerId || (this.selectedCallerId == 'alwaysAsk') || (this.selectedCallerId == 'smartDialing')) {\n this.shakeDedicatedBtn = true;\n }\n\n }\n onCallBtnMouseLeave(ev: any) {\n if (!this.selectedCallerId || (this.selectedCallerId == 'alwaysAsk') || (this.selectedCallerId == 'smartDialing')) {\n this.shakeDedicatedBtn = false;\n }\n }\n acceptNewIncomingCall(call: Call) {\n //first cut the current call\n //this.callData = call;\n this.newIncomingCallData = call;\n }\n rejectNewIncomingCall(call: Call) {\n call.reject();\n this.newIncomingCalls = this.newIncomingCalls.filter((item: any) => item.parameters.CallSid !== call.parameters['CallSid']);\n this.incomingCallsList = this.incomingCallsList.filter((item: any) => item.parameters.CallSid !== call.parameters['CallSid']);\n }\n newIncomingCallInitiated() {\n console.log('dd12')\n this.isCallInProgress = true;\n this.newIncomingCalls = [];\n this.incomingCallInitiated.emit();\n }\n incomingCallsNewInfo(data:any){\n this.incomingCallsList = data;\n this.incomingCallsNewInfoEvent.emit(data);\n }\n ngOnDestroy() {\n try {\n console.log('Cleaning up C2cDialpadComponent');\n \n // Unsubscribe from all subscriptions\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n // Clean up Twilio device when component is destroyed\n if (this.twilioService['device']) {\n this.twilioService['device'].destroy();\n }\n \n // End any active call\n if (this.isCallInProgress) {\n this.endCall();\n }\n \n // Clear any timeouts or intervals if they exist\n if (this.toastTimeout) {\n clearTimeout(this.toastTimeout);\n }\n \n console.log('C2cDialpadComponent cleanup complete');\n \n } catch (error) {\n console.error('Error during component cleanup:', error);\n }\n }\n}\n","<div id=\"dragparent1\" [ngStyle]=\"{'display':isDialpadHidden ? 'none': 'block'}\">\r\n <lib-call-progress *ngIf=\"isCallInProgress\"\r\n (endCallEvent)=\"endCall()\"\r\n (minimiseEvent)=\"onMinimise($event)\"\r\n (incomingCallInitiated)=\"newIncomingCallInitiated()\"\r\n [newIncomingCallData]=\"newIncomingCallData\"\r\n [deviceId]=\"deviceId\"\r\n [newIncomingCallsList]=\"incomingCallsList\"\r\n (incomingCallsNewInfo)=\"incomingCallsNewInfo($event)\"\r\n [selectedCallerId]=\"selectedCallerId\"\r\n [callData]=\"callData\">\r\n </lib-call-progress>\r\n <div class=\"dialpad-container\" *ngIf=\"!isCallInProgress\" [ngClass]=\"{'mini-dialpad': isMinimised}\" tabindex=\"0\" (keydown)=\"handleDivKeydown($event)\">\r\n <div id=\"topPanel\" [ngStyle]=\"{'height': callerIdList.length ? '40%' : '39%'}\">\r\n <div class=\"dialpad-alerts\" *ngIf=\"dialAlert.show\">\r\n <div class=\"no-selection-alert\">\r\n <!-- <p class=\"mb-0\">Select C2C number to call</p> -->\r\n <p class=\"mb-0\">{{dialAlert.msg}}</p>\r\n <span class=\"fa fa-times\" (click)=\"shakeDedicatedBtn = false\"></span>\r\n </div>\r\n </div>\r\n <div class=\"dialpad-alerts\" *ngIf=\"callNumberToast.show\">\r\n <div class=\"dialbox-pop1 alert fade show\" [ngClass]=\"callNumberToast.type\" role=\"alert\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"flex-grow-1 my-auto text-left\">\r\n You'r calling <strong>{{callNumberToast.displayNum}}</strong>\r\n </div>\r\n <div class=\"text-right\">\r\n <button class=\"btn btn-link btn-disc p-0 px-1\" (click)=\"cancelDialNumber()\">Cancel Call</button>\r\n <!-- <button class=\"btn btn-link btn-success btn-disc p-0 px-2\">Continue</button> -->\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"padding: 0 18px\" (paste)=\"handleNumberPaste($event)\">\r\n <div class=\"d-flex justify-content-between mt-2\">\r\n <p></p>\r\n <span class=\"material-symbols-outlined dial-close-btn\" (click)=\"hideDialpad()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#ffffff\"><path d=\"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\"/></svg>\r\n </span>\r\n </div>\r\n <div class=\"input-box\">\r\n <input type=\"text\" #dialInput placeholder=\"Enter a name or number\" tabindex=\"1\" [(ngModel)]=\"dialedNumber\" (ngModelChange)=\"onDialInputChange($event)\"/>\r\n <span class=\"\" id=\"input-clear-btn\" (click)=\"clearInput()\" *ngIf=\"showInputClearBtn\">\r\n <svg width=\"50px\" height=\"30px\" viewBox=\"0 10 40 60\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" baseProfile=\"full\" enable-background=\"new 0 0 76.00 76.00\" xml:space=\"preserve\">\r\n <path fill=\"#5d6061\" fill-opacity=\"1\" stroke-width=\"0.2\" stroke-linejoin=\"round\" d=\"M 47.5282,42.9497L 42.5784,38L 47.5282,33.0502L 44.9497,30.4718L 40,35.4216L 35.0502,30.4718L 32.4718,33.0502L 37.4216,38L 32.4718,42.9497L 35.0502,45.5282L 40,40.5784L 44.9497,45.5282L 47.5282,42.9497 Z M 18.0147,41.5355L 26.9646,50.4854C 28.0683,51.589 29,52 31,52L 52,52C 54.7614,52 57,49.7614 57,47L 57,29C 57,26.2386 54.7614,24 52,24L 31,24C 29,24 28.0683,24.4113 26.9646,25.5149L 18.0147,34.4645C 16.0621,36.4171 16.0621,39.5829 18.0147,41.5355 Z M 31,49C 30,49 29.6048,48.8828 29.086,48.3641L 20.1361,39.4142C 19.355,38.6332 19.355,37.3669 20.1361,36.5858L 29.086,27.6362C 29.6048,27.1175 30,27 31,27.0001L 52,27.0001C 53.1046,27.0001 54,27.8955 54,29.0001L 54,47.0001C 54,48.1046 53.1046,49.0001 52,49.0001L 31,49 Z \"/>\r\n </svg> \r\n </span>\r\n <span class=\"input-info-icon\" placement=\"bottom-right\" tooltipClass=\"input-tooltip\" ngbTooltip=\"For extension dialing, use formats like +12345678910 x123,+12345678910 ext.123, +12345678910,123\"><i class=\"fa fa-info-circle\"></i></span>\r\n </div>\r\n <div class=\"guide\" *ngIf=\"callerIdList.length && !(dialedNumber.length > 2)\">\r\n <span class=\"guidetext\">Please enter a number or select a saved contact</span>\r\n </div>\r\n <!-- <div class=\"input-error\" *ngIf=\"dialAlert.show\">\r\n <span>{{dialAlert.msg}}</span>\r\n </div> -->\r\n <div>\r\n <div class=\"contact-card\" *ngFor=\"let contact of filteredContactList\" (click)=\"onContactSelect(contact)\">\r\n <div class=\"contact-img\">\r\n <img [src]=\"contact.image\" alt=\"user image\" loading=\"lazy\" *ngIf=\"contact.image else alphaName\"/>\r\n <ng-template #alphaName>\r\n <span class=\"contact-alpha-img\">{{getFirstLetter(contact.firstName)}}</span>\r\n </ng-template>\r\n </div>\r\n <div class=\"contact-details\">\r\n <p style=\"margin-bottom: 4px\" class=\"contact-name\">{{getFullName(contact) }}</p>\r\n <p>{{contact.numbersList[0].number}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wave-container\">\r\n <svg\r\n class=\"waves\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n viewBox=\"0 24 150 28\"\r\n preserveAspectRatio=\"none\"\r\n shape-rendering=\"auto\"\r\n >\r\n <defs>\r\n <path\r\n id=\"gentle-wave\"\r\n d=\"M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z\"\r\n />\r\n </defs>\r\n <g class=\"parallax\">\r\n <use\r\n xlink:href=\"#gentle-wave\"\r\n x=\"48\"\r\n y=\"0\"\r\n fill=\"rgba(255,255,255,0.7)\"\r\n />\r\n <use\r\n xlink:href=\"#gentle-wave\"\r\n x=\"48\"\r\n y=\"3\"\r\n fill=\"rgba(255,255,255,0.5)\"\r\n />\r\n <!-- <use\r\n xlink:href=\"#gentle-wave\"\r\n x=\"48\"\r\n y=\"5\"\r\n fill=\"rgba(255,255,255,0.3)\"\r\n /> -->\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"7\" fill=\"#fff\" />\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"btn-container\" *ngIf=\"!isMinimised\">\r\n <button class=\"dial-btn\" *ngFor=\"let key of keypadVal;let i = index\"\r\n (keydown.enter)=\"onEnter(key.num)\" (click)=\"addNumber(key.num)\"\r\n [ngStyle]=\"{'margin-top': key.text === '+' ? '3px' : '0'}\"\r\n [tabindex]=\"dialedNumber.length ? '0': i+2\" longPress (longPress)=\"addNumber(key.text)\" shortPress (shortPress)=\"addNumber(key.num)\">\r\n {{key.num}} \r\n <span *ngIf=\"key.num == 1;else otherThanOne\" class=\"material-symbols-outlined voicemail\">\r\n voicemail\r\n </span>\r\n <ng-template #otherThanOne>\r\n <span class=\"btn-albhabets\" [ngClass]=\"{'plusSign': key.text === '+'}\">{{key.text ? key.text : ' '}}</span>\r\n </ng-template>\r\n </button>\r\n </div>\r\n <div class=\"call-btn-container\" *ngIf=\"!isMinimised\" (mouseenter)=\"onCallBtnMouseEnter($event)\" (mouseleave)=\"onCallBtnMouseLeave($event)\">\r\n <div class=\"call-btn\" (click)=\"initiateCall()\" [tabindex]=\"dialedNumber.length ? '2': '15'\"\r\n [ngStyle]=\"{'pointer-events': dialedNumber.length && selectedCallerId ? 'auto' : 'none', 'opacity': dialedNumber.length && selectedCallerId ? '1' : '0.5'}\">\r\n <span class=\"material-symbols-outlined\" style=\"color: white\">\r\n call\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"callerIdList.length && !isMinimised\" class=\"position-relative\">\r\n <div class=\"shownCallerId\" *ngIf=\"selectedCallerId; else askBlock\" (click)=\"toggleCallerIdDiv()\">\r\n <div>\r\n <span [ngClass]=\"'fi fi-' + selectedCallerId?.isoCode?.toLowerCase()\"></span>\r\n {{selectedCallerId?.number}}\r\n </div>\r\n </div>\r\n <ng-template #askBlock>\r\n <div class=\"shownCallerId\" (click)=\"toggleCallerIdDiv()\" [ngClass]=\"{ 'tilt-shaking': shakeDedicatedBtn }\">\r\n <div class=\"d-flex justify-content-center\">\r\n <h5 class=\"mb-0\">Select C2C number</h5>\r\n <!-- <span class=\"ml-2\" style=\"opacity:.8;margin-top:2px\">\r\n <img src=\"assets/images/icon_down_arrow.svg\" alt=\"down\" width=\"10px\">\r\n </span> -->\r\n <span class=\"fa fa-angle-down ml-2 text-blue\" style=\"margin-top:2px\"></span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <div class=\"guide2\" *ngIf=\"shakeDedicatedBtn\">\r\n <span class=\"guidetext\">Please select a number from below dropdown</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"callerIdList.length; else noCallerIdMessage\">\r\n <div class=\"caller-id-list-container\" *ngIf=\"callerIdList.length && !isMinimised\" id=\"callerIdContainer\" [ngClass]=\"{'visible': !isCallerIdHidden}\" >\r\n <div style=\"display: flex; justify-content: space-between\">\r\n <!-- <h4>Select C2C Softphone Number</h4> -->\r\n <h4>Make outgoing call using</h4>\r\n <span\r\n class=\"material-symbols-outlined\"\r\n style=\"cursor: pointer\"\r\n (click)=\"isCallerIdHidden = true\"\r\n >\r\n close\r\n </span>\r\n </div>\r\n <ul>\r\n <ng-container *ngFor=\"let callerId of callerIdList\">\r\n <li [ngClass]=\"{'selectedCallerIdClass': callerId?.number == selectedCallerId?.number}\" (click)=\"onDedicatedNumSelect(callerId)\">\r\n <div>\r\n <span [ngClass]=\"'fi fi-' + callerId?.isoCode?.toLowerCase()\"></span>\r\n {{callerId?.number}}\r\n </div>\r\n <span>{{callerId?.countryName}}</span>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n <ng-template #noCallerIdMessage>\r\n <span class=\"no-caller-id-message\">To make any voice calls, please <a routerLink=\"/extension/dedicatednumber/{{token}}\" class=\"click-here-link\" title=\"Settings > C2C Number\">subscribe</a> to a voice capable C2C Number.\r\n </span>\r\n </ng-template>\r\n <div class=\"dedicated-overlay\" *ngIf=\"showDedicatedPopup\">\r\n <div class=\"card dedicatedNumPopup\">\r\n <div class=\"card-header chooseDedicatedHeader\">\r\n <h5>Choose C2C Number</h5>\r\n <span class=\"material-symbols-outlined dial-close-btn\" (click)=\"showDedicatedPopup = false\">close</span>\r\n </div>\r\n <div class=\"card-body dedicatedNumList\">\r\n <ul>\r\n <ng-container *ngFor=\"let callerId of callerIdList\">\r\n <li [ngClass]=\"{'selectedCallerIdClass': callerId?.number == selectedCallerId?.number}\" (click)=\"showDedicatedPopup = false\">\r\n <div>\r\n <span [ngClass]=\"'fi fi-' + callerId?.isoCode?.toLowerCase()\"></span>\r\n {{callerId?.number}}\r\n </div>\r\n <span>{{callerId?.countryName}}</span>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"incoming-call-widget\" *ngFor=\"let call of newIncomingCalls;let i = index\" [ngStyle]=\"{'top': (30 + i * 72) + 'px'}\">\r\n <div>\r\n <div class=\"inc-user-img\">\r\n <img src=\"assets/images/user.jpg\" alt=\"user image\">\r\n </div>\r\n \r\n </div>\r\n <div class=\"flex-grow-1\">\r\n <p class=\"inc-user-name\">{{call.customParameters.get('name')}}</p>\r\n <p>{{call.parameters.From}}</p>\r\n </div>\r\n <div class=\"d-flex\">\r\n <button class=\"inc-call-btn inc-accept-btn mr-2\" (click)=\"acceptNewIncomingCall(call)\">\r\n <span class=\"material-symbols-outlined\" style=\"color: white\">\r\n call\r\n </span>\r\n </button>\r\n <button class=\"inc-call-btn inc-reject-btn\" (click)=\"rejectNewIncomingCall(call)\">\r\n <span class=\"material-symbols-outlined\" style=\"color: white\">\r\n call_end\r\n </span>\r\n </button>\r\n </div>\r\n \r\n </div> -->\r\n </div>\r\n</div>\r\n","\r\nexport const GlobalConstant = {\r\n ErrorMsg500:\"Unable to process request. Please try again later.\",\r\n isSMSVisible:true,\r\n dedicatedNumText: 'C2C Number'\r\n };\r\n ","import { AfterViewInit, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { Call, Device } from '@twilio/voice-sdk';\nimport { ExtensionService } from '../../../service/extension.service';\nimport { TwilioService } from '../../../service/twilio.service';\nimport { GlobalConstant } from '../../../shared/global-constant';\nimport { NotificationService } from '../../../service/Notification.service';\nimport swal from 'sweetalert2';\nimport { interval, Subscription } from 'rxjs';\n\n\n@Component({ \n selector: 'lib-incoming-call',\n templateUrl: './incoming-call.component.html',\n styleUrls: ['./incoming-call.component.css']\n})\nexport class IncomingCallComponent implements OnInit {\n @Input() incomingCallData: any;\n @Input() newIncomingCallsList: any;\n @Input() deviceId: any;\n showRingAnimation: boolean = true;\n selectedIncomingCall: any = {};\n twilioCallData?: Call;\n twilioAuthId?: string;\n dedicatedNum:string = '';\n CallSid: any;\n recordCall?: boolean;\n shouldRecordCall: boolean = false;\n isClickExpand: boolean = false;\n isRecording: boolean = false;\n isPaused: boolean = false;\n isTwilioConnected: boolean = false;\n\n @Output() closeIncomingCallDiv: EventEmitter<{ show: number, call: any }> = new EventEmitter<{ show: number, call: any }>();\n @Output() incomingCallsNewList: EventEmitter<any> = new EventEmitter<any>();\n @Output() selectedIncomingCallInfo: EventEmitter<any> = new EventEmitter<any>();\n isMute?: boolean;\n \n constructor(\n private extensionService: ExtensionService,\n private twilioService: TwilioService,\n private notificationSerivce: NotificationService\n ) { \n console.log('IncomingCallComponent')\n }\n\n ngOnInit() {\n\n\n // this.twilioService.currentCall.subscribe((call: any) => {\n // if (call) {\n // this.twilioCallData = call;\n // this.notificationSerivce.showNotification(call);\n // // Handle the call UI\n // }\n // });\n console.log('IncomingCallComponent ngOnInit')\n try {\n this.twilioService.currentCall.subscribe(call => {\n if (call) {\n this.twilioCallData = call;\n this.twilioAuthId = call.customParameters.get('twilioAuthId');\n if (!call.parameters) {\n call.parameters = {};\n }\n this.sendIPforIncomingCall(this.twilioAuthId, '');\n call.on('cancel', () => {\n if (this.incomingCallData && this.incomingCallData.parameters && this.incomingCallData.parameters.CallSid) {\n this.newIncomingCallsList = this.newIncomingCallsList.filter((item: any) => item.parameters && item.parameters.CallSid !== this.incomingCallData.parameters.CallSid);\n }\n this.rejectCallFromList(call);\n });\n\n call.on('disconnect', () => {\n if (this.incomingCallData && this.incomingCallData.parameters && this.incomingCallData.parameters.CallSid) {\n this.newIncomingCallsList = this.newIncomingCallsList.filter((item: any) => item.parameters && item.parameters.CallSid !== this.incomingCallData.parameters.CallSid);\n }\n this.rejectCallFromList(call);\n });\n }\n });\n } catch (e) {\n console.log(e);\n }\n }\n\n acceptCallFromList(data?: any) {\n if (!data) { return; }\n // Disconnect any other connected call before accepting this one\n if (this.newIncomingCallsList && this.newIncomingCallsList.length) {\n const otherConnected = this.newIncomingCallsList.find((item: any) => item.isCallConnected && item !== data);\n if (otherConnected) {\n try { otherConnected.disconnect(); } catch {}\n otherConnected.isCallConnected = false;\n otherConnected.isFirstCall = false; \n }\n }\n\n // Accept this call and mark as the active one\n data.accept();\n data.isCallConnected = true;\n data.isFirstCall = true;\n\n this.extensionService.setCallSid(this.CallSid, this.recordCall);\n this.sendIPforIncomingCall(data.customParameters.get('twilioAuthId'), 'answered').then(() => {\n this.closeIncomingCallWrapper(1);\n });\n }\n rejectCallFromList(data?: any) {\n if (!data) return;\n \n if (data.reject) data.reject();\n if (data.disconnect) data.disconnect();\n \n if (data.parameters) {\n data.parameters['isCallConnected'] = false; // Should be false when rejecting\n }\n\n if (data.customParameters) {\n this.sendIPforIncomingCall(data.customParameters.get('twilioAuthId'), 'answered');\n }\n \n if (this.newIncomingCallsList && data && data.parameters && data.parameters.CallSid) {\n this.newIncomingCallsList = this.newIncomingCallsList.filter((item: any) => item.parameters && item.parameters.CallSid !== data.parameters.CallSid);\n this.incomingCallsNewList.emit(this.newIncomingCallsList);\n if(this.newIncomingCallsList.length == 0){\n this.closeIncomingCallDiv.emit({ show: 0, call: data });\n }\n }\n }\n\n closeIncomingCallWrapper(val: any) {\n this.closeIncomingCallDiv.emit({ show: val, call: this.twilioCallData });\n }\n\n toggleMute(data?: any) {\n this.isMute = !this.isMute;\n data.mute(this.isMute);\n }\n\n sendIPforIncomingCall(recordId: any, callstatus: any): Promise<void> {\n console.log('sendIPforIncomingCall')\n return new Promise((resolve, reject) => {\n this.extensionService.getIPDetailsForCall(recordId, callstatus, this.deviceId).subscribe((res: any) => {\n const resp: any = res;\n if (res.status == 200) {\n if (resp.callAuth) {\n this.CallSid = resp.callAuth.callSid;\n this.recordCall = resp.callAuth.recordCall;\n // Handle the recordCall flag\n if (resp.callAuth.recordCall) {\n this.shouldRecordCall = true;\n } else {\n this.shouldRecordCall = false;\n }\n } else {\n // swal(\"Error\", \"Missing call authentication details.\", \"error\");\n }\n \n resolve();\n } else {\n swal(\"Error\", resp.message.join(\"<br/>\"), \"error\");\n resolve();\n }\n }, (error) => {\n swal(\"Error\", GlobalConstant.ErrorMsg500, \"error\");\n resolve();\n });\n });\n }\n onUserInfoByCallSid(){\n if (this.selectedIncomingCall && this.selectedIncomingCall.userInfo) {\n }\n return this.selectedIncomingCall ? Object.keys(this.selectedIncomingCall).length ? true : false : false;\n }\n\n // Check if call has detailed information available for expansion\n hasDetailedInfo(callData: any): boolean {\n if (!callData) return false;\n \n // Check if userInfo exists and has meaningful data\n if (callData.userInfo && callData.userInfo.c2cInformation) {\n const info = callData.userInfo.c2cInformation;\n return !!(\n info.subject && info.subject !== '-' ||\n info.email && info.email !== '-' ||\n info.message && info.message !== '-' ||\n info.pointName && info.pointName !== '-' ||\n info.sourceName && info.sourceName !== '-' ||\n info.extension && info.extension !== '-' ||\n info.url ||\n info.latitude ||\n info.longitude\n );\n }\n \n return false;\n }\n \n onClickExpand(data?: any): void {\n if (this.selectedIncomingCall === data && this.isClickExpand) {\n this.isClickExpand = false;\n this.selectedIncomingCall = null;\n this.selectedIncomingCallInfo.emit({});\n return;\n }\n this.isClickExpand = true;\n this.selectedIncomingCall = data;\n \n if (this.selectedIncomingCall) {\n this.selectedIncomingCall['isClickExpand'] = true;\n \n if (this.newIncomingCallsList && this.newIncomingCallsList.length > 0) {\n this.newIncomingCallsList.forEach((call: any) => {\n if (call !== this.selectedIncomingCall) {\n call['isClickExpand'] = false;\n }\n });\n }\n \n this.selectedIncomingCallInfo.emit(this.selectedIncomingCall);\n \n if(!this.selectedIncomingCall.userInfo || this.selectedIncomingCall.userInfo.status == 201){\n this.getUserInformation(this.selectedIncomingCall);\n }\n }\n }\n\n getUserInformation(incomingCallData: any) {\n let data = this.fromEntries(Array.from(incomingCallData.customParameters.entries()));\n this.extensionService.getUserInformation(data['twilioAuthId']).subscribe(\n response => {\n setTimeout(()=>{\n incomingCallData['userInfo']=response\n }, 5000)\n }, error => {\n console.error('Error starting recording', error);\n });\n }\n\n fromEntries(entries: [string, any][]): Record<string, any> {\n return entries.reduce((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {} as Record<string, any>); \n }\n\n disbaleEndCallBtn = false;\n incomingCallSid = '';\n incomingRecordCall = false;\n timerSubscription?: Subscription;\n timeElapsed = 0;\n toggleRecording(sid: string) {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n }\n startRecording() {\n let sid;\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n sid = this.incomingCallSid ? this.incomingCallSid : this.CallSid;\n \n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n this.extensionService.getCallRecording(sid).subscribe(response => {\n this.isRecording = true;\n this.isPaused = false; \n // this.timeElapsed = 0;\n this.startTimer1();\n }, error => {\n console.error('Error starting recording', error);\n });\n }\n stopRecording() {\n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n this.isRecording = false;\n this.isPaused = false;\n if (this.timerSubscription) {\n this.timerSubscription.unsubscribe();\n }\n }\n pauseRecording() {\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n const sid = this.incomingCallSid ? this.incomingCallSid : this.CallSid;\n \n // if (!this.incomingRecordCall && !this.recordCall) {\n // return;\n // }\n \n this.extensionService.pauseOrResumeRecording(sid, 'pause').subscribe(\n response => {\n // this.stopRecordingTimer();\n this.isPaused = true;\n },\n error => {\n console.error('Error pausing recording:', error);\n // Consider updating the UI to show the error state\n }\n );\n }\n resumeRecording(sid: any) {\n // let sid;\n const details = this.extensionService.getCallSid();\n this.incomingCallSid = details.callSid;\n this.incomingRecordCall = details.recordCall;\n sid = this.incomingCallSid ? this.incomingCallSid : this.CallSid;\n \n // if (!this.incomingRecordCall && !this.recordCall) {\n // return; // Skip if recording is not enabled\n // }\n this.extensionService.pauseOrResumeRecording(sid, 'resume').subscribe(response => {\n this.isPaused = false;\n this.startTimer1();\n }, error => {\n console.error('Error resuming recording', error);\n });\n }\n startTimer1() {\n this.timerSubscription = interval(1000).subscribe(() => {\n this.timeElapsed++;\n });\n }\n stopRecordingTimer() {\n if (this.timerSubscription) {\n this.timerSubscription.unsubscribe(); // Pause the timer\n this.timerSubscription = undefined; // Optionally reset the subscription\n }\n }\n // device: any;\n onEndCall(){\n this.extensionService.getRemoveParticipants(this.incomingCallData.participantId,this.incomingCallData.conferenceId).toPromise();\n }\n async add(data?: any) {\n if(data?.status != 'ringing'){\n let device = await this.twilioService.connect('');\n console.log(device, 'callConnect');\n } else if(data?.status == 'ringing'){\n this.twilioService.addIncomingParticipant(data?.id, this.twilioService.conferenceCallInfo.conferenceId).subscribe((data: any) => {\n console.log(data,'bhhhhhhhhhhhhhhhhhhh')\n })\n }\n \n // this.device = new Device();/\n // Device.connect({ conferenceName: 'my-conference-room' });\n // this.device = new Device({ conferenceName: 'my-conference-room' });\n }\n}\n\n\n// this.twilioService.addIncomingParticipant(data?.id, this.twilioService.conferenceCallInfo.conferenceId).subscribe((data: any) => {\n// console.log(data,'bhhhhhhhhhhhhhhhhhhh')\n// })\n// }","<div class=\"call-container\" *ngIf=\"newIncomingCallsList?.length === 1\">\r\n <div style=\"display: flex; flex-direction: column;\">\r\n <div class=\"callToNum\">Incoming call on <br/><span>{{incomingCallData?.phone || 'Unknown Number'}}</span></div>\r\n <div class=\"call-animation\" [ngClass]=\"{'call-animation-play': showRingAnimation}\">\r\n <img class=\"avatar-img\" [src]=\"newIncomingCallsList[0]?.img || incomingCallData?.img\" alt=\"\" width=\"120\" />\r\n </div>\r\n <div class=\"callerDetails\">\r\n <!-- <h1>{{newIncomingCallsList[0]?.userInfo?.c2cInformation?.name || incomingCallData?.name || 'Unknown Number'}}</h1> -->\r\n <!-- <p>{{newIncomingCallsList[0]?.userInfo?.displayNum ? newIncomingCallsList[0]?.userInfo?.c2cInformation?.number : newIncomingCallsList[0]?.userInfo?.c2cInformation?.number || incomingCallData?.displayNum || incomingCallData?.phone}}</p> -->\r\n <h1>{{incomingCallData?.name || 'Unknown Number'}}</h1>\r\n <p>{{incomingCallData?.phone}}</p>\r\n </div>\r\n \r\n <!-- <div class=\"callerDetails\">\r\n <h1 [ngStyle]=\"{'margin-top': showKeypad ? '0': '8px'}\">{{callData.name}}</h1>\r\n <p>{{callData.displayNum ? callData.displayNum : callData.phone }}</p>\r\n <h4 style=\"margin-top: 4px\">{{timer}}</h4>\r\n </div> -->\r\n <div class=\"call-action-btns\">\r\n <button class=\"call-btn receive-btn\" *ngIf=\"!newIncomingCallsList[0]?.isCallConnected || incomingCallData\">\r\n <span class=\"material-symbols-outlined\" (click)=\"add(newIncomingCallsList[0])\"> call </span> \r\n </button>\r\n <!-- <button class=\"call-btn receive-btn\" *ngIf=\"!newIncomingCallsList[0]?.isCallConnected || incomingCallData\">\r\n <span class=\"material-symbols-outlined\" (click)=\"acceptCallFromList(newIncomingCallsList[0])\"> call </span>\r\n </button> -->\r\n <button class=\"call-btn mute-btn\" *ngIf=\"newIncomingCallsList[0]?.isCallConnected\" (click)=\"toggleMute(newIncomingCallsList[0])\" [ngClass]=\"{'active-mute': isMute}\">\r\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\r\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic</span>\r\n </button>\r\n <div class=\"record-btn-container \">\r\n <button class=\"record-btn start-stop\" *ngIf=\"newIncomingCallsList[0]?.isCallConnected && !isRecording\" [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording('')\" [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\" [disabled]=\"disbaleEndCallBtn\">\r\n <span class=\"recording-icon\"></span>\r\n </button> \r\n <div class=\"\">\r\n <button class=\"record-btn pause-resume\" *ngIf=\"newIncomingCallsList[0]?.isCallConnected && isRecording && !isPaused\" (click)=\"pauseRecording()\">\r\n <span class=\"material-symbols-outlined\"> pause </span>\r\n </button>\r\n <button class=\"record-btn pause-resume\" *ngIf=\"newIncomingCallsList[0]?.isCallConnected && isPaused\" (click)=\"resumeRecording('')\">\r\n <span class=\"material-symbols-outlined\"> play_arrow </span>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- <button class=\"call-btn reject-btn\">\r\n <span class=\"material-symbols-outlined\" (click)=\"rejectCallFromList(newIncomingCallsList[0])\"> call_end </span>\r\n </button> -->\r\n <button class=\"call-btn reject-btn\">\r\n <span class=\"material-symbols-outlined\" (click)=\"onEndCall()\"> call_end </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"wave-container\">\r\n <svg class=\"waves\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n viewBox=\"0 24 150 28\" preserveAspectRatio=\"none\" shape-rendering=\"auto\">\r\n <defs>\r\n <path id=\"gentle-wave\" d=\"M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z\" />\r\n </defs>\r\n <g class=\"parallax\">\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"0\" fill=\"rgba(255,255,255,0.7)\" />\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"3\" fill=\"rgba(255,255,255,0.5)\" />\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"7\" fill=\"#fff\" />\r\n </g>\r\n </svg>\r\n </div>\r\n</div>\r\n\r\n<div class=\"call-container\" style=\"width: 100%;\" *ngIf=\"newIncomingCallsList?.length > 1\" [ngClass]=\"{'call-container-open': selectedIncomingCall?.isClickExpand}\">\r\n <div class=\"collops\">\r\n <div class=\"d-flex w-100\">\r\n <div class=\"d-flex flex-column container-fluid\" >\r\n <div class=\"callToNum\">Incoming call <br/><span>{{dedicatedNum}}</span></div>\r\n <ng-container *ngFor=\"let data of newIncomingCallsList\"> \r\n <div class=\"p-2 \">\r\n <div class=\"call-info-wrapper w-100 d-flex align-items-center\">\r\n <div class=\"img\">\r\n <img class=\"avatar-img-wrapper\" [src]=\"data?.img\" alt=\"\" width=\"45\" />\r\n </div>\r\n <div class=\"d-flex justify-content-between w-100 align-items-center mr-2\">\r\n <div class=\"callerDetails-wrapper\">\r\n <h5 class=\"break-word\">{{data?.userInfo?.c2cInformation?.name || '-'}}</h5>\r\n <p class=\"break-word\">{{data?.userInfo?.displayNum ? data?.userInfo?.c2cInformation?.number : data?.userInfo?.c2cInformation?.number }}</p>\r\n </div> \r\n <div class=\"d-flex align-items-center\">\r\n <button class=\"call-btn-wrapper receive-btn\" *ngIf=\"!data?.isCallConnected\">\r\n <!-- <span class=\"material-symbols-outlined\" (click)=\"acceptCallFromList(data)\"> call </span> -->\r\n <span class=\"material-symbols-outlined\" (click)=\"add(data)\"> call </span>\r\n </button>\r\n <button class=\"call-btn-wrapper mute-btn\" *ngIf=\"data?.isCallConnected\" (click)=\"toggleMute(data)\" [ngClass]=\"{'active-mute': isMute}\">\r\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\r\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic</span>\r\n </button>\r\n <div class=\"record-btn-container\">\r\n <button class=\"record-btn start-stop\" *ngIf=\"data?.isCallConnected && !isRecording\" [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording('')\" [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\" [disabled]=\"disbaleEndCallBtn\">\r\n <span class=\"recording-icon\"></span>\r\n </button> \r\n <div class=\"\">\r\n <button class=\"record-btn pause-resume\" *ngIf=\"data?.isCallConnected && isRecording && !isPaused\" (click)=\"pauseRecording()\">\r\n <span class=\"material-symbols-outlined\"> pause </span>\r\n </button>\r\n <button class=\"record-btn pause-resume\" *ngIf=\"data?.isCallConnected && isPaused\" (click)=\"resumeRecording('')\">\r\n <span class=\"material-symbols-outlined\"> play_arrow </span>\r\n </button>\r\n </div>\r\n </div>\r\n <button class=\"call-btn-wrapper reject-btn\">\r\n <span class=\"material-symbols-outlined\" (click)=\"rejectCallFromList(data)\"> call_end </span>\r\n </button>\r\n <div class=\"togglearrow-arrow me-2\" id=\"togglearrow\" \r\n (click)=\"hasDetailedInfo(data) ? onClickExpand(data) : null\" \r\n [ngClass]=\"{'disabled': !hasDetailedInfo(data)}\"\r\n [title]=\"hasDetailedInfo(data) ? 'View details' : 'No details available'\">\r\n <i class=\"fa fa-angle-right\"></i>\r\n </div>\r\n <!-- <div *ngIf=\"data?.customParameters?.get('c2cNumber') === true || data?.customParameters?.get('c2cNumber') === 'true'\" class=\"togglearrow-arrow me-2\" id=\"togglearrow\" (click)=\"onClickExpand(data)\"> \r\n <i class=\"fa fa-angle-right\"></i> \r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"call-container p-3 text-white model-content\" *ngIf=\"isClickExpand \"> \r\n <div class=\"mb-2\" style=\"width: 100%; height: 100%;\">\r\n <div class=\"call-animation\" [ngClass]=\"{'call-animation-play': showRingAnimation}\">\r\n <img class=\"avatar-img\" [src]=\"incomingCallData.img\" alt=\"\" width=\"100\" />\r\n </div>\r\n <div class=\"text-center\">\r\n <h3 class=\"text-white\">{{selectedIncomingCall?.userInfo?.c2cInformation?.name || '-'}}</h3>\r\n </div>\r\n <div class=\"f-13\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-12 d-flex align-items-center mb-2\">\r\n <div class=\"me-2\">Subject:</div>\r\n <div class=\"ml-2\">{{selectedIncomingCall?.userInfo?.c2cInformation?.subject || '-'}}</div>\r\n </div> \r\n </div>\r\n\r\n <div class=\"row mb-2\">\r\n <div class=\"col-12 d-flex align-items-center mb-2\">\r\n <div class=\"me-2\">Email:</div>\r\n <div>{{selectedIncomingCall?.userInfo?.c2cInformation?.email || '-'}}</div>\r\n </div> \r\n </div>\r\n\r\n <div class=\"row mb-2\">\r\n <div class=\"col-6 mb-2\">\r\n <div class=\"\">Number:</div>\r\n <div class=\"\">{{selectedIncomingCall?.userInfo?.c2cInformation?.number}}</div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"\">Language:</div>\r\n <div class=\"ml-2\">{{selectedIncomingCall?.userInfo?.c2cInformation?.language || '-'}}</div>\r\n </div>\r\n </div>\r\n <div class=\"row mb-2\">\r\n <div class=\"col-6 mb-2\">\r\n <div class=\"\">Extension:</div>\r\n <div class=\"ml-2\">{{selectedIncomingCall?.userInfo?.c2cInformation?.extension || '-'}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-12 d-flex align-items-center mb-2\">\r\n <div class=\"me-2\">Image:</div>\r\n <div class=\"text-ellipsis\">\r\n <ng-container *ngIf=\"selectedIncomingCall?.userInfo?.c2cInformation?.image && selectedIncomingCall?.userInfo?.c2cInformation?.image !== '-'; else noImage\">\r\n <img src=\"{{selectedIncomingCall?.userInfo?.c2cInformation?.image}}\" alt=\"\" width=\"42\" height=\"42\" class=\"ml-2\"/>\r\n </ng-container>\r\n <ng-template #noImage>\r\n <span class=\"ml-2\">No Image Available</span>\r\n </ng-template>\r\n </div>\r\n </div> \r\n </div>\r\n\r\n <div class=\" mb-4\">\r\n <div class=\"\">\r\n <div class=\"\">Message:</div>\r\n <div class=\"text-ellipsis\">{{selectedIncomingCall?.userInfo?.c2cInformation?.message || '-'}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-2\">\r\n <div class=\"col-6 mb-2\">\r\n <div class=\"\">Point Name:</div>\r\n <div class=\"\">{{selectedIncomingCall?.userInfo?.c2cInformation?.pointName || '-'}}</div>\r\n </div>\r\n <div class=\"col-6 mb-2\">\r\n <div class=\"\">Source Name:</div>\r\n <div class=\"\">{{selectedIncomingCall?.userInfo?.c2cInformation?.sourceName || '-'}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"call-action-btns mt-0\">\r\n <button class=\"call-btn receive-btn\" *ngIf=\"!selectedIncomingCall?.isCallConnected\">\r\n <span class=\"material-symbols-outlined\" (click)=\"acceptCallFromList(selectedIncomingCall)\"> call </span>\r\n </button>\r\n <button class=\"call-btn mute-btn\" *ngIf=\"selectedIncomingCall?.isCallConnected\" (click)=\"toggleMute(selectedIncomingCall)\" [ngClass]=\"{'active-mute': isMute}\">\r\n <span class=\"material-symbols-outlined\" *ngIf=\"isMute\"> mic_off </span>\r\n <span class=\"material-symbols-outlined\" *ngIf=\"!isMute\"> mic </span>\r\n </button>\r\n <div class=\"record-btn-container\">\r\n <button class=\"record-btn start-stop\" *ngIf=\"selectedIncomingCall?.isCallConnected && !isRecording\" [ngClass]=\"{'recording': isRecording, 'stopped': !isRecording}\" (click)=\"toggleRecording('')\" [title]=\"isRecording ? 'Stop Recording' : 'Start Recording'\" [disabled]=\"disbaleEndCallBtn\">\r\n <span class=\"recording-icon\"></span>\r\n </button> \r\n <div class=\"pause-resume-btns\">\r\n <button class=\"record-btn pause-resume\" *ngIf=\"selectedIncomingCall?.isCallConnected && isRecording && !isPaused\" (click)=\"pauseRecording()\">\r\n <span class=\"material-symbols-outlined\"> pause </span>\r\n </button>\r\n <button class=\"record-btn pause-resume\" *ngIf=\"selectedIncomingCall?.isCallConnected && isPaused\" (click)=\"resumeRecording('')\">\r\n <span class=\"material-symbols-outlined\"> play_arrow </span>\r\n </button>\r\n </div>\r\n </div>\r\n <button class=\"call-btn reject-btn\">\r\n <span class=\"material-symbols-outlined\" (click)=\"rejectCallFromList(selectedIncomingCall)\"> call_end </span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"wave-container\">\r\n <svg class=\"waves\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n viewBox=\"0 24 150 28\" preserveAspectRatio=\"none\" shape-rendering=\"auto\" [ngStyle]=\"{'width': '756px'}\">\r\n <defs>\r\n <path id=\"gentle-wave\" d=\"M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z\" />\r\n </defs>\r\n <g class=\"parallax\">\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"0\" fill=\"rgba(255,255,255,0.7)\" />\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"3\" fill=\"rgba(255,255,255,0.5)\" /> \r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"7\" fill=\"#fff\" />\r\n </g>\r\n </svg>\r\n </div>\r\n</div>","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { TwilioService } from '../../service/twilio.service';\n\n@Component({\n selector: 'lib-caller-id-dialog',\n templateUrl: './caller-id-dialog.component.html',\n styleUrls: ['./caller-id-dialog.component.css']\n})\nexport class CallerIdDialogComponent implements OnInit {\n storedTheme: string = localStorage.getItem('theme-color') || 'blue';\n alertToggle: boolean = true;\n constructor(\n private router: Router,\n private twilServ: TwilioService,\n public dialogRef: MatDialogRef<CallerIdDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) {}\n\n token:string = '';\n ngOnInit(){\n this.alertToggle = (localStorage.getItem('alertToggle') == 'true') ? true: false;\n this.token = localStorage.getItem('ext_token') || '';\n }\n onConfirm(): void {\n this.dialogRef.close(true);\n }\n\n onCancel(): void {\n this.dialogRef.close(false);\n }\n redirectToCallingPreference(){\n this.router.navigateByUrl('/extension/caller-id/'+this.token);\n this.dialogRef.close({event:'redirect', alertToggle: this.alertToggle});\n }\n proceed() {\n this.dialogRef.close({ event: 'proceed', alertToggle: this.alertToggle });\n }\n closeModal(){\n this.dialogRef.close();\n }\n\n hideMessage(ev: any) {\n this.twilServ.toggleCallerIdAlert.next(ev.target.checked);\n let val = ev.target.checked ? 'true' : 'false';\n localStorage.setItem('isAlertEnable', val);\n \n }\n doNotShowAgain() {\n console.log('doNotShowAgain');\n \n }\n}","<div class=\"main-theme {{storedTheme}}\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\"> Caller ID Not Set</h5>\n <button class=\"close\" (click)=\"closeModal()\">\n <span>x</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <p class=\"mb-1\"><strong>There is no caller ID set in your account</strong> <br /></p>\n <p>The receiver will not be able to identify your call or call you back</p>\n <div class=\"d-flex align-items-center justify-content-center\">\n <input type=\"checkbox\" checked (change)=\"hideMessage($event)\" [(ngModel)]=\"alertToggle\" class=\"mr-2\">\n <label for=\"\" class=\"mb-0 text-muted\">I do not want to see this message again</label>\n </div>\n <button class=\"btn btn-black-outline\" (click)=\"doNotShowAgain()\">Do not show this message again</button>\n </div>\n <div class=\"modal-footer border-top d-flex justify-content-between\">\n <button class=\"btn btn-black-outline\" (click)=\"redirectToCallingPreference()\">Click to set caller ID</button>\n \n <button class=\"btn btn-blue ms-2\" (click)=\"proceed()\">Proceed without Caller ID</button>\n </div>\n</div>","import { NgModule } from '@angular/core';\nimport { DialboxComponent } from './dialbox.component';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { HttpClient, HttpClientModule } from '@angular/common/http';\nimport { RouterLink, RouterModule } from '@angular/router';\nimport { CallProgressComponent } from './components/call-progress/call-progress.component';\n\nimport { IncomingCallComponent } from './components/call-progress/incoming-call/incoming-call.component';\nimport { CallerIdDialogComponent } from './components/caller-id-dialog/caller-id-dialog.component';\nimport { BrowserModule } from '@angular/platform-browser';\n\n@NgModule({\n declarations: [\n DialboxComponent,\n CallProgressComponent,\n CallerIdDialogComponent,\n IncomingCallComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n HttpClientModule,\n RouterLink,\n RouterModule,\n BrowserModule\n ],\n exports: [\n DialboxComponent,\n IncomingCallComponent,\n CallProgressComponent,\n CallerIdDialogComponent,\n ]\n})\nexport class DialboxModule { }\n","/*\n * Public API Surface of dialbox\n */\n\nexport * from './lib/dialbox.component';\nexport * from './lib/dialbox.module';\n\n// Components\nexport * from './lib/components/call-progress/call-progress.component';\n// export * from './lib/components/call-progress/incoming-call/incoming-call.component';\nexport * from './lib/components/call-progress/incoming-call/incoming-call.component';\nexport * from './lib/components/caller-id-dialog/caller-id-dialog.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.IpAddressService","i1.TwilioService","i2.ExtensionService","i3.NotificationService","i1.ExtensionService","i2.TwilioService","i3","i4.IpAddressService","i6.IncomeingCallSocketService","i7","i8","i9.CallProgressComponent","i4"],"mappings":"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"}
|