podchat-browser 12.8.0 → 12.8.1-snapshot.2

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/changelog.md CHANGED
@@ -5,6 +5,35 @@ to see complete list of changelog please visit [ChangeLog](http://gp.fanapsoft.i
5
5
 
6
6
  ##[Unreleased]
7
7
 
8
+ ## [12.8.0] - 2023-03-12
9
+ ### Added
10
+ - Prevent request when socket not connected
11
+ - Method: inqueryCallState
12
+ - Event: THREAD_UNREAD_COUNT_UPDATED on chat: LAST_MESSAGE_DELETED
13
+ - Method: resetCallStream
14
+ - Event: CALL_RECORDING_FAILED
15
+ - unreadCount cache, threads cached
16
+ - Parameters: isGroup, type to getThreads
17
+ - uniqueId to async messages
18
+ - Parameters: username, cellphoneNumber to getThreadParticipants
19
+ - Event: CALL_RECORDING_FAILED
20
+ - Method: reGrantMediaStreams
21
+
22
+ ### Changed
23
+ - Implemented new poor connection event for audio and video
24
+ - audioLevel improvement
25
+ - Modified chat ping and async
26
+ - Improved socket connection error
27
+ - Refactor call request handling
28
+ - Parameter: coreUserId to getContacts
29
+ - Parameter: onlyNewMessages to getHistory
30
+ -
31
+ ### Fixed
32
+ - Removed unnecessary call to getAllThreads on asyncReady
33
+ - Improved functionality of field: ownerId
34
+ - Bug in CALL_DIVS event in groupCall
35
+ - Modified method exportChat due to the chat server changes
36
+
8
37
  ## [12.7.2-snapshot.0] - 2022-11-01
9
38
  ### Added
10
39
  - Added possibility to accept incoming call while user is in an existing call
package/dist/node/chat.js CHANGED
@@ -304,9 +304,70 @@ sendMessageCallbacksHandler(_constants.chatMessageVOTypes.DELIVERY,threadId,uniq
304
304
  * Type 20 Unmute muted Thread
305
305
  */case _constants.chatMessageVOTypes.UNMUTE_THREAD:if(chatMessaging.messagesCallbacks[uniqueId]){chatMessaging.messagesCallbacks[uniqueId](_utility["default"].createReturnData(false,'',0,messageContent));}if(fullResponseObject){getThreads({threadIds:[threadId]},function(threadsResult){var thread=threadsResult.result.threads[0];thread.mute=false;_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_UNMUTE',result:{thread:thread}});});}else{_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_UNMUTE',result:{thread:threadId}});}break;/**
306
306
  * Type 21 Update Thread Info
307
- */case _constants.chatMessageVOTypes.UPDATE_THREAD_INFO:if(chatMessaging.messagesCallbacks[uniqueId]){chatMessaging.messagesCallbacks[uniqueId](_utility["default"].createReturnData(false,'',0,messageContent));}if(fullResponseObject){getThreads({threadIds:[messageContent.id],cache:false},function(threadsResult){var thread=formatDataToMakeConversation(threadsResult.result.threads[0]);/**
308
- * Add Updated Thread into cache database #cache
309
- */if(canUseCache&&cacheSecret.length>0){if(db){var tempData={};try{var salt=_utility["default"].generateUUID();tempData.id=thread.id;tempData.owner=chatMessaging.userInfo.id;tempData.title=_utility["default"].crypt(thread.title,cacheSecret,salt);tempData.time=thread.time;tempData.data=_utility["default"].crypt(JSON.stringify(unsetNotSeenDuration(thread)),cacheSecret,salt);tempData.salt=salt;}catch(error){_events.chatEvents.fireEvent('error',{code:error.code,message:error.message,error:error});}db.threads.put(tempData)["catch"](function(error){_events.chatEvents.fireEvent('error',{code:error.code,message:error.message,error:error});});}else{_events.chatEvents.fireEvent('error',{code:6601,message:CHAT_ERRORS[6601],error:null});}}_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_INFO_UPDATED',result:{thread:thread}});});}else{_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_INFO_UPDATED',result:{thread:messageContent}});}break;/**
307
+ */case _constants.chatMessageVOTypes.UPDATE_THREAD_INFO:if(chatMessaging.messagesCallbacks[uniqueId]){chatMessaging.messagesCallbacks[uniqueId](_utility["default"].createReturnData(false,'',0,messageContent));}var formattedThread=formatDataToMakeConversation(messageContent);_store.store.threads.save(formattedThread);_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_INFO_UPDATED',result:{thread:_store.store.threads.get(messageContent.id).get()}});// if (fullResponseObject) {
308
+ // getThreads({
309
+ // threadIds: [messageContent.id],
310
+ // cache: false
311
+ // }, function (threadsResult) {
312
+ // var thread = formatDataToMakeConversation(threadsResult.result.threads[0]);
313
+ //
314
+ // /**
315
+ // * Add Updated Thread into cache database #cache
316
+ // */
317
+ // if (canUseCache && cacheSecret.length > 0) {
318
+ // if (db) {
319
+ // var tempData = {};
320
+ //
321
+ // try {
322
+ // var salt = Utility.generateUUID();
323
+ //
324
+ // tempData.id = thread.id;
325
+ // tempData.owner = chatMessaging.userInfo.id;
326
+ // tempData.title = Utility.crypt(thread.title, cacheSecret, salt);
327
+ // tempData.time = thread.time;
328
+ // tempData.data = Utility.crypt(JSON.stringify(unsetNotSeenDuration(thread)), cacheSecret, salt);
329
+ // tempData.salt = salt;
330
+ // } catch (error) {
331
+ // chatEvents.fireEvent('error', {
332
+ // code: error.code,
333
+ // message: error.message,
334
+ // error: error
335
+ // });
336
+ // }
337
+ //
338
+ // db.threads.put(tempData)
339
+ // .catch(function (error) {
340
+ // chatEvents.fireEvent('error', {
341
+ // code: error.code,
342
+ // message: error.message,
343
+ // error: error
344
+ // });
345
+ // });
346
+ // } else {
347
+ // chatEvents.fireEvent('error', {
348
+ // code: 6601,
349
+ // message: CHAT_ERRORS[6601],
350
+ // error: null
351
+ // });
352
+ // }
353
+ // }
354
+ //
355
+ // chatEvents.fireEvent('threadEvents', {
356
+ // type: 'THREAD_INFO_UPDATED',
357
+ // result: {
358
+ // thread: thread
359
+ // }
360
+ // });
361
+ // });
362
+ // } else {
363
+ // chatEvents.fireEvent('threadEvents', {
364
+ // type: 'THREAD_INFO_UPDATED',
365
+ // result: {
366
+ // thread: messageContent
367
+ // }
368
+ // });
369
+ // }
370
+ break;/**
310
371
  * Type 22 Forward Multiple Messages
311
372
  */case _constants.chatMessageVOTypes.FORWARD_MESSAGE:newMessageHandler(threadId,messageContent);break;/**
312
373
  * Type 23 User Info
@@ -320,56 +381,50 @@ sendMessageCallbacksHandler(_constants.chatMessageVOTypes.DELIVERY,threadId,uniq
320
381
  * Type 29 Delete Message
321
382
  */case _constants.chatMessageVOTypes.DELETE_MESSAGE:if(chatMessaging.messagesCallbacks[uniqueId]){chatMessaging.messagesCallbacks[uniqueId](_utility["default"].createReturnData(false,'',0,messageContent,contentCount));}var msgTime=parseInt(parseInt(messageContent.time)/1000)*1000000000+parseInt(messageContent.timeNanos);_store.store.threads.get(threadId).unreadCount.decrease(msgTime);if(messageContent.pinned){unPinMessage({messageId:messageContent.id,notifyAll:true});}/**
322
383
  * Remove Message from cache
323
- */if(canUseCache&&cacheSecret.length>0){if(db){db.messages.where('id').equals(messageContent).and(function(message){return message.owner===chatMessaging.userInfo.id;})["delete"]()["catch"](function(error){_events.chatEvents.fireEvent('error',{code:6602,message:CHAT_ERRORS[6602],error:error});});}else{_events.chatEvents.fireEvent('error',{code:6601,message:CHAT_ERRORS[6601],error:null});}}if(fullResponseObject){var time,timeMiliSeconds;if(messageContent.time.toString().length>14){time=messageContent.time;timeMiliSeconds=parseInt(messageContent.time/1000000);}else{time=messageContent.timeNanos?parseInt(parseInt(messageContent.time)/1000)*1000000000+parseInt(messageContent.timeNanos):parseInt(pushMessageVO.time);timeMiliSeconds=parseInt(messageContent.time);}getThreads({threadIds:[threadId]},function(threadsResult){var threads=threadsResult.result.threads;if(!threadsResult.cache){_events.chatEvents.fireEvent('messageEvents',{type:'MESSAGE_DELETE',result:{message:{id:messageContent.id,pinned:messageContent.pinned,threadId:threadId,time:time,timeMiliSeconds:timeMiliSeconds,timeNanos:messageContent.timeNanos}}});if(messageContent.pinned){_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_LAST_ACTIVITY_TIME',result:{thread:threads[0]}});}}});}else{_events.chatEvents.fireEvent('messageEvents',{type:'MESSAGE_DELETE',result:{message:{id:messageContent.id,pinned:messageContent.pinned,threadId:threadId,time:time,timeMiliSeconds:timeMiliSeconds,timeNanos:messageContent.timeNanos}}});if(messageContent.pinned){_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_LAST_ACTIVITY_TIME',result:{thread:threadId}});}}break;/**
324
- * Type 30 Thread Info Updated
325
- */case _constants.chatMessageVOTypes.THREAD_INFO_UPDATED:// TODO: Check this line again
326
- // if (!messageContent.conversation && !messageContent.conversation.id) {
327
- // messageContent.conversation.id = threadId;
328
- // }
329
- //
330
- // var thread = formatDataToMakeConversation(messageContent.conversation);
331
- var thread=formatDataToMakeConversation(messageContent);/**
332
- * Add Updated Thread into cache database #cache
333
- */ // if (canUseCache && cacheSecret.length > 0) {
334
- // if (db) {
335
- // var tempData = {};
336
- //
337
- // try {
338
- // var salt = Utility.generateUUID();
384
+ */if(canUseCache&&cacheSecret.length>0){if(db){db.messages.where('id').equals(messageContent).and(function(message){return message.owner===chatMessaging.userInfo.id;})["delete"]()["catch"](function(error){_events.chatEvents.fireEvent('error',{code:6602,message:CHAT_ERRORS[6602],error:error});});}else{_events.chatEvents.fireEvent('error',{code:6601,message:CHAT_ERRORS[6601],error:null});}}// if (fullResponseObject) {
385
+ // var time, timeMiliSeconds;
386
+ // if (messageContent.time.toString().length > 14) {
387
+ // time = messageContent.time;
388
+ // timeMiliSeconds = parseInt(messageContent.time / 1000000);
389
+ // } else {
390
+ // time = (messageContent.timeNanos)
391
+ // ? (parseInt(parseInt(messageContent.time) / 1000) * 1000000000) + parseInt(messageContent.timeNanos)
392
+ // : (parseInt(pushMessageVO.time));
393
+ // timeMiliSeconds = parseInt(messageContent.time);
394
+ // }
339
395
  //
340
- // tempData.id = thread.id;
341
- // tempData.owner = chatMessaging.userInfo.id;
342
- // tempData.title = Utility.crypt(thread.title, cacheSecret, salt);
343
- // tempData.time = thread.time;
344
- // tempData.data = Utility.crypt(JSON.stringify(unsetNotSeenDuration(thread)), cacheSecret, salt);
345
- // tempData.salt = salt;
346
- // }
347
- // catch (error) {
348
- // chatEvents.fireEvent('error', {
349
- // code: error.code,
350
- // message: error.message,
351
- // error: error
396
+ // getThreads({
397
+ // threadIds: [threadId]
398
+ // }, function (threadsResult) {
399
+ // var threads = threadsResult.result.threads;
400
+ // if (!threadsResult.cache) {
401
+ // chatEvents.fireEvent('messageEvents', {
402
+ // type: 'MESSAGE_DELETE',
403
+ // result: {
404
+ // message: {
405
+ // id: messageContent.id,
406
+ // pinned: messageContent.pinned,
407
+ // threadId: threadId,
408
+ // time,
409
+ // timeMiliSeconds,
410
+ // timeNanos: messageContent.timeNanos
411
+ // }
412
+ // }
352
413
  // });
353
- // }
354
- //
355
- // db.threads.put(tempData)
356
- // .catch(function (error) {
357
- // chatEvents.fireEvent('error', {
358
- // code: error.code,
359
- // message: error.message,
360
- // error: error
414
+ // if (messageContent.pinned) {
415
+ // chatEvents.fireEvent('threadEvents', {
416
+ // type: 'THREAD_LAST_ACTIVITY_TIME',
417
+ // result: {
418
+ // thread: threads[0]
419
+ // }
361
420
  // });
362
- // });
363
- // }
364
- // else {
365
- // chatEvents.fireEvent('error', {
366
- // code: 6601,
367
- // message: CHAT_ERRORS[6601],
368
- // error: null
369
- // });
370
- // }
371
- // }
372
- _events.chatEvents.fireEvent('threadEvents',{type:'THREAD_INFO_UPDATED',result:{thread:thread}});break;/**
421
+ // }
422
+ // }
423
+ // });
424
+ // } else {
425
+ _events.chatEvents.fireEvent('messageEvents',{type:'MESSAGE_DELETE',result:{message:{id:messageContent.id,pinned:messageContent.pinned,threadId:threadId,time:messageContent.time,// timeMiliSeconds,
426
+ timeNanos:messageContent.timeNanos}}});if(messageContent.pinned){var thread=_store.store.threads.get(threadId);if(thread)thread=thread.get();_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_LAST_ACTIVITY_TIME',result:{thread:thread?thread:threadId}});}//}
427
+ break;/**
373
428
  * Type 31 Thread Last Seen Updated
374
429
  */case _constants.chatMessageVOTypes.LAST_SEEN_UPDATED:var threadObject=messageContent;threadObject.unreadCount=messageContent.unreadCount?messageContent.unreadCount:0;if(messageContent.lastSeenMessageNanos&&_store.store.threads.get(threadId)){var _msgTime=parseInt(parseInt(messageContent.lastSeenMessageTime)/1000)*1000000000+parseInt(messageContent.lastSeenMessageNanos);if(_msgTime>_store.store.threads.get(threadId).lastSeenMessageTime.get()){_store.store.threads.get(threadId).unreadCount.set(messageContent.unreadCount||0);_store.store.threads.get(threadId).lastSeenMessageTime.set(_msgTime);}}// chatEvents.fireEvent('threadEvents', {
375
430
  // type: 'THREAD_UNREAD_COUNT_UPDATED',
@@ -467,7 +522,35 @@ break;/**
467
522
  * Type 65 Stop Bot
468
523
  */case _constants.chatMessageVOTypes.STOP_BOT:if(chatMessaging.messagesCallbacks[uniqueId]){chatMessaging.messagesCallbacks[uniqueId](_utility["default"].createReturnData(false,'',0,messageContent,contentCount));}break;/**
469
524
  * Type 66 Last Message Deleted
470
- */case _constants.chatMessageVOTypes.LAST_MESSAGE_DELETED:new Promise(function(resolve,reject){if(fullResponseObject){getThreads({threadIds:[messageContent.id]},function(threadsResult){var threads=threadsResult.result.threads;if(!threadsResult.cache){resolve(threads[0]);_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_INFO_UPDATED',result:{thread:threads[0]}});}});}else{var thread=formatDataToMakeConversation(messageContent);resolve(thread);_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_INFO_UPDATED',result:{thread:thread}});}}).then(function(thread){// if(typeof messageContent.unreadCount !== "undefined") {
525
+ */case _constants.chatMessageVOTypes.LAST_MESSAGE_DELETED:delete messageContent.unreadCount;var threadOfDeletedMessage=formatDataToMakeConversation(messageContent);_store.store.threads.save(threadOfDeletedMessage);_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_INFO_UPDATED',result:{thread:_store.store.threads.get(threadOfDeletedMessage.id).get()}});// new Promise((resolve, reject)=> {
526
+ // if (fullResponseObject) {
527
+ // getThreads({
528
+ // threadIds: [messageContent.id]
529
+ // }, function (threadsResult) {
530
+ // var threads = threadsResult.result.threads;
531
+ //
532
+ // if (!threadsResult.cache) {
533
+ // resolve(threads[0])
534
+ // chatEvents.fireEvent('threadEvents', {
535
+ // type: 'THREAD_INFO_UPDATED',
536
+ // result: {
537
+ // thread: threads[0]
538
+ // }
539
+ // });
540
+ // }
541
+ // });
542
+ // } else {
543
+ // var thread = formatDataToMakeConversation(messageContent);
544
+ // resolve(thread);
545
+ // chatEvents.fireEvent('threadEvents', {
546
+ // type: 'THREAD_INFO_UPDATED',
547
+ // result: {
548
+ // thread: thread
549
+ // }
550
+ // });
551
+ // }
552
+ // }).then(thread => {
553
+ // if(typeof messageContent.unreadCount !== "undefined") {
471
554
  // chatEvents.fireEvent('threadEvents', {
472
555
  // type: 'THREAD_UNREAD_COUNT_UPDATED',
473
556
  // result: {
@@ -476,9 +559,35 @@ break;/**
476
559
  // }
477
560
  // });
478
561
  // }
479
- });break;/**
562
+ // })
563
+ break;/**
480
564
  * Type 67 Last Message Edited
481
- */case _constants.chatMessageVOTypes.LAST_MESSAGE_EDITED:if(fullResponseObject){getThreads({threadIds:[messageContent.id]},function(threadsResult){var threads=threadsResult.result.threads;if(!threadsResult.cache){_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_INFO_UPDATED',result:{thread:threads[0]}});}});}else{var thread=formatDataToMakeConversation(messageContent);_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_INFO_UPDATED',result:{thread:thread}});}break;/**
565
+ */case _constants.chatMessageVOTypes.LAST_MESSAGE_EDITED:delete messageContent.unreadCount;var threadOfEditedMessage=formatDataToMakeConversation(messageContent);_store.store.threads.save(threadOfEditedMessage);_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_INFO_UPDATED',result:{thread:_store.store.threads.get(threadOfEditedMessage.id).get()}});// if (fullResponseObject) {
566
+ // getThreads({
567
+ // threadIds: [messageContent.id]
568
+ // }, function (threadsResult) {
569
+ // var threads = threadsResult.result.threads;
570
+ //
571
+ // if (!threadsResult.cache) {
572
+ // chatEvents.fireEvent('threadEvents', {
573
+ // type: 'THREAD_INFO_UPDATED',
574
+ // result: {
575
+ // thread: threads[0]
576
+ // }
577
+ // });
578
+ // }
579
+ // });
580
+ // } else {
581
+ // var thread = formatDataToMakeConversation(messageContent);
582
+ //
583
+ // chatEvents.fireEvent('threadEvents', {
584
+ // type: 'THREAD_INFO_UPDATED',
585
+ // result: {
586
+ // thread: thread
587
+ // }
588
+ // });
589
+ // }
590
+ break;/**
482
591
  * Type 68 Get Bot Commands List
483
592
  */case _constants.chatMessageVOTypes.BOT_COMMANDS:if(chatMessaging.messagesCallbacks[uniqueId]){chatMessaging.messagesCallbacks[uniqueId](_utility["default"].createReturnData(false,'',0,messageContent,contentCount));}break;/**
484
593
  * Type 69 Get Thread All Bots
@@ -647,7 +756,31 @@ _events.chatEvents.fireEvent('threadEvents',{type:'THREAD_LAST_ACTIVITY_TIME',re
647
756
  * Update Message on cache
648
757
  */if(canUseCache&&cacheSecret.length>0){if(db){try{var tempData={},salt=_utility["default"].generateUUID();tempData.id=parseInt(message.id);tempData.owner=parseInt(chatMessaging.userInfo.id);tempData.threadId=parseInt(message.threadId);tempData.time=message.time;tempData.message=_utility["default"].crypt(message.message,cacheSecret,salt);tempData.data=_utility["default"].crypt(JSON.stringify(unsetNotSeenDuration(message)),cacheSecret,salt);tempData.salt=salt;/**
649
758
  * Insert Message into cache database
650
- */db.messages.put(tempData)["catch"](function(error){_events.chatEvents.fireEvent('error',{code:error.code,message:error.message,error:error});});}catch(error){_events.chatEvents.fireEvent('error',{code:error.code,message:error.message,error:error});}}else{_events.chatEvents.fireEvent('error',{code:6601,message:CHAT_ERRORS[6601],error:null});}}if(message.conversation){delete message.conversation.unreadCount;_store.store.threads.save(message.conversation);message.conversation.unreadCount=_store.store.threads.get(threadId).unreadCount.get()||0;}if(fullResponseObject){getThreads({threadIds:[threadId]},function(threadsResult){var threads=threadsResult.result.threads;if(!threadsResult.cache){_events.chatEvents.fireEvent('messageEvents',{type:'MESSAGE_EDIT',result:{message:message}});if(message.pinned){_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_LAST_ACTIVITY_TIME',result:{thread:threads[0]}});}}});}else{_events.chatEvents.fireEvent('messageEvents',{type:'MESSAGE_EDIT',result:{message:message}});if(message.pinned){_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_LAST_ACTIVITY_TIME',result:{thread:threadId}});}}},/**
759
+ */db.messages.put(tempData)["catch"](function(error){_events.chatEvents.fireEvent('error',{code:error.code,message:error.message,error:error});});}catch(error){_events.chatEvents.fireEvent('error',{code:error.code,message:error.message,error:error});}}else{_events.chatEvents.fireEvent('error',{code:6601,message:CHAT_ERRORS[6601],error:null});}}if(message.conversation){delete message.conversation.unreadCount;_store.store.threads.save(message.conversation);message.conversation.unreadCount=_store.store.threads.get(threadId).unreadCount.get()||0;}// if (fullResponseObject) {
760
+ // getThreads({
761
+ // threadIds: [threadId]
762
+ // }, function (threadsResult) {
763
+ // var threads = threadsResult.result.threads;
764
+ // if (!threadsResult.cache) {
765
+ // chatEvents.fireEvent('messageEvents', {
766
+ // type: 'MESSAGE_EDIT',
767
+ // result: {
768
+ // message: message
769
+ // }
770
+ // });
771
+ // if (message.pinned) {
772
+ // chatEvents.fireEvent('threadEvents', {
773
+ // type: 'THREAD_LAST_ACTIVITY_TIME',
774
+ // result: {
775
+ // thread: threads[0]
776
+ // }
777
+ // });
778
+ // }
779
+ // }
780
+ // });
781
+ // } else {
782
+ _events.chatEvents.fireEvent('messageEvents',{type:'MESSAGE_EDIT',result:{message:message}});if(message.pinned){var thread=_store.store.threads.get(threadId);if(thread)thread=thread.get();_events.chatEvents.fireEvent('threadEvents',{type:'THREAD_LAST_ACTIVITY_TIME',result:{thread:thread?thread:threadId}});}// }
783
+ },/**
651
784
  * Create Thread
652
785
  *
653
786
  * Makes formatted Thread Object out of given contentCount,
@@ -33,7 +33,6 @@ var chatMessageVOTypes = {
33
33
  THREAD_PARTICIPANTS: 27,
34
34
  EDIT_MESSAGE: 28,
35
35
  DELETE_MESSAGE: 29,
36
- THREAD_INFO_UPDATED: 30,
37
36
  LAST_SEEN_UPDATED: 31,
38
37
  GET_MESSAGE_DELIVERY_PARTICIPANTS: 32,
39
38
  GET_MESSAGE_SEEN_PARTICIPANTS: 33,