{e.exports=JSON.parse('{"action_block_contact":"Bloquer le Contact","action_cancel":"annuler","action_clear_messages":"Effacer les Messages","action_delete_messages":"Effacer les Messages pour Tous","action_leave_chat":"Quitter la Conversation","action_report_chat":"Signaler la Conversation","archived_contacts":"Contacts archivés ({count})","badge_danger":"Non fiable","badge_owner":"propriétaire","badge_staff":"Géré par le Staff","badge_verified":"Vérifié / Officiel","badge_you":"vous","block_contact_warning":"Êtes-vous sûr de bloquer le contact ?","blocked_contacts_link":"Contacts bloqués ({count})","button_add_members":"Ajouter des membres","button_cancel":"Annuler","button_confirm":"Confirmer","button_create":"Créer","button_delete_account":"Supprimer le compte","button_edit":"Modifier","button_logout":"Déconnexion","button_ok":"OK","button_reset":"Remettre à Zéro","button_send_request":"Envoyer une demande","button_sign_in":"Connexion","button_sign_up":"Créer un compte","button_subscribe":"S\'abonner","button_update":"Mettre à jour","cannot_initiate_file_upload":"Impossible de démarrer l\'envoi.","channel":"canal","channel_prompt":"C\'est un canal","chat_invitation":"Vous êtes invité à démarrer une conversation. Que voulez vous faire ?","chat_invitation_accept":"Accepter","chat_invitation_block":"Bloquer","chat_invitation_ignore":"Ignorer","clear_messages_warning":"Êtes-vous sûr de vouloir effacer tous les messages ? Aucun retour possible.","code_doesnot_match":"Le code ne correspond pas","contacts_not_found":"Vous n\'avez aucune conversation
¯∖_(ツ)_/¯","contacts_not_found_short":"Aucun contact ne correspond à \'\'{query}\'\'","credential_email_prompt":"Votre email d\'enregistrement","delete_account":"Supprimer le compte","delete_account_warning":"Êtes-vous sûr de vouloir supprimer votre compte ? Aucun retour possible.","delete_messages_warning":"Êtes-vous sûr de vouloir supprimer tous les messages pour tous ? Aucun retour possible.","download_action":"télécharger","drafty_attachment":"Pièce(s) jointe(s)","drafty_form":"Formulaire:","drafty_image":"Image","email_dative":"email","email_prompt":"Email, par exemple jdoe@exemple.com","enable_peers_messaging":"Activer","enter_confirmation_code_prompt":"Entrez le code de confirmation envoyé par {method}:","error_invalid_id":"Identifiant invalide","file_attachment_too_large":"Le fichier de taille {size} dépasse la limite de {limit}.","forgot_password_link":"Mot de passe oublié ?","full_name_prompt":"Nom complet, par exemple John Doe","granted_permissions":"Accordé","group_has_no_members":"Aucun membre","group_user_id_prompt":"Identifiant d\'utilisateur ou de groupe","image_caption_prompt":"Description de l\'image","invalid_content":"contenu invalide","invalid_security_token":"Token de sécurité invalide","label_client":"Client :","label_content_type":"Type de contenu :","label_default_access_mode":"Mode d\'accès par défaut :","label_file_name":"Nom du fichier :","label_group_members":"Membres du groupe :","label_incognito_mode":"Mode incognito :","label_message_sound":"Son du message :","label_muting_topic":"Mué :","label_other_user":"Autre","label_password":"Mot de passe","label_permissions":"Permissions :","label_private":"Commentaire privé","label_push_notifications":"Notifications :","label_push_notifications_disabled":"Notifications (requière HTTPS):","label_reset_password":"Envoyer un mail de remise à zéro de mot de passe :","label_sdk":"SDK :","label_server":"Serveur :","label_server_address":"Adresse du serveur :","label_server_to_use":"Serveur à utiliser :","label_size":"Taille :","label_topic_name":"Nom","label_user_contacts":"Contacts","label_user_id":"ID :","label_wire_transport":"Transport par cable :","label_you":"Vous :","label_your_name":"Votre nom","label_your_permissions":"Vos permissions :","last_seen_timestamp":"Vu pour la dernière fois","leave_chat_warning":"Êtes-vous sûr de vouloir quitter cette conversation ?","link_contact_us":"Contactez Nous","link_privacy_policy":"Politique de confidentialité","link_terms_of_service":"Conditions d\'utilisation","login_prompt":"Connexion","menu_item_archive_topic":"Archiver","menu_item_block":"Bloquer","menu_item_clear_messages":"Effacer les messages","menu_item_clear_messages_for_all":"Effacer pour Tous","menu_item_delete":"Supprimer","menu_item_delete_for_all":"Supprimer pour Tous","menu_item_delete_topic":"Supprimer","menu_item_edit_permissions":"Modifier les permissions","menu_item_info":"Informations","menu_item_member_delete":"Supprimer","menu_item_mute":"Rendre muer","menu_item_reply":"Répondre","menu_item_restore_topic":"Restorer","menu_item_send_retry":"Réessayer","menu_item_unblock":"Débloquer","menu_item_unmute":"Recevoir à nouveau","message_sending":"envoi en cours...","message_sending_failed":"échoué","messages_not_readable":"aucun accès aux messages","messaging_disabled_prompt":"Discussion désactivée","more_online_members":"+{overflow} de plus","new_message_prompt":"Nouveau message","new_password_placeholder":"Entrez un nouveau mot de passe","no_connection":"Aucune connexion","no_contacts":"Vous n\'avez pas de contacts :-(","numeric_confirmation_code_prompt":"Nombres seulement","online_now":"en ligne","password_prompt":"Mot de passe","password_unchanged_prompt":"Non changé","peers_messaging_disabled":"La messagerie point à point est désactivée.","permission_admin":"Approver ({val})","permission_delete":"Supprimer ({val})","permission_join":"Rejoindre ({val})","permission_owner":"Propriétaire ({val})","permission_pres":"Recevoir une notification ({val})","permission_read":"Lire ({val})","permission_share":"Partager ({val})","permission_write":"Ecrire ({val})","phone_dative":"téléphone","private_editing_placeholder":"Visible par vous seulement","push_init_failed":"Impossible d\'initialiser les notifications push","reconnect_countdown":"Déconnecté. Reconnexion dans {seconds}…","reconnect_now":"Essayer maintenant","reload_update":"Recharger","report_chat_warning":"Êtes-vous sûr de vouloir bloquer et signaler cette conversation ?","requested_permissions":"Demandé","save_attachment":"sauvegarder","search_for_contacts":"Utilisez la recherche pour trouver des contacts","search_no_results":"La recherche n\'a donné aucun résultat","search_placeholder":"Liste comme email:alice@exemple.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Paramètres du compte","sidepanel_title_archive":"Conversations Archivées","sidepanel_title_blocked":"Conversations Bloquées","sidepanel_title_cred":"Confirmer les identifiants","sidepanel_title_login":"Se Connecter","sidepanel_title_newtpk":"Démarrer une nouvelle Conversation","sidepanel_title_register":"Créer un compte","sidepanel_title_reset":"Remettre à Zéro le Mot de Passe","sidepanel_title_settings":"Paramètres","stay_logged_in":"Rester connecté","tabtitle_find_user":"trouver","tabtitle_group_by_id":"par identifiant","tabtitle_new_group":"nouveau groupe","tags_editor_no_tags":"Ajouter des étiquettes","tags_not_found":"Aucune étiquette définie. Ajoutez en.","title_all_contacts":"Tous les Contacts","title_group_members":"Membres du Groupe","title_manage_tags":"Gérer","title_not_found":"Pas trouvé","title_permissions":"Permissions","title_tag_manager":"Etiquettes (recherche & découverte)","topic_block_warning":"Êtes-vous sûr de vouloir bloquer cette conversation ?","topic_delete_warning":"Êtes-vous sûr de vouloir supprimer cette conversation ?","topic_name_editing_placeholder":"Nom libre du groupe","unnamed_topic":"Non nommé","update_available":"Mise à jour disponible.","upload_finishing":"fin...","user_not_found":"Pas trouvé","description_editing_placeholder":"Description facultative","label_description":"Description","button_security":"Sécurité","panel_title_crop":"Déplacez pour ajuster","panel_title_general":"Général","panel_title_members":"Membres","panel_title_security":"Sécurité","panel_title_info":"Informations","permissions_anonymous":"Anonyme","permissions_authenticated":"Authentifié","topic_delete":"Supprimer la Conversation","permissions_user":"Permissions d\'Utilisateur","password_reset_email_sent":"Un e-mail avec code de sécurité a été envoyé.","label_unarchive_topic":"Archivé:","menu_item_forward":"Transférer","forward_to":"Transférer à","forward_to_search_placeholder":"Rechercher des contacts","label_new_password":"Nouveau mot de passe","drafty_unknown":"Non supporté","already_in_call":"Vous êtes déjà dans un appel en cours!","call_cancelled":"annulé","call_declined":"refusé","call_missed":"manqué","calls_incoming":"Appel entrant","calls_outgoing":"Appel sortant","calls_you_label":"Tu","menu_item_video_call":"Appel vidéo","call_disconnected":"débranché","label_use_secure_connection":"Utiliser une connexion sécurisée","cred_confirmed_successfully":"Confirmé avec succès","menu_item_edit":"Modifier","editing_message":"Édition","message_edited_marker":", édité","icon_title_add_image":"Ajouter une image","icon_title_attach_file":"Pièce jointe","icon_title_delete":"Supprimer l\'enregistrement","icon_title_pause":"Interrompre la lecture","icon_title_play":"Lire l\'enregistrement","icon_title_record_voice":"Enregistrer un message vocal","icon_title_resume":"Reprendre la lecture","icon_title_send":"Envoyer le message","drag_file":"Faites glisser le fichier ici","drafty_video":"Enregistrement video","call_in_progress":"en cours","menu_item_audio_call":"Appel","unrecognized_video_format":"Le format de cette vidéo n\'est pas reconnu","loading_note":"Chargement...","password_i_have_code":"J\'ai du code","label_reset_password_tel":"Envoyer un SMS pour réinitialiser le mot de passe","mobile_phone_number":"Numéro de téléphone mobile","password_reset_sms_sent":"Un message texte avec un code de sécurité a été envoyé.","mobile_number_required":"Numéro de téléphone portable requis","current_email":"Courriel actuel","current_phone":"Numéro de téléphone actuel","new_email":"Nouvel e-mail","new_phone_number":"Nouveau numéro de téléphone","change_email":"Modifier l\'e-mail","change_phone":"Modifier le numéro de téléphone","call_busy":"occupé","failed_to_init_audio":"Échec de l\'initialisation de l\'enregistrement audio"}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[107],{107:e=>{e.exports=JSON.parse('{"action_block_contact":"Bloquer le Contact","action_cancel":"annuler","action_clear_messages":"Effacer les Messages","action_delete_messages":"Effacer les Messages pour Tous","action_leave_chat":"Quitter la Conversation","action_report_chat":"Signaler la Conversation","archived_contacts":"Contacts archivés ({count})","badge_danger":"Non fiable","badge_owner":"propriétaire","badge_staff":"Géré par le Staff","badge_verified":"Vérifié / Officiel","badge_you":"vous","block_contact_warning":"Êtes-vous sûr de bloquer le contact ?","blocked_contacts_link":"Contacts bloqués ({count})","button_add_members":"Ajouter des membres","button_cancel":"Annuler","button_confirm":"Confirmer","button_create":"Créer","button_delete_account":"Supprimer le compte","button_edit":"Modifier","button_logout":"Déconnexion","button_ok":"OK","button_reset":"Remettre à Zéro","button_send_request":"Envoyer une demande","button_sign_in":"Connexion","button_sign_up":"Créer un compte","button_subscribe":"S\'abonner","button_update":"Mettre à jour","cannot_initiate_file_upload":"Impossible de démarrer l\'envoi.","channel":"canal","channel_prompt":"C\'est un canal","chat_invitation":"Vous êtes invité à démarrer une conversation. Que voulez vous faire ?","chat_invitation_accept":"Accepter","chat_invitation_block":"Bloquer","chat_invitation_ignore":"Ignorer","clear_messages_warning":"Êtes-vous sûr de vouloir effacer tous les messages ? Aucun retour possible.","code_doesnot_match":"Le code ne correspond pas","contacts_not_found":"Vous n\'avez aucune conversation
¯∖_(ツ)_/¯","contacts_not_found_short":"Aucun contact ne correspond à \'\'{query}\'\'","credential_email_prompt":"Votre email d\'enregistrement","delete_account":"Supprimer le compte","delete_account_warning":"Êtes-vous sûr de vouloir supprimer votre compte ? Aucun retour possible.","delete_messages_warning":"Êtes-vous sûr de vouloir supprimer tous les messages pour tous ? Aucun retour possible.","download_action":"télécharger","drafty_attachment":"Pièce(s) jointe(s)","drafty_form":"Formulaire:","drafty_image":"Image","email_dative":"email","email_prompt":"Email, par exemple jdoe@exemple.com","enable_peers_messaging":"Activer","enter_confirmation_code_prompt":"Entrez le code de confirmation envoyé par {method}:","error_invalid_id":"Identifiant invalide","file_attachment_too_large":"Le fichier de taille {size} dépasse la limite de {limit}.","forgot_password_link":"Mot de passe oublié ?","full_name_prompt":"Nom complet, par exemple John Doe","granted_permissions":"Accordé","group_has_no_members":"Aucun membre","group_user_id_prompt":"Identifiant d\'utilisateur ou de groupe","image_caption_prompt":"Description de l\'image","invalid_content":"contenu invalide","invalid_security_token":"Token de sécurité invalide","label_client":"Client :","label_content_type":"Type de contenu :","label_default_access_mode":"Mode d\'accès par défaut :","label_file_name":"Nom du fichier :","label_group_members":"Membres du groupe :","label_incognito_mode":"Mode incognito :","label_message_sound":"Son du message :","label_muting_topic":"Mué :","label_other_user":"Autre","label_password":"Mot de passe","label_permissions":"Permissions :","label_private":"Commentaire privé","label_push_notifications":"Notifications :","label_push_notifications_disabled":"Notifications (requière HTTPS):","label_reset_password":"Envoyer un mail de remise à zéro de mot de passe :","label_sdk":"SDK :","label_server":"Serveur :","label_server_address":"Adresse du serveur :","label_server_to_use":"Serveur à utiliser :","label_size":"Taille :","label_topic_name":"Nom","label_user_contacts":"Contacts","label_user_id":"ID :","label_wire_transport":"Transport par cable :","label_you":"Vous :","label_your_name":"Votre nom","label_your_permissions":"Vos permissions :","last_seen_timestamp":"Vu pour la dernière fois","leave_chat_warning":"Êtes-vous sûr de vouloir quitter cette conversation ?","link_contact_us":"Contactez Nous","link_privacy_policy":"Politique de confidentialité","link_terms_of_service":"Conditions d\'utilisation","login_prompt":"Connexion","menu_item_archive_topic":"Archiver","menu_item_block":"Bloquer","menu_item_clear_messages":"Effacer les messages","menu_item_clear_messages_for_all":"Effacer pour Tous","menu_item_delete":"Supprimer","menu_item_delete_for_all":"Supprimer pour Tous","menu_item_delete_topic":"Supprimer","menu_item_edit_permissions":"Modifier les permissions","menu_item_info":"Informations","menu_item_member_delete":"Supprimer","menu_item_mute":"Rendre muer","menu_item_reply":"Répondre","menu_item_restore_topic":"Restorer","menu_item_send_retry":"Réessayer","menu_item_unblock":"Débloquer","menu_item_unmute":"Recevoir à nouveau","message_sending":"envoi en cours...","message_sending_failed":"échoué","messages_not_readable":"aucun accès aux messages","messaging_disabled_prompt":"Discussion désactivée","more_online_members":"+{overflow} de plus","new_message_prompt":"Nouveau message","new_password_placeholder":"Entrez un nouveau mot de passe","no_connection":"Aucune connexion","no_contacts":"Vous n\'avez pas de contacts :-(","numeric_confirmation_code_prompt":"Nombres seulement","online_now":"en ligne","password_prompt":"Mot de passe","password_unchanged_prompt":"Non changé","peers_messaging_disabled":"La messagerie point à point est désactivée.","permission_admin":"Approver ({val})","permission_delete":"Supprimer ({val})","permission_join":"Rejoindre ({val})","permission_owner":"Propriétaire ({val})","permission_pres":"Recevoir une notification ({val})","permission_read":"Lire ({val})","permission_share":"Partager ({val})","permission_write":"Ecrire ({val})","phone_dative":"téléphone","private_editing_placeholder":"Visible par vous seulement","push_init_failed":"Impossible d\'initialiser les notifications push","reconnect_countdown":"Déconnecté. Reconnexion dans {seconds}…","reconnect_now":"Essayer maintenant","reload_update":"Recharger","report_chat_warning":"Êtes-vous sûr de vouloir bloquer et signaler cette conversation ?","requested_permissions":"Demandé","save_attachment":"sauvegarder","search_for_contacts":"Utilisez la recherche pour trouver des contacts","search_no_results":"La recherche n\'a donné aucun résultat","search_placeholder":"Liste comme email:alice@exemple.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Paramètres du compte","sidepanel_title_archive":"Conversations Archivées","sidepanel_title_blocked":"Conversations Bloquées","sidepanel_title_cred":"Confirmer les identifiants","sidepanel_title_login":"Se Connecter","sidepanel_title_newtpk":"Démarrer une nouvelle Conversation","sidepanel_title_register":"Créer un compte","sidepanel_title_reset":"Remettre à Zéro le Mot de Passe","sidepanel_title_settings":"Paramètres","stay_logged_in":"Rester connecté","tabtitle_find_user":"trouver","tabtitle_group_by_id":"par identifiant","tabtitle_new_group":"nouveau groupe","tags_editor_no_tags":"Ajouter des étiquettes","tags_not_found":"Aucune étiquette définie. Ajoutez en.","title_all_contacts":"Tous les Contacts","title_group_members":"Membres du Groupe","title_manage_tags":"Gérer","title_not_found":"Pas trouvé","title_permissions":"Permissions","title_tag_manager":"Etiquettes (recherche & découverte)","topic_block_warning":"Êtes-vous sûr de vouloir bloquer cette conversation ?","topic_delete_warning":"Êtes-vous sûr de vouloir supprimer cette conversation ?","topic_name_editing_placeholder":"Nom libre du groupe","unnamed_topic":"Non nommé","update_available":"Mise à jour disponible.","upload_finishing":"fin...","user_not_found":"Pas trouvé","description_editing_placeholder":"Description facultative","label_description":"Description","button_security":"Sécurité","panel_title_crop":"Déplacez pour ajuster","panel_title_general":"Général","panel_title_members":"Membres","panel_title_security":"Sécurité","panel_title_info":"Informations","permissions_anonymous":"Anonyme","permissions_authenticated":"Authentifié","topic_delete":"Supprimer la Conversation","permissions_user":"Permissions d\'Utilisateur","password_reset_email_sent":"Un e-mail avec code de sécurité a été envoyé.","label_unarchive_topic":"Archivé:","menu_item_forward":"Transférer","forward_to":"Transférer à","forward_to_search_placeholder":"Rechercher des contacts","label_new_password":"Nouveau mot de passe","drafty_unknown":"Non supporté","already_in_call":"Vous êtes déjà dans un appel en cours!","call_cancelled":"annulé","call_declined":"refusé","call_missed":"manqué","calls_incoming":"Appel entrant","calls_outgoing":"Appel sortant","calls_you_label":"Tu","menu_item_video_call":"Appel vidéo","call_disconnected":"débranché","label_use_secure_connection":"Utiliser une connexion sécurisée","cred_confirmed_successfully":"Confirmé avec succès","menu_item_edit":"Modifier","editing_message":"Édition","message_edited_marker":", édité","icon_title_add_image":"Ajouter une image","icon_title_attach_file":"Pièce jointe","icon_title_delete":"Supprimer l\'enregistrement","icon_title_pause":"Interrompre la lecture","icon_title_play":"Lire l\'enregistrement","icon_title_record_voice":"Enregistrer un message vocal","icon_title_resume":"Reprendre la lecture","icon_title_send":"Envoyer le message","drag_file":"Faites glisser le fichier ici","drafty_video":"Enregistrement video","call_in_progress":"en cours","menu_item_audio_call":"Appel","unrecognized_video_format":"Le format de cette vidéo n\'est pas reconnu","loading_note":"Chargement...","password_i_have_code":"J\'ai du code","label_reset_password_tel":"Envoyer un SMS pour réinitialiser le mot de passe","mobile_phone_number":"Numéro de téléphone mobile","password_reset_sms_sent":"Un message texte avec un code de sécurité a été envoyé.","mobile_number_required":"Numéro de téléphone portable requis","current_email":"Courriel actuel","current_phone":"Numéro de téléphone actuel","new_email":"Nouvel e-mail","new_phone_number":"Nouveau numéro de téléphone","change_email":"Modifier l\'e-mail","change_phone":"Modifier le numéro de téléphone","call_busy":"occupé","failed_to_init_audio":"Échec de l\'initialisation de l\'enregistrement audio","password_reset_success":"Mot de passe réinitialisé avec succès"}')}}]);
\ No newline at end of file
diff --git a/umd/203.prod.js b/umd/203.prod.js
index 7083ba55..ed10c757 100644
--- a/umd/203.prod.js
+++ b/umd/203.prod.js
@@ -1,2 +1,2 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[203],{7520:(t,d,e)=>{e.d(d,{Z:()=>P});var n=e(2581),r=e(3499),a=e(1316),i=e(1089);function $(t,d,e){var r=new n.ZP(e).getCountryCodesForCallingCode(t);return r?r.filter((function(t){return function(t,d,e){var r=new n.ZP(e);if(r.selectNumberingPlan(d),r.numberingPlan.possibleLengths().indexOf(t.length)>=0)return!0;return!1}(d,t,e)})):[]}var o=e(5738),u=/^[\d]+(?:[~\u2053\u223C\uFF5E][\d]+)?$/;function l(t,d){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,d){if(!t)return;if("string"==typeof t)return s(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return s(t,d)}(t))||d&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e
0){var i=r.leadingDigitsPatterns()[r.leadingDigitsPatterns().length-1];if(0!==d.search(i))continue}if((0,a.Z)(d,r.pattern()))return r}}(n.formats(),t);return i?(0,o.Z)(t,i,{useInternationalFormat:"INTERNATIONAL"===e,withNationalPrefix:!i.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!r||!1!==r.nationalPrefix,carrierCode:d,metadata:n}):t}function p(t,d,e,n){return d?n(t,d,e):t}function v(t,d){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);d&&(n=n.filter((function(d){return Object.getOwnPropertyDescriptor(t,d).enumerable}))),e.push.apply(e,n)}return e}function b(t){for(var d=1;d{e.d(d,{ex:()=>n,sJ:()=>r,uv:()=>$,xc:()=>i,xg:()=>a,xy:()=>o});var n=2,r=17,a=3,i="0-90-9٠-٩۰-۹",$="".concat("-‐-―−ー-").concat("//").concat("..").concat(" ").concat("()()[]\\[\\]").concat("~⁓∼~"),o="++"},2354:(t,d,e)=>{e.d(d,{Z:()=>r});var n=e(5619);function r(t){return t.replace(new RegExp("[".concat(n.uv,"]+"),"g")," ").trim()}},7856:(t,d,e)=>{function n(t,d){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,d){if(!t)return;if("string"==typeof t)return r(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return r(t,d)}(t))||d&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);eo?"TOO_SHORT":a[a.length-1]=0?"IS_POSSIBLE":"INVALID_LENGTH"}e.d(d,{Z:()=>a})},3661:(t,d,e)=>{e.d(d,{Z:()=>$});var n=e(3633),r=e(9471),a=e(2581),i=e(5619);function $(t,d,e,$){if(!t)return{};var o;if("+"!==t[0]){var u=(0,n.Z)(t,d,e,$);if(!u||u===t){if(d||e){var l=(0,r.Z)(t,d,e,$),s=l.countryCallingCode,c=l.number;if(s)return{countryCallingCodeSource:"FROM_NUMBER_WITHOUT_PLUS_SIGN",countryCallingCode:s,number:c}}return{number:t}}o=!0,t="+"+u}if("0"===t[1])return{};$=new a.ZP($);for(var f=2;f-1<=i.xg&&f<=t.length;){var h=t.slice(1,f);if($.hasCallingCode(h))return $.selectNumberingPlan(h),{countryCallingCodeSource:o?"FROM_NUMBER_WITH_IDD":"FROM_NUMBER_WITH_PLUS_SIGN",countryCallingCode:h,number:t.slice(f)};f++}return{}}},9471:(t,d,e)=>{e.d(d,{Z:()=>$});var n=e(2581),r=e(1316),a=e(7428),i=e(7856);function $(t,d,e,$){var o=d?(0,n.Gg)(d,$):e;if(0===t.indexOf(o)){($=new n.ZP($)).selectNumberingPlan(d,e);var u=t.slice(o.length),l=(0,a.Z)(u,$).nationalNumber,s=(0,a.Z)(t,$).nationalNumber;if(!(0,r.Z)(s,$.nationalNumberPattern())&&(0,r.Z)(l,$.nationalNumberPattern())||"TOO_LONG"===(0,i.Z)(s,$))return{countryCallingCode:o,number:u}}return{number:t}}},7428:(t,d,e)=>{e.d(d,{Z:()=>i});var n=e(5227),r=e(1316),a=e(7856);function i(t,d){var e=(0,n.Z)(t,d),i=e.carrierCode,$=e.nationalNumber;if($!==t){if(!function(t,d,e){if((0,r.Z)(t,e.nationalNumberPattern())&&!(0,r.Z)(d,e.nationalNumberPattern()))return!1;return!0}(t,$,d))return{nationalNumber:t};if(d.possibleLengths()&&!function(t,d){switch((0,a.Z)(t,d)){case"TOO_SHORT":case"INVALID_LENGTH":return!1;default:return!0}}($,d))return{nationalNumber:t}}return{nationalNumber:$,carrierCode:i}}},5227:(t,d,e)=>{function n(t,d){if(t&&d.numberingPlan.nationalPrefixForParsing()){var e=new RegExp("^(?:"+d.numberingPlan.nationalPrefixForParsing()+")"),n=e.exec(t);if(n){var r,a,i,$=n.length-1,o=$>0&&n[$];if(d.nationalPrefixTransformRule()&&o)r=t.replace(e,d.nationalPrefixTransformRule()),$>1&&(a=n[1]);else{var u=n[0];r=t.slice(u.length),o&&(a=n[1])}if(o){var l=t.indexOf(n[1]);t.slice(0,l)===d.numberingPlan.nationalPrefix()&&(i=d.numberingPlan.nationalPrefix())}else i=n[0];return{nationalNumber:r,nationalPrefix:i,carrierCode:a}}}return{nationalNumber:t}}e.d(d,{Z:()=>n})},5738:(t,d,e)=>{e.d(d,{Z:()=>a,i:()=>r});var n=e(2354),r=/(\$\d)/;function a(t,d,e){var a=e.useInternationalFormat,i=e.withNationalPrefix,$=(e.carrierCode,e.metadata,t.replace(new RegExp(d.pattern()),a?d.internationalFormat():i&&d.nationalPrefixFormattingRule()?d.format().replace(r,d.nationalPrefixFormattingRule()):d.format()));return a?(0,n.Z)($):$}},465:(t,d,e)=>{e.d(d,{Z:()=>o});var n=e(2581),r=e(1089);function a(t,d){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,d){if(!t)return;if("string"==typeof t)return i(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return i(t,d)}(t))||d&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function i(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e{e.d(d,{Z:()=>o});var n=e(2581),r=e(1316);function a(t,d){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,d){if(!t)return;if("string"==typeof t)return i(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return i(t,d)}(t))||d&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function i(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e{function n(t,d){return t=t||"",new RegExp("^(?:"+d+")$").test(t)}e.d(d,{Z:()=>n})},9233:(t,d,e)=>{function n(t,d){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,d){if(!t)return;if("string"==typeof t)return r(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return r(t,d)}(t))||d&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e$,xh:()=>i});var a={0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9","0":"0","1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","٠":"0","١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9"};function i(t){return a[t]}function $(t){for(var d,e="",r=n(t.split(""));!(d=r()).done;){var a=i(d.value);a&&(e+=a)}return e}},3633:(t,d,e)=>{e.d(d,{Z:()=>i});var n=e(2581),r=e(5619),a=new RegExp("(["+r.xc+"])");function i(t,d,e,r){if(d){var i=new n.ZP(r);i.selectNumberingPlan(d,e);var $=new RegExp(i.IDDPrefix());if(0===t.search($)){var o=(t=t.slice(t.match($)[0].length)).match(a);if(!(o&&null!=o[1]&&o[1].length>0&&"0"===o[1]))return t}}}},3499:(t,d,e)=>{e.d(d,{D:()=>i,Z:()=>a});var n=e(2581),r=e(7856);function a(t,d,e){if(void 0===d&&(d={}),e=new n.ZP(e),d.v2){if(!t.countryCallingCode)throw new Error("Invalid phone number object passed");e.selectNumberingPlan(t.countryCallingCode)}else{if(!t.phone)return!1;if(t.country){if(!e.hasCountry(t.country))throw new Error("Unknown country: ".concat(t.country));e.country(t.country)}else{if(!t.countryCallingCode)throw new Error("Invalid phone number object passed");e.selectNumberingPlan(t.countryCallingCode)}}if(e.possibleLengths())return i(t.phone||t.nationalNumber,e);if(t.countryCallingCode&&e.isNonGeographicCallingCode(t.countryCallingCode))return!0;throw new Error('Missing "possibleLengths" in metadata. Perhaps the metadata has been generated before v1.0.18.')}function i(t,d){return"IS_POSSIBLE"===(0,r.Z)(t,d)}},2581:(t,d,e)=>{function n(t,d){t=t.split("-"),d=d.split("-");for(var e=t[0].split("."),n=d[0].split("."),r=0;r<3;r++){var a=Number(e[r]),i=Number(n[r]);if(a>i)return 1;if(i>a)return-1;if(!isNaN(a)&&isNaN(i))return 1;if(isNaN(a)&&!isNaN(i))return-1}return t[1]&&d[1]?t[1]>d[1]?1:t[1]l,Gg:()=>p});var o=" ext. ",u=/^\d+$/,l=function(){function t(d){a(this,t),function(t){if(!t)throw new Error("[libphonenumber-js] `metadata` argument not passed. Check your arguments.");if(!m(t)||!m(t.countries))throw new Error("[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got ".concat(m(t)?"an object of shape: { "+Object.keys(t).join(", ")+" }":"a "+y(t)+": "+t,"."))}(d),this.metadata=d,v.call(this,d)}return $(t,[{key:"getCountries",value:function(){return Object.keys(this.metadata.countries).filter((function(t){return"001"!==t}))}},{key:"getCountryMetadata",value:function(t){return this.metadata.countries[t]}},{key:"nonGeographic",value:function(){if(!(this.v1||this.v2||this.v3))return this.metadata.nonGeographic||this.metadata.nonGeographical}},{key:"hasCountry",value:function(t){return void 0!==this.getCountryMetadata(t)}},{key:"hasCallingCode",value:function(t){if(this.getCountryCodesForCallingCode(t))return!0;if(this.nonGeographic()){if(this.nonGeographic()[t])return!0}else{var d=this.countryCallingCodes()[t];if(d&&1===d.length&&"001"===d[0])return!0}}},{key:"isNonGeographicCallingCode",value:function(t){return this.nonGeographic()?!!this.nonGeographic()[t]:!this.getCountryCodesForCallingCode(t)}},{key:"country",value:function(t){return this.selectNumberingPlan(t)}},{key:"selectNumberingPlan",value:function(t,d){if(t&&u.test(t)&&(d=t,t=null),t&&"001"!==t){if(!this.hasCountry(t))throw new Error("Unknown country: ".concat(t));this.numberingPlan=new s(this.getCountryMetadata(t),this)}else if(d){if(!this.hasCallingCode(d))throw new Error("Unknown calling code: ".concat(d));this.numberingPlan=new s(this.getNumberingPlanMetadata(d),this)}else this.numberingPlan=void 0;return this}},{key:"getCountryCodesForCallingCode",value:function(t){var d=this.countryCallingCodes()[t];if(d){if(1===d.length&&3===d[0].length)return;return d}}},{key:"getCountryCodeForCallingCode",value:function(t){var d=this.getCountryCodesForCallingCode(t);if(d)return d[0]}},{key:"getNumberingPlanMetadata",value:function(t){var d=this.getCountryCodeForCallingCode(t);if(d)return this.getCountryMetadata(d);if(this.nonGeographic()){var e=this.nonGeographic()[t];if(e)return e}else{var n=this.countryCallingCodes()[t];if(n&&1===n.length&&"001"===n[0])return this.metadata.countries["001"]}}},{key:"countryCallingCode",value:function(){return this.numberingPlan.callingCode()}},{key:"IDDPrefix",value:function(){return this.numberingPlan.IDDPrefix()}},{key:"defaultIDDPrefix",value:function(){return this.numberingPlan.defaultIDDPrefix()}},{key:"nationalNumberPattern",value:function(){return this.numberingPlan.nationalNumberPattern()}},{key:"possibleLengths",value:function(){return this.numberingPlan.possibleLengths()}},{key:"formats",value:function(){return this.numberingPlan.formats()}},{key:"nationalPrefixForParsing",value:function(){return this.numberingPlan.nationalPrefixForParsing()}},{key:"nationalPrefixTransformRule",value:function(){return this.numberingPlan.nationalPrefixTransformRule()}},{key:"leadingDigits",value:function(){return this.numberingPlan.leadingDigits()}},{key:"hasTypes",value:function(){return this.numberingPlan.hasTypes()}},{key:"type",value:function(t){return this.numberingPlan.type(t)}},{key:"ext",value:function(){return this.numberingPlan.ext()}},{key:"countryCallingCodes",value:function(){return this.v1?this.metadata.country_phone_code_to_countries:this.metadata.country_calling_codes}},{key:"chooseCountryByCountryCallingCode",value:function(t){return this.selectNumberingPlan(t)}},{key:"hasSelectedNumberingPlan",value:function(){return void 0!==this.numberingPlan}}]),t}(),s=function(){function t(d,e){a(this,t),this.globalMetadataObject=e,this.metadata=d,v.call(this,e.metadata)}return $(t,[{key:"callingCode",value:function(){return this.metadata[0]}},{key:"getDefaultCountryMetadataForRegion",value:function(){return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode())}},{key:"IDDPrefix",value:function(){if(!this.v1&&!this.v2)return this.metadata[1]}},{key:"defaultIDDPrefix",value:function(){if(!this.v1&&!this.v2)return this.metadata[12]}},{key:"nationalNumberPattern",value:function(){return this.v1||this.v2?this.metadata[1]:this.metadata[2]}},{key:"possibleLengths",value:function(){if(!this.v1)return this.metadata[this.v2?2:3]}},{key:"_getFormats",value:function(t){return t[this.v1?2:this.v2?3:4]}},{key:"formats",value:function(){var t=this,d=this._getFormats(this.metadata)||this._getFormats(this.getDefaultCountryMetadataForRegion())||[];return d.map((function(d){return new c(d,t)}))}},{key:"nationalPrefix",value:function(){return this.metadata[this.v1?3:this.v2?4:5]}},{key:"_getNationalPrefixFormattingRule",value:function(t){return t[this.v1?4:this.v2?5:6]}},{key:"nationalPrefixFormattingRule",value:function(){return this._getNationalPrefixFormattingRule(this.metadata)||this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion())}},{key:"_nationalPrefixForParsing",value:function(){return this.metadata[this.v1?5:this.v2?6:7]}},{key:"nationalPrefixForParsing",value:function(){return this._nationalPrefixForParsing()||this.nationalPrefix()}},{key:"nationalPrefixTransformRule",value:function(){return this.metadata[this.v1?6:this.v2?7:8]}},{key:"_getNationalPrefixIsOptionalWhenFormatting",value:function(){return!!this.metadata[this.v1?7:this.v2?8:9]}},{key:"nationalPrefixIsOptionalWhenFormattingInNationalFormat",value:function(){return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata)||this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion())}},{key:"leadingDigits",value:function(){return this.metadata[this.v1?8:this.v2?9:10]}},{key:"types",value:function(){return this.metadata[this.v1?9:this.v2?10:11]}},{key:"hasTypes",value:function(){return(!this.types()||0!==this.types().length)&&!!this.types()}},{key:"type",value:function(t){if(this.hasTypes()&&g(this.types(),t))return new h(g(this.types(),t),this)}},{key:"ext",value:function(){return this.v1||this.v2?o:this.metadata[13]||o}}]),t}(),c=function(){function t(d,e){a(this,t),this._format=d,this.metadata=e}return $(t,[{key:"pattern",value:function(){return this._format[0]}},{key:"format",value:function(){return this._format[1]}},{key:"leadingDigitsPatterns",value:function(){return this._format[2]||[]}},{key:"nationalPrefixFormattingRule",value:function(){return this._format[3]||this.metadata.nationalPrefixFormattingRule()}},{key:"nationalPrefixIsOptionalWhenFormattingInNationalFormat",value:function(){return!!this._format[4]||this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat()}},{key:"nationalPrefixIsMandatoryWhenFormattingInNationalFormat",value:function(){return this.usesNationalPrefix()&&!this.nationalPrefixIsOptionalWhenFormattingInNationalFormat()}},{key:"usesNationalPrefix",value:function(){return!(!this.nationalPrefixFormattingRule()||f.test(this.nationalPrefixFormattingRule()))}},{key:"internationalFormat",value:function(){return this._format[5]||this.format()}}]),t}(),f=/^\(?\$1\)?$/,h=function(){function t(d,e){a(this,t),this.type=d,this.metadata=e}return $(t,[{key:"pattern",value:function(){return this.metadata.v1?this.type:this.type[0]}},{key:"possibleLengths",value:function(){if(!this.metadata.v1)return this.type[1]||this.metadata.possibleLengths()}}]),t}();function g(t,d){switch(d){case"FIXED_LINE":return t[0];case"MOBILE":return t[1];case"TOLL_FREE":return t[2];case"PREMIUM_RATE":return t[3];case"PERSONAL_NUMBER":return t[4];case"VOICEMAIL":return t[5];case"UAN":return t[6];case"PAGER":return t[7];case"VOIP":return t[8];case"SHARED_COST":return t[9]}}var m=function(t){return"object"===r(t)},y=function(t){return r(t)};function p(t,d){if((d=new l(d)).hasCountry(t))return d.country(t).countryCallingCode();throw new Error("Unknown country: ".concat(t))}function v(t){var d=t.version;"number"==typeof d?(this.v1=1===d,this.v2=2===d,this.v3=3===d,this.v4=4===d):d?-1===n(d,"1.2.0")?this.v2=!0:-1===n(d,"1.7.35")?this.v3=!0:this.v4=!0:this.v1=!0}},6359:(t,d,e)=>{e.d(d,{Z:()=>n});const n={AC:"40123",AD:"312345",AE:"501234567",AF:"701234567",AG:"2684641234",AI:"2642351234",AL:"672123456",AM:"77123456",AO:"923123456",AR:"91123456789",AS:"6847331234",AT:"664123456",AU:"412345678",AW:"5601234",AX:"412345678",AZ:"401234567",BA:"61123456",BB:"2462501234",BD:"1812345678",BE:"470123456",BF:"70123456",BG:"43012345",BH:"36001234",BI:"79561234",BJ:"90011234",BL:"690001234",BM:"4413701234",BN:"7123456",BO:"71234567",BQ:"3181234",BR:"11961234567",BS:"2423591234",BT:"17123456",BW:"71123456",BY:"294911911",BZ:"6221234",CA:"5062345678",CC:"412345678",CD:"991234567",CF:"70012345",CG:"061234567",CH:"781234567",CI:"0123456789",CK:"71234",CL:"221234567",CM:"671234567",CN:"13123456789",CO:"3211234567",CR:"83123456",CU:"51234567",CV:"9911234",CW:"95181234",CX:"412345678",CY:"96123456",CZ:"601123456",DE:"15123456789",DJ:"77831001",DK:"32123456",DM:"7672251234",DO:"8092345678",DZ:"551234567",EC:"991234567",EE:"51234567",EG:"1001234567",EH:"650123456",ER:"7123456",ES:"612345678",ET:"911234567",FI:"412345678",FJ:"7012345",FK:"51234",FM:"3501234",FO:"211234",FR:"612345678",GA:"06031234",GB:"7400123456",GD:"4734031234",GE:"555123456",GF:"694201234",GG:"7781123456",GH:"231234567",GI:"57123456",GL:"221234",GM:"3012345",GN:"601123456",GP:"690001234",GQ:"222123456",GR:"6912345678",GT:"51234567",GU:"6713001234",GW:"955012345",GY:"6091234",HK:"51234567",HN:"91234567",HR:"921234567",HT:"34101234",HU:"201234567",ID:"812345678",IE:"850123456",IL:"502345678",IM:"7924123456",IN:"8123456789",IO:"3801234",IQ:"7912345678",IR:"9123456789",IS:"6111234",IT:"3123456789",JE:"7797712345",JM:"8762101234",JO:"790123456",JP:"9012345678",KE:"712123456",KG:"700123456",KH:"91234567",KI:"72001234",KM:"3212345",KN:"8697652917",KP:"1921234567",KR:"1020000000",KW:"50012345",KY:"3453231234",KZ:"7710009998",LA:"2023123456",LB:"71123456",LC:"7582845678",LI:"660234567",LK:"712345678",LR:"770123456",LS:"50123456",LT:"61234567",LU:"628123456",LV:"21234567",LY:"912345678",MA:"650123456",MC:"612345678",MD:"62112345",ME:"67622901",MF:"690001234",MG:"321234567",MH:"2351234",MK:"72345678",ML:"65012345",MM:"92123456",MN:"88123456",MO:"66123456",MP:"6702345678",MQ:"696201234",MR:"22123456",MS:"6644923456",MT:"96961234",MU:"52512345",MV:"7712345",MW:"991234567",MX:"12221234567",MY:"123456789",MZ:"821234567",NA:"811234567",NC:"751234",NE:"93123456",NF:"381234",NG:"8021234567",NI:"81234567",NL:"612345678",NO:"40612345",NP:"9841234567",NR:"5551234",NU:"8884012",NZ:"211234567",OM:"92123456",PA:"61234567",PE:"912345678",PF:"87123456",PG:"70123456",PH:"9051234567",PK:"3012345678",PL:"512345678",PM:"551234",PR:"7872345678",PS:"599123456",PT:"912345678",PW:"6201234",PY:"961456789",QA:"33123456",RE:"692123456",RO:"712034567",RS:"601234567",RU:"9123456789",RW:"720123456",SA:"512345678",SB:"7421234",SC:"2510123",SD:"911231234",SE:"701234567",SG:"81234567",SH:"51234",SI:"31234567",SJ:"41234567",SK:"912123456",SL:"25123456",SM:"66661212",SN:"701234567",SO:"71123456",SR:"7412345",SS:"977123456",ST:"9812345",SV:"70123456",SX:"7215205678",SY:"944567890",SZ:"76123456",TA:"8999",TC:"6492311234",TD:"63012345",TG:"90112345",TH:"812345678",TJ:"917123456",TK:"7290",TL:"77212345",TM:"66123456",TN:"20123456",TO:"7715123",TR:"5012345678",TT:"8682911234",TV:"901234",TW:"912345678",TZ:"621234567",UA:"501234567",UG:"712345678",US:"2015550123",UY:"94231234",UZ:"912345678",VA:"3123456789",VC:"7844301234",VE:"4121234567",VG:"2843001234",VI:"3406421234",VN:"912345678",VU:"5912345",WF:"821234",WS:"7212345",XK:"43201234",YE:"712345678",YT:"639012345",ZA:"711234567",ZM:"955123456",ZW:"712345678"}},6183:(t,d,e)=>{e.d(d,{Z:()=>n});const n={version:4,country_calling_codes:{1:["US","AG","AI","AS","BB","BM","BS","CA","DM","DO","GD","GU","JM","KN","KY","LC","MP","MS","PR","SX","TC","TT","VC","VG","VI"],7:["RU","KZ"],20:["EG"],27:["ZA"],30:["GR"],31:["NL"],32:["BE"],33:["FR"],34:["ES"],36:["HU"],39:["IT","VA"],40:["RO"],41:["CH"],43:["AT"],44:["GB","GG","IM","JE"],45:["DK"],46:["SE"],47:["NO","SJ"],48:["PL"],49:["DE"],51:["PE"],52:["MX"],53:["CU"],54:["AR"],55:["BR"],56:["CL"],57:["CO"],58:["VE"],60:["MY"],61:["AU","CC","CX"],62:["ID"],63:["PH"],64:["NZ"],65:["SG"],66:["TH"],81:["JP"],82:["KR"],84:["VN"],86:["CN"],90:["TR"],91:["IN"],92:["PK"],93:["AF"],94:["LK"],95:["MM"],98:["IR"],211:["SS"],212:["MA","EH"],213:["DZ"],216:["TN"],218:["LY"],220:["GM"],221:["SN"],222:["MR"],223:["ML"],224:["GN"],225:["CI"],226:["BF"],227:["NE"],228:["TG"],229:["BJ"],230:["MU"],231:["LR"],232:["SL"],233:["GH"],234:["NG"],235:["TD"],236:["CF"],237:["CM"],238:["CV"],239:["ST"],240:["GQ"],241:["GA"],242:["CG"],243:["CD"],244:["AO"],245:["GW"],246:["IO"],247:["AC"],248:["SC"],249:["SD"],250:["RW"],251:["ET"],252:["SO"],253:["DJ"],254:["KE"],255:["TZ"],256:["UG"],257:["BI"],258:["MZ"],260:["ZM"],261:["MG"],262:["RE","YT"],263:["ZW"],264:["NA"],265:["MW"],266:["LS"],267:["BW"],268:["SZ"],269:["KM"],290:["SH","TA"],291:["ER"],297:["AW"],298:["FO"],299:["GL"],350:["GI"],351:["PT"],352:["LU"],353:["IE"],354:["IS"],355:["AL"],356:["MT"],357:["CY"],358:["FI","AX"],359:["BG"],370:["LT"],371:["LV"],372:["EE"],373:["MD"],374:["AM"],375:["BY"],376:["AD"],377:["MC"],378:["SM"],380:["UA"],381:["RS"],382:["ME"],383:["XK"],385:["HR"],386:["SI"],387:["BA"],389:["MK"],420:["CZ"],421:["SK"],423:["LI"],500:["FK"],501:["BZ"],502:["GT"],503:["SV"],504:["HN"],505:["NI"],506:["CR"],507:["PA"],508:["PM"],509:["HT"],590:["GP","BL","MF"],591:["BO"],592:["GY"],593:["EC"],594:["GF"],595:["PY"],596:["MQ"],597:["SR"],598:["UY"],599:["CW","BQ"],670:["TL"],672:["NF"],673:["BN"],674:["NR"],675:["PG"],676:["TO"],677:["SB"],678:["VU"],679:["FJ"],680:["PW"],681:["WF"],682:["CK"],683:["NU"],685:["WS"],686:["KI"],687:["NC"],688:["TV"],689:["PF"],690:["TK"],691:["FM"],692:["MH"],850:["KP"],852:["HK"],853:["MO"],855:["KH"],856:["LA"],880:["BD"],886:["TW"],960:["MV"],961:["LB"],962:["JO"],963:["SY"],964:["IQ"],965:["KW"],966:["SA"],967:["YE"],968:["OM"],970:["PS"],971:["AE"],972:["IL"],973:["BH"],974:["QA"],975:["BT"],976:["MN"],977:["NP"],992:["TJ"],993:["TM"],994:["AZ"],995:["GE"],996:["KG"],998:["UZ"]},countries:{AC:["247","00","(?:[01589]\\d|[46])\\d{4}",[5,6],0,0,0,0,0,0,0,[0,["4\\d{4}",[5]]]],AD:["376","00","(?:1|6\\d)\\d{7}|[135-9]\\d{5}",[6,8,9],[["(\\d{3})(\\d{3})","$1 $2",["[135-9]"]],["(\\d{4})(\\d{4})","$1 $2",["1"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]]],0,0,0,0,0,0,[0,["690\\d{6}|[356]\\d{5}",[6,9]]]],AE:["971","00","(?:[4-7]\\d|9[0-689])\\d{7}|800\\d{2,9}|[2-4679]\\d{7}",[5,6,7,8,9,10,11,12],[["(\\d{3})(\\d{2,9})","$1 $2",["60|8"]],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[236]|[479][2-8]"],"0$1"],["(\\d{3})(\\d)(\\d{5})","$1 $2 $3",["[479]"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1"]],"0",0,0,0,0,0,[0,["5[024-68]\\d{7}",[9]]]],AF:["93","00","[2-7]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[2-7]"],"0$1"]],"0",0,0,0,0,0,[0,["7\\d{8}"]]],AG:["1","011","(?:268|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([457]\\d{6})$|1","268$1",0,"268",[0,["268(?:464|7(?:1[3-9]|[28]\\d|3[0246]|64|7[0-689]))\\d{4}"]]],AI:["1","011","(?:264|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2457]\\d{6})$|1","264$1",0,"264",[0,["264(?:235|4(?:69|76)|5(?:3[6-9]|8[1-4])|7(?:29|72))\\d{4}"]]],AL:["355","00","(?:700\\d\\d|900)\\d{3}|8\\d{5,7}|(?:[2-5]|6\\d)\\d{7}",[6,7,8,9],[["(\\d{3})(\\d{3,4})","$1 $2",["80|9"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["4[2-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2358][2-5]|4"],"0$1"],["(\\d{3})(\\d{5})","$1 $2",["[23578]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["6"],"0$1"]],"0",0,0,0,0,0,[0,["6(?:[78][2-9]|9\\d)\\d{6}",[9]]]],AM:["374","00","(?:[1-489]\\d|55|60|77)\\d{6}",[8],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[89]0"],"0 $1"],["(\\d{3})(\\d{5})","$1 $2",["2|3[12]"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["1|47"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["[3-9]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:33|4[1349]|55|77|88|9[13-9])\\d{6}"]]],AO:["244","00","[29]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[29]"]]],0,0,0,0,0,0,[0,["9[1-59]\\d{7}"]]],AR:["54","00","(?:11|[89]\\d\\d)\\d{8}|[2368]\\d{9}",[10,11],[["(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])","2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)","2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]","2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]"],"0$1",1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["1"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["[23]"],"0$1",1],["(\\d)(\\d{4})(\\d{2})(\\d{4})","$2 15-$3-$4",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))","9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)","9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]","9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]"],"0$1",0,"$1 $2 $3-$4"],["(\\d)(\\d{2})(\\d{4})(\\d{4})","$2 15-$3-$4",["91"],"0$1",0,"$1 $2 $3-$4"],["(\\d{3})(\\d{3})(\\d{5})","$1-$2-$3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{4})","$2 15-$3-$4",["9"],"0$1",0,"$1 $2 $3-$4"]],"0",0,"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?","9$1",0,0,[0,["93(?:7(?:1[15]|81)[46]|8(?:(?:21|4[16]|69|9[12])[46]|88[013-9]))\\d{5}|9(?:29(?:54|66)|3(?:7(?:55|77)|865))[2-8]\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|473|9(?:[07]2|2[26]|34|46))|3327)[45]\\d{5}|9(?:2(?:284|3(?:02|23)|657|920)|3(?:4(?:8[27]|92)|541|878))[2-7]\\d{5}|9(?:2(?:(?:26|62)2|320|477|9(?:42|83))|3(?:329|4(?:[47]6|62|89)|564))[2-6]\\d{5}|(?:675\\d|9(?:11[1-8]\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-7]|[235][4-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|[17][2-6]|3[4-6]|[58][3-6]))))\\d{6}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|475|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\d{5}|9(?:2(?:2(?:57|81)|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|71)|5(?:25|37|4[347]|71)|7(?:18|5[17])))[3-6]\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[03-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[145]|4[13]|5[468]|7[2-5]|8[26])|8(?:2[5-7]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\d{5}"]]],AS:["1","011","(?:[58]\\d\\d|684|900)\\d{7}",[10],0,"1",0,"([267]\\d{6})$|1","684$1",0,"684",[0,["684(?:2(?:48|5[2468]|7[26])|7(?:3[13]|70|82))\\d{4}"]]],AT:["43","00","1\\d{3,12}|2\\d{6,12}|43(?:(?:0\\d|5[02-9])\\d{3,9}|2\\d{4,5}|[3467]\\d{4}|8\\d{4,6}|9\\d{4,7})|5\\d{4,12}|8\\d{7,12}|9\\d{8,12}|(?:[367]\\d|4[0-24-9])\\d{4,11}",[4,5,6,7,8,9,10,11,12,13],[["(\\d)(\\d{3,12})","$1 $2",["1(?:11|[2-9])"],"0$1"],["(\\d{3})(\\d{2})","$1 $2",["517"],"0$1"],["(\\d{2})(\\d{3,5})","$1 $2",["5[079]"],"0$1"],["(\\d{3})(\\d{3,10})","$1 $2",["(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:20|32|8)|[89]"],"0$1"],["(\\d{4})(\\d{3,9})","$1 $2",["[2-467]|5[2-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["5"],"0$1"],["(\\d{2})(\\d{4})(\\d{4,7})","$1 $2 $3",["5"],"0$1"]],"0",0,0,0,0,0,[0,["6(?:5[0-3579]|6[013-9]|[7-9]\\d)\\d{4,10}",[7,8,9,10,11,12,13]]]],AU:["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{7}(?:\\d(?:\\d{2})?)?|8[0-24-9]\\d{7})|[2-478]\\d{8}|1\\d{4,7}",[5,6,7,8,9,10,12],[["(\\d{2})(\\d{3,4})","$1 $2",["16"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,4})","$1 $2 $3",["16"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["14|4"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[2378]"],"(0$1)"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:30|[89])"]]],"0",0,"(183[12])|0",0,0,0,[0,["4(?:79[01]|83[0-389]|93[0-6])\\d{5}|4(?:[0-3]\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-27-9])\\d{6}",[9]]],"0011"],AW:["297","00","(?:[25-79]\\d\\d|800)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[25-9]"]]],0,0,0,0,0,0,[0,["(?:290|5[69]\\d|6(?:[03]0|22|4[0-2]|[69]\\d)|7(?:[34]\\d|7[07])|9(?:6[45]|9[4-8]))\\d{4}"]]],AX:["358","00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))","2\\d{4,9}|35\\d{4,5}|(?:60\\d\\d|800)\\d{4,6}|7\\d{5,11}|(?:[14]\\d|3[0-46-9]|50)\\d{4,8}",[5,6,7,8,9,10,11,12],0,"0",0,0,0,0,"18",[0,["4946\\d{2,6}|(?:4[0-8]|50)\\d{4,8}",[6,7,8,9,10]]],"00"],AZ:["994","00","365\\d{6}|(?:[124579]\\d|60|88)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["90"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[28]|2|365|46","1[28]|2|365[45]|46","1[28]|2|365(?:4|5[02])|46"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[13-9]"],"0$1"]],"0",0,0,0,0,0,[0,["36554\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\d{7}"]]],BA:["387","00","6\\d{8}|(?:[35689]\\d|49|70)\\d{6}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["6[1-3]|[7-9]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2-$3",["[3-5]|6[56]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["6"],"0$1"]],"0",0,0,0,0,0,[0,["6040\\d{5}|6(?:03|[1-356]|44|7\\d)\\d{6}"]]],BB:["1","011","(?:246|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","246$1",0,"246",[0,["246(?:(?:2(?:[3568]\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\d)|69[5-7]|8(?:[2-5]\\d|83))\\d|52(?:1[147]|20))\\d{3}"]]],BD:["880","00","[1-469]\\d{9}|8[0-79]\\d{7,8}|[2-79]\\d{8}|[2-9]\\d{7}|[3-9]\\d{6}|[57-9]\\d{5}",[6,7,8,9,10],[["(\\d{2})(\\d{4,6})","$1-$2",["31[5-8]|[459]1"],"0$1"],["(\\d{3})(\\d{3,7})","$1-$2",["3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:28|4[14]|5)|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]"],"0$1"],["(\\d{4})(\\d{3,6})","$1-$2",["[13-9]|22"],"0$1"],["(\\d)(\\d{7,8})","$1-$2",["2"],"0$1"]],"0",0,0,0,0,0,[0,["(?:1[13-9]\\d|644)\\d{7}|(?:3[78]|44|66)[02-9]\\d{7}",[10]]]],BE:["32","00","4\\d{8}|[1-9]\\d{7}",[8,9],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["(?:80|9)0"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[239]|4[23]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[15-8]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4"],"0$1"]],"0",0,0,0,0,0,[0,["4[5-9]\\d{7}",[9]]]],BF:["226","00","[025-7]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[025-7]"]]],0,0,0,0,0,0,[0,["(?:0[1-35-7]|5[1-8]|[67]\\d)\\d{6}"]]],BG:["359","00","00800\\d{7}|[2-7]\\d{6,7}|[89]\\d{6,8}|2\\d{5}",[6,7,8,9,12],[["(\\d)(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["2"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["43[1-6]|70[1-9]"],"0$1"],["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["(?:70|8)0"],"0$1"],["(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3",["43[1-7]|7"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[48]|9[08]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"0$1"]],"0",0,0,0,0,0,[0,["(?:43[07-9]|99[69]\\d)\\d{5}|(?:8[7-9]|98)\\d{7}",[8,9]]]],BH:["973","00","[136-9]\\d{7}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[13679]|8[047]"]]],0,0,0,0,0,0,[0,["(?:3(?:[1-79]\\d|8[0-47-9])\\d|6(?:3(?:00|33|6[16])|6(?:3[03-9]|[69]\\d|7[0-6])))\\d{4}"]]],BI:["257","00","(?:[267]\\d|31)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2367]"]]],0,0,0,0,0,0,[0,["(?:29|[67][125-9])\\d{6}"]]],BJ:["229","00","[24-689]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24-689]"]]],0,0,0,0,0,0,[0,["(?:4[0-2]|[56]\\d|9[013-9])\\d{6}"]]],BL:["590","00","590\\d{6}|(?:69|80|9\\d)\\d{7}",[9],0,"0",0,0,0,0,0,[0,["69(?:0\\d\\d|1(?:2[2-9]|3[0-5]))\\d{4}"]]],BM:["1","011","(?:441|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","441$1",0,"441",[0,["441(?:[2378]\\d|5[0-39]|92)\\d{5}"]]],BN:["673","00","[2-578]\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-578]"]]],0,0,0,0,0,0,[0,["(?:22[89]|[78]\\d\\d)\\d{4}"]]],BO:["591","00(?:1\\d)?","(?:[2-467]\\d\\d|8001)\\d{5}",[8,9],[["(\\d)(\\d{7})","$1 $2",["[23]|4[46]"]],["(\\d{8})","$1",["[67]"]],["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["8"]]],"0",0,"0(1\\d)?",0,0,0,[0,["[67]\\d{7}",[8]]]],BQ:["599","00","(?:[34]1|7\\d)\\d{5}",[7],0,0,0,0,0,0,"[347]",[0,["(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\d|9[056])\\d)\\d{3}"]]],BR:["55","00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)","(?:[1-46-9]\\d\\d|5(?:[0-46-9]\\d|5[0-46-9]))\\d{8}|[1-9]\\d{9}|[3589]\\d{8}|[34]\\d{7}",[8,9,10,11],[["(\\d{4})(\\d{4})","$1-$2",["300|4(?:0[02]|37)","4(?:02|37)0|[34]00"]],["(\\d{3})(\\d{2,3})(\\d{4})","$1 $2 $3",["(?:[358]|90)0"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]"],"($1)"],["(\\d{2})(\\d{5})(\\d{4})","$1 $2-$3",["[16][1-9]|[2-57-9]"],"($1)"]],"0",0,"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\d{10,11}))?","$2",0,0,[0,["(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\d)\\d{7}",[10,11]]]],BS:["1","011","(?:242|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([3-8]\\d{6})$|1","242$1",0,"242",[0,["242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\d|[89]9))\\d{4}"]]],BT:["975","00","[17]\\d{7}|[2-8]\\d{6}",[7,8],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[2-68]|7[246]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[67]|7"]]],0,0,0,0,0,0,[0,["(?:1[67]|77)\\d{6}",[8]]]],BW:["267","00","(?:0800|(?:[37]|800)\\d)\\d{6}|(?:[2-6]\\d|90)\\d{5}",[7,8,10],[["(\\d{2})(\\d{5})","$1 $2",["90"]],["(\\d{3})(\\d{4})","$1 $2",["[24-6]|3[15-79]"]],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[37]"]],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["0"]],["(\\d{3})(\\d{4})(\\d{3})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["(?:321|7(?:[1-7]\\d|8[0-4]))\\d{5}",[8]]]],BY:["375","810","(?:[12]\\d|33|44|902)\\d{7}|8(?:0[0-79]\\d{5,7}|[1-7]\\d{9})|8(?:1[0-489]|[5-79]\\d)\\d{7}|8[1-79]\\d{6,7}|8[0-79]\\d{5}|8\\d{5}",[6,7,8,9,10,11],[["(\\d{3})(\\d{3})","$1 $2",["800"],"8 $1"],["(\\d{3})(\\d{2})(\\d{2,4})","$1 $2 $3",["800"],"8 $1"],["(\\d{4})(\\d{2})(\\d{3})","$1 $2-$3",["1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])","1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])"],"8 0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["1(?:[56]|7[467])|2[1-3]"],"8 0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[1-4]"],"8 0$1"],["(\\d{3})(\\d{3,4})(\\d{4})","$1 $2 $3",["[89]"],"8 $1"]],"8",0,"0|80?",0,0,0,[0,["(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\d)\\d{6}",[9]]],"8~10"],BZ:["501","00","(?:0800\\d|[2-8])\\d{6}",[7,11],[["(\\d{3})(\\d{4})","$1-$2",["[2-8]"]],["(\\d)(\\d{3})(\\d{4})(\\d{3})","$1-$2-$3-$4",["0"]]],0,0,0,0,0,0,[0,["6[0-35-7]\\d{5}",[7]]]],CA:["1","011","(?:[2-8]\\d|90)\\d{8}|3\\d{6}",[7,10],0,"1",0,0,0,0,0,[0,["(?:2(?:04|[23]6|[48]9|50|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|3[178]|50|68|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\d{6}",[10]]]],CC:["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}",[6,7,8,9,10,12],0,"0",0,"([59]\\d{7})$|0","8$1",0,0,[0,["4(?:79[01]|83[0-389]|93[0-6])\\d{5}|4(?:[0-3]\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-27-9])\\d{6}",[9]]],"0011"],CD:["243","00","[189]\\d{8}|[1-68]\\d{6}",[7,9],[["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["88"],"0$1"],["(\\d{2})(\\d{5})","$1 $2",["[1-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[89]"],"0$1"]],"0",0,0,0,0,0,[0,["88\\d{5}|(?:8[0-59]|9[017-9])\\d{7}"]]],CF:["236","00","(?:[27]\\d{3}|8776)\\d{4}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[278]"]]],0,0,0,0,0,0,[0,["7[024-7]\\d{6}"]]],CG:["242","00","222\\d{6}|(?:0\\d|80)\\d{7}",[9],[["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["8"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[02]"]]],0,0,0,0,0,0,[0,["026(?:1[0-5]|6[6-9])\\d{4}|0(?:[14-6]\\d\\d|2(?:40|5[5-8]|6[07-9]))\\d{5}"]]],CH:["41","00","8\\d{11}|[2-9]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8[047]|90"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-79]|81"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["8"],"0$1"]],"0",0,0,0,0,0,[0,["7[35-9]\\d{7}"]]],CI:["225","00","[02]\\d{9}",[10],[["(\\d{2})(\\d{2})(\\d)(\\d{5})","$1 $2 $3 $4",["2"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3 $4",["0"]]],0,0,0,0,0,0,[0,["0[157]\\d{8}"]]],CK:["682","00","[2-578]\\d{4}",[5],[["(\\d{2})(\\d{3})","$1 $2",["[2-578]"]]],0,0,0,0,0,0,[0,["[578]\\d{4}"]]],CL:["56","(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0","12300\\d{6}|6\\d{9,10}|[2-9]\\d{8}",[9,10,11],[["(\\d{5})(\\d{4})","$1 $2",["219","2196"],"($1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["44"]],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2[1-36]"],"($1)"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["9[2-9]"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-9]|[1-9])"],"($1)"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["60|8"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]],["(\\d{3})(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3 $4",["60"]]],0,0,0,0,0,0,[0,["2(?:1982[0-6]|3314[05-9])\\d{3}|(?:2(?:1(?:160|962)|3(?:2\\d\\d|3(?:[0346]\\d|1[0-35-9]|2[1-9]|5[0-24-9]|7[0-3])|600)|646[59])|80[1-9]\\d\\d|9(?:3(?:[0-57-9]\\d\\d|6(?:0[02-9]|[1-9]\\d))|6(?:[0-8]\\d\\d|9(?:[02-79]\\d|1[05-9]))|7[1-9]\\d\\d|9(?:[03-9]\\d\\d|1(?:[0235-9]\\d|4[0-24-9])|2(?:[0-79]\\d|8[0-46-9]))))\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\d{7}",[9]]]],CM:["237","00","[26]\\d{8}|88\\d{6,7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["88"]],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[26]|88"]]],0,0,0,0,0,0,[0,["(?:24[23]|6[25-9]\\d)\\d{6}",[9]]]],CN:["86","00|1(?:[12]\\d|79)\\d\\d00","1[127]\\d{8,9}|2\\d{9}(?:\\d{2})?|[12]\\d{6,7}|86\\d{6}|(?:1[03-689]\\d|6)\\d{7,9}|(?:[3-579]\\d|8[0-57-9])\\d{6,9}",[7,8,9,10,11,12],[["(\\d{2})(\\d{5,6})","$1 $2",["(?:10|2[0-57-9])[19]","(?:10|2[0-57-9])(?:10|9[56])","10(?:10|9[56])|2[0-57-9](?:100|9[56])"],"0$1"],["(\\d{3})(\\d{5,6})","$1 $2",["3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]","(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))[19]","85[23](?:10|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:10|9[56])","85[23](?:100|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:100|9[56])"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["(?:4|80)0"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["10|2(?:[02-57-9]|1[1-9])","10|2(?:[02-57-9]|1[1-9])","10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]"],"0$1",1],["(\\d{3})(\\d{7,8})","$1 $2",["9"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["80"],"0$1",1],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["[3-578]"],"0$1",1],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["1[3-9]"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4",["[12]"],"0$1",1]],"0",0,"(1(?:[12]\\d|79)\\d\\d)|0",0,0,0,[0,["1740[0-5]\\d{6}|1(?:[38]\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\d{8}",[11]]],"00"],CO:["57","00(?:4(?:[14]4|56)|[579])","(?:60\\d\\d|9101)\\d{6}|(?:1\\d|3)\\d{9}",[10,11],[["(\\d{3})(\\d{7})","$1 $2",["6"],"($1)"],["(\\d{3})(\\d{7})","$1 $2",["3[0-357]|91"]],["(\\d)(\\d{3})(\\d{7})","$1-$2-$3",["1"],"0$1",0,"$1 $2 $3"]],"0",0,"0(4(?:[14]4|56)|[579])?",0,0,0,[0,["3333(?:0(?:0\\d|1[0-5])|[4-9]\\d\\d)\\d{3}|(?:3(?:24[1-9]|3(?:00|3[0-24-9]))|9101)\\d{6}|3(?:0[0-5]|1\\d|2[0-3]|5[01]|70)\\d{7}",[10]]]],CR:["506","00","(?:8\\d|90)\\d{8}|(?:[24-8]\\d{3}|3005)\\d{4}",[8,10],[["(\\d{4})(\\d{4})","$1 $2",["[2-7]|8[3-9]"]],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[89]"]]],0,0,"(19(?:0[0-2468]|1[09]|20|66|77|99))",0,0,0,[0,["(?:3005\\d|6500[01])\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\d{6}",[8]]]],CU:["53","119","[27]\\d{6,7}|[34]\\d{5,7}|(?:5|8\\d\\d)\\d{7}",[6,7,8,10],[["(\\d{2})(\\d{4,6})","$1 $2",["2[1-4]|[34]"],"(0$1)"],["(\\d)(\\d{6,7})","$1 $2",["7"],"(0$1)"],["(\\d)(\\d{7})","$1 $2",["5"],"0$1"],["(\\d{3})(\\d{7})","$1 $2",["8"],"0$1"]],"0",0,0,0,0,0,[0,["5\\d{7}",[8]]]],CV:["238","0","(?:[2-59]\\d\\d|800)\\d{4}",[7],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[2-589]"]]],0,0,0,0,0,0,[0,["(?:36|5[1-389]|9\\d)\\d{5}"]]],CW:["599","00","(?:[34]1|60|(?:7|9\\d)\\d)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["[3467]"]],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["9[4-8]"]]],0,0,0,0,0,"[69]",[0,["953[01]\\d{4}|9(?:5[12467]|6[5-9])\\d{5}"]]],CX:["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}",[6,7,8,9,10,12],0,"0",0,"([59]\\d{7})$|0","8$1",0,0,[0,["4(?:79[01]|83[0-389]|93[0-6])\\d{5}|4(?:[0-3]\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-27-9])\\d{6}",[9]]],"0011"],CY:["357","00","(?:[279]\\d|[58]0)\\d{6}",[8],[["(\\d{2})(\\d{6})","$1 $2",["[257-9]"]]],0,0,0,0,0,0,[0,["9(?:10|[4-79]\\d)\\d{5}"]]],CZ:["420","00","(?:[2-578]\\d|60)\\d{7}|9\\d{8,11}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]|9[015-7]"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3 $4",["96"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]]],0,0,0,0,0,0,[0,["(?:60[1-8]|7(?:0[2-5]|[2379]\\d))\\d{6}"]]],DE:["49","00","[2579]\\d{5,14}|49(?:[34]0|69|8\\d)\\d\\d?|49(?:37|49|60|7[089]|9\\d)\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\d{1,8}|(?:1|[368]\\d|4[0-8])\\d{3,13}|49(?:[015]\\d|2[13]|31|[46][1-8])\\d{1,9}",[4,5,6,7,8,9,10,11,12,13,14,15],[["(\\d{2})(\\d{3,13})","$1 $2",["3[02]|40|[68]9"],"0$1"],["(\\d{3})(\\d{3,12})","$1 $2",["2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1","2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1"],"0$1"],["(\\d{4})(\\d{2,11})","$1 $2",["[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]","[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["138"],"0$1"],["(\\d{5})(\\d{2,10})","$1 $2",["3"],"0$1"],["(\\d{3})(\\d{5,11})","$1 $2",["181"],"0$1"],["(\\d{3})(\\d)(\\d{4,10})","$1 $2 $3",["1(?:3|80)|9"],"0$1"],["(\\d{3})(\\d{7,8})","$1 $2",["1[67]"],"0$1"],["(\\d{3})(\\d{7,12})","$1 $2",["8"],"0$1"],["(\\d{5})(\\d{6})","$1 $2",["185","1850","18500"],"0$1"],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{4})(\\d{7})","$1 $2",["18[68]"],"0$1"],["(\\d{5})(\\d{6})","$1 $2",["15[0568]"],"0$1"],["(\\d{4})(\\d{7})","$1 $2",["15[1279]"],"0$1"],["(\\d{3})(\\d{8})","$1 $2",["18"],"0$1"],["(\\d{3})(\\d{2})(\\d{7,8})","$1 $2 $3",["1(?:6[023]|7)"],"0$1"],["(\\d{4})(\\d{2})(\\d{7})","$1 $2 $3",["15[279]"],"0$1"],["(\\d{3})(\\d{2})(\\d{8})","$1 $2 $3",["15"],"0$1"]],"0",0,0,0,0,0,[0,["15[0-25-9]\\d{8}|1(?:6[023]|7\\d)\\d{7,8}",[10,11]]]],DJ:["253","00","(?:2\\d|77)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[27]"]]],0,0,0,0,0,0,[0,["77\\d{6}"]]],DK:["45","00","[2-9]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-9]"]]],0,0,0,0,0,0,[0,["(?:[2-7]\\d|8[126-9]|9[1-46-9])\\d{6}"]]],DM:["1","011","(?:[58]\\d\\d|767|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","767$1",0,"767",[0,["767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\d{4}"]]],DO:["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,0,0,0,"8001|8[024]9",[0,["8[024]9[2-9]\\d{6}"]]],DZ:["213","00","(?:[1-4]|[5-79]\\d|80)\\d{7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-4]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-8]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:5(?:4[0-29]|5\\d|6[0-2])|6(?:[569]\\d|7[0-6])|7[7-9]\\d)\\d{6}",[9]]]],EC:["593","00","1\\d{9,10}|(?:[2-7]|9\\d)\\d{7}",[8,9,10,11],[["(\\d)(\\d{3})(\\d{4})","$1 $2-$3",["[2-7]"],"(0$1)",0,"$1-$2-$3"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["9"],"0$1"],["(\\d{4})(\\d{3})(\\d{3,4})","$1 $2 $3",["1"]]],"0",0,0,0,0,0,[0,["964[0-2]\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\d)\\d{6}",[9]]]],EE:["372","00","8\\d{9}|[4578]\\d{7}|(?:[3-8]\\d|90)\\d{5}",[7,8,10],[["(\\d{3})(\\d{4})","$1 $2",["[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88","[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88"]],["(\\d{4})(\\d{3,4})","$1 $2",["[45]|8(?:00|[1-49])","[45]|8(?:00[1-9]|[1-49])"]],["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["7"]],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["(?:5\\d{5}|8(?:1(?:0(?:000|[3-9]\\d\\d)|(?:1(?:0[236]|1\\d)|(?:2[0-59]|[3-79]\\d)\\d)\\d)|2(?:0(?:000|(?:19|[2-7]\\d)\\d)|(?:(?:[124-6]\\d|3[5-9])\\d|7(?:[3679]\\d|8[13-9])|8(?:[2-6]\\d|7[01]))\\d)|[349]\\d{4}))\\d\\d|5(?:(?:[02]\\d|5[0-478])\\d|1(?:[0-8]\\d|95)|6(?:4[0-4]|5[1-589]))\\d{3}",[7,8]]]],EG:["20","00","[189]\\d{8,9}|[24-6]\\d{8}|[135]\\d{7}",[8,9,10],[["(\\d)(\\d{7,8})","$1 $2",["[23]"],"0$1"],["(\\d{2})(\\d{6,7})","$1 $2",["1[35]|[4-6]|8[2468]|9[235-7]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[189]"],"0$1"]],"0",0,0,0,0,0,[0,["1[0-25]\\d{8}",[10]]]],EH:["212","00","[5-8]\\d{8}",[9],0,"0",0,0,0,0,"528[89]",[0,["(?:6(?:[0-79]\\d|8[0-247-9])|7(?:[017]\\d|2[0-2]|6[0-8]|8[0-3]))\\d{6}"]]],ER:["291","00","[178]\\d{6}",[7],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[178]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:17[1-3]|7\\d\\d)\\d{4}"]]],ES:["34","00","[5-9]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[89]00"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-9]"]]],0,0,0,0,0,0,[0,["(?:590[16]00\\d|9(?:6906(?:09|10)|7390\\d\\d))\\d\\d|(?:6\\d|7[1-48])\\d{7}"]]],ET:["251","00","(?:11|[2-579]\\d)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-579]"],"0$1"]],"0",0,0,0,0,0,[0,["7001\\d{5}|(?:7(?:0[1-9]|1[01]|77|86|99)|9\\d\\d)\\d{6}"]]],FI:["358","00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))","[1-35689]\\d{4}|7\\d{10,11}|(?:[124-7]\\d|3[0-46-9])\\d{8}|[1-9]\\d{5,8}",[5,6,7,8,9,10,11,12],[["(\\d)(\\d{4,9})","$1 $2",["[2568][1-8]|3(?:0[1-9]|[1-9])|9"],"0$1"],["(\\d{3})(\\d{3,7})","$1 $2",["[12]00|[368]|70[07-9]"],"0$1"],["(\\d{2})(\\d{4,8})","$1 $2",["[1245]|7[135]"],"0$1"],["(\\d{2})(\\d{6,10})","$1 $2",["7"],"0$1"]],"0",0,0,0,0,"1[03-79]|[2-9]",[0,["4946\\d{2,6}|(?:4[0-8]|50)\\d{4,8}",[6,7,8,9,10]]],"00"],FJ:["679","0(?:0|52)","45\\d{5}|(?:0800\\d|[235-9])\\d{6}",[7,11],[["(\\d{3})(\\d{4})","$1 $2",["[235-9]|45"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["0"]]],0,0,0,0,0,0,[0,["(?:[279]\\d|45|5[01568]|8[034679])\\d{5}",[7]]],"00"],FK:["500","00","[2-7]\\d{4}",[5],0,0,0,0,0,0,0,[0,["[56]\\d{4}"]]],FM:["691","00","(?:[39]\\d\\d|820)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[389]"]]],0,0,0,0,0,0,[0,["31(?:00[67]|208|309)\\d\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\d)\\d)\\d{3}"]]],FO:["298","00","[2-9]\\d{5}",[6],[["(\\d{6})","$1",["[2-9]"]]],0,0,"(10(?:01|[12]0|88))",0,0,0,[0,["(?:[27][1-9]|5\\d|9[16])\\d{4}"]]],FR:["33","00","[1-9]\\d{8}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0 $1"],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:6(?:[0-24-8]\\d|3[0-8]|9[589])|7[3-9]\\d)\\d{6}"]]],GA:["241","00","(?:[067]\\d|11)\\d{6}|[2-7]\\d{6}",[7,8],[["(\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-7]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["11|[67]"],"0$1"]],0,0,"0(11\\d{6}|60\\d{6}|61\\d{6}|6[256]\\d{6}|7[467]\\d{6})","$1",0,0,[0,["(?:(?:0[2-7]|7[467])\\d|6(?:0[0-4]|10|[256]\\d))\\d{5}|[2-7]\\d{6}"]]],GB:["44","00","[1-357-9]\\d{9}|[18]\\d{8}|8\\d{6}",[7,9,10],[["(\\d{3})(\\d{4})","$1 $2",["800","8001","80011","800111","8001111"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["845","8454","84546","845464"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["800"],"0$1"],["(\\d{5})(\\d{4,5})","$1 $2",["1(?:38|5[23]|69|76|94)","1(?:(?:38|69)7|5(?:24|39)|768|946)","1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)"],"0$1"],["(\\d{4})(\\d{5,6})","$1 $2",["1(?:[2-69][02-9]|[78])"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[25]|7(?:0|6[02-9])","[25]|7(?:0|6(?:[03-9]|2[356]))"],"0$1"],["(\\d{4})(\\d{6})","$1 $2",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[1389]"],"0$1"]],"0",0,0,0,0,0,[0,["7(?:457[0-57-9]|700[01]|911[028])\\d{5}|7(?:[1-3]\\d\\d|4(?:[0-46-9]\\d|5[0-689])|5(?:0[0-8]|[13-9]\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\d|8[02-9]|9[0-689])|8(?:[014-9]\\d|[23][0-8])|9(?:[024-9]\\d|1[02-9]|3[0-689]))\\d{6}",[10]]],0," x"],GD:["1","011","(?:473|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","473$1",0,"473",[0,["473(?:4(?:0[2-79]|1[04-9]|2[0-5]|58)|5(?:2[01]|3[3-8])|901)\\d{4}"]]],GE:["995","00","(?:[3-57]\\d\\d|800)\\d{6}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["70"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["32"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[57]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[348]"],"0$1"]],"0",0,0,0,0,0,[0,["5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\d|22252[0-4])\\d\\d|5(?:00(?:0\\d|5[05])|11(?:00|[124]\\d|3[01])|(?:520|909)0|75(?:00|[57]5)|8(?:0(?:[01]\\d|2[0-4])|58[89]|8(?:55|88)))\\d{4}|(?:5(?:[14]4|5[0157-9]|68|7[0147-9]|9[1-35-9])|790)\\d{6}|5(?:0(?:070|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|(?:40[04]|900)0|5222)[0-4]\\d{3}"]]],GF:["594","00","[56]94\\d{6}|(?:80|9\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[56]|9[47]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[89]"],"0$1"]],"0",0,0,0,0,0,[0,["694(?:[0-249]\\d|3[0-8])\\d{4}"]]],GG:["44","00","(?:1481|[357-9]\\d{3})\\d{6}|8\\d{6}(?:\\d{2})?",[7,9,10],0,"0",0,"([25-9]\\d{5})$|0","1481$1",0,0,[0,["7(?:(?:781|839)\\d|911[17])\\d{5}",[10]]]],GH:["233","00","(?:[235]\\d{3}|800)\\d{5}",[8,9],[["(\\d{3})(\\d{5})","$1 $2",["8"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[235]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:2(?:[0346-9]\\d|5[67])|5(?:[03-7]\\d|9[1-9]))\\d{6}",[9]]]],GI:["350","00","(?:[25]\\d|60)\\d{6}",[8],[["(\\d{3})(\\d{5})","$1 $2",["2"]]],0,0,0,0,0,0,[0,["5251[0-4]\\d{3}|(?:5(?:[146-8]\\d\\d|250)|60(?:1[01]|6\\d))\\d{4}"]]],GL:["299","00","(?:19|[2-689]\\d|70)\\d{4}",[6],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["19|[2-9]"]]],0,0,0,0,0,0,[0,["[245]\\d{5}"]]],GM:["220","00","[2-9]\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-9]"]]],0,0,0,0,0,0,[0,["(?:[23679]\\d|5[0-489])\\d{5}"]]],GN:["224","00","722\\d{6}|(?:3|6\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["3"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[67]"]]],0,0,0,0,0,0,[0,["6[0-356]\\d{7}",[9]]]],GP:["590","00","590\\d{6}|(?:69|80|9\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[569]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[0,["69(?:0\\d\\d|1(?:2[2-9]|3[0-5]))\\d{4}"]]],GQ:["240","00","222\\d{6}|(?:3\\d|55|[89]0)\\d{7}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235]"]],["(\\d{3})(\\d{6})","$1 $2",["[89]"]]],0,0,0,0,0,0,[0,["(?:222|55\\d)\\d{6}"]]],GR:["30","00","5005000\\d{3}|8\\d{9,11}|(?:[269]\\d|70)\\d{8}",[10,11,12],[["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["21|7"]],["(\\d{4})(\\d{6})","$1 $2",["2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2689]"]],["(\\d{3})(\\d{3,4})(\\d{5})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["68[57-9]\\d{7}|(?:69|94)\\d{8}",[10]]]],GT:["502","00","(?:1\\d{3}|[2-7])\\d{7}",[8,11],[["(\\d{4})(\\d{4})","$1 $2",["[2-7]"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]]],0,0,0,0,0,0,[0,["[3-5]\\d{7}",[8]]]],GU:["1","011","(?:[58]\\d\\d|671|900)\\d{7}",[10],0,"1",0,"([3-9]\\d{6})$|1","671$1",0,"671",[0,["671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-46-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[48])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\d{4}"]]],GW:["245","00","[49]\\d{8}|4\\d{6}",[7,9],[["(\\d{3})(\\d{4})","$1 $2",["40"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[49]"]]],0,0,0,0,0,0,[0,["9(?:5\\d|6[569]|77)\\d{6}",[9]]]],GY:["592","001","9008\\d{3}|(?:[2-467]\\d\\d|862)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-46-9]"]]],0,0,0,0,0,0,[0,["(?:6\\d\\d|70[0-35-7])\\d{4}"]]],HK:["852","00(?:30|5[09]|[126-9]?)","8[0-46-9]\\d{6,7}|9\\d{4,7}|(?:[2-7]|9\\d{3})\\d{7}",[5,6,7,8,9,11],[["(\\d{3})(\\d{2,5})","$1 $2",["900","9003"]],["(\\d{4})(\\d{4})","$1 $2",["[2-7]|8[1-4]|9(?:0[1-9]|[1-8])"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]],["(\\d{3})(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]]],0,0,0,0,0,0,[0,["(?:4(?:44[5-9]|6(?:0[0-7]|1[0-6]|4[0-57-9]|6[0-4]|7[0-8]))|573[0-6]|6(?:26[013-8]|66[0-3])|70(?:7[1-5]|8[0-4])|848[015-9]|9(?:29[013-9]|59[0-4]))\\d{4}|(?:4(?:4[01]|6[2358])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\d|[268][0-57-9]|7[0-79])|84[09]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\d))\\d{5}",[8]]],"00"],HN:["504","00","8\\d{10}|[237-9]\\d{7}",[8,11],[["(\\d{4})(\\d{4})","$1-$2",["[237-9]"]]],0,0,0,0,0,0,[0,["[37-9]\\d{7}",[8]]]],HR:["385","00","(?:[24-69]\\d|3[0-79])\\d{7}|80\\d{5,7}|[1-79]\\d{7}|6\\d{5,6}",[6,7,8,9],[["(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["6[01]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{4})(\\d{3})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[67]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["9"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-5]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"],"0$1"]],"0",0,0,0,0,0,[0,["9(?:(?:0[1-9]|[12589]\\d)\\d\\d|7(?:[0679]\\d\\d|5(?:[01]\\d|44|77|9[67])))\\d{4}|98\\d{6}",[8,9]]]],HT:["509","00","(?:[2-489]\\d|55)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[2-589]"]]],0,0,0,0,0,0,[0,["(?:[34]\\d|55)\\d{6}"]]],HU:["36","00","[235-7]\\d{8}|[1-9]\\d{7}",[8,9],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"(06 $1)"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]"],"(06 $1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"],"06 $1"]],"06",0,0,0,0,0,[0,["(?:[257]0|3[01])\\d{7}",[9]]]],ID:["62","00[89]","(?:(?:00[1-9]|8\\d)\\d{4}|[1-36])\\d{6}|00\\d{10}|[1-9]\\d{8,10}|[2-9]\\d{7}",[7,8,9,10,11,12,13],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["15"]],["(\\d{2})(\\d{5,9})","$1 $2",["2[124]|[36]1"],"(0$1)"],["(\\d{3})(\\d{5,7})","$1 $2",["800"],"0$1"],["(\\d{3})(\\d{5,8})","$1 $2",["[2-79]"],"(0$1)"],["(\\d{3})(\\d{3,4})(\\d{3})","$1-$2-$3",["8[1-35-9]"],"0$1"],["(\\d{3})(\\d{6,8})","$1 $2",["1"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["804"],"0$1"],["(\\d{3})(\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4",["80"],"0$1"],["(\\d{3})(\\d{4})(\\d{4,5})","$1-$2-$3",["8"],"0$1"]],"0",0,0,0,0,0,[0,["8[1-35-9]\\d{7,10}",[9,10,11,12]]]],IE:["353","00","(?:1\\d|[2569])\\d{6,8}|4\\d{6,9}|7\\d{8}|8\\d{8,9}",[7,8,9,10],[["(\\d{2})(\\d{5})","$1 $2",["2[24-9]|47|58|6[237-9]|9[35-9]"],"(0$1)"],["(\\d{3})(\\d{5})","$1 $2",["[45]0"],"(0$1)"],["(\\d)(\\d{3,4})(\\d{4})","$1 $2 $3",["1"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2569]|4[1-69]|7[14]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["70"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["81"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[78]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["4"],"(0$1)"],["(\\d{2})(\\d)(\\d{3})(\\d{4})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[0,["8(?:22|[35-9]\\d)\\d{6}",[9]]]],IL:["972","0(?:0|1[2-9])","1\\d{6}(?:\\d{3,5})?|[57]\\d{8}|[1-489]\\d{7}",[7,8,9,10,11,12],[["(\\d{4})(\\d{3})","$1-$2",["125"]],["(\\d{4})(\\d{2})(\\d{2})","$1-$2-$3",["121"]],["(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[2-489]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[57]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1-$2-$3",["12"]],["(\\d{4})(\\d{6})","$1-$2",["159"]],["(\\d)(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3-$4",["1[7-9]"]],["(\\d{3})(\\d{1,2})(\\d{3})(\\d{4})","$1-$2 $3-$4",["15"]]],"0",0,0,0,0,0,[0,["5(?:(?:[02368]\\d|[19][2-9]|4[1-9])\\d|5(?:01|1[79]|2[2-9]|3[0-3]|4[34]|5[015689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\d{5}",[9]]]],IM:["44","00","1624\\d{6}|(?:[3578]\\d|90)\\d{8}",[10],0,"0",0,"([25-8]\\d{5})$|0","1624$1",0,"74576|(?:16|7[56])24",[0,["76245[06]\\d{4}|7(?:4576|[59]24\\d|624[0-4689])\\d{5}"]]],IN:["91","00","(?:000800|[2-9]\\d\\d)\\d{7}|1\\d{7,12}",[8,9,10,11,12,13],[["(\\d{8})","$1",["5(?:0|2[23]|3[03]|[67]1|88)","5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)","5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)"],0,1],["(\\d{4})(\\d{4,5})","$1 $2",["180","1800"],0,1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["140"],0,1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["11|2[02]|33|4[04]|79[1-7]|80[2-46]","11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])","11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]","1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]","1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]"],"0$1",1],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807","1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]","1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\d|7(?:1(?:[013-8]\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\d|5[0-367])|70[13-7]))[2-7]"],"0$1",1],["(\\d{5})(\\d{5})","$1 $2",["[6-9]"],"0$1",1],["(\\d{4})(\\d{2,4})(\\d{4})","$1 $2 $3",["1(?:6|8[06])","1(?:6|8[06]0)"],0,1],["(\\d{4})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["18"],0,1]],"0",0,0,0,0,0,[0,["(?:61279|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\d{5}|(?:6(?:12|[2-47]1|5[17]|6[13]|80)[0189]|7(?:1(?:2[0189]|9[0-5])|2(?:[14][017-9]|8[0-59])|3(?:2[5-8]|[34][017-9]|9[016-9])|4(?:1[015-9]|[29][89]|39|8[389])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\d{6}|(?:7(?:31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\d|7[02-8])\\d{5}|(?:6(?:[09]\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:0\\d|2[0235-79]|3[05-8]|40|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\d\\d)\\d{7}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|8[124-6])\\d|7(?:[235689]\\d|4[0189]))|7(?:1(?:[013-8]\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-5])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\d|5[0-367])|70[13-7]|881))[0189]\\d{5}",[10]]]],IO:["246","00","3\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["3"]]],0,0,0,0,0,0,[0,["38\\d{5}"]]],IQ:["964","00","(?:1|7\\d\\d)\\d{7}|[2-6]\\d{7,8}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-6]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"]],"0",0,0,0,0,0,[0,["7[3-9]\\d{8}",[10]]]],IR:["98","00","[1-9]\\d{9}|(?:[1-8]\\d\\d|9)\\d{3,4}",[4,5,6,7,10],[["(\\d{4,5})","$1",["96"],"0$1"],["(\\d{2})(\\d{4,5})","$1 $2",["(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["9"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[1-8]"],"0$1"]],"0",0,0,0,0,0,[0,["9(?:(?:0(?:[0-35]\\d|4[4-6])|(?:[13]\\d|2[0-3])\\d)\\d|9(?:[0-46]\\d\\d|5[15]0|8(?:1\\d|88)|9(?:0[0-3]|[19]\\d|21|77|8[7-9])))\\d{5}",[10]]]],IS:["354","00|1(?:0(?:01|[12]0)|100)","(?:38\\d|[4-9])\\d{6}",[7,9],[["(\\d{3})(\\d{4})","$1 $2",["[4-9]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["3"]]],0,0,0,0,0,0,[0,["(?:38[589]\\d\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\d)|7(?:5[057]|[6-9]\\d)|8(?:2[0-59]|[3-69]\\d|8[238]))\\d{4}"]],"00"],IT:["39","00","0\\d{5,10}|1\\d{8,10}|3(?:[0-8]\\d{7,10}|9\\d{7,8})|(?:55|70)\\d{8}|8\\d{5}(?:\\d{2,4})?",[6,7,8,9,10,11],[["(\\d{2})(\\d{4,6})","$1 $2",["0[26]"]],["(\\d{3})(\\d{3,6})","$1 $2",["0[13-57-9][0159]|8(?:03|4[17]|9[2-5])","0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))"]],["(\\d{4})(\\d{2,6})","$1 $2",["0(?:[13-579][2-46-8]|8[236-8])"]],["(\\d{4})(\\d{4})","$1 $2",["894"]],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["0[26]|5"]],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["1(?:44|[679])|[378]"]],["(\\d{3})(\\d{3,4})(\\d{4})","$1 $2 $3",["0[13-57-9][0159]|14"]],["(\\d{2})(\\d{4})(\\d{5})","$1 $2 $3",["0[26]"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["0"]],["(\\d{3})(\\d{4})(\\d{4,5})","$1 $2 $3",["3"]]],0,0,0,0,0,0,[0,["3[1-9]\\d{8}|3[2-9]\\d{7}",[9,10]]]],JE:["44","00","1534\\d{6}|(?:[3578]\\d|90)\\d{8}",[10],0,"0",0,"([0-24-8]\\d{5})$|0","1534$1",0,0,[0,["7(?:(?:(?:50|82)9|937)\\d|7(?:00[378]|97[7-9]))\\d{5}"]]],JM:["1","011","(?:[58]\\d\\d|658|900)\\d{7}",[10],0,"1",0,0,0,0,"658|876",[0,["(?:658295|876(?:2(?:0[1-9]|[13-9]\\d|2[013-9])|[348]\\d\\d|5(?:0[1-9]|[1-9]\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\d{4}"]]],JO:["962","00","(?:(?:[2689]|7\\d)\\d|32|53)\\d{6}",[8,9],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2356]|87"],"(0$1)"],["(\\d{3})(\\d{5,6})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["70"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["7"],"0$1"]],"0",0,0,0,0,0,[0,["7(?:[78][0-25-9]|9\\d)\\d{6}",[9]]]],JP:["81","010","00[1-9]\\d{6,14}|[257-9]\\d{9}|(?:00|[1-9]\\d\\d)\\d{6}",[8,9,10,11,12,13,14,15,16,17],[["(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3",["(?:12|57|99)0"],"0$1"],["(\\d{4})(\\d)(\\d{4})","$1-$2-$3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51|63)|9(?:80|9[16])","1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9]|636)|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]","1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9]|636[457-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["60"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1-$2-$3",["[36]|4(?:2[09]|7[01])","[36]|4(?:2(?:0|9[02-69])|7(?:0[019]|1))"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[27-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])","1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9])|5(?:2|3[045]|4[0-369]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|49|51|6(?:[0-24]|36|5[0-3589]|72|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:49|55|83)[29]|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]","1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]","1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|7[015-9]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17|3[015-9]))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9(?:[019]|4[1-3]|6(?:[0-47-9]|5[01346-9])))|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|829(?:2|66)|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]"],"0$1"],["(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["[14]|[289][2-9]|5[3-9]|7[2-4679]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["800"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[257-9]"],"0$1"]],"0",0,0,0,0,0,[0,["[7-9]0[1-9]\\d{7}",[10]]]],KE:["254","000","(?:[17]\\d\\d|900)\\d{6}|(?:2|80)0\\d{6,7}|[4-6]\\d{6,8}",[7,8,9,10],[["(\\d{2})(\\d{5,7})","$1 $2",["[24-6]"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["[17]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[89]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:1(?:0[0-6]|1[0-5]|2[014]|30)|7\\d\\d)\\d{6}",[9]]]],KG:["996","00","8\\d{9}|(?:[235-8]\\d|99)\\d{7}",[9,10],[["(\\d{4})(\\d{5})","$1 $2",["3(?:1[346]|[24-79])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235-79]|88"],"0$1"],["(\\d{3})(\\d{3})(\\d)(\\d{2,3})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[0,["312(?:58\\d|973)\\d{3}|(?:2(?:0[0-35]|2\\d)|5[0-24-7]\\d|600|7(?:[07]\\d|55)|88[08]|99[05-9])\\d{6}",[9]]]],KH:["855","00[14-9]","1\\d{9}|[1-9]\\d{7,8}",[8,9,10],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-9]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0",0,0,0,0,0,[0,["(?:(?:1[28]|3[18]|9[67])\\d|6[016-9]|7(?:[07-9]|[16]\\d)|8(?:[013-79]|8\\d))\\d{6}|(?:1\\d|9[0-57-9])\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\d{5}",[8,9]]]],KI:["686","00","(?:[37]\\d|6[0-79])\\d{6}|(?:[2-48]\\d|50)\\d{3}",[5,8],0,"0",0,0,0,0,0,[0,["(?:63\\d{3}|73(?:0[0-5]\\d|140))\\d{3}|[67]200[01]\\d{3}",[8]]]],KM:["269","00","[3478]\\d{6}",[7],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[3478]"]]],0,0,0,0,0,0,[0,["[34]\\d{6}"]]],KN:["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","869$1",0,"869",[0,["869(?:48[89]|55[6-8]|66\\d|76[02-7])\\d{4}"]]],KP:["850","00|99","85\\d{6}|(?:19\\d|[2-7])\\d{7}",[8,10],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2-7]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"]],"0",0,0,0,0,0,[0,["19[1-3]\\d{7}",[10]]]],KR:["82","00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))","00[1-9]\\d{8,11}|(?:[12]|5\\d{3})\\d{7}|[13-6]\\d{9}|(?:[1-6]\\d|80)\\d{7}|[3-6]\\d{4,5}|(?:00|7)0\\d{8}",[5,6,8,9,10,11,12,13,14],[["(\\d{2})(\\d{3,4})","$1-$2",["(?:3[1-3]|[46][1-4]|5[1-5])1"],"0$1"],["(\\d{4})(\\d{4})","$1-$2",["1"]],["(\\d)(\\d{3,4})(\\d{4})","$1-$2-$3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["60|8"],"0$1"],["(\\d{2})(\\d{3,4})(\\d{4})","$1-$2-$3",["[1346]|5[1-5]"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[57]"],"0$1"],["(\\d{2})(\\d{5})(\\d{4})","$1-$2-$3",["5"],"0$1"]],"0",0,"0(8(?:[1-46-8]|5\\d\\d))?",0,0,0,[0,["1(?:05(?:[0-8]\\d|9[0-6])|22[13]\\d)\\d{4,5}|1(?:0[1-46-9]|[16-9]\\d|2[013-9])\\d{6,7}",[9,10]]]],KW:["965","00","18\\d{5}|(?:[2569]\\d|41)\\d{6}",[7,8],[["(\\d{4})(\\d{3,4})","$1 $2",["[169]|2(?:[235]|4[1-35-9])|52"]],["(\\d{3})(\\d{5})","$1 $2",["[245]"]]],0,0,0,0,0,0,[0,["(?:41\\d\\d|5(?:(?:[05]\\d|1[0-7]|6[56])\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\d)\\d|1(?:00|11|66)|222|3[36]3|444|7(?:0[013-9]|[67]\\d)|888|9(?:[069]\\d|3[039]))|9(?:(?:0[09]|[4679]\\d|8[057-9])\\d|1(?:1[01]|99)|2(?:00|2\\d)|3(?:00|3[03])|5(?:00|5\\d)))\\d{4}",[8]]]],KY:["1","011","(?:345|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","345$1",0,"345",[0,["345(?:32[1-9]|42[0-4]|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\d{4}"]]],KZ:["7","810","(?:33622|8\\d{8})\\d{5}|[78]\\d{9}",[10,14],0,"8",0,0,0,0,"33|7",[0,["7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\d{7}",[10]]],"8~10"],LA:["856","00","[23]\\d{9}|3\\d{8}|(?:[235-8]\\d|41)\\d{6}",[8,9,10],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2[13]|3[14]|[4-8]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["30[013-9]"],"0$1"],["(\\d{2})(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[23]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:20(?:[2359]\\d|7[6-8]|88)|302\\d)\\d{6}",[10]]]],LB:["961","00","[27-9]\\d{7}|[13-9]\\d{6}",[7,8],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-69]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[27-9]"]]],"0",0,0,0,0,0,[0,["793(?:[01]\\d|2[0-4])\\d{3}|(?:(?:3|81)\\d|7(?:[01]\\d|6[013-9]|8[89]|9[12]))\\d{5}"]]],LC:["1","011","(?:[58]\\d\\d|758|900)\\d{7}",[10],0,"1",0,"([2-8]\\d{6})$|1","758$1",0,"758",[0,["758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\d|3[0-3])|812)\\d{4}"]]],LI:["423","00","[68]\\d{8}|(?:[2378]\\d|90)\\d{5}",[7,9],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[2379]|8(?:0[09]|7)","[2379]|8(?:0(?:02|9)|7)"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["69"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]]],"0",0,"(1001)|0",0,0,0,[0,["(?:6(?:(?:4[5-9]|5[0-4])\\d|6(?:[0245]\\d|[17]0|3[7-9]))\\d|7(?:[37-9]\\d|42|56))\\d{4}"]]],LK:["94","00","[1-9]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[1-689]"],"0$1"]],"0",0,0,0,0,0,[0,["7(?:[0-25-8]\\d|4[0-4])\\d{6}"]]],LR:["231","00","(?:[25]\\d|33|77|88)\\d{7}|(?:2\\d|[4-6])\\d{6}",[7,8,9],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[4-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[23578]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:(?:(?:22|33)0|555|(?:77|88)\\d)\\d|4[67])\\d{5}|[56]\\d{6}",[7,9]]]],LS:["266","00","(?:[256]\\d\\d|800)\\d{5}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[2568]"]]],0,0,0,0,0,0,[0,["[56]\\d{7}"]]],LT:["370","00","(?:[3469]\\d|52|[78]0)\\d{6}",[8],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["52[0-7]"],"(8-$1)",1],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[7-9]"],"8 $1",1],["(\\d{2})(\\d{6})","$1 $2",["37|4(?:[15]|6[1-8])"],"(8-$1)",1],["(\\d{3})(\\d{5})","$1 $2",["[3-6]"],"(8-$1)",1]],"8",0,"[08]",0,0,0,[0,["6\\d{7}"]]],LU:["352","00","35[013-9]\\d{4,8}|6\\d{8}|35\\d{2,4}|(?:[2457-9]\\d|3[0-46-9])\\d{2,9}",[4,5,6,7,8,9,10,11],[["(\\d{2})(\\d{3})","$1 $2",["2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])"]],["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])"]],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["20[2-689]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4",["2(?:[0367]|4[3-8])"]],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["80[01]|90[015]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["20"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4 $5",["2(?:[0367]|4[3-8])"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{1,5})","$1 $2 $3 $4",["[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]"]]],0,0,"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\d)",0,0,0,[0,["6(?:[269][18]|5[1568]|7[189]|81)\\d{6}",[9]]]],LV:["371","00","(?:[268]\\d|90)\\d{6}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[269]|8[01]"]]],0,0,0,0,0,0,[0,["23(?:23[0-57-9]|33[0238])\\d{3}|2(?:[0-24-9]\\d\\d|3(?:0[07]|[14-9]\\d|2[024-9]|3[0-24-9]))\\d{4}"]]],LY:["218","00","[2-9]\\d{8}",[9],[["(\\d{2})(\\d{7})","$1-$2",["[2-9]"],"0$1"]],"0",0,0,0,0,0,[0,["9[1-6]\\d{7}"]]],MA:["212","00","[5-8]\\d{8}",[9],[["(\\d{5})(\\d{4})","$1-$2",["5(?:29|38)","5(?:29[1289]|389)","529(?:1[1-46-9]|2[013-8]|90)|5(?:298|389)[0-46-9]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["5[45]"],"0$1"],["(\\d{4})(\\d{5})","$1-$2",["5(?:2[2-489]|3[5-9]|9)|892","5(?:2(?:[2-49]|8[235-9])|3[5-9]|9)|892"],"0$1"],["(\\d{2})(\\d{7})","$1-$2",["8"],"0$1"],["(\\d{3})(\\d{6})","$1-$2",["[5-7]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:6(?:[0-79]\\d|8[0-247-9])|7(?:[017]\\d|2[0-2]|6[0-8]|8[0-3]))\\d{6}"]]],MC:["377","00","(?:[3489]|6\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["4"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[389]"]],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["6"],"0$1"]],"0",0,0,0,0,0,[0,["4(?:[46]\\d|5[1-9])\\d{5}|(?:3|6\\d)\\d{7}"]]],MD:["373","00","(?:[235-7]\\d|[89]0)\\d{6}",[8],[["(\\d{3})(\\d{5})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["22|3"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[25-7]"],"0$1"]],"0",0,0,0,0,0,[0,["562\\d{5}|(?:6\\d|7[16-9])\\d{6}"]]],ME:["382","00","(?:20|[3-79]\\d)\\d{6}|80\\d{6,7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"],"0$1"]],"0",0,0,0,0,0,[0,["6(?:[07-9]\\d|3[024]|6[0-25])\\d{5}",[8]]]],MF:["590","00","590\\d{6}|(?:69|80|9\\d)\\d{7}",[9],0,"0",0,0,0,0,0,[0,["69(?:0\\d\\d|1(?:2[2-9]|3[0-5]))\\d{4}"]]],MG:["261","00","[23]\\d{8}",[9],[["(\\d{2})(\\d{2})(\\d{3})(\\d{2})","$1 $2 $3 $4",["[23]"],"0$1"]],"0",0,"([24-9]\\d{6})$|0","20$1",0,0,[0,["3[2-47-9]\\d{7}"]]],MH:["692","011","329\\d{4}|(?:[256]\\d|45)\\d{5}",[7],[["(\\d{3})(\\d{4})","$1-$2",["[2-6]"]]],"1",0,0,0,0,0,[0,["(?:(?:23|54)5|329|45[356])\\d{4}"]]],MK:["389","00","[2-578]\\d{7}",[8],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2|34[47]|4(?:[37]7|5[47]|64)"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[347]"],"0$1"],["(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["[58]"],"0$1"]],"0",0,0,0,0,0,[0,["7(?:3555|(?:474|9[019]7)7)\\d{3}|7(?:[0-25-8]\\d\\d|3(?:[1-48]\\d|7[01578])|4(?:2\\d|60|7[01578])|9(?:[2-4]\\d|5[01]|7[015]))\\d{4}"]]],ML:["223","00","[24-9]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24-9]"]]],0,0,0,0,0,0,[0,["2(?:0(?:01|79)|17\\d)\\d{4}|(?:5[01]|[679]\\d|8[2-49])\\d{6}"]]],MM:["95","00","1\\d{5,7}|95\\d{6}|(?:[4-7]|9[0-46-9])\\d{6,8}|(?:2|8\\d)\\d{5,8}",[6,7,8,9,10],[["(\\d)(\\d{2})(\\d{3})","$1 $2 $3",["16|2"],"0$1"],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[45]|6(?:0[23]|[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-6]"],"0$1"],["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[12]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[4-7]|8[1-35]"],"0$1"],["(\\d)(\\d{3})(\\d{4,6})","$1 $2 $3",["9(?:2[0-4]|[35-9]|4[137-9])"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["92"],"0$1"],["(\\d)(\\d{5})(\\d{4})","$1 $2 $3",["9"],"0$1"]],"0",0,0,0,0,0,[0,["(?:17[01]|9(?:2(?:[0-4]|[56]\\d\\d)|(?:3(?:[0-36]|4\\d)|(?:6\\d|9[4-8])\\d|7(?:3|40|[5-9]\\d)|8(?:78|[89]\\d))\\d|4(?:(?:[0245]\\d|[1379])\\d|88)|5[0-6])\\d)\\d{4}|9[69]1\\d{6}|9(?:[68]\\d|9[089])\\d{5}",[7,8,9,10]]]],MN:["976","001","[12]\\d{7,9}|[5-9]\\d{7}",[8,9,10],[["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[12]1"],"0$1"],["(\\d{4})(\\d{4})","$1 $2",["[5-9]"]],["(\\d{3})(\\d{5,6})","$1 $2",["[12]2[1-3]"],"0$1"],["(\\d{4})(\\d{5,6})","$1 $2",["[12](?:27|3[2-8]|4[2-68]|5[1-4689])","[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]"],"0$1"],["(\\d{5})(\\d{4,5})","$1 $2",["[12]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:83[01]|920)\\d{5}|(?:5[05]|6[069]|8[015689]|9[013-9])\\d{6}",[8]]]],MO:["853","00","0800\\d{3}|(?:28|[68]\\d)\\d{6}",[7,8],[["(\\d{4})(\\d{3})","$1 $2",["0"]],["(\\d{4})(\\d{4})","$1 $2",["[268]"]]],0,0,0,0,0,0,[0,["6800[0-79]\\d{3}|6(?:[235]\\d\\d|6(?:0[0-5]|[1-9]\\d)|8(?:0[1-9]|[14-8]\\d|2[5-9]|[39][0-4]))\\d{4}",[8]]]],MP:["1","011","[58]\\d{9}|(?:67|90)0\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","670$1",0,"670",[0,["670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\d{4}"]]],MQ:["596","00","596\\d{6}|(?:69|80|9\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[569]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[0,["69(?:6(?:[0-46-9]\\d|5[0-6])|727)\\d{4}"]]],MR:["222","00","(?:[2-4]\\d\\d|800)\\d{5}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-48]"]]],0,0,0,0,0,0,[0,["[2-4][0-46-9]\\d{6}"]]],MS:["1","011","(?:[58]\\d\\d|664|900)\\d{7}",[10],0,"1",0,"([34]\\d{6})$|1","664$1",0,"664",[0,["664(?:3(?:49|9[1-6])|49[2-6])\\d{4}"]]],MT:["356","00","3550\\d{4}|(?:[2579]\\d\\d|800)\\d{5}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[2357-9]"]]],0,0,0,0,0,0,[0,["(?:7(?:210|[79]\\d\\d)|9(?:[29]\\d\\d|69[67]|8(?:1[1-3]|89|97)))\\d{4}"]]],MU:["230","0(?:0|[24-7]0|3[03])","(?:[57]|8\\d\\d)\\d{7}|[2-468]\\d{6}",[7,8,10],[["(\\d{3})(\\d{4})","$1 $2",["[2-46]|8[013]"]],["(\\d{4})(\\d{4})","$1 $2",["[57]"]],["(\\d{5})(\\d{5})","$1 $2",["8"]]],0,0,0,0,0,0,[0,["5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\d|8[0-689]|9[0-8])|7(?:01|30))\\d{5}",[8]]],"020"],MV:["960","0(?:0|19)","(?:800|9[0-57-9]\\d)\\d{7}|[34679]\\d{6}",[7,10],[["(\\d{3})(\\d{4})","$1-$2",["[34679]"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"]]],0,0,0,0,0,0,[0,["(?:46[46]|[79]\\d\\d)\\d{4}",[7]]],"00"],MW:["265","00","(?:[1289]\\d|31|77)\\d{7}|1\\d{6}",[7,9],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["1[2-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["2"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[137-9]"],"0$1"]],"0",0,0,0,0,0,[0,["111\\d{6}|(?:31|77|[89][89])\\d{7}",[9]]]],MX:["52","0[09]","1(?:(?:[27]2|44|99)[1-9]|65[0-689])\\d{7}|(?:1(?:[01]\\d|2[13-9]|[35][1-9]|4[0-35-9]|6[0-46-9]|7[013-9]|8[1-79]|9[1-8])|[2-9]\\d)\\d{8}",[10,11],[["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["33|5[56]|81"],0,1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2-9]"],0,1],["(\\d)(\\d{2})(\\d{4})(\\d{4})","$2 $3 $4",["1(?:33|5[56]|81)"],0,1],["(\\d)(\\d{3})(\\d{3})(\\d{4})","$2 $3 $4",["1"],0,1]],"01",0,"0(?:[12]|4[45])|1",0,0,0,[0,["657[12]\\d{6}|(?:1(?:2(?:2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-7][1-9]|3[1-8]|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))|2(?:2\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\d|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\d))\\d{7}"]],"00"],MY:["60","00","1\\d{8,9}|(?:3\\d|[4-9])\\d{7}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1-$2 $3",["[4-79]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1-$2 $3",["1(?:[02469]|[378][1-9]|53)|8","1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1-$2 $3",["3"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3-$4",["1(?:[367]|80)"]],["(\\d{3})(\\d{3})(\\d{4})","$1-$2 $3",["15"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2 $3",["1"],"0$1"]],"0",0,0,0,0,0,[0,["1(?:1888[689]|4400|8(?:47|8[27])[0-4])\\d{4}|1(?:0(?:[23568]\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\d\\d|6(?:0[5-9]|[1-9]\\d)|7(?:[0-4]\\d|5[0-6]))|(?:[269]\\d|[37][1-9]|4[235-9])\\d|5(?:31|9\\d\\d)|8(?:1[23]|[236]\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\d{5}",[9,10]]]],MZ:["258","00","(?:2|8\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2|8[2-79]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["8[2-79]\\d{7}",[9]]]],NA:["264","00","[68]\\d{7,8}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["88"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["6"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["87"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"]],"0",0,0,0,0,0,[0,["(?:60|8[1245])\\d{7}",[9]]]],NC:["687","00","(?:050|[2-57-9]\\d\\d)\\d{3}",[6],[["(\\d{2})(\\d{2})(\\d{2})","$1.$2.$3",["[02-57-9]"]]],0,0,0,0,0,0,[0,["(?:5[0-4]|[79]\\d|8[0-79])\\d{4}"]]],NE:["227","00","[027-9]\\d{7}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["08"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[089]|2[013]|7[04]"]]],0,0,0,0,0,0,[0,["(?:23|7[04]|[89]\\d)\\d{6}"]]],NF:["672","00","[13]\\d{5}",[6],[["(\\d{2})(\\d{4})","$1 $2",["1[0-3]"]],["(\\d)(\\d{5})","$1 $2",["[13]"]]],0,0,"([0-258]\\d{4})$","3$1",0,0,[0,["(?:14|3[58])\\d{4}"]]],NG:["234","009","(?:[124-7]|9\\d{3})\\d{6}|[1-9]\\d{7}|[78]\\d{9,13}",[7,8,10,11,12,13,14],[["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["78"],"0$1"],["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[12]|9(?:0[3-9]|[1-9])"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["[3-7]|8[2-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[7-9]"],"0$1"],["(\\d{3})(\\d{4})(\\d{4,5})","$1 $2 $3",["[78]"],"0$1"],["(\\d{3})(\\d{5})(\\d{5,6})","$1 $2 $3",["[78]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:702[0-24-9]|819[01])\\d{6}|(?:70[13-689]|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-356]))\\d{7}",[10]]]],NI:["505","00","(?:1800|[25-8]\\d{3})\\d{4}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[125-8]"]]],0,0,0,0,0,0,[0,["(?:5(?:5[0-7]|[78]\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\d)\\d)\\d{5}"]]],NL:["31","00","(?:[124-7]\\d\\d|3(?:[02-9]\\d|1[0-8]))\\d{6}|8\\d{6,9}|9\\d{6,10}|1\\d{4,5}",[5,6,7,8,9,10,11],[["(\\d{3})(\\d{4,7})","$1 $2",["[89]0"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["66"],"0$1"],["(\\d)(\\d{8})","$1 $2",["6"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["1[16-8]|2[259]|3[124]|4[17-9]|5[124679]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-578]|91"],"0$1"],["(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3",["9"],"0$1"]],"0",0,0,0,0,0,[0,["(?:6[1-58]|970\\d)\\d{7}",[9,11]]]],NO:["47","00","(?:0|[2-9]\\d{3})\\d{4}",[5,8],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[489]|59"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[235-7]"]]],0,0,0,0,0,"[02-689]|7[0-8]",[0,["(?:4[015-8]|59|9\\d)\\d{6}",[8]]]],NP:["977","00","(?:1\\d|9)\\d{9}|[1-9]\\d{7}",[8,10,11],[["(\\d)(\\d{7})","$1-$2",["1[2-6]"],"0$1"],["(\\d{2})(\\d{6})","$1-$2",["1[01]|[2-8]|9(?:[1-59]|[67][2-6])"],"0$1"],["(\\d{3})(\\d{7})","$1-$2",["9"]]],"0",0,0,0,0,0,[0,["9(?:6[0-3]|7[024-6]|8[0-24-68])\\d{7}",[10]]]],NR:["674","00","(?:444|(?:55|8\\d)\\d|666)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[4-68]"]]],0,0,0,0,0,0,[0,["(?:55[3-9]|666|8\\d\\d)\\d{4}"]]],NU:["683","00","(?:[47]|888\\d)\\d{3}",[4,7],[["(\\d{3})(\\d{4})","$1 $2",["8"]]],0,0,0,0,0,0,[0,["888[4-9]\\d{3}",[7]]]],NZ:["64","0(?:0|161)","[29]\\d{7,9}|50\\d{5}(?:\\d{2,3})?|6[0-35-9]\\d{6}|7\\d{7,8}|8\\d{4,9}|(?:11\\d|[34])\\d{7}",[5,6,7,8,9,10],[["(\\d{2})(\\d{3,8})","$1 $2",["8[1-579]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["50[036-8]|[89]0","50(?:[0367]|88)|[89]0"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["24|[346]|7[2-57-9]|9[2-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:10|74)|[59]|80"],"0$1"],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["1|2[028]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,5})","$1 $2 $3",["2(?:[169]|7[0-35-9])|7|86"],"0$1"]],"0",0,0,0,0,0,[0,["2[0-27-9]\\d{7,8}|21\\d{6}",[8,9,10]]],"00"],OM:["968","00","(?:1505|[279]\\d{3}|500)\\d{4}|800\\d{5,6}",[7,8,9],[["(\\d{3})(\\d{4,6})","$1 $2",["[58]"]],["(\\d{2})(\\d{6})","$1 $2",["2"]],["(\\d{4})(\\d{4})","$1 $2",["[179]"]]],0,0,0,0,0,0,[0,["1505\\d{4}|(?:7(?:[1289]\\d|7[0-5])|9(?:0[1-9]|[1-9]\\d))\\d{5}",[8]]]],PA:["507","00","(?:00800|8\\d{3})\\d{6}|[68]\\d{7}|[1-57-9]\\d{6}",[7,8,10,11],[["(\\d{3})(\\d{4})","$1-$2",["[1-57-9]"]],["(\\d{4})(\\d{4})","$1-$2",["[68]"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["(?:1[16]1|21[89]|6\\d{3}|8(?:1[01]|7[23]))\\d{4}",[7,8]]]],PE:["51","00|19(?:1[124]|77|90)00","(?:[14-8]|9\\d)\\d{7}",[8,9],[["(\\d{3})(\\d{5})","$1 $2",["80"],"(0$1)"],["(\\d)(\\d{7})","$1 $2",["1"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["[4-8]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["9"]]],"0",0,0,0,0,0,[0,["9\\d{8}",[9]]],"00"," Anexo "],PF:["689","00","4\\d{5}(?:\\d{2})?|8\\d{7,8}",[6,8,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["44"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4|8[7-9]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]]],0,0,0,0,0,0,[0,["8[7-9]\\d{6}",[8]]]],PG:["675","00|140[1-3]","(?:180|[78]\\d{3})\\d{4}|(?:[2-589]\\d|64)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["18|[2-69]|85"]],["(\\d{4})(\\d{4})","$1 $2",["[78]"]]],0,0,0,0,0,0,[0,["(?:7\\d|8[128])\\d{6}",[8]]],"00"],PH:["63","00","(?:[2-7]|9\\d)\\d{8}|2\\d{5}|(?:1800|8)\\d{7,9}",[6,8,9,10,11,12,13],[["(\\d)(\\d{5})","$1 $2",["2"],"(0$1)"],["(\\d{4})(\\d{4,6})","$1 $2",["3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2","3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))"],"(0$1)"],["(\\d{5})(\\d{4})","$1 $2",["346|4(?:27|9[35])|883","3469|4(?:279|9(?:30|56))|8834"],"(0$1)"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[3-7]|8[2-8]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"],"0$1"],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]],["(\\d{4})(\\d{1,2})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1"]]],"0",0,0,0,0,0,[0,["(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\d|4[2-9]|8[135-9]|9[1-9]))\\d{7}",[10]]]],PK:["92","00","122\\d{6}|[24-8]\\d{10,11}|9(?:[013-9]\\d{8,10}|2(?:[01]\\d\\d|2(?:[06-8]\\d|1[01]))\\d{7})|(?:[2-8]\\d{3}|92(?:[0-7]\\d|8[1-9]))\\d{6}|[24-9]\\d{8}|[89]\\d{7}",[8,9,10,11,12],[["(\\d{3})(\\d{3})(\\d{2,7})","$1 $2 $3",["[89]0"],"0$1"],["(\\d{4})(\\d{5})","$1 $2",["1"]],["(\\d{3})(\\d{6,7})","$1 $2",["2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])","9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]"],"(0$1)"],["(\\d{2})(\\d{7,8})","$1 $2",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]"],"(0$1)"],["(\\d{5})(\\d{5})","$1 $2",["58"],"(0$1)"],["(\\d{3})(\\d{7})","$1 $2",["3"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[24-9]"],"(0$1)"]],"0",0,0,0,0,0,[0,["3(?:[0-24]\\d|3[0-7]|55|64)\\d{7}",[10]]]],PL:["48","00","(?:6|8\\d\\d)\\d{7}|[1-9]\\d{6}(?:\\d{2})?|[26]\\d{5}",[6,7,8,9,10],[["(\\d{5})","$1",["19"]],["(\\d{3})(\\d{3})","$1 $2",["11|20|64"]],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1","(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19"]],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["64"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)"]],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[2-8]|[2-7]|8[1-79]|9[145]"]],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["21(?:1(?:[145]\\d|3[1-5])|2[0-4]\\d)\\d{4}|(?:45|5[0137]|6[069]|7[2389]|88)\\d{7}",[9]]]],PM:["508","00","[45]\\d{5}|(?:708|80\\d)\\d{6}",[6,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[45]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[0,["(?:4[02-4]|5[056]|708[45][0-5])\\d{4}"]]],PR:["1","011","(?:[589]\\d\\d|787)\\d{7}",[10],0,"1",0,0,0,0,"787|939",[0,["(?:787|939)[2-9]\\d{6}"]]],PS:["970","00","[2489]2\\d{6}|(?:1\\d|5)\\d{8}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2489]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["5"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0",0,0,0,0,0,[0,["5[69]\\d{7}",[9]]]],PT:["351","00","1693\\d{5}|(?:[26-9]\\d|30)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["2[12]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["16|[236-9]"]]],0,0,0,0,0,0,[0,["6(?:[06]92(?:30|9\\d)|[35]92(?:3[03]|9\\d))\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\d\\d|480))\\d{5}"]]],PW:["680","01[12]","(?:[24-8]\\d\\d|345|900)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-9]"]]],0,0,0,0,0,0,[0,["(?:(?:46|83)[0-5]|6[2-4689]0)\\d{4}|(?:45|77|88)\\d{5}"]]],PY:["595","00","59\\d{4,6}|9\\d{5,10}|(?:[2-46-8]\\d|5[0-8])\\d{4,7}",[6,7,8,9,10,11],[["(\\d{3})(\\d{3,6})","$1 $2",["[2-9]0"],"0$1"],["(\\d{2})(\\d{5})","$1 $2",["[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]"],"(0$1)"],["(\\d{3})(\\d{4,5})","$1 $2",["2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["87"]],["(\\d{3})(\\d{6})","$1 $2",["9(?:[5-79]|8[1-6])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]"],"0$1"],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["9"]]],"0",0,0,0,0,0,[0,["9(?:51|6[129]|[78][1-6]|9[1-5])\\d{6}",[9]]]],QA:["974","00","800\\d{4}|(?:2|800)\\d{6}|(?:0080|[3-7])\\d{7}",[7,8,9,11],[["(\\d{3})(\\d{4})","$1 $2",["2[16]|8"]],["(\\d{4})(\\d{4})","$1 $2",["[3-7]"]]],0,0,0,0,0,0,[0,["[35-7]\\d{7}",[8]]]],RE:["262","00","(?:26|[689]\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2689]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:69(?:2\\d\\d|3(?:0[0-46]|1[013]|2[0-2]|3[0-39]|4\\d|5[0-5]|6[0-6]|7[0-27]|8[0-8]|9[0-479]))|9(?:399[0-2]|4790|76(?:2[27]|3[0-37]|9\\d)))\\d{4}"]]],RO:["40","00","(?:[2378]\\d|90)\\d{7}|[23]\\d{5}",[6,9],[["(\\d{3})(\\d{3})","$1 $2",["2[3-6]","2[3-6]\\d9"],"0$1"],["(\\d{2})(\\d{4})","$1 $2",["219|31"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[23]1"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[237-9]"],"0$1"]],"0",0,0,0,0,0,[0,["7020\\d{5}|7(?:0[013-9]|1[0-3]|[2-7]\\d|8[03-8]|9[0-29])\\d{6}",[9]]],0," int "],RS:["381","00","38[02-9]\\d{6,9}|6\\d{7,9}|90\\d{4,8}|38\\d{5,6}|(?:7\\d\\d|800)\\d{3,9}|(?:[12]\\d|3[0-79])\\d{5,10}",[6,7,8,9,10,11,12],[["(\\d{3})(\\d{3,9})","$1 $2",["(?:2[389]|39)0|[7-9]"],"0$1"],["(\\d{2})(\\d{5,10})","$1 $2",["[1-36]"],"0$1"]],"0",0,0,0,0,0,[0,["6(?:[0-689]|7\\d)\\d{6,7}",[8,9,10]]]],RU:["7","810","8\\d{13}|[347-9]\\d{9}",[10,14],[["(\\d{4})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["7(?:1[0-8]|2[1-9])","7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))","7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2"],"8 ($1)",1],["(\\d{5})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["7(?:1[0-68]|2[1-9])","7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))","7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]"],"8 ($1)",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"8 ($1)",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[349]|8(?:[02-7]|1[1-8])"],"8 ($1)",1],["(\\d{4})(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["8"],"8 ($1)"]],"8",0,0,0,0,"3[04-689]|[489]",[0,["9\\d{9}",[10]]],"8~10"],RW:["250","00","(?:06|[27]\\d\\d|[89]00)\\d{6}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[7-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["2"]]],"0",0,0,0,0,0,[0,["7[2389]\\d{7}",[9]]]],SA:["966","00","92\\d{7}|(?:[15]|8\\d)\\d{8}",[9,10],[["(\\d{4})(\\d{5})","$1 $2",["9"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["81"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]]],"0",0,0,0,0,0,[0,["579[01]\\d{5}|5(?:[013-689]\\d|7[0-35-8])\\d{6}",[9]]]],SB:["677","0[01]","(?:[1-6]|[7-9]\\d\\d)\\d{4}",[5,7],[["(\\d{2})(\\d{5})","$1 $2",["7|8[4-9]|9(?:[1-8]|9[0-8])"]]],0,0,0,0,0,0,[0,["48\\d{3}|(?:(?:7[1-9]|8[4-9])\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\d{4}"]]],SC:["248","010|0[0-2]","800\\d{4}|(?:[249]\\d|64)\\d{5}",[7],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[246]|9[57]"]]],0,0,0,0,0,0,[0,["2[125-8]\\d{5}"]],"00"],SD:["249","00","[19]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[19]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:1[0-2]|9[0-3569])\\d{7}"]]],SE:["46","00","(?:[26]\\d\\d|9)\\d{9}|[1-9]\\d{8}|[1-689]\\d{7}|[1-4689]\\d{6}|2\\d{5}",[6,7,8,9,10],[["(\\d{2})(\\d{2,3})(\\d{2})","$1-$2 $3",["20"],"0$1",0,"$1 $2 $3"],["(\\d{3})(\\d{4})","$1-$2",["9(?:00|39|44|9)"],"0$1",0,"$1 $2"],["(\\d{2})(\\d{3})(\\d{2})","$1-$2 $3",["[12][136]|3[356]|4[0246]|6[03]|90[1-9]"],"0$1",0,"$1 $2 $3"],["(\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["8"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2,3})(\\d{2})","$1-$2 $3",["1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])"],"0$1",0,"$1 $2 $3"],["(\\d{3})(\\d{2,3})(\\d{3})","$1-$2 $3",["9(?:00|39|44)"],"0$1",0,"$1 $2 $3"],["(\\d{2})(\\d{2,3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]"],"0$1",0,"$1 $2 $3 $4"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["10|7"],"0$1",0,"$1 $2 $3 $4"],["(\\d)(\\d{3})(\\d{3})(\\d{2})","$1-$2 $3 $4",["8"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1-$2 $3 $4",["[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{2})(\\d{3})","$1-$2 $3 $4",["9"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4 $5",["[26]"],"0$1",0,"$1 $2 $3 $4 $5"]],"0",0,0,0,0,0,[0,["7[02369]\\d{7}",[9]]]],SG:["65","0[0-3]\\d","(?:(?:1\\d|8)\\d\\d|7000)\\d{7}|[3689]\\d{7}",[8,10,11],[["(\\d{4})(\\d{4})","$1 $2",["[369]|8(?:0[1-6]|[1-9])"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]],["(\\d{4})(\\d{4})(\\d{3})","$1 $2 $3",["7"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]]],0,0,0,0,0,0,[0,["8(?:06[0-6]|95[0-2])\\d{4}|(?:8(?:0[1-5]|[1-8]\\d|9[0-4])|9[0-8]\\d)\\d{5}",[8]]]],SH:["290","00","(?:[256]\\d|8)\\d{3}",[4,5],0,0,0,0,0,0,"[256]",[0,["[56]\\d{4}",[5]]]],SI:["386","00|10(?:22|66|88|99)","[1-7]\\d{7}|8\\d{4,7}|90\\d{4,6}",[5,6,7,8],[["(\\d{2})(\\d{3,6})","$1 $2",["8[09]|9"],"0$1"],["(\\d{3})(\\d{5})","$1 $2",["59|8"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[37][01]|4[0139]|51|6"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-57]"],"(0$1)"]],"0",0,0,0,0,0,[0,["65(?:[178]\\d|5[56]|6[01])\\d{4}|(?:[37][01]|4[0139]|51|6[489])\\d{6}",[8]]],"00"],SJ:["47","00","0\\d{4}|(?:[489]\\d|[57]9)\\d{6}",[5,8],0,0,0,0,0,0,"79",[0,["(?:4[015-8]|59|9\\d)\\d{6}",[8]]]],SK:["421","00","[2-689]\\d{8}|[2-59]\\d{6}|[2-5]\\d{5}",[6,7,9],[["(\\d)(\\d{2})(\\d{3,4})","$1 $2 $3",["21"],"0$1"],["(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["[3-5][1-8]1","[3-5][1-8]1[67]"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{2})","$1/$2 $3 $4",["2"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[689]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1/$2 $3 $4",["[3-5]"],"0$1"]],"0",0,0,0,0,0,[0,["909[1-9]\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\d)\\d{6}",[9]]]],SL:["232","00","(?:[237-9]\\d|66)\\d{6}",[8],[["(\\d{2})(\\d{6})","$1 $2",["[236-9]"],"(0$1)"]],"0",0,0,0,0,0,[0,["(?:25|3[0-5]|66|7[2-9]|8[08]|9[09])\\d{6}"]]],SM:["378","00","(?:0549|[5-7]\\d)\\d{6}",[8,10],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-7]"]],["(\\d{4})(\\d{6})","$1 $2",["0"]]],0,0,"([89]\\d{5})$","0549$1",0,0,[0,["6[16]\\d{6}",[8]]]],SN:["221","00","(?:[378]\\d|93)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[379]"]]],0,0,0,0,0,0,[0,["7(?:(?:[06-8]\\d|21|90)\\d|5(?:01|[19]0|25|[38]3|[4-7]\\d))\\d{5}"]]],SO:["252","00","[346-9]\\d{8}|[12679]\\d{7}|[1-5]\\d{6}|[1348]\\d{5}",[6,7,8,9],[["(\\d{2})(\\d{4})","$1 $2",["8[125]"]],["(\\d{6})","$1",["[134]"]],["(\\d)(\\d{6})","$1 $2",["[15]|2[0-79]|3[0-46-8]|4[0-7]"]],["(\\d)(\\d{7})","$1 $2",["(?:2|90)4|[67]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[3478]|64|90"]],["(\\d{2})(\\d{5,7})","$1 $2",["1|28|6(?:0[5-7]|[1-35-9])|9[2-9]"]]],"0",0,0,0,0,0,[0,["(?:(?:15|(?:3[59]|4[89]|79|8[08])\\d|6(?:0[5-7]|[1-9]\\d)|9(?:0\\d|[2-9]))\\d|2(?:4\\d|8))\\d{5}|(?:[67]\\d\\d|904)\\d{5}",[7,8,9]]]],SR:["597","00","(?:[2-5]|68|[78]\\d)\\d{5}",[6,7],[["(\\d{2})(\\d{2})(\\d{2})","$1-$2-$3",["56"]],["(\\d{3})(\\d{3})","$1-$2",["[2-5]"]],["(\\d{3})(\\d{4})","$1-$2",["[6-8]"]]],0,0,0,0,0,0,[0,["(?:7[124-7]|8[124-9])\\d{5}",[7]]]],SS:["211","00","[19]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[19]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:12|9[1257-9])\\d{7}"]]],ST:["239","00","(?:22|9\\d)\\d{5}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[29]"]]],0,0,0,0,0,0,[0,["900[5-9]\\d{3}|9(?:0[1-9]|[89]\\d)\\d{4}"]]],SV:["503","00","[267]\\d{7}|[89]00\\d{4}(?:\\d{4})?",[7,8,11],[["(\\d{3})(\\d{4})","$1 $2",["[89]"]],["(\\d{4})(\\d{4})","$1 $2",["[267]"]],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["[89]"]]],0,0,0,0,0,0,[0,["66(?:[02-9]\\d\\d|1(?:[02-9]\\d|16))\\d{3}|(?:6[0-57-9]|7\\d)\\d{6}",[8]]]],SX:["1","011","7215\\d{6}|(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"(5\\d{6})$|1","721$1",0,"721",[0,["7215(?:1[02]|2\\d|5[034679]|8[014-8])\\d{4}"]]],SY:["963","00","[1-39]\\d{8}|[1-5]\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-5]"],"0$1",1],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"0$1",1]],"0",0,0,0,0,0,[0,["9[1-689]\\d{7}",[9]]]],SZ:["268","00","0800\\d{4}|(?:[237]\\d|900)\\d{6}",[8,9],[["(\\d{4})(\\d{4})","$1 $2",["[0237]"]],["(\\d{5})(\\d{4})","$1 $2",["9"]]],0,0,0,0,0,0,[0,["7[6-9]\\d{6}",[8]]]],TA:["290","00","8\\d{3}",[4],0,0,0,0,0,0,"8"],TC:["1","011","(?:[58]\\d\\d|649|900)\\d{7}",[10],0,"1",0,"([2-479]\\d{6})$|1","649$1",0,"649",[0,["649(?:2(?:3[129]|4[1-79])|3\\d\\d|4[34][1-3])\\d{4}"]]],TD:["235","00|16","(?:22|[69]\\d|77)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2679]"]]],0,0,0,0,0,0,[0,["(?:6[0235689]|77|9\\d)\\d{6}"]],"00"],TG:["228","00","[279]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[279]"]]],0,0,0,0,0,0,[0,["(?:7[019]|9[0-36-9])\\d{6}"]]],TH:["66","00[1-9]","(?:001800|[2-57]|[689]\\d)\\d{7}|1\\d{7,9}",[8,9,10,13],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[13-9]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0",0,0,0,0,0,[0,["671[0-8]\\d{5}|(?:14|6[1-6]|[89]\\d)\\d{7}",[9]]]],TJ:["992","810","(?:00|[1-57-9]\\d)\\d{7}",[9],[["(\\d{6})(\\d)(\\d{2})","$1 $2 $3",["331","3317"]],["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["[34]7|91[78]"]],["(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["3[1-5]"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[0-57-9]"]]],0,0,0,0,0,0,[0,["41[18]\\d{6}|(?:[034]0|1[017]|2[02]|5[05]|7[0178]|8[078]|9\\d)\\d{7}"]],"8~10"],TK:["690","00","[2-47]\\d{3,6}",[4,5,6,7],0,0,0,0,0,0,0,[0,["7[2-4]\\d{2,5}"]]],TL:["670","00","7\\d{7}|(?:[2-47]\\d|[89]0)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["[2-489]|70"]],["(\\d{4})(\\d{4})","$1 $2",["7"]]],0,0,0,0,0,0,[0,["7[2-8]\\d{6}",[8]]]],TM:["993","810","[1-6]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["12"],"(8 $1)"],["(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2-$3-$4",["[1-5]"],"(8 $1)"],["(\\d{2})(\\d{6})","$1 $2",["6"],"8 $1"]],"8",0,0,0,0,0,[0,["6\\d{7}"]],"8~10"],TN:["216","00","[2-57-9]\\d{7}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-57-9]"]]],0,0,0,0,0,0,[0,["3(?:001|[12]40)\\d{4}|(?:(?:[259]\\d|4[0-7])\\d|3(?:1[1-35]|6[0-4]|91))\\d{5}"]]],TO:["676","00","(?:0800|(?:[5-8]\\d\\d|999)\\d)\\d{3}|[2-8]\\d{4}",[5,7],[["(\\d{2})(\\d{3})","$1-$2",["[2-4]|50|6[09]|7[0-24-69]|8[05]"]],["(\\d{4})(\\d{3})","$1 $2",["0"]],["(\\d{3})(\\d{4})","$1 $2",["[5-9]"]]],0,0,0,0,0,0,[0,["(?:55[4-6]|6(?:[09]\\d|3[02]|8[15-9])|(?:7\\d|8[46-9])\\d|999)\\d{4}",[7]]]],TR:["90","00","4\\d{6}|8\\d{11,12}|(?:[2-58]\\d\\d|900)\\d{7}",[7,10,12,13],[["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["512|8[01589]|90"],"0$1",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["5(?:[0-59]|61)","5(?:[0-59]|616)","5(?:[0-59]|6161)"],"0$1",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24][1-8]|3[1-9]"],"(0$1)",1],["(\\d{3})(\\d{3})(\\d{6,7})","$1 $2 $3",["80"],"0$1",1]],"0",0,0,0,0,0,[0,["56161\\d{5}|5(?:0[15-7]|1[06]|24|[34]\\d|5[1-59]|9[46])\\d{7}",[10]]]],TT:["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-46-8]\\d{6})$|1","868$1",0,"868",[0,["868(?:(?:2[5-9]|3\\d)\\d|4(?:3[0-6]|[6-9]\\d)|6(?:20|78|8\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\d))\\d{4}"]]],TV:["688","00","(?:2|7\\d\\d|90)\\d{4}",[5,6,7],[["(\\d{2})(\\d{3})","$1 $2",["2"]],["(\\d{2})(\\d{4})","$1 $2",["90"]],["(\\d{2})(\\d{5})","$1 $2",["7"]]],0,0,0,0,0,0,[0,["(?:7[01]\\d|90)\\d{4}",[6,7]]]],TW:["886","0(?:0[25-79]|19)","[2-689]\\d{8}|7\\d{9,10}|[2-8]\\d{7}|2\\d{6}",[7,8,9,10,11],[["(\\d{2})(\\d)(\\d{4})","$1 $2 $3",["202"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[258]0"],"0$1"],["(\\d)(\\d{3,4})(\\d{4})","$1 $2 $3",["[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]","[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[49]"],"0$1"],["(\\d{2})(\\d{4})(\\d{4,5})","$1 $2 $3",["7"],"0$1"]],"0",0,0,0,0,0,[0,["(?:40001[0-2]|9[0-8]\\d{4})\\d{3}",[9]]],0,"#"],TZ:["255","00[056]","(?:[25-8]\\d|41|90)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[24]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["5"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[67]"],"0$1"]],"0",0,0,0,0,0,[0,["77[2-9]\\d{6}|(?:6[125-9]|7[13-689])\\d{7}"]]],UA:["380","00","[89]\\d{9}|[3-9]\\d{8}",[9,10],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]","6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]"],"0$1"],["(\\d{4})(\\d{5})","$1 $2",["3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])","3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[3-7]|89|9[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[89]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:39|50|6[36-8]|7[1-3]|9[1-9])\\d{7}",[9]]],"0~0"],UG:["256","00[057]","800\\d{6}|(?:[29]0|[347]\\d)\\d{7}",[9],[["(\\d{4})(\\d{5})","$1 $2",["202","2024"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["[27-9]|4(?:6[45]|[7-9])"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["[34]"],"0$1"]],"0",0,0,0,0,0,[0,["726[01]\\d{5}|7(?:[01578]\\d|20|36|[46][0-4]|9[89])\\d{6}"]]],US:["1","011","[2-9]\\d{9}|3\\d{6}",[10],[["(\\d{3})(\\d{4})","$1-$2",["310"],0,1],["(\\d{3})(\\d{3})(\\d{4})","($1) $2-$3",["[2-9]"],0,1,"$1-$2-$3"]],"1",0,0,0,0,0,[0,["(?:47220[01]|5(?:05(?:[2-57-9]\\d\\d|6(?:[0-35-9]\\d|4[46]))|57200))\\d{4}|(?:2(?:0[1-35-9]|1[02-9]|2[03-589]|3[149]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[01356]|3[0-24679]|4[167]|5[0-2]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-47-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|[34][016]|5[01679]|6[0-279]|78|8[0-29])|7(?:0[1-46-8]|1[2-9]|2[04-7]|3[1247]|4[037]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[068]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-389]|8[04-69]))[2-9]\\d{6}"]]],UY:["598","0(?:0|1[3-9]\\d)","(?:0004|4)\\d{9}|[1249]\\d{7}|(?:[49]\\d|80)\\d{5}",[7,8,10,13],[["(\\d{3})(\\d{4})","$1 $2",["405|8|90"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"0$1"],["(\\d{4})(\\d{4})","$1 $2",["[124]"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["4"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4",["0"]]],"0",0,0,0,0,0,[0,["9[1-9]\\d{6}",[8]]],"00"," int. "],UZ:["998","810","(?:33|[5-79]\\d|88)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[35-9]"],"8 $1"]],"8",0,0,0,0,0,[0,["(?:(?:33|50|88|9[0-57-9])\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\d|61[23]|7(?:[01][017]|4\\d|55|9[5-9]))|2(?:(?:11|7\\d)\\d|2(?:[12]1|9[01379])|5(?:[126]\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\d)\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\d|4(?:56|83)|7(?:[07]\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\d|[39][07])|9(?:0\\d|7[079]))|9(?:2(?:1[1267]|3[01]|5\\d|7[0-4])|(?:5[67]|7\\d)\\d|6(?:2[0-26]|8\\d)))|7(?:[07]\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\d|7(?:0\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\d|5(?:0[0-4]|5[579]|9\\d)|7(?:[0-3579]\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\d|9[5-9])|7(?:0\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\d))|5(?:112|2(?:0\\d|2[29]|[49]4)|3[1568]\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\d|8[78]|9[079]))|6(?:2(?:2[1245]|4[2-4])|39\\d|41[179]|5(?:[349]\\d|5[0-2])|7(?:0[017]|[13]\\d|22|44|55|67|88))|9(?:22[128]|3(?:2[0-4]|7\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\d|60|7[2579]|87|9[07]))))\\d{4}"]],"8~10"],VA:["39","00","0\\d{5,10}|3[0-8]\\d{7,10}|55\\d{8}|8\\d{5}(?:\\d{2,4})?|(?:1\\d|39)\\d{7,8}",[6,7,8,9,10,11],0,0,0,0,0,0,"06698",[0,["3[1-9]\\d{8}|3[2-9]\\d{7}",[9,10]]]],VC:["1","011","(?:[58]\\d\\d|784|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","784$1",0,"784",[0,["784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\d{4}"]]],VE:["58","00","[68]00\\d{7}|(?:[24]\\d|[59]0)\\d{8}",[10],[["(\\d{3})(\\d{7})","$1-$2",["[24-689]"],"0$1"]],"0",0,0,0,0,0,[0,["4(?:1[24-8]|2[46])\\d{7}"]]],VG:["1","011","(?:284|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-578]\\d{6})$|1","284$1",0,"284",[0,["284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\d{4}"]]],VI:["1","011","[58]\\d{9}|(?:34|90)0\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","340$1",0,"340",[0,["340(?:2(?:0[0-368]|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\d)|884|998)\\d{4}"]]],VN:["84","00","[12]\\d{9}|[135-9]\\d{8}|[16]\\d{7}|[16-8]\\d{6}",[7,8,9,10],[["(\\d{2})(\\d{5})","$1 $2",["80"],"0$1",1],["(\\d{4})(\\d{4,6})","$1 $2",["1"],0,1],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[69]"],"0$1",1],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[3578]"],"0$1",1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["2[48]"],"0$1",1],["(\\d{3})(\\d{4})(\\d{3})","$1 $2 $3",["2"],"0$1",1]],"0",0,0,0,0,0,[0,["(?:5(?:2[238]|59)|89[6-9]|99[013-9])\\d{6}|(?:3\\d|5[689]|7[06-9]|8[1-8]|9[0-8])\\d{7}",[9]]]],VU:["678","00","[57-9]\\d{6}|(?:[238]\\d|48)\\d{3}",[5,7],[["(\\d{3})(\\d{4})","$1 $2",["[57-9]"]]],0,0,0,0,0,0,[0,["(?:[58]\\d|7[013-7])\\d{5}",[7]]]],WF:["681","00","(?:40|72)\\d{4}|8\\d{5}(?:\\d{3})?",[6,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[478]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]]],0,0,0,0,0,0,[0,["(?:72|8[23])\\d{4}",[6]]]],WS:["685","0","(?:[2-6]|8\\d{5})\\d{4}|[78]\\d{6}|[68]\\d{5}",[5,6,7,10],[["(\\d{5})","$1",["[2-5]|6[1-9]"]],["(\\d{3})(\\d{3,7})","$1 $2",["[68]"]],["(\\d{2})(\\d{5})","$1 $2",["7"]]],0,0,0,0,0,0,[0,["(?:7[1-35-7]|8(?:[3-7]|9\\d{3}))\\d{5}",[7,10]]]],XK:["383","00","[23]\\d{7,8}|(?:4\\d\\d|[89]00)\\d{5}",[8,9],[["(\\d{3})(\\d{5})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-4]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[23]"],"0$1"]],"0",0,0,0,0,0,[0,["4[3-9]\\d{6}",[8]]]],YE:["967","00","(?:1|7\\d)\\d{7}|[1-7]\\d{6}",[7,8,9],[["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-6]|7(?:[24-6]|8[0-7])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7"],"0$1"]],"0",0,0,0,0,0,[0,["7[01378]\\d{7}",[9]]]],YT:["262","00","(?:(?:(?:26|63)9|80\\d)\\d\\d|93980)\\d{4}",[9],0,"0",0,0,0,0,"269|63|9398",[0,["(?:639(?:0[0-79]|1[019]|[267]\\d|3[09]|40|5[05-9]|9[04-79])|93980)\\d{4}"]]],ZA:["27","00","[1-79]\\d{8}|8\\d{4,9}",[5,6,7,8,9,10],[["(\\d{2})(\\d{3,4})","$1 $2",["8[1-4]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["8[1-4]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["860"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"]],"0",0,0,0,0,0,[0,["(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\d{3}|8[1-4]\\d{3,7}|(?:2[27]|47|54)4950\\d{3}|(?:1(?:049[2-4]|9[12]\\d\\d)|(?:6\\d|7[0-46-9])\\d{3}|8(?:5\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\d{3}|(?:12|[2-5]1)492\\d{4}",[5,6,7,8,9]]]],ZM:["260","00","800\\d{6}|(?:21|63|[79]\\d)\\d{7}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[28]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["[79]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:7[5-79]|9[5-8])\\d{7}"]]],ZW:["263","00","2(?:[0-57-9]\\d{6,8}|6[0-24-9]\\d{6,7})|[38]\\d{9}|[35-8]\\d{8}|[3-6]\\d{7}|[1-689]\\d{6}|[1-3569]\\d{5}|[1356]\\d{4}",[5,6,7,8,9,10],[["(\\d{3})(\\d{3,5})","$1 $2",["2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]"],"0$1"],["(\\d)(\\d{3})(\\d{2,4})","$1 $2 $3",["[49]"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["80"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2","2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)","2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)"],"0$1"],["(\\d{4})(\\d{6})","$1 $2",["8"],"0$1"],["(\\d{2})(\\d{3,5})","$1 $2",["1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["29[013-9]|39|54"],"0$1"],["(\\d{4})(\\d{3,5})","$1 $2",["(?:25|54)8","258|5483"],"0$1"]],"0",0,0,0,0,0,[0,["7(?:[178]\\d|3[1-9])\\d{6}",[9]]]]},nonGeographic:{800:["800",0,"(?:00|[1-9]\\d)\\d{6}",[8],[["(\\d{4})(\\d{4})","$1 $2",["\\d"]]],0,0,0,0,0,0,[0,0,["(?:00|[1-9]\\d)\\d{6}"]]],808:["808",0,"[1-9]\\d{7}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[1-9]"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,["[1-9]\\d{7}"]]],870:["870",0,"7\\d{11}|[35-7]\\d{8}",[9,12],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[35-7]"]]],0,0,0,0,0,0,[0,["(?:[356]|774[45])\\d{8}|7[6-8]\\d{7}"]]],878:["878",0,"10\\d{10}",[12],[["(\\d{2})(\\d{5})(\\d{5})","$1 $2 $3",["1"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,["10\\d{10}"]]],881:["881",0,"[0-36-9]\\d{8}",[9],[["(\\d)(\\d{3})(\\d{5})","$1 $2 $3",["[0-36-9]"]]],0,0,0,0,0,0,[0,["[0-36-9]\\d{8}"]]],882:["882",0,"[13]\\d{6}(?:\\d{2,5})?|[19]\\d{7}|(?:[25]\\d\\d|4)\\d{7}(?:\\d{2})?",[7,8,9,10,11,12],[["(\\d{2})(\\d{5})","$1 $2",["16|342"]],["(\\d{2})(\\d{6})","$1 $2",["49"]],["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["1[36]|9"]],["(\\d{2})(\\d{4})(\\d{3})","$1 $2 $3",["3[23]"]],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["16"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["10|23|3(?:[15]|4[57])|4|51"]],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["34"]],["(\\d{2})(\\d{4,5})(\\d{5})","$1 $2 $3",["[1-35]"]]],0,0,0,0,0,0,[0,["342\\d{4}|(?:337|49)\\d{6}|(?:3(?:2|47|7\\d{3})|50\\d{3})\\d{7}",[7,8,9,10,12]],0,0,0,0,0,0,["1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\d{4}|6\\d{5,10})|(?:345\\d|9[89])\\d{6}|(?:10|2(?:3|85\\d)|3(?:[15]|[69]\\d\\d)|4[15-8]|51)\\d{8}"]]],883:["883",0,"(?:[1-4]\\d|51)\\d{6,10}",[8,9,10,11,12],[["(\\d{3})(\\d{3})(\\d{2,8})","$1 $2 $3",["[14]|2[24-689]|3[02-689]|51[24-9]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["510"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["21"]],["(\\d{4})(\\d{4})(\\d{4})","$1 $2 $3",["51[13]"]],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[235]"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,["(?:2(?:00\\d\\d|10)|(?:370[1-9]|51\\d0)\\d)\\d{7}|51(?:00\\d{5}|[24-9]0\\d{4,7})|(?:1[013-79]|2[24-689]|3[02-689]|4[0-4])0\\d{5,9}"]]],888:["888",0,"\\d{11}",[11],[["(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3"]],0,0,0,0,0,0,[0,0,0,0,0,0,["\\d{11}"]]],979:["979",0,"[1359]\\d{8}",[9],[["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[1359]"]]],0,0,0,0,0,0,[0,0,0,["[1359]\\d{8}"]]]}}},306:(t,d,e)=>{e.d(d,{R:()=>it});var n=e(6183),r=e(2581),a=e(7520);function i(t,d){for(var e=0;e=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function u(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e1;)1&d&&(e+=t),d>>=1,t+=t;return e+t}function f(t,d){return")"===t[d]&&d++,function(t){var d=[],e=0;for(;e=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function O(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e1&&void 0!==arguments[1]?arguments[1]:{}).allowOverflow;if(!t)throw new Error("String is required");var e=E(t.split(""),this.matchTree,!0);if(e&&e.match&&delete e.matchedChars,!e||!e.overflow||d)return e}}],e&&w(d.prototype,e),n&&w(d,n),Object.defineProperty(d,"prototype",{writable:!1}),t}();function E(t,d,e){if("string"==typeof d){var n=t.join("");return 0===d.indexOf(n)?t.length===d.length?{match:!0,matchedChars:t}:{partialMatch:!0}:0===n.indexOf(d)?e&&t.length>d.length?{overflow:!0}:{match:!0,matchedChars:t.slice(0,d.length)}:void 0}if(Array.isArray(d)){for(var r=t.slice(),a=0;a=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function M(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e=0)){var e=this.getTemplateForFormat(t,d);return e?(this.setNationalNumberTemplate(e,d),!0):void 0}}},{key:"getSeparatorAfterNationalPrefix",value:function(t){return this.isNANP||t&&t.nationalPrefixFormattingRule()&&D.test(t.nationalPrefixFormattingRule())?" ":""}},{key:"getInternationalPrefixBeforeCountryCallingCode",value:function(t,d){var e=t.IDDPrefix,n=t.missingPlus;return e?d&&!1===d.spacing?e:e+" ":n?"":"+"}},{key:"getTemplate",value:function(t){if(this.template){for(var d=-1,e=0,n=t.international?this.getInternationalPrefixBeforeCountryCallingCode(t,{spacing:!1}):"";e$.length)){var o=new RegExp("^"+i+"$"),u=e.replace(/\d/g,"9");o.test(u)&&($=u);var s,f=this.getFormatFormat(t,n);if(this.shouldTryNationalPrefixFormattingRule(t,{international:n,nationalPrefix:r})){var h=f.replace(m.i,t.nationalPrefixFormattingRule());if((0,g.ZP)(t.nationalPrefixFormattingRule())===(r||"")+(0,g.ZP)("$1")&&(f=h,s=!0,r))for(var y=r.length;y>0;)f=f.replace(/\d/,l),y--}var p=$.replace(new RegExp(i),f).replace(new RegExp("9","g"),l);return s||(a?p=c(l,a.length)+" "+p:r&&(p=c(l,r.length)+this.getSeparatorAfterNationalPrefix(t)+p)),n&&(p=(0,T.Z)(p)),p}}},{key:"formatNextNationalNumberDigits",value:function(t){var d=function(t,d,e){for(var n,r=o(e.split(""));!(n=r()).done;){var a=n.value;if(t.slice(d+1).search(s)<0)return;d=t.search(s),t=t.replace(s,a)}return[t,d]}(this.populatedNationalNumberTemplate,this.populatedNationalNumberTemplatePosition,t);if(d)return this.populatedNationalNumberTemplate=d[0],this.populatedNationalNumberTemplatePosition=d[1],f(this.populatedNationalNumberTemplate,this.populatedNationalNumberTemplatePosition+1);this.resetFormat()}},{key:"shouldTryNationalPrefixFormattingRule",value:function(t,d){var e=d.international,n=d.nationalPrefix;if(t.nationalPrefixFormattingRule()){var r=t.usesNationalPrefix();if(r&&n||!r&&!e)return!0}}}])&&k(d.prototype,e),n&&k(d,n),Object.defineProperty(d,"prototype",{writable:!1}),t}(),B=e(3661),_=e(9471),U=e(5227),K=e(3633);function W(t,d){return function(t){if(Array.isArray(t))return t}(t)||function(t,d){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==e)return;var n,r,a=[],i=!0,$=!1;try{for(e=e.call(t);!(i=(n=e.next()).done)&&(a.push(n.value),!d||a.length!==d);i=!0);}catch(t){$=!0,r=t}finally{try{i||null==e.return||e.return()}finally{if($)throw r}}return a}(t,d)||function(t,d){if(!t)return;if("string"==typeof t)return H(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return H(t,d)}(t,d)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e=3;if(d.appendDigits(t),n&&this.extractIddPrefix(d),this.isWaitingForCountryCallingCode(d)){if(!this.extractCountryCallingCode(d))return}else d.appendNationalSignificantNumberDigits(t);d.international||this.hasExtractedNationalSignificantNumber||this.extractNationalSignificantNumber(d.getNationalDigits(),(function(t){return d.update(t)}))}},{key:"isWaitingForCountryCallingCode",value:function(t){var d=t.international,e=t.callingCode;return d&&!e}},{key:"extractCountryCallingCode",value:function(t){var d=(0,B.Z)("+"+t.getDigitsWithoutInternationalPrefix(),this.defaultCountry,this.defaultCallingCode,this.metadata.metadata),e=d.countryCallingCode,n=d.number;if(e)return t.setCallingCode(e),t.update({nationalSignificantNumber:n}),!0}},{key:"reset",value:function(t){if(t){this.hasSelectedNumberingPlan=!0;var d=t._nationalPrefixForParsing();this.couldPossiblyExtractAnotherNationalSignificantNumber=d&&q.test(d)}else this.hasSelectedNumberingPlan=void 0,this.couldPossiblyExtractAnotherNationalSignificantNumber=void 0}},{key:"extractNationalSignificantNumber",value:function(t,d){if(this.hasSelectedNumberingPlan){var e=(0,U.Z)(t,this.metadata),n=e.nationalPrefix,r=e.nationalNumber,a=e.carrierCode;if(r!==t)return this.onExtractedNationalNumber(n,a,r,t,d),!0}}},{key:"extractAnotherNationalSignificantNumber",value:function(t,d,e){if(!this.hasExtractedNationalSignificantNumber)return this.extractNationalSignificantNumber(t,e);if(this.couldPossiblyExtractAnotherNationalSignificantNumber){var n=(0,U.Z)(t,this.metadata),r=n.nationalPrefix,a=n.nationalNumber,i=n.carrierCode;if(a!==d)return this.onExtractedNationalNumber(r,i,a,t,e),!0}}},{key:"onExtractedNationalNumber",value:function(t,d,e,n,r){var a,i,$=n.lastIndexOf(e);if($>=0&&$===n.length-e.length){i=!0;var o=n.slice(0,$);o!==t&&(a=o)}r({nationalPrefix:t,carrierCode:d,nationalSignificantNumber:e,nationalSignificantNumberMatchesInput:i,complexPrefixBeforeNationalSignificantNumber:a}),this.hasExtractedNationalSignificantNumber=!0,this.onNationalSignificantNumberChange()}},{key:"reExtractNationalSignificantNumber",value:function(t){return!!this.extractAnotherNationalSignificantNumber(t.getNationalDigits(),t.nationalSignificantNumber,(function(d){return t.update(d)}))||(this.extractIddPrefix(t)||this.fixMissingPlus(t)?(this.extractCallingCodeAndNationalSignificantNumber(t),!0):void 0)}},{key:"extractIddPrefix",value:function(t){var d=t.international,e=t.IDDPrefix,n=t.digits;if(t.nationalSignificantNumber,!d&&!e){var r=(0,K.Z)(n,this.defaultCountry,this.defaultCallingCode,this.metadata.metadata);return void 0!==r&&r!==n?(t.update({IDDPrefix:n.slice(0,n.length-r.length)}),this.startInternationalNumber(t,{country:void 0,callingCode:void 0}),!0):void 0}}},{key:"fixMissingPlus",value:function(t){if(!t.international){var d=(0,_.Z)(t.digits,this.defaultCountry,this.defaultCallingCode,this.metadata.metadata),e=d.countryCallingCode;if(d.number,e)return t.update({missingPlus:!0}),this.startInternationalNumber(t,{country:t.country,callingCode:e}),!0}}},{key:"startInternationalNumber",value:function(t,d){var e=d.country,n=d.callingCode;t.startInternationalNumber(e,n),t.nationalSignificantNumber&&(t.resetNationalSignificantNumber(),this.onNationalSignificantNumberChange(),this.hasExtractedNationalSignificantNumber=void 0)}},{key:"extractCallingCodeAndNationalSignificantNumber",value:function(t){this.extractCountryCallingCode(t)&&this.extractNationalSignificantNumber(t.getNationalDigits(),(function(d){return t.update(d)}))}}])&&V(d.prototype,e),n&&V(d,n),Object.defineProperty(d,"prototype",{writable:!1}),t}();var tt=e(465);function dt(t){return dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},dt(t)}function et(t,d){return function(t){if(Array.isArray(t))return t}(t)||function(t,d){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==e)return;var n,r,a=[],i=!0,$=!1;try{for(e=e.call(t);!(i=(n=e.next()).done)&&(a.push(n.value),!d||a.length!==d);i=!0);}catch(t){$=!0,r=t}finally{try{i||null==e.return||e.return()}finally{if($)throw r}}return a}(t,d)||function(t,d){if(!t)return;if("string"==typeof t)return nt(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return nt(t,d)}(t,d)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function nt(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e1}},{key:"determineTheCountry",value:function(){this.state.setCountry((0,tt.Z)(this.isInternational()?this.state.callingCode:this.defaultCallingCode,this.state.nationalSignificantNumber,this.metadata))}},{key:"getNumberValue",value:function(){var t=this.state,d=t.digits,e=t.callingCode,n=t.country,r=t.nationalSignificantNumber;if(d)return this.isInternational()?e?"+"+e+r:"+"+d:n||e?"+"+(n?this.metadata.countryCallingCode():e)+r:void 0}},{key:"getNumber",value:function(){var t=this.state,d=t.nationalSignificantNumber,e=t.carrierCode,n=t.callingCode,r=this._getCountry();if(d&&(r||n)){var i=new a.Z(r||n,d,this.metadata.metadata);return e&&(i.carrierCode=e),i}}},{key:"isPossible",value:function(){var t=this.getNumber();return!!t&&t.isPossible()}},{key:"isValid",value:function(){var t=this.getNumber();return!!t&&t.isValid()}},{key:"getNationalNumber",value:function(){return this.state.nationalSignificantNumber}},{key:"getChars",value:function(){return(this.state.international?"+":"")+this.state.digits}},{key:"getTemplate",value:function(){return this.formatter.getTemplate(this.state)||this.getNonFormattedTemplate()||""}}])&&rt(d.prototype,e),n&&rt(d,n),Object.defineProperty(d,"prototype",{writable:!1}),t}();function it(t){return at.call(this,t,n.Z)}it.prototype=Object.create(at.prototype,{}),it.prototype.constructor=it},2689:(t,d,e)=>{e.d(d,{L:()=>i});var n=e(2364),r=e(7520);function a(t,d,e){if(d[t])return new r.Z(t,d[t],e)}function i(){return(0,n.Z)(a,arguments)}},6198:(t,d,e)=>{e.d(d,{h:()=>$t});var n=e(2364),r=e(5619);function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function i(t,d){for(var e=0;e=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function O(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e=t.length)return"";var n=t.indexOf(";",e);return n>=0?t.substring(e,n):t.substring(e)}(t);if(!function(t){return null===t||0!==t.length&&(j.test(t)||Z.test(t))}(r))throw new h("NOT_A_NUMBER");if(null===r)e=n(t)||"";else{e="",r.charAt(0)===R&&(e+=r);var a,i=t.indexOf(B);a=i>=0?i+B.length:0;var $=t.indexOf(_);e+=t.substring(a,$)}var o=e.indexOf(U);if(o>0&&(e=e.substring(0,o)),""!==e)return e}var W=250,H=new RegExp("["+r.xy+r.xc+"]"),V=new RegExp("[^"+r.xc+"#]+$"),Y=!1;function J(t,d,e){if(d=d||{},e=new g.ZP(e),d.defaultCountry&&!e.hasCountry(d.defaultCountry)){if(d.v2)throw new h("INVALID_COUNTRY");throw new Error("Unknown country: ".concat(d.defaultCountry))}var n=function(t,d,e){var n=K(t,{extractFormattedPhoneNumber:function(t){return function(t,d,e){if(!t)return;if(t.length>W){if(e)throw new h("TOO_LONG");return}if(!1===d)return t;var n=t.search(H);if(n<0)return;return t.slice(n).replace(V,"")}(t,e,d)}});if(!n)return{};if(!function(t){return t.length>=r.ex&&N.test(t)}(n))return function(t){return b.test(t)}(n)?{error:"TOO_SHORT"}:{};var a=function(t){var d=t.search(P);if(d<0)return{};for(var e=t.slice(0,d),n=t.match(P),r=1;rr.sJ){if(d.v2)throw new h("TOO_LONG");return{}}if(d.v2){var m=new A.Z(s,l,e.metadata);return u&&(m.country=u),f&&(m.carrierCode=f),i&&(m.ext=i),m.__countryCallingCodeSource=c,m}var y=!!(d.extended?e.hasSelectedNumberingPlan():u)&&(0,T.Z)(l,e.nationalNumberPattern());return d.extended?{country:u,countryCallingCode:s,carrierCode:f,valid:y,possible:!!y||!(!0!==d.extended||!e.possibleLengths()||!(0,E.D)(l,e)),phone:l,ext:i}:y?function(t,d,e){var n={country:t,phone:d};e&&(n.ext=e);return n}(u,l,i):{}}function X(t,d){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);d&&(n=n.filter((function(d){return Object.getOwnPropertyDescriptor(t,d).enumerable}))),e.push.apply(e,n)}return e}function Q(t){for(var d=1;dt.length)&&(d=t.length);for(var e=0,n=new Array(d);e{e.d(d,{Z:()=>r});var n=e(6183);function r(t,d){var e=Array.prototype.slice.call(d);return e.push(n.Z),t.apply(this,e)}}}]);
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[203],{7520:(t,d,e)=>{e.d(d,{Z:()=>P});var n=e(2581),r=e(3499),a=e(1316),i=e(1089);function o(t,d,e){var r=new n.ZP(e).getCountryCodesForCallingCode(t);return r?r.filter((function(t){return function(t,d,e){var r=new n.ZP(e);if(r.selectNumberingPlan(d),r.numberingPlan.possibleLengths().indexOf(t.length)>=0)return!0;return!1}(d,t,e)})):[]}var $=e(5738),u=/^[\d]+(?:[~\u2053\u223C\uFF5E][\d]+)?$/;function l(t,d){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,d){if(!t)return;if("string"==typeof t)return s(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return s(t,d)}(t))||d&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e0){var i=r.leadingDigitsPatterns()[r.leadingDigitsPatterns().length-1];if(0!==d.search(i))continue}if((0,a.Z)(d,r.pattern()))return r}}(n.formats(),t);return i?(0,$.Z)(t,i,{useInternationalFormat:"INTERNATIONAL"===e,withNationalPrefix:!i.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!r||!1!==r.nationalPrefix,carrierCode:d,metadata:n}):t}function p(t,d,e,n){return d?n(t,d,e):t}function v(t,d){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);d&&(n=n.filter((function(d){return Object.getOwnPropertyDescriptor(t,d).enumerable}))),e.push.apply(e,n)}return e}function b(t){for(var d=1;d{e.d(d,{ex:()=>n,sJ:()=>r,uv:()=>o,xc:()=>i,xg:()=>a,xy:()=>$});var n=2,r=17,a=3,i="0-90-9٠-٩۰-۹",o="".concat("-‐-―−ー-").concat("//").concat("..").concat(" ").concat("()()[]\\[\\]").concat("~⁓∼~"),$="++"},2354:(t,d,e)=>{e.d(d,{Z:()=>r});var n=e(5619);function r(t){return t.replace(new RegExp("[".concat(n.uv,"]+"),"g")," ").trim()}},7856:(t,d,e)=>{function n(t,d){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,d){if(!t)return;if("string"==typeof t)return r(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return r(t,d)}(t))||d&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e$?"TOO_SHORT":a[a.length-1]<$?"TOO_LONG":a.indexOf($,1)>=0?"IS_POSSIBLE":"INVALID_LENGTH"}e.d(d,{Z:()=>a})},3661:(t,d,e)=>{e.d(d,{Z:()=>o});var n=e(3633),r=e(9471),a=e(2581),i=e(5619);function o(t,d,e,o){if(!t)return{};var $;if("+"!==t[0]){var u=(0,n.Z)(t,d,e,o);if(!u||u===t){if(d||e){var l=(0,r.Z)(t,d,e,o),s=l.countryCallingCode,c=l.number;if(s)return{countryCallingCodeSource:"FROM_NUMBER_WITHOUT_PLUS_SIGN",countryCallingCode:s,number:c}}return{number:t}}$=!0,t="+"+u}if("0"===t[1])return{};o=new a.ZP(o);for(var f=2;f-1<=i.xg&&f<=t.length;){var h=t.slice(1,f);if(o.hasCallingCode(h))return o.selectNumberingPlan(h),{countryCallingCodeSource:$?"FROM_NUMBER_WITH_IDD":"FROM_NUMBER_WITH_PLUS_SIGN",countryCallingCode:h,number:t.slice(f)};f++}return{}}},9471:(t,d,e)=>{e.d(d,{Z:()=>o});var n=e(2581),r=e(1316),a=e(7428),i=e(7856);function o(t,d,e,o){var $=d?(0,n.Gg)(d,o):e;if(0===t.indexOf($)){(o=new n.ZP(o)).selectNumberingPlan(d,e);var u=t.slice($.length),l=(0,a.Z)(u,o).nationalNumber,s=(0,a.Z)(t,o).nationalNumber;if(!(0,r.Z)(s,o.nationalNumberPattern())&&(0,r.Z)(l,o.nationalNumberPattern())||"TOO_LONG"===(0,i.Z)(s,o))return{countryCallingCode:$,number:u}}return{number:t}}},7428:(t,d,e)=>{e.d(d,{Z:()=>i});var n=e(5227),r=e(1316),a=e(7856);function i(t,d){var e=(0,n.Z)(t,d),i=e.carrierCode,o=e.nationalNumber;if(o!==t){if(!function(t,d,e){if((0,r.Z)(t,e.nationalNumberPattern())&&!(0,r.Z)(d,e.nationalNumberPattern()))return!1;return!0}(t,o,d))return{nationalNumber:t};if(d.possibleLengths()&&!function(t,d){switch((0,a.Z)(t,d)){case"TOO_SHORT":case"INVALID_LENGTH":return!1;default:return!0}}(o,d))return{nationalNumber:t}}return{nationalNumber:o,carrierCode:i}}},5227:(t,d,e)=>{function n(t,d){if(t&&d.numberingPlan.nationalPrefixForParsing()){var e=new RegExp("^(?:"+d.numberingPlan.nationalPrefixForParsing()+")"),n=e.exec(t);if(n){var r,a,i,o=n.length-1,$=o>0&&n[o];if(d.nationalPrefixTransformRule()&&$)r=t.replace(e,d.nationalPrefixTransformRule()),o>1&&(a=n[1]);else{var u=n[0];r=t.slice(u.length),$&&(a=n[1])}if($){var l=t.indexOf(n[1]);t.slice(0,l)===d.numberingPlan.nationalPrefix()&&(i=d.numberingPlan.nationalPrefix())}else i=n[0];return{nationalNumber:r,nationalPrefix:i,carrierCode:a}}}return{nationalNumber:t}}e.d(d,{Z:()=>n})},5738:(t,d,e)=>{e.d(d,{Z:()=>a,i:()=>r});var n=e(2354),r=/(\$\d)/;function a(t,d,e){var a=e.useInternationalFormat,i=e.withNationalPrefix,o=(e.carrierCode,e.metadata,t.replace(new RegExp(d.pattern()),a?d.internationalFormat():i&&d.nationalPrefixFormattingRule()?d.format().replace(r,d.nationalPrefixFormattingRule()):d.format()));return a?(0,n.Z)(o):o}},2691:(t,d,e)=>{e.d(d,{Z:()=>a});var n=e(9287),r=!1;function a(t,d){var e=d.nationalNumber,a=d.defaultCountry,i=d.metadata;if(r&&i.isNonGeographicCallingCode(t))return"001";var o=i.getCountryCodesForCallingCode(t);return o?1===o.length?o[0]:(0,n.Z)(e,{countries:o,defaultCountry:a,metadata:i.metadata}):void 0}},9287:(t,d,e)=>{e.d(d,{Z:()=>o});var n=e(2581),r=e(1089);function a(t,d){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,d){if(!t)return;if("string"==typeof t)return i(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return i(t,d)}(t))||d&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function i(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e0)return u[0]}},1089:(t,d,e)=>{e.d(d,{Z:()=>$});var n=e(2581),r=e(1316);function a(t,d){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,d){if(!t)return;if("string"==typeof t)return i(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return i(t,d)}(t))||d&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function i(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e{function n(t,d){return t=t||"",new RegExp("^(?:"+d+")$").test(t)}e.d(d,{Z:()=>n})},9233:(t,d,e)=>{function n(t,d){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,d){if(!t)return;if("string"==typeof t)return r(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return r(t,d)}(t))||d&&t&&"number"==typeof t.length){e&&(t=e);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);eo,xh:()=>i});var a={0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9","0":"0","1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","٠":"0","١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9"};function i(t){return a[t]}function o(t){for(var d,e="",r=n(t.split(""));!(d=r()).done;){var a=i(d.value);a&&(e+=a)}return e}},3633:(t,d,e)=>{e.d(d,{Z:()=>i});var n=e(2581),r=e(5619),a=new RegExp("(["+r.xc+"])");function i(t,d,e,r){if(d){var i=new n.ZP(r);i.selectNumberingPlan(d,e);var o=new RegExp(i.IDDPrefix());if(0===t.search(o)){var $=(t=t.slice(t.match(o)[0].length)).match(a);if(!($&&null!=$[1]&&$[1].length>0&&"0"===$[1]))return t}}}},3499:(t,d,e)=>{e.d(d,{D:()=>i,Z:()=>a});var n=e(2581),r=e(7856);function a(t,d,e){if(void 0===d&&(d={}),e=new n.ZP(e),d.v2){if(!t.countryCallingCode)throw new Error("Invalid phone number object passed");e.selectNumberingPlan(t.countryCallingCode)}else{if(!t.phone)return!1;if(t.country){if(!e.hasCountry(t.country))throw new Error("Unknown country: ".concat(t.country));e.country(t.country)}else{if(!t.countryCallingCode)throw new Error("Invalid phone number object passed");e.selectNumberingPlan(t.countryCallingCode)}}if(e.possibleLengths())return i(t.phone||t.nationalNumber,e);if(t.countryCallingCode&&e.isNonGeographicCallingCode(t.countryCallingCode))return!0;throw new Error('Missing "possibleLengths" in metadata. Perhaps the metadata has been generated before v1.0.18.')}function i(t,d){return"IS_POSSIBLE"===(0,r.Z)(t,d)}},2581:(t,d,e)=>{function n(t,d){t=t.split("-"),d=d.split("-");for(var e=t[0].split("."),n=d[0].split("."),r=0;r<3;r++){var a=Number(e[r]),i=Number(n[r]);if(a>i)return 1;if(i>a)return-1;if(!isNaN(a)&&isNaN(i))return 1;if(isNaN(a)&&!isNaN(i))return-1}return t[1]&&d[1]?t[1]>d[1]?1:t[1]l,Gg:()=>p});var $=" ext. ",u=/^\d+$/,l=function(){function t(d){a(this,t),function(t){if(!t)throw new Error("[libphonenumber-js] `metadata` argument not passed. Check your arguments.");if(!m(t)||!m(t.countries))throw new Error("[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got ".concat(m(t)?"an object of shape: { "+Object.keys(t).join(", ")+" }":"a "+y(t)+": "+t,"."))}(d),this.metadata=d,v.call(this,d)}return o(t,[{key:"getCountries",value:function(){return Object.keys(this.metadata.countries).filter((function(t){return"001"!==t}))}},{key:"getCountryMetadata",value:function(t){return this.metadata.countries[t]}},{key:"nonGeographic",value:function(){if(!(this.v1||this.v2||this.v3))return this.metadata.nonGeographic||this.metadata.nonGeographical}},{key:"hasCountry",value:function(t){return void 0!==this.getCountryMetadata(t)}},{key:"hasCallingCode",value:function(t){if(this.getCountryCodesForCallingCode(t))return!0;if(this.nonGeographic()){if(this.nonGeographic()[t])return!0}else{var d=this.countryCallingCodes()[t];if(d&&1===d.length&&"001"===d[0])return!0}}},{key:"isNonGeographicCallingCode",value:function(t){return this.nonGeographic()?!!this.nonGeographic()[t]:!this.getCountryCodesForCallingCode(t)}},{key:"country",value:function(t){return this.selectNumberingPlan(t)}},{key:"selectNumberingPlan",value:function(t,d){if(t&&u.test(t)&&(d=t,t=null),t&&"001"!==t){if(!this.hasCountry(t))throw new Error("Unknown country: ".concat(t));this.numberingPlan=new s(this.getCountryMetadata(t),this)}else if(d){if(!this.hasCallingCode(d))throw new Error("Unknown calling code: ".concat(d));this.numberingPlan=new s(this.getNumberingPlanMetadata(d),this)}else this.numberingPlan=void 0;return this}},{key:"getCountryCodesForCallingCode",value:function(t){var d=this.countryCallingCodes()[t];if(d){if(1===d.length&&3===d[0].length)return;return d}}},{key:"getCountryCodeForCallingCode",value:function(t){var d=this.getCountryCodesForCallingCode(t);if(d)return d[0]}},{key:"getNumberingPlanMetadata",value:function(t){var d=this.getCountryCodeForCallingCode(t);if(d)return this.getCountryMetadata(d);if(this.nonGeographic()){var e=this.nonGeographic()[t];if(e)return e}else{var n=this.countryCallingCodes()[t];if(n&&1===n.length&&"001"===n[0])return this.metadata.countries["001"]}}},{key:"countryCallingCode",value:function(){return this.numberingPlan.callingCode()}},{key:"IDDPrefix",value:function(){return this.numberingPlan.IDDPrefix()}},{key:"defaultIDDPrefix",value:function(){return this.numberingPlan.defaultIDDPrefix()}},{key:"nationalNumberPattern",value:function(){return this.numberingPlan.nationalNumberPattern()}},{key:"possibleLengths",value:function(){return this.numberingPlan.possibleLengths()}},{key:"formats",value:function(){return this.numberingPlan.formats()}},{key:"nationalPrefixForParsing",value:function(){return this.numberingPlan.nationalPrefixForParsing()}},{key:"nationalPrefixTransformRule",value:function(){return this.numberingPlan.nationalPrefixTransformRule()}},{key:"leadingDigits",value:function(){return this.numberingPlan.leadingDigits()}},{key:"hasTypes",value:function(){return this.numberingPlan.hasTypes()}},{key:"type",value:function(t){return this.numberingPlan.type(t)}},{key:"ext",value:function(){return this.numberingPlan.ext()}},{key:"countryCallingCodes",value:function(){return this.v1?this.metadata.country_phone_code_to_countries:this.metadata.country_calling_codes}},{key:"chooseCountryByCountryCallingCode",value:function(t){return this.selectNumberingPlan(t)}},{key:"hasSelectedNumberingPlan",value:function(){return void 0!==this.numberingPlan}}]),t}(),s=function(){function t(d,e){a(this,t),this.globalMetadataObject=e,this.metadata=d,v.call(this,e.metadata)}return o(t,[{key:"callingCode",value:function(){return this.metadata[0]}},{key:"getDefaultCountryMetadataForRegion",value:function(){return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode())}},{key:"IDDPrefix",value:function(){if(!this.v1&&!this.v2)return this.metadata[1]}},{key:"defaultIDDPrefix",value:function(){if(!this.v1&&!this.v2)return this.metadata[12]}},{key:"nationalNumberPattern",value:function(){return this.v1||this.v2?this.metadata[1]:this.metadata[2]}},{key:"possibleLengths",value:function(){if(!this.v1)return this.metadata[this.v2?2:3]}},{key:"_getFormats",value:function(t){return t[this.v1?2:this.v2?3:4]}},{key:"formats",value:function(){var t=this,d=this._getFormats(this.metadata)||this._getFormats(this.getDefaultCountryMetadataForRegion())||[];return d.map((function(d){return new c(d,t)}))}},{key:"nationalPrefix",value:function(){return this.metadata[this.v1?3:this.v2?4:5]}},{key:"_getNationalPrefixFormattingRule",value:function(t){return t[this.v1?4:this.v2?5:6]}},{key:"nationalPrefixFormattingRule",value:function(){return this._getNationalPrefixFormattingRule(this.metadata)||this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion())}},{key:"_nationalPrefixForParsing",value:function(){return this.metadata[this.v1?5:this.v2?6:7]}},{key:"nationalPrefixForParsing",value:function(){return this._nationalPrefixForParsing()||this.nationalPrefix()}},{key:"nationalPrefixTransformRule",value:function(){return this.metadata[this.v1?6:this.v2?7:8]}},{key:"_getNationalPrefixIsOptionalWhenFormatting",value:function(){return!!this.metadata[this.v1?7:this.v2?8:9]}},{key:"nationalPrefixIsOptionalWhenFormattingInNationalFormat",value:function(){return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata)||this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion())}},{key:"leadingDigits",value:function(){return this.metadata[this.v1?8:this.v2?9:10]}},{key:"types",value:function(){return this.metadata[this.v1?9:this.v2?10:11]}},{key:"hasTypes",value:function(){return(!this.types()||0!==this.types().length)&&!!this.types()}},{key:"type",value:function(t){if(this.hasTypes()&&g(this.types(),t))return new h(g(this.types(),t),this)}},{key:"ext",value:function(){return this.v1||this.v2?$:this.metadata[13]||$}}]),t}(),c=function(){function t(d,e){a(this,t),this._format=d,this.metadata=e}return o(t,[{key:"pattern",value:function(){return this._format[0]}},{key:"format",value:function(){return this._format[1]}},{key:"leadingDigitsPatterns",value:function(){return this._format[2]||[]}},{key:"nationalPrefixFormattingRule",value:function(){return this._format[3]||this.metadata.nationalPrefixFormattingRule()}},{key:"nationalPrefixIsOptionalWhenFormattingInNationalFormat",value:function(){return!!this._format[4]||this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat()}},{key:"nationalPrefixIsMandatoryWhenFormattingInNationalFormat",value:function(){return this.usesNationalPrefix()&&!this.nationalPrefixIsOptionalWhenFormattingInNationalFormat()}},{key:"usesNationalPrefix",value:function(){return!(!this.nationalPrefixFormattingRule()||f.test(this.nationalPrefixFormattingRule()))}},{key:"internationalFormat",value:function(){return this._format[5]||this.format()}}]),t}(),f=/^\(?\$1\)?$/,h=function(){function t(d,e){a(this,t),this.type=d,this.metadata=e}return o(t,[{key:"pattern",value:function(){return this.metadata.v1?this.type:this.type[0]}},{key:"possibleLengths",value:function(){if(!this.metadata.v1)return this.type[1]||this.metadata.possibleLengths()}}]),t}();function g(t,d){switch(d){case"FIXED_LINE":return t[0];case"MOBILE":return t[1];case"TOLL_FREE":return t[2];case"PREMIUM_RATE":return t[3];case"PERSONAL_NUMBER":return t[4];case"VOICEMAIL":return t[5];case"UAN":return t[6];case"PAGER":return t[7];case"VOIP":return t[8];case"SHARED_COST":return t[9]}}var m=function(t){return"object"===r(t)},y=function(t){return r(t)};function p(t,d){if((d=new l(d)).hasCountry(t))return d.country(t).countryCallingCode();throw new Error("Unknown country: ".concat(t))}function v(t){var d=t.version;"number"==typeof d?(this.v1=1===d,this.v2=2===d,this.v3=3===d,this.v4=4===d):d?-1===n(d,"1.2.0")?this.v2=!0:-1===n(d,"1.7.35")?this.v3=!0:this.v4=!0:this.v1=!0}},6359:(t,d,e)=>{e.d(d,{Z:()=>n});const n={AC:"40123",AD:"312345",AE:"501234567",AF:"701234567",AG:"2684641234",AI:"2642351234",AL:"672123456",AM:"77123456",AO:"923123456",AR:"91123456789",AS:"6847331234",AT:"664123456",AU:"412345678",AW:"5601234",AX:"412345678",AZ:"401234567",BA:"61123456",BB:"2462501234",BD:"1812345678",BE:"470123456",BF:"70123456",BG:"43012345",BH:"36001234",BI:"79561234",BJ:"90011234",BL:"690001234",BM:"4413701234",BN:"7123456",BO:"71234567",BQ:"3181234",BR:"11961234567",BS:"2423591234",BT:"17123456",BW:"71123456",BY:"294911911",BZ:"6221234",CA:"5062345678",CC:"412345678",CD:"991234567",CF:"70012345",CG:"061234567",CH:"781234567",CI:"0123456789",CK:"71234",CL:"221234567",CM:"671234567",CN:"13123456789",CO:"3211234567",CR:"83123456",CU:"51234567",CV:"9911234",CW:"95181234",CX:"412345678",CY:"96123456",CZ:"601123456",DE:"15123456789",DJ:"77831001",DK:"32123456",DM:"7672251234",DO:"8092345678",DZ:"551234567",EC:"991234567",EE:"51234567",EG:"1001234567",EH:"650123456",ER:"7123456",ES:"612345678",ET:"911234567",FI:"412345678",FJ:"7012345",FK:"51234",FM:"3501234",FO:"211234",FR:"612345678",GA:"06031234",GB:"7400123456",GD:"4734031234",GE:"555123456",GF:"694201234",GG:"7781123456",GH:"231234567",GI:"57123456",GL:"221234",GM:"3012345",GN:"601123456",GP:"690001234",GQ:"222123456",GR:"6912345678",GT:"51234567",GU:"6713001234",GW:"955012345",GY:"6091234",HK:"51234567",HN:"91234567",HR:"921234567",HT:"34101234",HU:"201234567",ID:"812345678",IE:"850123456",IL:"502345678",IM:"7924123456",IN:"8123456789",IO:"3801234",IQ:"7912345678",IR:"9123456789",IS:"6111234",IT:"3123456789",JE:"7797712345",JM:"8762101234",JO:"790123456",JP:"9012345678",KE:"712123456",KG:"700123456",KH:"91234567",KI:"72001234",KM:"3212345",KN:"8697652917",KP:"1921234567",KR:"1020000000",KW:"50012345",KY:"3453231234",KZ:"7710009998",LA:"2023123456",LB:"71123456",LC:"7582845678",LI:"660234567",LK:"712345678",LR:"770123456",LS:"50123456",LT:"61234567",LU:"628123456",LV:"21234567",LY:"912345678",MA:"650123456",MC:"612345678",MD:"62112345",ME:"67622901",MF:"690001234",MG:"321234567",MH:"2351234",MK:"72345678",ML:"65012345",MM:"92123456",MN:"88123456",MO:"66123456",MP:"6702345678",MQ:"696201234",MR:"22123456",MS:"6644923456",MT:"96961234",MU:"52512345",MV:"7712345",MW:"991234567",MX:"12221234567",MY:"123456789",MZ:"821234567",NA:"811234567",NC:"751234",NE:"93123456",NF:"381234",NG:"8021234567",NI:"81234567",NL:"612345678",NO:"40612345",NP:"9841234567",NR:"5551234",NU:"8884012",NZ:"211234567",OM:"92123456",PA:"61234567",PE:"912345678",PF:"87123456",PG:"70123456",PH:"9051234567",PK:"3012345678",PL:"512345678",PM:"551234",PR:"7872345678",PS:"599123456",PT:"912345678",PW:"6201234",PY:"961456789",QA:"33123456",RE:"692123456",RO:"712034567",RS:"601234567",RU:"9123456789",RW:"720123456",SA:"512345678",SB:"7421234",SC:"2510123",SD:"911231234",SE:"701234567",SG:"81234567",SH:"51234",SI:"31234567",SJ:"41234567",SK:"912123456",SL:"25123456",SM:"66661212",SN:"701234567",SO:"71123456",SR:"7412345",SS:"977123456",ST:"9812345",SV:"70123456",SX:"7215205678",SY:"944567890",SZ:"76123456",TA:"8999",TC:"6492311234",TD:"63012345",TG:"90112345",TH:"812345678",TJ:"917123456",TK:"7290",TL:"77212345",TM:"66123456",TN:"20123456",TO:"7715123",TR:"5012345678",TT:"8682911234",TV:"901234",TW:"912345678",TZ:"621234567",UA:"501234567",UG:"712345678",US:"2015550123",UY:"94231234",UZ:"912345678",VA:"3123456789",VC:"7844301234",VE:"4121234567",VG:"2843001234",VI:"3406421234",VN:"912345678",VU:"5912345",WF:"821234",WS:"7212345",XK:"43201234",YE:"712345678",YT:"639012345",ZA:"711234567",ZM:"955123456",ZW:"712345678"}},6183:(t,d,e)=>{e.d(d,{Z:()=>n});const n={version:4,country_calling_codes:{1:["US","AG","AI","AS","BB","BM","BS","CA","DM","DO","GD","GU","JM","KN","KY","LC","MP","MS","PR","SX","TC","TT","VC","VG","VI"],7:["RU","KZ"],20:["EG"],27:["ZA"],30:["GR"],31:["NL"],32:["BE"],33:["FR"],34:["ES"],36:["HU"],39:["IT","VA"],40:["RO"],41:["CH"],43:["AT"],44:["GB","GG","IM","JE"],45:["DK"],46:["SE"],47:["NO","SJ"],48:["PL"],49:["DE"],51:["PE"],52:["MX"],53:["CU"],54:["AR"],55:["BR"],56:["CL"],57:["CO"],58:["VE"],60:["MY"],61:["AU","CC","CX"],62:["ID"],63:["PH"],64:["NZ"],65:["SG"],66:["TH"],81:["JP"],82:["KR"],84:["VN"],86:["CN"],90:["TR"],91:["IN"],92:["PK"],93:["AF"],94:["LK"],95:["MM"],98:["IR"],211:["SS"],212:["MA","EH"],213:["DZ"],216:["TN"],218:["LY"],220:["GM"],221:["SN"],222:["MR"],223:["ML"],224:["GN"],225:["CI"],226:["BF"],227:["NE"],228:["TG"],229:["BJ"],230:["MU"],231:["LR"],232:["SL"],233:["GH"],234:["NG"],235:["TD"],236:["CF"],237:["CM"],238:["CV"],239:["ST"],240:["GQ"],241:["GA"],242:["CG"],243:["CD"],244:["AO"],245:["GW"],246:["IO"],247:["AC"],248:["SC"],249:["SD"],250:["RW"],251:["ET"],252:["SO"],253:["DJ"],254:["KE"],255:["TZ"],256:["UG"],257:["BI"],258:["MZ"],260:["ZM"],261:["MG"],262:["RE","YT"],263:["ZW"],264:["NA"],265:["MW"],266:["LS"],267:["BW"],268:["SZ"],269:["KM"],290:["SH","TA"],291:["ER"],297:["AW"],298:["FO"],299:["GL"],350:["GI"],351:["PT"],352:["LU"],353:["IE"],354:["IS"],355:["AL"],356:["MT"],357:["CY"],358:["FI","AX"],359:["BG"],370:["LT"],371:["LV"],372:["EE"],373:["MD"],374:["AM"],375:["BY"],376:["AD"],377:["MC"],378:["SM"],380:["UA"],381:["RS"],382:["ME"],383:["XK"],385:["HR"],386:["SI"],387:["BA"],389:["MK"],420:["CZ"],421:["SK"],423:["LI"],500:["FK"],501:["BZ"],502:["GT"],503:["SV"],504:["HN"],505:["NI"],506:["CR"],507:["PA"],508:["PM"],509:["HT"],590:["GP","BL","MF"],591:["BO"],592:["GY"],593:["EC"],594:["GF"],595:["PY"],596:["MQ"],597:["SR"],598:["UY"],599:["CW","BQ"],670:["TL"],672:["NF"],673:["BN"],674:["NR"],675:["PG"],676:["TO"],677:["SB"],678:["VU"],679:["FJ"],680:["PW"],681:["WF"],682:["CK"],683:["NU"],685:["WS"],686:["KI"],687:["NC"],688:["TV"],689:["PF"],690:["TK"],691:["FM"],692:["MH"],850:["KP"],852:["HK"],853:["MO"],855:["KH"],856:["LA"],880:["BD"],886:["TW"],960:["MV"],961:["LB"],962:["JO"],963:["SY"],964:["IQ"],965:["KW"],966:["SA"],967:["YE"],968:["OM"],970:["PS"],971:["AE"],972:["IL"],973:["BH"],974:["QA"],975:["BT"],976:["MN"],977:["NP"],992:["TJ"],993:["TM"],994:["AZ"],995:["GE"],996:["KG"],998:["UZ"]},countries:{AC:["247","00","(?:[01589]\\d|[46])\\d{4}",[5,6],0,0,0,0,0,0,0,[0,["4\\d{4}",[5]]]],AD:["376","00","(?:1|6\\d)\\d{7}|[135-9]\\d{5}",[6,8,9],[["(\\d{3})(\\d{3})","$1 $2",["[135-9]"]],["(\\d{4})(\\d{4})","$1 $2",["1"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]]],0,0,0,0,0,0,[0,["690\\d{6}|[356]\\d{5}",[6,9]]]],AE:["971","00","(?:[4-7]\\d|9[0-689])\\d{7}|800\\d{2,9}|[2-4679]\\d{7}",[5,6,7,8,9,10,11,12],[["(\\d{3})(\\d{2,9})","$1 $2",["60|8"]],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[236]|[479][2-8]"],"0$1"],["(\\d{3})(\\d)(\\d{5})","$1 $2 $3",["[479]"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1"]],"0",0,0,0,0,0,[0,["5[024-68]\\d{7}",[9]]]],AF:["93","00","[2-7]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[2-7]"],"0$1"]],"0",0,0,0,0,0,[0,["7\\d{8}"]]],AG:["1","011","(?:268|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([457]\\d{6})$|1","268$1",0,"268",[0,["268(?:464|7(?:1[3-9]|[28]\\d|3[0246]|64|7[0-689]))\\d{4}"]]],AI:["1","011","(?:264|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2457]\\d{6})$|1","264$1",0,"264",[0,["264(?:235|4(?:69|76)|5(?:3[6-9]|8[1-4])|7(?:29|72))\\d{4}"]]],AL:["355","00","(?:700\\d\\d|900)\\d{3}|8\\d{5,7}|(?:[2-5]|6\\d)\\d{7}",[6,7,8,9],[["(\\d{3})(\\d{3,4})","$1 $2",["80|9"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["4[2-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2358][2-5]|4"],"0$1"],["(\\d{3})(\\d{5})","$1 $2",["[23578]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["6"],"0$1"]],"0",0,0,0,0,0,[0,["6(?:[78][2-9]|9\\d)\\d{6}",[9]]]],AM:["374","00","(?:[1-489]\\d|55|60|77)\\d{6}",[8],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[89]0"],"0 $1"],["(\\d{3})(\\d{5})","$1 $2",["2|3[12]"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["1|47"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["[3-9]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:33|4[1349]|55|77|88|9[13-9])\\d{6}"]]],AO:["244","00","[29]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[29]"]]],0,0,0,0,0,0,[0,["9[1-59]\\d{7}"]]],AR:["54","00","(?:11|[89]\\d\\d)\\d{8}|[2368]\\d{9}",[10,11],[["(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])","2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)","2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]","2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]"],"0$1",1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["1"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["[23]"],"0$1",1],["(\\d)(\\d{4})(\\d{2})(\\d{4})","$2 15-$3-$4",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))","9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)","9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]","9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]"],"0$1",0,"$1 $2 $3-$4"],["(\\d)(\\d{2})(\\d{4})(\\d{4})","$2 15-$3-$4",["91"],"0$1",0,"$1 $2 $3-$4"],["(\\d{3})(\\d{3})(\\d{5})","$1-$2-$3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{4})","$2 15-$3-$4",["9"],"0$1",0,"$1 $2 $3-$4"]],"0",0,"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?","9$1",0,0,[0,["93(?:7(?:1[15]|81)[46]|8(?:(?:21|4[16]|69|9[12])[46]|88[013-9]))\\d{5}|9(?:29(?:54|66)|3(?:7(?:55|77)|865))[2-8]\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|473|9(?:[07]2|2[26]|34|46))|3327)[45]\\d{5}|9(?:2(?:284|3(?:02|23)|657|920)|3(?:4(?:8[27]|92)|541|878))[2-7]\\d{5}|9(?:2(?:(?:26|62)2|320|477|9(?:42|83))|3(?:329|4(?:[47]6|62|89)|564))[2-6]\\d{5}|(?:675\\d|9(?:11[1-8]\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-7]|[235][4-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|[17][2-6]|3[4-6]|[58][3-6]))))\\d{6}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|475|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\d{5}|9(?:2(?:2(?:57|81)|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|71)|5(?:25|37|4[347]|71)|7(?:18|5[17])))[3-6]\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[03-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[145]|4[13]|5[468]|7[2-5]|8[26])|8(?:2[5-7]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\d{5}"]]],AS:["1","011","(?:[58]\\d\\d|684|900)\\d{7}",[10],0,"1",0,"([267]\\d{6})$|1","684$1",0,"684",[0,["684(?:2(?:48|5[2468]|7[26])|7(?:3[13]|70|82))\\d{4}"]]],AT:["43","00","1\\d{3,12}|2\\d{6,12}|43(?:(?:0\\d|5[02-9])\\d{3,9}|2\\d{4,5}|[3467]\\d{4}|8\\d{4,6}|9\\d{4,7})|5\\d{4,12}|8\\d{7,12}|9\\d{8,12}|(?:[367]\\d|4[0-24-9])\\d{4,11}",[4,5,6,7,8,9,10,11,12,13],[["(\\d)(\\d{3,12})","$1 $2",["1(?:11|[2-9])"],"0$1"],["(\\d{3})(\\d{2})","$1 $2",["517"],"0$1"],["(\\d{2})(\\d{3,5})","$1 $2",["5[079]"],"0$1"],["(\\d{3})(\\d{3,10})","$1 $2",["(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:20|32|8)|[89]"],"0$1"],["(\\d{4})(\\d{3,9})","$1 $2",["[2-467]|5[2-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["5"],"0$1"],["(\\d{2})(\\d{4})(\\d{4,7})","$1 $2 $3",["5"],"0$1"]],"0",0,0,0,0,0,[0,["6(?:5[0-3579]|6[013-9]|[7-9]\\d)\\d{4,10}",[7,8,9,10,11,12,13]]]],AU:["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{7}(?:\\d(?:\\d{2})?)?|8[0-24-9]\\d{7})|[2-478]\\d{8}|1\\d{4,7}",[5,6,7,8,9,10,12],[["(\\d{2})(\\d{3,4})","$1 $2",["16"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,4})","$1 $2 $3",["16"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["14|4"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[2378]"],"(0$1)"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:30|[89])"]]],"0",0,"(183[12])|0",0,0,0,[0,["4(?:(?:79|94)[01]|83[0-389])\\d{5}|4(?:[0-3]\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\d{6}",[9]]],"0011"],AW:["297","00","(?:[25-79]\\d\\d|800)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[25-9]"]]],0,0,0,0,0,0,[0,["(?:290|5[69]\\d|6(?:[03]0|22|4[0-2]|[69]\\d)|7(?:[34]\\d|7[07])|9(?:6[45]|9[4-8]))\\d{4}"]]],AX:["358","00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))","2\\d{4,9}|35\\d{4,5}|(?:60\\d\\d|800)\\d{4,6}|7\\d{5,11}|(?:[14]\\d|3[0-46-9]|50)\\d{4,8}",[5,6,7,8,9,10,11,12],0,"0",0,0,0,0,"18",[0,["4946\\d{2,6}|(?:4[0-8]|50)\\d{4,8}",[6,7,8,9,10]]],"00"],AZ:["994","00","365\\d{6}|(?:[124579]\\d|60|88)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["90"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[28]|2|365|46","1[28]|2|365[45]|46","1[28]|2|365(?:4|5[02])|46"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[13-9]"],"0$1"]],"0",0,0,0,0,0,[0,["36554\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\d{7}"]]],BA:["387","00","6\\d{8}|(?:[35689]\\d|49|70)\\d{6}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["6[1-3]|[7-9]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2-$3",["[3-5]|6[56]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["6"],"0$1"]],"0",0,0,0,0,0,[0,["6040\\d{5}|6(?:03|[1-356]|44|7\\d)\\d{6}"]]],BB:["1","011","(?:246|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","246$1",0,"246",[0,["246(?:(?:2(?:[3568]\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\d)|69[5-7]|8(?:[2-5]\\d|83))\\d|52(?:1[147]|20))\\d{3}"]]],BD:["880","00","[1-469]\\d{9}|8[0-79]\\d{7,8}|[2-79]\\d{8}|[2-9]\\d{7}|[3-9]\\d{6}|[57-9]\\d{5}",[6,7,8,9,10],[["(\\d{2})(\\d{4,6})","$1-$2",["31[5-8]|[459]1"],"0$1"],["(\\d{3})(\\d{3,7})","$1-$2",["3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:28|4[14]|5)|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]"],"0$1"],["(\\d{4})(\\d{3,6})","$1-$2",["[13-9]|22"],"0$1"],["(\\d)(\\d{7,8})","$1-$2",["2"],"0$1"]],"0",0,0,0,0,0,[0,["(?:1[13-9]\\d|644)\\d{7}|(?:3[78]|44|66)[02-9]\\d{7}",[10]]]],BE:["32","00","4\\d{8}|[1-9]\\d{7}",[8,9],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["(?:80|9)0"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[239]|4[23]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[15-8]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4"],"0$1"]],"0",0,0,0,0,0,[0,["4[5-9]\\d{7}",[9]]]],BF:["226","00","[025-7]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[025-7]"]]],0,0,0,0,0,0,[0,["(?:0[1-35-7]|5[1-8]|[67]\\d)\\d{6}"]]],BG:["359","00","00800\\d{7}|[2-7]\\d{6,7}|[89]\\d{6,8}|2\\d{5}",[6,7,8,9,12],[["(\\d)(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["2"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["43[1-6]|70[1-9]"],"0$1"],["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["(?:70|8)0"],"0$1"],["(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3",["43[1-7]|7"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[48]|9[08]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"0$1"]],"0",0,0,0,0,0,[0,["(?:43[07-9]|99[69]\\d)\\d{5}|(?:8[7-9]|98)\\d{7}",[8,9]]]],BH:["973","00","[136-9]\\d{7}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[13679]|8[047]"]]],0,0,0,0,0,0,[0,["(?:3(?:[1-79]\\d|8[0-47-9])\\d|6(?:3(?:00|33|6[16])|6(?:3[03-9]|[69]\\d|7[0-6])))\\d{4}"]]],BI:["257","00","(?:[267]\\d|31)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2367]"]]],0,0,0,0,0,0,[0,["(?:29|[67][125-9])\\d{6}"]]],BJ:["229","00","[24-689]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24-689]"]]],0,0,0,0,0,0,[0,["(?:4[0-356]|[56]\\d|9[013-9])\\d{6}"]]],BL:["590","00","590\\d{6}|(?:69|80|9\\d)\\d{7}",[9],0,"0",0,0,0,0,0,[0,["69(?:0\\d\\d|1(?:2[2-9]|3[0-5]))\\d{4}"]]],BM:["1","011","(?:441|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","441$1",0,"441",[0,["441(?:[2378]\\d|5[0-39]|92)\\d{5}"]]],BN:["673","00","[2-578]\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-578]"]]],0,0,0,0,0,0,[0,["(?:22[89]|[78]\\d\\d)\\d{4}"]]],BO:["591","00(?:1\\d)?","(?:[2-467]\\d\\d|8001)\\d{5}",[8,9],[["(\\d)(\\d{7})","$1 $2",["[23]|4[46]"]],["(\\d{8})","$1",["[67]"]],["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["8"]]],"0",0,"0(1\\d)?",0,0,0,[0,["[67]\\d{7}",[8]]]],BQ:["599","00","(?:[34]1|7\\d)\\d{5}",[7],0,0,0,0,0,0,"[347]",[0,["(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\d|9[056])\\d)\\d{3}"]]],BR:["55","00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)","(?:[1-46-9]\\d\\d|5(?:[0-46-9]\\d|5[0-46-9]))\\d{8}|[1-9]\\d{9}|[3589]\\d{8}|[34]\\d{7}",[8,9,10,11],[["(\\d{4})(\\d{4})","$1-$2",["300|4(?:0[02]|37)","4(?:02|37)0|[34]00"]],["(\\d{3})(\\d{2,3})(\\d{4})","$1 $2 $3",["(?:[358]|90)0"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]"],"($1)"],["(\\d{2})(\\d{5})(\\d{4})","$1 $2-$3",["[16][1-9]|[2-57-9]"],"($1)"]],"0",0,"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\d{10,11}))?","$2",0,0,[0,["(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\d)\\d{7}",[10,11]]]],BS:["1","011","(?:242|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([3-8]\\d{6})$|1","242$1",0,"242",[0,["242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\d|[89]9))\\d{4}"]]],BT:["975","00","[17]\\d{7}|[2-8]\\d{6}",[7,8],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[2-68]|7[246]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[67]|7"]]],0,0,0,0,0,0,[0,["(?:1[67]|77)\\d{6}",[8]]]],BW:["267","00","(?:0800|(?:[37]|800)\\d)\\d{6}|(?:[2-6]\\d|90)\\d{5}",[7,8,10],[["(\\d{2})(\\d{5})","$1 $2",["90"]],["(\\d{3})(\\d{4})","$1 $2",["[24-6]|3[15-79]"]],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[37]"]],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["0"]],["(\\d{3})(\\d{4})(\\d{3})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["(?:321|7(?:[1-7]\\d|8[0-4]))\\d{5}",[8]]]],BY:["375","810","(?:[12]\\d|33|44|902)\\d{7}|8(?:0[0-79]\\d{5,7}|[1-7]\\d{9})|8(?:1[0-489]|[5-79]\\d)\\d{7}|8[1-79]\\d{6,7}|8[0-79]\\d{5}|8\\d{5}",[6,7,8,9,10,11],[["(\\d{3})(\\d{3})","$1 $2",["800"],"8 $1"],["(\\d{3})(\\d{2})(\\d{2,4})","$1 $2 $3",["800"],"8 $1"],["(\\d{4})(\\d{2})(\\d{3})","$1 $2-$3",["1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])","1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])"],"8 0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["1(?:[56]|7[467])|2[1-3]"],"8 0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[1-4]"],"8 0$1"],["(\\d{3})(\\d{3,4})(\\d{4})","$1 $2 $3",["[89]"],"8 $1"]],"8",0,"0|80?",0,0,0,[0,["(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\d)\\d{6}",[9]]],"8~10"],BZ:["501","00","(?:0800\\d|[2-8])\\d{6}",[7,11],[["(\\d{3})(\\d{4})","$1-$2",["[2-8]"]],["(\\d)(\\d{3})(\\d{4})(\\d{3})","$1-$2-$3-$4",["0"]]],0,0,0,0,0,0,[0,["6[0-35-7]\\d{5}",[7]]]],CA:["1","011","(?:[2-8]\\d|90)\\d{8}|3\\d{6}",[7,10],0,"1",0,0,0,0,0,[0,["(?:2(?:04|[23]6|[48]9|50|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\d{6}",[10]]]],CC:["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}",[6,7,8,9,10,12],0,"0",0,"([59]\\d{7})$|0","8$1",0,0,[0,["4(?:(?:79|94)[01]|83[0-389])\\d{5}|4(?:[0-3]\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\d{6}",[9]]],"0011"],CD:["243","00","[189]\\d{8}|[1-68]\\d{6}",[7,9],[["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["88"],"0$1"],["(\\d{2})(\\d{5})","$1 $2",["[1-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[89]"],"0$1"]],"0",0,0,0,0,0,[0,["88\\d{5}|(?:8[0-59]|9[017-9])\\d{7}"]]],CF:["236","00","(?:[27]\\d{3}|8776)\\d{4}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[278]"]]],0,0,0,0,0,0,[0,["7[024-7]\\d{6}"]]],CG:["242","00","222\\d{6}|(?:0\\d|80)\\d{7}",[9],[["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["8"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[02]"]]],0,0,0,0,0,0,[0,["026(?:1[0-5]|6[6-9])\\d{4}|0(?:[14-6]\\d\\d|2(?:40|5[5-8]|6[07-9]))\\d{5}"]]],CH:["41","00","8\\d{11}|[2-9]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8[047]|90"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-79]|81"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["8"],"0$1"]],"0",0,0,0,0,0,[0,["7[35-9]\\d{7}"]]],CI:["225","00","[02]\\d{9}",[10],[["(\\d{2})(\\d{2})(\\d)(\\d{5})","$1 $2 $3 $4",["2"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3 $4",["0"]]],0,0,0,0,0,0,[0,["0[157]\\d{8}"]]],CK:["682","00","[2-578]\\d{4}",[5],[["(\\d{2})(\\d{3})","$1 $2",["[2-578]"]]],0,0,0,0,0,0,[0,["[578]\\d{4}"]]],CL:["56","(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0","12300\\d{6}|6\\d{9,10}|[2-9]\\d{8}",[9,10,11],[["(\\d{5})(\\d{4})","$1 $2",["219","2196"],"($1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["44"]],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2[1-36]"],"($1)"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["9[2-9]"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-9]|[1-9])"],"($1)"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["60|8"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]],["(\\d{3})(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3 $4",["60"]]],0,0,0,0,0,0,[0,["2(?:1982[0-6]|3314[05-9])\\d{3}|(?:2(?:1(?:160|962)|3(?:2\\d\\d|3(?:[03467]\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-3])|600)|646[59])|80[1-9]\\d\\d|9(?:3(?:[0-57-9]\\d\\d|6(?:0[02-9]|[1-9]\\d))|6(?:[0-8]\\d\\d|9(?:[02-79]\\d|1[05-9]))|7[1-9]\\d\\d|9(?:[03-9]\\d\\d|1(?:[0235-9]\\d|4[0-24-9])|2(?:[0-79]\\d|8[0-46-9]))))\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\d{7}",[9]]]],CM:["237","00","[26]\\d{8}|88\\d{6,7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["88"]],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[26]|88"]]],0,0,0,0,0,0,[0,["(?:24[23]|6[25-9]\\d)\\d{6}",[9]]]],CN:["86","00|1(?:[12]\\d|79)\\d\\d00","1[127]\\d{8,9}|2\\d{9}(?:\\d{2})?|[12]\\d{6,7}|86\\d{6}|(?:1[03-689]\\d|6)\\d{7,9}|(?:[3-579]\\d|8[0-57-9])\\d{6,9}",[7,8,9,10,11,12],[["(\\d{2})(\\d{5,6})","$1 $2",["(?:10|2[0-57-9])[19]","(?:10|2[0-57-9])(?:10|9[56])","10(?:10|9[56])|2[0-57-9](?:100|9[56])"],"0$1"],["(\\d{3})(\\d{5,6})","$1 $2",["3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]","(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))[19]","85[23](?:10|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:10|9[56])","85[23](?:100|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:100|9[56])"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["(?:4|80)0"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["10|2(?:[02-57-9]|1[1-9])","10|2(?:[02-57-9]|1[1-9])","10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]"],"0$1",1],["(\\d{3})(\\d{7,8})","$1 $2",["9"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["80"],"0$1",1],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["[3-578]"],"0$1",1],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["1[3-9]"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4",["[12]"],"0$1",1]],"0",0,"(1(?:[12]\\d|79)\\d\\d)|0",0,0,0,[0,["1740[0-5]\\d{6}|1(?:[38]\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\d{8}",[11]]],"00"],CO:["57","00(?:4(?:[14]4|56)|[579])","(?:60\\d\\d|9101)\\d{6}|(?:1\\d|3)\\d{9}",[10,11],[["(\\d{3})(\\d{7})","$1 $2",["6"],"($1)"],["(\\d{3})(\\d{7})","$1 $2",["3[0-357]|91"]],["(\\d)(\\d{3})(\\d{7})","$1-$2-$3",["1"],"0$1",0,"$1 $2 $3"]],"0",0,"0(4(?:[14]4|56)|[579])?",0,0,0,[0,["3333(?:0(?:0\\d|1[0-5])|[4-9]\\d\\d)\\d{3}|(?:3(?:24[1-9]|3(?:00|3[0-24-9]))|9101)\\d{6}|3(?:0[0-5]|1\\d|2[0-3]|5[01]|70)\\d{7}",[10]]]],CR:["506","00","(?:8\\d|90)\\d{8}|(?:[24-8]\\d{3}|3005)\\d{4}",[8,10],[["(\\d{4})(\\d{4})","$1 $2",["[2-7]|8[3-9]"]],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[89]"]]],0,0,"(19(?:0[0-2468]|1[09]|20|66|77|99))",0,0,0,[0,["(?:3005\\d|6500[01])\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\d{6}",[8]]]],CU:["53","119","[27]\\d{6,7}|[34]\\d{5,7}|(?:5|8\\d\\d)\\d{7}",[6,7,8,10],[["(\\d{2})(\\d{4,6})","$1 $2",["2[1-4]|[34]"],"(0$1)"],["(\\d)(\\d{6,7})","$1 $2",["7"],"(0$1)"],["(\\d)(\\d{7})","$1 $2",["5"],"0$1"],["(\\d{3})(\\d{7})","$1 $2",["8"],"0$1"]],"0",0,0,0,0,0,[0,["5\\d{7}",[8]]]],CV:["238","0","(?:[2-59]\\d\\d|800)\\d{4}",[7],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[2-589]"]]],0,0,0,0,0,0,[0,["(?:36|5[1-389]|9\\d)\\d{5}"]]],CW:["599","00","(?:[34]1|60|(?:7|9\\d)\\d)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["[3467]"]],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["9[4-8]"]]],0,0,0,0,0,"[69]",[0,["953[01]\\d{4}|9(?:5[12467]|6[5-9])\\d{5}"]]],CX:["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}",[6,7,8,9,10,12],0,"0",0,"([59]\\d{7})$|0","8$1",0,0,[0,["4(?:(?:79|94)[01]|83[0-389])\\d{5}|4(?:[0-3]\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\d{6}",[9]]],"0011"],CY:["357","00","(?:[279]\\d|[58]0)\\d{6}",[8],[["(\\d{2})(\\d{6})","$1 $2",["[257-9]"]]],0,0,0,0,0,0,[0,["9(?:10|[4-79]\\d)\\d{5}"]]],CZ:["420","00","(?:[2-578]\\d|60)\\d{7}|9\\d{8,11}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]|9[015-7]"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3 $4",["96"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]]],0,0,0,0,0,0,[0,["(?:60[1-8]|7(?:0[2-5]|[2379]\\d))\\d{6}"]]],DE:["49","00","[2579]\\d{5,14}|49(?:[34]0|69|8\\d)\\d\\d?|49(?:37|49|60|7[089]|9\\d)\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\d{1,8}|(?:1|[368]\\d|4[0-8])\\d{3,13}|49(?:[015]\\d|2[13]|31|[46][1-8])\\d{1,9}",[4,5,6,7,8,9,10,11,12,13,14,15],[["(\\d{2})(\\d{3,13})","$1 $2",["3[02]|40|[68]9"],"0$1"],["(\\d{3})(\\d{3,12})","$1 $2",["2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1","2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1"],"0$1"],["(\\d{4})(\\d{2,11})","$1 $2",["[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]","[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["138"],"0$1"],["(\\d{5})(\\d{2,10})","$1 $2",["3"],"0$1"],["(\\d{3})(\\d{5,11})","$1 $2",["181"],"0$1"],["(\\d{3})(\\d)(\\d{4,10})","$1 $2 $3",["1(?:3|80)|9"],"0$1"],["(\\d{3})(\\d{7,8})","$1 $2",["1[67]"],"0$1"],["(\\d{3})(\\d{7,12})","$1 $2",["8"],"0$1"],["(\\d{5})(\\d{6})","$1 $2",["185","1850","18500"],"0$1"],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{4})(\\d{7})","$1 $2",["18[68]"],"0$1"],["(\\d{5})(\\d{6})","$1 $2",["15[0568]"],"0$1"],["(\\d{4})(\\d{7})","$1 $2",["15[1279]"],"0$1"],["(\\d{3})(\\d{8})","$1 $2",["18"],"0$1"],["(\\d{3})(\\d{2})(\\d{7,8})","$1 $2 $3",["1(?:6[023]|7)"],"0$1"],["(\\d{4})(\\d{2})(\\d{7})","$1 $2 $3",["15[279]"],"0$1"],["(\\d{3})(\\d{2})(\\d{8})","$1 $2 $3",["15"],"0$1"]],"0",0,0,0,0,0,[0,["15[0-25-9]\\d{8}|1(?:6[023]|7\\d)\\d{7,8}",[10,11]]]],DJ:["253","00","(?:2\\d|77)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[27]"]]],0,0,0,0,0,0,[0,["77\\d{6}"]]],DK:["45","00","[2-9]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-9]"]]],0,0,0,0,0,0,[0,["(?:[2-7]\\d|8[126-9]|9[1-46-9])\\d{6}"]]],DM:["1","011","(?:[58]\\d\\d|767|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","767$1",0,"767",[0,["767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\d{4}"]]],DO:["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,0,0,0,"8001|8[024]9",[0,["8[024]9[2-9]\\d{6}"]]],DZ:["213","00","(?:[1-4]|[5-79]\\d|80)\\d{7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-4]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-8]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:5(?:4[0-29]|5\\d|6[0-2])|6(?:[569]\\d|7[0-6])|7[7-9]\\d)\\d{6}",[9]]]],EC:["593","00","1\\d{9,10}|(?:[2-7]|9\\d)\\d{7}",[8,9,10,11],[["(\\d)(\\d{3})(\\d{4})","$1 $2-$3",["[2-7]"],"(0$1)",0,"$1-$2-$3"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["9"],"0$1"],["(\\d{4})(\\d{3})(\\d{3,4})","$1 $2 $3",["1"]]],"0",0,0,0,0,0,[0,["964[0-2]\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\d)\\d{6}",[9]]]],EE:["372","00","8\\d{9}|[4578]\\d{7}|(?:[3-8]\\d|90)\\d{5}",[7,8,10],[["(\\d{3})(\\d{4})","$1 $2",["[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88","[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88"]],["(\\d{4})(\\d{3,4})","$1 $2",["[45]|8(?:00|[1-49])","[45]|8(?:00[1-9]|[1-49])"]],["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["7"]],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["(?:5\\d{5}|8(?:1(?:0(?:000|[3-9]\\d\\d)|(?:1(?:0[236]|1\\d)|(?:2[0-59]|[3-79]\\d)\\d)\\d)|2(?:0(?:000|(?:19|[2-7]\\d)\\d)|(?:(?:[124-6]\\d|3[5-9])\\d|7(?:[3679]\\d|8[13-9])|8(?:[2-6]\\d|7[01]))\\d)|[349]\\d{4}))\\d\\d|5(?:(?:[02]\\d|5[0-478])\\d|1(?:[0-8]\\d|95)|6(?:4[0-4]|5[1-589]))\\d{3}",[7,8]]]],EG:["20","00","[189]\\d{8,9}|[24-6]\\d{8}|[135]\\d{7}",[8,9,10],[["(\\d)(\\d{7,8})","$1 $2",["[23]"],"0$1"],["(\\d{2})(\\d{6,7})","$1 $2",["1[35]|[4-6]|8[2468]|9[235-7]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[189]"],"0$1"]],"0",0,0,0,0,0,[0,["1[0-25]\\d{8}",[10]]]],EH:["212","00","[5-8]\\d{8}",[9],0,"0",0,0,0,0,"528[89]",[0,["(?:6(?:[0-79]\\d|8[0-247-9])|7(?:[017]\\d|2[0-2]|6[0-8]|8[0-3]))\\d{6}"]]],ER:["291","00","[178]\\d{6}",[7],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[178]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:17[1-3]|7\\d\\d)\\d{4}"]]],ES:["34","00","[5-9]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[89]00"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-9]"]]],0,0,0,0,0,0,[0,["(?:590[16]00\\d|9(?:6906(?:09|10)|7390\\d\\d))\\d\\d|(?:6\\d|7[1-48])\\d{7}"]]],ET:["251","00","(?:11|[2-579]\\d)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-579]"],"0$1"]],"0",0,0,0,0,0,[0,["7001\\d{5}|(?:7(?:0[1-9]|1[0-8]|22|77|86|99)|9\\d\\d)\\d{6}"]]],FI:["358","00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))","[1-35689]\\d{4}|7\\d{10,11}|(?:[124-7]\\d|3[0-46-9])\\d{8}|[1-9]\\d{5,8}",[5,6,7,8,9,10,11,12],[["(\\d)(\\d{4,9})","$1 $2",["[2568][1-8]|3(?:0[1-9]|[1-9])|9"],"0$1"],["(\\d{3})(\\d{3,7})","$1 $2",["[12]00|[368]|70[07-9]"],"0$1"],["(\\d{2})(\\d{4,8})","$1 $2",["[1245]|7[135]"],"0$1"],["(\\d{2})(\\d{6,10})","$1 $2",["7"],"0$1"]],"0",0,0,0,0,"1[03-79]|[2-9]",[0,["4946\\d{2,6}|(?:4[0-8]|50)\\d{4,8}",[6,7,8,9,10]]],"00"],FJ:["679","0(?:0|52)","45\\d{5}|(?:0800\\d|[235-9])\\d{6}",[7,11],[["(\\d{3})(\\d{4})","$1 $2",["[235-9]|45"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["0"]]],0,0,0,0,0,0,[0,["(?:[279]\\d|45|5[01568]|8[034679])\\d{5}",[7]]],"00"],FK:["500","00","[2-7]\\d{4}",[5],0,0,0,0,0,0,0,[0,["[56]\\d{4}"]]],FM:["691","00","(?:[39]\\d\\d|820)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[389]"]]],0,0,0,0,0,0,[0,["31(?:00[67]|208|309)\\d\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\d)\\d)\\d{3}"]]],FO:["298","00","[2-9]\\d{5}",[6],[["(\\d{6})","$1",["[2-9]"]]],0,0,"(10(?:01|[12]0|88))",0,0,0,[0,["(?:[27][1-9]|5\\d|9[16])\\d{4}"]]],FR:["33","00","[1-9]\\d{8}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0 $1"],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:6(?:[0-24-8]\\d|3[0-8]|9[589])|7[3-9]\\d)\\d{6}"]]],GA:["241","00","(?:[067]\\d|11)\\d{6}|[2-7]\\d{6}",[7,8],[["(\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-7]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["11|[67]"],"0$1"]],0,0,"0(11\\d{6}|60\\d{6}|61\\d{6}|6[256]\\d{6}|7[467]\\d{6})","$1",0,0,[0,["(?:(?:0[2-7]|7[467])\\d|6(?:0[0-4]|10|[256]\\d))\\d{5}|[2-7]\\d{6}"]]],GB:["44","00","[1-357-9]\\d{9}|[18]\\d{8}|8\\d{6}",[7,9,10],[["(\\d{3})(\\d{4})","$1 $2",["800","8001","80011","800111","8001111"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["845","8454","84546","845464"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["800"],"0$1"],["(\\d{5})(\\d{4,5})","$1 $2",["1(?:38|5[23]|69|76|94)","1(?:(?:38|69)7|5(?:24|39)|768|946)","1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)"],"0$1"],["(\\d{4})(\\d{5,6})","$1 $2",["1(?:[2-69][02-9]|[78])"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[25]|7(?:0|6[02-9])","[25]|7(?:0|6(?:[03-9]|2[356]))"],"0$1"],["(\\d{4})(\\d{6})","$1 $2",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[1389]"],"0$1"]],"0",0,0,0,0,0,[0,["7(?:457[0-57-9]|700[01]|911[028])\\d{5}|7(?:[1-3]\\d\\d|4(?:[0-46-9]\\d|5[0-689])|5(?:0[0-8]|[13-9]\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\d|8[02-9]|9[0-689])|8(?:[014-9]\\d|[23][0-8])|9(?:[024-9]\\d|1[02-9]|3[0-689]))\\d{6}",[10]]],0," x"],GD:["1","011","(?:473|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","473$1",0,"473",[0,["473(?:4(?:0[2-79]|1[04-9]|2[0-5]|58)|5(?:2[01]|3[3-8])|901)\\d{4}"]]],GE:["995","00","(?:[3-57]\\d\\d|800)\\d{6}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["70"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["32"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[57]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[348]"],"0$1"]],"0",0,0,0,0,0,[0,["5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\d|22252[0-4])\\d\\d|(?:5(?:00(?:0\\d|44|5[05]|77|88|99)|1(?:1(?:00|[124]\\d|3[01])|4\\d\\d)|(?:44|68)\\d\\d|5(?:[0157-9]\\d\\d|200)|7(?:[0147-9]\\d\\d|5(?:00|[57]5))|8(?:0(?:[01]\\d|2[0-4])|58[89]|8(?:55|88))|9(?:090|[1-35-9]\\d\\d))|790\\d\\d)\\d{4}|5(?:0(?:070|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|(?:40[04]|900)0|5222)[0-4]\\d{3}"]]],GF:["594","00","[56]94\\d{6}|(?:80|9\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[56]|9[47]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[89]"],"0$1"]],"0",0,0,0,0,0,[0,["694(?:[0-249]\\d|3[0-8])\\d{4}"]]],GG:["44","00","(?:1481|[357-9]\\d{3})\\d{6}|8\\d{6}(?:\\d{2})?",[7,9,10],0,"0",0,"([25-9]\\d{5})$|0","1481$1",0,0,[0,["7(?:(?:781|839)\\d|911[17])\\d{5}",[10]]]],GH:["233","00","(?:[235]\\d{3}|800)\\d{5}",[8,9],[["(\\d{3})(\\d{5})","$1 $2",["8"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[235]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:2(?:[0346-9]\\d|5[67])|5(?:[03-7]\\d|9[1-9]))\\d{6}",[9]]]],GI:["350","00","(?:[25]\\d|60)\\d{6}",[8],[["(\\d{3})(\\d{5})","$1 $2",["2"]]],0,0,0,0,0,0,[0,["5251[0-4]\\d{3}|(?:5(?:[146-8]\\d\\d|250)|60(?:1[01]|6\\d))\\d{4}"]]],GL:["299","00","(?:19|[2-689]\\d|70)\\d{4}",[6],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["19|[2-9]"]]],0,0,0,0,0,0,[0,["[245]\\d{5}"]]],GM:["220","00","[2-9]\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-9]"]]],0,0,0,0,0,0,[0,["(?:[23679]\\d|5[0-489])\\d{5}"]]],GN:["224","00","722\\d{6}|(?:3|6\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["3"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[67]"]]],0,0,0,0,0,0,[0,["6[0-356]\\d{7}",[9]]]],GP:["590","00","590\\d{6}|(?:69|80|9\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[569]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[0,["69(?:0\\d\\d|1(?:2[2-9]|3[0-5]))\\d{4}"]]],GQ:["240","00","222\\d{6}|(?:3\\d|55|[89]0)\\d{7}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235]"]],["(\\d{3})(\\d{6})","$1 $2",["[89]"]]],0,0,0,0,0,0,[0,["(?:222|55\\d)\\d{6}"]]],GR:["30","00","5005000\\d{3}|8\\d{9,11}|(?:[269]\\d|70)\\d{8}",[10,11,12],[["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["21|7"]],["(\\d{4})(\\d{6})","$1 $2",["2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2689]"]],["(\\d{3})(\\d{3,4})(\\d{5})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["68[57-9]\\d{7}|(?:69|94)\\d{8}",[10]]]],GT:["502","00","(?:1\\d{3}|[2-7])\\d{7}",[8,11],[["(\\d{4})(\\d{4})","$1 $2",["[2-7]"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]]],0,0,0,0,0,0,[0,["[3-5]\\d{7}",[8]]]],GU:["1","011","(?:[58]\\d\\d|671|900)\\d{7}",[10],0,"1",0,"([3-9]\\d{6})$|1","671$1",0,"671",[0,["671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-46-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[48])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\d{4}"]]],GW:["245","00","[49]\\d{8}|4\\d{6}",[7,9],[["(\\d{3})(\\d{4})","$1 $2",["40"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[49]"]]],0,0,0,0,0,0,[0,["9(?:5\\d|6[569]|77)\\d{6}",[9]]]],GY:["592","001","9008\\d{3}|(?:[2-467]\\d\\d|862)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-46-9]"]]],0,0,0,0,0,0,[0,["(?:6\\d\\d|70[0-35-7])\\d{4}"]]],HK:["852","00(?:30|5[09]|[126-9]?)","8[0-46-9]\\d{6,7}|9\\d{4,7}|(?:[2-7]|9\\d{3})\\d{7}",[5,6,7,8,9,11],[["(\\d{3})(\\d{2,5})","$1 $2",["900","9003"]],["(\\d{4})(\\d{4})","$1 $2",["[2-7]|8[1-4]|9(?:0[1-9]|[1-8])"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]],["(\\d{3})(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]]],0,0,0,0,0,0,[0,["(?:4(?:44[5-9]|6(?:0[0-7]|1[0-6]|4[0-57-9]|6[0-4]|7[0-8]))|573[0-6]|6(?:26[013-8]|66[0-3])|70(?:7[1-5]|8[0-4])|848[015-9]|9(?:29[013-9]|59[0-4]))\\d{4}|(?:4(?:4[01]|6[2358])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\d|[268][0-57-9]|7[0-79])|84[09]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\d))\\d{5}",[8]]],"00"],HN:["504","00","8\\d{10}|[237-9]\\d{7}",[8,11],[["(\\d{4})(\\d{4})","$1-$2",["[237-9]"]]],0,0,0,0,0,0,[0,["[37-9]\\d{7}",[8]]]],HR:["385","00","(?:[24-69]\\d|3[0-79])\\d{7}|80\\d{5,7}|[1-79]\\d{7}|6\\d{5,6}",[6,7,8,9],[["(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["6[01]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{4})(\\d{3})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[67]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["9"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-5]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"],"0$1"]],"0",0,0,0,0,0,[0,["9(?:(?:0[1-9]|[12589]\\d)\\d\\d|7(?:[0679]\\d\\d|5(?:[01]\\d|44|77|9[67])))\\d{4}|98\\d{6}",[8,9]]]],HT:["509","00","(?:[2-489]\\d|55)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[2-589]"]]],0,0,0,0,0,0,[0,["(?:[34]\\d|55)\\d{6}"]]],HU:["36","00","[235-7]\\d{8}|[1-9]\\d{7}",[8,9],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"(06 $1)"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]"],"(06 $1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"],"06 $1"]],"06",0,0,0,0,0,[0,["(?:[257]0|3[01])\\d{7}",[9]]]],ID:["62","00[89]","(?:(?:00[1-9]|8\\d)\\d{4}|[1-36])\\d{6}|00\\d{10}|[1-9]\\d{8,10}|[2-9]\\d{7}",[7,8,9,10,11,12,13],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["15"]],["(\\d{2})(\\d{5,9})","$1 $2",["2[124]|[36]1"],"(0$1)"],["(\\d{3})(\\d{5,7})","$1 $2",["800"],"0$1"],["(\\d{3})(\\d{5,8})","$1 $2",["[2-79]"],"(0$1)"],["(\\d{3})(\\d{3,4})(\\d{3})","$1-$2-$3",["8[1-35-9]"],"0$1"],["(\\d{3})(\\d{6,8})","$1 $2",["1"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["804"],"0$1"],["(\\d{3})(\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4",["80"],"0$1"],["(\\d{3})(\\d{4})(\\d{4,5})","$1-$2-$3",["8"],"0$1"]],"0",0,0,0,0,0,[0,["8[1-35-9]\\d{7,10}",[9,10,11,12]]]],IE:["353","00","(?:1\\d|[2569])\\d{6,8}|4\\d{6,9}|7\\d{8}|8\\d{8,9}",[7,8,9,10],[["(\\d{2})(\\d{5})","$1 $2",["2[24-9]|47|58|6[237-9]|9[35-9]"],"(0$1)"],["(\\d{3})(\\d{5})","$1 $2",["[45]0"],"(0$1)"],["(\\d)(\\d{3,4})(\\d{4})","$1 $2 $3",["1"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2569]|4[1-69]|7[14]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["70"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["81"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[78]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["4"],"(0$1)"],["(\\d{2})(\\d)(\\d{3})(\\d{4})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[0,["8(?:22|[35-9]\\d)\\d{6}",[9]]]],IL:["972","0(?:0|1[2-9])","1\\d{6}(?:\\d{3,5})?|[57]\\d{8}|[1-489]\\d{7}",[7,8,9,10,11,12],[["(\\d{4})(\\d{3})","$1-$2",["125"]],["(\\d{4})(\\d{2})(\\d{2})","$1-$2-$3",["121"]],["(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[2-489]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[57]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1-$2-$3",["12"]],["(\\d{4})(\\d{6})","$1-$2",["159"]],["(\\d)(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3-$4",["1[7-9]"]],["(\\d{3})(\\d{1,2})(\\d{3})(\\d{4})","$1-$2 $3-$4",["15"]]],"0",0,0,0,0,0,[0,["5(?:(?:[02368]\\d|[19][2-9]|4[1-9])\\d|5(?:01|1[79]|2[2-9]|3[0-3]|4[34]|5[015689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\d{5}",[9]]]],IM:["44","00","1624\\d{6}|(?:[3578]\\d|90)\\d{8}",[10],0,"0",0,"([25-8]\\d{5})$|0","1624$1",0,"74576|(?:16|7[56])24",[0,["76245[06]\\d{4}|7(?:4576|[59]24\\d|624[0-4689])\\d{5}"]]],IN:["91","00","(?:000800|[2-9]\\d\\d)\\d{7}|1\\d{7,12}",[8,9,10,11,12,13],[["(\\d{8})","$1",["5(?:0|2[23]|3[03]|[67]1|88)","5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)","5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)"],0,1],["(\\d{4})(\\d{4,5})","$1 $2",["180","1800"],0,1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["140"],0,1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["11|2[02]|33|4[04]|79[1-7]|80[2-46]","11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])","11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]","1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]","1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]"],"0$1",1],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807","1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]","1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\d|7(?:1(?:[013-8]\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\d|5[0-367])|70[13-7]))[2-7]"],"0$1",1],["(\\d{5})(\\d{5})","$1 $2",["[6-9]"],"0$1",1],["(\\d{4})(\\d{2,4})(\\d{4})","$1 $2 $3",["1(?:6|8[06])","1(?:6|8[06]0)"],0,1],["(\\d{4})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["18"],0,1]],"0",0,0,0,0,0,[0,["(?:61279|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\d{5}|(?:6(?:12|[2-47]1|5[17]|6[13]|80)[0189]|7(?:1(?:2[0189]|9[0-5])|2(?:[14][017-9]|8[0-59])|3(?:2[5-8]|[34][017-9]|9[016-9])|4(?:1[015-9]|[29][89]|39|8[389])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\d{6}|(?:7(?:31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\d|7[02-8])\\d{5}|(?:6(?:[09]\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:0\\d|2[0235-79]|3[05-8]|40|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\d\\d)\\d{7}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|8[124-6])\\d|7(?:[235689]\\d|4[0189]))|7(?:1(?:[013-8]\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-5])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\d|5[0-367])|70[13-7]|881))[0189]\\d{5}",[10]]]],IO:["246","00","3\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["3"]]],0,0,0,0,0,0,[0,["38\\d{5}"]]],IQ:["964","00","(?:1|7\\d\\d)\\d{7}|[2-6]\\d{7,8}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-6]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"]],"0",0,0,0,0,0,[0,["7[3-9]\\d{8}",[10]]]],IR:["98","00","[1-9]\\d{9}|(?:[1-8]\\d\\d|9)\\d{3,4}",[4,5,6,7,10],[["(\\d{4,5})","$1",["96"],"0$1"],["(\\d{2})(\\d{4,5})","$1 $2",["(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["9"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[1-8]"],"0$1"]],"0",0,0,0,0,0,[0,["9(?:(?:0(?:[0-35]\\d|4[4-6])|(?:[13]\\d|2[0-3])\\d)\\d|9(?:[0-46]\\d\\d|5[15]0|8(?:1\\d|88)|9(?:0[0-3]|[19]\\d|21|77|8[7-9])))\\d{5}",[10]]]],IS:["354","00|1(?:0(?:01|[12]0)|100)","(?:38\\d|[4-9])\\d{6}",[7,9],[["(\\d{3})(\\d{4})","$1 $2",["[4-9]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["3"]]],0,0,0,0,0,0,[0,["(?:38[589]\\d\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\d)|7(?:5[057]|[6-9]\\d)|8(?:2[0-59]|[3-69]\\d|8[238]))\\d{4}"]],"00"],IT:["39","00","0\\d{5,10}|1\\d{8,10}|3(?:[0-8]\\d{7,10}|9\\d{7,8})|(?:55|70)\\d{8}|8\\d{5}(?:\\d{2,4})?",[6,7,8,9,10,11],[["(\\d{2})(\\d{4,6})","$1 $2",["0[26]"]],["(\\d{3})(\\d{3,6})","$1 $2",["0[13-57-9][0159]|8(?:03|4[17]|9[2-5])","0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))"]],["(\\d{4})(\\d{2,6})","$1 $2",["0(?:[13-579][2-46-8]|8[236-8])"]],["(\\d{4})(\\d{4})","$1 $2",["894"]],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["0[26]|5"]],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["1(?:44|[679])|[378]"]],["(\\d{3})(\\d{3,4})(\\d{4})","$1 $2 $3",["0[13-57-9][0159]|14"]],["(\\d{2})(\\d{4})(\\d{5})","$1 $2 $3",["0[26]"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["0"]],["(\\d{3})(\\d{4})(\\d{4,5})","$1 $2 $3",["3"]]],0,0,0,0,0,0,[0,["3[1-9]\\d{8}|3[2-9]\\d{7}",[9,10]]]],JE:["44","00","1534\\d{6}|(?:[3578]\\d|90)\\d{8}",[10],0,"0",0,"([0-24-8]\\d{5})$|0","1534$1",0,0,[0,["7(?:(?:(?:50|82)9|937)\\d|7(?:00[378]|97[7-9]))\\d{5}"]]],JM:["1","011","(?:[58]\\d\\d|658|900)\\d{7}",[10],0,"1",0,0,0,0,"658|876",[0,["(?:658295|876(?:2(?:0[1-9]|[13-9]\\d|2[013-9])|[348]\\d\\d|5(?:0[1-9]|[1-9]\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\d{4}"]]],JO:["962","00","(?:(?:[2689]|7\\d)\\d|32|53)\\d{6}",[8,9],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2356]|87"],"(0$1)"],["(\\d{3})(\\d{5,6})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["70"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["7"],"0$1"]],"0",0,0,0,0,0,[0,["7(?:[78][0-25-9]|9\\d)\\d{6}",[9]]]],JP:["81","010","00[1-9]\\d{6,14}|[257-9]\\d{9}|(?:00|[1-9]\\d\\d)\\d{6}",[8,9,10,11,12,13,14,15,16,17],[["(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3",["(?:12|57|99)0"],"0$1"],["(\\d{4})(\\d)(\\d{4})","$1-$2-$3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51|63)|9(?:80|9[16])","1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9]|636)|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]","1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9]|636[457-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["60"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1-$2-$3",["[36]|4(?:2[09]|7[01])","[36]|4(?:2(?:0|9[02-69])|7(?:0[019]|1))"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[27-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])","1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9])|5(?:2|3[045]|4[0-369]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|49|51|6(?:[0-24]|36|5[0-3589]|72|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:49|55|83)[29]|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]","1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]","1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|7[015-9]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17|3[015-9]))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9(?:[019]|4[1-3]|6(?:[0-47-9]|5[01346-9])))|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|829(?:2|66)|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]"],"0$1"],["(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["[14]|[289][2-9]|5[3-9]|7[2-4679]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["800"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[257-9]"],"0$1"]],"0",0,0,0,0,0,[0,["[7-9]0[1-9]\\d{7}",[10]]]],KE:["254","000","(?:[17]\\d\\d|900)\\d{6}|(?:2|80)0\\d{6,7}|[4-6]\\d{6,8}",[7,8,9,10],[["(\\d{2})(\\d{5,7})","$1 $2",["[24-6]"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["[17]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[89]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:1(?:0[0-6]|1[0-5]|2[014]|30)|7\\d\\d)\\d{6}",[9]]]],KG:["996","00","8\\d{9}|(?:[235-8]\\d|99)\\d{7}",[9,10],[["(\\d{4})(\\d{5})","$1 $2",["3(?:1[346]|[24-79])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235-79]|88"],"0$1"],["(\\d{3})(\\d{3})(\\d)(\\d{2,3})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[0,["312(?:58\\d|973)\\d{3}|(?:2(?:0[0-35]|2\\d)|5[0-24-7]\\d|600|7(?:[07]\\d|55)|88[08]|99[05-9])\\d{6}",[9]]]],KH:["855","00[14-9]","1\\d{9}|[1-9]\\d{7,8}",[8,9,10],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-9]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0",0,0,0,0,0,[0,["(?:(?:1[28]|3[18]|9[67])\\d|6[016-9]|7(?:[07-9]|[16]\\d)|8(?:[013-79]|8\\d))\\d{6}|(?:1\\d|9[0-57-9])\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\d{5}",[8,9]]]],KI:["686","00","(?:[37]\\d|6[0-79])\\d{6}|(?:[2-48]\\d|50)\\d{3}",[5,8],0,"0",0,0,0,0,0,[0,["(?:6200[01]|7(?:310[1-9]|5(?:02[03-9]|12[0-47-9]|22[0-7]|[34](?:0[1-9]|8[02-9])|50[1-9])))\\d{3}|(?:63\\d\\d|7(?:(?:[0146-9]\\d|2[0-689])\\d|3(?:[02-9]\\d|1[1-9])|5(?:[0-2][013-9]|[34][1-79]|5[1-9]|[6-9]\\d)))\\d{4}",[8]]]],KM:["269","00","[3478]\\d{6}",[7],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[3478]"]]],0,0,0,0,0,0,[0,["[34]\\d{6}"]]],KN:["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","869$1",0,"869",[0,["869(?:48[89]|55[6-8]|66\\d|76[02-7])\\d{4}"]]],KP:["850","00|99","85\\d{6}|(?:19\\d|[2-7])\\d{7}",[8,10],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2-7]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"]],"0",0,0,0,0,0,[0,["19[1-3]\\d{7}",[10]]]],KR:["82","00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))","00[1-9]\\d{8,11}|(?:[12]|5\\d{3})\\d{7}|[13-6]\\d{9}|(?:[1-6]\\d|80)\\d{7}|[3-6]\\d{4,5}|(?:00|7)0\\d{8}",[5,6,8,9,10,11,12,13,14],[["(\\d{2})(\\d{3,4})","$1-$2",["(?:3[1-3]|[46][1-4]|5[1-5])1"],"0$1"],["(\\d{4})(\\d{4})","$1-$2",["1"]],["(\\d)(\\d{3,4})(\\d{4})","$1-$2-$3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["60|8"],"0$1"],["(\\d{2})(\\d{3,4})(\\d{4})","$1-$2-$3",["[1346]|5[1-5]"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[57]"],"0$1"],["(\\d{2})(\\d{5})(\\d{4})","$1-$2-$3",["5"],"0$1"]],"0",0,"0(8(?:[1-46-8]|5\\d\\d))?",0,0,0,[0,["1(?:05(?:[0-8]\\d|9[0-6])|22[13]\\d)\\d{4,5}|1(?:0[1-46-9]|[16-9]\\d|2[013-9])\\d{6,7}",[9,10]]]],KW:["965","00","18\\d{5}|(?:[2569]\\d|41)\\d{6}",[7,8],[["(\\d{4})(\\d{3,4})","$1 $2",["[169]|2(?:[235]|4[1-35-9])|52"]],["(\\d{3})(\\d{5})","$1 $2",["[245]"]]],0,0,0,0,0,0,[0,["(?:41\\d\\d|5(?:(?:[05]\\d|1[0-7]|6[56])\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\d)\\d|1(?:00|11|66)|222|3[36]3|444|7(?:0[013-9]|[67]\\d)|888|9(?:[069]\\d|3[039]))|9(?:(?:0[09]|[4679]\\d|8[057-9])\\d|1(?:1[01]|99)|2(?:00|2\\d)|3(?:00|3[03])|5(?:00|5\\d)))\\d{4}",[8]]]],KY:["1","011","(?:345|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","345$1",0,"345",[0,["345(?:32[1-9]|42[0-4]|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\d{4}"]]],KZ:["7","810","(?:33622|8\\d{8})\\d{5}|[78]\\d{9}",[10,14],0,"8",0,0,0,0,"33|7",[0,["7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\d{7}",[10]]],"8~10"],LA:["856","00","[23]\\d{9}|3\\d{8}|(?:[235-8]\\d|41)\\d{6}",[8,9,10],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2[13]|3[14]|[4-8]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["30[013-9]"],"0$1"],["(\\d{2})(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[23]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:20(?:[2359]\\d|7[6-8]|88)|302\\d)\\d{6}",[10]]]],LB:["961","00","[27-9]\\d{7}|[13-9]\\d{6}",[7,8],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-69]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[27-9]"]]],"0",0,0,0,0,0,[0,["793(?:[01]\\d|2[0-4])\\d{3}|(?:(?:3|81)\\d|7(?:[01]\\d|6[013-9]|8[89]|9[12]))\\d{5}"]]],LC:["1","011","(?:[58]\\d\\d|758|900)\\d{7}",[10],0,"1",0,"([2-8]\\d{6})$|1","758$1",0,"758",[0,["758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\d|3[0-3])|812)\\d{4}"]]],LI:["423","00","[68]\\d{8}|(?:[2378]\\d|90)\\d{5}",[7,9],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[2379]|8(?:0[09]|7)","[2379]|8(?:0(?:02|9)|7)"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["69"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]]],"0",0,"(1001)|0",0,0,0,[0,["(?:6(?:(?:4[5-9]|5[0-4])\\d|6(?:[0245]\\d|[17]0|3[7-9]))\\d|7(?:[37-9]\\d|42|56))\\d{4}"]]],LK:["94","00","[1-9]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[1-689]"],"0$1"]],"0",0,0,0,0,0,[0,["7(?:[0-25-8]\\d|4[0-4])\\d{6}"]]],LR:["231","00","(?:[25]\\d|33|77|88)\\d{7}|(?:2\\d|[4-6])\\d{6}",[7,8,9],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[4-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[23578]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:(?:(?:22|33)0|555|(?:77|88)\\d)\\d|4[67])\\d{5}|[56]\\d{6}",[7,9]]]],LS:["266","00","(?:[256]\\d\\d|800)\\d{5}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[2568]"]]],0,0,0,0,0,0,[0,["[56]\\d{7}"]]],LT:["370","00","(?:[3469]\\d|52|[78]0)\\d{6}",[8],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["52[0-7]"],"(8-$1)",1],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[7-9]"],"8 $1",1],["(\\d{2})(\\d{6})","$1 $2",["37|4(?:[15]|6[1-8])"],"(8-$1)",1],["(\\d{3})(\\d{5})","$1 $2",["[3-6]"],"(8-$1)",1]],"8",0,"[08]",0,0,0,[0,["6\\d{7}"]]],LU:["352","00","35[013-9]\\d{4,8}|6\\d{8}|35\\d{2,4}|(?:[2457-9]\\d|3[0-46-9])\\d{2,9}",[4,5,6,7,8,9,10,11],[["(\\d{2})(\\d{3})","$1 $2",["2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])"]],["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])"]],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["20[2-689]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4",["2(?:[0367]|4[3-8])"]],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["80[01]|90[015]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["20"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4 $5",["2(?:[0367]|4[3-8])"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{1,5})","$1 $2 $3 $4",["[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]"]]],0,0,"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\d)",0,0,0,[0,["6(?:[269][18]|5[1568]|7[189]|81)\\d{6}",[9]]]],LV:["371","00","(?:[268]\\d|90)\\d{6}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[269]|8[01]"]]],0,0,0,0,0,0,[0,["23(?:23[0-57-9]|33[0238])\\d{3}|2(?:[0-24-9]\\d\\d|3(?:0[07]|[14-9]\\d|2[024-9]|3[0-24-9]))\\d{4}"]]],LY:["218","00","[2-9]\\d{8}",[9],[["(\\d{2})(\\d{7})","$1-$2",["[2-9]"],"0$1"]],"0",0,0,0,0,0,[0,["9[1-6]\\d{7}"]]],MA:["212","00","[5-8]\\d{8}",[9],[["(\\d{5})(\\d{4})","$1-$2",["5(?:29|38)","5(?:29[1289]|389)","529(?:1[1-46-9]|2[013-8]|90)|5(?:298|389)[0-46-9]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["5[45]"],"0$1"],["(\\d{4})(\\d{5})","$1-$2",["5(?:2[2-489]|3[5-9]|9)|892","5(?:2(?:[2-49]|8[235-9])|3[5-9]|9)|892"],"0$1"],["(\\d{2})(\\d{7})","$1-$2",["8"],"0$1"],["(\\d{3})(\\d{6})","$1-$2",["[5-7]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:6(?:[0-79]\\d|8[0-247-9])|7(?:[017]\\d|2[0-2]|6[0-8]|8[0-3]))\\d{6}"]]],MC:["377","00","(?:[3489]|6\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["4"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[389]"]],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["6"],"0$1"]],"0",0,0,0,0,0,[0,["4(?:[46]\\d|5[1-9])\\d{5}|(?:3|6\\d)\\d{7}"]]],MD:["373","00","(?:[235-7]\\d|[89]0)\\d{6}",[8],[["(\\d{3})(\\d{5})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["22|3"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[25-7]"],"0$1"]],"0",0,0,0,0,0,[0,["562\\d{5}|(?:6\\d|7[16-9])\\d{6}"]]],ME:["382","00","(?:20|[3-79]\\d)\\d{6}|80\\d{6,7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"],"0$1"]],"0",0,0,0,0,0,[0,["6(?:[07-9]\\d|3[024]|6[0-25])\\d{5}",[8]]]],MF:["590","00","590\\d{6}|(?:69|80|9\\d)\\d{7}",[9],0,"0",0,0,0,0,0,[0,["69(?:0\\d\\d|1(?:2[2-9]|3[0-5]))\\d{4}"]]],MG:["261","00","[23]\\d{8}",[9],[["(\\d{2})(\\d{2})(\\d{3})(\\d{2})","$1 $2 $3 $4",["[23]"],"0$1"]],"0",0,"([24-9]\\d{6})$|0","20$1",0,0,[0,["3[2-47-9]\\d{7}"]]],MH:["692","011","329\\d{4}|(?:[256]\\d|45)\\d{5}",[7],[["(\\d{3})(\\d{4})","$1-$2",["[2-6]"]]],"1",0,0,0,0,0,[0,["(?:(?:23|54)5|329|45[356])\\d{4}"]]],MK:["389","00","[2-578]\\d{7}",[8],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2|34[47]|4(?:[37]7|5[47]|64)"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[347]"],"0$1"],["(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["[58]"],"0$1"]],"0",0,0,0,0,0,[0,["7(?:3555|(?:474|9[019]7)7)\\d{3}|7(?:[0-25-8]\\d\\d|3(?:[1-48]\\d|7[01578])|4(?:2\\d|60|7[01578])|9(?:[2-4]\\d|5[01]|7[015]))\\d{4}"]]],ML:["223","00","[24-9]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24-9]"]]],0,0,0,0,0,0,[0,["2(?:0(?:01|79)|17\\d)\\d{4}|(?:5[01]|[679]\\d|8[2-49])\\d{6}"]]],MM:["95","00","1\\d{5,7}|95\\d{6}|(?:[4-7]|9[0-46-9])\\d{6,8}|(?:2|8\\d)\\d{5,8}",[6,7,8,9,10],[["(\\d)(\\d{2})(\\d{3})","$1 $2 $3",["16|2"],"0$1"],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[45]|6(?:0[23]|[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-6]"],"0$1"],["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[12]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[4-7]|8[1-35]"],"0$1"],["(\\d)(\\d{3})(\\d{4,6})","$1 $2 $3",["9(?:2[0-4]|[35-9]|4[137-9])"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["92"],"0$1"],["(\\d)(\\d{5})(\\d{4})","$1 $2 $3",["9"],"0$1"]],"0",0,0,0,0,0,[0,["(?:17[01]|9(?:2(?:[0-4]|[56]\\d\\d)|(?:3(?:[0-36]|4\\d)|(?:6\\d|8[89]|9[4-8])\\d|7(?:3|40|[5-9]\\d))\\d|4(?:(?:[0245]\\d|[1379])\\d|88)|5[0-6])\\d)\\d{4}|9[69]1\\d{6}|9(?:[68]\\d|9[089])\\d{5}",[7,8,9,10]]]],MN:["976","001","[12]\\d{7,9}|[5-9]\\d{7}",[8,9,10],[["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[12]1"],"0$1"],["(\\d{4})(\\d{4})","$1 $2",["[5-9]"]],["(\\d{3})(\\d{5,6})","$1 $2",["[12]2[1-3]"],"0$1"],["(\\d{4})(\\d{5,6})","$1 $2",["[12](?:27|3[2-8]|4[2-68]|5[1-4689])","[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]"],"0$1"],["(\\d{5})(\\d{4,5})","$1 $2",["[12]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:83[01]|920)\\d{5}|(?:5[05]|6[069]|8[015689]|9[013-9])\\d{6}",[8]]]],MO:["853","00","0800\\d{3}|(?:28|[68]\\d)\\d{6}",[7,8],[["(\\d{4})(\\d{3})","$1 $2",["0"]],["(\\d{4})(\\d{4})","$1 $2",["[268]"]]],0,0,0,0,0,0,[0,["6800[0-79]\\d{3}|6(?:[235]\\d\\d|6(?:0[0-5]|[1-9]\\d)|8(?:0[1-9]|[14-8]\\d|2[5-9]|[39][0-4]))\\d{4}",[8]]]],MP:["1","011","[58]\\d{9}|(?:67|90)0\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","670$1",0,"670",[0,["670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\d{4}"]]],MQ:["596","00","596\\d{6}|(?:69|80|9\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[569]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[0,["69(?:6(?:[0-46-9]\\d|5[0-6])|727)\\d{4}"]]],MR:["222","00","(?:[2-4]\\d\\d|800)\\d{5}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-48]"]]],0,0,0,0,0,0,[0,["[2-4][0-46-9]\\d{6}"]]],MS:["1","011","(?:[58]\\d\\d|664|900)\\d{7}",[10],0,"1",0,"([34]\\d{6})$|1","664$1",0,"664",[0,["664(?:3(?:49|9[1-6])|49[2-6])\\d{4}"]]],MT:["356","00","3550\\d{4}|(?:[2579]\\d\\d|800)\\d{5}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[2357-9]"]]],0,0,0,0,0,0,[0,["(?:7(?:210|[79]\\d\\d)|9(?:[29]\\d\\d|69[67]|8(?:1[1-3]|89|97)))\\d{4}"]]],MU:["230","0(?:0|[24-7]0|3[03])","(?:[57]|8\\d\\d)\\d{7}|[2-468]\\d{6}",[7,8,10],[["(\\d{3})(\\d{4})","$1 $2",["[2-46]|8[013]"]],["(\\d{4})(\\d{4})","$1 $2",["[57]"]],["(\\d{5})(\\d{5})","$1 $2",["8"]]],0,0,0,0,0,0,[0,["5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\d|8[0-689]|9[0-8])|7(?:0[0-2]|3[013]))\\d{5}",[8]]],"020"],MV:["960","0(?:0|19)","(?:800|9[0-57-9]\\d)\\d{7}|[34679]\\d{6}",[7,10],[["(\\d{3})(\\d{4})","$1-$2",["[34679]"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"]]],0,0,0,0,0,0,[0,["(?:46[46]|[79]\\d\\d)\\d{4}",[7]]],"00"],MW:["265","00","(?:[1289]\\d|31|77)\\d{7}|1\\d{6}",[7,9],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["1[2-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["2"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[137-9]"],"0$1"]],"0",0,0,0,0,0,[0,["111\\d{6}|(?:31|77|[89][89])\\d{7}",[9]]]],MX:["52","0[09]","1(?:(?:[27]2|44|99)[1-9]|65[0-689])\\d{7}|(?:1(?:[01]\\d|2[13-9]|[35][1-9]|4[0-35-9]|6[0-46-9]|7[013-9]|8[1-79]|9[1-8])|[2-9]\\d)\\d{8}",[10,11],[["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["33|5[56]|81"],0,1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2-9]"],0,1],["(\\d)(\\d{2})(\\d{4})(\\d{4})","$2 $3 $4",["1(?:33|5[56]|81)"],0,1],["(\\d)(\\d{3})(\\d{3})(\\d{4})","$2 $3 $4",["1"],0,1]],"01",0,"0(?:[12]|4[45])|1",0,0,0,[0,["657[12]\\d{6}|(?:1(?:2(?:2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-7][1-9]|3[1-8]|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))|2(?:2\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\d|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\d))\\d{7}"]],"00"],MY:["60","00","1\\d{8,9}|(?:3\\d|[4-9])\\d{7}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1-$2 $3",["[4-79]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1-$2 $3",["1(?:[02469]|[378][1-9]|53)|8","1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1-$2 $3",["3"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3-$4",["1(?:[367]|80)"]],["(\\d{3})(\\d{3})(\\d{4})","$1-$2 $3",["15"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2 $3",["1"],"0$1"]],"0",0,0,0,0,0,[0,["1(?:1888[689]|4400|8(?:47|8[27])[0-4])\\d{4}|1(?:0(?:[23568]\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\d\\d|6(?:0[5-9]|[1-9]\\d)|7(?:[0-4]\\d|5[0-6]))|(?:[269]\\d|[37][1-9]|4[235-9])\\d|5(?:31|9\\d\\d)|8(?:1[23]|[236]\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\d{5}",[9,10]]]],MZ:["258","00","(?:2|8\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2|8[2-79]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["8[2-79]\\d{7}",[9]]]],NA:["264","00","[68]\\d{7,8}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["88"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["6"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["87"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"]],"0",0,0,0,0,0,[0,["(?:60|8[1245])\\d{7}",[9]]]],NC:["687","00","(?:050|[2-57-9]\\d\\d)\\d{3}",[6],[["(\\d{2})(\\d{2})(\\d{2})","$1.$2.$3",["[02-57-9]"]]],0,0,0,0,0,0,[0,["(?:5[0-4]|[79]\\d|8[0-79])\\d{4}"]]],NE:["227","00","[027-9]\\d{7}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["08"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[089]|2[013]|7[04]"]]],0,0,0,0,0,0,[0,["(?:23|7[04]|[89]\\d)\\d{6}"]]],NF:["672","00","[13]\\d{5}",[6],[["(\\d{2})(\\d{4})","$1 $2",["1[0-3]"]],["(\\d)(\\d{5})","$1 $2",["[13]"]]],0,0,"([0-258]\\d{4})$","3$1",0,0,[0,["(?:14|3[58])\\d{4}"]]],NG:["234","009","(?:[124-7]|9\\d{3})\\d{6}|[1-9]\\d{7}|[78]\\d{9,13}",[7,8,10,11,12,13,14],[["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["78"],"0$1"],["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[12]|9(?:0[3-9]|[1-9])"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["[3-7]|8[2-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[7-9]"],"0$1"],["(\\d{3})(\\d{4})(\\d{4,5})","$1 $2 $3",["[78]"],"0$1"],["(\\d{3})(\\d{5})(\\d{5,6})","$1 $2 $3",["[78]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:702[0-24-9]|819[01])\\d{6}|(?:70[13-689]|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-356]))\\d{7}",[10]]]],NI:["505","00","(?:1800|[25-8]\\d{3})\\d{4}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[125-8]"]]],0,0,0,0,0,0,[0,["(?:5(?:5[0-7]|[78]\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\d)\\d)\\d{5}"]]],NL:["31","00","(?:[124-7]\\d\\d|3(?:[02-9]\\d|1[0-8]))\\d{6}|8\\d{6,9}|9\\d{6,10}|1\\d{4,5}",[5,6,7,8,9,10,11],[["(\\d{3})(\\d{4,7})","$1 $2",["[89]0"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["66"],"0$1"],["(\\d)(\\d{8})","$1 $2",["6"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["1[16-8]|2[259]|3[124]|4[17-9]|5[124679]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-578]|91"],"0$1"],["(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3",["9"],"0$1"]],"0",0,0,0,0,0,[0,["(?:6[1-58]|970\\d)\\d{7}",[9,11]]]],NO:["47","00","(?:0|[2-9]\\d{3})\\d{4}",[5,8],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["8"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-79]"]]],0,0,0,0,0,"[02-689]|7[0-8]",[0,["(?:4[015-8]|59|9\\d)\\d{6}",[8]]]],NP:["977","00","(?:1\\d|9)\\d{9}|[1-9]\\d{7}",[8,10,11],[["(\\d)(\\d{7})","$1-$2",["1[2-6]"],"0$1"],["(\\d{2})(\\d{6})","$1-$2",["1[01]|[2-8]|9(?:[1-59]|[67][2-6])"],"0$1"],["(\\d{3})(\\d{7})","$1-$2",["9"]]],"0",0,0,0,0,0,[0,["9(?:6[0-3]|7[024-6]|8[0-24-68])\\d{7}",[10]]]],NR:["674","00","(?:444|(?:55|8\\d)\\d|666)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[4-68]"]]],0,0,0,0,0,0,[0,["(?:55[3-9]|666|8\\d\\d)\\d{4}"]]],NU:["683","00","(?:[47]|888\\d)\\d{3}",[4,7],[["(\\d{3})(\\d{4})","$1 $2",["8"]]],0,0,0,0,0,0,[0,["888[4-9]\\d{3}",[7]]]],NZ:["64","0(?:0|161)","[29]\\d{7,9}|50\\d{5}(?:\\d{2,3})?|6[0-35-9]\\d{6}|7\\d{7,8}|8\\d{4,9}|(?:11\\d|[34])\\d{7}",[5,6,7,8,9,10],[["(\\d{2})(\\d{3,8})","$1 $2",["8[1-579]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["50[036-8]|[89]0","50(?:[0367]|88)|[89]0"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["24|[346]|7[2-57-9]|9[2-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:10|74)|[59]|80"],"0$1"],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["1|2[028]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,5})","$1 $2 $3",["2(?:[169]|7[0-35-9])|7|86"],"0$1"]],"0",0,0,0,0,0,[0,["2[0-27-9]\\d{7,8}|21\\d{6}",[8,9,10]]],"00"],OM:["968","00","(?:1505|[279]\\d{3}|500)\\d{4}|800\\d{5,6}",[7,8,9],[["(\\d{3})(\\d{4,6})","$1 $2",["[58]"]],["(\\d{2})(\\d{6})","$1 $2",["2"]],["(\\d{4})(\\d{4})","$1 $2",["[179]"]]],0,0,0,0,0,0,[0,["1505\\d{4}|(?:7(?:[1289]\\d|7[0-5])|9(?:0[1-9]|[1-9]\\d))\\d{5}",[8]]]],PA:["507","00","(?:00800|8\\d{3})\\d{6}|[68]\\d{7}|[1-57-9]\\d{6}",[7,8,10,11],[["(\\d{3})(\\d{4})","$1-$2",["[1-57-9]"]],["(\\d{4})(\\d{4})","$1-$2",["[68]"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["(?:1[16]1|21[89]|6\\d{3}|8(?:1[01]|7[23]))\\d{4}",[7,8]]]],PE:["51","00|19(?:1[124]|77|90)00","(?:[14-8]|9\\d)\\d{7}",[8,9],[["(\\d{3})(\\d{5})","$1 $2",["80"],"(0$1)"],["(\\d)(\\d{7})","$1 $2",["1"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["[4-8]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["9"]]],"0",0,0,0,0,0,[0,["9\\d{8}",[9]]],"00"," Anexo "],PF:["689","00","4\\d{5}(?:\\d{2})?|8\\d{7,8}",[6,8,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["44"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4|8[7-9]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]]],0,0,0,0,0,0,[0,["8[7-9]\\d{6}",[8]]]],PG:["675","00|140[1-3]","(?:180|[78]\\d{3})\\d{4}|(?:[2-589]\\d|64)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["18|[2-69]|85"]],["(\\d{4})(\\d{4})","$1 $2",["[78]"]]],0,0,0,0,0,0,[0,["(?:7\\d|8[128])\\d{6}",[8]]],"00"],PH:["63","00","(?:[2-7]|9\\d)\\d{8}|2\\d{5}|(?:1800|8)\\d{7,9}",[6,8,9,10,11,12,13],[["(\\d)(\\d{5})","$1 $2",["2"],"(0$1)"],["(\\d{4})(\\d{4,6})","$1 $2",["3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2","3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))"],"(0$1)"],["(\\d{5})(\\d{4})","$1 $2",["346|4(?:27|9[35])|883","3469|4(?:279|9(?:30|56))|8834"],"(0$1)"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[3-7]|8[2-8]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"],"0$1"],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]],["(\\d{4})(\\d{1,2})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1"]]],"0",0,0,0,0,0,[0,["(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\d|4[2-9]|8[135-9]|9[1-9]))\\d{7}",[10]]]],PK:["92","00","122\\d{6}|[24-8]\\d{10,11}|9(?:[013-9]\\d{8,10}|2(?:[01]\\d\\d|2(?:[06-8]\\d|1[01]))\\d{7})|(?:[2-8]\\d{3}|92(?:[0-7]\\d|8[1-9]))\\d{6}|[24-9]\\d{8}|[89]\\d{7}",[8,9,10,11,12],[["(\\d{3})(\\d{3})(\\d{2,7})","$1 $2 $3",["[89]0"],"0$1"],["(\\d{4})(\\d{5})","$1 $2",["1"]],["(\\d{3})(\\d{6,7})","$1 $2",["2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])","9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]"],"(0$1)"],["(\\d{2})(\\d{7,8})","$1 $2",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]"],"(0$1)"],["(\\d{5})(\\d{5})","$1 $2",["58"],"(0$1)"],["(\\d{3})(\\d{7})","$1 $2",["3"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[24-9]"],"(0$1)"]],"0",0,0,0,0,0,[0,["3(?:[0-24]\\d|3[0-7]|55|64)\\d{7}",[10]]]],PL:["48","00","(?:6|8\\d\\d)\\d{7}|[1-9]\\d{6}(?:\\d{2})?|[26]\\d{5}",[6,7,8,9,10],[["(\\d{5})","$1",["19"]],["(\\d{3})(\\d{3})","$1 $2",["11|20|64"]],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1","(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19"]],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["64"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)"]],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[2-8]|[2-7]|8[1-79]|9[145]"]],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["8"]]],0,0,0,0,0,0,[0,["21(?:1(?:[145]\\d|3[1-5])|2[0-4]\\d)\\d{4}|(?:45|5[0137]|6[069]|7[2389]|88)\\d{7}",[9]]]],PM:["508","00","[45]\\d{5}|(?:708|80\\d)\\d{6}",[6,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[45]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[0,["(?:4[02-4]|5[056]|708[45][0-5])\\d{4}"]]],PR:["1","011","(?:[589]\\d\\d|787)\\d{7}",[10],0,"1",0,0,0,0,"787|939",[0,["(?:787|939)[2-9]\\d{6}"]]],PS:["970","00","[2489]2\\d{6}|(?:1\\d|5)\\d{8}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2489]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["5"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0",0,0,0,0,0,[0,["5[69]\\d{7}",[9]]]],PT:["351","00","1693\\d{5}|(?:[26-9]\\d|30)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["2[12]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["16|[236-9]"]]],0,0,0,0,0,0,[0,["6(?:[06]92(?:30|9\\d)|[35]92(?:3[03]|9\\d))\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\d\\d|480))\\d{5}"]]],PW:["680","01[12]","(?:[24-8]\\d\\d|345|900)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-9]"]]],0,0,0,0,0,0,[0,["(?:(?:46|83)[0-5]|6[2-4689]0)\\d{4}|(?:45|77|88)\\d{5}"]]],PY:["595","00","59\\d{4,6}|9\\d{5,10}|(?:[2-46-8]\\d|5[0-8])\\d{4,7}",[6,7,8,9,10,11],[["(\\d{3})(\\d{3,6})","$1 $2",["[2-9]0"],"0$1"],["(\\d{2})(\\d{5})","$1 $2",["[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]"],"(0$1)"],["(\\d{3})(\\d{4,5})","$1 $2",["2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["87"]],["(\\d{3})(\\d{6})","$1 $2",["9(?:[5-79]|8[1-6])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]"],"0$1"],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["9"]]],"0",0,0,0,0,0,[0,["9(?:51|6[129]|[78][1-6]|9[1-5])\\d{6}",[9]]]],QA:["974","00","800\\d{4}|(?:2|800)\\d{6}|(?:0080|[3-7])\\d{7}",[7,8,9,11],[["(\\d{3})(\\d{4})","$1 $2",["2[16]|8"]],["(\\d{4})(\\d{4})","$1 $2",["[3-7]"]]],0,0,0,0,0,0,[0,["[35-7]\\d{7}",[8]]]],RE:["262","00","(?:26|[689]\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2689]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:69(?:2\\d\\d|3(?:0[0-46]|1[013]|2[0-2]|3[0-39]|4\\d|5[0-5]|6[0-6]|7[0-27]|8[0-8]|9[0-479]))|9(?:399[0-3]|479[0-2]|76(?:2[27]|3[0-37]|9\\d)))\\d{4}"]]],RO:["40","00","(?:[2378]\\d|90)\\d{7}|[23]\\d{5}",[6,9],[["(\\d{3})(\\d{3})","$1 $2",["2[3-6]","2[3-6]\\d9"],"0$1"],["(\\d{2})(\\d{4})","$1 $2",["219|31"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[23]1"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[237-9]"],"0$1"]],"0",0,0,0,0,0,[0,["7020\\d{5}|7(?:0[013-9]|1[0-3]|[2-7]\\d|8[03-8]|9[0-29])\\d{6}",[9]]],0," int "],RS:["381","00","38[02-9]\\d{6,9}|6\\d{7,9}|90\\d{4,8}|38\\d{5,6}|(?:7\\d\\d|800)\\d{3,9}|(?:[12]\\d|3[0-79])\\d{5,10}",[6,7,8,9,10,11,12],[["(\\d{3})(\\d{3,9})","$1 $2",["(?:2[389]|39)0|[7-9]"],"0$1"],["(\\d{2})(\\d{5,10})","$1 $2",["[1-36]"],"0$1"]],"0",0,0,0,0,0,[0,["6(?:[0-689]|7\\d)\\d{6,7}",[8,9,10]]]],RU:["7","810","8\\d{13}|[347-9]\\d{9}",[10,14],[["(\\d{4})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["7(?:1[0-8]|2[1-9])","7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))","7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2"],"8 ($1)",1],["(\\d{5})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["7(?:1[0-68]|2[1-9])","7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))","7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]"],"8 ($1)",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"8 ($1)",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[349]|8(?:[02-7]|1[1-8])"],"8 ($1)",1],["(\\d{4})(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["8"],"8 ($1)"]],"8",0,0,0,0,"3[04-689]|[489]",[0,["9\\d{9}",[10]]],"8~10"],RW:["250","00","(?:06|[27]\\d\\d|[89]00)\\d{6}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[7-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["2"]]],"0",0,0,0,0,0,[0,["7[2389]\\d{7}",[9]]]],SA:["966","00","92\\d{7}|(?:[15]|8\\d)\\d{8}",[9,10],[["(\\d{4})(\\d{5})","$1 $2",["9"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["81"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]]],"0",0,0,0,0,0,[0,["579[01]\\d{5}|5(?:[013-689]\\d|7[0-35-8])\\d{6}",[9]]]],SB:["677","0[01]","(?:[1-6]|[7-9]\\d\\d)\\d{4}",[5,7],[["(\\d{2})(\\d{5})","$1 $2",["7|8[4-9]|9(?:[1-8]|9[0-8])"]]],0,0,0,0,0,0,[0,["48\\d{3}|(?:(?:7[1-9]|8[4-9])\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\d{4}"]]],SC:["248","010|0[0-2]","800\\d{4}|(?:[249]\\d|64)\\d{5}",[7],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[246]|9[57]"]]],0,0,0,0,0,0,[0,["2[125-8]\\d{5}"]],"00"],SD:["249","00","[19]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[19]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:1[0-2]|9[0-3569])\\d{7}"]]],SE:["46","00","(?:[26]\\d\\d|9)\\d{9}|[1-9]\\d{8}|[1-689]\\d{7}|[1-4689]\\d{6}|2\\d{5}",[6,7,8,9,10],[["(\\d{2})(\\d{2,3})(\\d{2})","$1-$2 $3",["20"],"0$1",0,"$1 $2 $3"],["(\\d{3})(\\d{4})","$1-$2",["9(?:00|39|44|9)"],"0$1",0,"$1 $2"],["(\\d{2})(\\d{3})(\\d{2})","$1-$2 $3",["[12][136]|3[356]|4[0246]|6[03]|90[1-9]"],"0$1",0,"$1 $2 $3"],["(\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["8"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2,3})(\\d{2})","$1-$2 $3",["1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])"],"0$1",0,"$1 $2 $3"],["(\\d{3})(\\d{2,3})(\\d{3})","$1-$2 $3",["9(?:00|39|44)"],"0$1",0,"$1 $2 $3"],["(\\d{2})(\\d{2,3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]"],"0$1",0,"$1 $2 $3 $4"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["10|7"],"0$1",0,"$1 $2 $3 $4"],["(\\d)(\\d{3})(\\d{3})(\\d{2})","$1-$2 $3 $4",["8"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1-$2 $3 $4",["[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{2})(\\d{3})","$1-$2 $3 $4",["9"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4 $5",["[26]"],"0$1",0,"$1 $2 $3 $4 $5"]],"0",0,0,0,0,0,[0,["7[02369]\\d{7}",[9]]]],SG:["65","0[0-3]\\d","(?:(?:1\\d|8)\\d\\d|7000)\\d{7}|[3689]\\d{7}",[8,10,11],[["(\\d{4})(\\d{4})","$1 $2",["[369]|8(?:0[1-6]|[1-9])"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]],["(\\d{4})(\\d{4})(\\d{3})","$1 $2 $3",["7"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]]],0,0,0,0,0,0,[0,["8(?:06[0-689]|95[0-2])\\d{4}|(?:8(?:0[1-5]|[1-8]\\d|9[0-4])|9[0-8]\\d)\\d{5}",[8]]]],SH:["290","00","(?:[256]\\d|8)\\d{3}",[4,5],0,0,0,0,0,0,"[256]",[0,["[56]\\d{4}",[5]]]],SI:["386","00|10(?:22|66|88|99)","[1-7]\\d{7}|8\\d{4,7}|90\\d{4,6}",[5,6,7,8],[["(\\d{2})(\\d{3,6})","$1 $2",["8[09]|9"],"0$1"],["(\\d{3})(\\d{5})","$1 $2",["59|8"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[37][01]|4[0139]|51|6"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-57]"],"(0$1)"]],"0",0,0,0,0,0,[0,["65(?:[178]\\d|5[56]|6[01])\\d{4}|(?:[37][01]|4[0139]|51|6[489])\\d{6}",[8]]],"00"],SJ:["47","00","0\\d{4}|(?:[489]\\d|[57]9)\\d{6}",[5,8],0,0,0,0,0,0,"79",[0,["(?:4[015-8]|59|9\\d)\\d{6}",[8]]]],SK:["421","00","[2-689]\\d{8}|[2-59]\\d{6}|[2-5]\\d{5}",[6,7,9],[["(\\d)(\\d{2})(\\d{3,4})","$1 $2 $3",["21"],"0$1"],["(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["[3-5][1-8]1","[3-5][1-8]1[67]"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{2})","$1/$2 $3 $4",["2"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[689]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1/$2 $3 $4",["[3-5]"],"0$1"]],"0",0,0,0,0,0,[0,["909[1-9]\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\d)\\d{6}",[9]]]],SL:["232","00","(?:[237-9]\\d|66)\\d{6}",[8],[["(\\d{2})(\\d{6})","$1 $2",["[236-9]"],"(0$1)"]],"0",0,0,0,0,0,[0,["(?:25|3[0-5]|66|7[2-9]|8[08]|9[09])\\d{6}"]]],SM:["378","00","(?:0549|[5-7]\\d)\\d{6}",[8,10],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-7]"]],["(\\d{4})(\\d{6})","$1 $2",["0"]]],0,0,"([89]\\d{5})$","0549$1",0,0,[0,["6[16]\\d{6}",[8]]]],SN:["221","00","(?:[378]\\d|93)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[379]"]]],0,0,0,0,0,0,[0,["7(?:(?:[06-8]\\d|21|90)\\d|5(?:01|[19]0|25|[38]3|[4-7]\\d))\\d{5}"]]],SO:["252","00","[346-9]\\d{8}|[12679]\\d{7}|[1-5]\\d{6}|[1348]\\d{5}",[6,7,8,9],[["(\\d{2})(\\d{4})","$1 $2",["8[125]"]],["(\\d{6})","$1",["[134]"]],["(\\d)(\\d{6})","$1 $2",["[15]|2[0-79]|3[0-46-8]|4[0-7]"]],["(\\d)(\\d{7})","$1 $2",["(?:2|90)4|[67]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[3478]|64|90"]],["(\\d{2})(\\d{5,7})","$1 $2",["1|28|6(?:0[5-7]|[1-35-9])|9[2-9]"]]],"0",0,0,0,0,0,[0,["(?:(?:15|(?:3[59]|4[89]|79|8[08])\\d|6(?:0[5-7]|[1-9]\\d)|9(?:0\\d|[2-9]))\\d|2(?:4\\d|8))\\d{5}|(?:[67]\\d\\d|904)\\d{5}",[7,8,9]]]],SR:["597","00","(?:[2-5]|68|[78]\\d)\\d{5}",[6,7],[["(\\d{2})(\\d{2})(\\d{2})","$1-$2-$3",["56"]],["(\\d{3})(\\d{3})","$1-$2",["[2-5]"]],["(\\d{3})(\\d{4})","$1-$2",["[6-8]"]]],0,0,0,0,0,0,[0,["(?:7[124-7]|8[124-9])\\d{5}",[7]]]],SS:["211","00","[19]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[19]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:12|9[1257-9])\\d{7}"]]],ST:["239","00","(?:22|9\\d)\\d{5}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[29]"]]],0,0,0,0,0,0,[0,["900[5-9]\\d{3}|9(?:0[1-9]|[89]\\d)\\d{4}"]]],SV:["503","00","[267]\\d{7}|[89]00\\d{4}(?:\\d{4})?",[7,8,11],[["(\\d{3})(\\d{4})","$1 $2",["[89]"]],["(\\d{4})(\\d{4})","$1 $2",["[267]"]],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["[89]"]]],0,0,0,0,0,0,[0,["66(?:[02-9]\\d\\d|1(?:[02-9]\\d|16))\\d{3}|(?:6[0-57-9]|7\\d)\\d{6}",[8]]]],SX:["1","011","7215\\d{6}|(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"(5\\d{6})$|1","721$1",0,"721",[0,["7215(?:1[02]|2\\d|5[034679]|8[014-8])\\d{4}"]]],SY:["963","00","[1-39]\\d{8}|[1-5]\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-5]"],"0$1",1],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"0$1",1]],"0",0,0,0,0,0,[0,["9[1-689]\\d{7}",[9]]]],SZ:["268","00","0800\\d{4}|(?:[237]\\d|900)\\d{6}",[8,9],[["(\\d{4})(\\d{4})","$1 $2",["[0237]"]],["(\\d{5})(\\d{4})","$1 $2",["9"]]],0,0,0,0,0,0,[0,["7[6-9]\\d{6}",[8]]]],TA:["290","00","8\\d{3}",[4],0,0,0,0,0,0,"8"],TC:["1","011","(?:[58]\\d\\d|649|900)\\d{7}",[10],0,"1",0,"([2-479]\\d{6})$|1","649$1",0,"649",[0,["649(?:2(?:3[129]|4[1-79])|3\\d\\d|4[34][1-3])\\d{4}"]]],TD:["235","00|16","(?:22|[69]\\d|77)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2679]"]]],0,0,0,0,0,0,[0,["(?:6[0235689]|77|9\\d)\\d{6}"]],"00"],TG:["228","00","[279]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[279]"]]],0,0,0,0,0,0,[0,["(?:7[019]|9[0-36-9])\\d{6}"]]],TH:["66","00[1-9]","(?:001800|[2-57]|[689]\\d)\\d{7}|1\\d{7,9}",[8,9,10,13],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[13-9]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0",0,0,0,0,0,[0,["671[0-8]\\d{5}|(?:14|6[1-6]|[89]\\d)\\d{7}",[9]]]],TJ:["992","810","[0-57-9]\\d{8}",[9],[["(\\d{6})(\\d)(\\d{2})","$1 $2 $3",["331","3317"]],["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["[34]7|91[78]"]],["(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["3[1-5]"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[0-57-9]"]]],0,0,0,0,0,0,[0,["41[18]\\d{6}|(?:0[0-27]|1[017]|2[02]|[34]0|5[05]|7[0178]|8[078]|9\\d)\\d{7}"]],"8~10"],TK:["690","00","[2-47]\\d{3,6}",[4,5,6,7],0,0,0,0,0,0,0,[0,["7[2-4]\\d{2,5}"]]],TL:["670","00","7\\d{7}|(?:[2-47]\\d|[89]0)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["[2-489]|70"]],["(\\d{4})(\\d{4})","$1 $2",["7"]]],0,0,0,0,0,0,[0,["7[2-8]\\d{6}",[8]]]],TM:["993","810","[1-6]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["12"],"(8 $1)"],["(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2-$3-$4",["[1-5]"],"(8 $1)"],["(\\d{2})(\\d{6})","$1 $2",["6"],"8 $1"]],"8",0,0,0,0,0,[0,["6\\d{7}"]],"8~10"],TN:["216","00","[2-57-9]\\d{7}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-57-9]"]]],0,0,0,0,0,0,[0,["3(?:001|[12]40)\\d{4}|(?:(?:[259]\\d|4[0-7])\\d|3(?:1[1-35]|6[0-4]|91))\\d{5}"]]],TO:["676","00","(?:0800|(?:[5-8]\\d\\d|999)\\d)\\d{3}|[2-8]\\d{4}",[5,7],[["(\\d{2})(\\d{3})","$1-$2",["[2-4]|50|6[09]|7[0-24-69]|8[05]"]],["(\\d{4})(\\d{3})","$1 $2",["0"]],["(\\d{3})(\\d{4})","$1 $2",["[5-9]"]]],0,0,0,0,0,0,[0,["(?:55[4-6]|6(?:[09]\\d|3[02]|8[15-9])|(?:7\\d|8[46-9])\\d|999)\\d{4}",[7]]]],TR:["90","00","4\\d{6}|8\\d{11,12}|(?:[2-58]\\d\\d|900)\\d{7}",[7,10,12,13],[["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["512|8[01589]|90"],"0$1",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["5(?:[0-59]|61)","5(?:[0-59]|616)","5(?:[0-59]|6161)"],"0$1",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24][1-8]|3[1-9]"],"(0$1)",1],["(\\d{3})(\\d{3})(\\d{6,7})","$1 $2 $3",["80"],"0$1",1]],"0",0,0,0,0,0,[0,["56161\\d{5}|5(?:0[15-7]|1[06]|24|[34]\\d|5[1-59]|9[46])\\d{7}",[10]]]],TT:["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-46-8]\\d{6})$|1","868$1",0,"868",[0,["868(?:(?:2[5-9]|3\\d)\\d|4(?:3[0-6]|[6-9]\\d)|6(?:20|78|8\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\d))\\d{4}"]]],TV:["688","00","(?:2|7\\d\\d|90)\\d{4}",[5,6,7],[["(\\d{2})(\\d{3})","$1 $2",["2"]],["(\\d{2})(\\d{4})","$1 $2",["90"]],["(\\d{2})(\\d{5})","$1 $2",["7"]]],0,0,0,0,0,0,[0,["(?:7[01]\\d|90)\\d{4}",[6,7]]]],TW:["886","0(?:0[25-79]|19)","[2-689]\\d{8}|7\\d{9,10}|[2-8]\\d{7}|2\\d{6}",[7,8,9,10,11],[["(\\d{2})(\\d)(\\d{4})","$1 $2 $3",["202"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[258]0"],"0$1"],["(\\d)(\\d{3,4})(\\d{4})","$1 $2 $3",["[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]","[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[49]"],"0$1"],["(\\d{2})(\\d{4})(\\d{4,5})","$1 $2 $3",["7"],"0$1"]],"0",0,0,0,0,0,[0,["(?:40001[0-2]|9[0-8]\\d{4})\\d{3}",[9]]],0,"#"],TZ:["255","00[056]","(?:[25-8]\\d|41|90)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[24]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["5"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[67]"],"0$1"]],"0",0,0,0,0,0,[0,["77[2-9]\\d{6}|(?:6[125-9]|7[13-689])\\d{7}"]]],UA:["380","00","[89]\\d{9}|[3-9]\\d{8}",[9,10],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]","6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]"],"0$1"],["(\\d{4})(\\d{5})","$1 $2",["3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])","3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[3-7]|89|9[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[89]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:39|50|6[36-8]|7[1-3]|9[1-9])\\d{7}",[9]]],"0~0"],UG:["256","00[057]","800\\d{6}|(?:[29]0|[347]\\d)\\d{7}",[9],[["(\\d{4})(\\d{5})","$1 $2",["202","2024"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["[27-9]|4(?:6[45]|[7-9])"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["[34]"],"0$1"]],"0",0,0,0,0,0,[0,["726[01]\\d{5}|7(?:[01578]\\d|20|36|[46][0-4]|9[89])\\d{6}"]]],US:["1","011","[2-9]\\d{9}|3\\d{6}",[10],[["(\\d{3})(\\d{4})","$1-$2",["310"],0,1],["(\\d{3})(\\d{3})(\\d{4})","($1) $2-$3",["[2-9]"],0,1,"$1-$2-$3"]],"1",0,0,0,0,0,[0,["5056(?:[0-35-9]\\d|4[46])\\d{4}|(?:4722|505[2-57-9])\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-589]|3[149]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[01356]|3[0-24679]|4[167]|5[0-2]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-47-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|[34][016]|5[01679]|6[0-279]|78|8[0-29])|7(?:0[1-46-8]|1[2-9]|2[04-7]|3[1247]|4[037]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[068]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-389]|8[04-69]))[2-9]\\d{6}"]]],UY:["598","0(?:0|1[3-9]\\d)","(?:0004|4)\\d{9}|[1249]\\d{7}|(?:[49]\\d|80)\\d{5}",[7,8,10,13],[["(\\d{3})(\\d{4})","$1 $2",["405|8|90"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"0$1"],["(\\d{4})(\\d{4})","$1 $2",["[124]"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["4"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4",["0"]]],"0",0,0,0,0,0,[0,["9[1-9]\\d{6}",[8]]],"00"," int. "],UZ:["998","810","(?:33|[5-79]\\d|88)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[35-9]"],"8 $1"]],"8",0,0,0,0,0,[0,["(?:(?:33|50|88|9[0-57-9])\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\d|61[23]|7(?:[01][017]|4\\d|55|9[5-9]))|2(?:(?:11|7\\d)\\d|2(?:[12]1|9[01379])|5(?:[126]\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\d)\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\d|4(?:56|83)|7(?:[07]\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\d|[39][07])|9(?:0\\d|7[079]))|9(?:2(?:1[1267]|3[01]|5\\d|7[0-4])|(?:5[67]|7\\d)\\d|6(?:2[0-26]|8\\d)))|7(?:[07]\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\d|7(?:0\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\d|5(?:0[0-4]|5[579]|9\\d)|7(?:[0-3579]\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\d|9[5-9])|7(?:0\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\d))|5(?:112|2(?:0\\d|2[29]|[49]4)|3[1568]\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\d|8[78]|9[079]))|6(?:2(?:2[1245]|4[2-4])|39\\d|41[179]|5(?:[349]\\d|5[0-2])|7(?:0[017]|[13]\\d|22|44|55|67|88))|9(?:22[128]|3(?:2[0-4]|7\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\d|60|7[2579]|87|9[07]))))\\d{4}"]],"8~10"],VA:["39","00","0\\d{5,10}|3[0-8]\\d{7,10}|55\\d{8}|8\\d{5}(?:\\d{2,4})?|(?:1\\d|39)\\d{7,8}",[6,7,8,9,10,11],0,0,0,0,0,0,"06698",[0,["3[1-9]\\d{8}|3[2-9]\\d{7}",[9,10]]]],VC:["1","011","(?:[58]\\d\\d|784|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","784$1",0,"784",[0,["784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\d{4}"]]],VE:["58","00","[68]00\\d{7}|(?:[24]\\d|[59]0)\\d{8}",[10],[["(\\d{3})(\\d{7})","$1-$2",["[24-689]"],"0$1"]],"0",0,0,0,0,0,[0,["4(?:1[24-8]|2[46])\\d{7}"]]],VG:["1","011","(?:284|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-578]\\d{6})$|1","284$1",0,"284",[0,["284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\d{4}"]]],VI:["1","011","[58]\\d{9}|(?:34|90)0\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","340$1",0,"340",[0,["340(?:2(?:0[0-368]|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\d)|884|998)\\d{4}"]]],VN:["84","00","[12]\\d{9}|[135-9]\\d{8}|[16]\\d{7}|[16-8]\\d{6}",[7,8,9,10],[["(\\d{2})(\\d{5})","$1 $2",["80"],"0$1",1],["(\\d{4})(\\d{4,6})","$1 $2",["1"],0,1],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[69]"],"0$1",1],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[3578]"],"0$1",1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["2[48]"],"0$1",1],["(\\d{3})(\\d{4})(\\d{3})","$1 $2 $3",["2"],"0$1",1]],"0",0,0,0,0,0,[0,["(?:5(?:2[238]|59)|89[6-9]|99[013-9])\\d{6}|(?:3\\d|5[689]|7[06-9]|8[1-8]|9[0-8])\\d{7}",[9]]]],VU:["678","00","[57-9]\\d{6}|(?:[238]\\d|48)\\d{3}",[5,7],[["(\\d{3})(\\d{4})","$1 $2",["[57-9]"]]],0,0,0,0,0,0,[0,["(?:[58]\\d|7[013-7])\\d{5}",[7]]]],WF:["681","00","(?:40|72)\\d{4}|8\\d{5}(?:\\d{3})?",[6,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[478]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]]],0,0,0,0,0,0,[0,["(?:72|8[23])\\d{4}",[6]]]],WS:["685","0","(?:[2-6]|8\\d{5})\\d{4}|[78]\\d{6}|[68]\\d{5}",[5,6,7,10],[["(\\d{5})","$1",["[2-5]|6[1-9]"]],["(\\d{3})(\\d{3,7})","$1 $2",["[68]"]],["(\\d{2})(\\d{5})","$1 $2",["7"]]],0,0,0,0,0,0,[0,["(?:7[1-35-7]|8(?:[3-7]|9\\d{3}))\\d{5}",[7,10]]]],XK:["383","00","[23]\\d{7,8}|(?:4\\d\\d|[89]00)\\d{5}",[8,9],[["(\\d{3})(\\d{5})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-4]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[23]"],"0$1"]],"0",0,0,0,0,0,[0,["4[3-9]\\d{6}",[8]]]],YE:["967","00","(?:1|7\\d)\\d{7}|[1-7]\\d{6}",[7,8,9],[["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-6]|7(?:[24-6]|8[0-7])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7"],"0$1"]],"0",0,0,0,0,0,[0,["7[01378]\\d{7}",[9]]]],YT:["262","00","(?:(?:(?:26|63)9|80\\d)\\d|9398)\\d{5}",[9],0,"0",0,0,0,0,"269|63|9398",[0,["(?:639(?:0[0-79]|1[019]|[267]\\d|3[09]|40|5[05-9]|9[04-79])|9398[01])\\d{4}"]]],ZA:["27","00","[1-79]\\d{8}|8\\d{4,9}",[5,6,7,8,9,10],[["(\\d{2})(\\d{3,4})","$1 $2",["8[1-4]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["8[1-4]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["860"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"]],"0",0,0,0,0,0,[0,["(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\d{3}|8[1-4]\\d{3,7}|(?:2[27]|47|54)4950\\d{3}|(?:1(?:049[2-4]|9[12]\\d\\d)|(?:6\\d|7[0-46-9])\\d{3}|8(?:5\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\d{3}|(?:12|[2-5]1)492\\d{4}",[5,6,7,8,9]]]],ZM:["260","00","800\\d{6}|(?:21|63|[79]\\d)\\d{7}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[28]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["[79]"],"0$1"]],"0",0,0,0,0,0,[0,["(?:7[5-79]|9[5-8])\\d{7}"]]],ZW:["263","00","2(?:[0-57-9]\\d{6,8}|6[0-24-9]\\d{6,7})|[38]\\d{9}|[35-8]\\d{8}|[3-6]\\d{7}|[1-689]\\d{6}|[1-3569]\\d{5}|[1356]\\d{4}",[5,6,7,8,9,10],[["(\\d{3})(\\d{3,5})","$1 $2",["2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]"],"0$1"],["(\\d)(\\d{3})(\\d{2,4})","$1 $2 $3",["[49]"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["80"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2","2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)","2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)"],"0$1"],["(\\d{4})(\\d{6})","$1 $2",["8"],"0$1"],["(\\d{2})(\\d{3,5})","$1 $2",["1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["29[013-9]|39|54"],"0$1"],["(\\d{4})(\\d{3,5})","$1 $2",["(?:25|54)8","258|5483"],"0$1"]],"0",0,0,0,0,0,[0,["7(?:[178]\\d|3[1-9])\\d{6}",[9]]]]},nonGeographic:{800:["800",0,"(?:00|[1-9]\\d)\\d{6}",[8],[["(\\d{4})(\\d{4})","$1 $2",["\\d"]]],0,0,0,0,0,0,[0,0,["(?:00|[1-9]\\d)\\d{6}"]]],808:["808",0,"[1-9]\\d{7}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[1-9]"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,["[1-9]\\d{7}"]]],870:["870",0,"7\\d{11}|[35-7]\\d{8}",[9,12],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[35-7]"]]],0,0,0,0,0,0,[0,["(?:[356]|774[45])\\d{8}|7[6-8]\\d{7}"]]],878:["878",0,"10\\d{10}",[12],[["(\\d{2})(\\d{5})(\\d{5})","$1 $2 $3",["1"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,["10\\d{10}"]]],881:["881",0,"[0-36-9]\\d{8}",[9],[["(\\d)(\\d{3})(\\d{5})","$1 $2 $3",["[0-36-9]"]]],0,0,0,0,0,0,[0,["[0-36-9]\\d{8}"]]],882:["882",0,"[13]\\d{6}(?:\\d{2,5})?|[19]\\d{7}|(?:[25]\\d\\d|4)\\d{7}(?:\\d{2})?",[7,8,9,10,11,12],[["(\\d{2})(\\d{5})","$1 $2",["16|342"]],["(\\d{2})(\\d{6})","$1 $2",["49"]],["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["1[36]|9"]],["(\\d{2})(\\d{4})(\\d{3})","$1 $2 $3",["3[23]"]],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["16"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["10|23|3(?:[15]|4[57])|4|51"]],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["34"]],["(\\d{2})(\\d{4,5})(\\d{5})","$1 $2 $3",["[1-35]"]]],0,0,0,0,0,0,[0,["342\\d{4}|(?:337|49)\\d{6}|(?:3(?:2|47|7\\d{3})|50\\d{3})\\d{7}",[7,8,9,10,12]],0,0,0,0,0,0,["1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\d{4}|6\\d{5,10})|(?:345\\d|9[89])\\d{6}|(?:10|2(?:3|85\\d)|3(?:[15]|[69]\\d\\d)|4[15-8]|51)\\d{8}"]]],883:["883",0,"(?:[1-4]\\d|51)\\d{6,10}",[8,9,10,11,12],[["(\\d{3})(\\d{3})(\\d{2,8})","$1 $2 $3",["[14]|2[24-689]|3[02-689]|51[24-9]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["510"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["21"]],["(\\d{4})(\\d{4})(\\d{4})","$1 $2 $3",["51[13]"]],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[235]"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,["(?:2(?:00\\d\\d|10)|(?:370[1-9]|51\\d0)\\d)\\d{7}|51(?:00\\d{5}|[24-9]0\\d{4,7})|(?:1[013-79]|2[24-689]|3[02-689]|4[0-4])0\\d{5,9}"]]],888:["888",0,"\\d{11}",[11],[["(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3"]],0,0,0,0,0,0,[0,0,0,0,0,0,["\\d{11}"]]],979:["979",0,"[1359]\\d{8}",[9],[["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[1359]"]]],0,0,0,0,0,0,[0,0,0,["[1359]\\d{8}"]]]}}},306:(t,d,e)=>{e.d(d,{R:()=>ot});var n=e(6183),r=e(2581),a=e(7520);function i(t,d){for(var e=0;e=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function u(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e1;)1&d&&(e+=t),d>>=1,t+=t;return e+t}function f(t,d){return")"===t[d]&&d++,function(t){var d=[],e=0;for(;e=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function O(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e1&&void 0!==arguments[1]?arguments[1]:{}).allowOverflow;if(!t)throw new Error("String is required");var e=E(t.split(""),this.matchTree,!0);if(e&&e.match&&delete e.matchedChars,!e||!e.overflow||d)return e}}],e&&w(d.prototype,e),n&&w(d,n),Object.defineProperty(d,"prototype",{writable:!1}),t}();function E(t,d,e){if("string"==typeof d){var n=t.join("");return 0===d.indexOf(n)?t.length===d.length?{match:!0,matchedChars:t}:{partialMatch:!0}:0===n.indexOf(d)?e&&t.length>d.length?{overflow:!0}:{match:!0,matchedChars:t.slice(0,d.length)}:void 0}if(Array.isArray(d)){for(var r=t.slice(),a=0;a=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function F(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e=0)){var e=this.getTemplateForFormat(t,d);return e?(this.setNationalNumberTemplate(e,d),!0):void 0}}},{key:"getSeparatorAfterNationalPrefix",value:function(t){return this.isNANP||t&&t.nationalPrefixFormattingRule()&&D.test(t.nationalPrefixFormattingRule())?" ":""}},{key:"getInternationalPrefixBeforeCountryCallingCode",value:function(t,d){var e=t.IDDPrefix,n=t.missingPlus;return e?d&&!1===d.spacing?e:e+" ":n?"":"+"}},{key:"getTemplate",value:function(t){if(this.template){for(var d=-1,e=0,n=t.international?this.getInternationalPrefixBeforeCountryCallingCode(t,{spacing:!1}):"";eo.length)){var $=new RegExp("^"+i+"$"),u=e.replace(/\d/g,"9");$.test(u)&&(o=u);var s,f=this.getFormatFormat(t,n);if(this.shouldTryNationalPrefixFormattingRule(t,{international:n,nationalPrefix:r})){var h=f.replace(m.i,t.nationalPrefixFormattingRule());if((0,g.ZP)(t.nationalPrefixFormattingRule())===(r||"")+(0,g.ZP)("$1")&&(f=h,s=!0,r))for(var y=r.length;y>0;)f=f.replace(/\d/,l),y--}var p=o.replace(new RegExp(i),f).replace(new RegExp("9","g"),l);return s||(a?p=c(l,a.length)+" "+p:r&&(p=c(l,r.length)+this.getSeparatorAfterNationalPrefix(t)+p)),n&&(p=(0,T.Z)(p)),p}}},{key:"formatNextNationalNumberDigits",value:function(t){var d=function(t,d,e){for(var n,r=$(e.split(""));!(n=r()).done;){var a=n.value;if(t.slice(d+1).search(s)<0)return;d=t.search(s),t=t.replace(s,a)}return[t,d]}(this.populatedNationalNumberTemplate,this.populatedNationalNumberTemplatePosition,t);if(d)return this.populatedNationalNumberTemplate=d[0],this.populatedNationalNumberTemplatePosition=d[1],f(this.populatedNationalNumberTemplate,this.populatedNationalNumberTemplatePosition+1);this.resetFormat()}},{key:"shouldTryNationalPrefixFormattingRule",value:function(t,d){var e=d.international,n=d.nationalPrefix;if(t.nationalPrefixFormattingRule()){var r=t.usesNationalPrefix();if(r&&n||!r&&!e)return!0}}}])&&k(d.prototype,e),n&&k(d,n),Object.defineProperty(d,"prototype",{writable:!1}),t}(),B=e(3661),_=e(9471),U=e(5227),K=e(3633);function W(t,d){return function(t){if(Array.isArray(t))return t}(t)||function(t,d){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==e)return;var n,r,a=[],i=!0,o=!1;try{for(e=e.call(t);!(i=(n=e.next()).done)&&(a.push(n.value),!d||a.length!==d);i=!0);}catch(t){o=!0,r=t}finally{try{i||null==e.return||e.return()}finally{if(o)throw r}}return a}(t,d)||function(t,d){if(!t)return;if("string"==typeof t)return H(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return H(t,d)}(t,d)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e=3;if(d.appendDigits(t),n&&this.extractIddPrefix(d),this.isWaitingForCountryCallingCode(d)){if(!this.extractCountryCallingCode(d))return}else d.appendNationalSignificantNumberDigits(t);d.international||this.hasExtractedNationalSignificantNumber||this.extractNationalSignificantNumber(d.getNationalDigits(),(function(t){return d.update(t)}))}},{key:"isWaitingForCountryCallingCode",value:function(t){var d=t.international,e=t.callingCode;return d&&!e}},{key:"extractCountryCallingCode",value:function(t){var d=(0,B.Z)("+"+t.getDigitsWithoutInternationalPrefix(),this.defaultCountry,this.defaultCallingCode,this.metadata.metadata),e=d.countryCallingCode,n=d.number;if(e)return t.setCallingCode(e),t.update({nationalSignificantNumber:n}),!0}},{key:"reset",value:function(t){if(t){this.hasSelectedNumberingPlan=!0;var d=t._nationalPrefixForParsing();this.couldPossiblyExtractAnotherNationalSignificantNumber=d&&q.test(d)}else this.hasSelectedNumberingPlan=void 0,this.couldPossiblyExtractAnotherNationalSignificantNumber=void 0}},{key:"extractNationalSignificantNumber",value:function(t,d){if(this.hasSelectedNumberingPlan){var e=(0,U.Z)(t,this.metadata),n=e.nationalPrefix,r=e.nationalNumber,a=e.carrierCode;if(r!==t)return this.onExtractedNationalNumber(n,a,r,t,d),!0}}},{key:"extractAnotherNationalSignificantNumber",value:function(t,d,e){if(!this.hasExtractedNationalSignificantNumber)return this.extractNationalSignificantNumber(t,e);if(this.couldPossiblyExtractAnotherNationalSignificantNumber){var n=(0,U.Z)(t,this.metadata),r=n.nationalPrefix,a=n.nationalNumber,i=n.carrierCode;if(a!==d)return this.onExtractedNationalNumber(r,i,a,t,e),!0}}},{key:"onExtractedNationalNumber",value:function(t,d,e,n,r){var a,i,o=n.lastIndexOf(e);if(o>=0&&o===n.length-e.length){i=!0;var $=n.slice(0,o);$!==t&&(a=$)}r({nationalPrefix:t,carrierCode:d,nationalSignificantNumber:e,nationalSignificantNumberMatchesInput:i,complexPrefixBeforeNationalSignificantNumber:a}),this.hasExtractedNationalSignificantNumber=!0,this.onNationalSignificantNumberChange()}},{key:"reExtractNationalSignificantNumber",value:function(t){return!!this.extractAnotherNationalSignificantNumber(t.getNationalDigits(),t.nationalSignificantNumber,(function(d){return t.update(d)}))||(this.extractIddPrefix(t)||this.fixMissingPlus(t)?(this.extractCallingCodeAndNationalSignificantNumber(t),!0):void 0)}},{key:"extractIddPrefix",value:function(t){var d=t.international,e=t.IDDPrefix,n=t.digits;if(t.nationalSignificantNumber,!d&&!e){var r=(0,K.Z)(n,this.defaultCountry,this.defaultCallingCode,this.metadata.metadata);return void 0!==r&&r!==n?(t.update({IDDPrefix:n.slice(0,n.length-r.length)}),this.startInternationalNumber(t,{country:void 0,callingCode:void 0}),!0):void 0}}},{key:"fixMissingPlus",value:function(t){if(!t.international){var d=(0,_.Z)(t.digits,this.defaultCountry,this.defaultCallingCode,this.metadata.metadata),e=d.countryCallingCode;if(d.number,e)return t.update({missingPlus:!0}),this.startInternationalNumber(t,{country:t.country,callingCode:e}),!0}}},{key:"startInternationalNumber",value:function(t,d){var e=d.country,n=d.callingCode;t.startInternationalNumber(e,n),t.nationalSignificantNumber&&(t.resetNationalSignificantNumber(),this.onNationalSignificantNumberChange(),this.hasExtractedNationalSignificantNumber=void 0)}},{key:"extractCallingCodeAndNationalSignificantNumber",value:function(t){this.extractCountryCallingCode(t)&&this.extractNationalSignificantNumber(t.getNationalDigits(),(function(d){return t.update(d)}))}}])&&V(d.prototype,e),n&&V(d,n),Object.defineProperty(d,"prototype",{writable:!1}),t}();var tt=e(2691),dt=e(9287);function et(t){return et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},et(t)}function nt(t,d){return function(t){if(Array.isArray(t))return t}(t)||function(t,d){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==e)return;var n,r,a=[],i=!0,o=!1;try{for(e=e.call(t);!(i=(n=e.next()).done)&&(a.push(n.value),!d||a.length!==d);i=!0);}catch(t){o=!0,r=t}finally{try{i||null==e.return||e.return()}finally{if(o)throw r}}return a}(t,d)||function(t,d){if(!t)return;if("string"==typeof t)return rt(t,d);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return rt(t,d)}(t,d)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function rt(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e1}},{key:"determineTheCountry",value:function(){this.state.setCountry((0,tt.Z)(this.isInternational()?this.state.callingCode:this.defaultCallingCode,{nationalNumber:this.state.nationalSignificantNumber,defaultCountry:this.defaultCountry,metadata:this.metadata}))}},{key:"getNumberValue",value:function(){var t=this.state,d=t.digits,e=t.callingCode,n=t.country,r=t.nationalSignificantNumber;if(d)return this.isInternational()?e?"+"+e+r:"+"+d:n||e?"+"+(n?this.metadata.countryCallingCode():e)+r:void 0}},{key:"getNumber",value:function(){var t=this.state,d=t.nationalSignificantNumber,e=t.carrierCode,n=t.callingCode,i=this._getCountry();if(d&&(i||n)){if(i&&i===this.defaultCountry){var o=new r.ZP(this.metadata.metadata);o.selectNumberingPlan(i);var $=o.numberingPlan.callingCode(),u=this.metadata.getCountryCodesForCallingCode($);if(u.length>1){var l=(0,dt.Z)(d,{countries:u,defaultCountry:this.defaultCountry,metadata:this.metadata.metadata});l&&(i=l)}}var s=new a.Z(i||n,d,this.metadata.metadata);return e&&(s.carrierCode=e),s}}},{key:"isPossible",value:function(){var t=this.getNumber();return!!t&&t.isPossible()}},{key:"isValid",value:function(){var t=this.getNumber();return!!t&&t.isValid()}},{key:"getNationalNumber",value:function(){return this.state.nationalSignificantNumber}},{key:"getChars",value:function(){return(this.state.international?"+":"")+this.state.digits}},{key:"getTemplate",value:function(){return this.formatter.getTemplate(this.state)||this.getNonFormattedTemplate()||""}}])&&at(d.prototype,e),n&&at(d,n),Object.defineProperty(d,"prototype",{writable:!1}),t}();function ot(t){return it.call(this,t,n.Z)}ot.prototype=Object.create(it.prototype,{}),ot.prototype.constructor=ot},2689:(t,d,e)=>{e.d(d,{L:()=>i});var n=e(2364),r=e(7520);function a(t,d,e){if(d[t])return new r.Z(t,d[t],e)}function i(){return(0,n.Z)(a,arguments)}},6198:(t,d,e)=>{e.d(d,{h:()=>ot});var n=e(2364),r=e(5619);function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function i(t,d){for(var e=0;e=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function O(t,d){(null==d||d>t.length)&&(d=t.length);for(var e=0,n=new Array(d);e=t.length)return"";var n=t.indexOf(";",e);return n>=0?t.substring(e,n):t.substring(e)}(t);if(!function(t){return null===t||0!==t.length&&(j.test(t)||Z.test(t))}(r))throw new h("NOT_A_NUMBER");if(null===r)e=n(t)||"";else{e="",r.charAt(0)===R&&(e+=r);var a,i=t.indexOf(B);a=i>=0?i+B.length:0;var o=t.indexOf(_);e+=t.substring(a,o)}var $=e.indexOf(U);if($>0&&(e=e.substring(0,$)),""!==e)return e}var W=250,H=new RegExp("["+r.xy+r.xc+"]"),V=new RegExp("[^"+r.xc+"#]+$"),Y=!1;function J(t,d,e){if(d=d||{},e=new g.ZP(e),d.defaultCountry&&!e.hasCountry(d.defaultCountry)){if(d.v2)throw new h("INVALID_COUNTRY");throw new Error("Unknown country: ".concat(d.defaultCountry))}var n=function(t,d,e){var n=K(t,{extractFormattedPhoneNumber:function(t){return function(t,d,e){if(!t)return;if(t.length>W){if(e)throw new h("TOO_LONG");return}if(!1===d)return t;var n=t.search(H);if(n<0)return;return t.slice(n).replace(V,"")}(t,e,d)}});if(!n)return{};if(!function(t){return t.length>=r.ex&&N.test(t)}(n))return function(t){return b.test(t)}(n)?{error:"TOO_SHORT"}:{};var a=function(t){var d=t.search(P);if(d<0)return{};for(var e=t.slice(0,d),n=t.match(P),r=1;rr.sJ){if(d.v2)throw new h("TOO_LONG");return{}}if(d.v2){var m=new A.Z(s,l,e.metadata);return u&&(m.country=u),f&&(m.carrierCode=f),i&&(m.ext=i),m.__countryCallingCodeSource=c,m}var y=!!(d.extended?e.hasSelectedNumberingPlan():u)&&(0,T.Z)(l,e.nationalNumberPattern());return d.extended?{country:u,countryCallingCode:s,carrierCode:f,valid:y,possible:!!y||!(!0!==d.extended||!e.possibleLengths()||!(0,E.D)(l,e)),phone:l,ext:i}:y?function(t,d,e){var n={country:t,phone:d};e&&(n.ext=e);return n}(u,l,i):{}}function X(t,d){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);d&&(n=n.filter((function(d){return Object.getOwnPropertyDescriptor(t,d).enumerable}))),e.push.apply(e,n)}return e}function Q(t){for(var d=1;dt.length)&&(d=t.length);for(var e=0,n=new Array(d);e{e.d(d,{Z:()=>r});var n=e(6183);function r(t,d){var e=Array.prototype.slice.call(d);return e.push(n.Z),t.apply(this,e)}}}]);
//# sourceMappingURL=203.prod.js.map
\ No newline at end of file
diff --git a/umd/203.prod.js.map b/umd/203.prod.js.map
index 144745bb..e9107479 100644
--- a/umd/203.prod.js.map
+++ b/umd/203.prod.js.map
@@ -1 +1 @@
-{"version":3,"file":"203.prod.js","mappings":"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,GAAK,QAAQ,GAAK,YAAY,GAAK,YAAY,GAAK,cAAc,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,cAAc,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,QAAQ,GAAK,UAAU,GAAK,SAAS,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,SAAS,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,YAAY,GAAK,cAAc,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,SAAS,GAAK,WAAW,GAAK,SAAS,GAAK,aAAa,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,UAAU,GAAK,UAAU,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,SAAS,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,QAAQ,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,UAAU,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,OAAO,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,OAAO,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,SAAS,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,WAAW,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,SAAS,GAAK,UAAU,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,Y,kCCAl+H,SAAgB,QAAU,EAAE,sBAAwB,CAAC,EAAI,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,EAAI,CAAC,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,KAAK,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,I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","sources":["webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/format.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/RFC3966.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/PhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isValid.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/constants.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getNumberType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/parseDigits.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isPossible.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/tools/semver-compare.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/metadata.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/examples.mobile.json.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/metadata.mobile.json.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeState.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeParser.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/AsYouType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/getExampleNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/ParseError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parse.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/normalizeArguments.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js"],"sourcesContent":["import Metadata from '../metadata.js';\n/**\r\n * Returns a list of countries that the phone number could potentially belong to.\r\n * @param {string} callingCode — Calling code.\r\n * @param {string} nationalNumber — National (significant) number.\r\n * @param {object} metadata — Metadata.\r\n * @return {string[]} A list of possible countries.\r\n */\n\nexport default function getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {\n var _metadata = new Metadata(metadata);\n\n var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode);\n\n if (!possibleCountries) {\n return [];\n }\n\n return possibleCountries.filter(function (country) {\n return couldNationalNumberBelongToCountry(nationalNumber, country, metadata);\n });\n}\n\nfunction couldNationalNumberBelongToCountry(nationalNumber, country, metadata) {\n var _metadata = new Metadata(metadata);\n\n _metadata.selectNumberingPlan(country);\n\n if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) {\n return true;\n }\n\n return false;\n}\n//# sourceMappingURL=getPossibleCountriesForNumber.js.map","import Metadata from '../metadata.js';\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\n\nvar SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/; // For regions that have multiple IDD prefixes\n// a preferred IDD prefix is returned.\n\nexport default function getIddPrefix(country, callingCode, metadata) {\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n\n if (countryMetadata.defaultIDDPrefix()) {\n return countryMetadata.defaultIDDPrefix();\n }\n\n if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\n return countryMetadata.IDDPrefix();\n }\n}\n//# sourceMappingURL=getIddPrefix.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nimport Metadata, { getCountryCallingCode } from './metadata.js';\nimport getIddPrefix from './helpers/getIddPrefix.js';\nimport { formatRFC3966 } from './helpers/RFC3966.js';\nvar DEFAULT_OPTIONS = {\n formatExtension: function formatExtension(formattedNumber, extension, metadata) {\n return \"\".concat(formattedNumber).concat(metadata.ext()).concat(extension);\n }\n};\n/**\r\n * Formats a phone number.\r\n *\r\n * format(phoneNumberInstance, 'INTERNATIONAL', { ..., v2: true }, metadata)\r\n * format(phoneNumberInstance, 'NATIONAL', { ..., v2: true }, metadata)\r\n *\r\n * format({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', { ... }, metadata)\r\n * format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {string} format\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\n\nexport default function formatNumber(input, format, options, metadata) {\n // Apply default options.\n if (options) {\n options = _objectSpread(_objectSpread({}, DEFAULT_OPTIONS), options);\n } else {\n options = DEFAULT_OPTIONS;\n }\n\n metadata = new Metadata(metadata);\n\n if (input.country && input.country !== '001') {\n // Validate `input.country`.\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n\n metadata.country(input.country);\n } else if (input.countryCallingCode) {\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else return input.phone || '';\n\n var countryCallingCode = metadata.countryCallingCode();\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone; // This variable should have been declared inside `case`s\n // but Babel has a bug and it says \"duplicate variable declaration\".\n\n var number;\n\n switch (format) {\n case 'NATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return '';\n }\n\n number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n\n case 'INTERNATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return \"+\".concat(countryCallingCode);\n }\n\n number = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options);\n number = \"+\".concat(countryCallingCode, \" \").concat(number);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n\n case 'E.164':\n // `E.164` doesn't define \"phone number extensions\".\n return \"+\".concat(countryCallingCode).concat(nationalNumber);\n\n case 'RFC3966':\n return formatRFC3966({\n number: \"+\".concat(countryCallingCode).concat(nationalNumber),\n ext: input.ext\n });\n // For reference, here's Google's IDD formatter:\n // https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546\n // Not saying that this IDD formatter replicates it 1:1, but it seems to work.\n // Who would even need to format phone numbers in IDD format anyway?\n\n case 'IDD':\n if (!options.fromCountry) {\n return; // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n }\n\n var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata);\n return addExtension(formattedNumber, input.ext, metadata, options.formatExtension);\n\n default:\n throw new Error(\"Unknown \\\"format\\\" argument passed to \\\"formatNumber()\\\": \\\"\".concat(format, \"\\\"\"));\n }\n}\n\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\n var format = chooseFormatForNumber(metadata.formats(), number);\n\n if (!format) {\n return number;\n }\n\n return formatNationalNumberUsingFormat(number, format, {\n useInternationalFormat: formatAs === 'INTERNATIONAL',\n withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true,\n carrierCode: carrierCode,\n metadata: metadata\n });\n}\n\nexport function chooseFormatForNumber(availableFormats, nationalNnumber) {\n for (var _iterator = _createForOfIteratorHelperLoose(availableFormats), _step; !(_step = _iterator()).done;) {\n var format = _step.value;\n\n // Validate leading digits.\n // The test case for \"else path\" could be found by searching for\n // \"format.leadingDigitsPatterns().length === 0\".\n if (format.leadingDigitsPatterns().length > 0) {\n // The last leading_digits_pattern is used here, as it is the most detailed\n var lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1]; // If leading digits don't match then move on to the next phone number format\n\n if (nationalNnumber.search(lastLeadingDigitsPattern) !== 0) {\n continue;\n }\n } // Check that the national number matches the phone number format regular expression\n\n\n if (matchesEntirely(nationalNnumber, format.pattern())) {\n return format;\n }\n }\n}\n\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\n return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber;\n}\n\nfunction formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) {\n var fromCountryCallingCode = getCountryCallingCode(fromCountry, metadata.metadata); // When calling within the same country calling code.\n\n if (fromCountryCallingCode === countryCallingCode) {\n var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata); // For NANPA regions, return the national format for these regions\n // but prefix it with the country calling code.\n\n if (countryCallingCode === '1') {\n return countryCallingCode + ' ' + formattedNumber;\n } // If regions share a country calling code, the country calling code need\n // not be dialled. This also applies when dialling within a region, so this\n // if clause covers both these cases. Technically this is the case for\n // dialling from La Reunion to other overseas departments of France (French\n // Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\n // this edge case for now and for those cases return the version including\n // country calling code. Details here:\n // http://www.petitfute.com/voyage/225-info-pratiques-reunion\n //\n\n\n return formattedNumber;\n }\n\n var iddPrefix = getIddPrefix(fromCountry, undefined, metadata.metadata);\n\n if (iddPrefix) {\n return \"\".concat(iddPrefix, \" \").concat(countryCallingCode, \" \").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata));\n }\n}\n//# sourceMappingURL=format.js.map","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport isViablePhoneNumber from './isViablePhoneNumber.js'; // https://www.ietf.org/rfc/rfc3966.txt\n\n/**\r\n * @param {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\n\nexport function parseRFC3966(text) {\n var number;\n var ext; // Replace \"tel:\" with \"tel=\" for parsing convenience.\n\n text = text.replace(/^tel:/, 'tel=');\n\n for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) {\n var part = _step.value;\n\n var _part$split = part.split('='),\n _part$split2 = _slicedToArray(_part$split, 2),\n name = _part$split2[0],\n value = _part$split2[1];\n\n switch (name) {\n case 'tel':\n number = value;\n break;\n\n case 'ext':\n ext = value;\n break;\n\n case 'phone-context':\n // Only \"country contexts\" are supported.\n // \"Domain contexts\" are ignored.\n if (value[0] === '+') {\n number = value + number;\n }\n\n break;\n }\n } // If the phone number is not viable, then abort.\n\n\n if (!isViablePhoneNumber(number)) {\n return {};\n }\n\n var result = {\n number: number\n };\n\n if (ext) {\n result.ext = ext;\n }\n\n return result;\n}\n/**\r\n * @param {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\n\nexport function formatRFC3966(_ref) {\n var number = _ref.number,\n ext = _ref.ext;\n\n if (!number) {\n return '';\n }\n\n if (number[0] !== '+') {\n throw new Error(\"\\\"formatRFC3966()\\\" expects \\\"number\\\" to be in E.164 format.\");\n }\n\n return \"tel:\".concat(number).concat(ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport Metadata from './metadata.js';\nimport isPossibleNumber from './isPossible.js';\nimport isValidNumber from './isValid.js'; // import checkNumberLength from './helpers/checkNumberLength.js'\n\nimport getNumberType from './helpers/getNumberType.js';\nimport getPossibleCountriesForNumber from './helpers/getPossibleCountriesForNumber.js';\nimport formatNumber from './format.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\nvar PhoneNumber = /*#__PURE__*/function () {\n /**\r\n * @param {string} countryOrCountryCallingCode\r\n * @param {string} nationalNumber\r\n * @param {object} metadata — Metadata JSON\r\n * @return {PhoneNumber}\r\n */\n function PhoneNumber(countryOrCountryCallingCode, nationalNumber, metadata) {\n _classCallCheck(this, PhoneNumber);\n\n if (!countryOrCountryCallingCode) {\n throw new TypeError('`country` or `countryCallingCode` not passed');\n }\n\n if (!nationalNumber) {\n throw new TypeError('`nationalNumber` not passed');\n }\n\n if (!metadata) {\n throw new TypeError('`metadata` not passed');\n }\n\n var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata),\n country = _getCountryAndCountry.country,\n countryCallingCode = _getCountryAndCountry.countryCallingCode;\n\n this.country = country;\n this.countryCallingCode = countryCallingCode;\n this.nationalNumber = nationalNumber;\n this.number = '+' + this.countryCallingCode + this.nationalNumber;\n this.metadata = metadata;\n }\n\n _createClass(PhoneNumber, [{\n key: \"setExt\",\n value: function setExt(ext) {\n this.ext = ext;\n }\n }, {\n key: \"getPossibleCountries\",\n value: function getPossibleCountries() {\n if (this.country) {\n return [this.country];\n }\n\n return getPossibleCountriesForNumber(this.countryCallingCode, this.nationalNumber, this.metadata);\n }\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n return isPossibleNumber(this, {\n v2: true\n }, this.metadata);\n }\n }, {\n key: \"isValid\",\n value: function isValid() {\n return isValidNumber(this, {\n v2: true\n }, this.metadata);\n }\n }, {\n key: \"isNonGeographic\",\n value: function isNonGeographic() {\n var metadata = new Metadata(this.metadata);\n return metadata.isNonGeographicCallingCode(this.countryCallingCode);\n }\n }, {\n key: \"isEqual\",\n value: function isEqual(phoneNumber) {\n return this.number === phoneNumber.number && this.ext === phoneNumber.ext;\n } // This function was originally meant to be an equivalent for `validatePhoneNumberLength()`,\n // but later it was found out that it doesn't include the possible `TOO_SHORT` result\n // returned from `parsePhoneNumberWithError()` in the original `validatePhoneNumberLength()`,\n // so eventually I simply commented out this method from the `PhoneNumber` class\n // and just left the `validatePhoneNumberLength()` function, even though that one would require\n // and additional step to also validate the actual country / calling code of the phone number.\n // validateLength() {\n // \tconst metadata = new Metadata(this.metadata)\n // \tmetadata.selectNumberingPlan(this.countryCallingCode)\n // \tconst result = checkNumberLength(this.nationalNumber, metadata)\n // \tif (result !== 'IS_POSSIBLE') {\n // \t\treturn result\n // \t}\n // }\n\n }, {\n key: \"getType\",\n value: function getType() {\n return getNumberType(this, {\n v2: true\n }, this.metadata);\n }\n }, {\n key: \"format\",\n value: function format(_format, options) {\n return formatNumber(this, _format, options ? _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }) : {\n v2: true\n }, this.metadata);\n }\n }, {\n key: \"formatNational\",\n value: function formatNational(options) {\n return this.format('NATIONAL', options);\n }\n }, {\n key: \"formatInternational\",\n value: function formatInternational(options) {\n return this.format('INTERNATIONAL', options);\n }\n }, {\n key: \"getURI\",\n value: function getURI(options) {\n return this.format('RFC3966', options);\n }\n }]);\n\n return PhoneNumber;\n}();\n\nexport { PhoneNumber as default };\n\nvar isCountryCode = function isCountryCode(value) {\n return /^[A-Z]{2}$/.test(value);\n};\n\nfunction getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) {\n var country;\n var countryCallingCode;\n var metadata = new Metadata(metadataJson); // If country code is passed then derive `countryCallingCode` from it.\n // Also store the country code as `.country`.\n\n if (isCountryCode(countryOrCountryCallingCode)) {\n country = countryOrCountryCallingCode;\n metadata.selectNumberingPlan(country);\n countryCallingCode = metadata.countryCallingCode();\n } else {\n countryCallingCode = countryOrCountryCallingCode;\n /* istanbul ignore if */\n\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(countryCallingCode)) {\n country = '001';\n }\n }\n }\n\n return {\n country: country,\n countryCallingCode: countryCallingCode\n };\n}\n//# sourceMappingURL=PhoneNumber.js.map","import Metadata from './metadata.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport getNumberType from './helpers/getNumberType.js';\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * isValid(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters (including punctuation).\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The optional `defaultCountry` argument is the default country.\r\n * I.e. it does not restrict to just that country,\r\n * e.g. in those cases where several countries share\r\n * the same phone numbering rules (NANPA, Britain, etc).\r\n * For example, even though the number `07624 369230`\r\n * belongs to the Isle of Man (\"IM\" country code)\r\n * calling `isValidNumber('07624369230', 'GB', metadata)`\r\n * still returns `true` because the country is not restricted to `GB`,\r\n * it's just that `GB` is the default one for the phone numbering rules.\r\n * For restricting the country see `isValidNumberForRegion()`\r\n * though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isValidNumber('+78005553535', metadata)\r\n * isValidNumber('8005553535', 'RU', metadata)\r\n * isValidNumber('88005553535', 'RU', metadata)\r\n * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\n\nexport default function isValidNumber(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n /**\r\n * Checks if a phone number is \"possible\" (basically just checks its length).\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\n\n metadata.selectNumberingPlan(input.country, input.countryCallingCode); // By default, countries only have type regexps when it's required for\n // distinguishing different countries having the same `countryCallingCode`.\n\n if (metadata.hasTypes()) {\n return getNumberType(input, options, metadata.metadata) !== undefined;\n } // If there are no type regexps for this country in metadata then use\n // `nationalNumberPattern` as a \"better than nothing\" replacement.\n\n\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n return matchesEntirely(nationalNumber, metadata.nationalNumberPattern());\n}\n//# sourceMappingURL=isValid.js.map","// The minimum length of the national significant number.\nexport var MIN_LENGTH_FOR_NSN = 2; // The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\n\nexport var MAX_LENGTH_FOR_NSN = 17; // The maximum length of the country calling code.\n\nexport var MAX_LENGTH_COUNTRY_CODE = 3; // Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\n\nexport var VALID_DIGITS = \"0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9\"; // `DASHES` will be right after the opening square bracket of the \"character class\"\n\nvar DASHES = \"-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D\";\nvar SLASHES = \"\\uFF0F/\";\nvar DOTS = \"\\uFF0E.\";\nexport var WHITESPACE = \" \\xA0\\xAD\\u200B\\u2060\\u3000\";\nvar BRACKETS = \"()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]\"; // export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\n\nvar TILDES = \"~\\u2053\\u223C\\uFF5E\"; // Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\n\nexport var VALID_PUNCTUATION = \"\".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES);\nexport var PLUS_CHARS = \"+\\uFF0B\"; // const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')\n//# sourceMappingURL=constants.js.map","import { VALID_PUNCTUATION } from '../constants.js'; // Removes brackets and replaces dashes with spaces.\n//\n// E.g. \"(999) 111-22-33\" -> \"999 111 22 33\"\n//\n// For some reason Google's metadata contains ``s with brackets and dashes.\n// Meanwhile, there's no single opinion about using punctuation in international phone numbers.\n//\n// For example, Google's `` for USA is `+1 213-373-4253`.\n// And here's a quote from WikiPedia's \"North American Numbering Plan\" page:\n// https://en.wikipedia.org/wiki/North_American_Numbering_Plan\n//\n// \"The country calling code for all countries participating in the NANP is 1.\n// In international format, an NANP number should be listed as +1 301 555 01 00,\n// where 301 is an area code (Maryland).\"\n//\n// I personally prefer the international format without any punctuation.\n// For example, brackets are remnants of the old age, meaning that the\n// phone number part in brackets (so called \"area code\") can be omitted\n// if dialing within the same \"area\".\n// And hyphens were clearly introduced for splitting local numbers into memorizable groups.\n// For example, remembering \"5553535\" is difficult but \"555-35-35\" is much simpler.\n// Imagine a man taking a bus from home to work and seeing an ad with a phone number.\n// He has a couple of seconds to memorize that number until it passes by.\n// If it were spaces instead of hyphens the man wouldn't necessarily get it,\n// but with hyphens instead of spaces the grouping is more explicit.\n// I personally think that hyphens introduce visual clutter,\n// so I prefer replacing them with spaces in international numbers.\n// In the modern age all output is done on displays where spaces are clearly distinguishable\n// so hyphens can be safely replaced with spaces without losing any legibility.\n//\n\nexport default function applyInternationalSeparatorStyle(formattedNumber) {\n return formattedNumber.replace(new RegExp(\"[\".concat(VALID_PUNCTUATION, \"]+\"), 'g'), ' ').trim();\n}\n//# sourceMappingURL=applyInternationalSeparatorStyle.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/**\r\n * Merges two arrays.\r\n * @param {*} a\r\n * @param {*} b\r\n * @return {*}\r\n */\nexport default function mergeArrays(a, b) {\n var merged = a.slice();\n\n for (var _iterator = _createForOfIteratorHelperLoose(b), _step; !(_step = _iterator()).done;) {\n var element = _step.value;\n\n if (a.indexOf(element) < 0) {\n merged.push(element);\n }\n }\n\n return merged.sort(function (a, b) {\n return a - b;\n }); // ES6 version, requires Set polyfill.\n // let merged = new Set(a)\n // for (const element of b) {\n // \tmerged.add(i)\n // }\n // return Array.from(merged).sort((a, b) => a - b)\n}\n//# sourceMappingURL=mergeArrays.js.map","import mergeArrays from './mergeArrays.js';\nexport default function checkNumberLength(nationalNumber, metadata) {\n return checkNumberLengthForType(nationalNumber, undefined, metadata);\n} // Checks whether a number is possible for the country based on its length.\n// Should only be called for the \"new\" metadata which has \"possible lengths\".\n\nexport function checkNumberLengthForType(nationalNumber, type, metadata) {\n var type_info = metadata.type(type); // There should always be \"\" set for every type element.\n // This is declared in the XML schema.\n // For size efficiency, where a sub-description (e.g. fixed-line)\n // has the same \"\" as the \"general description\", this is missing,\n // so we fall back to the \"general description\". Where no numbers of the type\n // exist at all, there is one possible length (-1) which is guaranteed\n // not to match the length of any real phone number.\n\n var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths(); // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n // Metadata before version `1.0.18` didn't contain `possible_lengths`.\n\n if (!possible_lengths) {\n return 'IS_POSSIBLE';\n }\n\n if (type === 'FIXED_LINE_OR_MOBILE') {\n // No such country in metadata.\n\n /* istanbul ignore next */\n if (!metadata.type('FIXED_LINE')) {\n // The rare case has been encountered where no fixedLine data is available\n // (true for some non-geographic entities), so we just check mobile.\n return checkNumberLengthForType(nationalNumber, 'MOBILE', metadata);\n }\n\n var mobile_type = metadata.type('MOBILE');\n\n if (mobile_type) {\n // Merge the mobile data in if there was any. \"Concat\" creates a new\n // array, it doesn't edit possible_lengths in place, so we don't need a copy.\n // Note that when adding the possible lengths from mobile, we have\n // to again check they aren't empty since if they are this indicates\n // they are the same as the general desc and should be obtained from there.\n possible_lengths = mergeArrays(possible_lengths, mobile_type.possibleLengths()); // The current list is sorted; we need to merge in the new list and\n // re-sort (duplicates are okay). Sorting isn't so expensive because\n // the lists are very small.\n // if (local_lengths) {\n // \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\n // } else {\n // \tlocal_lengths = mobile_type.possibleLengthsLocal()\n // }\n }\n } // If the type doesn't exist then return 'INVALID_LENGTH'.\n else if (type && !type_info) {\n return 'INVALID_LENGTH';\n }\n\n var actual_length = nationalNumber.length; // In `libphonenumber-js` all \"local-only\" formats are dropped for simplicity.\n // // This is safe because there is never an overlap beween the possible lengths\n // // and the local-only lengths; this is checked at build time.\n // if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0)\n // {\n // \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n // }\n\n var minimum_length = possible_lengths[0];\n\n if (minimum_length === actual_length) {\n return 'IS_POSSIBLE';\n }\n\n if (minimum_length > actual_length) {\n return 'TOO_SHORT';\n }\n\n if (possible_lengths[possible_lengths.length - 1] < actual_length) {\n return 'TOO_LONG';\n } // We skip the first element since we've already checked it.\n\n\n return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n//# sourceMappingURL=checkNumberLength.js.map","import stripIddPrefix from './stripIddPrefix.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport Metadata from '../metadata.js';\nimport { MAX_LENGTH_COUNTRY_CODE } from '../constants.js';\n/**\r\n * Converts a phone number digits (possibly with a `+`)\r\n * into a calling code and the rest phone number digits.\r\n * The \"rest phone number digits\" could include\r\n * a national prefix, carrier code, and national\r\n * (significant) number.\r\n * @param {string} number — Phone number digits (possibly with a `+`).\r\n * @param {string} [country] — Default country.\r\n * @param {string} [callingCode] — Default calling code (some phone numbering plans are non-geographic).\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCodeSource: string?, countryCallingCode: string?, number: string }`\r\n * @example\r\n * // Returns `{ countryCallingCode: \"1\", number: \"2133734253\" }`.\r\n * extractCountryCallingCode('2133734253', 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', 'RU', null, metadata)\r\n */\n\nexport default function extractCountryCallingCode(number, country, callingCode, metadata) {\n if (!number) {\n return {};\n }\n\n var isNumberWithIddPrefix; // If this is not an international phone number,\n // then either extract an \"IDD\" prefix, or extract a\n // country calling code from a number by autocorrecting it\n // by prepending a leading `+` in cases when it starts\n // with the country calling code.\n // https://wikitravel.org/en/International_dialling_prefix\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n\n if (number[0] !== '+') {\n // Convert an \"out-of-country\" dialing phone number\n // to a proper international phone number.\n var numberWithoutIDD = stripIddPrefix(number, country, callingCode, metadata); // If an IDD prefix was stripped then\n // convert the number to international one\n // for subsequent parsing.\n\n if (numberWithoutIDD && numberWithoutIDD !== number) {\n isNumberWithIddPrefix = true;\n number = '+' + numberWithoutIDD;\n } else {\n // Check to see if the number starts with the country calling code\n // for the default country. If so, we remove the country calling code,\n // and do some checks on the validity of the number before and after.\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (country || callingCode) {\n var _extractCountryCallin = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, callingCode, metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n shorterNumber = _extractCountryCallin.number;\n\n if (countryCallingCode) {\n return {\n countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',\n countryCallingCode: countryCallingCode,\n number: shorterNumber\n };\n }\n }\n\n return {\n // No need to set it to `UNSPECIFIED`. It can be just `undefined`.\n // countryCallingCodeSource: 'UNSPECIFIED',\n number: number\n };\n }\n } // Fast abortion: country codes do not begin with a '0'\n\n\n if (number[1] === '0') {\n return {};\n }\n\n metadata = new Metadata(metadata); // The thing with country phone codes\n // is that they are orthogonal to each other\n // i.e. there's no such country phone code A\n // for which country phone code B exists\n // where B starts with A.\n // Therefore, while scanning digits,\n // if a valid country code is found,\n // that means that it is the country code.\n //\n\n var i = 2;\n\n while (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n var _countryCallingCode = number.slice(1, i);\n\n if (metadata.hasCallingCode(_countryCallingCode)) {\n metadata.selectNumberingPlan(_countryCallingCode);\n return {\n countryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN',\n countryCallingCode: _countryCallingCode,\n number: number.slice(i)\n };\n }\n\n i++;\n }\n\n return {};\n} // The possible values for the returned `countryCallingCodeSource` are:\n//\n// Copy-pasted from:\n// https://github.com/google/libphonenumber/blob/master/resources/phonenumber.proto\n//\n// // The source from which the country_code is derived. This is not set in the\n// // general parsing method, but in the method that parses and keeps raw_input.\n// // New fields could be added upon request.\n// enum CountryCodeSource {\n// // Default value returned if this is not set, because the phone number was\n// // created using parse, not parseAndKeepRawInput. hasCountryCodeSource will\n// // return false if this is the case.\n// UNSPECIFIED = 0;\n//\n// // The country_code is derived based on a phone number with a leading \"+\",\n// // e.g. the French number \"+33 1 42 68 53 00\".\n// FROM_NUMBER_WITH_PLUS_SIGN = 1;\n//\n// // The country_code is derived based on a phone number with a leading IDD,\n// // e.g. the French number \"011 33 1 42 68 53 00\", as it is dialled from US.\n// FROM_NUMBER_WITH_IDD = 5;\n//\n// // The country_code is derived based on a phone number without a leading\n// // \"+\", e.g. the French number \"33 1 42 68 53 00\" when defaultCountry is\n// // supplied as France.\n// FROM_NUMBER_WITHOUT_PLUS_SIGN = 10;\n//\n// // The country_code is derived NOT based on the phone number itself, but\n// // from the defaultCountry parameter provided in the parsing function by the\n// // clients. This happens mostly for numbers written in the national format\n// // (without country code). For example, this would be set when parsing the\n// // French number \"01 42 68 53 00\", when defaultCountry is supplied as\n// // France.\n// FROM_DEFAULT_COUNTRY = 20;\n// }\n//# sourceMappingURL=extractCountryCallingCode.js.map","import Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport extractNationalNumber from './extractNationalNumber.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryCallingCode from '../getCountryCallingCode.js';\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits.\r\n * @param {string?} country\r\n * @param {string?} callingCode\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\n\nexport default function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, callingCode, metadata) {\n var countryCallingCode = country ? getCountryCallingCode(country, metadata) : callingCode;\n\n if (number.indexOf(countryCallingCode) === 0) {\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(country, callingCode);\n var possibleShorterNumber = number.slice(countryCallingCode.length);\n\n var _extractNationalNumbe = extractNationalNumber(possibleShorterNumber, metadata),\n possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;\n\n var _extractNationalNumbe2 = extractNationalNumber(number, metadata),\n nationalNumber = _extractNationalNumbe2.nationalNumber; // If the number was not valid before but is valid now,\n // or if it was too long before, we consider the number\n // with the country calling code stripped to be a better result\n // and keep that instead.\n // For example, in Germany (+49), `49` is a valid area code,\n // so if a number starts with `49`, it could be both a valid\n // national German number or an international number without\n // a leading `+`.\n\n\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) && matchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || checkNumberLength(nationalNumber, metadata) === 'TOO_LONG') {\n return {\n countryCallingCode: countryCallingCode,\n number: possibleShorterNumber\n };\n }\n }\n\n return {\n number: number\n };\n}\n//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map","import extractNationalNumberFromPossiblyIncompleteNumber from './extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport checkNumberLength from './checkNumberLength.js';\n/**\r\n * Strips national prefix and carrier code from a complete phone number.\r\n * The difference from the non-\"FromCompleteNumber\" function is that\r\n * it won't extract national prefix if the resultant number is too short\r\n * to be a complete number for the selected phone numbering plan.\r\n * @param {string} number — Complete phone number digits.\r\n * @param {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\n\nexport default function extractNationalNumber(number, metadata) {\n // Parsing national prefixes and carrier codes\n // is only required for local phone numbers\n // but some people don't understand that\n // and sometimes write international phone numbers\n // with national prefixes (or maybe even carrier codes).\n // http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\n // Google's original library forgives such mistakes\n // and so does this library, because it has been requested:\n // https://github.com/catamphetamine/libphonenumber-js/issues/127\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(number, metadata),\n carrierCode = _extractNationalNumbe.carrierCode,\n nationalNumber = _extractNationalNumbe.nationalNumber;\n\n if (nationalNumber !== number) {\n if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n } // Check the national (significant) number length after extracting national prefix and carrier code.\n // Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature.\n\n\n if (metadata.possibleLengths()) {\n // The number remaining after stripping the national prefix and carrier code\n // should be long enough to have a possible length for the country.\n // Otherwise, don't strip the national prefix and carrier code,\n // since the original number could be a valid number.\n // This check has been copy-pasted \"as is\" from Google's original library:\n // https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250\n // It doesn't check for the \"possibility\" of the original `number`.\n // I guess it's fine not checking that one. It works as is anyway.\n if (!isPossibleIncompleteNationalNumber(nationalNumber, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n }\n }\n\n return {\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n} // In some countries, the same digit could be a national prefix\n// or a leading digit of a valid phone number.\n// For example, in Russia, national prefix is `8`,\n// and also `800 555 35 35` is a valid number\n// in which `8` is not a national prefix, but the first digit\n// of a national (significant) number.\n// Same's with Belarus:\n// `82004910060` is a valid national (significant) number,\n// but `2004910060` is not.\n// To support such cases (to prevent the code from always stripping\n// national prefix), a condition is imposed: a national prefix\n// is not extracted when the original number is \"viable\" and the\n// resultant number is not, a \"viable\" national number being the one\n// that matches `national_number_pattern`.\n\nfunction shouldHaveExtractedNationalPrefix(nationalNumberBefore, nationalNumberAfter, metadata) {\n // The equivalent in Google's code is:\n // https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004\n if (matchesEntirely(nationalNumberBefore, metadata.nationalNumberPattern()) && !matchesEntirely(nationalNumberAfter, metadata.nationalNumberPattern())) {\n return false;\n } // This \"is possible\" national number (length) check has been commented out\n // because it's superceded by the (effectively) same check done in the\n // `extractNationalNumber()` function after it calls `shouldHaveExtractedNationalPrefix()`.\n // In other words, why run the same check twice if it could only be run once.\n // // Check the national (significant) number length after extracting national prefix and carrier code.\n // // Fixes a minor \"weird behavior\" bug: https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/57\n // // (Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature).\n // if (metadata.possibleLengths()) {\n // \tif (isPossibleIncompleteNationalNumber(nationalNumberBefore, metadata) &&\n // \t\t!isPossibleIncompleteNationalNumber(nationalNumberAfter, metadata)) {\n // \t\treturn false\n // \t}\n // }\n\n\n return true;\n}\n\nfunction isPossibleIncompleteNationalNumber(nationalNumber, metadata) {\n switch (checkNumberLength(nationalNumber, metadata)) {\n case 'TOO_SHORT':\n case 'INVALID_LENGTH':\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n return false;\n\n default:\n return true;\n }\n}\n//# sourceMappingURL=extractNationalNumber.js.map","/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not.\r\n */\nexport default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {\n if (number && metadata.numberingPlan.nationalPrefixForParsing()) {\n // See METADATA.md for the description of\n // `national_prefix_for_parsing` and `national_prefix_transform_rule`.\n // Attempt to parse the first digits as a national prefix.\n var prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')');\n var prefixMatch = prefixPattern.exec(number);\n\n if (prefixMatch) {\n var nationalNumber;\n var carrierCode; // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n // If a `national_prefix_for_parsing` has any \"capturing groups\"\n // then it means that the national (significant) number is equal to\n // those \"capturing groups\" transformed via `national_prefix_transform_rule`,\n // and nothing could be said about the actual national prefix:\n // what is it and was it even there.\n // If a `national_prefix_for_parsing` doesn't have any \"capturing groups\",\n // then everything it matches is a national prefix.\n // To determine whether `national_prefix_for_parsing` matched any\n // \"capturing groups\", the value of the result of calling `.exec()`\n // is looked at, and if it has non-undefined values where there're\n // \"capturing groups\" in the regular expression, then it means\n // that \"capturing groups\" have been matched.\n // It's not possible to tell whether there'll be any \"capturing gropus\"\n // before the matching process, because a `national_prefix_for_parsing`\n // could exhibit both behaviors.\n\n var capturedGroupsCount = prefixMatch.length - 1;\n var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];\n\n if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\n nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule()); // If there's more than one captured group,\n // then carrier code is the second one.\n\n if (capturedGroupsCount > 1) {\n carrierCode = prefixMatch[1];\n }\n } // If there're no \"capturing groups\",\n // or if there're \"capturing groups\" but no\n // `national_prefix_transform_rule`,\n // then just strip the national prefix from the number,\n // and possibly a carrier code.\n // Seems like there could be more.\n else {\n // `prefixBeforeNationalNumber` is the whole substring matched by\n // the `national_prefix_for_parsing` regular expression.\n // There seem to be no guarantees that it's just a national prefix.\n // For example, if there's a carrier code, it's gonna be a\n // part of `prefixBeforeNationalNumber` too.\n var prefixBeforeNationalNumber = prefixMatch[0];\n nationalNumber = number.slice(prefixBeforeNationalNumber.length); // If there's at least one captured group,\n // then carrier code is the first one.\n\n if (hasCapturedGroups) {\n carrierCode = prefixMatch[1];\n }\n } // Tries to guess whether a national prefix was present in the input.\n // This is not something copy-pasted from Google's library:\n // they don't seem to have an equivalent for that.\n // So this isn't an \"officially approved\" way of doing something like that.\n // But since there seems no other existing method, this library uses it.\n\n\n var nationalPrefix;\n\n if (hasCapturedGroups) {\n var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);\n var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup); // Example: an Argentinian (AR) phone number `0111523456789`.\n // `prefixMatch[0]` is `01115`, and `$1` is `11`,\n // and the rest of the phone number is `23456789`.\n // The national number is transformed via `9$1` to `91123456789`.\n // National prefix `0` is detected being present at the start.\n // if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {\n\n if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\n nationalPrefix = metadata.numberingPlan.nationalPrefix();\n }\n } else {\n nationalPrefix = prefixMatch[0];\n }\n\n return {\n nationalNumber: nationalNumber,\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode\n };\n }\n }\n\n return {\n nationalNumber: number\n };\n}\n//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map","import applyInternationalSeparatorStyle from './applyInternationalSeparatorStyle.js'; // This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly. Therefore, we use `\\d`, so that the first\n// group actually used in the pattern will be matched.\n\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\nexport default function formatNationalNumberUsingFormat(number, format, _ref) {\n var useInternationalFormat = _ref.useInternationalFormat,\n withNationalPrefix = _ref.withNationalPrefix,\n carrierCode = _ref.carrierCode,\n metadata = _ref.metadata;\n var formattedNumber = number.replace(new RegExp(format.pattern()), useInternationalFormat ? format.internationalFormat() : // This library doesn't use `domestic_carrier_code_formatting_rule`,\n // because that one is only used when formatting phone numbers\n // for dialing from a mobile phone, and this is not a dialing library.\n // carrierCode && format.domesticCarrierCodeFormattingRule()\n // \t// First, replace the $CC in the formatting rule with the desired carrier code.\n // \t// Then, replace the $FG in the formatting rule with the first group\n // \t// and the carrier code combined in the appropriate way.\n // \t? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode))\n // \t: (\n // \t\twithNationalPrefix && format.nationalPrefixFormattingRule()\n // \t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\n // \t\t\t: format.format()\n // \t)\n withNationalPrefix && format.nationalPrefixFormattingRule() ? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()) : format.format());\n\n if (useInternationalFormat) {\n return applyInternationalSeparatorStyle(formattedNumber);\n }\n\n return formattedNumber;\n}\n//# sourceMappingURL=formatNationalNumberUsingFormat.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport Metadata from '../metadata.js';\nimport getNumberType from './getNumberType.js';\nexport default function getCountryByNationalNumber(possibleCountries, nationalPhoneNumber, metadata) {\n // Re-create `metadata` because it will be selecting a `country`.\n metadata = new Metadata(metadata);\n\n for (var _iterator = _createForOfIteratorHelperLoose(possibleCountries), _step; !(_step = _iterator()).done;) {\n var country = _step.value;\n metadata.country(country); // \"Leading digits\" patterns are only defined for about 20% of all countries.\n // By definition, matching \"leading digits\" is a sufficient but not a necessary\n // condition for a phone number to belong to a country.\n // The point of \"leading digits\" check is that it's the fastest one to get a match.\n // https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits\n\n if (metadata.leadingDigits()) {\n if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\n return country;\n }\n } // Else perform full validation with all of those\n // fixed-line/mobile/etc regular expressions.\n else if (getNumberType({\n phone: nationalPhoneNumber,\n country: country\n }, undefined, metadata.metadata)) {\n return country;\n }\n }\n}\n//# sourceMappingURL=getCountryByNationalNumber.js.map","import getCountryByNationalNumber from './getCountryByNationalNumber.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\nexport default function getCountryByCallingCode(callingCode, nationalPhoneNumber, metadata) {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(callingCode)) {\n return '001';\n }\n }\n\n var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode);\n\n if (!possibleCountries) {\n return;\n } // If there's just one country corresponding to the country code,\n // then just return it, without further phone number digits validation.\n\n\n if (possibleCountries.length === 1) {\n return possibleCountries[0];\n }\n\n return getCountryByNationalNumber(possibleCountries, nationalPhoneNumber, metadata.metadata);\n}\n//# sourceMappingURL=getCountryByCallingCode.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nvar NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL']; // Finds out national phone number type (fixed line, mobile, etc)\n\nexport default function getNumberType(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {}; // When `parse()` returned `{}`\n // meaning that the phone number is not a valid one.\n\n if (!input.country) {\n return;\n }\n\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone; // The following is copy-pasted from the original function:\n // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n // Is this national number even valid for this country\n\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())) {\n return;\n } // Is it fixed line number\n\n\n if (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) {\n // Because duplicate regular expressions are removed\n // to reduce metadata size, if \"mobile\" pattern is \"\"\n // then it means it was removed due to being a duplicate of the fixed-line pattern.\n //\n if (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n return 'FIXED_LINE_OR_MOBILE';\n } // `MOBILE` type pattern isn't included if it matched `FIXED_LINE` one.\n // For example, for \"US\" country.\n // Old metadata (< `1.0.18`) had a specific \"types\" data structure\n // that happened to be `undefined` for `MOBILE` in that case.\n // Newer metadata (>= `1.0.18`) has another data structure that is\n // not `undefined` for `MOBILE` in that case (it's just an empty array).\n // So this `if` is just for backwards compatibility with old metadata.\n\n\n if (!metadata.type('MOBILE')) {\n return 'FIXED_LINE_OR_MOBILE';\n } // Check if the number happens to qualify as both fixed line and mobile.\n // (no such country in the minimal metadata set)\n\n /* istanbul ignore if */\n\n\n if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n return 'FIXED_LINE';\n }\n\n for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) {\n var type = _step.value;\n\n if (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\n return type;\n }\n }\n}\nexport function isNumberTypeEqualTo(nationalNumber, type, metadata) {\n type = metadata.type(type);\n\n if (!type || !type.pattern()) {\n return false;\n } // Check if any possible number lengths are present;\n // if so, we use them to avoid checking\n // the validation pattern if they don't match.\n // If they are absent, this means they match\n // the general description, which we have\n // already checked before a specific number type.\n\n\n if (type.possibleLengths() && type.possibleLengths().indexOf(nationalNumber.length) < 0) {\n return false;\n }\n\n return matchesEntirely(nationalNumber, type.pattern());\n}\n//# sourceMappingURL=getNumberType.js.map","/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\nexport default function matchesEntirely(text, regular_expression) {\n // If assigning the `''` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n text = text || '';\n return new RegExp('^(?:' + regular_expression + ')$').test(text);\n}\n//# sourceMappingURL=matchesEntirely.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nexport var DIGITS = {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n \"\\uFF10\": '0',\n // Fullwidth digit 0\n \"\\uFF11\": '1',\n // Fullwidth digit 1\n \"\\uFF12\": '2',\n // Fullwidth digit 2\n \"\\uFF13\": '3',\n // Fullwidth digit 3\n \"\\uFF14\": '4',\n // Fullwidth digit 4\n \"\\uFF15\": '5',\n // Fullwidth digit 5\n \"\\uFF16\": '6',\n // Fullwidth digit 6\n \"\\uFF17\": '7',\n // Fullwidth digit 7\n \"\\uFF18\": '8',\n // Fullwidth digit 8\n \"\\uFF19\": '9',\n // Fullwidth digit 9\n \"\\u0660\": '0',\n // Arabic-indic digit 0\n \"\\u0661\": '1',\n // Arabic-indic digit 1\n \"\\u0662\": '2',\n // Arabic-indic digit 2\n \"\\u0663\": '3',\n // Arabic-indic digit 3\n \"\\u0664\": '4',\n // Arabic-indic digit 4\n \"\\u0665\": '5',\n // Arabic-indic digit 5\n \"\\u0666\": '6',\n // Arabic-indic digit 6\n \"\\u0667\": '7',\n // Arabic-indic digit 7\n \"\\u0668\": '8',\n // Arabic-indic digit 8\n \"\\u0669\": '9',\n // Arabic-indic digit 9\n \"\\u06F0\": '0',\n // Eastern-Arabic digit 0\n \"\\u06F1\": '1',\n // Eastern-Arabic digit 1\n \"\\u06F2\": '2',\n // Eastern-Arabic digit 2\n \"\\u06F3\": '3',\n // Eastern-Arabic digit 3\n \"\\u06F4\": '4',\n // Eastern-Arabic digit 4\n \"\\u06F5\": '5',\n // Eastern-Arabic digit 5\n \"\\u06F6\": '6',\n // Eastern-Arabic digit 6\n \"\\u06F7\": '7',\n // Eastern-Arabic digit 7\n \"\\u06F8\": '8',\n // Eastern-Arabic digit 8\n \"\\u06F9\": '9' // Eastern-Arabic digit 9\n\n};\nexport function parseDigit(character) {\n return DIGITS[character];\n}\n/**\r\n * Parses phone number digits from a string.\r\n * Drops all punctuation leaving only digits.\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * parseDigits('8 (800) 555')\r\n * // Outputs '8800555'.\r\n * ```\r\n */\n\nexport default function parseDigits(string) {\n var result = ''; // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n var digit = parseDigit(character);\n\n if (digit) {\n result += digit;\n }\n }\n\n return result;\n}\n//# sourceMappingURL=parseDigits.js.map","import Metadata from '../metadata.js';\nimport { VALID_DIGITS } from '../constants.js';\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])');\nexport default function stripIddPrefix(number, country, callingCode, metadata) {\n if (!country) {\n return;\n } // Check if the number is IDD-prefixed.\n\n\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n\n if (number.search(IDDPrefixPattern) !== 0) {\n return;\n } // Strip IDD prefix.\n\n\n number = number.slice(number.match(IDDPrefixPattern)[0].length); // If there're any digits after an IDD prefix,\n // then those digits are a country calling code.\n // Since no country code starts with a `0`,\n // the code below validates that the next digit (if present) is not `0`.\n\n var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n\n if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n if (matchedGroups[1] === '0') {\n return;\n }\n }\n\n return number;\n}\n//# sourceMappingURL=stripIddPrefix.js.map","import Metadata from './metadata.js';\nimport checkNumberLength from './helpers/checkNumberLength.js';\n/**\r\n * Checks if a phone number is \"possible\" (basically just checks its length).\r\n *\r\n * isPossible(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\n\nexport default function isPossiblePhoneNumber(input, options, metadata) {\n /* istanbul ignore if */\n if (options === undefined) {\n options = {};\n }\n\n metadata = new Metadata(metadata);\n\n if (options.v2) {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else {\n if (!input.phone) {\n return false;\n }\n\n if (input.country) {\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n\n metadata.country(input.country);\n } else {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n\n metadata.selectNumberingPlan(input.countryCallingCode);\n }\n } // Old metadata (< 1.0.18) had no \"possible length\" data.\n\n\n if (metadata.possibleLengths()) {\n return isPossibleNumber(input.phone || input.nationalNumber, metadata);\n } else {\n // There was a bug between `1.7.35` and `1.7.37` where \"possible_lengths\"\n // were missing for \"non-geographical\" numbering plans.\n // Just assume the number is possible in such cases:\n // it's unlikely that anyone generated their custom metadata\n // in that short period of time (one day).\n // This code can be removed in some future major version update.\n if (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {\n // \"Non-geographic entities\" did't have `possibleLengths`\n // due to a bug in metadata generation process.\n return true;\n } else {\n throw new Error('Missing \"possibleLengths\" in metadata. Perhaps the metadata has been generated before v1.0.18.');\n }\n }\n}\nexport function isPossibleNumber(nationalNumber, metadata) {\n //, isInternational) {\n switch (checkNumberLength(nationalNumber, metadata)) {\n case 'IS_POSSIBLE':\n return true;\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n // \treturn !isInternational\n\n default:\n return false;\n }\n}\n//# sourceMappingURL=isPossible.js.map","// Copy-pasted from:\n// https://github.com/substack/semver-compare/blob/master/index.js\n//\n// Inlining this function because some users reported issues with\n// importing from `semver-compare` in a browser with ES6 \"native\" modules.\n//\n// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc \"tags\".\n// https://github.com/catamphetamine/libphonenumber-js/issues/381\nexport default function (a, b) {\n a = a.split('-');\n b = b.split('-');\n var pa = a[0].split('.');\n var pb = b[0].split('.');\n\n for (var i = 0; i < 3; i++) {\n var na = Number(pa[i]);\n var nb = Number(pb[i]);\n if (na > nb) return 1;\n if (nb > na) return -1;\n if (!isNaN(na) && isNaN(nb)) return 1;\n if (isNaN(na) && !isNaN(nb)) return -1;\n }\n\n if (a[1] && b[1]) {\n return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;\n }\n\n return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0;\n}\n//# sourceMappingURL=semver-compare.js.map","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport compare from './tools/semver-compare.js'; // Added \"possibleLengths\" and renamed\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\n\nvar V2 = '1.0.18'; // Added \"idd_prefix\" and \"default_idd_prefix\".\n\nvar V3 = '1.2.0'; // Moved `001` country code to \"nonGeographic\" section of metadata.\n\nvar V4 = '1.7.35';\nvar DEFAULT_EXT_PREFIX = ' ext. ';\nvar CALLING_CODE_REG_EXP = /^\\d+$/;\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\n\nvar Metadata = /*#__PURE__*/function () {\n function Metadata(metadata) {\n _classCallCheck(this, Metadata);\n\n validateMetadata(metadata);\n this.metadata = metadata;\n setVersion.call(this, metadata);\n }\n\n _createClass(Metadata, [{\n key: \"getCountries\",\n value: function getCountries() {\n return Object.keys(this.metadata.countries).filter(function (_) {\n return _ !== '001';\n });\n }\n }, {\n key: \"getCountryMetadata\",\n value: function getCountryMetadata(countryCode) {\n return this.metadata.countries[countryCode];\n }\n }, {\n key: \"nonGeographic\",\n value: function nonGeographic() {\n if (this.v1 || this.v2 || this.v3) return; // `nonGeographical` was a typo.\n // It's present in metadata generated from `1.7.35` to `1.7.37`.\n // The test case could be found by searching for \"nonGeographical\".\n\n return this.metadata.nonGeographic || this.metadata.nonGeographical;\n }\n }, {\n key: \"hasCountry\",\n value: function hasCountry(country) {\n return this.getCountryMetadata(country) !== undefined;\n }\n }, {\n key: \"hasCallingCode\",\n value: function hasCallingCode(callingCode) {\n if (this.getCountryCodesForCallingCode(callingCode)) {\n return true;\n }\n\n if (this.nonGeographic()) {\n if (this.nonGeographic()[callingCode]) {\n return true;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n var countryCodes = this.countryCallingCodes()[callingCode];\n\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return true;\n }\n }\n }\n }, {\n key: \"isNonGeographicCallingCode\",\n value: function isNonGeographicCallingCode(callingCode) {\n if (this.nonGeographic()) {\n return this.nonGeographic()[callingCode] ? true : false;\n } else {\n return this.getCountryCodesForCallingCode(callingCode) ? false : true;\n }\n } // Deprecated.\n\n }, {\n key: \"country\",\n value: function country(countryCode) {\n return this.selectNumberingPlan(countryCode);\n }\n }, {\n key: \"selectNumberingPlan\",\n value: function selectNumberingPlan(countryCode, callingCode) {\n // Supports just passing `callingCode` as the first argument.\n if (countryCode && CALLING_CODE_REG_EXP.test(countryCode)) {\n callingCode = countryCode;\n countryCode = null;\n }\n\n if (countryCode && countryCode !== '001') {\n if (!this.hasCountry(countryCode)) {\n throw new Error(\"Unknown country: \".concat(countryCode));\n }\n\n this.numberingPlan = new NumberingPlan(this.getCountryMetadata(countryCode), this);\n } else if (callingCode) {\n if (!this.hasCallingCode(callingCode)) {\n throw new Error(\"Unknown calling code: \".concat(callingCode));\n }\n\n this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this);\n } else {\n this.numberingPlan = undefined;\n }\n\n return this;\n }\n }, {\n key: \"getCountryCodesForCallingCode\",\n value: function getCountryCodesForCallingCode(callingCode) {\n var countryCodes = this.countryCallingCodes()[callingCode];\n\n if (countryCodes) {\n // Metadata before V4 included \"non-geographic entity\" calling codes\n // inside `country_calling_codes` (for example, `\"881\":[\"001\"]`).\n // Now the semantics of `country_calling_codes` has changed:\n // it's specifically for \"countries\" now.\n // Older versions of custom metadata will simply skip parsing\n // \"non-geographic entity\" phone numbers with new versions\n // of this library: it's not considered a bug,\n // because such numbers are extremely rare,\n // and developers extremely rarely use custom metadata.\n if (countryCodes.length === 1 && countryCodes[0].length === 3) {\n return;\n }\n\n return countryCodes;\n }\n }\n }, {\n key: \"getCountryCodeForCallingCode\",\n value: function getCountryCodeForCallingCode(callingCode) {\n var countryCodes = this.getCountryCodesForCallingCode(callingCode);\n\n if (countryCodes) {\n return countryCodes[0];\n }\n }\n }, {\n key: \"getNumberingPlanMetadata\",\n value: function getNumberingPlanMetadata(callingCode) {\n var countryCode = this.getCountryCodeForCallingCode(callingCode);\n\n if (countryCode) {\n return this.getCountryMetadata(countryCode);\n }\n\n if (this.nonGeographic()) {\n var metadata = this.nonGeographic()[callingCode];\n\n if (metadata) {\n return metadata;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n // In that metadata, there was no concept of \"non-geographic\" metadata\n // so metadata for `001` country code was stored along with other countries.\n // The test case can be found by searching for:\n // \"should work around `nonGeographic` metadata not existing\".\n var countryCodes = this.countryCallingCodes()[callingCode];\n\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return this.metadata.countries['001'];\n }\n }\n } // Deprecated.\n\n }, {\n key: \"countryCallingCode\",\n value: function countryCallingCode() {\n return this.numberingPlan.callingCode();\n } // Deprecated.\n\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n return this.numberingPlan.IDDPrefix();\n } // Deprecated.\n\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n return this.numberingPlan.defaultIDDPrefix();\n } // Deprecated.\n\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n return this.numberingPlan.nationalNumberPattern();\n } // Deprecated.\n\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n return this.numberingPlan.possibleLengths();\n } // Deprecated.\n\n }, {\n key: \"formats\",\n value: function formats() {\n return this.numberingPlan.formats();\n } // Deprecated.\n\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n return this.numberingPlan.nationalPrefixForParsing();\n } // Deprecated.\n\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.numberingPlan.nationalPrefixTransformRule();\n } // Deprecated.\n\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.numberingPlan.leadingDigits();\n } // Deprecated.\n\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n return this.numberingPlan.hasTypes();\n } // Deprecated.\n\n }, {\n key: \"type\",\n value: function type(_type) {\n return this.numberingPlan.type(_type);\n } // Deprecated.\n\n }, {\n key: \"ext\",\n value: function ext() {\n return this.numberingPlan.ext();\n }\n }, {\n key: \"countryCallingCodes\",\n value: function countryCallingCodes() {\n if (this.v1) return this.metadata.country_phone_code_to_countries;\n return this.metadata.country_calling_codes;\n } // Deprecated.\n\n }, {\n key: \"chooseCountryByCountryCallingCode\",\n value: function chooseCountryByCountryCallingCode(callingCode) {\n return this.selectNumberingPlan(callingCode);\n }\n }, {\n key: \"hasSelectedNumberingPlan\",\n value: function hasSelectedNumberingPlan() {\n return this.numberingPlan !== undefined;\n }\n }]);\n\n return Metadata;\n}();\n\nexport { Metadata as default };\n\nvar NumberingPlan = /*#__PURE__*/function () {\n function NumberingPlan(metadata, globalMetadataObject) {\n _classCallCheck(this, NumberingPlan);\n\n this.globalMetadataObject = globalMetadataObject;\n this.metadata = metadata;\n setVersion.call(this, globalMetadataObject.metadata);\n }\n\n _createClass(NumberingPlan, [{\n key: \"callingCode\",\n value: function callingCode() {\n return this.metadata[0];\n } // Formatting information for regions which share\n // a country calling code is contained by only one region\n // for performance reasons. For example, for NANPA region\n // (\"North American Numbering Plan Administration\",\n // which includes USA, Canada, Cayman Islands, Bahamas, etc)\n // it will be contained in the metadata for `US`.\n\n }, {\n key: \"getDefaultCountryMetadataForRegion\",\n value: function getDefaultCountryMetadataForRegion() {\n return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode());\n } // Is always present.\n\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[1];\n } // Is only present when a country supports multiple IDD prefixes.\n\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[12];\n }\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n if (this.v1 || this.v2) return this.metadata[1];\n return this.metadata[2];\n } // \"possible length\" data is always present in Google's metadata.\n\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.v1) return;\n return this.metadata[this.v2 ? 2 : 3];\n }\n }, {\n key: \"_getFormats\",\n value: function _getFormats(metadata) {\n return metadata[this.v1 ? 2 : this.v2 ? 3 : 4];\n } // For countries of the same region (e.g. NANPA)\n // formats are all stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n\n }, {\n key: \"formats\",\n value: function formats() {\n var _this = this;\n\n var formats = this._getFormats(this.metadata) || this._getFormats(this.getDefaultCountryMetadataForRegion()) || [];\n return formats.map(function (_) {\n return new Format(_, _this);\n });\n }\n }, {\n key: \"nationalPrefix\",\n value: function nationalPrefix() {\n return this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5];\n }\n }, {\n key: \"_getNationalPrefixFormattingRule\",\n value: function _getNationalPrefixFormattingRule(metadata) {\n return metadata[this.v1 ? 4 : this.v2 ? 5 : 6];\n } // For countries of the same region (e.g. NANPA)\n // national prefix formatting rule is stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"_nationalPrefixForParsing\",\n value: function _nationalPrefixForParsing() {\n return this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7];\n }\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n // If `national_prefix_for_parsing` is not set explicitly,\n // then infer it from `national_prefix` (if any)\n return this._nationalPrefixForParsing() || this.nationalPrefix();\n }\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8];\n }\n }, {\n key: \"_getNationalPrefixIsOptionalWhenFormatting\",\n value: function _getNationalPrefixIsOptionalWhenFormatting() {\n return !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9];\n } // For countries of the same region (e.g. NANPA)\n // \"national prefix is optional when formatting\" flag is\n // stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) || this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10];\n }\n }, {\n key: \"types\",\n value: function types() {\n return this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11];\n }\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n // Versions 1.2.0 - 1.2.4: can be `[]`.\n\n /* istanbul ignore next */\n if (this.types() && this.types().length === 0) {\n return false;\n } // Versions <= 1.2.4: can be `undefined`.\n // Version >= 1.2.5: can be `0`.\n\n\n return !!this.types();\n }\n }, {\n key: \"type\",\n value: function type(_type2) {\n if (this.hasTypes() && getType(this.types(), _type2)) {\n return new Type(getType(this.types(), _type2), this);\n }\n }\n }, {\n key: \"ext\",\n value: function ext() {\n if (this.v1 || this.v2) return DEFAULT_EXT_PREFIX;\n return this.metadata[13] || DEFAULT_EXT_PREFIX;\n }\n }]);\n\n return NumberingPlan;\n}();\n\nvar Format = /*#__PURE__*/function () {\n function Format(format, metadata) {\n _classCallCheck(this, Format);\n\n this._format = format;\n this.metadata = metadata;\n }\n\n _createClass(Format, [{\n key: \"pattern\",\n value: function pattern() {\n return this._format[0];\n }\n }, {\n key: \"format\",\n value: function format() {\n return this._format[1];\n }\n }, {\n key: \"leadingDigitsPatterns\",\n value: function leadingDigitsPatterns() {\n return this._format[2] || [];\n }\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._format[3] || this.metadata.nationalPrefixFormattingRule();\n }\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n }, {\n key: \"nationalPrefixIsMandatoryWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsMandatoryWhenFormattingInNationalFormat() {\n // National prefix is omitted if there's no national prefix formatting rule\n // set for this country, or when the national prefix formatting rule\n // contains no national prefix itself, or when this rule is set but\n // national prefix is optional for this phone number format\n // (and it is not enforced explicitly)\n return this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n } // Checks whether national prefix formatting rule contains national prefix.\n\n }, {\n key: \"usesNationalPrefix\",\n value: function usesNationalPrefix() {\n return this.nationalPrefixFormattingRule() && // Check that national prefix formatting rule is not a \"dummy\" one.\n !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule()) // In compressed metadata, `this.nationalPrefixFormattingRule()` is `0`\n // when `national_prefix_formatting_rule` is not present.\n // So, `true` or `false` are returned explicitly here, so that\n // `0` number isn't returned.\n ? true : false;\n }\n }, {\n key: \"internationalFormat\",\n value: function internationalFormat() {\n return this._format[5] || this.format();\n }\n }]);\n\n return Format;\n}();\n/**\r\n * A pattern that is used to determine if the national prefix formatting rule\r\n * has the first group only, i.e., does not start with the national prefix.\r\n * Note that the pattern explicitly allows for unbalanced parentheses.\r\n */\n\n\nvar FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/;\n\nvar Type = /*#__PURE__*/function () {\n function Type(type, metadata) {\n _classCallCheck(this, Type);\n\n this.type = type;\n this.metadata = metadata;\n }\n\n _createClass(Type, [{\n key: \"pattern\",\n value: function pattern() {\n if (this.metadata.v1) return this.type;\n return this.type[0];\n }\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.metadata.v1) return;\n return this.type[1] || this.metadata.possibleLengths();\n }\n }]);\n\n return Type;\n}();\n\nfunction getType(types, type) {\n switch (type) {\n case 'FIXED_LINE':\n return types[0];\n\n case 'MOBILE':\n return types[1];\n\n case 'TOLL_FREE':\n return types[2];\n\n case 'PREMIUM_RATE':\n return types[3];\n\n case 'PERSONAL_NUMBER':\n return types[4];\n\n case 'VOICEMAIL':\n return types[5];\n\n case 'UAN':\n return types[6];\n\n case 'PAGER':\n return types[7];\n\n case 'VOIP':\n return types[8];\n\n case 'SHARED_COST':\n return types[9];\n }\n}\n\nexport function validateMetadata(metadata) {\n if (!metadata) {\n throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n } // `country_phone_code_to_countries` was renamed to\n // `country_calling_codes` in `1.0.18`.\n\n\n if (!is_object(metadata) || !is_object(metadata.countries)) {\n throw new Error(\"[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got \".concat(is_object(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + type_of(metadata) + ': ' + metadata, \".\"));\n }\n} // Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n\n/* istanbul ignore next */\n\nvar is_object = function is_object(_) {\n return _typeof(_) === 'object';\n}; // Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n\n/* istanbul ignore next */\n\n\nvar type_of = function type_of(_) {\n return _typeof(_);\n};\n/**\r\n * Returns extension prefix for a country.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string?}\r\n * @example\r\n * // Returns \" ext. \"\r\n * getExtPrefix(\"US\")\r\n */\n\n\nexport function getExtPrefix(country, metadata) {\n metadata = new Metadata(metadata);\n\n if (metadata.hasCountry(country)) {\n return metadata.country(country).ext();\n }\n\n return DEFAULT_EXT_PREFIX;\n}\n/**\r\n * Returns \"country calling code\" for a country.\r\n * Throws an error if the country doesn't exist or isn't supported by this library.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string}\r\n * @example\r\n * // Returns \"44\"\r\n * getCountryCallingCode(\"GB\")\r\n */\n\nexport function getCountryCallingCode(country, metadata) {\n metadata = new Metadata(metadata);\n\n if (metadata.hasCountry(country)) {\n return metadata.country(country).countryCallingCode();\n }\n\n throw new Error(\"Unknown country: \".concat(country));\n}\nexport function isSupportedCountry(country, metadata) {\n // metadata = new Metadata(metadata)\n // return metadata.hasCountry(country)\n return metadata.countries[country] !== undefined;\n}\n\nfunction setVersion(metadata) {\n var version = metadata.version;\n\n if (typeof version === 'number') {\n this.v1 = version === 1;\n this.v2 = version === 2;\n this.v3 = version === 3;\n this.v4 = version === 4;\n } else {\n if (!version) {\n this.v1 = true;\n } else if (compare(version, V3) === -1) {\n this.v2 = true;\n } else if (compare(version, V4) === -1) {\n this.v3 = true;\n } else {\n this.v4 = true;\n }\n }\n} // const ISO_COUNTRY_CODE = /^[A-Z]{2}$/\n// function isCountryCode(countryCode) {\n// \treturn ISO_COUNTRY_CODE.test(countryCodeOrCountryCallingCode)\n// }\n//# sourceMappingURL=metadata.js.map","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"AC\":\"40123\",\"AD\":\"312345\",\"AE\":\"501234567\",\"AF\":\"701234567\",\"AG\":\"2684641234\",\"AI\":\"2642351234\",\"AL\":\"672123456\",\"AM\":\"77123456\",\"AO\":\"923123456\",\"AR\":\"91123456789\",\"AS\":\"6847331234\",\"AT\":\"664123456\",\"AU\":\"412345678\",\"AW\":\"5601234\",\"AX\":\"412345678\",\"AZ\":\"401234567\",\"BA\":\"61123456\",\"BB\":\"2462501234\",\"BD\":\"1812345678\",\"BE\":\"470123456\",\"BF\":\"70123456\",\"BG\":\"43012345\",\"BH\":\"36001234\",\"BI\":\"79561234\",\"BJ\":\"90011234\",\"BL\":\"690001234\",\"BM\":\"4413701234\",\"BN\":\"7123456\",\"BO\":\"71234567\",\"BQ\":\"3181234\",\"BR\":\"11961234567\",\"BS\":\"2423591234\",\"BT\":\"17123456\",\"BW\":\"71123456\",\"BY\":\"294911911\",\"BZ\":\"6221234\",\"CA\":\"5062345678\",\"CC\":\"412345678\",\"CD\":\"991234567\",\"CF\":\"70012345\",\"CG\":\"061234567\",\"CH\":\"781234567\",\"CI\":\"0123456789\",\"CK\":\"71234\",\"CL\":\"221234567\",\"CM\":\"671234567\",\"CN\":\"13123456789\",\"CO\":\"3211234567\",\"CR\":\"83123456\",\"CU\":\"51234567\",\"CV\":\"9911234\",\"CW\":\"95181234\",\"CX\":\"412345678\",\"CY\":\"96123456\",\"CZ\":\"601123456\",\"DE\":\"15123456789\",\"DJ\":\"77831001\",\"DK\":\"32123456\",\"DM\":\"7672251234\",\"DO\":\"8092345678\",\"DZ\":\"551234567\",\"EC\":\"991234567\",\"EE\":\"51234567\",\"EG\":\"1001234567\",\"EH\":\"650123456\",\"ER\":\"7123456\",\"ES\":\"612345678\",\"ET\":\"911234567\",\"FI\":\"412345678\",\"FJ\":\"7012345\",\"FK\":\"51234\",\"FM\":\"3501234\",\"FO\":\"211234\",\"FR\":\"612345678\",\"GA\":\"06031234\",\"GB\":\"7400123456\",\"GD\":\"4734031234\",\"GE\":\"555123456\",\"GF\":\"694201234\",\"GG\":\"7781123456\",\"GH\":\"231234567\",\"GI\":\"57123456\",\"GL\":\"221234\",\"GM\":\"3012345\",\"GN\":\"601123456\",\"GP\":\"690001234\",\"GQ\":\"222123456\",\"GR\":\"6912345678\",\"GT\":\"51234567\",\"GU\":\"6713001234\",\"GW\":\"955012345\",\"GY\":\"6091234\",\"HK\":\"51234567\",\"HN\":\"91234567\",\"HR\":\"921234567\",\"HT\":\"34101234\",\"HU\":\"201234567\",\"ID\":\"812345678\",\"IE\":\"850123456\",\"IL\":\"502345678\",\"IM\":\"7924123456\",\"IN\":\"8123456789\",\"IO\":\"3801234\",\"IQ\":\"7912345678\",\"IR\":\"9123456789\",\"IS\":\"6111234\",\"IT\":\"3123456789\",\"JE\":\"7797712345\",\"JM\":\"8762101234\",\"JO\":\"790123456\",\"JP\":\"9012345678\",\"KE\":\"712123456\",\"KG\":\"700123456\",\"KH\":\"91234567\",\"KI\":\"72001234\",\"KM\":\"3212345\",\"KN\":\"8697652917\",\"KP\":\"1921234567\",\"KR\":\"1020000000\",\"KW\":\"50012345\",\"KY\":\"3453231234\",\"KZ\":\"7710009998\",\"LA\":\"2023123456\",\"LB\":\"71123456\",\"LC\":\"7582845678\",\"LI\":\"660234567\",\"LK\":\"712345678\",\"LR\":\"770123456\",\"LS\":\"50123456\",\"LT\":\"61234567\",\"LU\":\"628123456\",\"LV\":\"21234567\",\"LY\":\"912345678\",\"MA\":\"650123456\",\"MC\":\"612345678\",\"MD\":\"62112345\",\"ME\":\"67622901\",\"MF\":\"690001234\",\"MG\":\"321234567\",\"MH\":\"2351234\",\"MK\":\"72345678\",\"ML\":\"65012345\",\"MM\":\"92123456\",\"MN\":\"88123456\",\"MO\":\"66123456\",\"MP\":\"6702345678\",\"MQ\":\"696201234\",\"MR\":\"22123456\",\"MS\":\"6644923456\",\"MT\":\"96961234\",\"MU\":\"52512345\",\"MV\":\"7712345\",\"MW\":\"991234567\",\"MX\":\"12221234567\",\"MY\":\"123456789\",\"MZ\":\"821234567\",\"NA\":\"811234567\",\"NC\":\"751234\",\"NE\":\"93123456\",\"NF\":\"381234\",\"NG\":\"8021234567\",\"NI\":\"81234567\",\"NL\":\"612345678\",\"NO\":\"40612345\",\"NP\":\"9841234567\",\"NR\":\"5551234\",\"NU\":\"8884012\",\"NZ\":\"211234567\",\"OM\":\"92123456\",\"PA\":\"61234567\",\"PE\":\"912345678\",\"PF\":\"87123456\",\"PG\":\"70123456\",\"PH\":\"9051234567\",\"PK\":\"3012345678\",\"PL\":\"512345678\",\"PM\":\"551234\",\"PR\":\"7872345678\",\"PS\":\"599123456\",\"PT\":\"912345678\",\"PW\":\"6201234\",\"PY\":\"961456789\",\"QA\":\"33123456\",\"RE\":\"692123456\",\"RO\":\"712034567\",\"RS\":\"601234567\",\"RU\":\"9123456789\",\"RW\":\"720123456\",\"SA\":\"512345678\",\"SB\":\"7421234\",\"SC\":\"2510123\",\"SD\":\"911231234\",\"SE\":\"701234567\",\"SG\":\"81234567\",\"SH\":\"51234\",\"SI\":\"31234567\",\"SJ\":\"41234567\",\"SK\":\"912123456\",\"SL\":\"25123456\",\"SM\":\"66661212\",\"SN\":\"701234567\",\"SO\":\"71123456\",\"SR\":\"7412345\",\"SS\":\"977123456\",\"ST\":\"9812345\",\"SV\":\"70123456\",\"SX\":\"7215205678\",\"SY\":\"944567890\",\"SZ\":\"76123456\",\"TA\":\"8999\",\"TC\":\"6492311234\",\"TD\":\"63012345\",\"TG\":\"90112345\",\"TH\":\"812345678\",\"TJ\":\"917123456\",\"TK\":\"7290\",\"TL\":\"77212345\",\"TM\":\"66123456\",\"TN\":\"20123456\",\"TO\":\"7715123\",\"TR\":\"5012345678\",\"TT\":\"8682911234\",\"TV\":\"901234\",\"TW\":\"912345678\",\"TZ\":\"621234567\",\"UA\":\"501234567\",\"UG\":\"712345678\",\"US\":\"2015550123\",\"UY\":\"94231234\",\"UZ\":\"912345678\",\"VA\":\"3123456789\",\"VC\":\"7844301234\",\"VE\":\"4121234567\",\"VG\":\"2843001234\",\"VI\":\"3406421234\",\"VN\":\"912345678\",\"VU\":\"5912345\",\"WF\":\"821234\",\"WS\":\"7212345\",\"XK\":\"43201234\",\"YE\":\"712345678\",\"YT\":\"639012345\",\"ZA\":\"711234567\",\"ZM\":\"955123456\",\"ZW\":\"712345678\"}","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"version\":4,\"country_calling_codes\":{\"1\":[\"US\",\"AG\",\"AI\",\"AS\",\"BB\",\"BM\",\"BS\",\"CA\",\"DM\",\"DO\",\"GD\",\"GU\",\"JM\",\"KN\",\"KY\",\"LC\",\"MP\",\"MS\",\"PR\",\"SX\",\"TC\",\"TT\",\"VC\",\"VG\",\"VI\"],\"7\":[\"RU\",\"KZ\"],\"20\":[\"EG\"],\"27\":[\"ZA\"],\"30\":[\"GR\"],\"31\":[\"NL\"],\"32\":[\"BE\"],\"33\":[\"FR\"],\"34\":[\"ES\"],\"36\":[\"HU\"],\"39\":[\"IT\",\"VA\"],\"40\":[\"RO\"],\"41\":[\"CH\"],\"43\":[\"AT\"],\"44\":[\"GB\",\"GG\",\"IM\",\"JE\"],\"45\":[\"DK\"],\"46\":[\"SE\"],\"47\":[\"NO\",\"SJ\"],\"48\":[\"PL\"],\"49\":[\"DE\"],\"51\":[\"PE\"],\"52\":[\"MX\"],\"53\":[\"CU\"],\"54\":[\"AR\"],\"55\":[\"BR\"],\"56\":[\"CL\"],\"57\":[\"CO\"],\"58\":[\"VE\"],\"60\":[\"MY\"],\"61\":[\"AU\",\"CC\",\"CX\"],\"62\":[\"ID\"],\"63\":[\"PH\"],\"64\":[\"NZ\"],\"65\":[\"SG\"],\"66\":[\"TH\"],\"81\":[\"JP\"],\"82\":[\"KR\"],\"84\":[\"VN\"],\"86\":[\"CN\"],\"90\":[\"TR\"],\"91\":[\"IN\"],\"92\":[\"PK\"],\"93\":[\"AF\"],\"94\":[\"LK\"],\"95\":[\"MM\"],\"98\":[\"IR\"],\"211\":[\"SS\"],\"212\":[\"MA\",\"EH\"],\"213\":[\"DZ\"],\"216\":[\"TN\"],\"218\":[\"LY\"],\"220\":[\"GM\"],\"221\":[\"SN\"],\"222\":[\"MR\"],\"223\":[\"ML\"],\"224\":[\"GN\"],\"225\":[\"CI\"],\"226\":[\"BF\"],\"227\":[\"NE\"],\"228\":[\"TG\"],\"229\":[\"BJ\"],\"230\":[\"MU\"],\"231\":[\"LR\"],\"232\":[\"SL\"],\"233\":[\"GH\"],\"234\":[\"NG\"],\"235\":[\"TD\"],\"236\":[\"CF\"],\"237\":[\"CM\"],\"238\":[\"CV\"],\"239\":[\"ST\"],\"240\":[\"GQ\"],\"241\":[\"GA\"],\"242\":[\"CG\"],\"243\":[\"CD\"],\"244\":[\"AO\"],\"245\":[\"GW\"],\"246\":[\"IO\"],\"247\":[\"AC\"],\"248\":[\"SC\"],\"249\":[\"SD\"],\"250\":[\"RW\"],\"251\":[\"ET\"],\"252\":[\"SO\"],\"253\":[\"DJ\"],\"254\":[\"KE\"],\"255\":[\"TZ\"],\"256\":[\"UG\"],\"257\":[\"BI\"],\"258\":[\"MZ\"],\"260\":[\"ZM\"],\"261\":[\"MG\"],\"262\":[\"RE\",\"YT\"],\"263\":[\"ZW\"],\"264\":[\"NA\"],\"265\":[\"MW\"],\"266\":[\"LS\"],\"267\":[\"BW\"],\"268\":[\"SZ\"],\"269\":[\"KM\"],\"290\":[\"SH\",\"TA\"],\"291\":[\"ER\"],\"297\":[\"AW\"],\"298\":[\"FO\"],\"299\":[\"GL\"],\"350\":[\"GI\"],\"351\":[\"PT\"],\"352\":[\"LU\"],\"353\":[\"IE\"],\"354\":[\"IS\"],\"355\":[\"AL\"],\"356\":[\"MT\"],\"357\":[\"CY\"],\"358\":[\"FI\",\"AX\"],\"359\":[\"BG\"],\"370\":[\"LT\"],\"371\":[\"LV\"],\"372\":[\"EE\"],\"373\":[\"MD\"],\"374\":[\"AM\"],\"375\":[\"BY\"],\"376\":[\"AD\"],\"377\":[\"MC\"],\"378\":[\"SM\"],\"380\":[\"UA\"],\"381\":[\"RS\"],\"382\":[\"ME\"],\"383\":[\"XK\"],\"385\":[\"HR\"],\"386\":[\"SI\"],\"387\":[\"BA\"],\"389\":[\"MK\"],\"420\":[\"CZ\"],\"421\":[\"SK\"],\"423\":[\"LI\"],\"500\":[\"FK\"],\"501\":[\"BZ\"],\"502\":[\"GT\"],\"503\":[\"SV\"],\"504\":[\"HN\"],\"505\":[\"NI\"],\"506\":[\"CR\"],\"507\":[\"PA\"],\"508\":[\"PM\"],\"509\":[\"HT\"],\"590\":[\"GP\",\"BL\",\"MF\"],\"591\":[\"BO\"],\"592\":[\"GY\"],\"593\":[\"EC\"],\"594\":[\"GF\"],\"595\":[\"PY\"],\"596\":[\"MQ\"],\"597\":[\"SR\"],\"598\":[\"UY\"],\"599\":[\"CW\",\"BQ\"],\"670\":[\"TL\"],\"672\":[\"NF\"],\"673\":[\"BN\"],\"674\":[\"NR\"],\"675\":[\"PG\"],\"676\":[\"TO\"],\"677\":[\"SB\"],\"678\":[\"VU\"],\"679\":[\"FJ\"],\"680\":[\"PW\"],\"681\":[\"WF\"],\"682\":[\"CK\"],\"683\":[\"NU\"],\"685\":[\"WS\"],\"686\":[\"KI\"],\"687\":[\"NC\"],\"688\":[\"TV\"],\"689\":[\"PF\"],\"690\":[\"TK\"],\"691\":[\"FM\"],\"692\":[\"MH\"],\"850\":[\"KP\"],\"852\":[\"HK\"],\"853\":[\"MO\"],\"855\":[\"KH\"],\"856\":[\"LA\"],\"880\":[\"BD\"],\"886\":[\"TW\"],\"960\":[\"MV\"],\"961\":[\"LB\"],\"962\":[\"JO\"],\"963\":[\"SY\"],\"964\":[\"IQ\"],\"965\":[\"KW\"],\"966\":[\"SA\"],\"967\":[\"YE\"],\"968\":[\"OM\"],\"970\":[\"PS\"],\"971\":[\"AE\"],\"972\":[\"IL\"],\"973\":[\"BH\"],\"974\":[\"QA\"],\"975\":[\"BT\"],\"976\":[\"MN\"],\"977\":[\"NP\"],\"992\":[\"TJ\"],\"993\":[\"TM\"],\"994\":[\"AZ\"],\"995\":[\"GE\"],\"996\":[\"KG\"],\"998\":[\"UZ\"]},\"countries\":{\"AC\":[\"247\",\"00\",\"(?:[01589]\\\\d|[46])\\\\d{4}\",[5,6],0,0,0,0,0,0,0,[0,[\"4\\\\d{4}\",[5]]]],\"AD\":[\"376\",\"00\",\"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\",[6,8,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[135-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"690\\\\d{6}|[356]\\\\d{5}\",[6,9]]]],\"AE\":[\"971\",\"00\",\"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{2,9})\",\"$1 $2\",[\"60|8\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[236]|[479][2-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{5})\",\"$1 $2 $3\",[\"[479]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5[024-68]\\\\d{7}\",[9]]]],\"AF\":[\"93\",\"00\",\"[2-7]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7\\\\d{8}\"]]],\"AG\":[\"1\",\"011\",\"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([457]\\\\d{6})$|1\",\"268$1\",0,\"268\",[0,[\"268(?:464|7(?:1[3-9]|[28]\\\\d|3[0246]|64|7[0-689]))\\\\d{4}\"]]],\"AI\":[\"1\",\"011\",\"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2457]\\\\d{6})$|1\",\"264$1\",0,\"264\",[0,[\"264(?:235|4(?:69|76)|5(?:3[6-9]|8[1-4])|7(?:29|72))\\\\d{4}\"]]],\"AL\":[\"355\",\"00\",\"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\",[6,7,8,9],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"80|9\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2358][2-5]|4\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[23578]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[78][2-9]|9\\\\d)\\\\d{6}\",[9]]]],\"AM\":[\"374\",\"00\",\"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]0\"],\"0 $1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2|3[12]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"1|47\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[3-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:33|4[1349]|55|77|88|9[13-9])\\\\d{6}\"]]],\"AO\":[\"244\",\"00\",\"[29]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"9[1-59]\\\\d{7}\"]]],\"AR\":[\"54\",\"00\",\"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\",[10,11],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2-$3\",[\"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"1\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[68]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[23]\"],\"0$1\",1],[\"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9(?:2[2-469]|3[3-578])\",\"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 15-$3-$4\",[\"91\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9\"],\"0$1\",0,\"$1 $2 $3-$4\"]],\"0\",0,\"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\"9$1\",0,0,[0,[\"93(?:7(?:1[15]|81)[46]|8(?:(?:21|4[16]|69|9[12])[46]|88[013-9]))\\\\d{5}|9(?:29(?:54|66)|3(?:7(?:55|77)|865))[2-8]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|473|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:284|3(?:02|23)|657|920)|3(?:4(?:8[27]|92)|541|878))[2-7]\\\\d{5}|9(?:2(?:(?:26|62)2|320|477|9(?:42|83))|3(?:329|4(?:[47]6|62|89)|564))[2-6]\\\\d{5}|(?:675\\\\d|9(?:11[1-8]\\\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-7]|[235][4-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|[17][2-6]|3[4-6]|[58][3-6]))))\\\\d{6}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|475|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:2(?:57|81)|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|71)|5(?:25|37|4[347]|71)|7(?:18|5[17])))[3-6]\\\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[03-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[145]|4[13]|5[468]|7[2-5]|8[26])|8(?:2[5-7]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\"]]],\"AS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\",[10],0,\"1\",0,\"([267]\\\\d{6})$|1\",\"684$1\",0,\"684\",[0,[\"684(?:2(?:48|5[2468]|7[26])|7(?:3[13]|70|82))\\\\d{4}\"]]],\"AT\":[\"43\",\"00\",\"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{3,12})\",\"$1 $2\",[\"1(?:11|[2-9])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})\",\"$1 $2\",[\"517\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"5[079]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,10})\",\"$1 $2\",[\"(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,9})\",\"$1 $2\",[\"[2-467]|5[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d{4,10}\",[7,8,9,10,11,12,13]]]],\"AU\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\",[5,6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"16\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"16\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"14|4\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[2378]\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:30|[89])\"]]],\"0\",0,\"(183[12])|0\",0,0,0,[0,[\"4(?:79[01]|83[0-389]|93[0-6])\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-27-9])\\\\d{6}\",[9]]],\"0011\"],\"AW\":[\"297\",\"00\",\"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[25-9]\"]]],0,0,0,0,0,0,[0,[\"(?:290|5[69]\\\\d|6(?:[03]0|22|4[0-2]|[69]\\\\d)|7(?:[34]\\\\d|7[07])|9(?:6[45]|9[4-8]))\\\\d{4}\"]]],\"AX\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\",[5,6,7,8,9,10,11,12],0,\"0\",0,0,0,0,\"18\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"AZ\":[\"994\",\"00\",\"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[28]|2|365|46\",\"1[28]|2|365[45]|46\",\"1[28]|2|365(?:4|5[02])|46\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[13-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"36554\\\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\\\d{7}\"]]],\"BA\":[\"387\",\"00\",\"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[1-3]|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2-$3\",[\"[3-5]|6[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6040\\\\d{5}|6(?:03|[1-356]|44|7\\\\d)\\\\d{6}\"]]],\"BB\":[\"1\",\"011\",\"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"246$1\",0,\"246\",[0,[\"246(?:(?:2(?:[3568]\\\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\\\d)|69[5-7]|8(?:[2-5]\\\\d|83))\\\\d|52(?:1[147]|20))\\\\d{3}\"]]],\"BD\":[\"880\",\"00\",\"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1-$2\",[\"31[5-8]|[459]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1-$2\",[\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:28|4[14]|5)|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,6})\",\"$1-$2\",[\"[13-9]|22\"],\"0$1\"],[\"(\\\\d)(\\\\d{7,8})\",\"$1-$2\",[\"2\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[13-9]\\\\d|644)\\\\d{7}|(?:3[78]|44|66)[02-9]\\\\d{7}\",[10]]]],\"BE\":[\"32\",\"00\",\"4\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:80|9)0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[239]|4[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[15-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[5-9]\\\\d{7}\",[9]]]],\"BF\":[\"226\",\"00\",\"[025-7]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[025-7]\"]]],0,0,0,0,0,0,[0,[\"(?:0[1-35-7]|5[1-8]|[67]\\\\d)\\\\d{6}\"]]],\"BG\":[\"359\",\"00\",\"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",[6,7,8,9,12],[[\"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"43[1-6]|70[1-9]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:70|8)0\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"43[1-7]|7\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[48]|9[08]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:43[07-9]|99[69]\\\\d)\\\\d{5}|(?:8[7-9]|98)\\\\d{7}\",[8,9]]]],\"BH\":[\"973\",\"00\",\"[136-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[13679]|8[047]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[1-79]\\\\d|8[0-47-9])\\\\d|6(?:3(?:00|33|6[16])|6(?:3[03-9]|[69]\\\\d|7[0-6])))\\\\d{4}\"]]],\"BI\":[\"257\",\"00\",\"(?:[267]\\\\d|31)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2367]\"]]],0,0,0,0,0,0,[0,[\"(?:29|[67][125-9])\\\\d{6}\"]]],\"BJ\":[\"229\",\"00\",\"[24-689]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-689]\"]]],0,0,0,0,0,0,[0,[\"(?:4[0-2]|[56]\\\\d|9[013-9])\\\\d{6}\"]]],\"BL\":[\"590\",\"00\",\"590\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))\\\\d{4}\"]]],\"BM\":[\"1\",\"011\",\"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"441$1\",0,\"441\",[0,[\"441(?:[2378]\\\\d|5[0-39]|92)\\\\d{5}\"]]],\"BN\":[\"673\",\"00\",\"[2-578]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"(?:22[89]|[78]\\\\d\\\\d)\\\\d{4}\"]]],\"BO\":[\"591\",\"00(?:1\\\\d)?\",\"(?:[2-467]\\\\d\\\\d|8001)\\\\d{5}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[23]|4[46]\"]],[\"(\\\\d{8})\",\"$1\",[\"[67]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,\"0(1\\\\d)?\",0,0,0,[0,[\"[67]\\\\d{7}\",[8]]]],\"BQ\":[\"599\",\"00\",\"(?:[34]1|7\\\\d)\\\\d{5}\",[7],0,0,0,0,0,0,\"[347]\",[0,[\"(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\"]]],\"BR\":[\"55\",\"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\",\"(?:[1-46-9]\\\\d\\\\d|5(?:[0-46-9]\\\\d|5[0-46-9]))\\\\d{8}|[1-9]\\\\d{9}|[3589]\\\\d{8}|[34]\\\\d{7}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37)\",\"4(?:02|37)0|[34]00\"]],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:[358]|90)0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1 $2-$3\",[\"[16][1-9]|[2-57-9]\"],\"($1)\"]],\"0\",0,\"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\",\"$2\",0,0,[0,[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\\\d)\\\\d{7}\",[10,11]]]],\"BS\":[\"1\",\"011\",\"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([3-8]\\\\d{6})$|1\",\"242$1\",0,\"242\",[0,[\"242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\\\d|[89]9))\\\\d{4}\"]]],\"BT\":[\"975\",\"00\",\"[17]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-68]|7[246]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|7\"]]],0,0,0,0,0,0,[0,[\"(?:1[67]|77)\\\\d{6}\",[8]]]],\"BW\":[\"267\",\"00\",\"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-6]|3[15-79]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:321|7(?:[1-7]\\\\d|8[0-4]))\\\\d{5}\",[8]]]],\"BY\":[\"375\",\"810\",\"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"800\"],\"8 $1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\",\"$1 $2 $3\",[\"800\"],\"8 $1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{3})\",\"$1 $2-$3\",[\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\",\"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"1(?:[56]|7[467])|2[1-3]\"],\"8 0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-4]\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"8 $1\"]],\"8\",0,\"0|80?\",0,0,0,[0,[\"(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\\\d)\\\\d{6}\",[9]]],\"8~10\"],\"BZ\":[\"501\",\"00\",\"(?:0800\\\\d|[2-8])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-8]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"6[0-35-7]\\\\d{5}\",[7]]]],\"CA\":[\"1\",\"011\",\"(?:[2-8]\\\\d|90)\\\\d{8}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[0,[\"(?:2(?:04|[23]6|[48]9|50|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|3[178]|50|68|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\\\d{6}\",[10]]]],\"CC\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:79[01]|83[0-389]|93[0-6])\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-27-9])\\\\d{6}\",[9]]],\"0011\"],\"CD\":[\"243\",\"00\",\"[189]\\\\d{8}|[1-68]\\\\d{6}\",[7,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[1-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"88\\\\d{5}|(?:8[0-59]|9[017-9])\\\\d{7}\"]]],\"CF\":[\"236\",\"00\",\"(?:[27]\\\\d{3}|8776)\\\\d{4}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[278]\"]]],0,0,0,0,0,0,[0,[\"7[024-7]\\\\d{6}\"]]],\"CG\":[\"242\",\"00\",\"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[02]\"]]],0,0,0,0,0,0,[0,[\"026(?:1[0-5]|6[6-9])\\\\d{4}|0(?:[14-6]\\\\d\\\\d|2(?:40|5[5-8]|6[07-9]))\\\\d{5}\"]]],\"CH\":[\"41\",\"00\",\"8\\\\d{11}|[2-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8[047]|90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]|81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[35-9]\\\\d{7}\"]]],\"CI\":[\"225\",\"00\",\"[02]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\",\"$1 $2 $3 $4\",[\"2\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"0[157]\\\\d{8}\"]]],\"CK\":[\"682\",\"00\",\"[2-578]\\\\d{4}\",[5],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"[578]\\\\d{4}\"]]],\"CL\":[\"56\",\"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\",\"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\",[9,10,11],[[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"219\",\"2196\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[1-36]\"],\"($1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"9[2-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-9]|[1-9])\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"60|8\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"60\"]]],0,0,0,0,0,0,[0,[\"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:2\\\\d\\\\d|3(?:[0346]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|7[0-3])|600)|646[59])|80[1-9]\\\\d\\\\d|9(?:3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|7[1-9]\\\\d\\\\d|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\",[9]]]],\"CM\":[\"237\",\"00\",\"[26]\\\\d{8}|88\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"88\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[26]|88\"]]],0,0,0,0,0,0,[0,[\"(?:24[23]|6[25-9]\\\\d)\\\\d{6}\",[9]]]],\"CN\":[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"1[127]\\\\d{8,9}|2\\\\d{9}(?:\\\\d{2})?|[12]\\\\d{6,7}|86\\\\d{6}|(?:1[03-689]\\\\d|6)\\\\d{7,9}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{6,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]\",\"(?:10|2[0-57-9])(?:10|9[56])\",\"10(?:10|9[56])|2[0-57-9](?:100|9[56])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:4|80)0\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|2(?:[02-57-9]|1[1-9])\",\"10|2(?:[02-57-9]|1[1-9])\",\"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-578]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"1[3-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"[12]\"],\"0$1\",1]],\"0\",0,\"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\",0,0,0,[0,[\"1740[0-5]\\\\d{6}|1(?:[38]\\\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\\\d{8}\",[11]]],\"00\"],\"CO\":[\"57\",\"00(?:4(?:[14]4|56)|[579])\",\"(?:60\\\\d\\\\d|9101)\\\\d{6}|(?:1\\\\d|3)\\\\d{9}\",[10,11],[[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|91\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0(4(?:[14]4|56)|[579])?\",0,0,0,[0,[\"3333(?:0(?:0\\\\d|1[0-5])|[4-9]\\\\d\\\\d)\\\\d{3}|(?:3(?:24[1-9]|3(?:00|3[0-24-9]))|9101)\\\\d{6}|3(?:0[0-5]|1\\\\d|2[0-3]|5[01]|70)\\\\d{7}\",[10]]]],\"CR\":[\"506\",\"00\",\"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\",[8,10],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[3-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[89]\"]]],0,0,\"(19(?:0[0-2468]|1[09]|20|66|77|99))\",0,0,0,[0,[\"(?:3005\\\\d|6500[01])\\\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\\\d{6}\",[8]]]],\"CU\":[\"53\",\"119\",\"[27]\\\\d{6,7}|[34]\\\\d{5,7}|(?:5|8\\\\d\\\\d)\\\\d{7}\",[6,7,8,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"2[1-4]|[34]\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{6,7})\",\"$1 $2\",[\"7\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"5\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5\\\\d{7}\",[8]]]],\"CV\":[\"238\",\"0\",\"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:36|5[1-389]|9\\\\d)\\\\d{5}\"]]],\"CW\":[\"599\",\"00\",\"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[3467]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9[4-8]\"]]],0,0,0,0,0,\"[69]\",[0,[\"953[01]\\\\d{4}|9(?:5[12467]|6[5-9])\\\\d{5}\"]]],\"CX\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:79[01]|83[0-389]|93[0-6])\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-27-9])\\\\d{6}\",[9]]],\"0011\"],\"CY\":[\"357\",\"00\",\"(?:[279]\\\\d|[58]0)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[257-9]\"]]],0,0,0,0,0,0,[0,[\"9(?:10|[4-79]\\\\d)\\\\d{5}\"]]],\"CZ\":[\"420\",\"00\",\"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]|9[015-7]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"96\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"(?:60[1-8]|7(?:0[2-5]|[2379]\\\\d))\\\\d{6}\"]]],\"DE\":[\"49\",\"00\",\"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\",[4,5,6,7,8,9,10,11,12,13,14,15],[[\"(\\\\d{2})(\\\\d{3,13})\",\"$1 $2\",[\"3[02]|40|[68]9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,12})\",\"$1 $2\",[\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\",\"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2,11})\",\"$1 $2\",[\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\",\"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"138\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{2,10})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,11})\",\"$1 $2\",[\"181\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{4,10})\",\"$1 $2 $3\",[\"1(?:3|80)|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"1[67]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,12})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"185\",\"1850\",\"18500\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"18[68]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[0568]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{8})\",\"$1 $2\",[\"18\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\",\"$1 $2 $3\",[\"1(?:6[023]|7)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{7})\",\"$1 $2 $3\",[\"15[279]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{8})\",\"$1 $2 $3\",[\"15\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"15[0-25-9]\\\\d{8}|1(?:6[023]|7\\\\d)\\\\d{7,8}\",[10,11]]]],\"DJ\":[\"253\",\"00\",\"(?:2\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[27]\"]]],0,0,0,0,0,0,[0,[\"77\\\\d{6}\"]]],\"DK\":[\"45\",\"00\",\"[2-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[2-7]\\\\d|8[126-9]|9[1-46-9])\\\\d{6}\"]]],\"DM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"767$1\",0,\"767\",[0,[\"767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\\\d{4}\"]]],\"DO\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"8001|8[024]9\",[0,[\"8[024]9[2-9]\\\\d{6}\"]]],\"DZ\":[\"213\",\"00\",\"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:4[0-29]|5\\\\d|6[0-2])|6(?:[569]\\\\d|7[0-6])|7[7-9]\\\\d)\\\\d{6}\",[9]]]],\"EC\":[\"593\",\"00\",\"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\",[8,9,10,11],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[2-7]\"],\"(0$1)\",0,\"$1-$2-$3\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"964[0-2]\\\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\\\d)\\\\d{6}\",[9]]]],\"EE\":[\"372\",\"00\",\"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\",\"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]],[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[45]|8(?:00|[1-49])\",\"[45]|8(?:00[1-9]|[1-49])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:5\\\\d{5}|8(?:1(?:0(?:000|[3-9]\\\\d\\\\d)|(?:1(?:0[236]|1\\\\d)|(?:2[0-59]|[3-79]\\\\d)\\\\d)\\\\d)|2(?:0(?:000|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-6]\\\\d|3[5-9])\\\\d|7(?:[3679]\\\\d|8[13-9])|8(?:[2-6]\\\\d|7[01]))\\\\d)|[349]\\\\d{4}))\\\\d\\\\d|5(?:(?:[02]\\\\d|5[0-478])\\\\d|1(?:[0-8]\\\\d|95)|6(?:4[0-4]|5[1-589]))\\\\d{3}\",[7,8]]]],\"EG\":[\"20\",\"00\",\"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{7,8})\",\"$1 $2\",[\"[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,7})\",\"$1 $2\",[\"1[35]|[4-6]|8[2468]|9[235-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[189]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1[0-25]\\\\d{8}\",[10]]]],\"EH\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],0,\"0\",0,0,0,0,\"528[89]\",[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[017]\\\\d|2[0-2]|6[0-8]|8[0-3]))\\\\d{6}\"]]],\"ER\":[\"291\",\"00\",\"[178]\\\\d{6}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[178]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[1-3]|7\\\\d\\\\d)\\\\d{4}\"]]],\"ES\":[\"34\",\"00\",\"[5-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]00\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"(?:590[16]00\\\\d|9(?:6906(?:09|10)|7390\\\\d\\\\d))\\\\d\\\\d|(?:6\\\\d|7[1-48])\\\\d{7}\"]]],\"ET\":[\"251\",\"00\",\"(?:11|[2-579]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7001\\\\d{5}|(?:7(?:0[1-9]|1[01]|77|86|99)|9\\\\d\\\\d)\\\\d{6}\"]]],\"FI\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"[2568][1-8]|3(?:0[1-9]|[1-9])|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[12]00|[368]|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[1245]|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,\"1[03-79]|[2-9]\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"FJ\":[\"679\",\"0(?:0|52)\",\"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[235-9]|45\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]]],0,0,0,0,0,0,[0,[\"(?:[279]\\\\d|45|5[01568]|8[034679])\\\\d{5}\",[7]]],\"00\"],\"FK\":[\"500\",\"00\",\"[2-7]\\\\d{4}\",[5],0,0,0,0,0,0,0,[0,[\"[56]\\\\d{4}\"]]],\"FM\":[\"691\",\"00\",\"(?:[39]\\\\d\\\\d|820)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[389]\"]]],0,0,0,0,0,0,[0,[\"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\\\d)\\\\d)\\\\d{3}\"]]],\"FO\":[\"298\",\"00\",\"[2-9]\\\\d{5}\",[6],[[\"(\\\\d{6})\",\"$1\",[\"[2-9]\"]]],0,0,\"(10(?:01|[12]0|88))\",0,0,0,[0,[\"(?:[27][1-9]|5\\\\d|9[16])\\\\d{4}\"]]],\"FR\":[\"33\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0 $1\"],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[1-79]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-24-8]\\\\d|3[0-8]|9[589])|7[3-9]\\\\d)\\\\d{6}\"]]],\"GA\":[\"241\",\"00\",\"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"11|[67]\"],\"0$1\"]],0,0,\"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\",\"$1\",0,0,[0,[\"(?:(?:0[2-7]|7[467])\\\\d|6(?:0[0-4]|10|[256]\\\\d))\\\\d{5}|[2-7]\\\\d{6}\"]]],\"GB\":[\"44\",\"00\",\"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\",[7,9,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"800\",\"8001\",\"80011\",\"800111\",\"8001111\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"845\",\"8454\",\"84546\",\"845464\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"1(?:38|5[23]|69|76|94)\",\"1(?:(?:38|69)7|5(?:24|39)|768|946)\",\"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"1(?:[2-69][02-9]|[78])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[25]|7(?:0|6[02-9])\",\"[25]|7(?:0|6(?:[03-9]|2[356]))\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1389]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\",[10]]],0,\" x\"],\"GD\":[\"1\",\"011\",\"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"473$1\",0,\"473\",[0,[\"473(?:4(?:0[2-79]|1[04-9]|2[0-5]|58)|5(?:2[01]|3[3-8])|901)\\\\d{4}\"]]],\"GE\":[\"995\",\"00\",\"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"32\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[57]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[348]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\\\d|22252[0-4])\\\\d\\\\d|5(?:00(?:0\\\\d|5[05])|11(?:00|[124]\\\\d|3[01])|(?:520|909)0|75(?:00|[57]5)|8(?:0(?:[01]\\\\d|2[0-4])|58[89]|8(?:55|88)))\\\\d{4}|(?:5(?:[14]4|5[0157-9]|68|7[0147-9]|9[1-35-9])|790)\\\\d{6}|5(?:0(?:070|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|(?:40[04]|900)0|5222)[0-4]\\\\d{3}\"]]],\"GF\":[\"594\",\"00\",\"[56]94\\\\d{6}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[56]|9[47]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"694(?:[0-249]\\\\d|3[0-8])\\\\d{4}\"]]],\"GG\":[\"44\",\"00\",\"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\",[7,9,10],0,\"0\",0,\"([25-9]\\\\d{5})$|0\",\"1481$1\",0,0,[0,[\"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\",[10]]]],\"GH\":[\"233\",\"00\",\"(?:[235]\\\\d{3}|800)\\\\d{5}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[235]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:2(?:[0346-9]\\\\d|5[67])|5(?:[03-7]\\\\d|9[1-9]))\\\\d{6}\",[9]]]],\"GI\":[\"350\",\"00\",\"(?:[25]\\\\d|60)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2\"]]],0,0,0,0,0,0,[0,[\"5251[0-4]\\\\d{3}|(?:5(?:[146-8]\\\\d\\\\d|250)|60(?:1[01]|6\\\\d))\\\\d{4}\"]]],\"GL\":[\"299\",\"00\",\"(?:19|[2-689]\\\\d|70)\\\\d{4}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"19|[2-9]\"]]],0,0,0,0,0,0,[0,[\"[245]\\\\d{5}\"]]],\"GM\":[\"220\",\"00\",\"[2-9]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[23679]\\\\d|5[0-489])\\\\d{5}\"]]],\"GN\":[\"224\",\"00\",\"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"3\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[67]\"]]],0,0,0,0,0,0,[0,[\"6[0-356]\\\\d{7}\",[9]]]],\"GP\":[\"590\",\"00\",\"590\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[569]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))\\\\d{4}\"]]],\"GQ\":[\"240\",\"00\",\"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235]\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55\\\\d)\\\\d{6}\"]]],\"GR\":[\"30\",\"00\",\"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\",[10,11,12],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"21|7\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2689]\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}\",[10]]]],\"GT\":[\"502\",\"00\",\"(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"[3-5]\\\\d{7}\",[8]]]],\"GU\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([3-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-46-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[48])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\\\d{4}\"]]],\"GW\":[\"245\",\"00\",\"[49]\\\\d{8}|4\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"40\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"]]],0,0,0,0,0,0,[0,[\"9(?:5\\\\d|6[569]|77)\\\\d{6}\",[9]]]],\"GY\":[\"592\",\"001\",\"9008\\\\d{3}|(?:[2-467]\\\\d\\\\d|862)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46-9]\"]]],0,0,0,0,0,0,[0,[\"(?:6\\\\d\\\\d|70[0-35-7])\\\\d{4}\"]]],\"HK\":[\"852\",\"00(?:30|5[09]|[126-9]?)\",\"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\",[5,6,7,8,9,11],[[\"(\\\\d{3})(\\\\d{2,5})\",\"$1 $2\",[\"900\",\"9003\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"(?:4(?:44[5-9]|6(?:0[0-7]|1[0-6]|4[0-57-9]|6[0-4]|7[0-8]))|573[0-6]|6(?:26[013-8]|66[0-3])|70(?:7[1-5]|8[0-4])|848[015-9]|9(?:29[013-9]|59[0-4]))\\\\d{4}|(?:4(?:4[01]|6[2358])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\\\d|[268][0-57-9]|7[0-79])|84[09]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\\\d))\\\\d{5}\",[8]]],\"00\"],\"HN\":[\"504\",\"00\",\"8\\\\d{10}|[237-9]\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[237-9]\"]]],0,0,0,0,0,0,[0,[\"[37-9]\\\\d{7}\",[8]]]],\"HR\":[\"385\",\"00\",\"(?:[24-69]\\\\d|3[0-79])\\\\d{7}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{5,6}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"6[01]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-5]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0[1-9]|[12589]\\\\d)\\\\d\\\\d|7(?:[0679]\\\\d\\\\d|5(?:[01]\\\\d|44|77|9[67])))\\\\d{4}|98\\\\d{6}\",[8,9]]]],\"HT\":[\"509\",\"00\",\"(?:[2-489]\\\\d|55)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:[34]\\\\d|55)\\\\d{6}\"]]],\"HU\":[\"36\",\"00\",\"[235-7]\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"06 $1\"]],\"06\",0,0,0,0,0,[0,[\"(?:[257]0|3[01])\\\\d{7}\",[9]]]],\"ID\":[\"62\",\"00[89]\",\"(?:(?:00[1-9]|8\\\\d)\\\\d{4}|[1-36])\\\\d{6}|00\\\\d{10}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"15\"]],[\"(\\\\d{2})(\\\\d{5,9})\",\"$1 $2\",[\"2[124]|[36]1\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,7})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,8})\",\"$1 $2\",[\"[2-79]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\",\"$1-$2-$3\",[\"8[1-35-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6,8})\",\"$1 $2\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"804\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"80\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8[1-35-9]\\\\d{7,10}\",[9,10,11,12]]]],\"IE\":[\"353\",\"00\",\"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"2[24-9]|47|58|6[237-9]|9[35-9]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[45]0\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2569]|4[1-69]|7[14]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"81\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8(?:22|[35-9]\\\\d)\\\\d{6}\",[9]]]],\"IL\":[\"972\",\"0(?:0|1[2-9])\",\"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\",[7,8,9,10,11,12],[[\"(\\\\d{4})(\\\\d{3})\",\"$1-$2\",[\"125\"]],[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"121\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-489]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"12\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1-$2\",[\"159\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"1[7-9]\"]],[\"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3-$4\",[\"15\"]]],\"0\",0,0,0,0,0,[0,[\"5(?:(?:[02368]\\\\d|[19][2-9]|4[1-9])\\\\d|5(?:01|1[79]|2[2-9]|3[0-3]|4[34]|5[015689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\\\d{5}\",[9]]]],\"IM\":[\"44\",\"00\",\"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([25-8]\\\\d{5})$|0\",\"1624$1\",0,\"74576|(?:16|7[56])24\",[0,[\"76245[06]\\\\d{4}|7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}\"]]],\"IN\":[\"91\",\"00\",\"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\",[8,9,10,11,12,13],[[\"(\\\\d{8})\",\"$1\",[\"5(?:0|2[23]|3[03]|[67]1|88)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"],0,1],[\"(\\\\d{4})(\\\\d{4,5})\",\"$1 $2\",[\"180\",\"1800\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"140\"],0,1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\",\"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\",\"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\\\d|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\"0$1\",1],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"[6-9]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:6|8[06])\",\"1(?:6|8[06]0)\"],0,1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"18\"],0,1]],\"0\",0,0,0,0,0,[0,[\"(?:61279|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:6(?:12|[2-47]1|5[17]|6[13]|80)[0189]|7(?:1(?:2[0189]|9[0-5])|2(?:[14][017-9]|8[0-59])|3(?:2[5-8]|[34][017-9]|9[016-9])|4(?:1[015-9]|[29][89]|39|8[389])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\\\d{6}|(?:7(?:31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\\\d|7[02-8])\\\\d{5}|(?:6(?:[09]\\\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:0\\\\d|2[0235-79]|3[05-8]|40|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\\\d\\\\d)\\\\d{7}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|8[124-6])\\\\d|7(?:[235689]\\\\d|4[0189]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-5])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]|881))[0189]\\\\d{5}\",[10]]]],\"IO\":[\"246\",\"00\",\"3\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"3\"]]],0,0,0,0,0,0,[0,[\"38\\\\d{5}\"]]],\"IQ\":[\"964\",\"00\",\"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[3-9]\\\\d{8}\",[10]]]],\"IR\":[\"98\",\"00\",\"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\",[4,5,6,7,10],[[\"(\\\\d{4,5})\",\"$1\",[\"96\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,5})\",\"$1 $2\",[\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0(?:[0-35]\\\\d|4[4-6])|(?:[13]\\\\d|2[0-3])\\\\d)\\\\d|9(?:[0-46]\\\\d\\\\d|5[15]0|8(?:1\\\\d|88)|9(?:0[0-3]|[19]\\\\d|21|77|8[7-9])))\\\\d{5}\",[10]]]],\"IS\":[\"354\",\"00|1(?:0(?:01|[12]0)|100)\",\"(?:38\\\\d|[4-9])\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,[0,[\"(?:38[589]\\\\d\\\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\\\d)|7(?:5[057]|[6-9]\\\\d)|8(?:2[0-59]|[3-69]\\\\d|8[238]))\\\\d{4}\"]],\"00\"],\"IT\":[\"39\",\"00\",\"0\\\\d{5,10}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"0[26]\"]],[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\",\"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],[\"(\\\\d{4})(\\\\d{2,6})\",\"$1 $2\",[\"0(?:[13-579][2-46-8]|8[236-8])\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"894\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[26]|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1(?:44|[679])|[378]\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[13-57-9][0159]|14\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\"$1 $2 $3\",[\"0[26]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,[0,[\"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\",[9,10]]]],\"JE\":[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0\",\"1534$1\",0,0,[0,[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97[7-9]))\\\\d{5}\"]]],\"JM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"658|876\",[0,[\"(?:658295|876(?:2(?:0[1-9]|[13-9]\\\\d|2[013-9])|[348]\\\\d\\\\d|5(?:0[1-9]|[1-9]\\\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\\\d{4}\"]]],\"JO\":[\"962\",\"00\",\"(?:(?:[2689]|7\\\\d)\\\\d|32|53)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2356]|87\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"70\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[78][0-25-9]|9\\\\d)\\\\d{6}\",[9]]]],\"JP\":[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[257-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\",[8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"(?:12|57|99)0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51|63)|9(?:80|9[16])\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9]|636)|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9]|636[457-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]|4(?:2[09]|7[01])\",\"[36]|4(?:2(?:0|9[02-69])|7(?:0[019]|1))\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[27-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9])|5(?:2|3[045]|4[0-369]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|49|51|6(?:[0-24]|36|5[0-3589]|72|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:49|55|83)[29]|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|7[015-9]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17|3[015-9]))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9(?:[019]|4[1-3]|6(?:[0-47-9]|5[01346-9])))|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|829(?:2|66)|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"800\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[257-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"[7-9]0[1-9]\\\\d{7}\",[10]]]],\"KE\":[\"254\",\"000\",\"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"[24-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[17]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:0[0-6]|1[0-5]|2[014]|30)|7\\\\d\\\\d)\\\\d{6}\",[9]]]],\"KG\":[\"996\",\"00\",\"8\\\\d{9}|(?:[235-8]\\\\d|99)\\\\d{7}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3(?:1[346]|[24-79])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-79]|88\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"312(?:58\\\\d|973)\\\\d{3}|(?:2(?:0[0-35]|2\\\\d)|5[0-24-7]\\\\d|600|7(?:[07]\\\\d|55)|88[08]|99[05-9])\\\\d{6}\",[9]]]],\"KH\":[\"855\",\"00[14-9]\",\"1\\\\d{9}|[1-9]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:1[28]|3[18]|9[67])\\\\d|6[016-9]|7(?:[07-9]|[16]\\\\d)|8(?:[013-79]|8\\\\d))\\\\d{6}|(?:1\\\\d|9[0-57-9])\\\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\\\d{5}\",[8,9]]]],\"KI\":[\"686\",\"00\",\"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\",[5,8],0,\"0\",0,0,0,0,0,[0,[\"(?:63\\\\d{3}|73(?:0[0-5]\\\\d|140))\\\\d{3}|[67]200[01]\\\\d{3}\",[8]]]],\"KM\":[\"269\",\"00\",\"[3478]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[3478]\"]]],0,0,0,0,0,0,[0,[\"[34]\\\\d{6}\"]]],\"KN\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"869$1\",0,\"869\",[0,[\"869(?:48[89]|55[6-8]|66\\\\d|76[02-7])\\\\d{4}\"]]],\"KP\":[\"850\",\"00|99\",\"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"19[1-3]\\\\d{7}\",[10]]]],\"KR\":[\"82\",\"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\",\"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\",[5,6,8,9,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1-$2\",[\"(?:3[1-3]|[46][1-4]|5[1-5])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"1\"]],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"[1346]|5[1-5]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1-$2-$3\",[\"5\"],\"0$1\"]],\"0\",0,\"0(8(?:[1-46-8]|5\\\\d\\\\d))?\",0,0,0,[0,[\"1(?:05(?:[0-8]\\\\d|9[0-6])|22[13]\\\\d)\\\\d{4,5}|1(?:0[1-46-9]|[16-9]\\\\d|2[013-9])\\\\d{6,7}\",[9,10]]]],\"KW\":[\"965\",\"00\",\"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[169]|2(?:[235]|4[1-35-9])|52\"]],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[245]\"]]],0,0,0,0,0,0,[0,[\"(?:41\\\\d\\\\d|5(?:(?:[05]\\\\d|1[0-7]|6[56])\\\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\\\d)\\\\d|1(?:00|11|66)|222|3[36]3|444|7(?:0[013-9]|[67]\\\\d)|888|9(?:[069]\\\\d|3[039]))|9(?:(?:0[09]|[4679]\\\\d|8[057-9])\\\\d|1(?:1[01]|99)|2(?:00|2\\\\d)|3(?:00|3[03])|5(?:00|5\\\\d)))\\\\d{4}\",[8]]]],\"KY\":[\"1\",\"011\",\"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"345$1\",0,\"345\",[0,[\"345(?:32[1-9]|42[0-4]|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\\\d{4}\"]]],\"KZ\":[\"7\",\"810\",\"(?:33622|8\\\\d{8})\\\\d{5}|[78]\\\\d{9}\",[10,14],0,\"8\",0,0,0,0,\"33|7\",[0,[\"7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\\\d{7}\",[10]]],\"8~10\"],\"LA\":[\"856\",\"00\",\"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2[13]|3[14]|[4-8]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"30[013-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:20(?:[2359]\\\\d|7[6-8]|88)|302\\\\d)\\\\d{6}\",[10]]]],\"LB\":[\"961\",\"00\",\"[27-9]\\\\d{7}|[13-9]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[13-69]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27-9]\"]]],\"0\",0,0,0,0,0,[0,[\"793(?:[01]\\\\d|2[0-4])\\\\d{3}|(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[89]|9[12]))\\\\d{5}\"]]],\"LC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-8]\\\\d{6})$|1\",\"758$1\",0,\"758\",[0,[\"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\\\d|3[0-3])|812)\\\\d{4}\"]]],\"LI\":[\"423\",\"00\",\"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\",[7,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2379]|8(?:0[09]|7)\",\"[2379]|8(?:0(?:02|9)|7)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"69\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],\"0\",0,\"(1001)|0\",0,0,0,[0,[\"(?:6(?:(?:4[5-9]|5[0-4])\\\\d|6(?:[0245]\\\\d|[17]0|3[7-9]))\\\\d|7(?:[37-9]\\\\d|42|56))\\\\d{4}\"]]],\"LK\":[\"94\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[1-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[0-25-8]\\\\d|4[0-4])\\\\d{6}\"]]],\"LR\":[\"231\",\"00\",\"(?:[25]\\\\d|33|77|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[4-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23578]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:(?:(?:22|33)0|555|(?:77|88)\\\\d)\\\\d|4[67])\\\\d{5}|[56]\\\\d{6}\",[7,9]]]],\"LS\":[\"266\",\"00\",\"(?:[256]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2568]\"]]],0,0,0,0,0,0,[0,[\"[56]\\\\d{7}\"]]],\"LT\":[\"370\",\"00\",\"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"52[0-7]\"],\"(8-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"8 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(8-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(8-$1)\",1]],\"8\",0,\"[08]\",0,0,0,[0,[\"6\\\\d{7}\"]]],\"LU\":[\"352\",\"00\",\"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\",[4,5,6,7,8,9,10,11],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"20[2-689]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"80[01]|90[015]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"20\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4 $5\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\"$1 $2 $3 $4\",[\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"]]],0,0,\"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\",0,0,0,[0,[\"6(?:[269][18]|5[1568]|7[189]|81)\\\\d{6}\",[9]]]],\"LV\":[\"371\",\"00\",\"(?:[268]\\\\d|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[269]|8[01]\"]]],0,0,0,0,0,0,[0,[\"23(?:23[0-57-9]|33[0238])\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[024-9]|3[0-24-9]))\\\\d{4}\"]]],\"LY\":[\"218\",\"00\",\"[2-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9[1-6]\\\\d{7}\"]]],\"MA\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],[[\"(\\\\d{5})(\\\\d{4})\",\"$1-$2\",[\"5(?:29|38)\",\"5(?:29[1289]|389)\",\"529(?:1[1-46-9]|2[013-8]|90)|5(?:298|389)[0-46-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:2[2-489]|3[5-9]|9)|892\",\"5(?:2(?:[2-49]|8[235-9])|3[5-9]|9)|892\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"8\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1-$2\",[\"[5-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[017]\\\\d|2[0-2]|6[0-8]|8[0-3]))\\\\d{6}\"]]],\"MC\":[\"377\",\"00\",\"(?:[3489]|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[389]\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:[46]\\\\d|5[1-9])\\\\d{5}|(?:3|6\\\\d)\\\\d{7}\"]]],\"MD\":[\"373\",\"00\",\"(?:[235-7]\\\\d|[89]0)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"22|3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[25-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"562\\\\d{5}|(?:6\\\\d|7[16-9])\\\\d{6}\"]]],\"ME\":[\"382\",\"00\",\"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[07-9]\\\\d|3[024]|6[0-25])\\\\d{5}\",[8]]]],\"MF\":[\"590\",\"00\",\"590\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))\\\\d{4}\"]]],\"MG\":[\"261\",\"00\",\"[23]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,\"([24-9]\\\\d{6})$|0\",\"20$1\",0,0,[0,[\"3[2-47-9]\\\\d{7}\"]]],\"MH\":[\"692\",\"011\",\"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-6]\"]]],\"1\",0,0,0,0,0,[0,[\"(?:(?:23|54)5|329|45[356])\\\\d{4}\"]]],\"MK\":[\"389\",\"00\",\"[2-578]\\\\d{7}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2|34[47]|4(?:[37]7|5[47]|64)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[347]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[58]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:3555|(?:474|9[019]7)7)\\\\d{3}|7(?:[0-25-8]\\\\d\\\\d|3(?:[1-48]\\\\d|7[01578])|4(?:2\\\\d|60|7[01578])|9(?:[2-4]\\\\d|5[01]|7[015]))\\\\d{4}\"]]],\"ML\":[\"223\",\"00\",\"[24-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"2(?:0(?:01|79)|17\\\\d)\\\\d{4}|(?:5[01]|[679]\\\\d|8[2-49])\\\\d{6}\"]]],\"MM\":[\"95\",\"00\",\"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\",[6,7,8,9,10],[[\"(\\\\d)(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"16|2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[45]|6(?:0[23]|[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-6]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[4-7]|8[1-35]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4,6})\",\"$1 $2 $3\",[\"9(?:2[0-4]|[35-9]|4[137-9])\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"92\"],\"0$1\"],[\"(\\\\d)(\\\\d{5})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[01]|9(?:2(?:[0-4]|[56]\\\\d\\\\d)|(?:3(?:[0-36]|4\\\\d)|(?:6\\\\d|9[4-8])\\\\d|7(?:3|40|[5-9]\\\\d)|8(?:78|[89]\\\\d))\\\\d|4(?:(?:[0245]\\\\d|[1379])\\\\d|88)|5[0-6])\\\\d)\\\\d{4}|9[69]1\\\\d{6}|9(?:[68]\\\\d|9[089])\\\\d{5}\",[7,8,9,10]]]],\"MN\":[\"976\",\"001\",\"[12]\\\\d{7,9}|[5-9]\\\\d{7}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[12]1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[12]2[1-3]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\",\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"[12]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:83[01]|920)\\\\d{5}|(?:5[05]|6[069]|8[015689]|9[013-9])\\\\d{6}\",[8]]]],\"MO\":[\"853\",\"00\",\"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[268]\"]]],0,0,0,0,0,0,[0,[\"6800[0-79]\\\\d{3}|6(?:[235]\\\\d\\\\d|6(?:0[0-5]|[1-9]\\\\d)|8(?:0[1-9]|[14-8]\\\\d|2[5-9]|[39][0-4]))\\\\d{4}\",[8]]]],\"MP\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"670$1\",0,\"670\",[0,[\"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\"]]],\"MQ\":[\"596\",\"00\",\"596\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[569]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"69(?:6(?:[0-46-9]\\\\d|5[0-6])|727)\\\\d{4}\"]]],\"MR\":[\"222\",\"00\",\"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-48]\"]]],0,0,0,0,0,0,[0,[\"[2-4][0-46-9]\\\\d{6}\"]]],\"MS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\",[10],0,\"1\",0,\"([34]\\\\d{6})$|1\",\"664$1\",0,\"664\",[0,[\"664(?:3(?:49|9[1-6])|49[2-6])\\\\d{4}\"]]],\"MT\":[\"356\",\"00\",\"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2357-9]\"]]],0,0,0,0,0,0,[0,[\"(?:7(?:210|[79]\\\\d\\\\d)|9(?:[29]\\\\d\\\\d|69[67]|8(?:1[1-3]|89|97)))\\\\d{4}\"]]],\"MU\":[\"230\",\"0(?:0|[24-7]0|3[03])\",\"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46]|8[013]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[57]\"]],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\\\d|8[0-689]|9[0-8])|7(?:01|30))\\\\d{5}\",[8]]],\"020\"],\"MV\":[\"960\",\"0(?:0|19)\",\"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\",[7,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[34679]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:46[46]|[79]\\\\d\\\\d)\\\\d{4}\",[7]]],\"00\"],\"MW\":[\"265\",\"00\",\"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\",[7,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[137-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"111\\\\d{6}|(?:31|77|[89][89])\\\\d{7}\",[9]]]],\"MX\":[\"52\",\"0[09]\",\"1(?:(?:[27]2|44|99)[1-9]|65[0-689])\\\\d{7}|(?:1(?:[01]\\\\d|2[13-9]|[35][1-9]|4[0-35-9]|6[0-46-9]|7[013-9]|8[1-79]|9[1-8])|[2-9]\\\\d)\\\\d{8}\",[10,11],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"],0,1],[\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 $3 $4\",[\"1(?:33|5[56]|81)\"],0,1],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 $3 $4\",[\"1\"],0,1]],\"01\",0,\"0(?:[12]|4[45])|1\",0,0,0,[0,[\"657[12]\\\\d{6}|(?:1(?:2(?:2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-7][1-9]|3[1-8]|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))|2(?:2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\\\d))\\\\d{7}\"]],\"00\"],\"MY\":[\"60\",\"00\",\"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"[4-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1-$2 $3\",[\"1(?:[02469]|[378][1-9]|53)|8\",\"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"3\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3-$4\",[\"1(?:[367]|80)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"15\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1(?:1888[689]|4400|8(?:47|8[27])[0-4])\\\\d{4}|1(?:0(?:[23568]\\\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\\\d\\\\d|6(?:0[5-9]|[1-9]\\\\d)|7(?:[0-4]\\\\d|5[0-6]))|(?:[269]\\\\d|[37][1-9]|4[235-9])\\\\d|5(?:31|9\\\\d\\\\d)|8(?:1[23]|[236]\\\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\\\d{5}\",[9,10]]]],\"MZ\":[\"258\",\"00\",\"(?:2|8\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2|8[2-79]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[2-79]\\\\d{7}\",[9]]]],\"NA\":[\"264\",\"00\",\"[68]\\\\d{7,8}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"87\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:60|8[1245])\\\\d{7}\",[9]]]],\"NC\":[\"687\",\"00\",\"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1.$2.$3\",[\"[02-57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:5[0-4]|[79]\\\\d|8[0-79])\\\\d{4}\"]]],\"NE\":[\"227\",\"00\",\"[027-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"08\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[089]|2[013]|7[04]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[04]|[89]\\\\d)\\\\d{6}\"]]],\"NF\":[\"672\",\"00\",\"[13]\\\\d{5}\",[6],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"1[0-3]\"]],[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"[13]\"]]],0,0,\"([0-258]\\\\d{4})$\",\"3$1\",0,0,[0,[\"(?:14|3[58])\\\\d{4}\"]]],\"NG\":[\"234\",\"009\",\"(?:[124-7]|9\\\\d{3})\\\\d{6}|[1-9]\\\\d{7}|[78]\\\\d{9,13}\",[7,8,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"78\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|9(?:0[3-9]|[1-9])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-7]|8[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:702[0-24-9]|819[01])\\\\d{6}|(?:70[13-689]|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-356]))\\\\d{7}\",[10]]]],\"NI\":[\"505\",\"00\",\"(?:1800|[25-8]\\\\d{3})\\\\d{4}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[125-8]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:5[0-7]|[78]\\\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\\\d)\\\\d)\\\\d{5}\"]]],\"NL\":[\"31\",\"00\",\"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\",[5,6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{4,7})\",\"$1 $2\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"66\"],\"0$1\"],[\"(\\\\d)(\\\\d{8})\",\"$1 $2\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-578]|91\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[1-58]|970\\\\d)\\\\d{7}\",[9,11]]]],\"NO\":[\"47\",\"00\",\"(?:0|[2-9]\\\\d{3})\\\\d{4}\",[5,8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[489]|59\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-7]\"]]],0,0,0,0,0,\"[02-689]|7[0-8]\",[0,[\"(?:4[015-8]|59|9\\\\d)\\\\d{6}\",[8]]]],\"NP\":[\"977\",\"00\",\"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\",[8,10,11],[[\"(\\\\d)(\\\\d{7})\",\"$1-$2\",[\"1[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1-$2\",[\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:6[0-3]|7[024-6]|8[0-24-68])\\\\d{7}\",[10]]]],\"NR\":[\"674\",\"00\",\"(?:444|(?:55|8\\\\d)\\\\d|666)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-68]\"]]],0,0,0,0,0,0,[0,[\"(?:55[3-9]|666|8\\\\d\\\\d)\\\\d{4}\"]]],\"NU\":[\"683\",\"00\",\"(?:[47]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"888[4-9]\\\\d{3}\",[7]]]],\"NZ\":[\"64\",\"0(?:0|161)\",\"[29]\\\\d{7,9}|50\\\\d{5}(?:\\\\d{2,3})?|6[0-35-9]\\\\d{6}|7\\\\d{7,8}|8\\\\d{4,9}|(?:11\\\\d|[34])\\\\d{7}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-579]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|[89]0\",\"50(?:[0367]|88)|[89]0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"24|[346]|7[2-57-9]|9[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:10|74)|[59]|80\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1|2[028]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\",\"$1 $2 $3\",[\"2(?:[169]|7[0-35-9])|7|86\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2[0-27-9]\\\\d{7,8}|21\\\\d{6}\",[8,9,10]]],\"00\"],\"OM\":[\"968\",\"00\",\"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\",[7,8,9],[[\"(\\\\d{3})(\\\\d{4,6})\",\"$1 $2\",[\"[58]\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[179]\"]]],0,0,0,0,0,0,[0,[\"1505\\\\d{4}|(?:7(?:[1289]\\\\d|7[0-5])|9(?:0[1-9]|[1-9]\\\\d))\\\\d{5}\",[8]]]],\"PA\":[\"507\",\"00\",\"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\",[7,8,10,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[1-57-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[68]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:1[16]1|21[89]|6\\\\d{3}|8(?:1[01]|7[23]))\\\\d{4}\",[7,8]]]],\"PE\":[\"51\",\"00|19(?:1[124]|77|90)00\",\"(?:[14-8]|9\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[4-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9\\\\d{8}\",[9]]],\"00\",\" Anexo \"],\"PF\":[\"689\",\"00\",\"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\",[6,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4|8[7-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[7-9]\\\\d{6}\",[8]]]],\"PG\":[\"675\",\"00|140[1-3]\",\"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"18|[2-69]|85\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[78]\"]]],0,0,0,0,0,0,[0,[\"(?:7\\\\d|8[128])\\\\d{6}\",[8]]],\"00\"],\"PH\":[\"63\",\"00\",\"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\",[6,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"2\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\",\"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"346|4(?:27|9[35])|883\",\"3469|4(?:279|9(?:30|56))|8834\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|8[2-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\\\d|4[2-9]|8[135-9]|9[1-9]))\\\\d{7}\",[10]]]],\"PK\":[\"92\",\"00\",\"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\",\"$1 $2 $3\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{6,7})\",\"$1 $2\",[\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\",\"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{7,8})\",\"$1 $2\",[\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"58\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[24-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"3(?:[0-24]\\\\d|3[0-7]|55|64)\\\\d{7}\",[10]]]],\"PL\":[\"48\",\"00\",\"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{5})\",\"$1\",[\"19\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"11|20|64\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\",\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"64\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"21(?:1(?:[145]\\\\d|3[1-5])|2[0-4]\\\\d)\\\\d{4}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\",[9]]]],\"PM\":[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|80\\\\d)\\\\d{6}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[45]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:4[02-4]|5[056]|708[45][0-5])\\\\d{4}\"]]],\"PR\":[\"1\",\"011\",\"(?:[589]\\\\d\\\\d|787)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"787|939\",[0,[\"(?:787|939)[2-9]\\\\d{6}\"]]],\"PS\":[\"970\",\"00\",\"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2489]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"5[69]\\\\d{7}\",[9]]]],\"PT\":[\"351\",\"00\",\"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2[12]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"16|[236-9]\"]]],0,0,0,0,0,0,[0,[\"6(?:[06]92(?:30|9\\\\d)|[35]92(?:3[03]|9\\\\d))\\\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\\\d\\\\d|480))\\\\d{5}\"]]],\"PW\":[\"680\",\"01[12]\",\"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:46|83)[0-5]|6[2-4689]0)\\\\d{4}|(?:45|77|88)\\\\d{5}\"]]],\"PY\":[\"595\",\"00\",\"59\\\\d{4,6}|9\\\\d{5,10}|(?:[2-46-8]\\\\d|5[0-8])\\\\d{4,7}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"[2-9]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{4,5})\",\"$1 $2\",[\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"87\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"9(?:[5-79]|8[1-6])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:51|6[129]|[78][1-6]|9[1-5])\\\\d{6}\",[9]]]],\"QA\":[\"974\",\"00\",\"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\",[7,8,9,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"2[16]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]],0,0,0,0,0,0,[0,[\"[35-7]\\\\d{7}\",[8]]]],\"RE\":[\"262\",\"00\",\"(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:2\\\\d\\\\d|3(?:0[0-46]|1[013]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|6[0-6]|7[0-27]|8[0-8]|9[0-479]))|9(?:399[0-2]|4790|76(?:2[27]|3[0-37]|9\\\\d)))\\\\d{4}\"]]],\"RO\":[\"40\",\"00\",\"(?:[2378]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\",[6,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"2[3-6]\",\"2[3-6]\\\\d9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"219|31\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[237-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7020\\\\d{5}|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-29])\\\\d{6}\",[9]]],0,\" int \"],\"RS\":[\"381\",\"00\",\"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\",[6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3,9})\",\"$1 $2\",[\"(?:2[389]|39)0|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5,10})\",\"$1 $2\",[\"[1-36]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[0-689]|7\\\\d)\\\\d{6,7}\",[8,9,10]]]],\"RU\":[\"7\",\"810\",\"8\\\\d{13}|[347-9]\\\\d{9}\",[10,14],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-8]|2[1-9])\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"],\"8 ($1)\",1],[\"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-68]|2[1-9])\",\"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[349]|8(?:[02-7]|1[1-8])\"],\"8 ($1)\",1],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"8\"],\"8 ($1)\"]],\"8\",0,0,0,0,\"3[04-689]|[489]\",[0,[\"9\\\\d{9}\",[10]]],\"8~10\"],\"RW\":[\"250\",\"00\",\"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"]]],\"0\",0,0,0,0,0,[0,[\"7[2389]\\\\d{7}\",[9]]]],\"SA\":[\"966\",\"00\",\"92\\\\d{7}|(?:[15]|8\\\\d)\\\\d{8}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,0,0,0,0,[0,[\"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-35-8])\\\\d{6}\",[9]]]],\"SB\":[\"677\",\"0[01]\",\"(?:[1-6]|[7-9]\\\\d\\\\d)\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],0,0,0,0,0,0,[0,[\"48\\\\d{3}|(?:(?:7[1-9]|8[4-9])\\\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\\\d{4}\"]]],\"SC\":[\"248\",\"010|0[0-2]\",\"800\\\\d{4}|(?:[249]\\\\d|64)\\\\d{5}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[246]|9[57]\"]]],0,0,0,0,0,0,[0,[\"2[125-8]\\\\d{5}\"]],\"00\"],\"SD\":[\"249\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[0-2]|9[0-3569])\\\\d{7}\"]]],\"SE\":[\"46\",\"00\",\"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"20\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"9(?:00|39|44|9)\"],\"0$1\",0,\"$1 $2\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3\",[\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\",\"$1-$2 $3\",[\"9(?:00|39|44)\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"10|7\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1-$2 $3 $4\",[\"9\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4 $5\",[\"[26]\"],\"0$1\",0,\"$1 $2 $3 $4 $5\"]],\"0\",0,0,0,0,0,[0,[\"7[02369]\\\\d{7}\",[9]]]],\"SG\":[\"65\",\"0[0-3]\\\\d\",\"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[369]|8(?:0[1-6]|[1-9])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"8(?:06[0-6]|95[0-2])\\\\d{4}|(?:8(?:0[1-5]|[1-8]\\\\d|9[0-4])|9[0-8]\\\\d)\\\\d{5}\",[8]]]],\"SH\":[\"290\",\"00\",\"(?:[256]\\\\d|8)\\\\d{3}\",[4,5],0,0,0,0,0,0,\"[256]\",[0,[\"[56]\\\\d{4}\",[5]]]],\"SI\":[\"386\",\"00|10(?:22|66|88|99)\",\"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\",[5,6,7,8],[[\"(\\\\d{2})(\\\\d{3,6})\",\"$1 $2\",[\"8[09]|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"59|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37][01]|4[0139]|51|6\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-57]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"65(?:[178]\\\\d|5[56]|6[01])\\\\d{4}|(?:[37][01]|4[0139]|51|6[489])\\\\d{6}\",[8]]],\"00\"],\"SJ\":[\"47\",\"00\",\"0\\\\d{4}|(?:[489]\\\\d|[57]9)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|59|9\\\\d)\\\\d{6}\",[8]]]],\"SK\":[\"421\",\"00\",\"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\",[6,7,9],[[\"(\\\\d)(\\\\d{2})(\\\\d{3,4})\",\"$1 $2 $3\",[\"21\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-5][1-8]1\",\"[3-5][1-8]1[67]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[689]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"[3-5]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"909[1-9]\\\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\\\d)\\\\d{6}\",[9]]]],\"SL\":[\"232\",\"00\",\"(?:[237-9]\\\\d|66)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[236-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"(?:25|3[0-5]|66|7[2-9]|8[08]|9[09])\\\\d{6}\"]]],\"SM\":[\"378\",\"00\",\"(?:0549|[5-7]\\\\d)\\\\d{6}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"0\"]]],0,0,\"([89]\\\\d{5})$\",\"0549$1\",0,0,[0,[\"6[16]\\\\d{6}\",[8]]]],\"SN\":[\"221\",\"00\",\"(?:[378]\\\\d|93)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[379]\"]]],0,0,0,0,0,0,[0,[\"7(?:(?:[06-8]\\\\d|21|90)\\\\d|5(?:01|[19]0|25|[38]3|[4-7]\\\\d))\\\\d{5}\"]]],\"SO\":[\"252\",\"00\",\"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"8[125]\"]],[\"(\\\\d{6})\",\"$1\",[\"[134]\"]],[\"(\\\\d)(\\\\d{6})\",\"$1 $2\",[\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"(?:2|90)4|[67]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[3478]|64|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6(?:0[5-7]|[1-35-9])|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|79|8[08])\\\\d|6(?:0[5-7]|[1-9]\\\\d)|9(?:0\\\\d|[2-9]))\\\\d|2(?:4\\\\d|8))\\\\d{5}|(?:[67]\\\\d\\\\d|904)\\\\d{5}\",[7,8,9]]]],\"SR\":[\"597\",\"00\",\"(?:[2-5]|68|[78]\\\\d)\\\\d{5}\",[6,7],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"56\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1-$2\",[\"[2-5]\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[6-8]\"]]],0,0,0,0,0,0,[0,[\"(?:7[124-7]|8[124-9])\\\\d{5}\",[7]]]],\"SS\":[\"211\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:12|9[1257-9])\\\\d{7}\"]]],\"ST\":[\"239\",\"00\",\"(?:22|9\\\\d)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"900[5-9]\\\\d{3}|9(?:0[1-9]|[89]\\\\d)\\\\d{4}\"]]],\"SV\":[\"503\",\"00\",\"[267]\\\\d{7}|[89]00\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[267]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"66(?:[02-9]\\\\d\\\\d|1(?:[02-9]\\\\d|16))\\\\d{3}|(?:6[0-57-9]|7\\\\d)\\\\d{6}\",[8]]]],\"SX\":[\"1\",\"011\",\"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"(5\\\\d{6})$|1\",\"721$1\",0,\"721\",[0,[\"7215(?:1[02]|2\\\\d|5[034679]|8[014-8])\\\\d{4}\"]]],\"SY\":[\"963\",\"00\",\"[1-39]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-5]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"9[1-689]\\\\d{7}\",[9]]]],\"SZ\":[\"268\",\"00\",\"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\",[8,9],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[0237]\"]],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"9\"]]],0,0,0,0,0,0,[0,[\"7[6-9]\\\\d{6}\",[8]]]],\"TA\":[\"290\",\"00\",\"8\\\\d{3}\",[4],0,0,0,0,0,0,\"8\"],\"TC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-479]\\\\d{6})$|1\",\"649$1\",0,\"649\",[0,[\"649(?:2(?:3[129]|4[1-79])|3\\\\d\\\\d|4[34][1-3])\\\\d{4}\"]]],\"TD\":[\"235\",\"00|16\",\"(?:22|[69]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2679]\"]]],0,0,0,0,0,0,[0,[\"(?:6[0235689]|77|9\\\\d)\\\\d{6}\"]],\"00\"],\"TG\":[\"228\",\"00\",\"[279]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[279]\"]]],0,0,0,0,0,0,[0,[\"(?:7[019]|9[0-36-9])\\\\d{6}\"]]],\"TH\":[\"66\",\"00[1-9]\",\"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\",[8,9,10,13],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[13-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"671[0-8]\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",[9]]]],\"TJ\":[\"992\",\"810\",\"(?:00|[1-57-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[34]7|91[78]\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3[1-5]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[0-57-9]\"]]],0,0,0,0,0,0,[0,[\"41[18]\\\\d{6}|(?:[034]0|1[017]|2[02]|5[05]|7[0178]|8[078]|9\\\\d)\\\\d{7}\"]],\"8~10\"],\"TK\":[\"690\",\"00\",\"[2-47]\\\\d{3,6}\",[4,5,6,7],0,0,0,0,0,0,0,[0,[\"7[2-4]\\\\d{2,5}\"]]],\"TL\":[\"670\",\"00\",\"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-489]|70\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"7[2-8]\\\\d{6}\",[8]]]],\"TM\":[\"993\",\"810\",\"[1-6]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"12\"],\"(8 $1)\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-5]\"],\"(8 $1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"6\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"6\\\\d{7}\"]],\"8~10\"],\"TN\":[\"216\",\"00\",\"[2-57-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-57-9]\"]]],0,0,0,0,0,0,[0,[\"3(?:001|[12]40)\\\\d{4}|(?:(?:[259]\\\\d|4[0-7])\\\\d|3(?:1[1-35]|6[0-4]|91))\\\\d{5}\"]]],\"TO\":[\"676\",\"00\",\"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1-$2\",[\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]],[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"(?:55[4-6]|6(?:[09]\\\\d|3[02]|8[15-9])|(?:7\\\\d|8[46-9])\\\\d|999)\\\\d{4}\",[7]]]],\"TR\":[\"90\",\"00\",\"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\",[7,10,12,13],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"512|8[01589]|90\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5(?:[0-59]|61)\",\"5(?:[0-59]|616)\",\"5(?:[0-59]|6161)\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24][1-8]|3[1-9]\"],\"(0$1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"56161\\\\d{5}|5(?:0[15-7]|1[06]|24|[34]\\\\d|5[1-59]|9[46])\\\\d{7}\",[10]]]],\"TT\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-46-8]\\\\d{6})$|1\",\"868$1\",0,\"868\",[0,[\"868(?:(?:2[5-9]|3\\\\d)\\\\d|4(?:3[0-6]|[6-9]\\\\d)|6(?:20|78|8\\\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\\\d))\\\\d{4}\"]]],\"TV\":[\"688\",\"00\",\"(?:2|7\\\\d\\\\d|90)\\\\d{4}\",[5,6,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[01]\\\\d|90)\\\\d{4}\",[6,7]]]],\"TW\":[\"886\",\"0(?:0[25-79]|19)\",\"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\",[7,8,9,10,11],[[\"(\\\\d{2})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"202\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[258]0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]\",\"[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:40001[0-2]|9[0-8]\\\\d{4})\\\\d{3}\",[9]]],0,\"#\"],\"TZ\":[\"255\",\"00[056]\",\"(?:[25-8]\\\\d|41|90)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[24]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"77[2-9]\\\\d{6}|(?:6[125-9]|7[13-689])\\\\d{7}\"]]],\"UA\":[\"380\",\"00\",\"[89]\\\\d{9}|[3-9]\\\\d{8}\",[9,10],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\",\"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\",\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|89|9[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:39|50|6[36-8]|7[1-3]|9[1-9])\\\\d{7}\",[9]]],\"0~0\"],\"UG\":[\"256\",\"00[057]\",\"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"202\",\"2024\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[27-9]|4(?:6[45]|[7-9])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[34]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"726[01]\\\\d{5}|7(?:[01578]\\\\d|20|36|[46][0-4]|9[89])\\\\d{6}\"]]],\"US\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"310\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"($1) $2-$3\",[\"[2-9]\"],0,1,\"$1-$2-$3\"]],\"1\",0,0,0,0,0,[0,[\"(?:47220[01]|5(?:05(?:[2-57-9]\\\\d\\\\d|6(?:[0-35-9]\\\\d|4[46]))|57200))\\\\d{4}|(?:2(?:0[1-35-9]|1[02-9]|2[03-589]|3[149]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[01356]|3[0-24679]|4[167]|5[0-2]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-47-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|[34][016]|5[01679]|6[0-279]|78|8[0-29])|7(?:0[1-46-8]|1[2-9]|2[04-7]|3[1247]|4[037]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[068]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-389]|8[04-69]))[2-9]\\\\d{6}\"]]],\"UY\":[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"(?:0004|4)\\\\d{9}|[1249]\\\\d{7}|(?:[49]\\\\d|80)\\\\d{5}\",[7,8,10,13],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"405|8|90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[124]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],\"UZ\":[\"998\",\"810\",\"(?:33|[5-79]\\\\d|88)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[35-9]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:(?:33|50|88|9[0-57-9])\\\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\\\d|61[23]|7(?:[01][017]|4\\\\d|55|9[5-9]))|2(?:(?:11|7\\\\d)\\\\d|2(?:[12]1|9[01379])|5(?:[126]\\\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\\\d)\\\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\\\d|4(?:56|83)|7(?:[07]\\\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\\\d|[39][07])|9(?:0\\\\d|7[079]))|9(?:2(?:1[1267]|3[01]|5\\\\d|7[0-4])|(?:5[67]|7\\\\d)\\\\d|6(?:2[0-26]|8\\\\d)))|7(?:[07]\\\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\\\d|7(?:0\\\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\\\d|5(?:0[0-4]|5[579]|9\\\\d)|7(?:[0-3579]\\\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\\\d|9[5-9])|7(?:0\\\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\\\d))|5(?:112|2(?:0\\\\d|2[29]|[49]4)|3[1568]\\\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\\\d|8[78]|9[079]))|6(?:2(?:2[1245]|4[2-4])|39\\\\d|41[179]|5(?:[349]\\\\d|5[0-2])|7(?:0[017]|[13]\\\\d|22|44|55|67|88))|9(?:22[128]|3(?:2[0-4]|7\\\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\\\d|60|7[2579]|87|9[07]))))\\\\d{4}\"]],\"8~10\"],\"VA\":[\"39\",\"00\",\"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\",[6,7,8,9,10,11],0,0,0,0,0,0,\"06698\",[0,[\"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\",[9,10]]]],\"VC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"784$1\",0,\"784\",[0,[\"784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\\\d{4}\"]]],\"VE\":[\"58\",\"00\",\"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\",[10],[[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"[24-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:1[24-8]|2[46])\\\\d{7}\"]]],\"VG\":[\"1\",\"011\",\"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-578]\\\\d{6})$|1\",\"284$1\",0,\"284\",[0,[\"284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\\\d{4}\"]]],\"VI\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"340$1\",0,\"340\",[0,[\"340(?:2(?:0[0-368]|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\"]]],\"VN\":[\"84\",\"00\",\"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{7}|[16-8]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"1\"],0,1],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[69]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[3578]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[48]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:2[238]|59)|89[6-9]|99[013-9])\\\\d{6}|(?:3\\\\d|5[689]|7[06-9]|8[1-8]|9[0-8])\\\\d{7}\",[9]]]],\"VU\":[\"678\",\"00\",\"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\",[5,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[58]\\\\d|7[013-7])\\\\d{5}\",[7]]]],\"WF\":[\"681\",\"00\",\"(?:40|72)\\\\d{4}|8\\\\d{5}(?:\\\\d{3})?\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[478]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:72|8[23])\\\\d{4}\",[6]]]],\"WS\":[\"685\",\"0\",\"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\",[5,6,7,10],[[\"(\\\\d{5})\",\"$1\",[\"[2-5]|6[1-9]\"]],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[68]\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[1-35-7]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\",[7,10]]]],\"XK\":[\"383\",\"00\",\"[23]\\\\d{7,8}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[23]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[3-9]\\\\d{6}\",[8]]]],\"YE\":[\"967\",\"00\",\"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-6]|7(?:[24-6]|8[0-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[01378]\\\\d{7}\",[9]]]],\"YT\":[\"262\",\"00\",\"(?:(?:(?:26|63)9|80\\\\d)\\\\d\\\\d|93980)\\\\d{4}\",[9],0,\"0\",0,0,0,0,\"269|63|9398\",[0,[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|93980)\\\\d{4}\"]]],\"ZA\":[\"27\",\"00\",\"[1-79]\\\\d{8}|8\\\\d{4,9}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"860\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\\\d{3}|8[1-4]\\\\d{3,7}|(?:2[27]|47|54)4950\\\\d{3}|(?:1(?:049[2-4]|9[12]\\\\d\\\\d)|(?:6\\\\d|7[0-46-9])\\\\d{3}|8(?:5\\\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\\\d{3}|(?:12|[2-5]1)492\\\\d{4}\",[5,6,7,8,9]]]],\"ZM\":[\"260\",\"00\",\"800\\\\d{6}|(?:21|63|[79]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[79]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:7[5-79]|9[5-8])\\\\d{7}\"]]],\"ZW\":[\"263\",\"00\",\"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\",[5,6,7,8,9,10],[[\"(\\\\d{3})(\\\\d{3,5})\",\"$1 $2\",[\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"80\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\",\"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\",\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"29[013-9]|39|54\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,5})\",\"$1 $2\",[\"(?:25|54)8\",\"258|5483\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[178]\\\\d|3[1-9])\\\\d{6}\",[9]]]]},\"nonGeographic\":{\"800\":[\"800\",0,\"(?:00|[1-9]\\\\d)\\\\d{6}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,0,[\"(?:00|[1-9]\\\\d)\\\\d{6}\"]]],\"808\":[\"808\",0,\"[1-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,[\"[1-9]\\\\d{7}\"]]],\"870\":[\"870\",0,\"7\\\\d{11}|[35-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[35-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"]]],\"878\":[\"878\",0,\"10\\\\d{10}\",[12],[[\"(\\\\d{2})(\\\\d{5})(\\\\d{5})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"10\\\\d{10}\"]]],\"881\":[\"881\",0,\"[0-36-9]\\\\d{8}\",[9],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-36-9]\"]]],0,0,0,0,0,0,[0,[\"[0-36-9]\\\\d{8}\"]]],\"882\":[\"882\",0,\"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"16|342\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"49\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"1[36]|9\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"3[23]\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"16\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|23|3(?:[15]|4[57])|4|51\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"34\"]],[\"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\",\"$1 $2 $3\",[\"[1-35]\"]]],0,0,0,0,0,0,[0,[\"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|50\\\\d{3})\\\\d{7}\",[7,8,9,10,12]],0,0,0,0,0,0,[\"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\"]]],\"883\":[\"883\",0,\"(?:[1-4]\\\\d|51)\\\\d{6,10}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\",\"$1 $2 $3\",[\"[14]|2[24-689]|3[02-689]|51[24-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"510\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"21\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"51[13]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[235]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[013-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\"]]],\"888\":[\"888\",0,\"\\\\d{11}\",[11],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\"]],0,0,0,0,0,0,[0,0,0,0,0,0,[\"\\\\d{11}\"]]],\"979\":[\"979\",0,\"[1359]\\\\d{8}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1359]\"]]],0,0,0,0,0,0,[0,0,0,[\"[1359]\\\\d{8}\"]]]}}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar AsYouTypeState = /*#__PURE__*/function () {\n function AsYouTypeState(_ref) {\n var onCountryChange = _ref.onCountryChange,\n onCallingCodeChange = _ref.onCallingCodeChange;\n\n _classCallCheck(this, AsYouTypeState);\n\n this.onCountryChange = onCountryChange;\n this.onCallingCodeChange = onCallingCodeChange;\n }\n\n _createClass(AsYouTypeState, [{\n key: \"reset\",\n value: function reset(_ref2) {\n var country = _ref2.country,\n callingCode = _ref2.callingCode;\n this.international = false;\n this.IDDPrefix = undefined;\n this.missingPlus = undefined;\n this.callingCode = undefined;\n this.digits = '';\n this.resetNationalSignificantNumber();\n this.initCountryAndCallingCode(country, callingCode);\n }\n }, {\n key: \"resetNationalSignificantNumber\",\n value: function resetNationalSignificantNumber() {\n this.nationalSignificantNumber = this.getNationalDigits();\n this.nationalSignificantNumberMatchesInput = true;\n this.nationalPrefix = undefined;\n this.carrierCode = undefined;\n this.complexPrefixBeforeNationalSignificantNumber = undefined;\n }\n }, {\n key: \"update\",\n value: function update(properties) {\n for (var _i = 0, _Object$keys = Object.keys(properties); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n this[key] = properties[key];\n }\n }\n }, {\n key: \"initCountryAndCallingCode\",\n value: function initCountryAndCallingCode(country, callingCode) {\n this.setCountry(country);\n this.setCallingCode(callingCode);\n }\n }, {\n key: \"setCountry\",\n value: function setCountry(country) {\n this.country = country;\n this.onCountryChange(country);\n }\n }, {\n key: \"setCallingCode\",\n value: function setCallingCode(callingCode) {\n this.callingCode = callingCode;\n this.onCallingCodeChange(callingCode, this.country);\n }\n }, {\n key: \"startInternationalNumber\",\n value: function startInternationalNumber(country, callingCode) {\n // Prepend the `+` to parsed input.\n this.international = true; // If a default country was set then reset it\n // because an explicitly international phone\n // number is being entered.\n\n this.initCountryAndCallingCode(country, callingCode);\n }\n }, {\n key: \"appendDigits\",\n value: function appendDigits(nextDigits) {\n this.digits += nextDigits;\n }\n }, {\n key: \"appendNationalSignificantNumberDigits\",\n value: function appendNationalSignificantNumberDigits(nextDigits) {\n this.nationalSignificantNumber += nextDigits;\n }\n /**\r\n * Returns the part of `this.digits` that corresponds to the national number.\r\n * Basically, all digits that have been input by the user, except for the\r\n * international prefix and the country calling code part\r\n * (if the number is an international one).\r\n * @return {string}\r\n */\n\n }, {\n key: \"getNationalDigits\",\n value: function getNationalDigits() {\n if (this.international) {\n return this.digits.slice((this.IDDPrefix ? this.IDDPrefix.length : 0) + (this.callingCode ? this.callingCode.length : 0));\n }\n\n return this.digits;\n }\n }, {\n key: \"getDigitsWithoutInternationalPrefix\",\n value: function getDigitsWithoutInternationalPrefix() {\n if (this.international) {\n if (this.IDDPrefix) {\n return this.digits.slice(this.IDDPrefix.length);\n }\n }\n\n return this.digits;\n }\n }]);\n\n return AsYouTypeState;\n}();\n\nexport { AsYouTypeState as default };\n//# sourceMappingURL=AsYouTypeState.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n// Should be the same as `DIGIT_PLACEHOLDER` in `libphonenumber-metadata-generator`.\nexport var DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\n\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER); // Counts all occurences of a symbol in a string.\n// Unicode-unsafe (because using `.split()`).\n\nexport function countOccurences(symbol, string) {\n var count = 0; // Using `.split('')` to iterate through a string here\n // to avoid requiring `Symbol.iterator` polyfill.\n // `.split('')` is generally not safe for Unicode,\n // but in this particular case for counting brackets it is safe.\n // for (const character of string)\n\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n\n if (character === symbol) {\n count++;\n }\n }\n\n return count;\n} // Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\n\nexport function repeat(string, times) {\n if (times < 1) {\n return '';\n }\n\n var result = '';\n\n while (times > 1) {\n if (times & 1) {\n result += string;\n }\n\n times >>= 1;\n string += string;\n }\n\n return result + string;\n}\nexport function cutAndStripNonPairedParens(string, cutBeforeIndex) {\n if (string[cutBeforeIndex] === ')') {\n cutBeforeIndex++;\n }\n\n return stripNonPairedParens(string.slice(0, cutBeforeIndex));\n}\nexport function closeNonPairedParens(template, cut_before) {\n var retained_template = template.slice(0, cut_before);\n var opening_braces = countOccurences('(', retained_template);\n var closing_braces = countOccurences(')', retained_template);\n var dangling_braces = opening_braces - closing_braces;\n\n while (dangling_braces > 0 && cut_before < template.length) {\n if (template[cut_before] === ')') {\n dangling_braces--;\n }\n\n cut_before++;\n }\n\n return template.slice(0, cut_before);\n}\nexport function stripNonPairedParens(string) {\n var dangling_braces = [];\n var i = 0;\n\n while (i < string.length) {\n if (string[i] === '(') {\n dangling_braces.push(i);\n } else if (string[i] === ')') {\n dangling_braces.pop();\n }\n\n i++;\n }\n\n var start = 0;\n var cleared_string = '';\n dangling_braces.push(string.length);\n\n for (var _i = 0, _dangling_braces = dangling_braces; _i < _dangling_braces.length; _i++) {\n var index = _dangling_braces[_i];\n cleared_string += string.slice(start, index);\n start = index + 1;\n }\n\n return cleared_string;\n}\nexport function populateTemplateWithDigits(template, position, digits) {\n // Using `.split('')` to iterate through a string here\n // to avoid requiring `Symbol.iterator` polyfill.\n // `.split('')` is generally not safe for Unicode,\n // but in this particular case for `digits` it is safe.\n // for (const digit of digits)\n for (var _iterator2 = _createForOfIteratorHelperLoose(digits.split('')), _step2; !(_step2 = _iterator2()).done;) {\n var digit = _step2.value;\n\n // If there is room for more digits in current `template`,\n // then set the next digit in the `template`,\n // and return the formatted digits so far.\n // If more digits are entered than the current format could handle.\n if (template.slice(position + 1).search(DIGIT_PLACEHOLDER_MATCHER) < 0) {\n return;\n }\n\n position = template.search(DIGIT_PLACEHOLDER_MATCHER);\n template = template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n }\n\n return [template, position];\n}\n//# sourceMappingURL=AsYouTypeFormatter.util.js.map","import checkNumberLength from './helpers/checkNumberLength.js';\nimport parseDigits from './helpers/parseDigits.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nexport default function formatCompleteNumber(state, format, _ref) {\n var metadata = _ref.metadata,\n shouldTryNationalPrefixFormattingRule = _ref.shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref.getSeparatorAfterNationalPrefix;\n var matcher = new RegExp(\"^(?:\".concat(format.pattern(), \")$\"));\n\n if (matcher.test(state.nationalSignificantNumber)) {\n return formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, {\n metadata: metadata,\n shouldTryNationalPrefixFormattingRule: shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix\n });\n }\n}\nexport function canFormatCompleteNumber(nationalSignificantNumber, metadata) {\n return checkNumberLength(nationalSignificantNumber, metadata) === 'IS_POSSIBLE';\n}\n\nfunction formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, _ref2) {\n var metadata = _ref2.metadata,\n shouldTryNationalPrefixFormattingRule = _ref2.shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref2.getSeparatorAfterNationalPrefix;\n // `format` has already been checked for `nationalPrefix` requirement.\n var nationalSignificantNumber = state.nationalSignificantNumber,\n international = state.international,\n nationalPrefix = state.nationalPrefix,\n carrierCode = state.carrierCode; // Format the number with using `national_prefix_formatting_rule`.\n // If the resulting formatted number is a valid formatted number, then return it.\n //\n // Google's AsYouType formatter is different in a way that it doesn't try\n // to format using the \"national prefix formatting rule\", and instead it\n // simply prepends a national prefix followed by a \" \" character.\n // This code does that too, but as a fallback.\n // The reason is that \"national prefix formatting rule\" may use parentheses,\n // which wouldn't be included has it used the simpler Google's way.\n //\n\n if (shouldTryNationalPrefixFormattingRule(format)) {\n var formattedNumber = formatNationalNumber(state, format, {\n useNationalPrefixFormattingRule: true,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n metadata: metadata\n });\n\n if (formattedNumber) {\n return formattedNumber;\n }\n } // Format the number without using `national_prefix_formatting_rule`.\n\n\n return formatNationalNumber(state, format, {\n useNationalPrefixFormattingRule: false,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n metadata: metadata\n });\n}\n\nfunction formatNationalNumber(state, format, _ref3) {\n var metadata = _ref3.metadata,\n useNationalPrefixFormattingRule = _ref3.useNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref3.getSeparatorAfterNationalPrefix;\n var formattedNationalNumber = formatNationalNumberUsingFormat(state.nationalSignificantNumber, format, {\n carrierCode: state.carrierCode,\n useInternationalFormat: state.international,\n withNationalPrefix: useNationalPrefixFormattingRule,\n metadata: metadata\n });\n\n if (!useNationalPrefixFormattingRule) {\n if (state.nationalPrefix) {\n // If a national prefix was extracted, then just prepend it,\n // followed by a \" \" character.\n formattedNationalNumber = state.nationalPrefix + getSeparatorAfterNationalPrefix(format) + formattedNationalNumber;\n } else if (state.complexPrefixBeforeNationalSignificantNumber) {\n formattedNationalNumber = state.complexPrefixBeforeNationalSignificantNumber + ' ' + formattedNationalNumber;\n }\n }\n\n if (isValidFormattedNationalNumber(formattedNationalNumber, state)) {\n return formattedNationalNumber;\n }\n} // Check that the formatted phone number contains exactly\n// the same digits that have been input by the user.\n// For example, when \"0111523456789\" is input for `AR` country,\n// the extracted `this.nationalSignificantNumber` is \"91123456789\",\n// which means that the national part of `this.digits` isn't simply equal to\n// `this.nationalPrefix` + `this.nationalSignificantNumber`.\n//\n// Also, a `format` can add extra digits to the `this.nationalSignificantNumber`\n// being formatted via `metadata[country].national_prefix_transform_rule`.\n// For example, for `VI` country, it prepends `340` to the national number,\n// and if this check hasn't been implemented, then there would be a bug\n// when `340` \"area coude\" is \"duplicated\" during input for `VI` country:\n// https://github.com/catamphetamine/libphonenumber-js/issues/318\n//\n// So, all these \"gotchas\" are filtered out.\n//\n// In the original Google's code, the comments say:\n// \"Check that we didn't remove nor add any extra digits when we matched\n// this formatting pattern. This usually happens after we entered the last\n// digit during AYTF. Eg: In case of MX, we swallow mobile token (1) when\n// formatted but AYTF should retain all the number entered and not change\n// in order to match a format (of same leading digits and length) display\n// in that way.\"\n// \"If it's the same (i.e entered number and format is same), then it's\n// safe to return this in formatted number as nothing is lost / added.\"\n// Otherwise, don't use this format.\n// https://github.com/google/libphonenumber/commit/3e7c1f04f5e7200f87fb131e6f85c6e99d60f510#diff-9149457fa9f5d608a11bb975c6ef4bc5\n// https://github.com/google/libphonenumber/commit/3ac88c7106e7dcb553bcc794b15f19185928a1c6#diff-2dcb77e833422ee304da348b905cde0b\n//\n\n\nfunction isValidFormattedNationalNumber(formattedNationalNumber, state) {\n return parseDigits(formattedNationalNumber) === state.getNationalDigits();\n}\n//# sourceMappingURL=AsYouTypeFormatter.complete.js.map","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar PatternParser = /*#__PURE__*/function () {\n function PatternParser() {\n _classCallCheck(this, PatternParser);\n }\n\n _createClass(PatternParser, [{\n key: \"parse\",\n value: function parse(pattern) {\n this.context = [{\n or: true,\n instructions: []\n }];\n this.parsePattern(pattern);\n\n if (this.context.length !== 1) {\n throw new Error('Non-finalized contexts left when pattern parse ended');\n }\n\n var _this$context$ = this.context[0],\n branches = _this$context$.branches,\n instructions = _this$context$.instructions;\n\n if (branches) {\n return {\n op: '|',\n args: branches.concat([expandSingleElementArray(instructions)])\n };\n }\n /* istanbul ignore if */\n\n\n if (instructions.length === 0) {\n throw new Error('Pattern is required');\n }\n\n if (instructions.length === 1) {\n return instructions[0];\n }\n\n return instructions;\n }\n }, {\n key: \"startContext\",\n value: function startContext(context) {\n this.context.push(context);\n }\n }, {\n key: \"endContext\",\n value: function endContext() {\n this.context.pop();\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.context[this.context.length - 1];\n }\n }, {\n key: \"parsePattern\",\n value: function parsePattern(pattern) {\n if (!pattern) {\n throw new Error('Pattern is required');\n }\n\n var match = pattern.match(OPERATOR);\n\n if (!match) {\n if (ILLEGAL_CHARACTER_REGEXP.test(pattern)) {\n throw new Error(\"Illegal characters found in a pattern: \".concat(pattern));\n }\n\n this.getContext().instructions = this.getContext().instructions.concat(pattern.split(''));\n return;\n }\n\n var operator = match[1];\n var before = pattern.slice(0, match.index);\n var rightPart = pattern.slice(match.index + operator.length);\n\n switch (operator) {\n case '(?:':\n if (before) {\n this.parsePattern(before);\n }\n\n this.startContext({\n or: true,\n instructions: [],\n branches: []\n });\n break;\n\n case ')':\n if (!this.getContext().or) {\n throw new Error('\")\" operator must be preceded by \"(?:\" operator');\n }\n\n if (before) {\n this.parsePattern(before);\n }\n\n if (this.getContext().instructions.length === 0) {\n throw new Error('No instructions found after \"|\" operator in an \"or\" group');\n }\n\n var _this$getContext = this.getContext(),\n branches = _this$getContext.branches;\n\n branches.push(expandSingleElementArray(this.getContext().instructions));\n this.endContext();\n this.getContext().instructions.push({\n op: '|',\n args: branches\n });\n break;\n\n case '|':\n if (!this.getContext().or) {\n throw new Error('\"|\" operator can only be used inside \"or\" groups');\n }\n\n if (before) {\n this.parsePattern(before);\n } // The top-level is an implicit \"or\" group, if required.\n\n\n if (!this.getContext().branches) {\n // `branches` are not defined only for the root implicit \"or\" operator.\n\n /* istanbul ignore else */\n if (this.context.length === 1) {\n this.getContext().branches = [];\n } else {\n throw new Error('\"branches\" not found in an \"or\" group context');\n }\n }\n\n this.getContext().branches.push(expandSingleElementArray(this.getContext().instructions));\n this.getContext().instructions = [];\n break;\n\n case '[':\n if (before) {\n this.parsePattern(before);\n }\n\n this.startContext({\n oneOfSet: true\n });\n break;\n\n case ']':\n if (!this.getContext().oneOfSet) {\n throw new Error('\"]\" operator must be preceded by \"[\" operator');\n }\n\n this.endContext();\n this.getContext().instructions.push({\n op: '[]',\n args: parseOneOfSet(before)\n });\n break;\n\n /* istanbul ignore next */\n\n default:\n throw new Error(\"Unknown operator: \".concat(operator));\n }\n\n if (rightPart) {\n this.parsePattern(rightPart);\n }\n }\n }]);\n\n return PatternParser;\n}();\n\nexport { PatternParser as default };\n\nfunction parseOneOfSet(pattern) {\n var values = [];\n var i = 0;\n\n while (i < pattern.length) {\n if (pattern[i] === '-') {\n if (i === 0 || i === pattern.length - 1) {\n throw new Error(\"Couldn't parse a one-of set pattern: \".concat(pattern));\n }\n\n var prevValue = pattern[i - 1].charCodeAt(0) + 1;\n var nextValue = pattern[i + 1].charCodeAt(0) - 1;\n var value = prevValue;\n\n while (value <= nextValue) {\n values.push(String.fromCharCode(value));\n value++;\n }\n } else {\n values.push(pattern[i]);\n }\n\n i++;\n }\n\n return values;\n}\n\nvar ILLEGAL_CHARACTER_REGEXP = /[\\(\\)\\[\\]\\?\\:\\|]/;\nvar OPERATOR = new RegExp( // any of:\n'(' + // or operator\n'\\\\|' + // or\n'|' + // or group start\n'\\\\(\\\\?\\\\:' + // or\n'|' + // or group end\n'\\\\)' + // or\n'|' + // one-of set start\n'\\\\[' + // or\n'|' + // one-of set end\n'\\\\]' + ')');\n\nfunction expandSingleElementArray(array) {\n if (array.length === 1) {\n return array[0];\n }\n\n return array;\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternParser.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport PatternParser from './AsYouTypeFormatter.PatternParser.js';\n\nvar PatternMatcher = /*#__PURE__*/function () {\n function PatternMatcher(pattern) {\n _classCallCheck(this, PatternMatcher);\n\n this.matchTree = new PatternParser().parse(pattern);\n }\n\n _createClass(PatternMatcher, [{\n key: \"match\",\n value: function match(string) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n allowOverflow = _ref.allowOverflow;\n\n if (!string) {\n throw new Error('String is required');\n }\n\n var result = _match(string.split(''), this.matchTree, true);\n\n if (result && result.match) {\n delete result.matchedChars;\n }\n\n if (result && result.overflow) {\n if (!allowOverflow) {\n return;\n }\n }\n\n return result;\n }\n }]);\n\n return PatternMatcher;\n}();\n/**\r\n * Matches `characters` against a pattern compiled into a `tree`.\r\n * @param {string[]} characters\r\n * @param {Tree} tree — A pattern compiled into a `tree`. See the `*.d.ts` file for the description of the `tree` structure.\r\n * @param {boolean} last — Whether it's the last (rightmost) subtree on its level of the match tree.\r\n * @return {object} See the `*.d.ts` file for the description of the result object.\r\n */\n\n\nexport { PatternMatcher as default };\n\nfunction _match(characters, tree, last) {\n // If `tree` is a string, then `tree` is a single character.\n // That's because when a pattern is parsed, multi-character-string parts\n // of a pattern are compiled into arrays of single characters.\n // I still wrote this piece of code for a \"general\" hypothetical case\n // when `tree` could be a string of several characters, even though\n // such case is not possible with the current implementation.\n if (typeof tree === 'string') {\n var characterString = characters.join('');\n\n if (tree.indexOf(characterString) === 0) {\n // `tree` is always a single character.\n // If `tree.indexOf(characterString) === 0`\n // then `characters.length === tree.length`.\n\n /* istanbul ignore else */\n if (characters.length === tree.length) {\n return {\n match: true,\n matchedChars: characters\n };\n } // `tree` is always a single character.\n // If `tree.indexOf(characterString) === 0`\n // then `characters.length === tree.length`.\n\n /* istanbul ignore next */\n\n\n return {\n partialMatch: true // matchedChars: characters\n\n };\n }\n\n if (characterString.indexOf(tree) === 0) {\n if (last) {\n // The `else` path is not possible because `tree` is always a single character.\n // The `else` case for `characters.length > tree.length` would be\n // `characters.length <= tree.length` which means `characters.length <= 1`.\n // `characters` array can't be empty, so that means `characters === [tree]`,\n // which would also mean `tree.indexOf(characterString) === 0` and that'd mean\n // that the `if (tree.indexOf(characterString) === 0)` condition before this\n // `if` condition would be entered, and returned from there, not reaching this code.\n\n /* istanbul ignore else */\n if (characters.length > tree.length) {\n return {\n overflow: true\n };\n }\n }\n\n return {\n match: true,\n matchedChars: characters.slice(0, tree.length)\n };\n }\n\n return;\n }\n\n if (Array.isArray(tree)) {\n var restCharacters = characters.slice();\n var i = 0;\n\n while (i < tree.length) {\n var subtree = tree[i];\n\n var result = _match(restCharacters, subtree, last && i === tree.length - 1);\n\n if (!result) {\n return;\n } else if (result.overflow) {\n return result;\n } else if (result.match) {\n // Continue with the next subtree with the rest of the characters.\n restCharacters = restCharacters.slice(result.matchedChars.length);\n\n if (restCharacters.length === 0) {\n if (i === tree.length - 1) {\n return {\n match: true,\n matchedChars: characters\n };\n } else {\n return {\n partialMatch: true // matchedChars: characters\n\n };\n }\n }\n } else {\n /* istanbul ignore else */\n if (result.partialMatch) {\n return {\n partialMatch: true // matchedChars: characters\n\n };\n } else {\n throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(result, null, 2)));\n }\n }\n\n i++;\n } // If `last` then overflow has already been checked\n // by the last element of the `tree` array.\n\n /* istanbul ignore if */\n\n\n if (last) {\n return {\n overflow: true\n };\n }\n\n return {\n match: true,\n matchedChars: characters.slice(0, characters.length - restCharacters.length)\n };\n }\n\n switch (tree.op) {\n case '|':\n var partialMatch;\n\n for (var _iterator = _createForOfIteratorHelperLoose(tree.args), _step; !(_step = _iterator()).done;) {\n var branch = _step.value;\n\n var _result = _match(characters, branch, last);\n\n if (_result) {\n if (_result.overflow) {\n return _result;\n } else if (_result.match) {\n return {\n match: true,\n matchedChars: _result.matchedChars\n };\n } else {\n /* istanbul ignore else */\n if (_result.partialMatch) {\n partialMatch = true;\n } else {\n throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(_result, null, 2)));\n }\n }\n }\n }\n\n if (partialMatch) {\n return {\n partialMatch: true // matchedChars: ...\n\n };\n } // Not even a partial match.\n\n\n return;\n\n case '[]':\n for (var _iterator2 = _createForOfIteratorHelperLoose(tree.args), _step2; !(_step2 = _iterator2()).done;) {\n var _char = _step2.value;\n\n if (characters[0] === _char) {\n if (characters.length === 1) {\n return {\n match: true,\n matchedChars: characters\n };\n }\n\n if (last) {\n return {\n overflow: true\n };\n }\n\n return {\n match: true,\n matchedChars: [_char]\n };\n }\n } // No character matches.\n\n\n return;\n\n /* istanbul ignore next */\n\n default:\n throw new Error(\"Unsupported instruction tree: \".concat(tree));\n }\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternMatcher.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { DIGIT_PLACEHOLDER, countOccurences, repeat, cutAndStripNonPairedParens, closeNonPairedParens, stripNonPairedParens, populateTemplateWithDigits } from './AsYouTypeFormatter.util.js';\nimport formatCompleteNumber, { canFormatCompleteNumber } from './AsYouTypeFormatter.complete.js';\nimport PatternMatcher from './AsYouTypeFormatter.PatternMatcher.js';\nimport parseDigits from './helpers/parseDigits.js';\nexport { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.util.js';\nimport { FIRST_GROUP_PATTERN } from './helpers/formatNationalNumberUsingFormat.js';\nimport { VALID_PUNCTUATION } from './constants.js';\nimport applyInternationalSeparatorStyle from './helpers/applyInternationalSeparatorStyle.js'; // Used in phone number format template creation.\n// Could be any digit, I guess.\n\nvar DUMMY_DIGIT = '9'; // I don't know why is it exactly `15`\n\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15; // Create a phone number consisting only of the digit 9 that matches the\n// `number_pattern` by applying the pattern to the \"longest phone number\" string.\n\nvar LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH); // A set of characters that, if found in a national prefix formatting rules, are an indicator to\n// us that we should separate the national prefix from the number when formatting.\n\nvar NATIONAL_PREFIX_SEPARATORS_PATTERN = /[- ]/; // Deprecated: Google has removed some formatting pattern related code from their repo.\n// https://github.com/googlei18n/libphonenumber/commit/a395b4fef3caf57c4bc5f082e1152a4d2bd0ba4c\n// \"We no longer have numbers in formatting matching patterns, only \\d.\"\n// Because this library supports generating custom metadata\n// some users may still be using old metadata so the relevant\n// code seems to stay until some next major version update.\n\nvar SUPPORT_LEGACY_FORMATTING_PATTERNS = true; // A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \"[1-4]\".\n\nvar CREATE_CHARACTER_CLASS_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n return /\\[([^\\[\\]])*\\]/g;\n}; // Any digit in a regular expression that actually denotes a digit. For\n// example, in the regular expression \"80[0-2]\\d{6,10}\", the first 2 digits\n// (8 and 0) are standalone digits, but the rest are not.\n// Two look-aheads are needed because the number following \\\\d could be a\n// two-digit number, since the phone number can be as long as 15 digits.\n\n\nvar CREATE_STANDALONE_DIGIT_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n return /\\d(?=[^,}][^,}])/g;\n}; // A regular expression that is used to determine if a `format` is\n// suitable to be used in the \"as you type formatter\".\n// A `format` is suitable when the resulting formatted number has\n// the same digits as the user has entered.\n//\n// In the simplest case, that would mean that the format\n// doesn't add any additional digits when formatting a number.\n// Google says that it also shouldn't add \"star\" (`*`) characters,\n// like it does in some Israeli formats.\n// Such basic format would only contain \"valid punctuation\"\n// and \"captured group\" identifiers ($1, $2, etc).\n//\n// An example of a format that adds additional digits:\n//\n// Country: `AR` (Argentina).\n// Format:\n// {\n// \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n// \"leading_digits_patterns\": [\"91\"],\n// \"national_prefix_formatting_rule\": \"0$1\",\n// \"format\": \"$2 15-$3-$4\",\n// \"international_format\": \"$1 $2 $3-$4\"\n// }\n//\n// In the format above, the `format` adds `15` to the digits when formatting a number.\n// A sidenote: this format actually is suitable because `national_prefix_for_parsing`\n// has previously removed `15` from a national number, so re-adding `15` in `format`\n// doesn't actually result in any extra digits added to user's input.\n// But verifying that would be a complex procedure, so the code chooses a simpler path:\n// it simply filters out all `format`s that contain anything but \"captured group\" ids.\n//\n// This regular expression is called `ELIGIBLE_FORMAT_PATTERN` in Google's\n// `libphonenumber` code.\n//\n\n\nvar NON_ALTERING_FORMAT_REG_EXP = new RegExp('[' + VALID_PUNCTUATION + ']*' + // Google developers say:\n// \"We require that the first matching group is present in the\n// output pattern to ensure no data is lost while formatting.\"\n'\\\\$1' + '[' + VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + VALID_PUNCTUATION + ']*)*' + '$'); // This is the minimum length of the leading digits of a phone number\n// to guarantee the first \"leading digits pattern\" for a phone number format\n// to be preemptive.\n\nvar MIN_LEADING_DIGITS_LENGTH = 3;\n\nvar AsYouTypeFormatter = /*#__PURE__*/function () {\n function AsYouTypeFormatter(_ref) {\n var state = _ref.state,\n metadata = _ref.metadata;\n\n _classCallCheck(this, AsYouTypeFormatter);\n\n this.metadata = metadata;\n this.resetFormat();\n }\n\n _createClass(AsYouTypeFormatter, [{\n key: \"resetFormat\",\n value: function resetFormat() {\n this.chosenFormat = undefined;\n this.template = undefined;\n this.nationalNumberTemplate = undefined;\n this.populatedNationalNumberTemplate = undefined;\n this.populatedNationalNumberTemplatePosition = -1;\n }\n }, {\n key: \"reset\",\n value: function reset(numberingPlan, state) {\n this.resetFormat();\n\n if (numberingPlan) {\n this.isNANP = numberingPlan.callingCode() === '1';\n this.matchingFormats = numberingPlan.formats();\n\n if (state.nationalSignificantNumber) {\n this.narrowDownMatchingFormats(state);\n }\n } else {\n this.isNANP = undefined;\n this.matchingFormats = [];\n }\n }\n /**\r\n * Formats an updated phone number.\r\n * @param {string} nextDigits — Additional phone number digits.\r\n * @param {object} state — `AsYouType` state.\r\n * @return {[string]} Returns undefined if the updated phone number can't be formatted using any of the available formats.\r\n */\n\n }, {\n key: \"format\",\n value: function format(nextDigits, state) {\n var _this = this;\n\n // See if the phone number digits can be formatted as a complete phone number.\n // If not, use the results from `formatNationalNumberWithNextDigits()`,\n // which formats based on the chosen formatting pattern.\n //\n // Attempting to format complete phone number first is how it's done\n // in Google's `libphonenumber`, so this library just follows it.\n // Google's `libphonenumber` code doesn't explain in detail why does it\n // attempt to format digits as a complete phone number\n // instead of just going with a previoulsy (or newly) chosen `format`:\n //\n // \"Checks to see if there is an exact pattern match for these digits.\n // If so, we should use this instead of any other formatting template\n // whose leadingDigitsPattern also matches the input.\"\n //\n if (canFormatCompleteNumber(state.nationalSignificantNumber, this.metadata)) {\n for (var _iterator = _createForOfIteratorHelperLoose(this.matchingFormats), _step; !(_step = _iterator()).done;) {\n var format = _step.value;\n var formattedCompleteNumber = formatCompleteNumber(state, format, {\n metadata: this.metadata,\n shouldTryNationalPrefixFormattingRule: function shouldTryNationalPrefixFormattingRule(format) {\n return _this.shouldTryNationalPrefixFormattingRule(format, {\n international: state.international,\n nationalPrefix: state.nationalPrefix\n });\n },\n getSeparatorAfterNationalPrefix: function getSeparatorAfterNationalPrefix(format) {\n return _this.getSeparatorAfterNationalPrefix(format);\n }\n });\n\n if (formattedCompleteNumber) {\n this.resetFormat();\n this.chosenFormat = format;\n this.setNationalNumberTemplate(formattedCompleteNumber.replace(/\\d/g, DIGIT_PLACEHOLDER), state);\n this.populatedNationalNumberTemplate = formattedCompleteNumber; // With a new formatting template, the matched position\n // using the old template needs to be reset.\n\n this.populatedNationalNumberTemplatePosition = this.template.lastIndexOf(DIGIT_PLACEHOLDER);\n return formattedCompleteNumber;\n }\n }\n } // Format the digits as a partial (incomplete) phone number\n // using the previously chosen formatting pattern (or a newly chosen one).\n\n\n return this.formatNationalNumberWithNextDigits(nextDigits, state);\n } // Formats the next phone number digits.\n\n }, {\n key: \"formatNationalNumberWithNextDigits\",\n value: function formatNationalNumberWithNextDigits(nextDigits, state) {\n var previouslyChosenFormat = this.chosenFormat; // Choose a format from the list of matching ones.\n\n var newlyChosenFormat = this.chooseFormat(state);\n\n if (newlyChosenFormat) {\n if (newlyChosenFormat === previouslyChosenFormat) {\n // If it can format the next (current) digits\n // using the previously chosen phone number format\n // then return the updated formatted number.\n return this.formatNextNationalNumberDigits(nextDigits);\n } else {\n // If a more appropriate phone number format\n // has been chosen for these \"leading digits\",\n // then re-format the national phone number part\n // using the newly selected format.\n return this.formatNextNationalNumberDigits(state.getNationalDigits());\n }\n }\n }\n }, {\n key: \"narrowDownMatchingFormats\",\n value: function narrowDownMatchingFormats(_ref2) {\n var _this2 = this;\n\n var nationalSignificantNumber = _ref2.nationalSignificantNumber,\n nationalPrefix = _ref2.nationalPrefix,\n international = _ref2.international;\n var leadingDigits = nationalSignificantNumber; // \"leading digits\" pattern list starts with a\n // \"leading digits\" pattern fitting a maximum of 3 leading digits.\n // So, after a user inputs 3 digits of a national (significant) phone number\n // this national (significant) number can already be formatted.\n // The next \"leading digits\" pattern is for 4 leading digits max,\n // and the \"leading digits\" pattern after it is for 5 leading digits max, etc.\n // This implementation is different from Google's\n // in that it searches for a fitting format\n // even if the user has entered less than\n // `MIN_LEADING_DIGITS_LENGTH` digits of a national number.\n // Because some leading digit patterns already match for a single first digit.\n\n var leadingDigitsPatternIndex = leadingDigits.length - MIN_LEADING_DIGITS_LENGTH;\n\n if (leadingDigitsPatternIndex < 0) {\n leadingDigitsPatternIndex = 0;\n }\n\n this.matchingFormats = this.matchingFormats.filter(function (format) {\n return _this2.formatSuits(format, international, nationalPrefix) && _this2.formatMatches(format, leadingDigits, leadingDigitsPatternIndex);\n }); // If there was a phone number format chosen\n // and it no longer holds given the new leading digits then reset it.\n // The test for this `if` condition is marked as:\n // \"Reset a chosen format when it no longer holds given the new leading digits\".\n // To construct a valid test case for this one can find a country\n // in `PhoneNumberMetadata.xml` yielding one format for 3 ``\n // and yielding another format for 4 `` (Australia in this case).\n\n if (this.chosenFormat && this.matchingFormats.indexOf(this.chosenFormat) === -1) {\n this.resetFormat();\n }\n }\n }, {\n key: \"formatSuits\",\n value: function formatSuits(format, international, nationalPrefix) {\n // When a prefix before a national (significant) number is\n // simply a national prefix, then it's parsed as `this.nationalPrefix`.\n // In more complex cases, a prefix before national (significant) number\n // could include a national prefix as well as some \"capturing groups\",\n // and in that case there's no info whether a national prefix has been parsed.\n // If national prefix is not used when formatting a phone number\n // using this format, but a national prefix has been entered by the user,\n // and was extracted, then discard such phone number format.\n // In Google's \"AsYouType\" formatter code, the equivalent would be this part:\n // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L175-L184\n if (nationalPrefix && !format.usesNationalPrefix() && // !format.domesticCarrierCodeFormattingRule() &&\n !format.nationalPrefixIsOptionalWhenFormattingInNationalFormat()) {\n return false;\n } // If national prefix is mandatory for this phone number format\n // and there're no guarantees that a national prefix is present in user input\n // then discard this phone number format as not suitable.\n // In Google's \"AsYouType\" formatter code, the equivalent would be this part:\n // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L185-L193\n\n\n if (!international && !nationalPrefix && format.nationalPrefixIsMandatoryWhenFormattingInNationalFormat()) {\n return false;\n }\n\n return true;\n }\n }, {\n key: \"formatMatches\",\n value: function formatMatches(format, leadingDigits, leadingDigitsPatternIndex) {\n var leadingDigitsPatternsCount = format.leadingDigitsPatterns().length; // If this format is not restricted to a certain\n // leading digits pattern then it fits.\n // The test case could be found by searching for \"leadingDigitsPatternsCount === 0\".\n\n if (leadingDigitsPatternsCount === 0) {\n return true;\n } // Start narrowing down the list of possible formats based on the leading digits.\n // (only previously matched formats take part in the narrowing down process)\n // `leading_digits_patterns` start with 3 digits min\n // and then go up from there one digit at a time.\n\n\n leadingDigitsPatternIndex = Math.min(leadingDigitsPatternIndex, leadingDigitsPatternsCount - 1);\n var leadingDigitsPattern = format.leadingDigitsPatterns()[leadingDigitsPatternIndex]; // Google imposes a requirement on the leading digits\n // to be minimum 3 digits long in order to be eligible\n // for checking those with a leading digits pattern.\n //\n // Since `leading_digits_patterns` start with 3 digits min,\n // Google's original `libphonenumber` library only starts\n // excluding any non-matching formats only when the\n // national number entered so far is at least 3 digits long,\n // otherwise format matching would give false negatives.\n //\n // For example, when the digits entered so far are `2`\n // and the leading digits pattern is `21` –\n // it's quite obvious in this case that the format could be the one\n // but due to the absence of further digits it would give false negative.\n //\n // Also, `leading_digits_patterns` doesn't always correspond to a single\n // digits count. For example, `60|8` pattern would already match `8`\n // but the `60` part would require having at least two leading digits,\n // so the whole pattern would require inputting two digits first in order to\n // decide on whether it matches the input, even when the input is \"80\".\n //\n // This library — `libphonenumber-js` — allows filtering by `leading_digits_patterns`\n // even when there's only 1 or 2 digits of the national (significant) number.\n // To do that, it uses a non-strict pattern matcher written specifically for that.\n //\n\n if (leadingDigits.length < MIN_LEADING_DIGITS_LENGTH) {\n // Before leading digits < 3 matching was implemented:\n // return true\n //\n // After leading digits < 3 matching was implemented:\n try {\n return new PatternMatcher(leadingDigitsPattern).match(leadingDigits, {\n allowOverflow: true\n }) !== undefined;\n } catch (error)\n /* istanbul ignore next */\n {\n // There's a slight possibility that there could be some undiscovered bug\n // in the pattern matcher code. Since the \"leading digits < 3 matching\"\n // feature is not \"essential\" for operation, it can fall back to the old way\n // in case of any issues rather than halting the application's execution.\n console.error(error);\n return true;\n }\n } // If at least `MIN_LEADING_DIGITS_LENGTH` digits of a national number are\n // available then use the usual regular expression matching.\n //\n // The whole pattern is wrapped in round brackets (`()`) because\n // the pattern can use \"or\" operator (`|`) at the top level of the pattern.\n //\n\n\n return new RegExp(\"^(\".concat(leadingDigitsPattern, \")\")).test(leadingDigits);\n }\n }, {\n key: \"getFormatFormat\",\n value: function getFormatFormat(format, international) {\n return international ? format.internationalFormat() : format.format();\n }\n }, {\n key: \"chooseFormat\",\n value: function chooseFormat(state) {\n var _this3 = this;\n\n var _loop = function _loop() {\n var format = _step2.value;\n\n // If this format is currently being used\n // and is still suitable, then stick to it.\n if (_this3.chosenFormat === format) {\n return \"break\";\n } // Sometimes, a formatting rule inserts additional digits in a phone number,\n // and \"as you type\" formatter can't do that: it should only use the digits\n // that the user has input.\n //\n // For example, in Argentina, there's a format for mobile phone numbers:\n //\n // {\n // \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n // \"leading_digits_patterns\": [\"91\"],\n // \"national_prefix_formatting_rule\": \"0$1\",\n // \"format\": \"$2 15-$3-$4\",\n // \"international_format\": \"$1 $2 $3-$4\"\n // }\n //\n // In that format, `international_format` is used instead of `format`\n // because `format` inserts `15` in the formatted number,\n // and `AsYouType` formatter should only use the digits\n // the user has actually input, without adding any extra digits.\n // In this case, it wouldn't make a difference, because the `15`\n // is first stripped when applying `national_prefix_for_parsing`\n // and then re-added when using `format`, so in reality it doesn't\n // add any new digits to the number, but to detect that, the code\n // would have to be more complex: it would have to try formatting\n // the digits using the format and then see if any digits have\n // actually been added or removed, and then, every time a new digit\n // is input, it should re-check whether the chosen format doesn't\n // alter the digits.\n //\n // Google's code doesn't go that far, and so does this library:\n // it simply requires that a `format` doesn't add any additonal\n // digits to user's input.\n //\n // Also, people in general should move from inputting phone numbers\n // in national format (possibly with national prefixes)\n // and use international phone number format instead:\n // it's a logical thing in the modern age of mobile phones,\n // globalization and the internet.\n //\n\n /* istanbul ignore if */\n\n\n if (!NON_ALTERING_FORMAT_REG_EXP.test(_this3.getFormatFormat(format, state.international))) {\n return \"continue\";\n }\n\n if (!_this3.createTemplateForFormat(format, state)) {\n // Remove the format if it can't generate a template.\n _this3.matchingFormats = _this3.matchingFormats.filter(function (_) {\n return _ !== format;\n });\n return \"continue\";\n }\n\n _this3.chosenFormat = format;\n return \"break\";\n };\n\n // When there are multiple available formats, the formatter uses the first\n // format where a formatting template could be created.\n //\n // For some weird reason, `istanbul` says \"else path not taken\"\n // for the `for of` line below. Supposedly that means that\n // the loop doesn't ever go over the last element in the list.\n // That's true because there always is `this.chosenFormat`\n // when `this.matchingFormats` is non-empty.\n // And, for some weird reason, it doesn't think that the case\n // with empty `this.matchingFormats` qualifies for a valid \"else\" path.\n // So simply muting this `istanbul` warning.\n // It doesn't skip the contents of the `for of` loop,\n // it just skips the `for of` line.\n //\n\n /* istanbul ignore next */\n for (var _iterator2 = _createForOfIteratorHelperLoose(this.matchingFormats.slice()), _step2; !(_step2 = _iterator2()).done;) {\n var _ret = _loop();\n\n if (_ret === \"break\") break;\n if (_ret === \"continue\") continue;\n }\n\n if (!this.chosenFormat) {\n // No format matches the national (significant) phone number.\n this.resetFormat();\n }\n\n return this.chosenFormat;\n }\n }, {\n key: \"createTemplateForFormat\",\n value: function createTemplateForFormat(format, state) {\n // The formatter doesn't format numbers when numberPattern contains '|', e.g.\n // (20|3)\\d{4}. In those cases we quickly return.\n // (Though there's no such format in current metadata)\n\n /* istanbul ignore if */\n if (SUPPORT_LEGACY_FORMATTING_PATTERNS && format.pattern().indexOf('|') >= 0) {\n return;\n } // Get formatting template for this phone number format\n\n\n var template = this.getTemplateForFormat(format, state); // If the national number entered is too long\n // for any phone number format, then abort.\n\n if (template) {\n this.setNationalNumberTemplate(template, state);\n return true;\n }\n }\n }, {\n key: \"getSeparatorAfterNationalPrefix\",\n value: function getSeparatorAfterNationalPrefix(format) {\n // `US` metadata doesn't have a `national_prefix_formatting_rule`,\n // so the `if` condition below doesn't apply to `US`,\n // but in reality there shoudl be a separator\n // between a national prefix and a national (significant) number.\n // So `US` national prefix separator is a \"special\" \"hardcoded\" case.\n if (this.isNANP) {\n return ' ';\n } // If a `format` has a `national_prefix_formatting_rule`\n // and that rule has a separator after a national prefix,\n // then it means that there should be a separator\n // between a national prefix and a national (significant) number.\n\n\n if (format && format.nationalPrefixFormattingRule() && NATIONAL_PREFIX_SEPARATORS_PATTERN.test(format.nationalPrefixFormattingRule())) {\n return ' ';\n } // At this point, there seems to be no clear evidence that\n // there should be a separator between a national prefix\n // and a national (significant) number. So don't insert one.\n\n\n return '';\n }\n }, {\n key: \"getInternationalPrefixBeforeCountryCallingCode\",\n value: function getInternationalPrefixBeforeCountryCallingCode(_ref3, options) {\n var IDDPrefix = _ref3.IDDPrefix,\n missingPlus = _ref3.missingPlus;\n\n if (IDDPrefix) {\n return options && options.spacing === false ? IDDPrefix : IDDPrefix + ' ';\n }\n\n if (missingPlus) {\n return '';\n }\n\n return '+';\n }\n }, {\n key: \"getTemplate\",\n value: function getTemplate(state) {\n if (!this.template) {\n return;\n } // `this.template` holds the template for a \"complete\" phone number.\n // The currently entered phone number is most likely not \"complete\",\n // so trim all non-populated digits.\n\n\n var index = -1;\n var i = 0;\n var internationalPrefix = state.international ? this.getInternationalPrefixBeforeCountryCallingCode(state, {\n spacing: false\n }) : '';\n\n while (i < internationalPrefix.length + state.getDigitsWithoutInternationalPrefix().length) {\n index = this.template.indexOf(DIGIT_PLACEHOLDER, index + 1);\n i++;\n }\n\n return cutAndStripNonPairedParens(this.template, index + 1);\n }\n }, {\n key: \"setNationalNumberTemplate\",\n value: function setNationalNumberTemplate(template, state) {\n this.nationalNumberTemplate = template;\n this.populatedNationalNumberTemplate = template; // With a new formatting template, the matched position\n // using the old template needs to be reset.\n\n this.populatedNationalNumberTemplatePosition = -1; // For convenience, the public `.template` property\n // contains the whole international number\n // if the phone number being input is international:\n // 'x' for the '+' sign, 'x'es for the country phone code,\n // a spacebar and then the template for the formatted national number.\n\n if (state.international) {\n this.template = this.getInternationalPrefixBeforeCountryCallingCode(state).replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER) + repeat(DIGIT_PLACEHOLDER, state.callingCode.length) + ' ' + template;\n } else {\n this.template = template;\n }\n }\n /**\r\n * Generates formatting template for a national phone number,\r\n * optionally containing a national prefix, for a format.\r\n * @param {Format} format\r\n * @param {string} nationalPrefix\r\n * @return {string}\r\n */\n\n }, {\n key: \"getTemplateForFormat\",\n value: function getTemplateForFormat(format, _ref4) {\n var nationalSignificantNumber = _ref4.nationalSignificantNumber,\n international = _ref4.international,\n nationalPrefix = _ref4.nationalPrefix,\n complexPrefixBeforeNationalSignificantNumber = _ref4.complexPrefixBeforeNationalSignificantNumber;\n var pattern = format.pattern();\n /* istanbul ignore else */\n\n if (SUPPORT_LEGACY_FORMATTING_PATTERNS) {\n pattern = pattern // Replace anything in the form of [..] with \\d\n .replace(CREATE_CHARACTER_CLASS_PATTERN(), '\\\\d') // Replace any standalone digit (not the one in `{}`) with \\d\n .replace(CREATE_STANDALONE_DIGIT_PATTERN(), '\\\\d');\n } // Generate a dummy national number (consisting of `9`s)\n // that fits this format's `pattern`.\n //\n // This match will always succeed,\n // because the \"longest dummy phone number\"\n // has enough length to accomodate any possible\n // national phone number format pattern.\n //\n\n\n var digits = LONGEST_DUMMY_PHONE_NUMBER.match(pattern)[0]; // If the national number entered is too long\n // for any phone number format, then abort.\n\n if (nationalSignificantNumber.length > digits.length) {\n return;\n } // Get a formatting template which can be used to efficiently format\n // a partial number where digits are added one by one.\n // Below `strictPattern` is used for the\n // regular expression (with `^` and `$`).\n // This wasn't originally in Google's `libphonenumber`\n // and I guess they don't really need it\n // because they're not using \"templates\" to format phone numbers\n // but I added `strictPattern` after encountering\n // South Korean phone number formatting bug.\n //\n // Non-strict regular expression bug demonstration:\n //\n // this.nationalSignificantNumber : `111111111` (9 digits)\n //\n // pattern : (\\d{2})(\\d{3,4})(\\d{4})\n // format : `$1 $2 $3`\n // digits : `9999999999` (10 digits)\n //\n // '9999999999'.replace(new RegExp(/(\\d{2})(\\d{3,4})(\\d{4})/g), '$1 $2 $3') = \"99 9999 9999\"\n //\n // template : xx xxxx xxxx\n //\n // But the correct template in this case is `xx xxx xxxx`.\n // The template was generated incorrectly because of the\n // `{3,4}` variability in the `pattern`.\n //\n // The fix is, if `this.nationalSignificantNumber` has already sufficient length\n // to satisfy the `pattern` completely then `this.nationalSignificantNumber`\n // is used instead of `digits`.\n\n\n var strictPattern = new RegExp('^' + pattern + '$');\n var nationalNumberDummyDigits = nationalSignificantNumber.replace(/\\d/g, DUMMY_DIGIT); // If `this.nationalSignificantNumber` has already sufficient length\n // to satisfy the `pattern` completely then use it\n // instead of `digits`.\n\n if (strictPattern.test(nationalNumberDummyDigits)) {\n digits = nationalNumberDummyDigits;\n }\n\n var numberFormat = this.getFormatFormat(format, international);\n var nationalPrefixIncludedInTemplate; // If a user did input a national prefix (and that's guaranteed),\n // and if a `format` does have a national prefix formatting rule,\n // then see if that national prefix formatting rule\n // prepends exactly the same national prefix the user has input.\n // If that's the case, then use the `format` with the national prefix formatting rule.\n // Otherwise, use the `format` without the national prefix formatting rule,\n // and prepend a national prefix manually to it.\n\n if (this.shouldTryNationalPrefixFormattingRule(format, {\n international: international,\n nationalPrefix: nationalPrefix\n })) {\n var numberFormatWithNationalPrefix = numberFormat.replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()); // If `national_prefix_formatting_rule` of a `format` simply prepends\n // national prefix at the start of a national (significant) number,\n // then such formatting can be used with `AsYouType` formatter.\n // There seems to be no `else` case: everywhere in metadata,\n // national prefix formatting rule is national prefix + $1,\n // or `($1)`, in which case such format isn't even considered\n // when the user has input a national prefix.\n\n /* istanbul ignore else */\n\n if (parseDigits(format.nationalPrefixFormattingRule()) === (nationalPrefix || '') + parseDigits('$1')) {\n numberFormat = numberFormatWithNationalPrefix;\n nationalPrefixIncludedInTemplate = true; // Replace all digits of the national prefix in the formatting template\n // with `DIGIT_PLACEHOLDER`s.\n\n if (nationalPrefix) {\n var i = nationalPrefix.length;\n\n while (i > 0) {\n numberFormat = numberFormat.replace(/\\d/, DIGIT_PLACEHOLDER);\n i--;\n }\n }\n }\n } // Generate formatting template for this phone number format.\n\n\n var template = digits // Format the dummy phone number according to the format.\n .replace(new RegExp(pattern), numberFormat) // Replace each dummy digit with a DIGIT_PLACEHOLDER.\n .replace(new RegExp(DUMMY_DIGIT, 'g'), DIGIT_PLACEHOLDER); // If a prefix of a national (significant) number is not as simple\n // as just a basic national prefix, then just prepend such prefix\n // before the national (significant) number, optionally spacing\n // the two with a whitespace.\n\n if (!nationalPrefixIncludedInTemplate) {\n if (complexPrefixBeforeNationalSignificantNumber) {\n // Prepend the prefix to the template manually.\n template = repeat(DIGIT_PLACEHOLDER, complexPrefixBeforeNationalSignificantNumber.length) + ' ' + template;\n } else if (nationalPrefix) {\n // Prepend national prefix to the template manually.\n template = repeat(DIGIT_PLACEHOLDER, nationalPrefix.length) + this.getSeparatorAfterNationalPrefix(format) + template;\n }\n }\n\n if (international) {\n template = applyInternationalSeparatorStyle(template);\n }\n\n return template;\n }\n }, {\n key: \"formatNextNationalNumberDigits\",\n value: function formatNextNationalNumberDigits(digits) {\n var result = populateTemplateWithDigits(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition, digits);\n\n if (!result) {\n // Reset the format.\n this.resetFormat();\n return;\n }\n\n this.populatedNationalNumberTemplate = result[0];\n this.populatedNationalNumberTemplatePosition = result[1]; // Return the formatted phone number so far.\n\n return cutAndStripNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1); // The old way which was good for `input-format` but is not so good\n // for `react-phone-number-input`'s default input (`InputBasic`).\n // return closeNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1)\n // \t.replace(new RegExp(DIGIT_PLACEHOLDER, 'g'), ' ')\n }\n }, {\n key: \"shouldTryNationalPrefixFormattingRule\",\n value: function shouldTryNationalPrefixFormattingRule(format, _ref5) {\n var international = _ref5.international,\n nationalPrefix = _ref5.nationalPrefix;\n\n if (format.nationalPrefixFormattingRule()) {\n // In some countries, `national_prefix_formatting_rule` is `($1)`,\n // so it applies even if the user hasn't input a national prefix.\n // `format.usesNationalPrefix()` detects such cases.\n var usesNationalPrefix = format.usesNationalPrefix();\n\n if (usesNationalPrefix && nationalPrefix || !usesNationalPrefix && !international) {\n return true;\n }\n }\n }\n }]);\n\n return AsYouTypeFormatter;\n}();\n\nexport { AsYouTypeFormatter as default };\n//# sourceMappingURL=AsYouTypeFormatter.js.map","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport _extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport extractNationalNumberFromPossiblyIncompleteNumber from './helpers/extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport stripIddPrefix from './helpers/stripIddPrefix.js';\nimport parseDigits from './helpers/parseDigits.js';\nimport { VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from './constants.js';\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART = '[' + VALID_PUNCTUATION + VALID_DIGITS + ']+';\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN = new RegExp('^' + VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART + '$', 'i');\nvar VALID_FORMATTED_PHONE_NUMBER_PART = '(?:' + '[' + PLUS_CHARS + ']' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*' + '|' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']+' + ')';\nvar AFTER_PHONE_NUMBER_DIGITS_END_PATTERN = new RegExp('[^' + VALID_PUNCTUATION + VALID_DIGITS + ']+' + '.*' + '$'); // Tests whether `national_prefix_for_parsing` could match\n// different national prefixes.\n// Matches anything that's not a digit or a square bracket.\n\nvar COMPLEX_NATIONAL_PREFIX = /[^\\d\\[\\]]/;\n\nvar AsYouTypeParser = /*#__PURE__*/function () {\n function AsYouTypeParser(_ref) {\n var defaultCountry = _ref.defaultCountry,\n defaultCallingCode = _ref.defaultCallingCode,\n metadata = _ref.metadata,\n onNationalSignificantNumberChange = _ref.onNationalSignificantNumberChange;\n\n _classCallCheck(this, AsYouTypeParser);\n\n this.defaultCountry = defaultCountry;\n this.defaultCallingCode = defaultCallingCode;\n this.metadata = metadata;\n this.onNationalSignificantNumberChange = onNationalSignificantNumberChange;\n }\n\n _createClass(AsYouTypeParser, [{\n key: \"input\",\n value: function input(text, state) {\n var _extractFormattedDigi = extractFormattedDigitsAndPlus(text),\n _extractFormattedDigi2 = _slicedToArray(_extractFormattedDigi, 2),\n formattedDigits = _extractFormattedDigi2[0],\n hasPlus = _extractFormattedDigi2[1];\n\n var digits = parseDigits(formattedDigits); // Checks for a special case: just a leading `+` has been entered.\n\n var justLeadingPlus;\n\n if (hasPlus) {\n if (!state.digits) {\n state.startInternationalNumber();\n\n if (!digits) {\n justLeadingPlus = true;\n }\n }\n }\n\n if (digits) {\n this.inputDigits(digits, state);\n }\n\n return {\n digits: digits,\n justLeadingPlus: justLeadingPlus\n };\n }\n /**\r\n * Inputs \"next\" phone number digits.\r\n * @param {string} digits\r\n * @return {string} [formattedNumber] Formatted national phone number (if it can be formatted at this stage). Returning `undefined` means \"don't format the national phone number at this stage\".\r\n */\n\n }, {\n key: \"inputDigits\",\n value: function inputDigits(nextDigits, state) {\n var digits = state.digits;\n var hasReceivedThreeLeadingDigits = digits.length < 3 && digits.length + nextDigits.length >= 3; // Append phone number digits.\n\n state.appendDigits(nextDigits); // Attempt to extract IDD prefix:\n // Some users input their phone number in international format,\n // but in an \"out-of-country\" dialing format instead of using the leading `+`.\n // https://github.com/catamphetamine/libphonenumber-js/issues/185\n // Detect such numbers as soon as there're at least 3 digits.\n // Google's library attempts to extract IDD prefix at 3 digits,\n // so this library just copies that behavior.\n // I guess that's because the most commot IDD prefixes are\n // `00` (Europe) and `011` (US).\n // There exist really long IDD prefixes too:\n // for example, in Australia the default IDD prefix is `0011`,\n // and it could even be as long as `14880011`.\n // An IDD prefix is extracted here, and then every time when\n // there's a new digit and the number couldn't be formatted.\n\n if (hasReceivedThreeLeadingDigits) {\n this.extractIddPrefix(state);\n }\n\n if (this.isWaitingForCountryCallingCode(state)) {\n if (!this.extractCountryCallingCode(state)) {\n return;\n }\n } else {\n state.appendNationalSignificantNumberDigits(nextDigits);\n } // If a phone number is being input in international format,\n // then it's not valid for it to have a national prefix.\n // Still, some people incorrectly input such numbers with a national prefix.\n // In such cases, only attempt to strip a national prefix if the number becomes too long.\n // (but that is done later, not here)\n\n\n if (!state.international) {\n if (!this.hasExtractedNationalSignificantNumber) {\n this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {\n return state.update(stateUpdate);\n });\n }\n }\n }\n }, {\n key: \"isWaitingForCountryCallingCode\",\n value: function isWaitingForCountryCallingCode(_ref2) {\n var international = _ref2.international,\n callingCode = _ref2.callingCode;\n return international && !callingCode;\n } // Extracts a country calling code from a number\n // being entered in internatonal format.\n\n }, {\n key: \"extractCountryCallingCode\",\n value: function extractCountryCallingCode(state) {\n var _extractCountryCallin = _extractCountryCallingCode('+' + state.getDigitsWithoutInternationalPrefix(), this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n\n if (countryCallingCode) {\n state.setCallingCode(countryCallingCode);\n state.update({\n nationalSignificantNumber: number\n });\n return true;\n }\n }\n }, {\n key: \"reset\",\n value: function reset(numberingPlan) {\n if (numberingPlan) {\n this.hasSelectedNumberingPlan = true;\n\n var nationalPrefixForParsing = numberingPlan._nationalPrefixForParsing();\n\n this.couldPossiblyExtractAnotherNationalSignificantNumber = nationalPrefixForParsing && COMPLEX_NATIONAL_PREFIX.test(nationalPrefixForParsing);\n } else {\n this.hasSelectedNumberingPlan = undefined;\n this.couldPossiblyExtractAnotherNationalSignificantNumber = undefined;\n }\n }\n /**\r\n * Extracts a national (significant) number from user input.\r\n * Google's library is different in that it only applies `national_prefix_for_parsing`\r\n * and doesn't apply `national_prefix_transform_rule` after that.\r\n * https://github.com/google/libphonenumber/blob/a3d70b0487875475e6ad659af404943211d26456/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L539\r\n * @return {boolean} [extracted]\r\n */\n\n }, {\n key: \"extractNationalSignificantNumber\",\n value: function extractNationalSignificantNumber(nationalDigits, setState) {\n if (!this.hasSelectedNumberingPlan) {\n return;\n }\n\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(nationalDigits, this.metadata),\n nationalPrefix = _extractNationalNumbe.nationalPrefix,\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode;\n\n if (nationalNumber === nationalDigits) {\n return;\n }\n\n this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n return true;\n }\n /**\r\n * In Google's code this function is called \"attempt to extract longer NDD\".\r\n * \"Some national prefixes are a substring of others\", they say.\r\n * @return {boolean} [result] — Returns `true` if extracting a national prefix produced different results from what they were.\r\n */\n\n }, {\n key: \"extractAnotherNationalSignificantNumber\",\n value: function extractAnotherNationalSignificantNumber(nationalDigits, prevNationalSignificantNumber, setState) {\n if (!this.hasExtractedNationalSignificantNumber) {\n return this.extractNationalSignificantNumber(nationalDigits, setState);\n }\n\n if (!this.couldPossiblyExtractAnotherNationalSignificantNumber) {\n return;\n }\n\n var _extractNationalNumbe2 = extractNationalNumberFromPossiblyIncompleteNumber(nationalDigits, this.metadata),\n nationalPrefix = _extractNationalNumbe2.nationalPrefix,\n nationalNumber = _extractNationalNumbe2.nationalNumber,\n carrierCode = _extractNationalNumbe2.carrierCode; // If a national prefix has been extracted previously,\n // then it's always extracted as additional digits are added.\n // That's assuming `extractNationalNumberFromPossiblyIncompleteNumber()`\n // doesn't do anything different from what it currently does.\n // So, just in case, here's this check, though it doesn't occur.\n\n /* istanbul ignore if */\n\n\n if (nationalNumber === prevNationalSignificantNumber) {\n return;\n }\n\n this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n return true;\n }\n }, {\n key: \"onExtractedNationalNumber\",\n value: function onExtractedNationalNumber(nationalPrefix, carrierCode, nationalSignificantNumber, nationalDigits, setState) {\n var complexPrefixBeforeNationalSignificantNumber;\n var nationalSignificantNumberMatchesInput; // This check also works with empty `this.nationalSignificantNumber`.\n\n var nationalSignificantNumberIndex = nationalDigits.lastIndexOf(nationalSignificantNumber); // If the extracted national (significant) number is the\n // last substring of the `digits`, then it means that it hasn't been altered:\n // no digits have been removed from the national (significant) number\n // while applying `national_prefix_transform_rule`.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n\n if (nationalSignificantNumberIndex >= 0 && nationalSignificantNumberIndex === nationalDigits.length - nationalSignificantNumber.length) {\n nationalSignificantNumberMatchesInput = true; // If a prefix of a national (significant) number is not as simple\n // as just a basic national prefix, then such prefix is stored in\n // `this.complexPrefixBeforeNationalSignificantNumber` property and will be\n // prepended \"as is\" to the national (significant) number to produce\n // a formatted result.\n\n var prefixBeforeNationalNumber = nationalDigits.slice(0, nationalSignificantNumberIndex); // `prefixBeforeNationalNumber` is always non-empty,\n // because `onExtractedNationalNumber()` isn't called\n // when a national (significant) number hasn't been actually \"extracted\":\n // when a national (significant) number is equal to the national part of `digits`,\n // then `onExtractedNationalNumber()` doesn't get called.\n\n if (prefixBeforeNationalNumber !== nationalPrefix) {\n complexPrefixBeforeNationalSignificantNumber = prefixBeforeNationalNumber;\n }\n }\n\n setState({\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode,\n nationalSignificantNumber: nationalSignificantNumber,\n nationalSignificantNumberMatchesInput: nationalSignificantNumberMatchesInput,\n complexPrefixBeforeNationalSignificantNumber: complexPrefixBeforeNationalSignificantNumber\n }); // `onExtractedNationalNumber()` is only called when\n // the national (significant) number actually did change.\n\n this.hasExtractedNationalSignificantNumber = true;\n this.onNationalSignificantNumberChange();\n }\n }, {\n key: \"reExtractNationalSignificantNumber\",\n value: function reExtractNationalSignificantNumber(state) {\n // Attempt to extract a national prefix.\n //\n // Some people incorrectly input national prefix\n // in an international phone number.\n // For example, some people write British phone numbers as `+44(0)...`.\n //\n // Also, in some rare cases, it is valid for a national prefix\n // to be a part of an international phone number.\n // For example, mobile phone numbers in Mexico are supposed to be\n // dialled internationally using a `1` national prefix,\n // so the national prefix will be part of an international number.\n //\n // Quote from:\n // https://www.mexperience.com/dialing-cell-phones-in-mexico/\n //\n // \"Dialing a Mexican cell phone from abroad\n // When you are calling a cell phone number in Mexico from outside Mexico,\n // it’s necessary to dial an additional “1” after Mexico’s country code\n // (which is “52”) and before the area code.\n // You also ignore the 045, and simply dial the area code and the\n // cell phone’s number.\n //\n // If you don’t add the “1”, you’ll receive a recorded announcement\n // asking you to redial using it.\n //\n // For example, if you are calling from the USA to a cell phone\n // in Mexico City, you would dial +52 – 1 – 55 – 1234 5678.\n // (Note that this is different to calling a land line in Mexico City\n // from abroad, where the number dialed would be +52 – 55 – 1234 5678)\".\n //\n // Google's demo output:\n // https://libphonenumber.appspot.com/phonenumberparser?number=%2b5215512345678&country=MX\n //\n if (this.extractAnotherNationalSignificantNumber(state.getNationalDigits(), state.nationalSignificantNumber, function (stateUpdate) {\n return state.update(stateUpdate);\n })) {\n return true;\n } // If no format matches the phone number, then it could be\n // \"a really long IDD\" (quote from a comment in Google's library).\n // An IDD prefix is first extracted when the user has entered at least 3 digits,\n // and then here — every time when there's a new digit and the number\n // couldn't be formatted.\n // For example, in Australia the default IDD prefix is `0011`,\n // and it could even be as long as `14880011`.\n //\n // Could also check `!hasReceivedThreeLeadingDigits` here\n // to filter out the case when this check duplicates the one\n // already performed when there're 3 leading digits,\n // but it's not a big deal, and in most cases there\n // will be a suitable `format` when there're 3 leading digits.\n //\n\n\n if (this.extractIddPrefix(state)) {\n this.extractCallingCodeAndNationalSignificantNumber(state);\n return true;\n } // Google's AsYouType formatter supports sort of an \"autocorrection\" feature\n // when it \"autocorrects\" numbers that have been input for a country\n // with that country's calling code.\n // Such \"autocorrection\" feature looks weird, but different people have been requesting it:\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n // https://github.com/catamphetamine/libphonenumber-js/issues/375\n // https://github.com/catamphetamine/libphonenumber-js/issues/316\n\n\n if (this.fixMissingPlus(state)) {\n this.extractCallingCodeAndNationalSignificantNumber(state);\n return true;\n }\n }\n }, {\n key: \"extractIddPrefix\",\n value: function extractIddPrefix(state) {\n // An IDD prefix can't be present in a number written with a `+`.\n // Also, don't re-extract an IDD prefix if has already been extracted.\n var international = state.international,\n IDDPrefix = state.IDDPrefix,\n digits = state.digits,\n nationalSignificantNumber = state.nationalSignificantNumber;\n\n if (international || IDDPrefix) {\n return;\n } // Some users input their phone number in \"out-of-country\"\n // dialing format instead of using the leading `+`.\n // https://github.com/catamphetamine/libphonenumber-js/issues/185\n // Detect such numbers.\n\n\n var numberWithoutIDD = stripIddPrefix(digits, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata);\n\n if (numberWithoutIDD !== undefined && numberWithoutIDD !== digits) {\n // If an IDD prefix was stripped then convert the IDD-prefixed number\n // to international number for subsequent parsing.\n state.update({\n IDDPrefix: digits.slice(0, digits.length - numberWithoutIDD.length)\n });\n this.startInternationalNumber(state, {\n country: undefined,\n callingCode: undefined\n });\n return true;\n }\n }\n }, {\n key: \"fixMissingPlus\",\n value: function fixMissingPlus(state) {\n if (!state.international) {\n var _extractCountryCallin2 = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(state.digits, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n newCallingCode = _extractCountryCallin2.countryCallingCode,\n number = _extractCountryCallin2.number;\n\n if (newCallingCode) {\n state.update({\n missingPlus: true\n });\n this.startInternationalNumber(state, {\n country: state.country,\n callingCode: newCallingCode\n });\n return true;\n }\n }\n }\n }, {\n key: \"startInternationalNumber\",\n value: function startInternationalNumber(state, _ref3) {\n var country = _ref3.country,\n callingCode = _ref3.callingCode;\n state.startInternationalNumber(country, callingCode); // If a national (significant) number has been extracted before, reset it.\n\n if (state.nationalSignificantNumber) {\n state.resetNationalSignificantNumber();\n this.onNationalSignificantNumberChange();\n this.hasExtractedNationalSignificantNumber = undefined;\n }\n }\n }, {\n key: \"extractCallingCodeAndNationalSignificantNumber\",\n value: function extractCallingCodeAndNationalSignificantNumber(state) {\n if (this.extractCountryCallingCode(state)) {\n // `this.extractCallingCode()` is currently called when the number\n // couldn't be formatted during the standard procedure.\n // Normally, the national prefix would be re-extracted\n // for an international number if such number couldn't be formatted,\n // but since it's already not able to be formatted,\n // there won't be yet another retry, so also extract national prefix here.\n this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {\n return state.update(stateUpdate);\n });\n }\n }\n }]);\n\n return AsYouTypeParser;\n}();\n/**\r\n * Extracts formatted phone number from text (if there's any).\r\n * @param {string} text\r\n * @return {string} [formattedPhoneNumber]\r\n */\n\n\nexport { AsYouTypeParser as default };\n\nfunction extractFormattedPhoneNumber(text) {\n // Attempt to extract a possible number from the string passed in.\n var startsAt = text.search(VALID_FORMATTED_PHONE_NUMBER_PART);\n\n if (startsAt < 0) {\n return;\n } // Trim everything to the left of the phone number.\n\n\n text = text.slice(startsAt); // Trim the `+`.\n\n var hasPlus;\n\n if (text[0] === '+') {\n hasPlus = true;\n text = text.slice('+'.length);\n } // Trim everything to the right of the phone number.\n\n\n text = text.replace(AFTER_PHONE_NUMBER_DIGITS_END_PATTERN, ''); // Re-add the previously trimmed `+`.\n\n if (hasPlus) {\n text = '+' + text;\n }\n\n return text;\n}\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\n\n\nfunction _extractFormattedDigitsAndPlus(text) {\n // Extract a formatted phone number part from text.\n var extractedNumber = extractFormattedPhoneNumber(text) || ''; // Trim a `+`.\n\n if (extractedNumber[0] === '+') {\n return [extractedNumber.slice('+'.length), true];\n }\n\n return [extractedNumber];\n}\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\n\n\nexport function extractFormattedDigitsAndPlus(text) {\n var _extractFormattedDigi3 = _extractFormattedDigitsAndPlus(text),\n _extractFormattedDigi4 = _slicedToArray(_extractFormattedDigi3, 2),\n formattedDigits = _extractFormattedDigi4[0],\n hasPlus = _extractFormattedDigi4[1]; // If the extracted phone number part\n // can possibly be a part of some valid phone number\n // then parse phone number characters from a formatted phone number.\n\n\n if (!VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN.test(formattedDigits)) {\n formattedDigits = '';\n }\n\n return [formattedDigits, hasPlus];\n}\n//# sourceMappingURL=AsYouTypeParser.js.map","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport Metadata from './metadata.js';\nimport PhoneNumber from './PhoneNumber.js';\nimport AsYouTypeState from './AsYouTypeState.js';\nimport AsYouTypeFormatter, { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.js';\nimport AsYouTypeParser, { extractFormattedDigitsAndPlus } from './AsYouTypeParser.js';\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\nvar AsYouType = /*#__PURE__*/function () {\n /**\r\n * @param {(string|object)?} [optionsOrDefaultCountry] - The default country used for parsing non-international phone numbers. Can also be an `options` object.\r\n * @param {Object} metadata\r\n */\n function AsYouType(optionsOrDefaultCountry, metadata) {\n _classCallCheck(this, AsYouType);\n\n this.metadata = new Metadata(metadata);\n\n var _this$getCountryAndCa = this.getCountryAndCallingCode(optionsOrDefaultCountry),\n _this$getCountryAndCa2 = _slicedToArray(_this$getCountryAndCa, 2),\n defaultCountry = _this$getCountryAndCa2[0],\n defaultCallingCode = _this$getCountryAndCa2[1];\n\n this.defaultCountry = defaultCountry;\n this.defaultCallingCode = defaultCallingCode;\n this.reset();\n }\n\n _createClass(AsYouType, [{\n key: \"getCountryAndCallingCode\",\n value: function getCountryAndCallingCode(optionsOrDefaultCountry) {\n // Set `defaultCountry` and `defaultCallingCode` options.\n var defaultCountry;\n var defaultCallingCode; // Turns out `null` also has type \"object\". Weird.\n\n if (optionsOrDefaultCountry) {\n if (_typeof(optionsOrDefaultCountry) === 'object') {\n defaultCountry = optionsOrDefaultCountry.defaultCountry;\n defaultCallingCode = optionsOrDefaultCountry.defaultCallingCode;\n } else {\n defaultCountry = optionsOrDefaultCountry;\n }\n }\n\n if (defaultCountry && !this.metadata.hasCountry(defaultCountry)) {\n defaultCountry = undefined;\n }\n\n if (defaultCallingCode) {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (this.metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n defaultCountry = '001';\n }\n }\n }\n\n return [defaultCountry, defaultCallingCode];\n }\n /**\r\n * Inputs \"next\" phone number characters.\r\n * @param {string} text\r\n * @return {string} Formatted phone number characters that have been input so far.\r\n */\n\n }, {\n key: \"input\",\n value: function input(text) {\n var _this$parser$input = this.parser.input(text, this.state),\n digits = _this$parser$input.digits,\n justLeadingPlus = _this$parser$input.justLeadingPlus;\n\n if (justLeadingPlus) {\n this.formattedOutput = '+';\n } else if (digits) {\n this.determineTheCountryIfNeeded(); // Match the available formats by the currently available leading digits.\n\n if (this.state.nationalSignificantNumber) {\n this.formatter.narrowDownMatchingFormats(this.state);\n }\n\n var formattedNationalNumber;\n\n if (this.metadata.hasSelectedNumberingPlan()) {\n formattedNationalNumber = this.formatter.format(digits, this.state);\n }\n\n if (formattedNationalNumber === undefined) {\n // See if another national (significant) number could be re-extracted.\n if (this.parser.reExtractNationalSignificantNumber(this.state)) {\n this.determineTheCountryIfNeeded(); // If it could, then re-try formatting the new national (significant) number.\n\n var nationalDigits = this.state.getNationalDigits();\n\n if (nationalDigits) {\n formattedNationalNumber = this.formatter.format(nationalDigits, this.state);\n }\n }\n }\n\n this.formattedOutput = formattedNationalNumber ? this.getFullNumber(formattedNationalNumber) : this.getNonFormattedNumber();\n }\n\n return this.formattedOutput;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n var _this = this;\n\n this.state = new AsYouTypeState({\n onCountryChange: function onCountryChange(country) {\n // Before version `1.6.0`, the official `AsYouType` formatter API\n // included the `.country` property of an `AsYouType` instance.\n // Since that property (along with the others) have been moved to\n // `this.state`, `this.country` property is emulated for compatibility\n // with the old versions.\n _this.country = country;\n },\n onCallingCodeChange: function onCallingCodeChange(callingCode, country) {\n _this.metadata.selectNumberingPlan(country, callingCode);\n\n _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n\n _this.parser.reset(_this.metadata.numberingPlan);\n }\n });\n this.formatter = new AsYouTypeFormatter({\n state: this.state,\n metadata: this.metadata\n });\n this.parser = new AsYouTypeParser({\n defaultCountry: this.defaultCountry,\n defaultCallingCode: this.defaultCallingCode,\n metadata: this.metadata,\n state: this.state,\n onNationalSignificantNumberChange: function onNationalSignificantNumberChange() {\n _this.determineTheCountryIfNeeded();\n\n _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n }\n });\n this.state.reset({\n country: this.defaultCountry,\n callingCode: this.defaultCallingCode\n });\n this.formattedOutput = '';\n return this;\n }\n /**\r\n * Returns `true` if the phone number is being input in international format.\r\n * In other words, returns `true` if and only if the parsed phone number starts with a `\"+\"`.\r\n * @return {boolean}\r\n */\n\n }, {\n key: \"isInternational\",\n value: function isInternational() {\n return this.state.international;\n }\n /**\r\n * Returns the \"calling code\" part of the phone number when it's being input\r\n * in an international format.\r\n * If no valid calling code has been entered so far, returns `undefined`.\r\n * @return {string} [callingCode]\r\n */\n\n }, {\n key: \"getCallingCode\",\n value: function getCallingCode() {\n // If the number is being input in national format and some \"default calling code\"\n // has been passed to `AsYouType` constructor, then `this.state.callingCode`\n // is equal to that \"default calling code\".\n //\n // If the number is being input in national format and no \"default calling code\"\n // has been passed to `AsYouType` constructor, then returns `undefined`,\n // even if a \"default country\" has been passed to `AsYouType` constructor.\n //\n if (this.isInternational()) {\n return this.state.callingCode;\n }\n } // A legacy alias.\n\n }, {\n key: \"getCountryCallingCode\",\n value: function getCountryCallingCode() {\n return this.getCallingCode();\n }\n /**\r\n * Returns a two-letter country code of the phone number.\r\n * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n * Returns `undefined` if no phone number has been input yet.\r\n * @return {string} [country]\r\n */\n\n }, {\n key: \"getCountry\",\n value: function getCountry() {\n var digits = this.state.digits; // Return `undefined` if no digits have been input yet.\n\n if (digits) {\n return this._getCountry();\n }\n }\n /**\r\n * Returns a two-letter country code of the phone number.\r\n * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n * @return {string} [country]\r\n */\n\n }, {\n key: \"_getCountry\",\n value: function _getCountry() {\n var country = this.state.country;\n /* istanbul ignore if */\n\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n // `AsYouType.getCountry()` returns `undefined`\n // for \"non-geographic\" phone numbering plans.\n if (country === '001') {\n return;\n }\n }\n\n return country;\n }\n }, {\n key: \"determineTheCountryIfNeeded\",\n value: function determineTheCountryIfNeeded() {\n // Suppose a user enters a phone number in international format,\n // and there're several countries corresponding to that country calling code,\n // and a country has been derived from the number, and then\n // a user enters one more digit and the number is no longer\n // valid for the derived country, so the country should be re-derived\n // on every new digit in those cases.\n //\n // If the phone number is being input in national format,\n // then it could be a case when `defaultCountry` wasn't specified\n // when creating `AsYouType` instance, and just `defaultCallingCode` was specified,\n // and that \"calling code\" could correspond to a \"non-geographic entity\",\n // or there could be several countries corresponding to that country calling code.\n // In those cases, `this.country` is `undefined` and should be derived\n // from the number. Again, if country calling code is ambiguous, then\n // `this.country` should be re-derived with each new digit.\n //\n if (!this.state.country || this.isCountryCallingCodeAmbiguous()) {\n this.determineTheCountry();\n }\n } // Prepends `+CountryCode ` in case of an international phone number\n\n }, {\n key: \"getFullNumber\",\n value: function getFullNumber(formattedNationalNumber) {\n var _this2 = this;\n\n if (this.isInternational()) {\n var prefix = function prefix(text) {\n return _this2.formatter.getInternationalPrefixBeforeCountryCallingCode(_this2.state, {\n spacing: text ? true : false\n }) + text;\n };\n\n var callingCode = this.state.callingCode;\n\n if (!callingCode) {\n return prefix(\"\".concat(this.state.getDigitsWithoutInternationalPrefix()));\n }\n\n if (!formattedNationalNumber) {\n return prefix(callingCode);\n }\n\n return prefix(\"\".concat(callingCode, \" \").concat(formattedNationalNumber));\n }\n\n return formattedNationalNumber;\n }\n }, {\n key: \"getNonFormattedNationalNumberWithPrefix\",\n value: function getNonFormattedNationalNumberWithPrefix() {\n var _this$state = this.state,\n nationalSignificantNumber = _this$state.nationalSignificantNumber,\n complexPrefixBeforeNationalSignificantNumber = _this$state.complexPrefixBeforeNationalSignificantNumber,\n nationalPrefix = _this$state.nationalPrefix;\n var number = nationalSignificantNumber;\n var prefix = complexPrefixBeforeNationalSignificantNumber || nationalPrefix;\n\n if (prefix) {\n number = prefix + number;\n }\n\n return number;\n }\n }, {\n key: \"getNonFormattedNumber\",\n value: function getNonFormattedNumber() {\n var nationalSignificantNumberMatchesInput = this.state.nationalSignificantNumberMatchesInput;\n return this.getFullNumber(nationalSignificantNumberMatchesInput ? this.getNonFormattedNationalNumberWithPrefix() : this.state.getNationalDigits());\n }\n }, {\n key: \"getNonFormattedTemplate\",\n value: function getNonFormattedTemplate() {\n var number = this.getNonFormattedNumber();\n\n if (number) {\n return number.replace(/[\\+\\d]/g, DIGIT_PLACEHOLDER);\n }\n }\n }, {\n key: \"isCountryCallingCodeAmbiguous\",\n value: function isCountryCallingCodeAmbiguous() {\n var callingCode = this.state.callingCode;\n var countryCodes = this.metadata.getCountryCodesForCallingCode(callingCode);\n return countryCodes && countryCodes.length > 1;\n } // Determines the country of the phone number\n // entered so far based on the country phone code\n // and the national phone number.\n\n }, {\n key: \"determineTheCountry\",\n value: function determineTheCountry() {\n this.state.setCountry(getCountryByCallingCode(this.isInternational() ? this.state.callingCode : this.defaultCallingCode, this.state.nationalSignificantNumber, this.metadata));\n }\n /**\r\n * Returns a E.164 phone number value for the user's input.\r\n *\r\n * For example, for country `\"US\"` and input `\"(222) 333-4444\"`\r\n * it will return `\"+12223334444\"`.\r\n *\r\n * For international phone number input, it will also auto-correct\r\n * some minor errors such as using a national prefix when writing\r\n * an international phone number. For example, if the user inputs\r\n * `\"+44 0 7400 000000\"` then it will return an auto-corrected\r\n * `\"+447400000000\"` phone number value.\r\n *\r\n * Will return `undefined` if no digits have been input,\r\n * or when inputting a phone number in national format and no\r\n * default country or default \"country calling code\" have been set.\r\n *\r\n * @return {string} [value]\r\n */\n\n }, {\n key: \"getNumberValue\",\n value: function getNumberValue() {\n var _this$state2 = this.state,\n digits = _this$state2.digits,\n callingCode = _this$state2.callingCode,\n country = _this$state2.country,\n nationalSignificantNumber = _this$state2.nationalSignificantNumber; // Will return `undefined` if no digits have been input.\n\n if (!digits) {\n return;\n }\n\n if (this.isInternational()) {\n if (callingCode) {\n return '+' + callingCode + nationalSignificantNumber;\n } else {\n return '+' + digits;\n }\n } else {\n if (country || callingCode) {\n var callingCode_ = country ? this.metadata.countryCallingCode() : callingCode;\n return '+' + callingCode_ + nationalSignificantNumber;\n }\n }\n }\n /**\r\n * Returns an instance of `PhoneNumber` class.\r\n * Will return `undefined` if no national (significant) number\r\n * digits have been entered so far, or if no `defaultCountry` has been\r\n * set and the user enters a phone number not in international format.\r\n */\n\n }, {\n key: \"getNumber\",\n value: function getNumber() {\n var _this$state3 = this.state,\n nationalSignificantNumber = _this$state3.nationalSignificantNumber,\n carrierCode = _this$state3.carrierCode,\n callingCode = _this$state3.callingCode; // `this._getCountry()` is basically same as `this.state.country`\n // with the only change that it return `undefined` in case of a\n // \"non-geographic\" numbering plan instead of `\"001\"` \"internal use\" value.\n\n var country = this._getCountry();\n\n if (!nationalSignificantNumber) {\n return;\n }\n\n if (!country && !callingCode) {\n return;\n }\n\n var phoneNumber = new PhoneNumber(country || callingCode, nationalSignificantNumber, this.metadata.metadata);\n\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n } // Phone number extensions are not supported by \"As You Type\" formatter.\n\n\n return phoneNumber;\n }\n /**\r\n * Returns `true` if the phone number is \"possible\".\r\n * Is just a shortcut for `PhoneNumber.isPossible()`.\r\n * @return {boolean}\r\n */\n\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n var phoneNumber = this.getNumber();\n\n if (!phoneNumber) {\n return false;\n }\n\n return phoneNumber.isPossible();\n }\n /**\r\n * Returns `true` if the phone number is \"valid\".\r\n * Is just a shortcut for `PhoneNumber.isValid()`.\r\n * @return {boolean}\r\n */\n\n }, {\n key: \"isValid\",\n value: function isValid() {\n var phoneNumber = this.getNumber();\n\n if (!phoneNumber) {\n return false;\n }\n\n return phoneNumber.isValid();\n }\n /**\r\n * @deprecated\r\n * This method is used in `react-phone-number-input/source/input-control.js`\r\n * in versions before `3.0.16`.\r\n */\n\n }, {\n key: \"getNationalNumber\",\n value: function getNationalNumber() {\n return this.state.nationalSignificantNumber;\n }\n /**\r\n * Returns the phone number characters entered by the user.\r\n * @return {string}\r\n */\n\n }, {\n key: \"getChars\",\n value: function getChars() {\n return (this.state.international ? '+' : '') + this.state.digits;\n }\n /**\r\n * Returns the template for the formatted phone number.\r\n * @return {string}\r\n */\n\n }, {\n key: \"getTemplate\",\n value: function getTemplate() {\n return this.formatter.getTemplate(this.state) || this.getNonFormattedTemplate() || '';\n }\n }]);\n\n return AsYouType;\n}();\n\nexport { AsYouType as default };\n//# sourceMappingURL=AsYouType.js.map","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.mobile.json.js'\r\n\r\nimport { AsYouType as _AsYouType } from '../../core/index.js'\r\n\r\nexport function AsYouType(country) {\r\n\treturn _AsYouType.call(this, country, metadata)\r\n}\r\n\r\nAsYouType.prototype = Object.create(_AsYouType.prototype, {})\r\nAsYouType.prototype.constructor = AsYouType","import PhoneNumber from './PhoneNumber.js';\nexport default function getExampleNumber(country, examples, metadata) {\n if (examples[country]) {\n return new PhoneNumber(country, examples[country], metadata);\n }\n}\n//# sourceMappingURL=getExampleNumber.js.map","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { getExampleNumber as _getExampleNumber } from '../../core/index.js'\r\n\r\nexport function getExampleNumber() {\r\n\treturn withMetadataArgument(_getExampleNumber, arguments)\r\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// https://stackoverflow.com/a/46971044/970769\n// \"Breaking changes in Typescript 2.1\"\n// \"Extending built-ins like Error, Array, and Map may no longer work.\"\n// \"As a recommendation, you can manually adjust the prototype immediately after any super(...) calls.\"\n// https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nvar ParseError = /*#__PURE__*/function (_Error) {\n _inherits(ParseError, _Error);\n\n var _super = _createSuper(ParseError);\n\n function ParseError(code) {\n var _this;\n\n _classCallCheck(this, ParseError);\n\n _this = _super.call(this, code); // Set the prototype explicitly.\n // Any subclass of FooError will have to manually set the prototype as well.\n\n Object.setPrototypeOf(_assertThisInitialized(_this), ParseError.prototype);\n _this.name = _this.constructor.name;\n return _this;\n }\n\n return _createClass(ParseError);\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nexport { ParseError as default };\n//# sourceMappingURL=ParseError.js.map","import { VALID_DIGITS } from '../../constants.js'; // The RFC 3966 format for extensions.\n\nvar RFC3966_EXTN_PREFIX = ';ext=';\n/**\r\n * Helper method for constructing regular expressions for parsing. Creates\r\n * an expression that captures up to max_length digits.\r\n * @return {string} RegEx pattern to capture extension digits.\r\n */\n\nvar getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) {\n return \"([\".concat(VALID_DIGITS, \"]{1,\").concat(maxLength, \"})\");\n};\n/**\r\n * Helper initialiser method to create the regular-expression pattern to match\r\n * extensions.\r\n * Copy-pasted from Google's `libphonenumber`:\r\n * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766\r\n * @return {string} RegEx pattern to capture extensions.\r\n */\n\n\nexport default function createExtensionPattern(purpose) {\n // We cap the maximum length of an extension based on the ambiguity of the way\n // the extension is prefixed. As per ITU, the officially allowed length for\n // extensions is actually 40, but we don't support this since we haven't seen real\n // examples and this introduces many false interpretations as the extension labels\n // are not standardized.\n\n /** @type {string} */\n var extLimitAfterExplicitLabel = '20';\n /** @type {string} */\n\n var extLimitAfterLikelyLabel = '15';\n /** @type {string} */\n\n var extLimitAfterAmbiguousChar = '9';\n /** @type {string} */\n\n var extLimitWhenNotSure = '6';\n /** @type {string} */\n\n var possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\xA0\\\\t,]*\"; // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\n\n /** @type {string} */\n\n var possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\";\n /** @type {string} */\n\n var optionalExtnSuffix = \"#?\"; // Here the extension is called out in more explicit way, i.e mentioning it obvious\n // patterns like \"ext.\".\n\n /** @type {string} */\n\n var explicitExtLabels = \"(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\"; // One-character symbols that can be used to indicate an extension, and less\n // commonly used or more ambiguous extension labels.\n\n /** @type {string} */\n\n var ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\"; // When extension is not separated clearly.\n\n /** @type {string} */\n\n var ambiguousSeparator = \"[- ]+\"; // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\n // comma as extension label may have it.\n\n /** @type {string} */\n\n var possibleSeparatorsNumberExtLabelNoComma = \"[ \\xA0\\\\t]*\"; // \",,\" is commonly used for auto dialling the extension when connected. First\n // comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do\n // not repeat it here. Semi-colon works in Iphone and Android also to pop up a\n // button with the extension number following.\n\n /** @type {string} */\n\n var autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\n /** @type {string} */\n\n var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\n /** @type {string} */\n\n var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix;\n /** @type {string} */\n\n var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n /** @type {string} */\n\n var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\n /** @type {string} */\n\n var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix;\n /** @type {string} */\n\n var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + \"(?:,)+\" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix; // The first regular expression covers RFC 3966 format, where the extension is added\n // using \";ext=\". The second more generic where extension is mentioned with explicit\n // labels like \"ext:\". In both the above cases we allow more numbers in extension than\n // any other extension labels. The third one captures when single character extension\n // labels or less commonly used labels are used. In such cases we capture fewer\n // extension digits in order to reduce the chance of falsely interpreting two\n // numbers beside each other as a number + extension. The fourth one covers the\n // special case of American numbers where the extension is written with a hash\n // at the end, such as \"- 503#\". The fifth one is exclusively for extension\n // autodialling formats which are used when dialling and in this case we accept longer\n // extensions. The last one is more liberal on the number of commas that acts as\n // extension labels, so we have a strict cap on the number of digits in such extensions.\n\n return rfcExtn + \"|\" + explicitExtn + \"|\" + ambiguousExtn + \"|\" + americanStyleExtnWithSuffix + \"|\" + autoDiallingExtn + \"|\" + onlyCommasExtn;\n}\n//# sourceMappingURL=createExtensionPattern.js.map","import { MIN_LENGTH_FOR_NSN, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from '../constants.js';\nimport createExtensionPattern from './extension/createExtensionPattern.js'; // Regular expression of viable phone numbers. This is location independent.\n// Checks we have at least three leading digits, and only valid punctuation,\n// alpha characters and digits in the phone number. Does not include extension\n// data. The symbol 'x' is allowed here as valid punctuation since it is often\n// used as a placeholder for carrier codes, for example in Brazilian phone\n// numbers. We also allow multiple '+' characters at the start.\n//\n// Corresponds to the following:\n// [digits]{minLengthNsn}|\n// plus_sign*\n// (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n// The first reg-ex is to allow short numbers (two digits long) to be parsed if\n// they are entered as \"15\" etc, but only if there is no punctuation in them.\n// The second expression restricts the number of digits to three or more, but\n// then allows them to be in international form, and to have alpha-characters\n// and punctuation. We split up the two reg-exes here and combine them when\n// creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n// with ^ and append $ to each branch.\n//\n// \"Note VALID_PUNCTUATION starts with a -,\n// so must be the first in the range\" (c) Google devs.\n// (wtf did they mean by saying that; probably nothing)\n//\n\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}'; //\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\n\nexport var VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*'; // This regular expression isn't present in Google's `libphonenumber`\n// and is only used to determine whether the phone number being input\n// is too short for it to even consider it a \"valid\" number.\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\n\nvar VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){1,2}' + '$', 'i');\nexport var VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER + // Phone number extensions\n'(?:' + createExtensionPattern() + ')?'; // The combined regular expression for valid phone numbers:\n//\n\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp( // Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' + // Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i'); // Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\n\nexport default function isViablePhoneNumber(number) {\n return number.length >= MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number);\n} // This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\n\nexport function isViablePhoneNumberStart(number) {\n return VALID_PHONE_NUMBER_START_REG_EXP.test(number);\n}\n//# sourceMappingURL=isViablePhoneNumber.js.map","import createExtensionPattern from './createExtensionPattern.js'; // Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\n\nvar EXTN_PATTERN = new RegExp('(?:' + createExtensionPattern() + ')$', 'i'); // Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\n\nexport default function extractExtension(number) {\n var start = number.search(EXTN_PATTERN);\n\n if (start < 0) {\n return {};\n } // If we find a potential extension, and the number preceding this is a viable\n // number, we assume it is an extension.\n\n\n var numberWithoutExtension = number.slice(0, start);\n var matches = number.match(EXTN_PATTERN);\n var i = 1;\n\n while (i < matches.length) {\n if (matches[i]) {\n return {\n number: numberWithoutExtension,\n ext: matches[i]\n };\n }\n\n i++;\n }\n}\n//# sourceMappingURL=extractExtension.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { parseDigit } from './helpers/parseDigits.js';\n/**\r\n * Parses phone number characters from a string.\r\n * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * // Outputs '8800555'.\r\n * parseIncompletePhoneNumber('8 (800) 555')\r\n * // Outputs '+7800555'.\r\n * parseIncompletePhoneNumber('+7 800 555')\r\n * ```\r\n */\n\nexport default function parseIncompletePhoneNumber(string) {\n var result = ''; // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n result += parsePhoneNumberCharacter(character, result) || '';\n }\n\n return result;\n}\n/**\r\n * Parses next character while parsing phone number digits (including a `+`)\r\n * from text: discards everything except `+` and digits, and `+` is only allowed\r\n * at the start of a phone number.\r\n * For example, is used in `react-phone-number-input` where it uses\r\n * [`input-format`](https://gitlab.com/catamphetamine/input-format).\r\n * @param {string} character - Yet another character from raw input string.\r\n * @param {string?} prevParsedCharacters - Previous parsed characters.\r\n * @param {object} meta - Optional custom use-case-specific metadata.\r\n * @return {string?} The parsed character.\r\n */\n\nexport function parsePhoneNumberCharacter(character, prevParsedCharacters) {\n // Only allow a leading `+`.\n if (character === '+') {\n // If this `+` is not the first parsed character\n // then discard it.\n if (prevParsedCharacters) {\n return;\n }\n\n return '+';\n } // Allow digits.\n\n\n return parseDigit(character);\n}\n//# sourceMappingURL=parseIncompletePhoneNumber.js.map","// When phone numbers are written in `RFC3966` format — `\"tel:+12133734253\"` —\n// they can have their \"calling code\" part written separately in a `phone-context` parameter.\n// Example: `\"tel:12133734253;phone-context=+1\"`.\n// This function parses the full phone number from the local number and the `phone-context`\n// when the `phone-context` contains a `+` sign.\nimport { VALID_DIGITS // PLUS_CHARS\n} from '../constants.js';\nexport var PLUS_SIGN = '+';\nvar RFC3966_VISUAL_SEPARATOR_ = '[\\\\-\\\\.\\\\(\\\\)]?';\nvar RFC3966_PHONE_DIGIT_ = '(' + '[' + VALID_DIGITS + ']' + '|' + RFC3966_VISUAL_SEPARATOR_ + ')';\nvar RFC3966_GLOBAL_NUMBER_DIGITS_ = '^' + '\\\\' + PLUS_SIGN + RFC3966_PHONE_DIGIT_ + '*' + '[' + VALID_DIGITS + ']' + RFC3966_PHONE_DIGIT_ + '*' + '$';\n/**\r\n * Regular expression of valid global-number-digits for the phone-context\r\n * parameter, following the syntax defined in RFC3966.\r\n */\n\nvar RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_ = new RegExp(RFC3966_GLOBAL_NUMBER_DIGITS_, 'g'); // In this port of Google's library, we don't accept alpha characters in phone numbers.\n// const ALPHANUM_ = VALID_ALPHA_ + VALID_DIGITS\n\nvar ALPHANUM_ = VALID_DIGITS;\nvar RFC3966_DOMAINLABEL_ = '[' + ALPHANUM_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar VALID_ALPHA_ = 'a-zA-Z';\nvar RFC3966_TOPLABEL_ = '[' + VALID_ALPHA_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar RFC3966_DOMAINNAME_ = '^(' + RFC3966_DOMAINLABEL_ + '\\\\.)*' + RFC3966_TOPLABEL_ + '\\\\.?$';\n/**\r\n * Regular expression of valid domainname for the phone-context parameter,\r\n * following the syntax defined in RFC3966.\r\n */\n\nvar RFC3966_DOMAINNAME_PATTERN_ = new RegExp(RFC3966_DOMAINNAME_, 'g');\nexport var RFC3966_PREFIX_ = 'tel:';\nexport var RFC3966_PHONE_CONTEXT_ = ';phone-context=';\nexport var RFC3966_ISDN_SUBADDRESS_ = ';isub=';\n/**\r\n * Extracts the value of the phone-context parameter of `numberToExtractFrom`,\r\n * following the syntax defined in RFC3966.\r\n *\r\n * @param {string} numberToExtractFrom\r\n * @return {string|null} the extracted string (possibly empty), or `null` if no phone-context parameter is found.\r\n */\n\nexport default function extractPhoneContext(numberToExtractFrom) {\n var indexOfPhoneContext = numberToExtractFrom.indexOf(RFC3966_PHONE_CONTEXT_); // If no phone-context parameter is present\n\n if (indexOfPhoneContext < 0) {\n return null;\n }\n\n var phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT_.length; // If phone-context parameter is empty\n\n if (phoneContextStart >= numberToExtractFrom.length) {\n return '';\n }\n\n var phoneContextEnd = numberToExtractFrom.indexOf(';', phoneContextStart); // If phone-context is not the last parameter\n\n if (phoneContextEnd >= 0) {\n return numberToExtractFrom.substring(phoneContextStart, phoneContextEnd);\n } else {\n return numberToExtractFrom.substring(phoneContextStart);\n }\n}\n/**\r\n * Returns whether the value of phoneContext follows the syntax defined in RFC3966.\r\n *\r\n * @param {string|null} phoneContext\r\n * @return {boolean}\r\n */\n\nexport function isPhoneContextValid(phoneContext) {\n if (phoneContext === null) {\n return true;\n }\n\n if (phoneContext.length === 0) {\n return false;\n } // Does phone-context value match pattern of global-number-digits or domainname.\n\n\n return RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.test(phoneContext) || RFC3966_DOMAINNAME_PATTERN_.test(phoneContext);\n}\n//# sourceMappingURL=extractPhoneContext.js.map","import extractPhoneContext, { isPhoneContextValid, PLUS_SIGN, RFC3966_PREFIX_, RFC3966_PHONE_CONTEXT_, RFC3966_ISDN_SUBADDRESS_ } from './extractPhoneContext.js';\nimport ParseError from '../ParseError.js';\n/**\r\n * @param {string} numberToParse\r\n * @param {string} nationalNumber\r\n * @return {}\r\n */\n\nexport default function extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(numberToParse, _ref) {\n var extractFormattedPhoneNumber = _ref.extractFormattedPhoneNumber;\n var phoneContext = extractPhoneContext(numberToParse);\n\n if (!isPhoneContextValid(phoneContext)) {\n throw new ParseError('NOT_A_NUMBER');\n }\n\n var phoneNumberString;\n\n if (phoneContext === null) {\n // Extract a possible number from the string passed in.\n // (this strips leading characters that could not be the start of a phone number)\n phoneNumberString = extractFormattedPhoneNumber(numberToParse) || '';\n } else {\n phoneNumberString = ''; // If the phone context contains a phone number prefix, we need to capture\n // it, whereas domains will be ignored.\n\n if (phoneContext.charAt(0) === PLUS_SIGN) {\n phoneNumberString += phoneContext;\n } // Now append everything between the \"tel:\" prefix and the phone-context.\n // This should include the national number, an optional extension or\n // isdn-subaddress component. Note we also handle the case when \"tel:\" is\n // missing, as we have seen in some of the phone number inputs.\n // In that case, we append everything from the beginning.\n\n\n var indexOfRfc3966Prefix = numberToParse.indexOf(RFC3966_PREFIX_);\n var indexOfNationalNumber; // RFC 3966 \"tel:\" prefix is preset at this stage because\n // `isPhoneContextValid()` requires it to be present.\n\n /* istanbul ignore else */\n\n if (indexOfRfc3966Prefix >= 0) {\n indexOfNationalNumber = indexOfRfc3966Prefix + RFC3966_PREFIX_.length;\n } else {\n indexOfNationalNumber = 0;\n }\n\n var indexOfPhoneContext = numberToParse.indexOf(RFC3966_PHONE_CONTEXT_);\n phoneNumberString += numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext);\n } // Delete the isdn-subaddress and everything after it if it is present.\n // Note extension won't appear at the same time with isdn-subaddress\n // according to paragraph 5.3 of the RFC3966 spec.\n\n\n var indexOfIsdn = phoneNumberString.indexOf(RFC3966_ISDN_SUBADDRESS_);\n\n if (indexOfIsdn > 0) {\n phoneNumberString = phoneNumberString.substring(0, indexOfIsdn);\n } // If both phone context and isdn-subaddress are absent but other\n // parameters are present, the parameters are left in nationalNumber.\n // This is because we are concerned about deleting content from a potential\n // number string when there is no strong evidence that the number is\n // actually written in RFC3966.\n\n\n if (phoneNumberString !== '') {\n return phoneNumberString;\n }\n}\n//# sourceMappingURL=extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\nimport { VALID_DIGITS, PLUS_CHARS, MIN_LENGTH_FOR_NSN, MAX_LENGTH_FOR_NSN } from './constants.js';\nimport ParseError from './ParseError.js';\nimport Metadata from './metadata.js';\nimport isViablePhoneNumber, { isViablePhoneNumberStart } from './helpers/isViablePhoneNumber.js';\nimport extractExtension from './helpers/extension/extractExtension.js';\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber.js';\nimport getCountryCallingCode from './getCountryCallingCode.js';\nimport { isPossibleNumber } from './isPossible.js'; // import { parseRFC3966 } from './helpers/RFC3966.js'\n\nimport PhoneNumber from './PhoneNumber.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractNationalNumber from './helpers/extractNationalNumber.js';\nimport stripIddPrefix from './helpers/stripIddPrefix.js';\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport extractFormattedPhoneNumberFromPossibleRfc3966NumberUri from './helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js'; // We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\n\nvar MAX_INPUT_STRING_LENGTH = 250; // This consists of the plus symbol, digits, and arabic-indic digits.\n\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']'); // Regular expression of trailing characters that we want to remove.\n// A trailing `#` is sometimes used when writing phone numbers with extensions in US.\n// Example: \"+1 (645) 123 1234-910#\" number has extension \"910\".\n\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + '#' + ']+$');\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false; // Examples:\n//\n// ```js\n// parse('8 (800) 555-35-35', 'RU')\n// parse('8 (800) 555-35-35', 'RU', metadata)\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n// parse('+7 800 555 35 35')\n// parse('+7 800 555 35 35', metadata)\n// ```\n//\n\n/**\r\n * Parses a phone number.\r\n *\r\n * parse('123456789', { defaultCountry: 'RU', v2: true }, metadata)\r\n * parse('123456789', { defaultCountry: 'RU' }, metadata)\r\n * parse('123456789', undefined, metadata)\r\n *\r\n * @param {string} input\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {object|PhoneNumber?} If `options.v2: true` flag is passed, it returns a `PhoneNumber?` instance. Otherwise, returns an object of shape `{ phone: '...', country: '...' }` (or just `{}` if no phone number was parsed).\r\n */\n\nexport default function parse(text, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata); // Validate `defaultCountry`.\n\n if (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n\n throw new Error(\"Unknown country: \".concat(options.defaultCountry));\n } // Parse the phone number.\n\n\n var _parseInput = parseInput(text, options.v2, options.extract),\n formattedPhoneNumber = _parseInput.number,\n ext = _parseInput.ext,\n error = _parseInput.error; // If the phone number is not viable then return nothing.\n\n\n if (!formattedPhoneNumber) {\n if (options.v2) {\n if (error === 'TOO_SHORT') {\n throw new ParseError('TOO_SHORT');\n }\n\n throw new ParseError('NOT_A_NUMBER');\n }\n\n return {};\n }\n\n var _parsePhoneNumber = parsePhoneNumber(formattedPhoneNumber, options.defaultCountry, options.defaultCallingCode, metadata),\n country = _parsePhoneNumber.country,\n nationalNumber = _parsePhoneNumber.nationalNumber,\n countryCallingCode = _parsePhoneNumber.countryCallingCode,\n countryCallingCodeSource = _parsePhoneNumber.countryCallingCodeSource,\n carrierCode = _parsePhoneNumber.carrierCode;\n\n if (!metadata.hasSelectedNumberingPlan()) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n\n return {};\n } // Validate national (significant) number length.\n\n\n if (!nationalNumber || nationalNumber.length < MIN_LENGTH_FOR_NSN) {\n // Won't throw here because the regexp already demands length > 1.\n\n /* istanbul ignore if */\n if (options.v2) {\n throw new ParseError('TOO_SHORT');\n } // Google's demo just throws an error in this case.\n\n\n return {};\n } // Validate national (significant) number length.\n //\n // A sidenote:\n //\n // They say that sometimes national (significant) numbers\n // can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n // https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n // Such numbers will just be discarded.\n //\n\n\n if (nationalNumber.length > MAX_LENGTH_FOR_NSN) {\n if (options.v2) {\n throw new ParseError('TOO_LONG');\n } // Google's demo just throws an error in this case.\n\n\n return {};\n }\n\n if (options.v2) {\n var phoneNumber = new PhoneNumber(countryCallingCode, nationalNumber, metadata.metadata);\n\n if (country) {\n phoneNumber.country = country;\n }\n\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n }\n\n if (ext) {\n phoneNumber.ext = ext;\n }\n\n phoneNumber.__countryCallingCodeSource = countryCallingCodeSource;\n return phoneNumber;\n } // Check if national phone number pattern matches the number.\n // National number pattern is different for each country,\n // even for those ones which are part of the \"NANPA\" group.\n\n\n var valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ? matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) : false;\n\n if (!options.extended) {\n return valid ? result(country, nationalNumber, ext) : {};\n } // isInternational: countryCallingCode !== undefined\n\n\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n carrierCode: carrierCode,\n valid: valid,\n possible: valid ? true : options.extended === true && metadata.possibleLengths() && isPossibleNumber(nationalNumber, metadata) ? true : false,\n phone: nationalNumber,\n ext: ext\n };\n}\n/**\r\n * Extracts a formatted phone number from text.\r\n * Doesn't guarantee that the extracted phone number\r\n * is a valid phone number (for example, doesn't validate its length).\r\n * @param {string} text\r\n * @param {boolean} [extract] — If `false`, then will parse the entire `text` as a phone number.\r\n * @param {boolean} [throwOnError] — By default, it won't throw if the text is too long.\r\n * @return {string}\r\n * @example\r\n * // Returns \"(213) 373-4253\".\r\n * extractFormattedPhoneNumber(\"Call (213) 373-4253 for assistance.\")\r\n */\n\nfunction _extractFormattedPhoneNumber(text, extract, throwOnError) {\n if (!text) {\n return;\n }\n\n if (text.length > MAX_INPUT_STRING_LENGTH) {\n if (throwOnError) {\n throw new ParseError('TOO_LONG');\n }\n\n return;\n }\n\n if (extract === false) {\n return text;\n } // Attempt to extract a possible number from the string passed in\n\n\n var startsAt = text.search(PHONE_NUMBER_START_PATTERN);\n\n if (startsAt < 0) {\n return;\n }\n\n return text // Trim everything to the left of the phone number\n .slice(startsAt) // Remove trailing non-numerical characters\n .replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n/**\r\n * @param {string} text - Input.\r\n * @param {boolean} v2 - Legacy API functions don't pass `v2: true` flag.\r\n * @param {boolean} [extract] - Whether to extract a phone number from `text`, or attempt to parse the entire text as a phone number.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\n\n\nfunction parseInput(text, v2, extract) {\n // // Parse RFC 3966 phone number URI.\n // if (text && text.indexOf('tel:') === 0) {\n // \treturn parseRFC3966(text)\n // }\n // let number = extractFormattedPhoneNumber(text, extract, v2)\n var number = extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(text, {\n extractFormattedPhoneNumber: function extractFormattedPhoneNumber(text) {\n return _extractFormattedPhoneNumber(text, extract, v2);\n }\n }); // If the phone number is not viable, then abort.\n\n if (!number) {\n return {};\n }\n\n if (!isViablePhoneNumber(number)) {\n if (isViablePhoneNumberStart(number)) {\n return {\n error: 'TOO_SHORT'\n };\n }\n\n return {};\n } // Attempt to parse extension first, since it doesn't require region-specific\n // data and we want to have the non-normalised number here.\n\n\n var withExtensionStripped = extractExtension(number);\n\n if (withExtensionStripped.ext) {\n return withExtensionStripped;\n }\n\n return {\n number: number\n };\n}\n/**\r\n * Creates `parse()` result object.\r\n */\n\n\nfunction result(country, nationalNumber, ext) {\n var result = {\n country: country,\n phone: nationalNumber\n };\n\n if (ext) {\n result.ext = ext;\n }\n\n return result;\n}\n/**\r\n * Parses a viable phone number.\r\n * @param {string} formattedPhoneNumber — Example: \"(213) 373-4253\".\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {Metadata} metadata\r\n * @return {object} Returns `{ country: string?, countryCallingCode: string?, nationalNumber: string? }`.\r\n */\n\n\nfunction parsePhoneNumber(formattedPhoneNumber, defaultCountry, defaultCallingCode, metadata) {\n // Extract calling code from phone number.\n var _extractCountryCallin = extractCountryCallingCode(parseIncompletePhoneNumber(formattedPhoneNumber), defaultCountry, defaultCallingCode, metadata.metadata),\n countryCallingCodeSource = _extractCountryCallin.countryCallingCodeSource,\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number; // Choose a country by `countryCallingCode`.\n\n\n var country;\n\n if (countryCallingCode) {\n metadata.selectNumberingPlan(countryCallingCode);\n } // If `formattedPhoneNumber` is passed in \"national\" format\n // then `number` is defined and `countryCallingCode` is `undefined`.\n else if (number && (defaultCountry || defaultCallingCode)) {\n metadata.selectNumberingPlan(defaultCountry, defaultCallingCode);\n\n if (defaultCountry) {\n country = defaultCountry;\n } else {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n country = '001';\n }\n }\n }\n\n countryCallingCode = defaultCallingCode || getCountryCallingCode(defaultCountry, metadata.metadata);\n } else return {};\n\n if (!number) {\n return {\n countryCallingCodeSource: countryCallingCodeSource,\n countryCallingCode: countryCallingCode\n };\n }\n\n var _extractNationalNumbe = extractNationalNumber(parseIncompletePhoneNumber(number), metadata),\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode; // Sometimes there are several countries\n // corresponding to the same country phone code\n // (e.g. NANPA countries all having `1` country phone code).\n // Therefore, to reliably determine the exact country,\n // national (significant) number should have been parsed first.\n //\n // When `metadata.json` is generated, all \"ambiguous\" country phone codes\n // get their countries populated with the full set of\n // \"phone number type\" regular expressions.\n //\n\n\n var exactCountry = getCountryByCallingCode(countryCallingCode, nationalNumber, metadata);\n\n if (exactCountry) {\n country = exactCountry;\n /* istanbul ignore if */\n\n if (exactCountry === '001') {// Can't happen with `USE_NON_GEOGRAPHIC_COUNTRY_CODE` being `false`.\n // If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` is set to `true` for some reason,\n // then remove the \"istanbul ignore if\".\n } else {\n metadata.country(country);\n }\n }\n\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n countryCallingCodeSource: countryCallingCodeSource,\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n//# sourceMappingURL=parse.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport parse from './parse.js';\nexport default function parsePhoneNumberWithError(text, options, metadata) {\n return parse(text, _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }), metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError_.js.map","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n// Extracts the following properties from function arguments:\n// * input `text`\n// * `options` object\n// * `metadata` JSON\nexport default function normalizeArguments(args) {\n var _Array$prototype$slic = Array.prototype.slice.call(args),\n _Array$prototype$slic2 = _slicedToArray(_Array$prototype$slic, 4),\n arg_1 = _Array$prototype$slic2[0],\n arg_2 = _Array$prototype$slic2[1],\n arg_3 = _Array$prototype$slic2[2],\n arg_4 = _Array$prototype$slic2[3];\n\n var text;\n var options;\n var metadata; // If the phone number is passed as a string.\n // `parsePhoneNumber('88005553535', ...)`.\n\n if (typeof arg_1 === 'string') {\n text = arg_1;\n } else throw new TypeError('A text for parsing must be a string.'); // If \"default country\" argument is being passed then move it to `options`.\n // `parsePhoneNumber('88005553535', 'RU', [options], metadata)`.\n\n\n if (!arg_2 || typeof arg_2 === 'string') {\n if (arg_4) {\n options = arg_3;\n metadata = arg_4;\n } else {\n options = undefined;\n metadata = arg_3;\n }\n\n if (arg_2) {\n options = _objectSpread({\n defaultCountry: arg_2\n }, options);\n }\n } // `defaultCountry` is not passed.\n // Example: `parsePhoneNumber('+78005553535', [options], metadata)`.\n else if (isObject(arg_2)) {\n if (arg_3) {\n options = arg_2;\n metadata = arg_3;\n } else {\n metadata = arg_2;\n }\n } else throw new Error(\"Invalid second argument: \".concat(arg_2));\n\n return {\n text: text,\n options: options,\n metadata: metadata\n };\n} // Otherwise istanbul would show this as \"branch not covered\".\n\n/* istanbul ignore next */\n\nvar isObject = function isObject(_) {\n return _typeof(_) === 'object';\n};\n//# sourceMappingURL=normalizeArguments.js.map","import parsePhoneNumberWithError_ from './parsePhoneNumberWithError_.js';\nimport normalizeArguments from './normalizeArguments.js';\nexport default function parsePhoneNumberWithError() {\n var _normalizeArguments = normalizeArguments(arguments),\n text = _normalizeArguments.text,\n options = _normalizeArguments.options,\n metadata = _normalizeArguments.metadata;\n\n return parsePhoneNumberWithError_(text, options, metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError.js.map","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { parsePhoneNumberWithError as _parsePhoneNumberWithError } from '../../core/index.js'\r\n\r\nexport function parsePhoneNumberWithError() {\r\n\treturn withMetadataArgument(_parsePhoneNumberWithError, arguments)\r\n}\r\n","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.mobile.json.js'\r\n\r\nexport default function withMetadataArgument(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(metadata)\r\n\treturn func.apply(this, args)\r\n}"],"names":["getPossibleCountriesForNumber","callingCode","nationalNumber","metadata","possibleCountries","getCountryCodesForCallingCode","filter","country","_metadata","selectNumberingPlan","numberingPlan","possibleLengths","indexOf","length","couldNationalNumberBelongToCountry","SINGLE_IDD_PREFIX_REG_EXP","o","allowArrayLike","it","Symbol","iterator","call","next","bind","Array","isArray","minLen","n","Object","prototype","toString","slice","constructor","name","from","test","i","done","value","TypeError","arr","len","arr2","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","arguments","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","configurable","writable","DEFAULT_OPTIONS","formatExtension","formattedNumber","extension","concat","ext","formatNumber","input","format","options","hasCountry","Error","countryCallingCode","phone","number","v2","addExtension","formatNationalNumber","carrierCode","_ref","formatRFC3966","fromCountry","fromCountryCallingCode","iddPrefix","countryMetadata","defaultIDDPrefix","IDDPrefix","getIddPrefix","undefined","formatIDD","formatAs","availableFormats","nationalNnumber","_step","_iterator","leadingDigitsPatterns","lastLeadingDigitsPattern","search","matchesEntirely","pattern","chooseFormatForNumber","formats","formatNationalNumberUsingFormat","useInternationalFormat","withNationalPrefix","nationalPrefixIsOptionalWhenFormattingInNationalFormat","nationalPrefix","_defineProperties","props","descriptor","PhoneNumber","countryOrCountryCallingCode","instance","Constructor","_classCallCheck","this","_getCountryAndCountry","metadataJson","isCountryCode","getCountryAndCountryCallingCode","protoProps","staticProps","hasTypes","getNumberType","nationalNumberPattern","isValidNumber","isNonGeographicCallingCode","phoneNumber","_format","MIN_LENGTH_FOR_NSN","MAX_LENGTH_FOR_NSN","MAX_LENGTH_COUNTRY_CODE","VALID_DIGITS","VALID_PUNCTUATION","PLUS_CHARS","applyInternationalSeparatorStyle","replace","RegExp","trim","_createForOfIteratorHelperLoose","_arrayLikeToArray","_unsupportedIterableToArray","checkNumberLength","checkNumberLengthForType","type","type_info","possible_lengths","mobile_type","a","b","merged","element","sort","mergeArrays","actual_length","minimum_length","extractCountryCallingCode","isNumberWithIddPrefix","numberWithoutIDD","_extractCountryCallin","shorterNumber","countryCallingCodeSource","_countryCallingCode","hasCallingCode","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","possibleShorterNumber","possibleShorterNationalNumber","extractNationalNumber","_extractNationalNumbe","nationalNumberBefore","nationalNumberAfter","shouldHaveExtractedNationalPrefix","isPossibleIncompleteNationalNumber","extractNationalNumberFromPossiblyIncompleteNumber","nationalPrefixForParsing","prefixPattern","prefixMatch","exec","capturedGroupsCount","hasCapturedGroups","nationalPrefixTransformRule","prefixBeforeNationalNumber","possiblePositionOfTheFirstCapturedGroup","FIRST_GROUP_PATTERN","internationalFormat","nationalPrefixFormattingRule","USE_NON_GEOGRAPHIC_COUNTRY_CODE","getCountryByCallingCode","nationalPhoneNumber","leadingDigits","getCountryByNationalNumber","NON_FIXED_LINE_PHONE_TYPES","isNumberTypeEqualTo","text","regular_expression","DIGITS","parseDigit","character","parseDigits","string","result","split","digit","CAPTURING_DIGIT_PATTERN","stripIddPrefix","IDDPrefixPattern","matchedGroups","match","isPossiblePhoneNumber","isPossibleNumber","pa","pb","na","Number","nb","isNaN","_typeof","_createClass","DEFAULT_EXT_PREFIX","CALLING_CODE_REG_EXP","Metadata","is_object","countries","join","type_of","validateMetadata","setVersion","_","countryCode","v1","v3","nonGeographic","nonGeographical","getCountryMetadata","countryCodes","countryCallingCodes","NumberingPlan","getNumberingPlanMetadata","getCountryCodeForCallingCode","_type","country_phone_code_to_countries","country_calling_codes","globalMetadataObject","_this","_getFormats","getDefaultCountryMetadataForRegion","map","Format","_getNationalPrefixFormattingRule","_nationalPrefixForParsing","_getNationalPrefixIsOptionalWhenFormatting","types","_type2","getType","Type","usesNationalPrefix","FIRST_GROUP_ONLY_PREFIX_PATTERN","getCountryCallingCode","version","v4","AsYouTypeState","onCountryChange","onCallingCodeChange","_ref2","international","missingPlus","digits","resetNationalSignificantNumber","initCountryAndCallingCode","nationalSignificantNumber","getNationalDigits","nationalSignificantNumberMatchesInput","complexPrefixBeforeNationalSignificantNumber","properties","_i","_Object$keys","setCountry","setCallingCode","nextDigits","DIGIT_PLACEHOLDER","DIGIT_PLACEHOLDER_MATCHER","repeat","times","cutAndStripNonPairedParens","cutBeforeIndex","dangling_braces","pop","start","cleared_string","_dangling_braces","index","stripNonPairedParens","formatCompleteNumber","state","shouldTryNationalPrefixFormattingRule","getSeparatorAfterNationalPrefix","useNationalPrefixFormattingRule","formatNationalNumberWithAndWithoutNationalPrefixFormattingRule","_ref3","formattedNationalNumber","isValidFormattedNationalNumber","PatternParser","context","or","instructions","parsePattern","_this$context$","branches","op","args","expandSingleElementArray","OPERATOR","operator","before","rightPart","startContext","getContext","endContext","oneOfSet","parseOneOfSet","ILLEGAL_CHARACTER_REGEXP","values","prevValue","charCodeAt","nextValue","String","fromCharCode","array","PatternMatcher","matchTree","parse","allowOverflow","_match","matchedChars","overflow","characters","tree","last","characterString","partialMatch","restCharacters","JSON","stringify","_result","_step2","_iterator2","_char","LONGEST_DUMMY_PHONE_NUMBER","NATIONAL_PREFIX_SEPARATORS_PATTERN","CREATE_CHARACTER_CLASS_PATTERN","CREATE_STANDALONE_DIGIT_PATTERN","NON_ALTERING_FORMAT_REG_EXP","AsYouTypeFormatter","resetFormat","chosenFormat","template","nationalNumberTemplate","populatedNationalNumberTemplate","populatedNationalNumberTemplatePosition","isNANP","matchingFormats","narrowDownMatchingFormats","formattedCompleteNumber","setNationalNumberTemplate","lastIndexOf","formatNationalNumberWithNextDigits","previouslyChosenFormat","newlyChosenFormat","chooseFormat","formatNextNationalNumberDigits","_this2","leadingDigitsPatternIndex","formatSuits","formatMatches","nationalPrefixIsMandatoryWhenFormattingInNationalFormat","leadingDigitsPatternsCount","Math","min","leadingDigitsPattern","error","console","_this3","_loop","getFormatFormat","createTemplateForFormat","_ret","getTemplateForFormat","spacing","internationalPrefix","getInternationalPrefixBeforeCountryCallingCode","getDigitsWithoutInternationalPrefix","_ref4","strictPattern","nationalNumberDummyDigits","nationalPrefixIncludedInTemplate","numberFormat","numberFormatWithNationalPrefix","position","populateTemplateWithDigits","_ref5","_slicedToArray","_arrayWithHoles","_s","_e","_arr","_n","_d","err","_iterableToArrayLimit","_nonIterableRest","VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART","VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN","VALID_FORMATTED_PHONE_NUMBER_PART","AFTER_PHONE_NUMBER_DIGITS_END_PATTERN","COMPLEX_NATIONAL_PREFIX","AsYouTypeParser","defaultCountry","defaultCallingCode","onNationalSignificantNumberChange","justLeadingPlus","_extractFormattedDigi","_extractFormattedDigi3","extractedNumber","hasPlus","startsAt","extractFormattedPhoneNumber","_extractFormattedDigitsAndPlus","_extractFormattedDigi4","formattedDigits","extractFormattedDigitsAndPlus","_extractFormattedDigi2","startInternationalNumber","inputDigits","hasReceivedThreeLeadingDigits","appendDigits","extractIddPrefix","isWaitingForCountryCallingCode","appendNationalSignificantNumberDigits","hasExtractedNationalSignificantNumber","extractNationalSignificantNumber","stateUpdate","update","hasSelectedNumberingPlan","couldPossiblyExtractAnotherNationalSignificantNumber","nationalDigits","setState","onExtractedNationalNumber","prevNationalSignificantNumber","_extractNationalNumbe2","nationalSignificantNumberIndex","extractAnotherNationalSignificantNumber","fixMissingPlus","extractCallingCodeAndNationalSignificantNumber","_extractCountryCallin2","newCallingCode","AsYouType","optionsOrDefaultCountry","_this$getCountryAndCa2","getCountryAndCallingCode","reset","_this$parser$input","parser","formattedOutput","determineTheCountryIfNeeded","formatter","reExtractNationalSignificantNumber","getFullNumber","getNonFormattedNumber","isInternational","getCallingCode","_getCountry","isCountryCallingCodeAmbiguous","determineTheCountry","prefix","_this$state","getNonFormattedNationalNumberWithPrefix","_this$state2","_this$state3","getNumber","isPossible","isValid","getTemplate","getNonFormattedTemplate","create","getExampleNumber","examples","withMetadataArgument","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","Reflect","construct","self","_assertThisInitialized","_possibleConstructorReturn","ReferenceError","_wrapNativeSuper","Class","_cache","Map","fn","Function","has","get","set","Wrapper","_construct","_setPrototypeOf","Parent","sham","Proxy","Boolean","valueOf","e","p","setPrototypeOf","__proto__","getPrototypeOf","ParseError","_Error","subClass","superClass","_inherits","_super","code","getExtensionDigitsPattern","maxLength","createExtensionPattern","purpose","possibleSeparatorsBetweenNumberAndExtLabel","possibleCharsAfterExtLabel","optionalExtnSuffix","possibleSeparatorsNumberExtLabelNoComma","MIN_LENGTH_PHONE_NUMBER_PATTERN","VALID_PHONE_NUMBER","VALID_PHONE_NUMBER_START_REG_EXP","VALID_PHONE_NUMBER_WITH_EXTENSION","VALID_PHONE_NUMBER_PATTERN","EXTN_PATTERN","parseIncompletePhoneNumber","parsePhoneNumberCharacter","prevParsedCharacters","PLUS_SIGN","RFC3966_PHONE_DIGIT_","RFC3966_GLOBAL_NUMBER_DIGITS_","RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_","ALPHANUM_","RFC3966_DOMAINNAME_PATTERN_","RFC3966_PREFIX_","RFC3966_PHONE_CONTEXT_","RFC3966_ISDN_SUBADDRESS_","extractFormattedPhoneNumberFromPossibleRfc3966NumberUri","numberToParse","phoneNumberString","phoneContext","numberToExtractFrom","indexOfPhoneContext","phoneContextStart","phoneContextEnd","substring","extractPhoneContext","isPhoneContextValid","charAt","indexOfNationalNumber","indexOfRfc3966Prefix","indexOfIsdn","MAX_INPUT_STRING_LENGTH","PHONE_NUMBER_START_PATTERN","AFTER_PHONE_NUMBER_END_PATTERN","_parseInput","extract","throwOnError","_extractFormattedPhoneNumber","isViablePhoneNumber","isViablePhoneNumberStart","withExtensionStripped","numberWithoutExtension","matches","extractExtension","parseInput","formattedPhoneNumber","_parsePhoneNumber","exactCountry","parsePhoneNumber","__countryCallingCodeSource","valid","extended","possible","normalizeArguments","_Array$prototype$slic2","arg_1","arg_2","arg_3","arg_4","isObject","_normalizeArguments","parsePhoneNumberWithError","func","_arguments"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"203.prod.js","mappings":"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AAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,aAAa,GAAK,UAAU,GAAK,WAAW,GAAK,UAAU,GAAK,cAAc,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,UAAU,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,QAAQ,GAAK,YAAY,GAAK,YAAY,GAAK,cAAc,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,cAAc,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,QAAQ,GAAK,UAAU,GAAK,SAAS,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,SAAS,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,YAAY,GAAK,cAAc,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,SAAS,GAAK,WAAW,GAAK,SAAS,GAAK,aAAa,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,UAAU,GAAK,UAAU,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,SAAS,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,QAAQ,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,UAAU,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,OAAO,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,OAAO,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,SAAS,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,WAAW,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,SAAS,GAAK,UAAU,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,Y,kCCAl+H,SAAgB,QAAU,EAAE,sBAAwB,CAAC,EAAI,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,EAAI,CAAC,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,KAAK,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAA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","sources":["webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/format.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/RFC3966.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/PhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isValid.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/constants.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getNumberType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/parseDigits.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isPossible.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/tools/semver-compare.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/metadata.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/examples.mobile.json.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/metadata.mobile.json.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeState.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeParser.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/AsYouType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/getExampleNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/ParseError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parse.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/normalizeArguments.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js"],"sourcesContent":["import Metadata from '../metadata.js';\n/**\r\n * Returns a list of countries that the phone number could potentially belong to.\r\n * @param {string} callingCode — Calling code.\r\n * @param {string} nationalNumber — National (significant) number.\r\n * @param {object} metadata — Metadata.\r\n * @return {string[]} A list of possible countries.\r\n */\n\nexport default function getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {\n var _metadata = new Metadata(metadata);\n\n var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode);\n\n if (!possibleCountries) {\n return [];\n }\n\n return possibleCountries.filter(function (country) {\n return couldNationalNumberBelongToCountry(nationalNumber, country, metadata);\n });\n}\n\nfunction couldNationalNumberBelongToCountry(nationalNumber, country, metadata) {\n var _metadata = new Metadata(metadata);\n\n _metadata.selectNumberingPlan(country);\n\n if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) {\n return true;\n }\n\n return false;\n}\n//# sourceMappingURL=getPossibleCountriesForNumber.js.map","import Metadata from '../metadata.js';\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\n\nvar SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/; // For regions that have multiple IDD prefixes\n// a preferred IDD prefix is returned.\n\nexport default function getIddPrefix(country, callingCode, metadata) {\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n\n if (countryMetadata.defaultIDDPrefix()) {\n return countryMetadata.defaultIDDPrefix();\n }\n\n if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\n return countryMetadata.IDDPrefix();\n }\n}\n//# sourceMappingURL=getIddPrefix.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nimport Metadata, { getCountryCallingCode } from './metadata.js';\nimport getIddPrefix from './helpers/getIddPrefix.js';\nimport { formatRFC3966 } from './helpers/RFC3966.js';\nvar DEFAULT_OPTIONS = {\n formatExtension: function formatExtension(formattedNumber, extension, metadata) {\n return \"\".concat(formattedNumber).concat(metadata.ext()).concat(extension);\n }\n};\n/**\r\n * Formats a phone number.\r\n *\r\n * format(phoneNumberInstance, 'INTERNATIONAL', { ..., v2: true }, metadata)\r\n * format(phoneNumberInstance, 'NATIONAL', { ..., v2: true }, metadata)\r\n *\r\n * format({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', { ... }, metadata)\r\n * format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {string} format\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\n\nexport default function formatNumber(input, format, options, metadata) {\n // Apply default options.\n if (options) {\n options = _objectSpread(_objectSpread({}, DEFAULT_OPTIONS), options);\n } else {\n options = DEFAULT_OPTIONS;\n }\n\n metadata = new Metadata(metadata);\n\n if (input.country && input.country !== '001') {\n // Validate `input.country`.\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n\n metadata.country(input.country);\n } else if (input.countryCallingCode) {\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else return input.phone || '';\n\n var countryCallingCode = metadata.countryCallingCode();\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone; // This variable should have been declared inside `case`s\n // but Babel has a bug and it says \"duplicate variable declaration\".\n\n var number;\n\n switch (format) {\n case 'NATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return '';\n }\n\n number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n\n case 'INTERNATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return \"+\".concat(countryCallingCode);\n }\n\n number = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options);\n number = \"+\".concat(countryCallingCode, \" \").concat(number);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n\n case 'E.164':\n // `E.164` doesn't define \"phone number extensions\".\n return \"+\".concat(countryCallingCode).concat(nationalNumber);\n\n case 'RFC3966':\n return formatRFC3966({\n number: \"+\".concat(countryCallingCode).concat(nationalNumber),\n ext: input.ext\n });\n // For reference, here's Google's IDD formatter:\n // https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546\n // Not saying that this IDD formatter replicates it 1:1, but it seems to work.\n // Who would even need to format phone numbers in IDD format anyway?\n\n case 'IDD':\n if (!options.fromCountry) {\n return; // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n }\n\n var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata);\n return addExtension(formattedNumber, input.ext, metadata, options.formatExtension);\n\n default:\n throw new Error(\"Unknown \\\"format\\\" argument passed to \\\"formatNumber()\\\": \\\"\".concat(format, \"\\\"\"));\n }\n}\n\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\n var format = chooseFormatForNumber(metadata.formats(), number);\n\n if (!format) {\n return number;\n }\n\n return formatNationalNumberUsingFormat(number, format, {\n useInternationalFormat: formatAs === 'INTERNATIONAL',\n withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true,\n carrierCode: carrierCode,\n metadata: metadata\n });\n}\n\nexport function chooseFormatForNumber(availableFormats, nationalNnumber) {\n for (var _iterator = _createForOfIteratorHelperLoose(availableFormats), _step; !(_step = _iterator()).done;) {\n var format = _step.value;\n\n // Validate leading digits.\n // The test case for \"else path\" could be found by searching for\n // \"format.leadingDigitsPatterns().length === 0\".\n if (format.leadingDigitsPatterns().length > 0) {\n // The last leading_digits_pattern is used here, as it is the most detailed\n var lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1]; // If leading digits don't match then move on to the next phone number format\n\n if (nationalNnumber.search(lastLeadingDigitsPattern) !== 0) {\n continue;\n }\n } // Check that the national number matches the phone number format regular expression\n\n\n if (matchesEntirely(nationalNnumber, format.pattern())) {\n return format;\n }\n }\n}\n\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\n return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber;\n}\n\nfunction formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) {\n var fromCountryCallingCode = getCountryCallingCode(fromCountry, metadata.metadata); // When calling within the same country calling code.\n\n if (fromCountryCallingCode === countryCallingCode) {\n var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata); // For NANPA regions, return the national format for these regions\n // but prefix it with the country calling code.\n\n if (countryCallingCode === '1') {\n return countryCallingCode + ' ' + formattedNumber;\n } // If regions share a country calling code, the country calling code need\n // not be dialled. This also applies when dialling within a region, so this\n // if clause covers both these cases. Technically this is the case for\n // dialling from La Reunion to other overseas departments of France (French\n // Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\n // this edge case for now and for those cases return the version including\n // country calling code. Details here:\n // http://www.petitfute.com/voyage/225-info-pratiques-reunion\n //\n\n\n return formattedNumber;\n }\n\n var iddPrefix = getIddPrefix(fromCountry, undefined, metadata.metadata);\n\n if (iddPrefix) {\n return \"\".concat(iddPrefix, \" \").concat(countryCallingCode, \" \").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata));\n }\n}\n//# sourceMappingURL=format.js.map","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport isViablePhoneNumber from './isViablePhoneNumber.js'; // https://www.ietf.org/rfc/rfc3966.txt\n\n/**\r\n * @param {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\n\nexport function parseRFC3966(text) {\n var number;\n var ext; // Replace \"tel:\" with \"tel=\" for parsing convenience.\n\n text = text.replace(/^tel:/, 'tel=');\n\n for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) {\n var part = _step.value;\n\n var _part$split = part.split('='),\n _part$split2 = _slicedToArray(_part$split, 2),\n name = _part$split2[0],\n value = _part$split2[1];\n\n switch (name) {\n case 'tel':\n number = value;\n break;\n\n case 'ext':\n ext = value;\n break;\n\n case 'phone-context':\n // Only \"country contexts\" are supported.\n // \"Domain contexts\" are ignored.\n if (value[0] === '+') {\n number = value + number;\n }\n\n break;\n }\n } // If the phone number is not viable, then abort.\n\n\n if (!isViablePhoneNumber(number)) {\n return {};\n }\n\n var result = {\n number: number\n };\n\n if (ext) {\n result.ext = ext;\n }\n\n return result;\n}\n/**\r\n * @param {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\n\nexport function formatRFC3966(_ref) {\n var number = _ref.number,\n ext = _ref.ext;\n\n if (!number) {\n return '';\n }\n\n if (number[0] !== '+') {\n throw new Error(\"\\\"formatRFC3966()\\\" expects \\\"number\\\" to be in E.164 format.\");\n }\n\n return \"tel:\".concat(number).concat(ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport Metadata from './metadata.js';\nimport isPossibleNumber from './isPossible.js';\nimport isValidNumber from './isValid.js'; // import checkNumberLength from './helpers/checkNumberLength.js'\n\nimport getNumberType from './helpers/getNumberType.js';\nimport getPossibleCountriesForNumber from './helpers/getPossibleCountriesForNumber.js';\nimport formatNumber from './format.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\nvar PhoneNumber = /*#__PURE__*/function () {\n /**\r\n * @param {string} countryOrCountryCallingCode\r\n * @param {string} nationalNumber\r\n * @param {object} metadata — Metadata JSON\r\n * @return {PhoneNumber}\r\n */\n function PhoneNumber(countryOrCountryCallingCode, nationalNumber, metadata) {\n _classCallCheck(this, PhoneNumber);\n\n if (!countryOrCountryCallingCode) {\n throw new TypeError('`country` or `countryCallingCode` not passed');\n }\n\n if (!nationalNumber) {\n throw new TypeError('`nationalNumber` not passed');\n }\n\n if (!metadata) {\n throw new TypeError('`metadata` not passed');\n }\n\n var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata),\n country = _getCountryAndCountry.country,\n countryCallingCode = _getCountryAndCountry.countryCallingCode;\n\n this.country = country;\n this.countryCallingCode = countryCallingCode;\n this.nationalNumber = nationalNumber;\n this.number = '+' + this.countryCallingCode + this.nationalNumber; // Exclude `metadata` property output from `PhoneNumber.toString()`\n // so that it doesn't clutter the console output of Node.js.\n // Previously, when Node.js did `console.log(new PhoneNumber(...))`,\n // it would output the whole internal structure of the `metadata` object.\n\n this.getMetadata = function () {\n return metadata;\n };\n }\n\n _createClass(PhoneNumber, [{\n key: \"setExt\",\n value: function setExt(ext) {\n this.ext = ext;\n }\n }, {\n key: \"getPossibleCountries\",\n value: function getPossibleCountries() {\n if (this.country) {\n return [this.country];\n }\n\n return getPossibleCountriesForNumber(this.countryCallingCode, this.nationalNumber, this.getMetadata());\n }\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n return isPossibleNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isValid\",\n value: function isValid() {\n return isValidNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isNonGeographic\",\n value: function isNonGeographic() {\n var metadata = new Metadata(this.getMetadata());\n return metadata.isNonGeographicCallingCode(this.countryCallingCode);\n }\n }, {\n key: \"isEqual\",\n value: function isEqual(phoneNumber) {\n return this.number === phoneNumber.number && this.ext === phoneNumber.ext;\n } // This function was originally meant to be an equivalent for `validatePhoneNumberLength()`,\n // but later it was found out that it doesn't include the possible `TOO_SHORT` result\n // returned from `parsePhoneNumberWithError()` in the original `validatePhoneNumberLength()`,\n // so eventually I simply commented out this method from the `PhoneNumber` class\n // and just left the `validatePhoneNumberLength()` function, even though that one would require\n // and additional step to also validate the actual country / calling code of the phone number.\n // validateLength() {\n // \tconst metadata = new Metadata(this.getMetadata())\n // \tmetadata.selectNumberingPlan(this.countryCallingCode)\n // \tconst result = checkNumberLength(this.nationalNumber, metadata)\n // \tif (result !== 'IS_POSSIBLE') {\n // \t\treturn result\n // \t}\n // }\n\n }, {\n key: \"getType\",\n value: function getType() {\n return getNumberType(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"format\",\n value: function format(_format, options) {\n return formatNumber(this, _format, options ? _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }) : {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"formatNational\",\n value: function formatNational(options) {\n return this.format('NATIONAL', options);\n }\n }, {\n key: \"formatInternational\",\n value: function formatInternational(options) {\n return this.format('INTERNATIONAL', options);\n }\n }, {\n key: \"getURI\",\n value: function getURI(options) {\n return this.format('RFC3966', options);\n }\n }]);\n\n return PhoneNumber;\n}();\n\nexport { PhoneNumber as default };\n\nvar isCountryCode = function isCountryCode(value) {\n return /^[A-Z]{2}$/.test(value);\n};\n\nfunction getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) {\n var country;\n var countryCallingCode;\n var metadata = new Metadata(metadataJson); // If country code is passed then derive `countryCallingCode` from it.\n // Also store the country code as `.country`.\n\n if (isCountryCode(countryOrCountryCallingCode)) {\n country = countryOrCountryCallingCode;\n metadata.selectNumberingPlan(country);\n countryCallingCode = metadata.countryCallingCode();\n } else {\n countryCallingCode = countryOrCountryCallingCode;\n /* istanbul ignore if */\n\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(countryCallingCode)) {\n country = '001';\n }\n }\n }\n\n return {\n country: country,\n countryCallingCode: countryCallingCode\n };\n}\n//# sourceMappingURL=PhoneNumber.js.map","import Metadata from './metadata.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport getNumberType from './helpers/getNumberType.js';\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * isValid(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters (including punctuation).\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The optional `defaultCountry` argument is the default country.\r\n * I.e. it does not restrict to just that country,\r\n * e.g. in those cases where several countries share\r\n * the same phone numbering rules (NANPA, Britain, etc).\r\n * For example, even though the number `07624 369230`\r\n * belongs to the Isle of Man (\"IM\" country code)\r\n * calling `isValidNumber('07624369230', 'GB', metadata)`\r\n * still returns `true` because the country is not restricted to `GB`,\r\n * it's just that `GB` is the default one for the phone numbering rules.\r\n * For restricting the country see `isValidNumberForRegion()`\r\n * though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isValidNumber('+78005553535', metadata)\r\n * isValidNumber('8005553535', 'RU', metadata)\r\n * isValidNumber('88005553535', 'RU', metadata)\r\n * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\n\nexport default function isValidNumber(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n /**\r\n * Checks if a phone number is \"possible\" (basically just checks its length).\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\n\n metadata.selectNumberingPlan(input.country, input.countryCallingCode); // By default, countries only have type regexps when it's required for\n // distinguishing different countries having the same `countryCallingCode`.\n\n if (metadata.hasTypes()) {\n return getNumberType(input, options, metadata.metadata) !== undefined;\n } // If there are no type regexps for this country in metadata then use\n // `nationalNumberPattern` as a \"better than nothing\" replacement.\n\n\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n return matchesEntirely(nationalNumber, metadata.nationalNumberPattern());\n}\n//# sourceMappingURL=isValid.js.map","// The minimum length of the national significant number.\nexport var MIN_LENGTH_FOR_NSN = 2; // The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\n\nexport var MAX_LENGTH_FOR_NSN = 17; // The maximum length of the country calling code.\n\nexport var MAX_LENGTH_COUNTRY_CODE = 3; // Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\n\nexport var VALID_DIGITS = \"0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9\"; // `DASHES` will be right after the opening square bracket of the \"character class\"\n\nvar DASHES = \"-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D\";\nvar SLASHES = \"\\uFF0F/\";\nvar DOTS = \"\\uFF0E.\";\nexport var WHITESPACE = \" \\xA0\\xAD\\u200B\\u2060\\u3000\";\nvar BRACKETS = \"()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]\"; // export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\n\nvar TILDES = \"~\\u2053\\u223C\\uFF5E\"; // Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\n\nexport var VALID_PUNCTUATION = \"\".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES);\nexport var PLUS_CHARS = \"+\\uFF0B\"; // const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')\n//# sourceMappingURL=constants.js.map","import { VALID_PUNCTUATION } from '../constants.js'; // Removes brackets and replaces dashes with spaces.\n//\n// E.g. \"(999) 111-22-33\" -> \"999 111 22 33\"\n//\n// For some reason Google's metadata contains ``s with brackets and dashes.\n// Meanwhile, there's no single opinion about using punctuation in international phone numbers.\n//\n// For example, Google's `` for USA is `+1 213-373-4253`.\n// And here's a quote from WikiPedia's \"North American Numbering Plan\" page:\n// https://en.wikipedia.org/wiki/North_American_Numbering_Plan\n//\n// \"The country calling code for all countries participating in the NANP is 1.\n// In international format, an NANP number should be listed as +1 301 555 01 00,\n// where 301 is an area code (Maryland).\"\n//\n// I personally prefer the international format without any punctuation.\n// For example, brackets are remnants of the old age, meaning that the\n// phone number part in brackets (so called \"area code\") can be omitted\n// if dialing within the same \"area\".\n// And hyphens were clearly introduced for splitting local numbers into memorizable groups.\n// For example, remembering \"5553535\" is difficult but \"555-35-35\" is much simpler.\n// Imagine a man taking a bus from home to work and seeing an ad with a phone number.\n// He has a couple of seconds to memorize that number until it passes by.\n// If it were spaces instead of hyphens the man wouldn't necessarily get it,\n// but with hyphens instead of spaces the grouping is more explicit.\n// I personally think that hyphens introduce visual clutter,\n// so I prefer replacing them with spaces in international numbers.\n// In the modern age all output is done on displays where spaces are clearly distinguishable\n// so hyphens can be safely replaced with spaces without losing any legibility.\n//\n\nexport default function applyInternationalSeparatorStyle(formattedNumber) {\n return formattedNumber.replace(new RegExp(\"[\".concat(VALID_PUNCTUATION, \"]+\"), 'g'), ' ').trim();\n}\n//# sourceMappingURL=applyInternationalSeparatorStyle.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/**\r\n * Merges two arrays.\r\n * @param {*} a\r\n * @param {*} b\r\n * @return {*}\r\n */\nexport default function mergeArrays(a, b) {\n var merged = a.slice();\n\n for (var _iterator = _createForOfIteratorHelperLoose(b), _step; !(_step = _iterator()).done;) {\n var element = _step.value;\n\n if (a.indexOf(element) < 0) {\n merged.push(element);\n }\n }\n\n return merged.sort(function (a, b) {\n return a - b;\n }); // ES6 version, requires Set polyfill.\n // let merged = new Set(a)\n // for (const element of b) {\n // \tmerged.add(i)\n // }\n // return Array.from(merged).sort((a, b) => a - b)\n}\n//# sourceMappingURL=mergeArrays.js.map","import mergeArrays from './mergeArrays.js';\nexport default function checkNumberLength(nationalNumber, metadata) {\n return checkNumberLengthForType(nationalNumber, undefined, metadata);\n} // Checks whether a number is possible for the country based on its length.\n// Should only be called for the \"new\" metadata which has \"possible lengths\".\n\nexport function checkNumberLengthForType(nationalNumber, type, metadata) {\n var type_info = metadata.type(type); // There should always be \"\" set for every type element.\n // This is declared in the XML schema.\n // For size efficiency, where a sub-description (e.g. fixed-line)\n // has the same \"\" as the \"general description\", this is missing,\n // so we fall back to the \"general description\". Where no numbers of the type\n // exist at all, there is one possible length (-1) which is guaranteed\n // not to match the length of any real phone number.\n\n var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths(); // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n // Metadata before version `1.0.18` didn't contain `possible_lengths`.\n\n if (!possible_lengths) {\n return 'IS_POSSIBLE';\n }\n\n if (type === 'FIXED_LINE_OR_MOBILE') {\n // No such country in metadata.\n\n /* istanbul ignore next */\n if (!metadata.type('FIXED_LINE')) {\n // The rare case has been encountered where no fixedLine data is available\n // (true for some non-geographic entities), so we just check mobile.\n return checkNumberLengthForType(nationalNumber, 'MOBILE', metadata);\n }\n\n var mobile_type = metadata.type('MOBILE');\n\n if (mobile_type) {\n // Merge the mobile data in if there was any. \"Concat\" creates a new\n // array, it doesn't edit possible_lengths in place, so we don't need a copy.\n // Note that when adding the possible lengths from mobile, we have\n // to again check they aren't empty since if they are this indicates\n // they are the same as the general desc and should be obtained from there.\n possible_lengths = mergeArrays(possible_lengths, mobile_type.possibleLengths()); // The current list is sorted; we need to merge in the new list and\n // re-sort (duplicates are okay). Sorting isn't so expensive because\n // the lists are very small.\n // if (local_lengths) {\n // \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\n // } else {\n // \tlocal_lengths = mobile_type.possibleLengthsLocal()\n // }\n }\n } // If the type doesn't exist then return 'INVALID_LENGTH'.\n else if (type && !type_info) {\n return 'INVALID_LENGTH';\n }\n\n var actual_length = nationalNumber.length; // In `libphonenumber-js` all \"local-only\" formats are dropped for simplicity.\n // // This is safe because there is never an overlap beween the possible lengths\n // // and the local-only lengths; this is checked at build time.\n // if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0)\n // {\n // \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n // }\n\n var minimum_length = possible_lengths[0];\n\n if (minimum_length === actual_length) {\n return 'IS_POSSIBLE';\n }\n\n if (minimum_length > actual_length) {\n return 'TOO_SHORT';\n }\n\n if (possible_lengths[possible_lengths.length - 1] < actual_length) {\n return 'TOO_LONG';\n } // We skip the first element since we've already checked it.\n\n\n return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n//# sourceMappingURL=checkNumberLength.js.map","import stripIddPrefix from './stripIddPrefix.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport Metadata from '../metadata.js';\nimport { MAX_LENGTH_COUNTRY_CODE } from '../constants.js';\n/**\r\n * Converts a phone number digits (possibly with a `+`)\r\n * into a calling code and the rest phone number digits.\r\n * The \"rest phone number digits\" could include\r\n * a national prefix, carrier code, and national\r\n * (significant) number.\r\n * @param {string} number — Phone number digits (possibly with a `+`).\r\n * @param {string} [country] — Default country.\r\n * @param {string} [callingCode] — Default calling code (some phone numbering plans are non-geographic).\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCodeSource: string?, countryCallingCode: string?, number: string }`\r\n * @example\r\n * // Returns `{ countryCallingCode: \"1\", number: \"2133734253\" }`.\r\n * extractCountryCallingCode('2133734253', 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', 'RU', null, metadata)\r\n */\n\nexport default function extractCountryCallingCode(number, country, callingCode, metadata) {\n if (!number) {\n return {};\n }\n\n var isNumberWithIddPrefix; // If this is not an international phone number,\n // then either extract an \"IDD\" prefix, or extract a\n // country calling code from a number by autocorrecting it\n // by prepending a leading `+` in cases when it starts\n // with the country calling code.\n // https://wikitravel.org/en/International_dialling_prefix\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n\n if (number[0] !== '+') {\n // Convert an \"out-of-country\" dialing phone number\n // to a proper international phone number.\n var numberWithoutIDD = stripIddPrefix(number, country, callingCode, metadata); // If an IDD prefix was stripped then\n // convert the number to international one\n // for subsequent parsing.\n\n if (numberWithoutIDD && numberWithoutIDD !== number) {\n isNumberWithIddPrefix = true;\n number = '+' + numberWithoutIDD;\n } else {\n // Check to see if the number starts with the country calling code\n // for the default country. If so, we remove the country calling code,\n // and do some checks on the validity of the number before and after.\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (country || callingCode) {\n var _extractCountryCallin = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, callingCode, metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n shorterNumber = _extractCountryCallin.number;\n\n if (countryCallingCode) {\n return {\n countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',\n countryCallingCode: countryCallingCode,\n number: shorterNumber\n };\n }\n }\n\n return {\n // No need to set it to `UNSPECIFIED`. It can be just `undefined`.\n // countryCallingCodeSource: 'UNSPECIFIED',\n number: number\n };\n }\n } // Fast abortion: country codes do not begin with a '0'\n\n\n if (number[1] === '0') {\n return {};\n }\n\n metadata = new Metadata(metadata); // The thing with country phone codes\n // is that they are orthogonal to each other\n // i.e. there's no such country phone code A\n // for which country phone code B exists\n // where B starts with A.\n // Therefore, while scanning digits,\n // if a valid country code is found,\n // that means that it is the country code.\n //\n\n var i = 2;\n\n while (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n var _countryCallingCode = number.slice(1, i);\n\n if (metadata.hasCallingCode(_countryCallingCode)) {\n metadata.selectNumberingPlan(_countryCallingCode);\n return {\n countryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN',\n countryCallingCode: _countryCallingCode,\n number: number.slice(i)\n };\n }\n\n i++;\n }\n\n return {};\n} // The possible values for the returned `countryCallingCodeSource` are:\n//\n// Copy-pasted from:\n// https://github.com/google/libphonenumber/blob/master/resources/phonenumber.proto\n//\n// // The source from which the country_code is derived. This is not set in the\n// // general parsing method, but in the method that parses and keeps raw_input.\n// // New fields could be added upon request.\n// enum CountryCodeSource {\n// // Default value returned if this is not set, because the phone number was\n// // created using parse, not parseAndKeepRawInput. hasCountryCodeSource will\n// // return false if this is the case.\n// UNSPECIFIED = 0;\n//\n// // The country_code is derived based on a phone number with a leading \"+\",\n// // e.g. the French number \"+33 1 42 68 53 00\".\n// FROM_NUMBER_WITH_PLUS_SIGN = 1;\n//\n// // The country_code is derived based on a phone number with a leading IDD,\n// // e.g. the French number \"011 33 1 42 68 53 00\", as it is dialled from US.\n// FROM_NUMBER_WITH_IDD = 5;\n//\n// // The country_code is derived based on a phone number without a leading\n// // \"+\", e.g. the French number \"33 1 42 68 53 00\" when defaultCountry is\n// // supplied as France.\n// FROM_NUMBER_WITHOUT_PLUS_SIGN = 10;\n//\n// // The country_code is derived NOT based on the phone number itself, but\n// // from the defaultCountry parameter provided in the parsing function by the\n// // clients. This happens mostly for numbers written in the national format\n// // (without country code). For example, this would be set when parsing the\n// // French number \"01 42 68 53 00\", when defaultCountry is supplied as\n// // France.\n// FROM_DEFAULT_COUNTRY = 20;\n// }\n//# sourceMappingURL=extractCountryCallingCode.js.map","import Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport extractNationalNumber from './extractNationalNumber.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryCallingCode from '../getCountryCallingCode.js';\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits.\r\n * @param {string?} country\r\n * @param {string?} callingCode\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\n\nexport default function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, callingCode, metadata) {\n var countryCallingCode = country ? getCountryCallingCode(country, metadata) : callingCode;\n\n if (number.indexOf(countryCallingCode) === 0) {\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(country, callingCode);\n var possibleShorterNumber = number.slice(countryCallingCode.length);\n\n var _extractNationalNumbe = extractNationalNumber(possibleShorterNumber, metadata),\n possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;\n\n var _extractNationalNumbe2 = extractNationalNumber(number, metadata),\n nationalNumber = _extractNationalNumbe2.nationalNumber; // If the number was not valid before but is valid now,\n // or if it was too long before, we consider the number\n // with the country calling code stripped to be a better result\n // and keep that instead.\n // For example, in Germany (+49), `49` is a valid area code,\n // so if a number starts with `49`, it could be both a valid\n // national German number or an international number without\n // a leading `+`.\n\n\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) && matchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || checkNumberLength(nationalNumber, metadata) === 'TOO_LONG') {\n return {\n countryCallingCode: countryCallingCode,\n number: possibleShorterNumber\n };\n }\n }\n\n return {\n number: number\n };\n}\n//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map","import extractNationalNumberFromPossiblyIncompleteNumber from './extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport checkNumberLength from './checkNumberLength.js';\n/**\r\n * Strips national prefix and carrier code from a complete phone number.\r\n * The difference from the non-\"FromCompleteNumber\" function is that\r\n * it won't extract national prefix if the resultant number is too short\r\n * to be a complete number for the selected phone numbering plan.\r\n * @param {string} number — Complete phone number digits.\r\n * @param {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\n\nexport default function extractNationalNumber(number, metadata) {\n // Parsing national prefixes and carrier codes\n // is only required for local phone numbers\n // but some people don't understand that\n // and sometimes write international phone numbers\n // with national prefixes (or maybe even carrier codes).\n // http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\n // Google's original library forgives such mistakes\n // and so does this library, because it has been requested:\n // https://github.com/catamphetamine/libphonenumber-js/issues/127\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(number, metadata),\n carrierCode = _extractNationalNumbe.carrierCode,\n nationalNumber = _extractNationalNumbe.nationalNumber;\n\n if (nationalNumber !== number) {\n if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n } // Check the national (significant) number length after extracting national prefix and carrier code.\n // Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature.\n\n\n if (metadata.possibleLengths()) {\n // The number remaining after stripping the national prefix and carrier code\n // should be long enough to have a possible length for the country.\n // Otherwise, don't strip the national prefix and carrier code,\n // since the original number could be a valid number.\n // This check has been copy-pasted \"as is\" from Google's original library:\n // https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250\n // It doesn't check for the \"possibility\" of the original `number`.\n // I guess it's fine not checking that one. It works as is anyway.\n if (!isPossibleIncompleteNationalNumber(nationalNumber, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n }\n }\n\n return {\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n} // In some countries, the same digit could be a national prefix\n// or a leading digit of a valid phone number.\n// For example, in Russia, national prefix is `8`,\n// and also `800 555 35 35` is a valid number\n// in which `8` is not a national prefix, but the first digit\n// of a national (significant) number.\n// Same's with Belarus:\n// `82004910060` is a valid national (significant) number,\n// but `2004910060` is not.\n// To support such cases (to prevent the code from always stripping\n// national prefix), a condition is imposed: a national prefix\n// is not extracted when the original number is \"viable\" and the\n// resultant number is not, a \"viable\" national number being the one\n// that matches `national_number_pattern`.\n\nfunction shouldHaveExtractedNationalPrefix(nationalNumberBefore, nationalNumberAfter, metadata) {\n // The equivalent in Google's code is:\n // https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004\n if (matchesEntirely(nationalNumberBefore, metadata.nationalNumberPattern()) && !matchesEntirely(nationalNumberAfter, metadata.nationalNumberPattern())) {\n return false;\n } // This \"is possible\" national number (length) check has been commented out\n // because it's superceded by the (effectively) same check done in the\n // `extractNationalNumber()` function after it calls `shouldHaveExtractedNationalPrefix()`.\n // In other words, why run the same check twice if it could only be run once.\n // // Check the national (significant) number length after extracting national prefix and carrier code.\n // // Fixes a minor \"weird behavior\" bug: https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/57\n // // (Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature).\n // if (metadata.possibleLengths()) {\n // \tif (isPossibleIncompleteNationalNumber(nationalNumberBefore, metadata) &&\n // \t\t!isPossibleIncompleteNationalNumber(nationalNumberAfter, metadata)) {\n // \t\treturn false\n // \t}\n // }\n\n\n return true;\n}\n\nfunction isPossibleIncompleteNationalNumber(nationalNumber, metadata) {\n switch (checkNumberLength(nationalNumber, metadata)) {\n case 'TOO_SHORT':\n case 'INVALID_LENGTH':\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n return false;\n\n default:\n return true;\n }\n}\n//# sourceMappingURL=extractNationalNumber.js.map","/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not.\r\n */\nexport default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {\n if (number && metadata.numberingPlan.nationalPrefixForParsing()) {\n // See METADATA.md for the description of\n // `national_prefix_for_parsing` and `national_prefix_transform_rule`.\n // Attempt to parse the first digits as a national prefix.\n var prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')');\n var prefixMatch = prefixPattern.exec(number);\n\n if (prefixMatch) {\n var nationalNumber;\n var carrierCode; // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n // If a `national_prefix_for_parsing` has any \"capturing groups\"\n // then it means that the national (significant) number is equal to\n // those \"capturing groups\" transformed via `national_prefix_transform_rule`,\n // and nothing could be said about the actual national prefix:\n // what is it and was it even there.\n // If a `national_prefix_for_parsing` doesn't have any \"capturing groups\",\n // then everything it matches is a national prefix.\n // To determine whether `national_prefix_for_parsing` matched any\n // \"capturing groups\", the value of the result of calling `.exec()`\n // is looked at, and if it has non-undefined values where there're\n // \"capturing groups\" in the regular expression, then it means\n // that \"capturing groups\" have been matched.\n // It's not possible to tell whether there'll be any \"capturing gropus\"\n // before the matching process, because a `national_prefix_for_parsing`\n // could exhibit both behaviors.\n\n var capturedGroupsCount = prefixMatch.length - 1;\n var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];\n\n if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\n nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule()); // If there's more than one captured group,\n // then carrier code is the second one.\n\n if (capturedGroupsCount > 1) {\n carrierCode = prefixMatch[1];\n }\n } // If there're no \"capturing groups\",\n // or if there're \"capturing groups\" but no\n // `national_prefix_transform_rule`,\n // then just strip the national prefix from the number,\n // and possibly a carrier code.\n // Seems like there could be more.\n else {\n // `prefixBeforeNationalNumber` is the whole substring matched by\n // the `national_prefix_for_parsing` regular expression.\n // There seem to be no guarantees that it's just a national prefix.\n // For example, if there's a carrier code, it's gonna be a\n // part of `prefixBeforeNationalNumber` too.\n var prefixBeforeNationalNumber = prefixMatch[0];\n nationalNumber = number.slice(prefixBeforeNationalNumber.length); // If there's at least one captured group,\n // then carrier code is the first one.\n\n if (hasCapturedGroups) {\n carrierCode = prefixMatch[1];\n }\n } // Tries to guess whether a national prefix was present in the input.\n // This is not something copy-pasted from Google's library:\n // they don't seem to have an equivalent for that.\n // So this isn't an \"officially approved\" way of doing something like that.\n // But since there seems no other existing method, this library uses it.\n\n\n var nationalPrefix;\n\n if (hasCapturedGroups) {\n var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);\n var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup); // Example: an Argentinian (AR) phone number `0111523456789`.\n // `prefixMatch[0]` is `01115`, and `$1` is `11`,\n // and the rest of the phone number is `23456789`.\n // The national number is transformed via `9$1` to `91123456789`.\n // National prefix `0` is detected being present at the start.\n // if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {\n\n if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\n nationalPrefix = metadata.numberingPlan.nationalPrefix();\n }\n } else {\n nationalPrefix = prefixMatch[0];\n }\n\n return {\n nationalNumber: nationalNumber,\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode\n };\n }\n }\n\n return {\n nationalNumber: number\n };\n}\n//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map","import applyInternationalSeparatorStyle from './applyInternationalSeparatorStyle.js'; // This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly. Therefore, we use `\\d`, so that the first\n// group actually used in the pattern will be matched.\n\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\nexport default function formatNationalNumberUsingFormat(number, format, _ref) {\n var useInternationalFormat = _ref.useInternationalFormat,\n withNationalPrefix = _ref.withNationalPrefix,\n carrierCode = _ref.carrierCode,\n metadata = _ref.metadata;\n var formattedNumber = number.replace(new RegExp(format.pattern()), useInternationalFormat ? format.internationalFormat() : // This library doesn't use `domestic_carrier_code_formatting_rule`,\n // because that one is only used when formatting phone numbers\n // for dialing from a mobile phone, and this is not a dialing library.\n // carrierCode && format.domesticCarrierCodeFormattingRule()\n // \t// First, replace the $CC in the formatting rule with the desired carrier code.\n // \t// Then, replace the $FG in the formatting rule with the first group\n // \t// and the carrier code combined in the appropriate way.\n // \t? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode))\n // \t: (\n // \t\twithNationalPrefix && format.nationalPrefixFormattingRule()\n // \t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\n // \t\t\t: format.format()\n // \t)\n withNationalPrefix && format.nationalPrefixFormattingRule() ? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()) : format.format());\n\n if (useInternationalFormat) {\n return applyInternationalSeparatorStyle(formattedNumber);\n }\n\n return formattedNumber;\n}\n//# sourceMappingURL=formatNationalNumberUsingFormat.js.map","import getCountryByNationalNumber from './getCountryByNationalNumber.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\nexport default function getCountryByCallingCode(callingCode, _ref) {\n var nationalPhoneNumber = _ref.nationalNumber,\n defaultCountry = _ref.defaultCountry,\n metadata = _ref.metadata;\n\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(callingCode)) {\n return '001';\n }\n }\n\n var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode);\n\n if (!possibleCountries) {\n return;\n } // If there's just one country corresponding to the country code,\n // then just return it, without further phone number digits validation.\n\n\n if (possibleCountries.length === 1) {\n return possibleCountries[0];\n }\n\n return getCountryByNationalNumber(nationalPhoneNumber, {\n countries: possibleCountries,\n defaultCountry: defaultCountry,\n metadata: metadata.metadata\n });\n}\n//# sourceMappingURL=getCountryByCallingCode.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport Metadata from '../metadata.js';\nimport getNumberType from './getNumberType.js';\nexport default function getCountryByNationalNumber(nationalPhoneNumber, _ref) {\n var countries = _ref.countries,\n defaultCountry = _ref.defaultCountry,\n metadata = _ref.metadata;\n // Re-create `metadata` because it will be selecting a `country`.\n metadata = new Metadata(metadata);\n var matchingCountries = [];\n\n for (var _iterator = _createForOfIteratorHelperLoose(countries), _step; !(_step = _iterator()).done;) {\n var country = _step.value;\n metadata.country(country); // \"Leading digits\" patterns are only defined for about 20% of all countries.\n // By definition, matching \"leading digits\" is a sufficient but not a necessary\n // condition for a phone number to belong to a country.\n // The point of \"leading digits\" check is that it's the fastest one to get a match.\n // https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits\n // I'd suppose that \"leading digits\" patterns are mutually exclusive for different countries\n // because of the intended use of that feature.\n\n if (metadata.leadingDigits()) {\n if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\n return country;\n }\n } // Else perform full validation with all of those\n // fixed-line/mobile/etc regular expressions.\n else if (getNumberType({\n phone: nationalPhoneNumber,\n country: country\n }, undefined, metadata.metadata)) {\n // If the `defaultCountry` is among the `matchingCountries` then return it.\n if (defaultCountry) {\n if (country === defaultCountry) {\n return country;\n }\n\n matchingCountries.push(country);\n } else {\n return country;\n }\n }\n } // Return the first (\"main\") one of the `matchingCountries`.\n\n\n if (matchingCountries.length > 0) {\n return matchingCountries[0];\n }\n}\n//# sourceMappingURL=getCountryByNationalNumber.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nvar NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL']; // Finds out national phone number type (fixed line, mobile, etc)\n\nexport default function getNumberType(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {}; // When `parse()` returned `{}`\n // meaning that the phone number is not a valid one.\n\n if (!input.country) {\n return;\n }\n\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone; // The following is copy-pasted from the original function:\n // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n // Is this national number even valid for this country\n\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())) {\n return;\n } // Is it fixed line number\n\n\n if (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) {\n // Because duplicate regular expressions are removed\n // to reduce metadata size, if \"mobile\" pattern is \"\"\n // then it means it was removed due to being a duplicate of the fixed-line pattern.\n //\n if (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n return 'FIXED_LINE_OR_MOBILE';\n } // `MOBILE` type pattern isn't included if it matched `FIXED_LINE` one.\n // For example, for \"US\" country.\n // Old metadata (< `1.0.18`) had a specific \"types\" data structure\n // that happened to be `undefined` for `MOBILE` in that case.\n // Newer metadata (>= `1.0.18`) has another data structure that is\n // not `undefined` for `MOBILE` in that case (it's just an empty array).\n // So this `if` is just for backwards compatibility with old metadata.\n\n\n if (!metadata.type('MOBILE')) {\n return 'FIXED_LINE_OR_MOBILE';\n } // Check if the number happens to qualify as both fixed line and mobile.\n // (no such country in the minimal metadata set)\n\n /* istanbul ignore if */\n\n\n if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n return 'FIXED_LINE';\n }\n\n for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) {\n var type = _step.value;\n\n if (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\n return type;\n }\n }\n}\nexport function isNumberTypeEqualTo(nationalNumber, type, metadata) {\n type = metadata.type(type);\n\n if (!type || !type.pattern()) {\n return false;\n } // Check if any possible number lengths are present;\n // if so, we use them to avoid checking\n // the validation pattern if they don't match.\n // If they are absent, this means they match\n // the general description, which we have\n // already checked before a specific number type.\n\n\n if (type.possibleLengths() && type.possibleLengths().indexOf(nationalNumber.length) < 0) {\n return false;\n }\n\n return matchesEntirely(nationalNumber, type.pattern());\n}\n//# sourceMappingURL=getNumberType.js.map","/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\nexport default function matchesEntirely(text, regular_expression) {\n // If assigning the `''` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n text = text || '';\n return new RegExp('^(?:' + regular_expression + ')$').test(text);\n}\n//# sourceMappingURL=matchesEntirely.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nexport var DIGITS = {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n \"\\uFF10\": '0',\n // Fullwidth digit 0\n \"\\uFF11\": '1',\n // Fullwidth digit 1\n \"\\uFF12\": '2',\n // Fullwidth digit 2\n \"\\uFF13\": '3',\n // Fullwidth digit 3\n \"\\uFF14\": '4',\n // Fullwidth digit 4\n \"\\uFF15\": '5',\n // Fullwidth digit 5\n \"\\uFF16\": '6',\n // Fullwidth digit 6\n \"\\uFF17\": '7',\n // Fullwidth digit 7\n \"\\uFF18\": '8',\n // Fullwidth digit 8\n \"\\uFF19\": '9',\n // Fullwidth digit 9\n \"\\u0660\": '0',\n // Arabic-indic digit 0\n \"\\u0661\": '1',\n // Arabic-indic digit 1\n \"\\u0662\": '2',\n // Arabic-indic digit 2\n \"\\u0663\": '3',\n // Arabic-indic digit 3\n \"\\u0664\": '4',\n // Arabic-indic digit 4\n \"\\u0665\": '5',\n // Arabic-indic digit 5\n \"\\u0666\": '6',\n // Arabic-indic digit 6\n \"\\u0667\": '7',\n // Arabic-indic digit 7\n \"\\u0668\": '8',\n // Arabic-indic digit 8\n \"\\u0669\": '9',\n // Arabic-indic digit 9\n \"\\u06F0\": '0',\n // Eastern-Arabic digit 0\n \"\\u06F1\": '1',\n // Eastern-Arabic digit 1\n \"\\u06F2\": '2',\n // Eastern-Arabic digit 2\n \"\\u06F3\": '3',\n // Eastern-Arabic digit 3\n \"\\u06F4\": '4',\n // Eastern-Arabic digit 4\n \"\\u06F5\": '5',\n // Eastern-Arabic digit 5\n \"\\u06F6\": '6',\n // Eastern-Arabic digit 6\n \"\\u06F7\": '7',\n // Eastern-Arabic digit 7\n \"\\u06F8\": '8',\n // Eastern-Arabic digit 8\n \"\\u06F9\": '9' // Eastern-Arabic digit 9\n\n};\nexport function parseDigit(character) {\n return DIGITS[character];\n}\n/**\r\n * Parses phone number digits from a string.\r\n * Drops all punctuation leaving only digits.\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * parseDigits('8 (800) 555')\r\n * // Outputs '8800555'.\r\n * ```\r\n */\n\nexport default function parseDigits(string) {\n var result = ''; // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n var digit = parseDigit(character);\n\n if (digit) {\n result += digit;\n }\n }\n\n return result;\n}\n//# sourceMappingURL=parseDigits.js.map","import Metadata from '../metadata.js';\nimport { VALID_DIGITS } from '../constants.js';\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])');\nexport default function stripIddPrefix(number, country, callingCode, metadata) {\n if (!country) {\n return;\n } // Check if the number is IDD-prefixed.\n\n\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n\n if (number.search(IDDPrefixPattern) !== 0) {\n return;\n } // Strip IDD prefix.\n\n\n number = number.slice(number.match(IDDPrefixPattern)[0].length); // If there're any digits after an IDD prefix,\n // then those digits are a country calling code.\n // Since no country code starts with a `0`,\n // the code below validates that the next digit (if present) is not `0`.\n\n var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n\n if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n if (matchedGroups[1] === '0') {\n return;\n }\n }\n\n return number;\n}\n//# sourceMappingURL=stripIddPrefix.js.map","import Metadata from './metadata.js';\nimport checkNumberLength from './helpers/checkNumberLength.js';\n/**\r\n * Checks if a phone number is \"possible\" (basically just checks its length).\r\n *\r\n * isPossible(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\n\nexport default function isPossiblePhoneNumber(input, options, metadata) {\n /* istanbul ignore if */\n if (options === undefined) {\n options = {};\n }\n\n metadata = new Metadata(metadata);\n\n if (options.v2) {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else {\n if (!input.phone) {\n return false;\n }\n\n if (input.country) {\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n\n metadata.country(input.country);\n } else {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n\n metadata.selectNumberingPlan(input.countryCallingCode);\n }\n } // Old metadata (< 1.0.18) had no \"possible length\" data.\n\n\n if (metadata.possibleLengths()) {\n return isPossibleNumber(input.phone || input.nationalNumber, metadata);\n } else {\n // There was a bug between `1.7.35` and `1.7.37` where \"possible_lengths\"\n // were missing for \"non-geographical\" numbering plans.\n // Just assume the number is possible in such cases:\n // it's unlikely that anyone generated their custom metadata\n // in that short period of time (one day).\n // This code can be removed in some future major version update.\n if (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {\n // \"Non-geographic entities\" did't have `possibleLengths`\n // due to a bug in metadata generation process.\n return true;\n } else {\n throw new Error('Missing \"possibleLengths\" in metadata. Perhaps the metadata has been generated before v1.0.18.');\n }\n }\n}\nexport function isPossibleNumber(nationalNumber, metadata) {\n //, isInternational) {\n switch (checkNumberLength(nationalNumber, metadata)) {\n case 'IS_POSSIBLE':\n return true;\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n // \treturn !isInternational\n\n default:\n return false;\n }\n}\n//# sourceMappingURL=isPossible.js.map","// Copy-pasted from:\n// https://github.com/substack/semver-compare/blob/master/index.js\n//\n// Inlining this function because some users reported issues with\n// importing from `semver-compare` in a browser with ES6 \"native\" modules.\n//\n// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc \"tags\".\n// https://github.com/catamphetamine/libphonenumber-js/issues/381\nexport default function (a, b) {\n a = a.split('-');\n b = b.split('-');\n var pa = a[0].split('.');\n var pb = b[0].split('.');\n\n for (var i = 0; i < 3; i++) {\n var na = Number(pa[i]);\n var nb = Number(pb[i]);\n if (na > nb) return 1;\n if (nb > na) return -1;\n if (!isNaN(na) && isNaN(nb)) return 1;\n if (isNaN(na) && !isNaN(nb)) return -1;\n }\n\n if (a[1] && b[1]) {\n return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;\n }\n\n return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0;\n}\n//# sourceMappingURL=semver-compare.js.map","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport compare from './tools/semver-compare.js'; // Added \"possibleLengths\" and renamed\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\n\nvar V2 = '1.0.18'; // Added \"idd_prefix\" and \"default_idd_prefix\".\n\nvar V3 = '1.2.0'; // Moved `001` country code to \"nonGeographic\" section of metadata.\n\nvar V4 = '1.7.35';\nvar DEFAULT_EXT_PREFIX = ' ext. ';\nvar CALLING_CODE_REG_EXP = /^\\d+$/;\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\n\nvar Metadata = /*#__PURE__*/function () {\n function Metadata(metadata) {\n _classCallCheck(this, Metadata);\n\n validateMetadata(metadata);\n this.metadata = metadata;\n setVersion.call(this, metadata);\n }\n\n _createClass(Metadata, [{\n key: \"getCountries\",\n value: function getCountries() {\n return Object.keys(this.metadata.countries).filter(function (_) {\n return _ !== '001';\n });\n }\n }, {\n key: \"getCountryMetadata\",\n value: function getCountryMetadata(countryCode) {\n return this.metadata.countries[countryCode];\n }\n }, {\n key: \"nonGeographic\",\n value: function nonGeographic() {\n if (this.v1 || this.v2 || this.v3) return; // `nonGeographical` was a typo.\n // It's present in metadata generated from `1.7.35` to `1.7.37`.\n // The test case could be found by searching for \"nonGeographical\".\n\n return this.metadata.nonGeographic || this.metadata.nonGeographical;\n }\n }, {\n key: \"hasCountry\",\n value: function hasCountry(country) {\n return this.getCountryMetadata(country) !== undefined;\n }\n }, {\n key: \"hasCallingCode\",\n value: function hasCallingCode(callingCode) {\n if (this.getCountryCodesForCallingCode(callingCode)) {\n return true;\n }\n\n if (this.nonGeographic()) {\n if (this.nonGeographic()[callingCode]) {\n return true;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n var countryCodes = this.countryCallingCodes()[callingCode];\n\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return true;\n }\n }\n }\n }, {\n key: \"isNonGeographicCallingCode\",\n value: function isNonGeographicCallingCode(callingCode) {\n if (this.nonGeographic()) {\n return this.nonGeographic()[callingCode] ? true : false;\n } else {\n return this.getCountryCodesForCallingCode(callingCode) ? false : true;\n }\n } // Deprecated.\n\n }, {\n key: \"country\",\n value: function country(countryCode) {\n return this.selectNumberingPlan(countryCode);\n }\n }, {\n key: \"selectNumberingPlan\",\n value: function selectNumberingPlan(countryCode, callingCode) {\n // Supports just passing `callingCode` as the first argument.\n if (countryCode && CALLING_CODE_REG_EXP.test(countryCode)) {\n callingCode = countryCode;\n countryCode = null;\n }\n\n if (countryCode && countryCode !== '001') {\n if (!this.hasCountry(countryCode)) {\n throw new Error(\"Unknown country: \".concat(countryCode));\n }\n\n this.numberingPlan = new NumberingPlan(this.getCountryMetadata(countryCode), this);\n } else if (callingCode) {\n if (!this.hasCallingCode(callingCode)) {\n throw new Error(\"Unknown calling code: \".concat(callingCode));\n }\n\n this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this);\n } else {\n this.numberingPlan = undefined;\n }\n\n return this;\n }\n }, {\n key: \"getCountryCodesForCallingCode\",\n value: function getCountryCodesForCallingCode(callingCode) {\n var countryCodes = this.countryCallingCodes()[callingCode];\n\n if (countryCodes) {\n // Metadata before V4 included \"non-geographic entity\" calling codes\n // inside `country_calling_codes` (for example, `\"881\":[\"001\"]`).\n // Now the semantics of `country_calling_codes` has changed:\n // it's specifically for \"countries\" now.\n // Older versions of custom metadata will simply skip parsing\n // \"non-geographic entity\" phone numbers with new versions\n // of this library: it's not considered a bug,\n // because such numbers are extremely rare,\n // and developers extremely rarely use custom metadata.\n if (countryCodes.length === 1 && countryCodes[0].length === 3) {\n return;\n }\n\n return countryCodes;\n }\n }\n }, {\n key: \"getCountryCodeForCallingCode\",\n value: function getCountryCodeForCallingCode(callingCode) {\n var countryCodes = this.getCountryCodesForCallingCode(callingCode);\n\n if (countryCodes) {\n return countryCodes[0];\n }\n }\n }, {\n key: \"getNumberingPlanMetadata\",\n value: function getNumberingPlanMetadata(callingCode) {\n var countryCode = this.getCountryCodeForCallingCode(callingCode);\n\n if (countryCode) {\n return this.getCountryMetadata(countryCode);\n }\n\n if (this.nonGeographic()) {\n var metadata = this.nonGeographic()[callingCode];\n\n if (metadata) {\n return metadata;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n // In that metadata, there was no concept of \"non-geographic\" metadata\n // so metadata for `001` country code was stored along with other countries.\n // The test case can be found by searching for:\n // \"should work around `nonGeographic` metadata not existing\".\n var countryCodes = this.countryCallingCodes()[callingCode];\n\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return this.metadata.countries['001'];\n }\n }\n } // Deprecated.\n\n }, {\n key: \"countryCallingCode\",\n value: function countryCallingCode() {\n return this.numberingPlan.callingCode();\n } // Deprecated.\n\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n return this.numberingPlan.IDDPrefix();\n } // Deprecated.\n\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n return this.numberingPlan.defaultIDDPrefix();\n } // Deprecated.\n\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n return this.numberingPlan.nationalNumberPattern();\n } // Deprecated.\n\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n return this.numberingPlan.possibleLengths();\n } // Deprecated.\n\n }, {\n key: \"formats\",\n value: function formats() {\n return this.numberingPlan.formats();\n } // Deprecated.\n\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n return this.numberingPlan.nationalPrefixForParsing();\n } // Deprecated.\n\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.numberingPlan.nationalPrefixTransformRule();\n } // Deprecated.\n\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.numberingPlan.leadingDigits();\n } // Deprecated.\n\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n return this.numberingPlan.hasTypes();\n } // Deprecated.\n\n }, {\n key: \"type\",\n value: function type(_type) {\n return this.numberingPlan.type(_type);\n } // Deprecated.\n\n }, {\n key: \"ext\",\n value: function ext() {\n return this.numberingPlan.ext();\n }\n }, {\n key: \"countryCallingCodes\",\n value: function countryCallingCodes() {\n if (this.v1) return this.metadata.country_phone_code_to_countries;\n return this.metadata.country_calling_codes;\n } // Deprecated.\n\n }, {\n key: \"chooseCountryByCountryCallingCode\",\n value: function chooseCountryByCountryCallingCode(callingCode) {\n return this.selectNumberingPlan(callingCode);\n }\n }, {\n key: \"hasSelectedNumberingPlan\",\n value: function hasSelectedNumberingPlan() {\n return this.numberingPlan !== undefined;\n }\n }]);\n\n return Metadata;\n}();\n\nexport { Metadata as default };\n\nvar NumberingPlan = /*#__PURE__*/function () {\n function NumberingPlan(metadata, globalMetadataObject) {\n _classCallCheck(this, NumberingPlan);\n\n this.globalMetadataObject = globalMetadataObject;\n this.metadata = metadata;\n setVersion.call(this, globalMetadataObject.metadata);\n }\n\n _createClass(NumberingPlan, [{\n key: \"callingCode\",\n value: function callingCode() {\n return this.metadata[0];\n } // Formatting information for regions which share\n // a country calling code is contained by only one region\n // for performance reasons. For example, for NANPA region\n // (\"North American Numbering Plan Administration\",\n // which includes USA, Canada, Cayman Islands, Bahamas, etc)\n // it will be contained in the metadata for `US`.\n\n }, {\n key: \"getDefaultCountryMetadataForRegion\",\n value: function getDefaultCountryMetadataForRegion() {\n return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode());\n } // Is always present.\n\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[1];\n } // Is only present when a country supports multiple IDD prefixes.\n\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[12];\n }\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n if (this.v1 || this.v2) return this.metadata[1];\n return this.metadata[2];\n } // \"possible length\" data is always present in Google's metadata.\n\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.v1) return;\n return this.metadata[this.v2 ? 2 : 3];\n }\n }, {\n key: \"_getFormats\",\n value: function _getFormats(metadata) {\n return metadata[this.v1 ? 2 : this.v2 ? 3 : 4];\n } // For countries of the same region (e.g. NANPA)\n // formats are all stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n\n }, {\n key: \"formats\",\n value: function formats() {\n var _this = this;\n\n var formats = this._getFormats(this.metadata) || this._getFormats(this.getDefaultCountryMetadataForRegion()) || [];\n return formats.map(function (_) {\n return new Format(_, _this);\n });\n }\n }, {\n key: \"nationalPrefix\",\n value: function nationalPrefix() {\n return this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5];\n }\n }, {\n key: \"_getNationalPrefixFormattingRule\",\n value: function _getNationalPrefixFormattingRule(metadata) {\n return metadata[this.v1 ? 4 : this.v2 ? 5 : 6];\n } // For countries of the same region (e.g. NANPA)\n // national prefix formatting rule is stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"_nationalPrefixForParsing\",\n value: function _nationalPrefixForParsing() {\n return this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7];\n }\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n // If `national_prefix_for_parsing` is not set explicitly,\n // then infer it from `national_prefix` (if any)\n return this._nationalPrefixForParsing() || this.nationalPrefix();\n }\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8];\n }\n }, {\n key: \"_getNationalPrefixIsOptionalWhenFormatting\",\n value: function _getNationalPrefixIsOptionalWhenFormatting() {\n return !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9];\n } // For countries of the same region (e.g. NANPA)\n // \"national prefix is optional when formatting\" flag is\n // stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) || this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10];\n }\n }, {\n key: \"types\",\n value: function types() {\n return this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11];\n }\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n // Versions 1.2.0 - 1.2.4: can be `[]`.\n\n /* istanbul ignore next */\n if (this.types() && this.types().length === 0) {\n return false;\n } // Versions <= 1.2.4: can be `undefined`.\n // Version >= 1.2.5: can be `0`.\n\n\n return !!this.types();\n }\n }, {\n key: \"type\",\n value: function type(_type2) {\n if (this.hasTypes() && getType(this.types(), _type2)) {\n return new Type(getType(this.types(), _type2), this);\n }\n }\n }, {\n key: \"ext\",\n value: function ext() {\n if (this.v1 || this.v2) return DEFAULT_EXT_PREFIX;\n return this.metadata[13] || DEFAULT_EXT_PREFIX;\n }\n }]);\n\n return NumberingPlan;\n}();\n\nvar Format = /*#__PURE__*/function () {\n function Format(format, metadata) {\n _classCallCheck(this, Format);\n\n this._format = format;\n this.metadata = metadata;\n }\n\n _createClass(Format, [{\n key: \"pattern\",\n value: function pattern() {\n return this._format[0];\n }\n }, {\n key: \"format\",\n value: function format() {\n return this._format[1];\n }\n }, {\n key: \"leadingDigitsPatterns\",\n value: function leadingDigitsPatterns() {\n return this._format[2] || [];\n }\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._format[3] || this.metadata.nationalPrefixFormattingRule();\n }\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n }, {\n key: \"nationalPrefixIsMandatoryWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsMandatoryWhenFormattingInNationalFormat() {\n // National prefix is omitted if there's no national prefix formatting rule\n // set for this country, or when the national prefix formatting rule\n // contains no national prefix itself, or when this rule is set but\n // national prefix is optional for this phone number format\n // (and it is not enforced explicitly)\n return this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n } // Checks whether national prefix formatting rule contains national prefix.\n\n }, {\n key: \"usesNationalPrefix\",\n value: function usesNationalPrefix() {\n return this.nationalPrefixFormattingRule() && // Check that national prefix formatting rule is not a \"dummy\" one.\n !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule()) // In compressed metadata, `this.nationalPrefixFormattingRule()` is `0`\n // when `national_prefix_formatting_rule` is not present.\n // So, `true` or `false` are returned explicitly here, so that\n // `0` number isn't returned.\n ? true : false;\n }\n }, {\n key: \"internationalFormat\",\n value: function internationalFormat() {\n return this._format[5] || this.format();\n }\n }]);\n\n return Format;\n}();\n/**\r\n * A pattern that is used to determine if the national prefix formatting rule\r\n * has the first group only, i.e., does not start with the national prefix.\r\n * Note that the pattern explicitly allows for unbalanced parentheses.\r\n */\n\n\nvar FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/;\n\nvar Type = /*#__PURE__*/function () {\n function Type(type, metadata) {\n _classCallCheck(this, Type);\n\n this.type = type;\n this.metadata = metadata;\n }\n\n _createClass(Type, [{\n key: \"pattern\",\n value: function pattern() {\n if (this.metadata.v1) return this.type;\n return this.type[0];\n }\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.metadata.v1) return;\n return this.type[1] || this.metadata.possibleLengths();\n }\n }]);\n\n return Type;\n}();\n\nfunction getType(types, type) {\n switch (type) {\n case 'FIXED_LINE':\n return types[0];\n\n case 'MOBILE':\n return types[1];\n\n case 'TOLL_FREE':\n return types[2];\n\n case 'PREMIUM_RATE':\n return types[3];\n\n case 'PERSONAL_NUMBER':\n return types[4];\n\n case 'VOICEMAIL':\n return types[5];\n\n case 'UAN':\n return types[6];\n\n case 'PAGER':\n return types[7];\n\n case 'VOIP':\n return types[8];\n\n case 'SHARED_COST':\n return types[9];\n }\n}\n\nexport function validateMetadata(metadata) {\n if (!metadata) {\n throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n } // `country_phone_code_to_countries` was renamed to\n // `country_calling_codes` in `1.0.18`.\n\n\n if (!is_object(metadata) || !is_object(metadata.countries)) {\n throw new Error(\"[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got \".concat(is_object(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + type_of(metadata) + ': ' + metadata, \".\"));\n }\n} // Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n\n/* istanbul ignore next */\n\nvar is_object = function is_object(_) {\n return _typeof(_) === 'object';\n}; // Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n\n/* istanbul ignore next */\n\n\nvar type_of = function type_of(_) {\n return _typeof(_);\n};\n/**\r\n * Returns extension prefix for a country.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string?}\r\n * @example\r\n * // Returns \" ext. \"\r\n * getExtPrefix(\"US\")\r\n */\n\n\nexport function getExtPrefix(country, metadata) {\n metadata = new Metadata(metadata);\n\n if (metadata.hasCountry(country)) {\n return metadata.country(country).ext();\n }\n\n return DEFAULT_EXT_PREFIX;\n}\n/**\r\n * Returns \"country calling code\" for a country.\r\n * Throws an error if the country doesn't exist or isn't supported by this library.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string}\r\n * @example\r\n * // Returns \"44\"\r\n * getCountryCallingCode(\"GB\")\r\n */\n\nexport function getCountryCallingCode(country, metadata) {\n metadata = new Metadata(metadata);\n\n if (metadata.hasCountry(country)) {\n return metadata.country(country).countryCallingCode();\n }\n\n throw new Error(\"Unknown country: \".concat(country));\n}\nexport function isSupportedCountry(country, metadata) {\n // metadata = new Metadata(metadata)\n // return metadata.hasCountry(country)\n return metadata.countries[country] !== undefined;\n}\n\nfunction setVersion(metadata) {\n var version = metadata.version;\n\n if (typeof version === 'number') {\n this.v1 = version === 1;\n this.v2 = version === 2;\n this.v3 = version === 3;\n this.v4 = version === 4;\n } else {\n if (!version) {\n this.v1 = true;\n } else if (compare(version, V3) === -1) {\n this.v2 = true;\n } else if (compare(version, V4) === -1) {\n this.v3 = true;\n } else {\n this.v4 = true;\n }\n }\n} // const ISO_COUNTRY_CODE = /^[A-Z]{2}$/\n// function isCountryCode(countryCode) {\n// \treturn ISO_COUNTRY_CODE.test(countryCodeOrCountryCallingCode)\n// }\n//# sourceMappingURL=metadata.js.map","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"AC\":\"40123\",\"AD\":\"312345\",\"AE\":\"501234567\",\"AF\":\"701234567\",\"AG\":\"2684641234\",\"AI\":\"2642351234\",\"AL\":\"672123456\",\"AM\":\"77123456\",\"AO\":\"923123456\",\"AR\":\"91123456789\",\"AS\":\"6847331234\",\"AT\":\"664123456\",\"AU\":\"412345678\",\"AW\":\"5601234\",\"AX\":\"412345678\",\"AZ\":\"401234567\",\"BA\":\"61123456\",\"BB\":\"2462501234\",\"BD\":\"1812345678\",\"BE\":\"470123456\",\"BF\":\"70123456\",\"BG\":\"43012345\",\"BH\":\"36001234\",\"BI\":\"79561234\",\"BJ\":\"90011234\",\"BL\":\"690001234\",\"BM\":\"4413701234\",\"BN\":\"7123456\",\"BO\":\"71234567\",\"BQ\":\"3181234\",\"BR\":\"11961234567\",\"BS\":\"2423591234\",\"BT\":\"17123456\",\"BW\":\"71123456\",\"BY\":\"294911911\",\"BZ\":\"6221234\",\"CA\":\"5062345678\",\"CC\":\"412345678\",\"CD\":\"991234567\",\"CF\":\"70012345\",\"CG\":\"061234567\",\"CH\":\"781234567\",\"CI\":\"0123456789\",\"CK\":\"71234\",\"CL\":\"221234567\",\"CM\":\"671234567\",\"CN\":\"13123456789\",\"CO\":\"3211234567\",\"CR\":\"83123456\",\"CU\":\"51234567\",\"CV\":\"9911234\",\"CW\":\"95181234\",\"CX\":\"412345678\",\"CY\":\"96123456\",\"CZ\":\"601123456\",\"DE\":\"15123456789\",\"DJ\":\"77831001\",\"DK\":\"32123456\",\"DM\":\"7672251234\",\"DO\":\"8092345678\",\"DZ\":\"551234567\",\"EC\":\"991234567\",\"EE\":\"51234567\",\"EG\":\"1001234567\",\"EH\":\"650123456\",\"ER\":\"7123456\",\"ES\":\"612345678\",\"ET\":\"911234567\",\"FI\":\"412345678\",\"FJ\":\"7012345\",\"FK\":\"51234\",\"FM\":\"3501234\",\"FO\":\"211234\",\"FR\":\"612345678\",\"GA\":\"06031234\",\"GB\":\"7400123456\",\"GD\":\"4734031234\",\"GE\":\"555123456\",\"GF\":\"694201234\",\"GG\":\"7781123456\",\"GH\":\"231234567\",\"GI\":\"57123456\",\"GL\":\"221234\",\"GM\":\"3012345\",\"GN\":\"601123456\",\"GP\":\"690001234\",\"GQ\":\"222123456\",\"GR\":\"6912345678\",\"GT\":\"51234567\",\"GU\":\"6713001234\",\"GW\":\"955012345\",\"GY\":\"6091234\",\"HK\":\"51234567\",\"HN\":\"91234567\",\"HR\":\"921234567\",\"HT\":\"34101234\",\"HU\":\"201234567\",\"ID\":\"812345678\",\"IE\":\"850123456\",\"IL\":\"502345678\",\"IM\":\"7924123456\",\"IN\":\"8123456789\",\"IO\":\"3801234\",\"IQ\":\"7912345678\",\"IR\":\"9123456789\",\"IS\":\"6111234\",\"IT\":\"3123456789\",\"JE\":\"7797712345\",\"JM\":\"8762101234\",\"JO\":\"790123456\",\"JP\":\"9012345678\",\"KE\":\"712123456\",\"KG\":\"700123456\",\"KH\":\"91234567\",\"KI\":\"72001234\",\"KM\":\"3212345\",\"KN\":\"8697652917\",\"KP\":\"1921234567\",\"KR\":\"1020000000\",\"KW\":\"50012345\",\"KY\":\"3453231234\",\"KZ\":\"7710009998\",\"LA\":\"2023123456\",\"LB\":\"71123456\",\"LC\":\"7582845678\",\"LI\":\"660234567\",\"LK\":\"712345678\",\"LR\":\"770123456\",\"LS\":\"50123456\",\"LT\":\"61234567\",\"LU\":\"628123456\",\"LV\":\"21234567\",\"LY\":\"912345678\",\"MA\":\"650123456\",\"MC\":\"612345678\",\"MD\":\"62112345\",\"ME\":\"67622901\",\"MF\":\"690001234\",\"MG\":\"321234567\",\"MH\":\"2351234\",\"MK\":\"72345678\",\"ML\":\"65012345\",\"MM\":\"92123456\",\"MN\":\"88123456\",\"MO\":\"66123456\",\"MP\":\"6702345678\",\"MQ\":\"696201234\",\"MR\":\"22123456\",\"MS\":\"6644923456\",\"MT\":\"96961234\",\"MU\":\"52512345\",\"MV\":\"7712345\",\"MW\":\"991234567\",\"MX\":\"12221234567\",\"MY\":\"123456789\",\"MZ\":\"821234567\",\"NA\":\"811234567\",\"NC\":\"751234\",\"NE\":\"93123456\",\"NF\":\"381234\",\"NG\":\"8021234567\",\"NI\":\"81234567\",\"NL\":\"612345678\",\"NO\":\"40612345\",\"NP\":\"9841234567\",\"NR\":\"5551234\",\"NU\":\"8884012\",\"NZ\":\"211234567\",\"OM\":\"92123456\",\"PA\":\"61234567\",\"PE\":\"912345678\",\"PF\":\"87123456\",\"PG\":\"70123456\",\"PH\":\"9051234567\",\"PK\":\"3012345678\",\"PL\":\"512345678\",\"PM\":\"551234\",\"PR\":\"7872345678\",\"PS\":\"599123456\",\"PT\":\"912345678\",\"PW\":\"6201234\",\"PY\":\"961456789\",\"QA\":\"33123456\",\"RE\":\"692123456\",\"RO\":\"712034567\",\"RS\":\"601234567\",\"RU\":\"9123456789\",\"RW\":\"720123456\",\"SA\":\"512345678\",\"SB\":\"7421234\",\"SC\":\"2510123\",\"SD\":\"911231234\",\"SE\":\"701234567\",\"SG\":\"81234567\",\"SH\":\"51234\",\"SI\":\"31234567\",\"SJ\":\"41234567\",\"SK\":\"912123456\",\"SL\":\"25123456\",\"SM\":\"66661212\",\"SN\":\"701234567\",\"SO\":\"71123456\",\"SR\":\"7412345\",\"SS\":\"977123456\",\"ST\":\"9812345\",\"SV\":\"70123456\",\"SX\":\"7215205678\",\"SY\":\"944567890\",\"SZ\":\"76123456\",\"TA\":\"8999\",\"TC\":\"6492311234\",\"TD\":\"63012345\",\"TG\":\"90112345\",\"TH\":\"812345678\",\"TJ\":\"917123456\",\"TK\":\"7290\",\"TL\":\"77212345\",\"TM\":\"66123456\",\"TN\":\"20123456\",\"TO\":\"7715123\",\"TR\":\"5012345678\",\"TT\":\"8682911234\",\"TV\":\"901234\",\"TW\":\"912345678\",\"TZ\":\"621234567\",\"UA\":\"501234567\",\"UG\":\"712345678\",\"US\":\"2015550123\",\"UY\":\"94231234\",\"UZ\":\"912345678\",\"VA\":\"3123456789\",\"VC\":\"7844301234\",\"VE\":\"4121234567\",\"VG\":\"2843001234\",\"VI\":\"3406421234\",\"VN\":\"912345678\",\"VU\":\"5912345\",\"WF\":\"821234\",\"WS\":\"7212345\",\"XK\":\"43201234\",\"YE\":\"712345678\",\"YT\":\"639012345\",\"ZA\":\"711234567\",\"ZM\":\"955123456\",\"ZW\":\"712345678\"}","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"version\":4,\"country_calling_codes\":{\"1\":[\"US\",\"AG\",\"AI\",\"AS\",\"BB\",\"BM\",\"BS\",\"CA\",\"DM\",\"DO\",\"GD\",\"GU\",\"JM\",\"KN\",\"KY\",\"LC\",\"MP\",\"MS\",\"PR\",\"SX\",\"TC\",\"TT\",\"VC\",\"VG\",\"VI\"],\"7\":[\"RU\",\"KZ\"],\"20\":[\"EG\"],\"27\":[\"ZA\"],\"30\":[\"GR\"],\"31\":[\"NL\"],\"32\":[\"BE\"],\"33\":[\"FR\"],\"34\":[\"ES\"],\"36\":[\"HU\"],\"39\":[\"IT\",\"VA\"],\"40\":[\"RO\"],\"41\":[\"CH\"],\"43\":[\"AT\"],\"44\":[\"GB\",\"GG\",\"IM\",\"JE\"],\"45\":[\"DK\"],\"46\":[\"SE\"],\"47\":[\"NO\",\"SJ\"],\"48\":[\"PL\"],\"49\":[\"DE\"],\"51\":[\"PE\"],\"52\":[\"MX\"],\"53\":[\"CU\"],\"54\":[\"AR\"],\"55\":[\"BR\"],\"56\":[\"CL\"],\"57\":[\"CO\"],\"58\":[\"VE\"],\"60\":[\"MY\"],\"61\":[\"AU\",\"CC\",\"CX\"],\"62\":[\"ID\"],\"63\":[\"PH\"],\"64\":[\"NZ\"],\"65\":[\"SG\"],\"66\":[\"TH\"],\"81\":[\"JP\"],\"82\":[\"KR\"],\"84\":[\"VN\"],\"86\":[\"CN\"],\"90\":[\"TR\"],\"91\":[\"IN\"],\"92\":[\"PK\"],\"93\":[\"AF\"],\"94\":[\"LK\"],\"95\":[\"MM\"],\"98\":[\"IR\"],\"211\":[\"SS\"],\"212\":[\"MA\",\"EH\"],\"213\":[\"DZ\"],\"216\":[\"TN\"],\"218\":[\"LY\"],\"220\":[\"GM\"],\"221\":[\"SN\"],\"222\":[\"MR\"],\"223\":[\"ML\"],\"224\":[\"GN\"],\"225\":[\"CI\"],\"226\":[\"BF\"],\"227\":[\"NE\"],\"228\":[\"TG\"],\"229\":[\"BJ\"],\"230\":[\"MU\"],\"231\":[\"LR\"],\"232\":[\"SL\"],\"233\":[\"GH\"],\"234\":[\"NG\"],\"235\":[\"TD\"],\"236\":[\"CF\"],\"237\":[\"CM\"],\"238\":[\"CV\"],\"239\":[\"ST\"],\"240\":[\"GQ\"],\"241\":[\"GA\"],\"242\":[\"CG\"],\"243\":[\"CD\"],\"244\":[\"AO\"],\"245\":[\"GW\"],\"246\":[\"IO\"],\"247\":[\"AC\"],\"248\":[\"SC\"],\"249\":[\"SD\"],\"250\":[\"RW\"],\"251\":[\"ET\"],\"252\":[\"SO\"],\"253\":[\"DJ\"],\"254\":[\"KE\"],\"255\":[\"TZ\"],\"256\":[\"UG\"],\"257\":[\"BI\"],\"258\":[\"MZ\"],\"260\":[\"ZM\"],\"261\":[\"MG\"],\"262\":[\"RE\",\"YT\"],\"263\":[\"ZW\"],\"264\":[\"NA\"],\"265\":[\"MW\"],\"266\":[\"LS\"],\"267\":[\"BW\"],\"268\":[\"SZ\"],\"269\":[\"KM\"],\"290\":[\"SH\",\"TA\"],\"291\":[\"ER\"],\"297\":[\"AW\"],\"298\":[\"FO\"],\"299\":[\"GL\"],\"350\":[\"GI\"],\"351\":[\"PT\"],\"352\":[\"LU\"],\"353\":[\"IE\"],\"354\":[\"IS\"],\"355\":[\"AL\"],\"356\":[\"MT\"],\"357\":[\"CY\"],\"358\":[\"FI\",\"AX\"],\"359\":[\"BG\"],\"370\":[\"LT\"],\"371\":[\"LV\"],\"372\":[\"EE\"],\"373\":[\"MD\"],\"374\":[\"AM\"],\"375\":[\"BY\"],\"376\":[\"AD\"],\"377\":[\"MC\"],\"378\":[\"SM\"],\"380\":[\"UA\"],\"381\":[\"RS\"],\"382\":[\"ME\"],\"383\":[\"XK\"],\"385\":[\"HR\"],\"386\":[\"SI\"],\"387\":[\"BA\"],\"389\":[\"MK\"],\"420\":[\"CZ\"],\"421\":[\"SK\"],\"423\":[\"LI\"],\"500\":[\"FK\"],\"501\":[\"BZ\"],\"502\":[\"GT\"],\"503\":[\"SV\"],\"504\":[\"HN\"],\"505\":[\"NI\"],\"506\":[\"CR\"],\"507\":[\"PA\"],\"508\":[\"PM\"],\"509\":[\"HT\"],\"590\":[\"GP\",\"BL\",\"MF\"],\"591\":[\"BO\"],\"592\":[\"GY\"],\"593\":[\"EC\"],\"594\":[\"GF\"],\"595\":[\"PY\"],\"596\":[\"MQ\"],\"597\":[\"SR\"],\"598\":[\"UY\"],\"599\":[\"CW\",\"BQ\"],\"670\":[\"TL\"],\"672\":[\"NF\"],\"673\":[\"BN\"],\"674\":[\"NR\"],\"675\":[\"PG\"],\"676\":[\"TO\"],\"677\":[\"SB\"],\"678\":[\"VU\"],\"679\":[\"FJ\"],\"680\":[\"PW\"],\"681\":[\"WF\"],\"682\":[\"CK\"],\"683\":[\"NU\"],\"685\":[\"WS\"],\"686\":[\"KI\"],\"687\":[\"NC\"],\"688\":[\"TV\"],\"689\":[\"PF\"],\"690\":[\"TK\"],\"691\":[\"FM\"],\"692\":[\"MH\"],\"850\":[\"KP\"],\"852\":[\"HK\"],\"853\":[\"MO\"],\"855\":[\"KH\"],\"856\":[\"LA\"],\"880\":[\"BD\"],\"886\":[\"TW\"],\"960\":[\"MV\"],\"961\":[\"LB\"],\"962\":[\"JO\"],\"963\":[\"SY\"],\"964\":[\"IQ\"],\"965\":[\"KW\"],\"966\":[\"SA\"],\"967\":[\"YE\"],\"968\":[\"OM\"],\"970\":[\"PS\"],\"971\":[\"AE\"],\"972\":[\"IL\"],\"973\":[\"BH\"],\"974\":[\"QA\"],\"975\":[\"BT\"],\"976\":[\"MN\"],\"977\":[\"NP\"],\"992\":[\"TJ\"],\"993\":[\"TM\"],\"994\":[\"AZ\"],\"995\":[\"GE\"],\"996\":[\"KG\"],\"998\":[\"UZ\"]},\"countries\":{\"AC\":[\"247\",\"00\",\"(?:[01589]\\\\d|[46])\\\\d{4}\",[5,6],0,0,0,0,0,0,0,[0,[\"4\\\\d{4}\",[5]]]],\"AD\":[\"376\",\"00\",\"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\",[6,8,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[135-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"690\\\\d{6}|[356]\\\\d{5}\",[6,9]]]],\"AE\":[\"971\",\"00\",\"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{2,9})\",\"$1 $2\",[\"60|8\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[236]|[479][2-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{5})\",\"$1 $2 $3\",[\"[479]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5[024-68]\\\\d{7}\",[9]]]],\"AF\":[\"93\",\"00\",\"[2-7]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7\\\\d{8}\"]]],\"AG\":[\"1\",\"011\",\"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([457]\\\\d{6})$|1\",\"268$1\",0,\"268\",[0,[\"268(?:464|7(?:1[3-9]|[28]\\\\d|3[0246]|64|7[0-689]))\\\\d{4}\"]]],\"AI\":[\"1\",\"011\",\"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2457]\\\\d{6})$|1\",\"264$1\",0,\"264\",[0,[\"264(?:235|4(?:69|76)|5(?:3[6-9]|8[1-4])|7(?:29|72))\\\\d{4}\"]]],\"AL\":[\"355\",\"00\",\"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\",[6,7,8,9],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"80|9\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2358][2-5]|4\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[23578]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[78][2-9]|9\\\\d)\\\\d{6}\",[9]]]],\"AM\":[\"374\",\"00\",\"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]0\"],\"0 $1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2|3[12]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"1|47\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[3-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:33|4[1349]|55|77|88|9[13-9])\\\\d{6}\"]]],\"AO\":[\"244\",\"00\",\"[29]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"9[1-59]\\\\d{7}\"]]],\"AR\":[\"54\",\"00\",\"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\",[10,11],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2-$3\",[\"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"1\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[68]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[23]\"],\"0$1\",1],[\"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9(?:2[2-469]|3[3-578])\",\"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 15-$3-$4\",[\"91\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9\"],\"0$1\",0,\"$1 $2 $3-$4\"]],\"0\",0,\"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\"9$1\",0,0,[0,[\"93(?:7(?:1[15]|81)[46]|8(?:(?:21|4[16]|69|9[12])[46]|88[013-9]))\\\\d{5}|9(?:29(?:54|66)|3(?:7(?:55|77)|865))[2-8]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|473|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:284|3(?:02|23)|657|920)|3(?:4(?:8[27]|92)|541|878))[2-7]\\\\d{5}|9(?:2(?:(?:26|62)2|320|477|9(?:42|83))|3(?:329|4(?:[47]6|62|89)|564))[2-6]\\\\d{5}|(?:675\\\\d|9(?:11[1-8]\\\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-7]|[235][4-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|[17][2-6]|3[4-6]|[58][3-6]))))\\\\d{6}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|475|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:2(?:57|81)|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|71)|5(?:25|37|4[347]|71)|7(?:18|5[17])))[3-6]\\\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[03-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[145]|4[13]|5[468]|7[2-5]|8[26])|8(?:2[5-7]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\"]]],\"AS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\",[10],0,\"1\",0,\"([267]\\\\d{6})$|1\",\"684$1\",0,\"684\",[0,[\"684(?:2(?:48|5[2468]|7[26])|7(?:3[13]|70|82))\\\\d{4}\"]]],\"AT\":[\"43\",\"00\",\"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{3,12})\",\"$1 $2\",[\"1(?:11|[2-9])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})\",\"$1 $2\",[\"517\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"5[079]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,10})\",\"$1 $2\",[\"(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,9})\",\"$1 $2\",[\"[2-467]|5[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d{4,10}\",[7,8,9,10,11,12,13]]]],\"AU\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\",[5,6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"16\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"16\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"14|4\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[2378]\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:30|[89])\"]]],\"0\",0,\"(183[12])|0\",0,0,0,[0,[\"4(?:(?:79|94)[01]|83[0-389])\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\\\d{6}\",[9]]],\"0011\"],\"AW\":[\"297\",\"00\",\"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[25-9]\"]]],0,0,0,0,0,0,[0,[\"(?:290|5[69]\\\\d|6(?:[03]0|22|4[0-2]|[69]\\\\d)|7(?:[34]\\\\d|7[07])|9(?:6[45]|9[4-8]))\\\\d{4}\"]]],\"AX\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\",[5,6,7,8,9,10,11,12],0,\"0\",0,0,0,0,\"18\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"AZ\":[\"994\",\"00\",\"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[28]|2|365|46\",\"1[28]|2|365[45]|46\",\"1[28]|2|365(?:4|5[02])|46\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[13-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"36554\\\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\\\d{7}\"]]],\"BA\":[\"387\",\"00\",\"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[1-3]|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2-$3\",[\"[3-5]|6[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6040\\\\d{5}|6(?:03|[1-356]|44|7\\\\d)\\\\d{6}\"]]],\"BB\":[\"1\",\"011\",\"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"246$1\",0,\"246\",[0,[\"246(?:(?:2(?:[3568]\\\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\\\d)|69[5-7]|8(?:[2-5]\\\\d|83))\\\\d|52(?:1[147]|20))\\\\d{3}\"]]],\"BD\":[\"880\",\"00\",\"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1-$2\",[\"31[5-8]|[459]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1-$2\",[\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:28|4[14]|5)|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,6})\",\"$1-$2\",[\"[13-9]|22\"],\"0$1\"],[\"(\\\\d)(\\\\d{7,8})\",\"$1-$2\",[\"2\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[13-9]\\\\d|644)\\\\d{7}|(?:3[78]|44|66)[02-9]\\\\d{7}\",[10]]]],\"BE\":[\"32\",\"00\",\"4\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:80|9)0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[239]|4[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[15-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[5-9]\\\\d{7}\",[9]]]],\"BF\":[\"226\",\"00\",\"[025-7]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[025-7]\"]]],0,0,0,0,0,0,[0,[\"(?:0[1-35-7]|5[1-8]|[67]\\\\d)\\\\d{6}\"]]],\"BG\":[\"359\",\"00\",\"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",[6,7,8,9,12],[[\"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"43[1-6]|70[1-9]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:70|8)0\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"43[1-7]|7\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[48]|9[08]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:43[07-9]|99[69]\\\\d)\\\\d{5}|(?:8[7-9]|98)\\\\d{7}\",[8,9]]]],\"BH\":[\"973\",\"00\",\"[136-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[13679]|8[047]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[1-79]\\\\d|8[0-47-9])\\\\d|6(?:3(?:00|33|6[16])|6(?:3[03-9]|[69]\\\\d|7[0-6])))\\\\d{4}\"]]],\"BI\":[\"257\",\"00\",\"(?:[267]\\\\d|31)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2367]\"]]],0,0,0,0,0,0,[0,[\"(?:29|[67][125-9])\\\\d{6}\"]]],\"BJ\":[\"229\",\"00\",\"[24-689]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-689]\"]]],0,0,0,0,0,0,[0,[\"(?:4[0-356]|[56]\\\\d|9[013-9])\\\\d{6}\"]]],\"BL\":[\"590\",\"00\",\"590\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))\\\\d{4}\"]]],\"BM\":[\"1\",\"011\",\"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"441$1\",0,\"441\",[0,[\"441(?:[2378]\\\\d|5[0-39]|92)\\\\d{5}\"]]],\"BN\":[\"673\",\"00\",\"[2-578]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"(?:22[89]|[78]\\\\d\\\\d)\\\\d{4}\"]]],\"BO\":[\"591\",\"00(?:1\\\\d)?\",\"(?:[2-467]\\\\d\\\\d|8001)\\\\d{5}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[23]|4[46]\"]],[\"(\\\\d{8})\",\"$1\",[\"[67]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,\"0(1\\\\d)?\",0,0,0,[0,[\"[67]\\\\d{7}\",[8]]]],\"BQ\":[\"599\",\"00\",\"(?:[34]1|7\\\\d)\\\\d{5}\",[7],0,0,0,0,0,0,\"[347]\",[0,[\"(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\"]]],\"BR\":[\"55\",\"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\",\"(?:[1-46-9]\\\\d\\\\d|5(?:[0-46-9]\\\\d|5[0-46-9]))\\\\d{8}|[1-9]\\\\d{9}|[3589]\\\\d{8}|[34]\\\\d{7}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37)\",\"4(?:02|37)0|[34]00\"]],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:[358]|90)0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1 $2-$3\",[\"[16][1-9]|[2-57-9]\"],\"($1)\"]],\"0\",0,\"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\",\"$2\",0,0,[0,[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\\\d)\\\\d{7}\",[10,11]]]],\"BS\":[\"1\",\"011\",\"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([3-8]\\\\d{6})$|1\",\"242$1\",0,\"242\",[0,[\"242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\\\d|[89]9))\\\\d{4}\"]]],\"BT\":[\"975\",\"00\",\"[17]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-68]|7[246]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|7\"]]],0,0,0,0,0,0,[0,[\"(?:1[67]|77)\\\\d{6}\",[8]]]],\"BW\":[\"267\",\"00\",\"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-6]|3[15-79]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:321|7(?:[1-7]\\\\d|8[0-4]))\\\\d{5}\",[8]]]],\"BY\":[\"375\",\"810\",\"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"800\"],\"8 $1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\",\"$1 $2 $3\",[\"800\"],\"8 $1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{3})\",\"$1 $2-$3\",[\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\",\"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"1(?:[56]|7[467])|2[1-3]\"],\"8 0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-4]\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"8 $1\"]],\"8\",0,\"0|80?\",0,0,0,[0,[\"(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\\\d)\\\\d{6}\",[9]]],\"8~10\"],\"BZ\":[\"501\",\"00\",\"(?:0800\\\\d|[2-8])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-8]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"6[0-35-7]\\\\d{5}\",[7]]]],\"CA\":[\"1\",\"011\",\"(?:[2-8]\\\\d|90)\\\\d{8}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[0,[\"(?:2(?:04|[23]6|[48]9|50|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\\\d{6}\",[10]]]],\"CC\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:(?:79|94)[01]|83[0-389])\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\\\d{6}\",[9]]],\"0011\"],\"CD\":[\"243\",\"00\",\"[189]\\\\d{8}|[1-68]\\\\d{6}\",[7,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[1-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"88\\\\d{5}|(?:8[0-59]|9[017-9])\\\\d{7}\"]]],\"CF\":[\"236\",\"00\",\"(?:[27]\\\\d{3}|8776)\\\\d{4}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[278]\"]]],0,0,0,0,0,0,[0,[\"7[024-7]\\\\d{6}\"]]],\"CG\":[\"242\",\"00\",\"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[02]\"]]],0,0,0,0,0,0,[0,[\"026(?:1[0-5]|6[6-9])\\\\d{4}|0(?:[14-6]\\\\d\\\\d|2(?:40|5[5-8]|6[07-9]))\\\\d{5}\"]]],\"CH\":[\"41\",\"00\",\"8\\\\d{11}|[2-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8[047]|90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]|81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[35-9]\\\\d{7}\"]]],\"CI\":[\"225\",\"00\",\"[02]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\",\"$1 $2 $3 $4\",[\"2\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"0[157]\\\\d{8}\"]]],\"CK\":[\"682\",\"00\",\"[2-578]\\\\d{4}\",[5],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"[578]\\\\d{4}\"]]],\"CL\":[\"56\",\"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\",\"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\",[9,10,11],[[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"219\",\"2196\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[1-36]\"],\"($1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"9[2-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-9]|[1-9])\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"60|8\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"60\"]]],0,0,0,0,0,0,[0,[\"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:2\\\\d\\\\d|3(?:[03467]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-3])|600)|646[59])|80[1-9]\\\\d\\\\d|9(?:3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|7[1-9]\\\\d\\\\d|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\",[9]]]],\"CM\":[\"237\",\"00\",\"[26]\\\\d{8}|88\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"88\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[26]|88\"]]],0,0,0,0,0,0,[0,[\"(?:24[23]|6[25-9]\\\\d)\\\\d{6}\",[9]]]],\"CN\":[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"1[127]\\\\d{8,9}|2\\\\d{9}(?:\\\\d{2})?|[12]\\\\d{6,7}|86\\\\d{6}|(?:1[03-689]\\\\d|6)\\\\d{7,9}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{6,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]\",\"(?:10|2[0-57-9])(?:10|9[56])\",\"10(?:10|9[56])|2[0-57-9](?:100|9[56])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:4|80)0\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|2(?:[02-57-9]|1[1-9])\",\"10|2(?:[02-57-9]|1[1-9])\",\"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-578]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"1[3-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"[12]\"],\"0$1\",1]],\"0\",0,\"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\",0,0,0,[0,[\"1740[0-5]\\\\d{6}|1(?:[38]\\\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\\\d{8}\",[11]]],\"00\"],\"CO\":[\"57\",\"00(?:4(?:[14]4|56)|[579])\",\"(?:60\\\\d\\\\d|9101)\\\\d{6}|(?:1\\\\d|3)\\\\d{9}\",[10,11],[[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|91\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0(4(?:[14]4|56)|[579])?\",0,0,0,[0,[\"3333(?:0(?:0\\\\d|1[0-5])|[4-9]\\\\d\\\\d)\\\\d{3}|(?:3(?:24[1-9]|3(?:00|3[0-24-9]))|9101)\\\\d{6}|3(?:0[0-5]|1\\\\d|2[0-3]|5[01]|70)\\\\d{7}\",[10]]]],\"CR\":[\"506\",\"00\",\"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\",[8,10],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[3-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[89]\"]]],0,0,\"(19(?:0[0-2468]|1[09]|20|66|77|99))\",0,0,0,[0,[\"(?:3005\\\\d|6500[01])\\\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\\\d{6}\",[8]]]],\"CU\":[\"53\",\"119\",\"[27]\\\\d{6,7}|[34]\\\\d{5,7}|(?:5|8\\\\d\\\\d)\\\\d{7}\",[6,7,8,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"2[1-4]|[34]\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{6,7})\",\"$1 $2\",[\"7\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"5\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5\\\\d{7}\",[8]]]],\"CV\":[\"238\",\"0\",\"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:36|5[1-389]|9\\\\d)\\\\d{5}\"]]],\"CW\":[\"599\",\"00\",\"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[3467]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9[4-8]\"]]],0,0,0,0,0,\"[69]\",[0,[\"953[01]\\\\d{4}|9(?:5[12467]|6[5-9])\\\\d{5}\"]]],\"CX\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:(?:79|94)[01]|83[0-389])\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\\\d{6}\",[9]]],\"0011\"],\"CY\":[\"357\",\"00\",\"(?:[279]\\\\d|[58]0)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[257-9]\"]]],0,0,0,0,0,0,[0,[\"9(?:10|[4-79]\\\\d)\\\\d{5}\"]]],\"CZ\":[\"420\",\"00\",\"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]|9[015-7]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"96\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"(?:60[1-8]|7(?:0[2-5]|[2379]\\\\d))\\\\d{6}\"]]],\"DE\":[\"49\",\"00\",\"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\",[4,5,6,7,8,9,10,11,12,13,14,15],[[\"(\\\\d{2})(\\\\d{3,13})\",\"$1 $2\",[\"3[02]|40|[68]9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,12})\",\"$1 $2\",[\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\",\"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2,11})\",\"$1 $2\",[\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\",\"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"138\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{2,10})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,11})\",\"$1 $2\",[\"181\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{4,10})\",\"$1 $2 $3\",[\"1(?:3|80)|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"1[67]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,12})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"185\",\"1850\",\"18500\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"18[68]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[0568]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{8})\",\"$1 $2\",[\"18\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\",\"$1 $2 $3\",[\"1(?:6[023]|7)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{7})\",\"$1 $2 $3\",[\"15[279]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{8})\",\"$1 $2 $3\",[\"15\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"15[0-25-9]\\\\d{8}|1(?:6[023]|7\\\\d)\\\\d{7,8}\",[10,11]]]],\"DJ\":[\"253\",\"00\",\"(?:2\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[27]\"]]],0,0,0,0,0,0,[0,[\"77\\\\d{6}\"]]],\"DK\":[\"45\",\"00\",\"[2-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[2-7]\\\\d|8[126-9]|9[1-46-9])\\\\d{6}\"]]],\"DM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"767$1\",0,\"767\",[0,[\"767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\\\d{4}\"]]],\"DO\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"8001|8[024]9\",[0,[\"8[024]9[2-9]\\\\d{6}\"]]],\"DZ\":[\"213\",\"00\",\"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:4[0-29]|5\\\\d|6[0-2])|6(?:[569]\\\\d|7[0-6])|7[7-9]\\\\d)\\\\d{6}\",[9]]]],\"EC\":[\"593\",\"00\",\"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\",[8,9,10,11],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[2-7]\"],\"(0$1)\",0,\"$1-$2-$3\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"964[0-2]\\\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\\\d)\\\\d{6}\",[9]]]],\"EE\":[\"372\",\"00\",\"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\",\"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]],[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[45]|8(?:00|[1-49])\",\"[45]|8(?:00[1-9]|[1-49])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:5\\\\d{5}|8(?:1(?:0(?:000|[3-9]\\\\d\\\\d)|(?:1(?:0[236]|1\\\\d)|(?:2[0-59]|[3-79]\\\\d)\\\\d)\\\\d)|2(?:0(?:000|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-6]\\\\d|3[5-9])\\\\d|7(?:[3679]\\\\d|8[13-9])|8(?:[2-6]\\\\d|7[01]))\\\\d)|[349]\\\\d{4}))\\\\d\\\\d|5(?:(?:[02]\\\\d|5[0-478])\\\\d|1(?:[0-8]\\\\d|95)|6(?:4[0-4]|5[1-589]))\\\\d{3}\",[7,8]]]],\"EG\":[\"20\",\"00\",\"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{7,8})\",\"$1 $2\",[\"[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,7})\",\"$1 $2\",[\"1[35]|[4-6]|8[2468]|9[235-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[189]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1[0-25]\\\\d{8}\",[10]]]],\"EH\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],0,\"0\",0,0,0,0,\"528[89]\",[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[017]\\\\d|2[0-2]|6[0-8]|8[0-3]))\\\\d{6}\"]]],\"ER\":[\"291\",\"00\",\"[178]\\\\d{6}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[178]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[1-3]|7\\\\d\\\\d)\\\\d{4}\"]]],\"ES\":[\"34\",\"00\",\"[5-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]00\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"(?:590[16]00\\\\d|9(?:6906(?:09|10)|7390\\\\d\\\\d))\\\\d\\\\d|(?:6\\\\d|7[1-48])\\\\d{7}\"]]],\"ET\":[\"251\",\"00\",\"(?:11|[2-579]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7001\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|22|77|86|99)|9\\\\d\\\\d)\\\\d{6}\"]]],\"FI\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"[2568][1-8]|3(?:0[1-9]|[1-9])|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[12]00|[368]|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[1245]|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,\"1[03-79]|[2-9]\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"FJ\":[\"679\",\"0(?:0|52)\",\"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[235-9]|45\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]]],0,0,0,0,0,0,[0,[\"(?:[279]\\\\d|45|5[01568]|8[034679])\\\\d{5}\",[7]]],\"00\"],\"FK\":[\"500\",\"00\",\"[2-7]\\\\d{4}\",[5],0,0,0,0,0,0,0,[0,[\"[56]\\\\d{4}\"]]],\"FM\":[\"691\",\"00\",\"(?:[39]\\\\d\\\\d|820)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[389]\"]]],0,0,0,0,0,0,[0,[\"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\\\d)\\\\d)\\\\d{3}\"]]],\"FO\":[\"298\",\"00\",\"[2-9]\\\\d{5}\",[6],[[\"(\\\\d{6})\",\"$1\",[\"[2-9]\"]]],0,0,\"(10(?:01|[12]0|88))\",0,0,0,[0,[\"(?:[27][1-9]|5\\\\d|9[16])\\\\d{4}\"]]],\"FR\":[\"33\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0 $1\"],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[1-79]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-24-8]\\\\d|3[0-8]|9[589])|7[3-9]\\\\d)\\\\d{6}\"]]],\"GA\":[\"241\",\"00\",\"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"11|[67]\"],\"0$1\"]],0,0,\"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\",\"$1\",0,0,[0,[\"(?:(?:0[2-7]|7[467])\\\\d|6(?:0[0-4]|10|[256]\\\\d))\\\\d{5}|[2-7]\\\\d{6}\"]]],\"GB\":[\"44\",\"00\",\"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\",[7,9,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"800\",\"8001\",\"80011\",\"800111\",\"8001111\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"845\",\"8454\",\"84546\",\"845464\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"1(?:38|5[23]|69|76|94)\",\"1(?:(?:38|69)7|5(?:24|39)|768|946)\",\"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"1(?:[2-69][02-9]|[78])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[25]|7(?:0|6[02-9])\",\"[25]|7(?:0|6(?:[03-9]|2[356]))\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1389]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\",[10]]],0,\" x\"],\"GD\":[\"1\",\"011\",\"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"473$1\",0,\"473\",[0,[\"473(?:4(?:0[2-79]|1[04-9]|2[0-5]|58)|5(?:2[01]|3[3-8])|901)\\\\d{4}\"]]],\"GE\":[\"995\",\"00\",\"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"32\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[57]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[348]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\\\d|22252[0-4])\\\\d\\\\d|(?:5(?:00(?:0\\\\d|44|5[05]|77|88|99)|1(?:1(?:00|[124]\\\\d|3[01])|4\\\\d\\\\d)|(?:44|68)\\\\d\\\\d|5(?:[0157-9]\\\\d\\\\d|200)|7(?:[0147-9]\\\\d\\\\d|5(?:00|[57]5))|8(?:0(?:[01]\\\\d|2[0-4])|58[89]|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}|5(?:0(?:070|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|(?:40[04]|900)0|5222)[0-4]\\\\d{3}\"]]],\"GF\":[\"594\",\"00\",\"[56]94\\\\d{6}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[56]|9[47]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"694(?:[0-249]\\\\d|3[0-8])\\\\d{4}\"]]],\"GG\":[\"44\",\"00\",\"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\",[7,9,10],0,\"0\",0,\"([25-9]\\\\d{5})$|0\",\"1481$1\",0,0,[0,[\"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\",[10]]]],\"GH\":[\"233\",\"00\",\"(?:[235]\\\\d{3}|800)\\\\d{5}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[235]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:2(?:[0346-9]\\\\d|5[67])|5(?:[03-7]\\\\d|9[1-9]))\\\\d{6}\",[9]]]],\"GI\":[\"350\",\"00\",\"(?:[25]\\\\d|60)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2\"]]],0,0,0,0,0,0,[0,[\"5251[0-4]\\\\d{3}|(?:5(?:[146-8]\\\\d\\\\d|250)|60(?:1[01]|6\\\\d))\\\\d{4}\"]]],\"GL\":[\"299\",\"00\",\"(?:19|[2-689]\\\\d|70)\\\\d{4}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"19|[2-9]\"]]],0,0,0,0,0,0,[0,[\"[245]\\\\d{5}\"]]],\"GM\":[\"220\",\"00\",\"[2-9]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[23679]\\\\d|5[0-489])\\\\d{5}\"]]],\"GN\":[\"224\",\"00\",\"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"3\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[67]\"]]],0,0,0,0,0,0,[0,[\"6[0-356]\\\\d{7}\",[9]]]],\"GP\":[\"590\",\"00\",\"590\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[569]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))\\\\d{4}\"]]],\"GQ\":[\"240\",\"00\",\"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235]\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55\\\\d)\\\\d{6}\"]]],\"GR\":[\"30\",\"00\",\"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\",[10,11,12],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"21|7\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2689]\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}\",[10]]]],\"GT\":[\"502\",\"00\",\"(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"[3-5]\\\\d{7}\",[8]]]],\"GU\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([3-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-46-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[48])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\\\d{4}\"]]],\"GW\":[\"245\",\"00\",\"[49]\\\\d{8}|4\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"40\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"]]],0,0,0,0,0,0,[0,[\"9(?:5\\\\d|6[569]|77)\\\\d{6}\",[9]]]],\"GY\":[\"592\",\"001\",\"9008\\\\d{3}|(?:[2-467]\\\\d\\\\d|862)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46-9]\"]]],0,0,0,0,0,0,[0,[\"(?:6\\\\d\\\\d|70[0-35-7])\\\\d{4}\"]]],\"HK\":[\"852\",\"00(?:30|5[09]|[126-9]?)\",\"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\",[5,6,7,8,9,11],[[\"(\\\\d{3})(\\\\d{2,5})\",\"$1 $2\",[\"900\",\"9003\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"(?:4(?:44[5-9]|6(?:0[0-7]|1[0-6]|4[0-57-9]|6[0-4]|7[0-8]))|573[0-6]|6(?:26[013-8]|66[0-3])|70(?:7[1-5]|8[0-4])|848[015-9]|9(?:29[013-9]|59[0-4]))\\\\d{4}|(?:4(?:4[01]|6[2358])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\\\d|[268][0-57-9]|7[0-79])|84[09]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\\\d))\\\\d{5}\",[8]]],\"00\"],\"HN\":[\"504\",\"00\",\"8\\\\d{10}|[237-9]\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[237-9]\"]]],0,0,0,0,0,0,[0,[\"[37-9]\\\\d{7}\",[8]]]],\"HR\":[\"385\",\"00\",\"(?:[24-69]\\\\d|3[0-79])\\\\d{7}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{5,6}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"6[01]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-5]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0[1-9]|[12589]\\\\d)\\\\d\\\\d|7(?:[0679]\\\\d\\\\d|5(?:[01]\\\\d|44|77|9[67])))\\\\d{4}|98\\\\d{6}\",[8,9]]]],\"HT\":[\"509\",\"00\",\"(?:[2-489]\\\\d|55)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:[34]\\\\d|55)\\\\d{6}\"]]],\"HU\":[\"36\",\"00\",\"[235-7]\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"06 $1\"]],\"06\",0,0,0,0,0,[0,[\"(?:[257]0|3[01])\\\\d{7}\",[9]]]],\"ID\":[\"62\",\"00[89]\",\"(?:(?:00[1-9]|8\\\\d)\\\\d{4}|[1-36])\\\\d{6}|00\\\\d{10}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"15\"]],[\"(\\\\d{2})(\\\\d{5,9})\",\"$1 $2\",[\"2[124]|[36]1\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,7})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,8})\",\"$1 $2\",[\"[2-79]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\",\"$1-$2-$3\",[\"8[1-35-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6,8})\",\"$1 $2\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"804\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"80\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8[1-35-9]\\\\d{7,10}\",[9,10,11,12]]]],\"IE\":[\"353\",\"00\",\"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"2[24-9]|47|58|6[237-9]|9[35-9]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[45]0\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2569]|4[1-69]|7[14]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"81\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8(?:22|[35-9]\\\\d)\\\\d{6}\",[9]]]],\"IL\":[\"972\",\"0(?:0|1[2-9])\",\"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\",[7,8,9,10,11,12],[[\"(\\\\d{4})(\\\\d{3})\",\"$1-$2\",[\"125\"]],[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"121\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-489]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"12\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1-$2\",[\"159\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"1[7-9]\"]],[\"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3-$4\",[\"15\"]]],\"0\",0,0,0,0,0,[0,[\"5(?:(?:[02368]\\\\d|[19][2-9]|4[1-9])\\\\d|5(?:01|1[79]|2[2-9]|3[0-3]|4[34]|5[015689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\\\d{5}\",[9]]]],\"IM\":[\"44\",\"00\",\"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([25-8]\\\\d{5})$|0\",\"1624$1\",0,\"74576|(?:16|7[56])24\",[0,[\"76245[06]\\\\d{4}|7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}\"]]],\"IN\":[\"91\",\"00\",\"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\",[8,9,10,11,12,13],[[\"(\\\\d{8})\",\"$1\",[\"5(?:0|2[23]|3[03]|[67]1|88)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"],0,1],[\"(\\\\d{4})(\\\\d{4,5})\",\"$1 $2\",[\"180\",\"1800\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"140\"],0,1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\",\"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\",\"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\\\d|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\"0$1\",1],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"[6-9]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:6|8[06])\",\"1(?:6|8[06]0)\"],0,1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"18\"],0,1]],\"0\",0,0,0,0,0,[0,[\"(?:61279|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:6(?:12|[2-47]1|5[17]|6[13]|80)[0189]|7(?:1(?:2[0189]|9[0-5])|2(?:[14][017-9]|8[0-59])|3(?:2[5-8]|[34][017-9]|9[016-9])|4(?:1[015-9]|[29][89]|39|8[389])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\\\d{6}|(?:7(?:31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\\\d|7[02-8])\\\\d{5}|(?:6(?:[09]\\\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:0\\\\d|2[0235-79]|3[05-8]|40|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\\\d\\\\d)\\\\d{7}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|8[124-6])\\\\d|7(?:[235689]\\\\d|4[0189]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-5])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]|881))[0189]\\\\d{5}\",[10]]]],\"IO\":[\"246\",\"00\",\"3\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"3\"]]],0,0,0,0,0,0,[0,[\"38\\\\d{5}\"]]],\"IQ\":[\"964\",\"00\",\"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[3-9]\\\\d{8}\",[10]]]],\"IR\":[\"98\",\"00\",\"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\",[4,5,6,7,10],[[\"(\\\\d{4,5})\",\"$1\",[\"96\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,5})\",\"$1 $2\",[\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0(?:[0-35]\\\\d|4[4-6])|(?:[13]\\\\d|2[0-3])\\\\d)\\\\d|9(?:[0-46]\\\\d\\\\d|5[15]0|8(?:1\\\\d|88)|9(?:0[0-3]|[19]\\\\d|21|77|8[7-9])))\\\\d{5}\",[10]]]],\"IS\":[\"354\",\"00|1(?:0(?:01|[12]0)|100)\",\"(?:38\\\\d|[4-9])\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,[0,[\"(?:38[589]\\\\d\\\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\\\d)|7(?:5[057]|[6-9]\\\\d)|8(?:2[0-59]|[3-69]\\\\d|8[238]))\\\\d{4}\"]],\"00\"],\"IT\":[\"39\",\"00\",\"0\\\\d{5,10}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"0[26]\"]],[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\",\"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],[\"(\\\\d{4})(\\\\d{2,6})\",\"$1 $2\",[\"0(?:[13-579][2-46-8]|8[236-8])\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"894\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[26]|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1(?:44|[679])|[378]\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[13-57-9][0159]|14\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\"$1 $2 $3\",[\"0[26]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,[0,[\"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\",[9,10]]]],\"JE\":[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0\",\"1534$1\",0,0,[0,[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97[7-9]))\\\\d{5}\"]]],\"JM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"658|876\",[0,[\"(?:658295|876(?:2(?:0[1-9]|[13-9]\\\\d|2[013-9])|[348]\\\\d\\\\d|5(?:0[1-9]|[1-9]\\\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\\\d{4}\"]]],\"JO\":[\"962\",\"00\",\"(?:(?:[2689]|7\\\\d)\\\\d|32|53)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2356]|87\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"70\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[78][0-25-9]|9\\\\d)\\\\d{6}\",[9]]]],\"JP\":[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[257-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\",[8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"(?:12|57|99)0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51|63)|9(?:80|9[16])\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9]|636)|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9]|636[457-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]|4(?:2[09]|7[01])\",\"[36]|4(?:2(?:0|9[02-69])|7(?:0[019]|1))\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[27-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9])|5(?:2|3[045]|4[0-369]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|49|51|6(?:[0-24]|36|5[0-3589]|72|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:49|55|83)[29]|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|7[015-9]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17|3[015-9]))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9(?:[019]|4[1-3]|6(?:[0-47-9]|5[01346-9])))|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|829(?:2|66)|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"800\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[257-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"[7-9]0[1-9]\\\\d{7}\",[10]]]],\"KE\":[\"254\",\"000\",\"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"[24-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[17]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:0[0-6]|1[0-5]|2[014]|30)|7\\\\d\\\\d)\\\\d{6}\",[9]]]],\"KG\":[\"996\",\"00\",\"8\\\\d{9}|(?:[235-8]\\\\d|99)\\\\d{7}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3(?:1[346]|[24-79])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-79]|88\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"312(?:58\\\\d|973)\\\\d{3}|(?:2(?:0[0-35]|2\\\\d)|5[0-24-7]\\\\d|600|7(?:[07]\\\\d|55)|88[08]|99[05-9])\\\\d{6}\",[9]]]],\"KH\":[\"855\",\"00[14-9]\",\"1\\\\d{9}|[1-9]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:1[28]|3[18]|9[67])\\\\d|6[016-9]|7(?:[07-9]|[16]\\\\d)|8(?:[013-79]|8\\\\d))\\\\d{6}|(?:1\\\\d|9[0-57-9])\\\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\\\d{5}\",[8,9]]]],\"KI\":[\"686\",\"00\",\"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\",[5,8],0,\"0\",0,0,0,0,0,[0,[\"(?:6200[01]|7(?:310[1-9]|5(?:02[03-9]|12[0-47-9]|22[0-7]|[34](?:0[1-9]|8[02-9])|50[1-9])))\\\\d{3}|(?:63\\\\d\\\\d|7(?:(?:[0146-9]\\\\d|2[0-689])\\\\d|3(?:[02-9]\\\\d|1[1-9])|5(?:[0-2][013-9]|[34][1-79]|5[1-9]|[6-9]\\\\d)))\\\\d{4}\",[8]]]],\"KM\":[\"269\",\"00\",\"[3478]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[3478]\"]]],0,0,0,0,0,0,[0,[\"[34]\\\\d{6}\"]]],\"KN\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"869$1\",0,\"869\",[0,[\"869(?:48[89]|55[6-8]|66\\\\d|76[02-7])\\\\d{4}\"]]],\"KP\":[\"850\",\"00|99\",\"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"19[1-3]\\\\d{7}\",[10]]]],\"KR\":[\"82\",\"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\",\"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\",[5,6,8,9,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1-$2\",[\"(?:3[1-3]|[46][1-4]|5[1-5])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"1\"]],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"[1346]|5[1-5]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1-$2-$3\",[\"5\"],\"0$1\"]],\"0\",0,\"0(8(?:[1-46-8]|5\\\\d\\\\d))?\",0,0,0,[0,[\"1(?:05(?:[0-8]\\\\d|9[0-6])|22[13]\\\\d)\\\\d{4,5}|1(?:0[1-46-9]|[16-9]\\\\d|2[013-9])\\\\d{6,7}\",[9,10]]]],\"KW\":[\"965\",\"00\",\"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[169]|2(?:[235]|4[1-35-9])|52\"]],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[245]\"]]],0,0,0,0,0,0,[0,[\"(?:41\\\\d\\\\d|5(?:(?:[05]\\\\d|1[0-7]|6[56])\\\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\\\d)\\\\d|1(?:00|11|66)|222|3[36]3|444|7(?:0[013-9]|[67]\\\\d)|888|9(?:[069]\\\\d|3[039]))|9(?:(?:0[09]|[4679]\\\\d|8[057-9])\\\\d|1(?:1[01]|99)|2(?:00|2\\\\d)|3(?:00|3[03])|5(?:00|5\\\\d)))\\\\d{4}\",[8]]]],\"KY\":[\"1\",\"011\",\"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"345$1\",0,\"345\",[0,[\"345(?:32[1-9]|42[0-4]|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\\\d{4}\"]]],\"KZ\":[\"7\",\"810\",\"(?:33622|8\\\\d{8})\\\\d{5}|[78]\\\\d{9}\",[10,14],0,\"8\",0,0,0,0,\"33|7\",[0,[\"7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\\\d{7}\",[10]]],\"8~10\"],\"LA\":[\"856\",\"00\",\"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2[13]|3[14]|[4-8]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"30[013-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:20(?:[2359]\\\\d|7[6-8]|88)|302\\\\d)\\\\d{6}\",[10]]]],\"LB\":[\"961\",\"00\",\"[27-9]\\\\d{7}|[13-9]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[13-69]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27-9]\"]]],\"0\",0,0,0,0,0,[0,[\"793(?:[01]\\\\d|2[0-4])\\\\d{3}|(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[89]|9[12]))\\\\d{5}\"]]],\"LC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-8]\\\\d{6})$|1\",\"758$1\",0,\"758\",[0,[\"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\\\d|3[0-3])|812)\\\\d{4}\"]]],\"LI\":[\"423\",\"00\",\"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\",[7,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2379]|8(?:0[09]|7)\",\"[2379]|8(?:0(?:02|9)|7)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"69\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],\"0\",0,\"(1001)|0\",0,0,0,[0,[\"(?:6(?:(?:4[5-9]|5[0-4])\\\\d|6(?:[0245]\\\\d|[17]0|3[7-9]))\\\\d|7(?:[37-9]\\\\d|42|56))\\\\d{4}\"]]],\"LK\":[\"94\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[1-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[0-25-8]\\\\d|4[0-4])\\\\d{6}\"]]],\"LR\":[\"231\",\"00\",\"(?:[25]\\\\d|33|77|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[4-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23578]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:(?:(?:22|33)0|555|(?:77|88)\\\\d)\\\\d|4[67])\\\\d{5}|[56]\\\\d{6}\",[7,9]]]],\"LS\":[\"266\",\"00\",\"(?:[256]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2568]\"]]],0,0,0,0,0,0,[0,[\"[56]\\\\d{7}\"]]],\"LT\":[\"370\",\"00\",\"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"52[0-7]\"],\"(8-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"8 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(8-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(8-$1)\",1]],\"8\",0,\"[08]\",0,0,0,[0,[\"6\\\\d{7}\"]]],\"LU\":[\"352\",\"00\",\"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\",[4,5,6,7,8,9,10,11],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"20[2-689]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"80[01]|90[015]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"20\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4 $5\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\"$1 $2 $3 $4\",[\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"]]],0,0,\"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\",0,0,0,[0,[\"6(?:[269][18]|5[1568]|7[189]|81)\\\\d{6}\",[9]]]],\"LV\":[\"371\",\"00\",\"(?:[268]\\\\d|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[269]|8[01]\"]]],0,0,0,0,0,0,[0,[\"23(?:23[0-57-9]|33[0238])\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[024-9]|3[0-24-9]))\\\\d{4}\"]]],\"LY\":[\"218\",\"00\",\"[2-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9[1-6]\\\\d{7}\"]]],\"MA\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],[[\"(\\\\d{5})(\\\\d{4})\",\"$1-$2\",[\"5(?:29|38)\",\"5(?:29[1289]|389)\",\"529(?:1[1-46-9]|2[013-8]|90)|5(?:298|389)[0-46-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:2[2-489]|3[5-9]|9)|892\",\"5(?:2(?:[2-49]|8[235-9])|3[5-9]|9)|892\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"8\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1-$2\",[\"[5-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[017]\\\\d|2[0-2]|6[0-8]|8[0-3]))\\\\d{6}\"]]],\"MC\":[\"377\",\"00\",\"(?:[3489]|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[389]\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:[46]\\\\d|5[1-9])\\\\d{5}|(?:3|6\\\\d)\\\\d{7}\"]]],\"MD\":[\"373\",\"00\",\"(?:[235-7]\\\\d|[89]0)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"22|3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[25-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"562\\\\d{5}|(?:6\\\\d|7[16-9])\\\\d{6}\"]]],\"ME\":[\"382\",\"00\",\"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[07-9]\\\\d|3[024]|6[0-25])\\\\d{5}\",[8]]]],\"MF\":[\"590\",\"00\",\"590\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))\\\\d{4}\"]]],\"MG\":[\"261\",\"00\",\"[23]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,\"([24-9]\\\\d{6})$|0\",\"20$1\",0,0,[0,[\"3[2-47-9]\\\\d{7}\"]]],\"MH\":[\"692\",\"011\",\"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-6]\"]]],\"1\",0,0,0,0,0,[0,[\"(?:(?:23|54)5|329|45[356])\\\\d{4}\"]]],\"MK\":[\"389\",\"00\",\"[2-578]\\\\d{7}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2|34[47]|4(?:[37]7|5[47]|64)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[347]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[58]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:3555|(?:474|9[019]7)7)\\\\d{3}|7(?:[0-25-8]\\\\d\\\\d|3(?:[1-48]\\\\d|7[01578])|4(?:2\\\\d|60|7[01578])|9(?:[2-4]\\\\d|5[01]|7[015]))\\\\d{4}\"]]],\"ML\":[\"223\",\"00\",\"[24-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"2(?:0(?:01|79)|17\\\\d)\\\\d{4}|(?:5[01]|[679]\\\\d|8[2-49])\\\\d{6}\"]]],\"MM\":[\"95\",\"00\",\"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\",[6,7,8,9,10],[[\"(\\\\d)(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"16|2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[45]|6(?:0[23]|[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-6]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[4-7]|8[1-35]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4,6})\",\"$1 $2 $3\",[\"9(?:2[0-4]|[35-9]|4[137-9])\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"92\"],\"0$1\"],[\"(\\\\d)(\\\\d{5})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[01]|9(?:2(?:[0-4]|[56]\\\\d\\\\d)|(?:3(?:[0-36]|4\\\\d)|(?:6\\\\d|8[89]|9[4-8])\\\\d|7(?:3|40|[5-9]\\\\d))\\\\d|4(?:(?:[0245]\\\\d|[1379])\\\\d|88)|5[0-6])\\\\d)\\\\d{4}|9[69]1\\\\d{6}|9(?:[68]\\\\d|9[089])\\\\d{5}\",[7,8,9,10]]]],\"MN\":[\"976\",\"001\",\"[12]\\\\d{7,9}|[5-9]\\\\d{7}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[12]1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[12]2[1-3]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\",\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"[12]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:83[01]|920)\\\\d{5}|(?:5[05]|6[069]|8[015689]|9[013-9])\\\\d{6}\",[8]]]],\"MO\":[\"853\",\"00\",\"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[268]\"]]],0,0,0,0,0,0,[0,[\"6800[0-79]\\\\d{3}|6(?:[235]\\\\d\\\\d|6(?:0[0-5]|[1-9]\\\\d)|8(?:0[1-9]|[14-8]\\\\d|2[5-9]|[39][0-4]))\\\\d{4}\",[8]]]],\"MP\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"670$1\",0,\"670\",[0,[\"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\"]]],\"MQ\":[\"596\",\"00\",\"596\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[569]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"69(?:6(?:[0-46-9]\\\\d|5[0-6])|727)\\\\d{4}\"]]],\"MR\":[\"222\",\"00\",\"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-48]\"]]],0,0,0,0,0,0,[0,[\"[2-4][0-46-9]\\\\d{6}\"]]],\"MS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\",[10],0,\"1\",0,\"([34]\\\\d{6})$|1\",\"664$1\",0,\"664\",[0,[\"664(?:3(?:49|9[1-6])|49[2-6])\\\\d{4}\"]]],\"MT\":[\"356\",\"00\",\"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2357-9]\"]]],0,0,0,0,0,0,[0,[\"(?:7(?:210|[79]\\\\d\\\\d)|9(?:[29]\\\\d\\\\d|69[67]|8(?:1[1-3]|89|97)))\\\\d{4}\"]]],\"MU\":[\"230\",\"0(?:0|[24-7]0|3[03])\",\"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46]|8[013]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[57]\"]],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\\\d|8[0-689]|9[0-8])|7(?:0[0-2]|3[013]))\\\\d{5}\",[8]]],\"020\"],\"MV\":[\"960\",\"0(?:0|19)\",\"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\",[7,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[34679]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:46[46]|[79]\\\\d\\\\d)\\\\d{4}\",[7]]],\"00\"],\"MW\":[\"265\",\"00\",\"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\",[7,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[137-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"111\\\\d{6}|(?:31|77|[89][89])\\\\d{7}\",[9]]]],\"MX\":[\"52\",\"0[09]\",\"1(?:(?:[27]2|44|99)[1-9]|65[0-689])\\\\d{7}|(?:1(?:[01]\\\\d|2[13-9]|[35][1-9]|4[0-35-9]|6[0-46-9]|7[013-9]|8[1-79]|9[1-8])|[2-9]\\\\d)\\\\d{8}\",[10,11],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"],0,1],[\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 $3 $4\",[\"1(?:33|5[56]|81)\"],0,1],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 $3 $4\",[\"1\"],0,1]],\"01\",0,\"0(?:[12]|4[45])|1\",0,0,0,[0,[\"657[12]\\\\d{6}|(?:1(?:2(?:2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-7][1-9]|3[1-8]|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))|2(?:2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\\\d))\\\\d{7}\"]],\"00\"],\"MY\":[\"60\",\"00\",\"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"[4-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1-$2 $3\",[\"1(?:[02469]|[378][1-9]|53)|8\",\"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"3\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3-$4\",[\"1(?:[367]|80)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"15\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1(?:1888[689]|4400|8(?:47|8[27])[0-4])\\\\d{4}|1(?:0(?:[23568]\\\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\\\d\\\\d|6(?:0[5-9]|[1-9]\\\\d)|7(?:[0-4]\\\\d|5[0-6]))|(?:[269]\\\\d|[37][1-9]|4[235-9])\\\\d|5(?:31|9\\\\d\\\\d)|8(?:1[23]|[236]\\\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\\\d{5}\",[9,10]]]],\"MZ\":[\"258\",\"00\",\"(?:2|8\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2|8[2-79]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[2-79]\\\\d{7}\",[9]]]],\"NA\":[\"264\",\"00\",\"[68]\\\\d{7,8}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"87\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:60|8[1245])\\\\d{7}\",[9]]]],\"NC\":[\"687\",\"00\",\"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1.$2.$3\",[\"[02-57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:5[0-4]|[79]\\\\d|8[0-79])\\\\d{4}\"]]],\"NE\":[\"227\",\"00\",\"[027-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"08\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[089]|2[013]|7[04]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[04]|[89]\\\\d)\\\\d{6}\"]]],\"NF\":[\"672\",\"00\",\"[13]\\\\d{5}\",[6],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"1[0-3]\"]],[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"[13]\"]]],0,0,\"([0-258]\\\\d{4})$\",\"3$1\",0,0,[0,[\"(?:14|3[58])\\\\d{4}\"]]],\"NG\":[\"234\",\"009\",\"(?:[124-7]|9\\\\d{3})\\\\d{6}|[1-9]\\\\d{7}|[78]\\\\d{9,13}\",[7,8,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"78\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|9(?:0[3-9]|[1-9])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-7]|8[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:702[0-24-9]|819[01])\\\\d{6}|(?:70[13-689]|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-356]))\\\\d{7}\",[10]]]],\"NI\":[\"505\",\"00\",\"(?:1800|[25-8]\\\\d{3})\\\\d{4}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[125-8]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:5[0-7]|[78]\\\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\\\d)\\\\d)\\\\d{5}\"]]],\"NL\":[\"31\",\"00\",\"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\",[5,6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{4,7})\",\"$1 $2\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"66\"],\"0$1\"],[\"(\\\\d)(\\\\d{8})\",\"$1 $2\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-578]|91\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[1-58]|970\\\\d)\\\\d{7}\",[9,11]]]],\"NO\":[\"47\",\"00\",\"(?:0|[2-9]\\\\d{3})\\\\d{4}\",[5,8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]\"]]],0,0,0,0,0,\"[02-689]|7[0-8]\",[0,[\"(?:4[015-8]|59|9\\\\d)\\\\d{6}\",[8]]]],\"NP\":[\"977\",\"00\",\"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\",[8,10,11],[[\"(\\\\d)(\\\\d{7})\",\"$1-$2\",[\"1[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1-$2\",[\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:6[0-3]|7[024-6]|8[0-24-68])\\\\d{7}\",[10]]]],\"NR\":[\"674\",\"00\",\"(?:444|(?:55|8\\\\d)\\\\d|666)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-68]\"]]],0,0,0,0,0,0,[0,[\"(?:55[3-9]|666|8\\\\d\\\\d)\\\\d{4}\"]]],\"NU\":[\"683\",\"00\",\"(?:[47]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"888[4-9]\\\\d{3}\",[7]]]],\"NZ\":[\"64\",\"0(?:0|161)\",\"[29]\\\\d{7,9}|50\\\\d{5}(?:\\\\d{2,3})?|6[0-35-9]\\\\d{6}|7\\\\d{7,8}|8\\\\d{4,9}|(?:11\\\\d|[34])\\\\d{7}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-579]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|[89]0\",\"50(?:[0367]|88)|[89]0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"24|[346]|7[2-57-9]|9[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:10|74)|[59]|80\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1|2[028]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\",\"$1 $2 $3\",[\"2(?:[169]|7[0-35-9])|7|86\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2[0-27-9]\\\\d{7,8}|21\\\\d{6}\",[8,9,10]]],\"00\"],\"OM\":[\"968\",\"00\",\"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\",[7,8,9],[[\"(\\\\d{3})(\\\\d{4,6})\",\"$1 $2\",[\"[58]\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[179]\"]]],0,0,0,0,0,0,[0,[\"1505\\\\d{4}|(?:7(?:[1289]\\\\d|7[0-5])|9(?:0[1-9]|[1-9]\\\\d))\\\\d{5}\",[8]]]],\"PA\":[\"507\",\"00\",\"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\",[7,8,10,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[1-57-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[68]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:1[16]1|21[89]|6\\\\d{3}|8(?:1[01]|7[23]))\\\\d{4}\",[7,8]]]],\"PE\":[\"51\",\"00|19(?:1[124]|77|90)00\",\"(?:[14-8]|9\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[4-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9\\\\d{8}\",[9]]],\"00\",\" Anexo \"],\"PF\":[\"689\",\"00\",\"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\",[6,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4|8[7-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[7-9]\\\\d{6}\",[8]]]],\"PG\":[\"675\",\"00|140[1-3]\",\"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"18|[2-69]|85\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[78]\"]]],0,0,0,0,0,0,[0,[\"(?:7\\\\d|8[128])\\\\d{6}\",[8]]],\"00\"],\"PH\":[\"63\",\"00\",\"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\",[6,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"2\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\",\"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"346|4(?:27|9[35])|883\",\"3469|4(?:279|9(?:30|56))|8834\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|8[2-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\\\d|4[2-9]|8[135-9]|9[1-9]))\\\\d{7}\",[10]]]],\"PK\":[\"92\",\"00\",\"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\",\"$1 $2 $3\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{6,7})\",\"$1 $2\",[\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\",\"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{7,8})\",\"$1 $2\",[\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"58\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[24-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"3(?:[0-24]\\\\d|3[0-7]|55|64)\\\\d{7}\",[10]]]],\"PL\":[\"48\",\"00\",\"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{5})\",\"$1\",[\"19\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"11|20|64\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\",\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"64\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"21(?:1(?:[145]\\\\d|3[1-5])|2[0-4]\\\\d)\\\\d{4}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\",[9]]]],\"PM\":[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|80\\\\d)\\\\d{6}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[45]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:4[02-4]|5[056]|708[45][0-5])\\\\d{4}\"]]],\"PR\":[\"1\",\"011\",\"(?:[589]\\\\d\\\\d|787)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"787|939\",[0,[\"(?:787|939)[2-9]\\\\d{6}\"]]],\"PS\":[\"970\",\"00\",\"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2489]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"5[69]\\\\d{7}\",[9]]]],\"PT\":[\"351\",\"00\",\"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2[12]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"16|[236-9]\"]]],0,0,0,0,0,0,[0,[\"6(?:[06]92(?:30|9\\\\d)|[35]92(?:3[03]|9\\\\d))\\\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\\\d\\\\d|480))\\\\d{5}\"]]],\"PW\":[\"680\",\"01[12]\",\"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:46|83)[0-5]|6[2-4689]0)\\\\d{4}|(?:45|77|88)\\\\d{5}\"]]],\"PY\":[\"595\",\"00\",\"59\\\\d{4,6}|9\\\\d{5,10}|(?:[2-46-8]\\\\d|5[0-8])\\\\d{4,7}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"[2-9]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{4,5})\",\"$1 $2\",[\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"87\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"9(?:[5-79]|8[1-6])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:51|6[129]|[78][1-6]|9[1-5])\\\\d{6}\",[9]]]],\"QA\":[\"974\",\"00\",\"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\",[7,8,9,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"2[16]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]],0,0,0,0,0,0,[0,[\"[35-7]\\\\d{7}\",[8]]]],\"RE\":[\"262\",\"00\",\"(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:2\\\\d\\\\d|3(?:0[0-46]|1[013]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|6[0-6]|7[0-27]|8[0-8]|9[0-479]))|9(?:399[0-3]|479[0-2]|76(?:2[27]|3[0-37]|9\\\\d)))\\\\d{4}\"]]],\"RO\":[\"40\",\"00\",\"(?:[2378]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\",[6,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"2[3-6]\",\"2[3-6]\\\\d9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"219|31\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[237-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7020\\\\d{5}|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-29])\\\\d{6}\",[9]]],0,\" int \"],\"RS\":[\"381\",\"00\",\"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\",[6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3,9})\",\"$1 $2\",[\"(?:2[389]|39)0|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5,10})\",\"$1 $2\",[\"[1-36]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[0-689]|7\\\\d)\\\\d{6,7}\",[8,9,10]]]],\"RU\":[\"7\",\"810\",\"8\\\\d{13}|[347-9]\\\\d{9}\",[10,14],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-8]|2[1-9])\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"],\"8 ($1)\",1],[\"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-68]|2[1-9])\",\"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[349]|8(?:[02-7]|1[1-8])\"],\"8 ($1)\",1],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"8\"],\"8 ($1)\"]],\"8\",0,0,0,0,\"3[04-689]|[489]\",[0,[\"9\\\\d{9}\",[10]]],\"8~10\"],\"RW\":[\"250\",\"00\",\"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"]]],\"0\",0,0,0,0,0,[0,[\"7[2389]\\\\d{7}\",[9]]]],\"SA\":[\"966\",\"00\",\"92\\\\d{7}|(?:[15]|8\\\\d)\\\\d{8}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,0,0,0,0,[0,[\"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-35-8])\\\\d{6}\",[9]]]],\"SB\":[\"677\",\"0[01]\",\"(?:[1-6]|[7-9]\\\\d\\\\d)\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],0,0,0,0,0,0,[0,[\"48\\\\d{3}|(?:(?:7[1-9]|8[4-9])\\\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\\\d{4}\"]]],\"SC\":[\"248\",\"010|0[0-2]\",\"800\\\\d{4}|(?:[249]\\\\d|64)\\\\d{5}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[246]|9[57]\"]]],0,0,0,0,0,0,[0,[\"2[125-8]\\\\d{5}\"]],\"00\"],\"SD\":[\"249\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[0-2]|9[0-3569])\\\\d{7}\"]]],\"SE\":[\"46\",\"00\",\"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"20\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"9(?:00|39|44|9)\"],\"0$1\",0,\"$1 $2\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3\",[\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\",\"$1-$2 $3\",[\"9(?:00|39|44)\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"10|7\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1-$2 $3 $4\",[\"9\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4 $5\",[\"[26]\"],\"0$1\",0,\"$1 $2 $3 $4 $5\"]],\"0\",0,0,0,0,0,[0,[\"7[02369]\\\\d{7}\",[9]]]],\"SG\":[\"65\",\"0[0-3]\\\\d\",\"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[369]|8(?:0[1-6]|[1-9])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"8(?:06[0-689]|95[0-2])\\\\d{4}|(?:8(?:0[1-5]|[1-8]\\\\d|9[0-4])|9[0-8]\\\\d)\\\\d{5}\",[8]]]],\"SH\":[\"290\",\"00\",\"(?:[256]\\\\d|8)\\\\d{3}\",[4,5],0,0,0,0,0,0,\"[256]\",[0,[\"[56]\\\\d{4}\",[5]]]],\"SI\":[\"386\",\"00|10(?:22|66|88|99)\",\"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\",[5,6,7,8],[[\"(\\\\d{2})(\\\\d{3,6})\",\"$1 $2\",[\"8[09]|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"59|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37][01]|4[0139]|51|6\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-57]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"65(?:[178]\\\\d|5[56]|6[01])\\\\d{4}|(?:[37][01]|4[0139]|51|6[489])\\\\d{6}\",[8]]],\"00\"],\"SJ\":[\"47\",\"00\",\"0\\\\d{4}|(?:[489]\\\\d|[57]9)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|59|9\\\\d)\\\\d{6}\",[8]]]],\"SK\":[\"421\",\"00\",\"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\",[6,7,9],[[\"(\\\\d)(\\\\d{2})(\\\\d{3,4})\",\"$1 $2 $3\",[\"21\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-5][1-8]1\",\"[3-5][1-8]1[67]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[689]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"[3-5]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"909[1-9]\\\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\\\d)\\\\d{6}\",[9]]]],\"SL\":[\"232\",\"00\",\"(?:[237-9]\\\\d|66)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[236-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"(?:25|3[0-5]|66|7[2-9]|8[08]|9[09])\\\\d{6}\"]]],\"SM\":[\"378\",\"00\",\"(?:0549|[5-7]\\\\d)\\\\d{6}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"0\"]]],0,0,\"([89]\\\\d{5})$\",\"0549$1\",0,0,[0,[\"6[16]\\\\d{6}\",[8]]]],\"SN\":[\"221\",\"00\",\"(?:[378]\\\\d|93)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[379]\"]]],0,0,0,0,0,0,[0,[\"7(?:(?:[06-8]\\\\d|21|90)\\\\d|5(?:01|[19]0|25|[38]3|[4-7]\\\\d))\\\\d{5}\"]]],\"SO\":[\"252\",\"00\",\"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"8[125]\"]],[\"(\\\\d{6})\",\"$1\",[\"[134]\"]],[\"(\\\\d)(\\\\d{6})\",\"$1 $2\",[\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"(?:2|90)4|[67]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[3478]|64|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6(?:0[5-7]|[1-35-9])|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|79|8[08])\\\\d|6(?:0[5-7]|[1-9]\\\\d)|9(?:0\\\\d|[2-9]))\\\\d|2(?:4\\\\d|8))\\\\d{5}|(?:[67]\\\\d\\\\d|904)\\\\d{5}\",[7,8,9]]]],\"SR\":[\"597\",\"00\",\"(?:[2-5]|68|[78]\\\\d)\\\\d{5}\",[6,7],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"56\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1-$2\",[\"[2-5]\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[6-8]\"]]],0,0,0,0,0,0,[0,[\"(?:7[124-7]|8[124-9])\\\\d{5}\",[7]]]],\"SS\":[\"211\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:12|9[1257-9])\\\\d{7}\"]]],\"ST\":[\"239\",\"00\",\"(?:22|9\\\\d)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"900[5-9]\\\\d{3}|9(?:0[1-9]|[89]\\\\d)\\\\d{4}\"]]],\"SV\":[\"503\",\"00\",\"[267]\\\\d{7}|[89]00\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[267]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"66(?:[02-9]\\\\d\\\\d|1(?:[02-9]\\\\d|16))\\\\d{3}|(?:6[0-57-9]|7\\\\d)\\\\d{6}\",[8]]]],\"SX\":[\"1\",\"011\",\"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"(5\\\\d{6})$|1\",\"721$1\",0,\"721\",[0,[\"7215(?:1[02]|2\\\\d|5[034679]|8[014-8])\\\\d{4}\"]]],\"SY\":[\"963\",\"00\",\"[1-39]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-5]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"9[1-689]\\\\d{7}\",[9]]]],\"SZ\":[\"268\",\"00\",\"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\",[8,9],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[0237]\"]],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"9\"]]],0,0,0,0,0,0,[0,[\"7[6-9]\\\\d{6}\",[8]]]],\"TA\":[\"290\",\"00\",\"8\\\\d{3}\",[4],0,0,0,0,0,0,\"8\"],\"TC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-479]\\\\d{6})$|1\",\"649$1\",0,\"649\",[0,[\"649(?:2(?:3[129]|4[1-79])|3\\\\d\\\\d|4[34][1-3])\\\\d{4}\"]]],\"TD\":[\"235\",\"00|16\",\"(?:22|[69]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2679]\"]]],0,0,0,0,0,0,[0,[\"(?:6[0235689]|77|9\\\\d)\\\\d{6}\"]],\"00\"],\"TG\":[\"228\",\"00\",\"[279]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[279]\"]]],0,0,0,0,0,0,[0,[\"(?:7[019]|9[0-36-9])\\\\d{6}\"]]],\"TH\":[\"66\",\"00[1-9]\",\"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\",[8,9,10,13],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[13-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"671[0-8]\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",[9]]]],\"TJ\":[\"992\",\"810\",\"[0-57-9]\\\\d{8}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[34]7|91[78]\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3[1-5]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[0-57-9]\"]]],0,0,0,0,0,0,[0,[\"41[18]\\\\d{6}|(?:0[0-27]|1[017]|2[02]|[34]0|5[05]|7[0178]|8[078]|9\\\\d)\\\\d{7}\"]],\"8~10\"],\"TK\":[\"690\",\"00\",\"[2-47]\\\\d{3,6}\",[4,5,6,7],0,0,0,0,0,0,0,[0,[\"7[2-4]\\\\d{2,5}\"]]],\"TL\":[\"670\",\"00\",\"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-489]|70\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"7[2-8]\\\\d{6}\",[8]]]],\"TM\":[\"993\",\"810\",\"[1-6]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"12\"],\"(8 $1)\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-5]\"],\"(8 $1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"6\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"6\\\\d{7}\"]],\"8~10\"],\"TN\":[\"216\",\"00\",\"[2-57-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-57-9]\"]]],0,0,0,0,0,0,[0,[\"3(?:001|[12]40)\\\\d{4}|(?:(?:[259]\\\\d|4[0-7])\\\\d|3(?:1[1-35]|6[0-4]|91))\\\\d{5}\"]]],\"TO\":[\"676\",\"00\",\"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1-$2\",[\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]],[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"(?:55[4-6]|6(?:[09]\\\\d|3[02]|8[15-9])|(?:7\\\\d|8[46-9])\\\\d|999)\\\\d{4}\",[7]]]],\"TR\":[\"90\",\"00\",\"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\",[7,10,12,13],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"512|8[01589]|90\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5(?:[0-59]|61)\",\"5(?:[0-59]|616)\",\"5(?:[0-59]|6161)\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24][1-8]|3[1-9]\"],\"(0$1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"56161\\\\d{5}|5(?:0[15-7]|1[06]|24|[34]\\\\d|5[1-59]|9[46])\\\\d{7}\",[10]]]],\"TT\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-46-8]\\\\d{6})$|1\",\"868$1\",0,\"868\",[0,[\"868(?:(?:2[5-9]|3\\\\d)\\\\d|4(?:3[0-6]|[6-9]\\\\d)|6(?:20|78|8\\\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\\\d))\\\\d{4}\"]]],\"TV\":[\"688\",\"00\",\"(?:2|7\\\\d\\\\d|90)\\\\d{4}\",[5,6,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[01]\\\\d|90)\\\\d{4}\",[6,7]]]],\"TW\":[\"886\",\"0(?:0[25-79]|19)\",\"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\",[7,8,9,10,11],[[\"(\\\\d{2})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"202\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[258]0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]\",\"[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:40001[0-2]|9[0-8]\\\\d{4})\\\\d{3}\",[9]]],0,\"#\"],\"TZ\":[\"255\",\"00[056]\",\"(?:[25-8]\\\\d|41|90)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[24]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"77[2-9]\\\\d{6}|(?:6[125-9]|7[13-689])\\\\d{7}\"]]],\"UA\":[\"380\",\"00\",\"[89]\\\\d{9}|[3-9]\\\\d{8}\",[9,10],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\",\"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\",\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|89|9[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:39|50|6[36-8]|7[1-3]|9[1-9])\\\\d{7}\",[9]]],\"0~0\"],\"UG\":[\"256\",\"00[057]\",\"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"202\",\"2024\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[27-9]|4(?:6[45]|[7-9])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[34]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"726[01]\\\\d{5}|7(?:[01578]\\\\d|20|36|[46][0-4]|9[89])\\\\d{6}\"]]],\"US\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"310\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"($1) $2-$3\",[\"[2-9]\"],0,1,\"$1-$2-$3\"]],\"1\",0,0,0,0,0,[0,[\"5056(?:[0-35-9]\\\\d|4[46])\\\\d{4}|(?:4722|505[2-57-9])\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-589]|3[149]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[01356]|3[0-24679]|4[167]|5[0-2]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-47-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|[34][016]|5[01679]|6[0-279]|78|8[0-29])|7(?:0[1-46-8]|1[2-9]|2[04-7]|3[1247]|4[037]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[068]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-389]|8[04-69]))[2-9]\\\\d{6}\"]]],\"UY\":[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"(?:0004|4)\\\\d{9}|[1249]\\\\d{7}|(?:[49]\\\\d|80)\\\\d{5}\",[7,8,10,13],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"405|8|90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[124]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],\"UZ\":[\"998\",\"810\",\"(?:33|[5-79]\\\\d|88)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[35-9]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:(?:33|50|88|9[0-57-9])\\\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\\\d|61[23]|7(?:[01][017]|4\\\\d|55|9[5-9]))|2(?:(?:11|7\\\\d)\\\\d|2(?:[12]1|9[01379])|5(?:[126]\\\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\\\d)\\\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\\\d|4(?:56|83)|7(?:[07]\\\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\\\d|[39][07])|9(?:0\\\\d|7[079]))|9(?:2(?:1[1267]|3[01]|5\\\\d|7[0-4])|(?:5[67]|7\\\\d)\\\\d|6(?:2[0-26]|8\\\\d)))|7(?:[07]\\\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\\\d|7(?:0\\\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\\\d|5(?:0[0-4]|5[579]|9\\\\d)|7(?:[0-3579]\\\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\\\d|9[5-9])|7(?:0\\\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\\\d))|5(?:112|2(?:0\\\\d|2[29]|[49]4)|3[1568]\\\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\\\d|8[78]|9[079]))|6(?:2(?:2[1245]|4[2-4])|39\\\\d|41[179]|5(?:[349]\\\\d|5[0-2])|7(?:0[017]|[13]\\\\d|22|44|55|67|88))|9(?:22[128]|3(?:2[0-4]|7\\\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\\\d|60|7[2579]|87|9[07]))))\\\\d{4}\"]],\"8~10\"],\"VA\":[\"39\",\"00\",\"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\",[6,7,8,9,10,11],0,0,0,0,0,0,\"06698\",[0,[\"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\",[9,10]]]],\"VC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"784$1\",0,\"784\",[0,[\"784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\\\d{4}\"]]],\"VE\":[\"58\",\"00\",\"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\",[10],[[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"[24-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:1[24-8]|2[46])\\\\d{7}\"]]],\"VG\":[\"1\",\"011\",\"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-578]\\\\d{6})$|1\",\"284$1\",0,\"284\",[0,[\"284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\\\d{4}\"]]],\"VI\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"340$1\",0,\"340\",[0,[\"340(?:2(?:0[0-368]|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\"]]],\"VN\":[\"84\",\"00\",\"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{7}|[16-8]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"1\"],0,1],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[69]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[3578]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[48]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:2[238]|59)|89[6-9]|99[013-9])\\\\d{6}|(?:3\\\\d|5[689]|7[06-9]|8[1-8]|9[0-8])\\\\d{7}\",[9]]]],\"VU\":[\"678\",\"00\",\"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\",[5,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[58]\\\\d|7[013-7])\\\\d{5}\",[7]]]],\"WF\":[\"681\",\"00\",\"(?:40|72)\\\\d{4}|8\\\\d{5}(?:\\\\d{3})?\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[478]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:72|8[23])\\\\d{4}\",[6]]]],\"WS\":[\"685\",\"0\",\"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\",[5,6,7,10],[[\"(\\\\d{5})\",\"$1\",[\"[2-5]|6[1-9]\"]],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[68]\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[1-35-7]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\",[7,10]]]],\"XK\":[\"383\",\"00\",\"[23]\\\\d{7,8}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[23]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[3-9]\\\\d{6}\",[8]]]],\"YE\":[\"967\",\"00\",\"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-6]|7(?:[24-6]|8[0-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[01378]\\\\d{7}\",[9]]]],\"YT\":[\"262\",\"00\",\"(?:(?:(?:26|63)9|80\\\\d)\\\\d|9398)\\\\d{5}\",[9],0,\"0\",0,0,0,0,\"269|63|9398\",[0,[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|9398[01])\\\\d{4}\"]]],\"ZA\":[\"27\",\"00\",\"[1-79]\\\\d{8}|8\\\\d{4,9}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"860\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\\\d{3}|8[1-4]\\\\d{3,7}|(?:2[27]|47|54)4950\\\\d{3}|(?:1(?:049[2-4]|9[12]\\\\d\\\\d)|(?:6\\\\d|7[0-46-9])\\\\d{3}|8(?:5\\\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\\\d{3}|(?:12|[2-5]1)492\\\\d{4}\",[5,6,7,8,9]]]],\"ZM\":[\"260\",\"00\",\"800\\\\d{6}|(?:21|63|[79]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[79]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:7[5-79]|9[5-8])\\\\d{7}\"]]],\"ZW\":[\"263\",\"00\",\"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\",[5,6,7,8,9,10],[[\"(\\\\d{3})(\\\\d{3,5})\",\"$1 $2\",[\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"80\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\",\"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\",\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"29[013-9]|39|54\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,5})\",\"$1 $2\",[\"(?:25|54)8\",\"258|5483\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[178]\\\\d|3[1-9])\\\\d{6}\",[9]]]]},\"nonGeographic\":{\"800\":[\"800\",0,\"(?:00|[1-9]\\\\d)\\\\d{6}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,0,[\"(?:00|[1-9]\\\\d)\\\\d{6}\"]]],\"808\":[\"808\",0,\"[1-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,[\"[1-9]\\\\d{7}\"]]],\"870\":[\"870\",0,\"7\\\\d{11}|[35-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[35-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"]]],\"878\":[\"878\",0,\"10\\\\d{10}\",[12],[[\"(\\\\d{2})(\\\\d{5})(\\\\d{5})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"10\\\\d{10}\"]]],\"881\":[\"881\",0,\"[0-36-9]\\\\d{8}\",[9],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-36-9]\"]]],0,0,0,0,0,0,[0,[\"[0-36-9]\\\\d{8}\"]]],\"882\":[\"882\",0,\"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"16|342\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"49\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"1[36]|9\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"3[23]\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"16\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|23|3(?:[15]|4[57])|4|51\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"34\"]],[\"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\",\"$1 $2 $3\",[\"[1-35]\"]]],0,0,0,0,0,0,[0,[\"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|50\\\\d{3})\\\\d{7}\",[7,8,9,10,12]],0,0,0,0,0,0,[\"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\"]]],\"883\":[\"883\",0,\"(?:[1-4]\\\\d|51)\\\\d{6,10}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\",\"$1 $2 $3\",[\"[14]|2[24-689]|3[02-689]|51[24-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"510\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"21\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"51[13]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[235]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[013-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\"]]],\"888\":[\"888\",0,\"\\\\d{11}\",[11],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\"]],0,0,0,0,0,0,[0,0,0,0,0,0,[\"\\\\d{11}\"]]],\"979\":[\"979\",0,\"[1359]\\\\d{8}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1359]\"]]],0,0,0,0,0,0,[0,0,0,[\"[1359]\\\\d{8}\"]]]}}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n// This \"state\" object simply holds the state of the \"AsYouType\" parser:\n//\n// * `country?: string`\n// * `callingCode?: string`\n// * `digits: string`\n// * `international: boolean`\n// * `missingPlus: boolean`\n// * `IDDPrefix?: string`\n// * `carrierCode?: string`\n// * `nationalPrefix?: string`\n// * `nationalSignificantNumber?: string`\n// * `nationalSignificantNumberMatchesInput: boolean`\n// * `complexPrefixBeforeNationalSignificantNumber?: string`\n//\n// `state.country` and `state.callingCode` aren't required to be in sync.\n// For example, `state.country` could be `\"AR\"` and `state.callingCode` could be `undefined`.\n// So `state.country` and `state.callingCode` are totally independent.\n//\nvar AsYouTypeState = /*#__PURE__*/function () {\n function AsYouTypeState(_ref) {\n var onCountryChange = _ref.onCountryChange,\n onCallingCodeChange = _ref.onCallingCodeChange;\n\n _classCallCheck(this, AsYouTypeState);\n\n this.onCountryChange = onCountryChange;\n this.onCallingCodeChange = onCallingCodeChange;\n }\n\n _createClass(AsYouTypeState, [{\n key: \"reset\",\n value: function reset(_ref2) {\n var country = _ref2.country,\n callingCode = _ref2.callingCode;\n this.international = false;\n this.missingPlus = false;\n this.IDDPrefix = undefined;\n this.callingCode = undefined;\n this.digits = '';\n this.resetNationalSignificantNumber();\n this.initCountryAndCallingCode(country, callingCode);\n }\n }, {\n key: \"resetNationalSignificantNumber\",\n value: function resetNationalSignificantNumber() {\n this.nationalSignificantNumber = this.getNationalDigits();\n this.nationalSignificantNumberMatchesInput = true;\n this.nationalPrefix = undefined;\n this.carrierCode = undefined;\n this.complexPrefixBeforeNationalSignificantNumber = undefined;\n }\n }, {\n key: \"update\",\n value: function update(properties) {\n for (var _i = 0, _Object$keys = Object.keys(properties); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n this[key] = properties[key];\n }\n }\n }, {\n key: \"initCountryAndCallingCode\",\n value: function initCountryAndCallingCode(country, callingCode) {\n this.setCountry(country);\n this.setCallingCode(callingCode);\n }\n }, {\n key: \"setCountry\",\n value: function setCountry(country) {\n this.country = country;\n this.onCountryChange(country);\n }\n }, {\n key: \"setCallingCode\",\n value: function setCallingCode(callingCode) {\n this.callingCode = callingCode;\n this.onCallingCodeChange(callingCode, this.country);\n }\n }, {\n key: \"startInternationalNumber\",\n value: function startInternationalNumber(country, callingCode) {\n // Prepend the `+` to parsed input.\n this.international = true; // If a default country was set then reset it\n // because an explicitly international phone\n // number is being entered.\n\n this.initCountryAndCallingCode(country, callingCode);\n }\n }, {\n key: \"appendDigits\",\n value: function appendDigits(nextDigits) {\n this.digits += nextDigits;\n }\n }, {\n key: \"appendNationalSignificantNumberDigits\",\n value: function appendNationalSignificantNumberDigits(nextDigits) {\n this.nationalSignificantNumber += nextDigits;\n }\n /**\r\n * Returns the part of `this.digits` that corresponds to the national number.\r\n * Basically, all digits that have been input by the user, except for the\r\n * international prefix and the country calling code part\r\n * (if the number is an international one).\r\n * @return {string}\r\n */\n\n }, {\n key: \"getNationalDigits\",\n value: function getNationalDigits() {\n if (this.international) {\n return this.digits.slice((this.IDDPrefix ? this.IDDPrefix.length : 0) + (this.callingCode ? this.callingCode.length : 0));\n }\n\n return this.digits;\n }\n }, {\n key: \"getDigitsWithoutInternationalPrefix\",\n value: function getDigitsWithoutInternationalPrefix() {\n if (this.international) {\n if (this.IDDPrefix) {\n return this.digits.slice(this.IDDPrefix.length);\n }\n }\n\n return this.digits;\n }\n }]);\n\n return AsYouTypeState;\n}();\n\nexport { AsYouTypeState as default };\n//# sourceMappingURL=AsYouTypeState.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n// Should be the same as `DIGIT_PLACEHOLDER` in `libphonenumber-metadata-generator`.\nexport var DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\n\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER); // Counts all occurences of a symbol in a string.\n// Unicode-unsafe (because using `.split()`).\n\nexport function countOccurences(symbol, string) {\n var count = 0; // Using `.split('')` to iterate through a string here\n // to avoid requiring `Symbol.iterator` polyfill.\n // `.split('')` is generally not safe for Unicode,\n // but in this particular case for counting brackets it is safe.\n // for (const character of string)\n\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n\n if (character === symbol) {\n count++;\n }\n }\n\n return count;\n} // Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\n\nexport function repeat(string, times) {\n if (times < 1) {\n return '';\n }\n\n var result = '';\n\n while (times > 1) {\n if (times & 1) {\n result += string;\n }\n\n times >>= 1;\n string += string;\n }\n\n return result + string;\n}\nexport function cutAndStripNonPairedParens(string, cutBeforeIndex) {\n if (string[cutBeforeIndex] === ')') {\n cutBeforeIndex++;\n }\n\n return stripNonPairedParens(string.slice(0, cutBeforeIndex));\n}\nexport function closeNonPairedParens(template, cut_before) {\n var retained_template = template.slice(0, cut_before);\n var opening_braces = countOccurences('(', retained_template);\n var closing_braces = countOccurences(')', retained_template);\n var dangling_braces = opening_braces - closing_braces;\n\n while (dangling_braces > 0 && cut_before < template.length) {\n if (template[cut_before] === ')') {\n dangling_braces--;\n }\n\n cut_before++;\n }\n\n return template.slice(0, cut_before);\n}\nexport function stripNonPairedParens(string) {\n var dangling_braces = [];\n var i = 0;\n\n while (i < string.length) {\n if (string[i] === '(') {\n dangling_braces.push(i);\n } else if (string[i] === ')') {\n dangling_braces.pop();\n }\n\n i++;\n }\n\n var start = 0;\n var cleared_string = '';\n dangling_braces.push(string.length);\n\n for (var _i = 0, _dangling_braces = dangling_braces; _i < _dangling_braces.length; _i++) {\n var index = _dangling_braces[_i];\n cleared_string += string.slice(start, index);\n start = index + 1;\n }\n\n return cleared_string;\n}\nexport function populateTemplateWithDigits(template, position, digits) {\n // Using `.split('')` to iterate through a string here\n // to avoid requiring `Symbol.iterator` polyfill.\n // `.split('')` is generally not safe for Unicode,\n // but in this particular case for `digits` it is safe.\n // for (const digit of digits)\n for (var _iterator2 = _createForOfIteratorHelperLoose(digits.split('')), _step2; !(_step2 = _iterator2()).done;) {\n var digit = _step2.value;\n\n // If there is room for more digits in current `template`,\n // then set the next digit in the `template`,\n // and return the formatted digits so far.\n // If more digits are entered than the current format could handle.\n if (template.slice(position + 1).search(DIGIT_PLACEHOLDER_MATCHER) < 0) {\n return;\n }\n\n position = template.search(DIGIT_PLACEHOLDER_MATCHER);\n template = template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n }\n\n return [template, position];\n}\n//# sourceMappingURL=AsYouTypeFormatter.util.js.map","import checkNumberLength from './helpers/checkNumberLength.js';\nimport parseDigits from './helpers/parseDigits.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nexport default function formatCompleteNumber(state, format, _ref) {\n var metadata = _ref.metadata,\n shouldTryNationalPrefixFormattingRule = _ref.shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref.getSeparatorAfterNationalPrefix;\n var matcher = new RegExp(\"^(?:\".concat(format.pattern(), \")$\"));\n\n if (matcher.test(state.nationalSignificantNumber)) {\n return formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, {\n metadata: metadata,\n shouldTryNationalPrefixFormattingRule: shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix\n });\n }\n}\nexport function canFormatCompleteNumber(nationalSignificantNumber, metadata) {\n return checkNumberLength(nationalSignificantNumber, metadata) === 'IS_POSSIBLE';\n}\n\nfunction formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, _ref2) {\n var metadata = _ref2.metadata,\n shouldTryNationalPrefixFormattingRule = _ref2.shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref2.getSeparatorAfterNationalPrefix;\n // `format` has already been checked for `nationalPrefix` requirement.\n var nationalSignificantNumber = state.nationalSignificantNumber,\n international = state.international,\n nationalPrefix = state.nationalPrefix,\n carrierCode = state.carrierCode; // Format the number with using `national_prefix_formatting_rule`.\n // If the resulting formatted number is a valid formatted number, then return it.\n //\n // Google's AsYouType formatter is different in a way that it doesn't try\n // to format using the \"national prefix formatting rule\", and instead it\n // simply prepends a national prefix followed by a \" \" character.\n // This code does that too, but as a fallback.\n // The reason is that \"national prefix formatting rule\" may use parentheses,\n // which wouldn't be included has it used the simpler Google's way.\n //\n\n if (shouldTryNationalPrefixFormattingRule(format)) {\n var formattedNumber = formatNationalNumber(state, format, {\n useNationalPrefixFormattingRule: true,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n metadata: metadata\n });\n\n if (formattedNumber) {\n return formattedNumber;\n }\n } // Format the number without using `national_prefix_formatting_rule`.\n\n\n return formatNationalNumber(state, format, {\n useNationalPrefixFormattingRule: false,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n metadata: metadata\n });\n}\n\nfunction formatNationalNumber(state, format, _ref3) {\n var metadata = _ref3.metadata,\n useNationalPrefixFormattingRule = _ref3.useNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref3.getSeparatorAfterNationalPrefix;\n var formattedNationalNumber = formatNationalNumberUsingFormat(state.nationalSignificantNumber, format, {\n carrierCode: state.carrierCode,\n useInternationalFormat: state.international,\n withNationalPrefix: useNationalPrefixFormattingRule,\n metadata: metadata\n });\n\n if (!useNationalPrefixFormattingRule) {\n if (state.nationalPrefix) {\n // If a national prefix was extracted, then just prepend it,\n // followed by a \" \" character.\n formattedNationalNumber = state.nationalPrefix + getSeparatorAfterNationalPrefix(format) + formattedNationalNumber;\n } else if (state.complexPrefixBeforeNationalSignificantNumber) {\n formattedNationalNumber = state.complexPrefixBeforeNationalSignificantNumber + ' ' + formattedNationalNumber;\n }\n }\n\n if (isValidFormattedNationalNumber(formattedNationalNumber, state)) {\n return formattedNationalNumber;\n }\n} // Check that the formatted phone number contains exactly\n// the same digits that have been input by the user.\n// For example, when \"0111523456789\" is input for `AR` country,\n// the extracted `this.nationalSignificantNumber` is \"91123456789\",\n// which means that the national part of `this.digits` isn't simply equal to\n// `this.nationalPrefix` + `this.nationalSignificantNumber`.\n//\n// Also, a `format` can add extra digits to the `this.nationalSignificantNumber`\n// being formatted via `metadata[country].national_prefix_transform_rule`.\n// For example, for `VI` country, it prepends `340` to the national number,\n// and if this check hasn't been implemented, then there would be a bug\n// when `340` \"area coude\" is \"duplicated\" during input for `VI` country:\n// https://github.com/catamphetamine/libphonenumber-js/issues/318\n//\n// So, all these \"gotchas\" are filtered out.\n//\n// In the original Google's code, the comments say:\n// \"Check that we didn't remove nor add any extra digits when we matched\n// this formatting pattern. This usually happens after we entered the last\n// digit during AYTF. Eg: In case of MX, we swallow mobile token (1) when\n// formatted but AYTF should retain all the number entered and not change\n// in order to match a format (of same leading digits and length) display\n// in that way.\"\n// \"If it's the same (i.e entered number and format is same), then it's\n// safe to return this in formatted number as nothing is lost / added.\"\n// Otherwise, don't use this format.\n// https://github.com/google/libphonenumber/commit/3e7c1f04f5e7200f87fb131e6f85c6e99d60f510#diff-9149457fa9f5d608a11bb975c6ef4bc5\n// https://github.com/google/libphonenumber/commit/3ac88c7106e7dcb553bcc794b15f19185928a1c6#diff-2dcb77e833422ee304da348b905cde0b\n//\n\n\nfunction isValidFormattedNationalNumber(formattedNationalNumber, state) {\n return parseDigits(formattedNationalNumber) === state.getNationalDigits();\n}\n//# sourceMappingURL=AsYouTypeFormatter.complete.js.map","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar PatternParser = /*#__PURE__*/function () {\n function PatternParser() {\n _classCallCheck(this, PatternParser);\n }\n\n _createClass(PatternParser, [{\n key: \"parse\",\n value: function parse(pattern) {\n this.context = [{\n or: true,\n instructions: []\n }];\n this.parsePattern(pattern);\n\n if (this.context.length !== 1) {\n throw new Error('Non-finalized contexts left when pattern parse ended');\n }\n\n var _this$context$ = this.context[0],\n branches = _this$context$.branches,\n instructions = _this$context$.instructions;\n\n if (branches) {\n return {\n op: '|',\n args: branches.concat([expandSingleElementArray(instructions)])\n };\n }\n /* istanbul ignore if */\n\n\n if (instructions.length === 0) {\n throw new Error('Pattern is required');\n }\n\n if (instructions.length === 1) {\n return instructions[0];\n }\n\n return instructions;\n }\n }, {\n key: \"startContext\",\n value: function startContext(context) {\n this.context.push(context);\n }\n }, {\n key: \"endContext\",\n value: function endContext() {\n this.context.pop();\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.context[this.context.length - 1];\n }\n }, {\n key: \"parsePattern\",\n value: function parsePattern(pattern) {\n if (!pattern) {\n throw new Error('Pattern is required');\n }\n\n var match = pattern.match(OPERATOR);\n\n if (!match) {\n if (ILLEGAL_CHARACTER_REGEXP.test(pattern)) {\n throw new Error(\"Illegal characters found in a pattern: \".concat(pattern));\n }\n\n this.getContext().instructions = this.getContext().instructions.concat(pattern.split(''));\n return;\n }\n\n var operator = match[1];\n var before = pattern.slice(0, match.index);\n var rightPart = pattern.slice(match.index + operator.length);\n\n switch (operator) {\n case '(?:':\n if (before) {\n this.parsePattern(before);\n }\n\n this.startContext({\n or: true,\n instructions: [],\n branches: []\n });\n break;\n\n case ')':\n if (!this.getContext().or) {\n throw new Error('\")\" operator must be preceded by \"(?:\" operator');\n }\n\n if (before) {\n this.parsePattern(before);\n }\n\n if (this.getContext().instructions.length === 0) {\n throw new Error('No instructions found after \"|\" operator in an \"or\" group');\n }\n\n var _this$getContext = this.getContext(),\n branches = _this$getContext.branches;\n\n branches.push(expandSingleElementArray(this.getContext().instructions));\n this.endContext();\n this.getContext().instructions.push({\n op: '|',\n args: branches\n });\n break;\n\n case '|':\n if (!this.getContext().or) {\n throw new Error('\"|\" operator can only be used inside \"or\" groups');\n }\n\n if (before) {\n this.parsePattern(before);\n } // The top-level is an implicit \"or\" group, if required.\n\n\n if (!this.getContext().branches) {\n // `branches` are not defined only for the root implicit \"or\" operator.\n\n /* istanbul ignore else */\n if (this.context.length === 1) {\n this.getContext().branches = [];\n } else {\n throw new Error('\"branches\" not found in an \"or\" group context');\n }\n }\n\n this.getContext().branches.push(expandSingleElementArray(this.getContext().instructions));\n this.getContext().instructions = [];\n break;\n\n case '[':\n if (before) {\n this.parsePattern(before);\n }\n\n this.startContext({\n oneOfSet: true\n });\n break;\n\n case ']':\n if (!this.getContext().oneOfSet) {\n throw new Error('\"]\" operator must be preceded by \"[\" operator');\n }\n\n this.endContext();\n this.getContext().instructions.push({\n op: '[]',\n args: parseOneOfSet(before)\n });\n break;\n\n /* istanbul ignore next */\n\n default:\n throw new Error(\"Unknown operator: \".concat(operator));\n }\n\n if (rightPart) {\n this.parsePattern(rightPart);\n }\n }\n }]);\n\n return PatternParser;\n}();\n\nexport { PatternParser as default };\n\nfunction parseOneOfSet(pattern) {\n var values = [];\n var i = 0;\n\n while (i < pattern.length) {\n if (pattern[i] === '-') {\n if (i === 0 || i === pattern.length - 1) {\n throw new Error(\"Couldn't parse a one-of set pattern: \".concat(pattern));\n }\n\n var prevValue = pattern[i - 1].charCodeAt(0) + 1;\n var nextValue = pattern[i + 1].charCodeAt(0) - 1;\n var value = prevValue;\n\n while (value <= nextValue) {\n values.push(String.fromCharCode(value));\n value++;\n }\n } else {\n values.push(pattern[i]);\n }\n\n i++;\n }\n\n return values;\n}\n\nvar ILLEGAL_CHARACTER_REGEXP = /[\\(\\)\\[\\]\\?\\:\\|]/;\nvar OPERATOR = new RegExp( // any of:\n'(' + // or operator\n'\\\\|' + // or\n'|' + // or group start\n'\\\\(\\\\?\\\\:' + // or\n'|' + // or group end\n'\\\\)' + // or\n'|' + // one-of set start\n'\\\\[' + // or\n'|' + // one-of set end\n'\\\\]' + ')');\n\nfunction expandSingleElementArray(array) {\n if (array.length === 1) {\n return array[0];\n }\n\n return array;\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternParser.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport PatternParser from './AsYouTypeFormatter.PatternParser.js';\n\nvar PatternMatcher = /*#__PURE__*/function () {\n function PatternMatcher(pattern) {\n _classCallCheck(this, PatternMatcher);\n\n this.matchTree = new PatternParser().parse(pattern);\n }\n\n _createClass(PatternMatcher, [{\n key: \"match\",\n value: function match(string) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n allowOverflow = _ref.allowOverflow;\n\n if (!string) {\n throw new Error('String is required');\n }\n\n var result = _match(string.split(''), this.matchTree, true);\n\n if (result && result.match) {\n delete result.matchedChars;\n }\n\n if (result && result.overflow) {\n if (!allowOverflow) {\n return;\n }\n }\n\n return result;\n }\n }]);\n\n return PatternMatcher;\n}();\n/**\r\n * Matches `characters` against a pattern compiled into a `tree`.\r\n * @param {string[]} characters\r\n * @param {Tree} tree — A pattern compiled into a `tree`. See the `*.d.ts` file for the description of the `tree` structure.\r\n * @param {boolean} last — Whether it's the last (rightmost) subtree on its level of the match tree.\r\n * @return {object} See the `*.d.ts` file for the description of the result object.\r\n */\n\n\nexport { PatternMatcher as default };\n\nfunction _match(characters, tree, last) {\n // If `tree` is a string, then `tree` is a single character.\n // That's because when a pattern is parsed, multi-character-string parts\n // of a pattern are compiled into arrays of single characters.\n // I still wrote this piece of code for a \"general\" hypothetical case\n // when `tree` could be a string of several characters, even though\n // such case is not possible with the current implementation.\n if (typeof tree === 'string') {\n var characterString = characters.join('');\n\n if (tree.indexOf(characterString) === 0) {\n // `tree` is always a single character.\n // If `tree.indexOf(characterString) === 0`\n // then `characters.length === tree.length`.\n\n /* istanbul ignore else */\n if (characters.length === tree.length) {\n return {\n match: true,\n matchedChars: characters\n };\n } // `tree` is always a single character.\n // If `tree.indexOf(characterString) === 0`\n // then `characters.length === tree.length`.\n\n /* istanbul ignore next */\n\n\n return {\n partialMatch: true // matchedChars: characters\n\n };\n }\n\n if (characterString.indexOf(tree) === 0) {\n if (last) {\n // The `else` path is not possible because `tree` is always a single character.\n // The `else` case for `characters.length > tree.length` would be\n // `characters.length <= tree.length` which means `characters.length <= 1`.\n // `characters` array can't be empty, so that means `characters === [tree]`,\n // which would also mean `tree.indexOf(characterString) === 0` and that'd mean\n // that the `if (tree.indexOf(characterString) === 0)` condition before this\n // `if` condition would be entered, and returned from there, not reaching this code.\n\n /* istanbul ignore else */\n if (characters.length > tree.length) {\n return {\n overflow: true\n };\n }\n }\n\n return {\n match: true,\n matchedChars: characters.slice(0, tree.length)\n };\n }\n\n return;\n }\n\n if (Array.isArray(tree)) {\n var restCharacters = characters.slice();\n var i = 0;\n\n while (i < tree.length) {\n var subtree = tree[i];\n\n var result = _match(restCharacters, subtree, last && i === tree.length - 1);\n\n if (!result) {\n return;\n } else if (result.overflow) {\n return result;\n } else if (result.match) {\n // Continue with the next subtree with the rest of the characters.\n restCharacters = restCharacters.slice(result.matchedChars.length);\n\n if (restCharacters.length === 0) {\n if (i === tree.length - 1) {\n return {\n match: true,\n matchedChars: characters\n };\n } else {\n return {\n partialMatch: true // matchedChars: characters\n\n };\n }\n }\n } else {\n /* istanbul ignore else */\n if (result.partialMatch) {\n return {\n partialMatch: true // matchedChars: characters\n\n };\n } else {\n throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(result, null, 2)));\n }\n }\n\n i++;\n } // If `last` then overflow has already been checked\n // by the last element of the `tree` array.\n\n /* istanbul ignore if */\n\n\n if (last) {\n return {\n overflow: true\n };\n }\n\n return {\n match: true,\n matchedChars: characters.slice(0, characters.length - restCharacters.length)\n };\n }\n\n switch (tree.op) {\n case '|':\n var partialMatch;\n\n for (var _iterator = _createForOfIteratorHelperLoose(tree.args), _step; !(_step = _iterator()).done;) {\n var branch = _step.value;\n\n var _result = _match(characters, branch, last);\n\n if (_result) {\n if (_result.overflow) {\n return _result;\n } else if (_result.match) {\n return {\n match: true,\n matchedChars: _result.matchedChars\n };\n } else {\n /* istanbul ignore else */\n if (_result.partialMatch) {\n partialMatch = true;\n } else {\n throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(_result, null, 2)));\n }\n }\n }\n }\n\n if (partialMatch) {\n return {\n partialMatch: true // matchedChars: ...\n\n };\n } // Not even a partial match.\n\n\n return;\n\n case '[]':\n for (var _iterator2 = _createForOfIteratorHelperLoose(tree.args), _step2; !(_step2 = _iterator2()).done;) {\n var _char = _step2.value;\n\n if (characters[0] === _char) {\n if (characters.length === 1) {\n return {\n match: true,\n matchedChars: characters\n };\n }\n\n if (last) {\n return {\n overflow: true\n };\n }\n\n return {\n match: true,\n matchedChars: [_char]\n };\n }\n } // No character matches.\n\n\n return;\n\n /* istanbul ignore next */\n\n default:\n throw new Error(\"Unsupported instruction tree: \".concat(tree));\n }\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternMatcher.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { DIGIT_PLACEHOLDER, countOccurences, repeat, cutAndStripNonPairedParens, closeNonPairedParens, stripNonPairedParens, populateTemplateWithDigits } from './AsYouTypeFormatter.util.js';\nimport formatCompleteNumber, { canFormatCompleteNumber } from './AsYouTypeFormatter.complete.js';\nimport PatternMatcher from './AsYouTypeFormatter.PatternMatcher.js';\nimport parseDigits from './helpers/parseDigits.js';\nexport { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.util.js';\nimport { FIRST_GROUP_PATTERN } from './helpers/formatNationalNumberUsingFormat.js';\nimport { VALID_PUNCTUATION } from './constants.js';\nimport applyInternationalSeparatorStyle from './helpers/applyInternationalSeparatorStyle.js'; // Used in phone number format template creation.\n// Could be any digit, I guess.\n\nvar DUMMY_DIGIT = '9'; // I don't know why is it exactly `15`\n\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15; // Create a phone number consisting only of the digit 9 that matches the\n// `number_pattern` by applying the pattern to the \"longest phone number\" string.\n\nvar LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH); // A set of characters that, if found in a national prefix formatting rules, are an indicator to\n// us that we should separate the national prefix from the number when formatting.\n\nvar NATIONAL_PREFIX_SEPARATORS_PATTERN = /[- ]/; // Deprecated: Google has removed some formatting pattern related code from their repo.\n// https://github.com/googlei18n/libphonenumber/commit/a395b4fef3caf57c4bc5f082e1152a4d2bd0ba4c\n// \"We no longer have numbers in formatting matching patterns, only \\d.\"\n// Because this library supports generating custom metadata\n// some users may still be using old metadata so the relevant\n// code seems to stay until some next major version update.\n\nvar SUPPORT_LEGACY_FORMATTING_PATTERNS = true; // A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \"[1-4]\".\n\nvar CREATE_CHARACTER_CLASS_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n return /\\[([^\\[\\]])*\\]/g;\n}; // Any digit in a regular expression that actually denotes a digit. For\n// example, in the regular expression \"80[0-2]\\d{6,10}\", the first 2 digits\n// (8 and 0) are standalone digits, but the rest are not.\n// Two look-aheads are needed because the number following \\\\d could be a\n// two-digit number, since the phone number can be as long as 15 digits.\n\n\nvar CREATE_STANDALONE_DIGIT_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n return /\\d(?=[^,}][^,}])/g;\n}; // A regular expression that is used to determine if a `format` is\n// suitable to be used in the \"as you type formatter\".\n// A `format` is suitable when the resulting formatted number has\n// the same digits as the user has entered.\n//\n// In the simplest case, that would mean that the format\n// doesn't add any additional digits when formatting a number.\n// Google says that it also shouldn't add \"star\" (`*`) characters,\n// like it does in some Israeli formats.\n// Such basic format would only contain \"valid punctuation\"\n// and \"captured group\" identifiers ($1, $2, etc).\n//\n// An example of a format that adds additional digits:\n//\n// Country: `AR` (Argentina).\n// Format:\n// {\n// \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n// \"leading_digits_patterns\": [\"91\"],\n// \"national_prefix_formatting_rule\": \"0$1\",\n// \"format\": \"$2 15-$3-$4\",\n// \"international_format\": \"$1 $2 $3-$4\"\n// }\n//\n// In the format above, the `format` adds `15` to the digits when formatting a number.\n// A sidenote: this format actually is suitable because `national_prefix_for_parsing`\n// has previously removed `15` from a national number, so re-adding `15` in `format`\n// doesn't actually result in any extra digits added to user's input.\n// But verifying that would be a complex procedure, so the code chooses a simpler path:\n// it simply filters out all `format`s that contain anything but \"captured group\" ids.\n//\n// This regular expression is called `ELIGIBLE_FORMAT_PATTERN` in Google's\n// `libphonenumber` code.\n//\n\n\nvar NON_ALTERING_FORMAT_REG_EXP = new RegExp('[' + VALID_PUNCTUATION + ']*' + // Google developers say:\n// \"We require that the first matching group is present in the\n// output pattern to ensure no data is lost while formatting.\"\n'\\\\$1' + '[' + VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + VALID_PUNCTUATION + ']*)*' + '$'); // This is the minimum length of the leading digits of a phone number\n// to guarantee the first \"leading digits pattern\" for a phone number format\n// to be preemptive.\n\nvar MIN_LEADING_DIGITS_LENGTH = 3;\n\nvar AsYouTypeFormatter = /*#__PURE__*/function () {\n function AsYouTypeFormatter(_ref) {\n var state = _ref.state,\n metadata = _ref.metadata;\n\n _classCallCheck(this, AsYouTypeFormatter);\n\n this.metadata = metadata;\n this.resetFormat();\n }\n\n _createClass(AsYouTypeFormatter, [{\n key: \"resetFormat\",\n value: function resetFormat() {\n this.chosenFormat = undefined;\n this.template = undefined;\n this.nationalNumberTemplate = undefined;\n this.populatedNationalNumberTemplate = undefined;\n this.populatedNationalNumberTemplatePosition = -1;\n }\n }, {\n key: \"reset\",\n value: function reset(numberingPlan, state) {\n this.resetFormat();\n\n if (numberingPlan) {\n this.isNANP = numberingPlan.callingCode() === '1';\n this.matchingFormats = numberingPlan.formats();\n\n if (state.nationalSignificantNumber) {\n this.narrowDownMatchingFormats(state);\n }\n } else {\n this.isNANP = undefined;\n this.matchingFormats = [];\n }\n }\n /**\r\n * Formats an updated phone number.\r\n * @param {string} nextDigits — Additional phone number digits.\r\n * @param {object} state — `AsYouType` state.\r\n * @return {[string]} Returns undefined if the updated phone number can't be formatted using any of the available formats.\r\n */\n\n }, {\n key: \"format\",\n value: function format(nextDigits, state) {\n var _this = this;\n\n // See if the phone number digits can be formatted as a complete phone number.\n // If not, use the results from `formatNationalNumberWithNextDigits()`,\n // which formats based on the chosen formatting pattern.\n //\n // Attempting to format complete phone number first is how it's done\n // in Google's `libphonenumber`, so this library just follows it.\n // Google's `libphonenumber` code doesn't explain in detail why does it\n // attempt to format digits as a complete phone number\n // instead of just going with a previoulsy (or newly) chosen `format`:\n //\n // \"Checks to see if there is an exact pattern match for these digits.\n // If so, we should use this instead of any other formatting template\n // whose leadingDigitsPattern also matches the input.\"\n //\n if (canFormatCompleteNumber(state.nationalSignificantNumber, this.metadata)) {\n for (var _iterator = _createForOfIteratorHelperLoose(this.matchingFormats), _step; !(_step = _iterator()).done;) {\n var format = _step.value;\n var formattedCompleteNumber = formatCompleteNumber(state, format, {\n metadata: this.metadata,\n shouldTryNationalPrefixFormattingRule: function shouldTryNationalPrefixFormattingRule(format) {\n return _this.shouldTryNationalPrefixFormattingRule(format, {\n international: state.international,\n nationalPrefix: state.nationalPrefix\n });\n },\n getSeparatorAfterNationalPrefix: function getSeparatorAfterNationalPrefix(format) {\n return _this.getSeparatorAfterNationalPrefix(format);\n }\n });\n\n if (formattedCompleteNumber) {\n this.resetFormat();\n this.chosenFormat = format;\n this.setNationalNumberTemplate(formattedCompleteNumber.replace(/\\d/g, DIGIT_PLACEHOLDER), state);\n this.populatedNationalNumberTemplate = formattedCompleteNumber; // With a new formatting template, the matched position\n // using the old template needs to be reset.\n\n this.populatedNationalNumberTemplatePosition = this.template.lastIndexOf(DIGIT_PLACEHOLDER);\n return formattedCompleteNumber;\n }\n }\n } // Format the digits as a partial (incomplete) phone number\n // using the previously chosen formatting pattern (or a newly chosen one).\n\n\n return this.formatNationalNumberWithNextDigits(nextDigits, state);\n } // Formats the next phone number digits.\n\n }, {\n key: \"formatNationalNumberWithNextDigits\",\n value: function formatNationalNumberWithNextDigits(nextDigits, state) {\n var previouslyChosenFormat = this.chosenFormat; // Choose a format from the list of matching ones.\n\n var newlyChosenFormat = this.chooseFormat(state);\n\n if (newlyChosenFormat) {\n if (newlyChosenFormat === previouslyChosenFormat) {\n // If it can format the next (current) digits\n // using the previously chosen phone number format\n // then return the updated formatted number.\n return this.formatNextNationalNumberDigits(nextDigits);\n } else {\n // If a more appropriate phone number format\n // has been chosen for these \"leading digits\",\n // then re-format the national phone number part\n // using the newly selected format.\n return this.formatNextNationalNumberDigits(state.getNationalDigits());\n }\n }\n }\n }, {\n key: \"narrowDownMatchingFormats\",\n value: function narrowDownMatchingFormats(_ref2) {\n var _this2 = this;\n\n var nationalSignificantNumber = _ref2.nationalSignificantNumber,\n nationalPrefix = _ref2.nationalPrefix,\n international = _ref2.international;\n var leadingDigits = nationalSignificantNumber; // \"leading digits\" pattern list starts with a\n // \"leading digits\" pattern fitting a maximum of 3 leading digits.\n // So, after a user inputs 3 digits of a national (significant) phone number\n // this national (significant) number can already be formatted.\n // The next \"leading digits\" pattern is for 4 leading digits max,\n // and the \"leading digits\" pattern after it is for 5 leading digits max, etc.\n // This implementation is different from Google's\n // in that it searches for a fitting format\n // even if the user has entered less than\n // `MIN_LEADING_DIGITS_LENGTH` digits of a national number.\n // Because some leading digit patterns already match for a single first digit.\n\n var leadingDigitsPatternIndex = leadingDigits.length - MIN_LEADING_DIGITS_LENGTH;\n\n if (leadingDigitsPatternIndex < 0) {\n leadingDigitsPatternIndex = 0;\n }\n\n this.matchingFormats = this.matchingFormats.filter(function (format) {\n return _this2.formatSuits(format, international, nationalPrefix) && _this2.formatMatches(format, leadingDigits, leadingDigitsPatternIndex);\n }); // If there was a phone number format chosen\n // and it no longer holds given the new leading digits then reset it.\n // The test for this `if` condition is marked as:\n // \"Reset a chosen format when it no longer holds given the new leading digits\".\n // To construct a valid test case for this one can find a country\n // in `PhoneNumberMetadata.xml` yielding one format for 3 ``\n // and yielding another format for 4 `` (Australia in this case).\n\n if (this.chosenFormat && this.matchingFormats.indexOf(this.chosenFormat) === -1) {\n this.resetFormat();\n }\n }\n }, {\n key: \"formatSuits\",\n value: function formatSuits(format, international, nationalPrefix) {\n // When a prefix before a national (significant) number is\n // simply a national prefix, then it's parsed as `this.nationalPrefix`.\n // In more complex cases, a prefix before national (significant) number\n // could include a national prefix as well as some \"capturing groups\",\n // and in that case there's no info whether a national prefix has been parsed.\n // If national prefix is not used when formatting a phone number\n // using this format, but a national prefix has been entered by the user,\n // and was extracted, then discard such phone number format.\n // In Google's \"AsYouType\" formatter code, the equivalent would be this part:\n // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L175-L184\n if (nationalPrefix && !format.usesNationalPrefix() && // !format.domesticCarrierCodeFormattingRule() &&\n !format.nationalPrefixIsOptionalWhenFormattingInNationalFormat()) {\n return false;\n } // If national prefix is mandatory for this phone number format\n // and there're no guarantees that a national prefix is present in user input\n // then discard this phone number format as not suitable.\n // In Google's \"AsYouType\" formatter code, the equivalent would be this part:\n // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L185-L193\n\n\n if (!international && !nationalPrefix && format.nationalPrefixIsMandatoryWhenFormattingInNationalFormat()) {\n return false;\n }\n\n return true;\n }\n }, {\n key: \"formatMatches\",\n value: function formatMatches(format, leadingDigits, leadingDigitsPatternIndex) {\n var leadingDigitsPatternsCount = format.leadingDigitsPatterns().length; // If this format is not restricted to a certain\n // leading digits pattern then it fits.\n // The test case could be found by searching for \"leadingDigitsPatternsCount === 0\".\n\n if (leadingDigitsPatternsCount === 0) {\n return true;\n } // Start narrowing down the list of possible formats based on the leading digits.\n // (only previously matched formats take part in the narrowing down process)\n // `leading_digits_patterns` start with 3 digits min\n // and then go up from there one digit at a time.\n\n\n leadingDigitsPatternIndex = Math.min(leadingDigitsPatternIndex, leadingDigitsPatternsCount - 1);\n var leadingDigitsPattern = format.leadingDigitsPatterns()[leadingDigitsPatternIndex]; // Google imposes a requirement on the leading digits\n // to be minimum 3 digits long in order to be eligible\n // for checking those with a leading digits pattern.\n //\n // Since `leading_digits_patterns` start with 3 digits min,\n // Google's original `libphonenumber` library only starts\n // excluding any non-matching formats only when the\n // national number entered so far is at least 3 digits long,\n // otherwise format matching would give false negatives.\n //\n // For example, when the digits entered so far are `2`\n // and the leading digits pattern is `21` –\n // it's quite obvious in this case that the format could be the one\n // but due to the absence of further digits it would give false negative.\n //\n // Also, `leading_digits_patterns` doesn't always correspond to a single\n // digits count. For example, `60|8` pattern would already match `8`\n // but the `60` part would require having at least two leading digits,\n // so the whole pattern would require inputting two digits first in order to\n // decide on whether it matches the input, even when the input is \"80\".\n //\n // This library — `libphonenumber-js` — allows filtering by `leading_digits_patterns`\n // even when there's only 1 or 2 digits of the national (significant) number.\n // To do that, it uses a non-strict pattern matcher written specifically for that.\n //\n\n if (leadingDigits.length < MIN_LEADING_DIGITS_LENGTH) {\n // Before leading digits < 3 matching was implemented:\n // return true\n //\n // After leading digits < 3 matching was implemented:\n try {\n return new PatternMatcher(leadingDigitsPattern).match(leadingDigits, {\n allowOverflow: true\n }) !== undefined;\n } catch (error)\n /* istanbul ignore next */\n {\n // There's a slight possibility that there could be some undiscovered bug\n // in the pattern matcher code. Since the \"leading digits < 3 matching\"\n // feature is not \"essential\" for operation, it can fall back to the old way\n // in case of any issues rather than halting the application's execution.\n console.error(error);\n return true;\n }\n } // If at least `MIN_LEADING_DIGITS_LENGTH` digits of a national number are\n // available then use the usual regular expression matching.\n //\n // The whole pattern is wrapped in round brackets (`()`) because\n // the pattern can use \"or\" operator (`|`) at the top level of the pattern.\n //\n\n\n return new RegExp(\"^(\".concat(leadingDigitsPattern, \")\")).test(leadingDigits);\n }\n }, {\n key: \"getFormatFormat\",\n value: function getFormatFormat(format, international) {\n return international ? format.internationalFormat() : format.format();\n }\n }, {\n key: \"chooseFormat\",\n value: function chooseFormat(state) {\n var _this3 = this;\n\n var _loop = function _loop() {\n var format = _step2.value;\n\n // If this format is currently being used\n // and is still suitable, then stick to it.\n if (_this3.chosenFormat === format) {\n return \"break\";\n } // Sometimes, a formatting rule inserts additional digits in a phone number,\n // and \"as you type\" formatter can't do that: it should only use the digits\n // that the user has input.\n //\n // For example, in Argentina, there's a format for mobile phone numbers:\n //\n // {\n // \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n // \"leading_digits_patterns\": [\"91\"],\n // \"national_prefix_formatting_rule\": \"0$1\",\n // \"format\": \"$2 15-$3-$4\",\n // \"international_format\": \"$1 $2 $3-$4\"\n // }\n //\n // In that format, `international_format` is used instead of `format`\n // because `format` inserts `15` in the formatted number,\n // and `AsYouType` formatter should only use the digits\n // the user has actually input, without adding any extra digits.\n // In this case, it wouldn't make a difference, because the `15`\n // is first stripped when applying `national_prefix_for_parsing`\n // and then re-added when using `format`, so in reality it doesn't\n // add any new digits to the number, but to detect that, the code\n // would have to be more complex: it would have to try formatting\n // the digits using the format and then see if any digits have\n // actually been added or removed, and then, every time a new digit\n // is input, it should re-check whether the chosen format doesn't\n // alter the digits.\n //\n // Google's code doesn't go that far, and so does this library:\n // it simply requires that a `format` doesn't add any additonal\n // digits to user's input.\n //\n // Also, people in general should move from inputting phone numbers\n // in national format (possibly with national prefixes)\n // and use international phone number format instead:\n // it's a logical thing in the modern age of mobile phones,\n // globalization and the internet.\n //\n\n /* istanbul ignore if */\n\n\n if (!NON_ALTERING_FORMAT_REG_EXP.test(_this3.getFormatFormat(format, state.international))) {\n return \"continue\";\n }\n\n if (!_this3.createTemplateForFormat(format, state)) {\n // Remove the format if it can't generate a template.\n _this3.matchingFormats = _this3.matchingFormats.filter(function (_) {\n return _ !== format;\n });\n return \"continue\";\n }\n\n _this3.chosenFormat = format;\n return \"break\";\n };\n\n // When there are multiple available formats, the formatter uses the first\n // format where a formatting template could be created.\n //\n // For some weird reason, `istanbul` says \"else path not taken\"\n // for the `for of` line below. Supposedly that means that\n // the loop doesn't ever go over the last element in the list.\n // That's true because there always is `this.chosenFormat`\n // when `this.matchingFormats` is non-empty.\n // And, for some weird reason, it doesn't think that the case\n // with empty `this.matchingFormats` qualifies for a valid \"else\" path.\n // So simply muting this `istanbul` warning.\n // It doesn't skip the contents of the `for of` loop,\n // it just skips the `for of` line.\n //\n\n /* istanbul ignore next */\n for (var _iterator2 = _createForOfIteratorHelperLoose(this.matchingFormats.slice()), _step2; !(_step2 = _iterator2()).done;) {\n var _ret = _loop();\n\n if (_ret === \"break\") break;\n if (_ret === \"continue\") continue;\n }\n\n if (!this.chosenFormat) {\n // No format matches the national (significant) phone number.\n this.resetFormat();\n }\n\n return this.chosenFormat;\n }\n }, {\n key: \"createTemplateForFormat\",\n value: function createTemplateForFormat(format, state) {\n // The formatter doesn't format numbers when numberPattern contains '|', e.g.\n // (20|3)\\d{4}. In those cases we quickly return.\n // (Though there's no such format in current metadata)\n\n /* istanbul ignore if */\n if (SUPPORT_LEGACY_FORMATTING_PATTERNS && format.pattern().indexOf('|') >= 0) {\n return;\n } // Get formatting template for this phone number format\n\n\n var template = this.getTemplateForFormat(format, state); // If the national number entered is too long\n // for any phone number format, then abort.\n\n if (template) {\n this.setNationalNumberTemplate(template, state);\n return true;\n }\n }\n }, {\n key: \"getSeparatorAfterNationalPrefix\",\n value: function getSeparatorAfterNationalPrefix(format) {\n // `US` metadata doesn't have a `national_prefix_formatting_rule`,\n // so the `if` condition below doesn't apply to `US`,\n // but in reality there shoudl be a separator\n // between a national prefix and a national (significant) number.\n // So `US` national prefix separator is a \"special\" \"hardcoded\" case.\n if (this.isNANP) {\n return ' ';\n } // If a `format` has a `national_prefix_formatting_rule`\n // and that rule has a separator after a national prefix,\n // then it means that there should be a separator\n // between a national prefix and a national (significant) number.\n\n\n if (format && format.nationalPrefixFormattingRule() && NATIONAL_PREFIX_SEPARATORS_PATTERN.test(format.nationalPrefixFormattingRule())) {\n return ' ';\n } // At this point, there seems to be no clear evidence that\n // there should be a separator between a national prefix\n // and a national (significant) number. So don't insert one.\n\n\n return '';\n }\n }, {\n key: \"getInternationalPrefixBeforeCountryCallingCode\",\n value: function getInternationalPrefixBeforeCountryCallingCode(_ref3, options) {\n var IDDPrefix = _ref3.IDDPrefix,\n missingPlus = _ref3.missingPlus;\n\n if (IDDPrefix) {\n return options && options.spacing === false ? IDDPrefix : IDDPrefix + ' ';\n }\n\n if (missingPlus) {\n return '';\n }\n\n return '+';\n }\n }, {\n key: \"getTemplate\",\n value: function getTemplate(state) {\n if (!this.template) {\n return;\n } // `this.template` holds the template for a \"complete\" phone number.\n // The currently entered phone number is most likely not \"complete\",\n // so trim all non-populated digits.\n\n\n var index = -1;\n var i = 0;\n var internationalPrefix = state.international ? this.getInternationalPrefixBeforeCountryCallingCode(state, {\n spacing: false\n }) : '';\n\n while (i < internationalPrefix.length + state.getDigitsWithoutInternationalPrefix().length) {\n index = this.template.indexOf(DIGIT_PLACEHOLDER, index + 1);\n i++;\n }\n\n return cutAndStripNonPairedParens(this.template, index + 1);\n }\n }, {\n key: \"setNationalNumberTemplate\",\n value: function setNationalNumberTemplate(template, state) {\n this.nationalNumberTemplate = template;\n this.populatedNationalNumberTemplate = template; // With a new formatting template, the matched position\n // using the old template needs to be reset.\n\n this.populatedNationalNumberTemplatePosition = -1; // For convenience, the public `.template` property\n // contains the whole international number\n // if the phone number being input is international:\n // 'x' for the '+' sign, 'x'es for the country phone code,\n // a spacebar and then the template for the formatted national number.\n\n if (state.international) {\n this.template = this.getInternationalPrefixBeforeCountryCallingCode(state).replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER) + repeat(DIGIT_PLACEHOLDER, state.callingCode.length) + ' ' + template;\n } else {\n this.template = template;\n }\n }\n /**\r\n * Generates formatting template for a national phone number,\r\n * optionally containing a national prefix, for a format.\r\n * @param {Format} format\r\n * @param {string} nationalPrefix\r\n * @return {string}\r\n */\n\n }, {\n key: \"getTemplateForFormat\",\n value: function getTemplateForFormat(format, _ref4) {\n var nationalSignificantNumber = _ref4.nationalSignificantNumber,\n international = _ref4.international,\n nationalPrefix = _ref4.nationalPrefix,\n complexPrefixBeforeNationalSignificantNumber = _ref4.complexPrefixBeforeNationalSignificantNumber;\n var pattern = format.pattern();\n /* istanbul ignore else */\n\n if (SUPPORT_LEGACY_FORMATTING_PATTERNS) {\n pattern = pattern // Replace anything in the form of [..] with \\d\n .replace(CREATE_CHARACTER_CLASS_PATTERN(), '\\\\d') // Replace any standalone digit (not the one in `{}`) with \\d\n .replace(CREATE_STANDALONE_DIGIT_PATTERN(), '\\\\d');\n } // Generate a dummy national number (consisting of `9`s)\n // that fits this format's `pattern`.\n //\n // This match will always succeed,\n // because the \"longest dummy phone number\"\n // has enough length to accomodate any possible\n // national phone number format pattern.\n //\n\n\n var digits = LONGEST_DUMMY_PHONE_NUMBER.match(pattern)[0]; // If the national number entered is too long\n // for any phone number format, then abort.\n\n if (nationalSignificantNumber.length > digits.length) {\n return;\n } // Get a formatting template which can be used to efficiently format\n // a partial number where digits are added one by one.\n // Below `strictPattern` is used for the\n // regular expression (with `^` and `$`).\n // This wasn't originally in Google's `libphonenumber`\n // and I guess they don't really need it\n // because they're not using \"templates\" to format phone numbers\n // but I added `strictPattern` after encountering\n // South Korean phone number formatting bug.\n //\n // Non-strict regular expression bug demonstration:\n //\n // this.nationalSignificantNumber : `111111111` (9 digits)\n //\n // pattern : (\\d{2})(\\d{3,4})(\\d{4})\n // format : `$1 $2 $3`\n // digits : `9999999999` (10 digits)\n //\n // '9999999999'.replace(new RegExp(/(\\d{2})(\\d{3,4})(\\d{4})/g), '$1 $2 $3') = \"99 9999 9999\"\n //\n // template : xx xxxx xxxx\n //\n // But the correct template in this case is `xx xxx xxxx`.\n // The template was generated incorrectly because of the\n // `{3,4}` variability in the `pattern`.\n //\n // The fix is, if `this.nationalSignificantNumber` has already sufficient length\n // to satisfy the `pattern` completely then `this.nationalSignificantNumber`\n // is used instead of `digits`.\n\n\n var strictPattern = new RegExp('^' + pattern + '$');\n var nationalNumberDummyDigits = nationalSignificantNumber.replace(/\\d/g, DUMMY_DIGIT); // If `this.nationalSignificantNumber` has already sufficient length\n // to satisfy the `pattern` completely then use it\n // instead of `digits`.\n\n if (strictPattern.test(nationalNumberDummyDigits)) {\n digits = nationalNumberDummyDigits;\n }\n\n var numberFormat = this.getFormatFormat(format, international);\n var nationalPrefixIncludedInTemplate; // If a user did input a national prefix (and that's guaranteed),\n // and if a `format` does have a national prefix formatting rule,\n // then see if that national prefix formatting rule\n // prepends exactly the same national prefix the user has input.\n // If that's the case, then use the `format` with the national prefix formatting rule.\n // Otherwise, use the `format` without the national prefix formatting rule,\n // and prepend a national prefix manually to it.\n\n if (this.shouldTryNationalPrefixFormattingRule(format, {\n international: international,\n nationalPrefix: nationalPrefix\n })) {\n var numberFormatWithNationalPrefix = numberFormat.replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()); // If `national_prefix_formatting_rule` of a `format` simply prepends\n // national prefix at the start of a national (significant) number,\n // then such formatting can be used with `AsYouType` formatter.\n // There seems to be no `else` case: everywhere in metadata,\n // national prefix formatting rule is national prefix + $1,\n // or `($1)`, in which case such format isn't even considered\n // when the user has input a national prefix.\n\n /* istanbul ignore else */\n\n if (parseDigits(format.nationalPrefixFormattingRule()) === (nationalPrefix || '') + parseDigits('$1')) {\n numberFormat = numberFormatWithNationalPrefix;\n nationalPrefixIncludedInTemplate = true; // Replace all digits of the national prefix in the formatting template\n // with `DIGIT_PLACEHOLDER`s.\n\n if (nationalPrefix) {\n var i = nationalPrefix.length;\n\n while (i > 0) {\n numberFormat = numberFormat.replace(/\\d/, DIGIT_PLACEHOLDER);\n i--;\n }\n }\n }\n } // Generate formatting template for this phone number format.\n\n\n var template = digits // Format the dummy phone number according to the format.\n .replace(new RegExp(pattern), numberFormat) // Replace each dummy digit with a DIGIT_PLACEHOLDER.\n .replace(new RegExp(DUMMY_DIGIT, 'g'), DIGIT_PLACEHOLDER); // If a prefix of a national (significant) number is not as simple\n // as just a basic national prefix, then just prepend such prefix\n // before the national (significant) number, optionally spacing\n // the two with a whitespace.\n\n if (!nationalPrefixIncludedInTemplate) {\n if (complexPrefixBeforeNationalSignificantNumber) {\n // Prepend the prefix to the template manually.\n template = repeat(DIGIT_PLACEHOLDER, complexPrefixBeforeNationalSignificantNumber.length) + ' ' + template;\n } else if (nationalPrefix) {\n // Prepend national prefix to the template manually.\n template = repeat(DIGIT_PLACEHOLDER, nationalPrefix.length) + this.getSeparatorAfterNationalPrefix(format) + template;\n }\n }\n\n if (international) {\n template = applyInternationalSeparatorStyle(template);\n }\n\n return template;\n }\n }, {\n key: \"formatNextNationalNumberDigits\",\n value: function formatNextNationalNumberDigits(digits) {\n var result = populateTemplateWithDigits(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition, digits);\n\n if (!result) {\n // Reset the format.\n this.resetFormat();\n return;\n }\n\n this.populatedNationalNumberTemplate = result[0];\n this.populatedNationalNumberTemplatePosition = result[1]; // Return the formatted phone number so far.\n\n return cutAndStripNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1); // The old way which was good for `input-format` but is not so good\n // for `react-phone-number-input`'s default input (`InputBasic`).\n // return closeNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1)\n // \t.replace(new RegExp(DIGIT_PLACEHOLDER, 'g'), ' ')\n }\n }, {\n key: \"shouldTryNationalPrefixFormattingRule\",\n value: function shouldTryNationalPrefixFormattingRule(format, _ref5) {\n var international = _ref5.international,\n nationalPrefix = _ref5.nationalPrefix;\n\n if (format.nationalPrefixFormattingRule()) {\n // In some countries, `national_prefix_formatting_rule` is `($1)`,\n // so it applies even if the user hasn't input a national prefix.\n // `format.usesNationalPrefix()` detects such cases.\n var usesNationalPrefix = format.usesNationalPrefix();\n\n if (usesNationalPrefix && nationalPrefix || !usesNationalPrefix && !international) {\n return true;\n }\n }\n }\n }]);\n\n return AsYouTypeFormatter;\n}();\n\nexport { AsYouTypeFormatter as default };\n//# sourceMappingURL=AsYouTypeFormatter.js.map","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport _extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport extractNationalNumberFromPossiblyIncompleteNumber from './helpers/extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport stripIddPrefix from './helpers/stripIddPrefix.js';\nimport parseDigits from './helpers/parseDigits.js';\nimport { VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from './constants.js';\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART = '[' + VALID_PUNCTUATION + VALID_DIGITS + ']+';\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN = new RegExp('^' + VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART + '$', 'i');\nvar VALID_FORMATTED_PHONE_NUMBER_PART = '(?:' + '[' + PLUS_CHARS + ']' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*' + '|' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']+' + ')';\nvar AFTER_PHONE_NUMBER_DIGITS_END_PATTERN = new RegExp('[^' + VALID_PUNCTUATION + VALID_DIGITS + ']+' + '.*' + '$'); // Tests whether `national_prefix_for_parsing` could match\n// different national prefixes.\n// Matches anything that's not a digit or a square bracket.\n\nvar COMPLEX_NATIONAL_PREFIX = /[^\\d\\[\\]]/;\n\nvar AsYouTypeParser = /*#__PURE__*/function () {\n function AsYouTypeParser(_ref) {\n var defaultCountry = _ref.defaultCountry,\n defaultCallingCode = _ref.defaultCallingCode,\n metadata = _ref.metadata,\n onNationalSignificantNumberChange = _ref.onNationalSignificantNumberChange;\n\n _classCallCheck(this, AsYouTypeParser);\n\n this.defaultCountry = defaultCountry;\n this.defaultCallingCode = defaultCallingCode;\n this.metadata = metadata;\n this.onNationalSignificantNumberChange = onNationalSignificantNumberChange;\n }\n\n _createClass(AsYouTypeParser, [{\n key: \"input\",\n value: function input(text, state) {\n var _extractFormattedDigi = extractFormattedDigitsAndPlus(text),\n _extractFormattedDigi2 = _slicedToArray(_extractFormattedDigi, 2),\n formattedDigits = _extractFormattedDigi2[0],\n hasPlus = _extractFormattedDigi2[1];\n\n var digits = parseDigits(formattedDigits); // Checks for a special case: just a leading `+` has been entered.\n\n var justLeadingPlus;\n\n if (hasPlus) {\n if (!state.digits) {\n state.startInternationalNumber();\n\n if (!digits) {\n justLeadingPlus = true;\n }\n }\n }\n\n if (digits) {\n this.inputDigits(digits, state);\n }\n\n return {\n digits: digits,\n justLeadingPlus: justLeadingPlus\n };\n }\n /**\r\n * Inputs \"next\" phone number digits.\r\n * @param {string} digits\r\n * @return {string} [formattedNumber] Formatted national phone number (if it can be formatted at this stage). Returning `undefined` means \"don't format the national phone number at this stage\".\r\n */\n\n }, {\n key: \"inputDigits\",\n value: function inputDigits(nextDigits, state) {\n var digits = state.digits;\n var hasReceivedThreeLeadingDigits = digits.length < 3 && digits.length + nextDigits.length >= 3; // Append phone number digits.\n\n state.appendDigits(nextDigits); // Attempt to extract IDD prefix:\n // Some users input their phone number in international format,\n // but in an \"out-of-country\" dialing format instead of using the leading `+`.\n // https://github.com/catamphetamine/libphonenumber-js/issues/185\n // Detect such numbers as soon as there're at least 3 digits.\n // Google's library attempts to extract IDD prefix at 3 digits,\n // so this library just copies that behavior.\n // I guess that's because the most commot IDD prefixes are\n // `00` (Europe) and `011` (US).\n // There exist really long IDD prefixes too:\n // for example, in Australia the default IDD prefix is `0011`,\n // and it could even be as long as `14880011`.\n // An IDD prefix is extracted here, and then every time when\n // there's a new digit and the number couldn't be formatted.\n\n if (hasReceivedThreeLeadingDigits) {\n this.extractIddPrefix(state);\n }\n\n if (this.isWaitingForCountryCallingCode(state)) {\n if (!this.extractCountryCallingCode(state)) {\n return;\n }\n } else {\n state.appendNationalSignificantNumberDigits(nextDigits);\n } // If a phone number is being input in international format,\n // then it's not valid for it to have a national prefix.\n // Still, some people incorrectly input such numbers with a national prefix.\n // In such cases, only attempt to strip a national prefix if the number becomes too long.\n // (but that is done later, not here)\n\n\n if (!state.international) {\n if (!this.hasExtractedNationalSignificantNumber) {\n this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {\n return state.update(stateUpdate);\n });\n }\n }\n }\n }, {\n key: \"isWaitingForCountryCallingCode\",\n value: function isWaitingForCountryCallingCode(_ref2) {\n var international = _ref2.international,\n callingCode = _ref2.callingCode;\n return international && !callingCode;\n } // Extracts a country calling code from a number\n // being entered in internatonal format.\n\n }, {\n key: \"extractCountryCallingCode\",\n value: function extractCountryCallingCode(state) {\n var _extractCountryCallin = _extractCountryCallingCode('+' + state.getDigitsWithoutInternationalPrefix(), this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n\n if (countryCallingCode) {\n state.setCallingCode(countryCallingCode);\n state.update({\n nationalSignificantNumber: number\n });\n return true;\n }\n }\n }, {\n key: \"reset\",\n value: function reset(numberingPlan) {\n if (numberingPlan) {\n this.hasSelectedNumberingPlan = true;\n\n var nationalPrefixForParsing = numberingPlan._nationalPrefixForParsing();\n\n this.couldPossiblyExtractAnotherNationalSignificantNumber = nationalPrefixForParsing && COMPLEX_NATIONAL_PREFIX.test(nationalPrefixForParsing);\n } else {\n this.hasSelectedNumberingPlan = undefined;\n this.couldPossiblyExtractAnotherNationalSignificantNumber = undefined;\n }\n }\n /**\r\n * Extracts a national (significant) number from user input.\r\n * Google's library is different in that it only applies `national_prefix_for_parsing`\r\n * and doesn't apply `national_prefix_transform_rule` after that.\r\n * https://github.com/google/libphonenumber/blob/a3d70b0487875475e6ad659af404943211d26456/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L539\r\n * @return {boolean} [extracted]\r\n */\n\n }, {\n key: \"extractNationalSignificantNumber\",\n value: function extractNationalSignificantNumber(nationalDigits, setState) {\n if (!this.hasSelectedNumberingPlan) {\n return;\n }\n\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(nationalDigits, this.metadata),\n nationalPrefix = _extractNationalNumbe.nationalPrefix,\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode;\n\n if (nationalNumber === nationalDigits) {\n return;\n }\n\n this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n return true;\n }\n /**\r\n * In Google's code this function is called \"attempt to extract longer NDD\".\r\n * \"Some national prefixes are a substring of others\", they say.\r\n * @return {boolean} [result] — Returns `true` if extracting a national prefix produced different results from what they were.\r\n */\n\n }, {\n key: \"extractAnotherNationalSignificantNumber\",\n value: function extractAnotherNationalSignificantNumber(nationalDigits, prevNationalSignificantNumber, setState) {\n if (!this.hasExtractedNationalSignificantNumber) {\n return this.extractNationalSignificantNumber(nationalDigits, setState);\n }\n\n if (!this.couldPossiblyExtractAnotherNationalSignificantNumber) {\n return;\n }\n\n var _extractNationalNumbe2 = extractNationalNumberFromPossiblyIncompleteNumber(nationalDigits, this.metadata),\n nationalPrefix = _extractNationalNumbe2.nationalPrefix,\n nationalNumber = _extractNationalNumbe2.nationalNumber,\n carrierCode = _extractNationalNumbe2.carrierCode; // If a national prefix has been extracted previously,\n // then it's always extracted as additional digits are added.\n // That's assuming `extractNationalNumberFromPossiblyIncompleteNumber()`\n // doesn't do anything different from what it currently does.\n // So, just in case, here's this check, though it doesn't occur.\n\n /* istanbul ignore if */\n\n\n if (nationalNumber === prevNationalSignificantNumber) {\n return;\n }\n\n this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n return true;\n }\n }, {\n key: \"onExtractedNationalNumber\",\n value: function onExtractedNationalNumber(nationalPrefix, carrierCode, nationalSignificantNumber, nationalDigits, setState) {\n var complexPrefixBeforeNationalSignificantNumber;\n var nationalSignificantNumberMatchesInput; // This check also works with empty `this.nationalSignificantNumber`.\n\n var nationalSignificantNumberIndex = nationalDigits.lastIndexOf(nationalSignificantNumber); // If the extracted national (significant) number is the\n // last substring of the `digits`, then it means that it hasn't been altered:\n // no digits have been removed from the national (significant) number\n // while applying `national_prefix_transform_rule`.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n\n if (nationalSignificantNumberIndex >= 0 && nationalSignificantNumberIndex === nationalDigits.length - nationalSignificantNumber.length) {\n nationalSignificantNumberMatchesInput = true; // If a prefix of a national (significant) number is not as simple\n // as just a basic national prefix, then such prefix is stored in\n // `this.complexPrefixBeforeNationalSignificantNumber` property and will be\n // prepended \"as is\" to the national (significant) number to produce\n // a formatted result.\n\n var prefixBeforeNationalNumber = nationalDigits.slice(0, nationalSignificantNumberIndex); // `prefixBeforeNationalNumber` is always non-empty,\n // because `onExtractedNationalNumber()` isn't called\n // when a national (significant) number hasn't been actually \"extracted\":\n // when a national (significant) number is equal to the national part of `digits`,\n // then `onExtractedNationalNumber()` doesn't get called.\n\n if (prefixBeforeNationalNumber !== nationalPrefix) {\n complexPrefixBeforeNationalSignificantNumber = prefixBeforeNationalNumber;\n }\n }\n\n setState({\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode,\n nationalSignificantNumber: nationalSignificantNumber,\n nationalSignificantNumberMatchesInput: nationalSignificantNumberMatchesInput,\n complexPrefixBeforeNationalSignificantNumber: complexPrefixBeforeNationalSignificantNumber\n }); // `onExtractedNationalNumber()` is only called when\n // the national (significant) number actually did change.\n\n this.hasExtractedNationalSignificantNumber = true;\n this.onNationalSignificantNumberChange();\n }\n }, {\n key: \"reExtractNationalSignificantNumber\",\n value: function reExtractNationalSignificantNumber(state) {\n // Attempt to extract a national prefix.\n //\n // Some people incorrectly input national prefix\n // in an international phone number.\n // For example, some people write British phone numbers as `+44(0)...`.\n //\n // Also, in some rare cases, it is valid for a national prefix\n // to be a part of an international phone number.\n // For example, mobile phone numbers in Mexico are supposed to be\n // dialled internationally using a `1` national prefix,\n // so the national prefix will be part of an international number.\n //\n // Quote from:\n // https://www.mexperience.com/dialing-cell-phones-in-mexico/\n //\n // \"Dialing a Mexican cell phone from abroad\n // When you are calling a cell phone number in Mexico from outside Mexico,\n // it’s necessary to dial an additional “1” after Mexico’s country code\n // (which is “52”) and before the area code.\n // You also ignore the 045, and simply dial the area code and the\n // cell phone’s number.\n //\n // If you don’t add the “1”, you’ll receive a recorded announcement\n // asking you to redial using it.\n //\n // For example, if you are calling from the USA to a cell phone\n // in Mexico City, you would dial +52 – 1 – 55 – 1234 5678.\n // (Note that this is different to calling a land line in Mexico City\n // from abroad, where the number dialed would be +52 – 55 – 1234 5678)\".\n //\n // Google's demo output:\n // https://libphonenumber.appspot.com/phonenumberparser?number=%2b5215512345678&country=MX\n //\n if (this.extractAnotherNationalSignificantNumber(state.getNationalDigits(), state.nationalSignificantNumber, function (stateUpdate) {\n return state.update(stateUpdate);\n })) {\n return true;\n } // If no format matches the phone number, then it could be\n // \"a really long IDD\" (quote from a comment in Google's library).\n // An IDD prefix is first extracted when the user has entered at least 3 digits,\n // and then here — every time when there's a new digit and the number\n // couldn't be formatted.\n // For example, in Australia the default IDD prefix is `0011`,\n // and it could even be as long as `14880011`.\n //\n // Could also check `!hasReceivedThreeLeadingDigits` here\n // to filter out the case when this check duplicates the one\n // already performed when there're 3 leading digits,\n // but it's not a big deal, and in most cases there\n // will be a suitable `format` when there're 3 leading digits.\n //\n\n\n if (this.extractIddPrefix(state)) {\n this.extractCallingCodeAndNationalSignificantNumber(state);\n return true;\n } // Google's AsYouType formatter supports sort of an \"autocorrection\" feature\n // when it \"autocorrects\" numbers that have been input for a country\n // with that country's calling code.\n // Such \"autocorrection\" feature looks weird, but different people have been requesting it:\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n // https://github.com/catamphetamine/libphonenumber-js/issues/375\n // https://github.com/catamphetamine/libphonenumber-js/issues/316\n\n\n if (this.fixMissingPlus(state)) {\n this.extractCallingCodeAndNationalSignificantNumber(state);\n return true;\n }\n }\n }, {\n key: \"extractIddPrefix\",\n value: function extractIddPrefix(state) {\n // An IDD prefix can't be present in a number written with a `+`.\n // Also, don't re-extract an IDD prefix if has already been extracted.\n var international = state.international,\n IDDPrefix = state.IDDPrefix,\n digits = state.digits,\n nationalSignificantNumber = state.nationalSignificantNumber;\n\n if (international || IDDPrefix) {\n return;\n } // Some users input their phone number in \"out-of-country\"\n // dialing format instead of using the leading `+`.\n // https://github.com/catamphetamine/libphonenumber-js/issues/185\n // Detect such numbers.\n\n\n var numberWithoutIDD = stripIddPrefix(digits, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata);\n\n if (numberWithoutIDD !== undefined && numberWithoutIDD !== digits) {\n // If an IDD prefix was stripped then convert the IDD-prefixed number\n // to international number for subsequent parsing.\n state.update({\n IDDPrefix: digits.slice(0, digits.length - numberWithoutIDD.length)\n });\n this.startInternationalNumber(state, {\n country: undefined,\n callingCode: undefined\n });\n return true;\n }\n }\n }, {\n key: \"fixMissingPlus\",\n value: function fixMissingPlus(state) {\n if (!state.international) {\n var _extractCountryCallin2 = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(state.digits, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n newCallingCode = _extractCountryCallin2.countryCallingCode,\n number = _extractCountryCallin2.number;\n\n if (newCallingCode) {\n state.update({\n missingPlus: true\n });\n this.startInternationalNumber(state, {\n country: state.country,\n callingCode: newCallingCode\n });\n return true;\n }\n }\n }\n }, {\n key: \"startInternationalNumber\",\n value: function startInternationalNumber(state, _ref3) {\n var country = _ref3.country,\n callingCode = _ref3.callingCode;\n state.startInternationalNumber(country, callingCode); // If a national (significant) number has been extracted before, reset it.\n\n if (state.nationalSignificantNumber) {\n state.resetNationalSignificantNumber();\n this.onNationalSignificantNumberChange();\n this.hasExtractedNationalSignificantNumber = undefined;\n }\n }\n }, {\n key: \"extractCallingCodeAndNationalSignificantNumber\",\n value: function extractCallingCodeAndNationalSignificantNumber(state) {\n if (this.extractCountryCallingCode(state)) {\n // `this.extractCallingCode()` is currently called when the number\n // couldn't be formatted during the standard procedure.\n // Normally, the national prefix would be re-extracted\n // for an international number if such number couldn't be formatted,\n // but since it's already not able to be formatted,\n // there won't be yet another retry, so also extract national prefix here.\n this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {\n return state.update(stateUpdate);\n });\n }\n }\n }]);\n\n return AsYouTypeParser;\n}();\n/**\r\n * Extracts formatted phone number from text (if there's any).\r\n * @param {string} text\r\n * @return {string} [formattedPhoneNumber]\r\n */\n\n\nexport { AsYouTypeParser as default };\n\nfunction extractFormattedPhoneNumber(text) {\n // Attempt to extract a possible number from the string passed in.\n var startsAt = text.search(VALID_FORMATTED_PHONE_NUMBER_PART);\n\n if (startsAt < 0) {\n return;\n } // Trim everything to the left of the phone number.\n\n\n text = text.slice(startsAt); // Trim the `+`.\n\n var hasPlus;\n\n if (text[0] === '+') {\n hasPlus = true;\n text = text.slice('+'.length);\n } // Trim everything to the right of the phone number.\n\n\n text = text.replace(AFTER_PHONE_NUMBER_DIGITS_END_PATTERN, ''); // Re-add the previously trimmed `+`.\n\n if (hasPlus) {\n text = '+' + text;\n }\n\n return text;\n}\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\n\n\nfunction _extractFormattedDigitsAndPlus(text) {\n // Extract a formatted phone number part from text.\n var extractedNumber = extractFormattedPhoneNumber(text) || ''; // Trim a `+`.\n\n if (extractedNumber[0] === '+') {\n return [extractedNumber.slice('+'.length), true];\n }\n\n return [extractedNumber];\n}\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\n\n\nexport function extractFormattedDigitsAndPlus(text) {\n var _extractFormattedDigi3 = _extractFormattedDigitsAndPlus(text),\n _extractFormattedDigi4 = _slicedToArray(_extractFormattedDigi3, 2),\n formattedDigits = _extractFormattedDigi4[0],\n hasPlus = _extractFormattedDigi4[1]; // If the extracted phone number part\n // can possibly be a part of some valid phone number\n // then parse phone number characters from a formatted phone number.\n\n\n if (!VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN.test(formattedDigits)) {\n formattedDigits = '';\n }\n\n return [formattedDigits, hasPlus];\n}\n//# sourceMappingURL=AsYouTypeParser.js.map","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport Metadata from './metadata.js';\nimport PhoneNumber from './PhoneNumber.js';\nimport AsYouTypeState from './AsYouTypeState.js';\nimport AsYouTypeFormatter, { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.js';\nimport AsYouTypeParser, { extractFormattedDigitsAndPlus } from './AsYouTypeParser.js';\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport getCountryByNationalNumber from './helpers/getCountryByNationalNumber.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\nvar AsYouType = /*#__PURE__*/function () {\n /**\r\n * @param {(string|object)?} [optionsOrDefaultCountry] - The default country used for parsing non-international phone numbers. Can also be an `options` object.\r\n * @param {Object} metadata\r\n */\n function AsYouType(optionsOrDefaultCountry, metadata) {\n _classCallCheck(this, AsYouType);\n\n this.metadata = new Metadata(metadata);\n\n var _this$getCountryAndCa = this.getCountryAndCallingCode(optionsOrDefaultCountry),\n _this$getCountryAndCa2 = _slicedToArray(_this$getCountryAndCa, 2),\n defaultCountry = _this$getCountryAndCa2[0],\n defaultCallingCode = _this$getCountryAndCa2[1]; // `this.defaultCountry` and `this.defaultCallingCode` aren't required to be in sync.\n // For example, `this.defaultCountry` could be `\"AR\"` and `this.defaultCallingCode` could be `undefined`.\n // So `this.defaultCountry` and `this.defaultCallingCode` are totally independent.\n\n\n this.defaultCountry = defaultCountry;\n this.defaultCallingCode = defaultCallingCode;\n this.reset();\n }\n\n _createClass(AsYouType, [{\n key: \"getCountryAndCallingCode\",\n value: function getCountryAndCallingCode(optionsOrDefaultCountry) {\n // Set `defaultCountry` and `defaultCallingCode` options.\n var defaultCountry;\n var defaultCallingCode; // Turns out `null` also has type \"object\". Weird.\n\n if (optionsOrDefaultCountry) {\n if (_typeof(optionsOrDefaultCountry) === 'object') {\n defaultCountry = optionsOrDefaultCountry.defaultCountry;\n defaultCallingCode = optionsOrDefaultCountry.defaultCallingCode;\n } else {\n defaultCountry = optionsOrDefaultCountry;\n }\n }\n\n if (defaultCountry && !this.metadata.hasCountry(defaultCountry)) {\n defaultCountry = undefined;\n }\n\n if (defaultCallingCode) {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (this.metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n defaultCountry = '001';\n }\n }\n }\n\n return [defaultCountry, defaultCallingCode];\n }\n /**\r\n * Inputs \"next\" phone number characters.\r\n * @param {string} text\r\n * @return {string} Formatted phone number characters that have been input so far.\r\n */\n\n }, {\n key: \"input\",\n value: function input(text) {\n var _this$parser$input = this.parser.input(text, this.state),\n digits = _this$parser$input.digits,\n justLeadingPlus = _this$parser$input.justLeadingPlus;\n\n if (justLeadingPlus) {\n this.formattedOutput = '+';\n } else if (digits) {\n this.determineTheCountryIfNeeded(); // Match the available formats by the currently available leading digits.\n\n if (this.state.nationalSignificantNumber) {\n this.formatter.narrowDownMatchingFormats(this.state);\n }\n\n var formattedNationalNumber;\n\n if (this.metadata.hasSelectedNumberingPlan()) {\n formattedNationalNumber = this.formatter.format(digits, this.state);\n }\n\n if (formattedNationalNumber === undefined) {\n // See if another national (significant) number could be re-extracted.\n if (this.parser.reExtractNationalSignificantNumber(this.state)) {\n this.determineTheCountryIfNeeded(); // If it could, then re-try formatting the new national (significant) number.\n\n var nationalDigits = this.state.getNationalDigits();\n\n if (nationalDigits) {\n formattedNationalNumber = this.formatter.format(nationalDigits, this.state);\n }\n }\n }\n\n this.formattedOutput = formattedNationalNumber ? this.getFullNumber(formattedNationalNumber) : this.getNonFormattedNumber();\n }\n\n return this.formattedOutput;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n var _this = this;\n\n this.state = new AsYouTypeState({\n onCountryChange: function onCountryChange(country) {\n // Before version `1.6.0`, the official `AsYouType` formatter API\n // included the `.country` property of an `AsYouType` instance.\n // Since that property (along with the others) have been moved to\n // `this.state`, `this.country` property is emulated for compatibility\n // with the old versions.\n _this.country = country;\n },\n onCallingCodeChange: function onCallingCodeChange(callingCode, country) {\n _this.metadata.selectNumberingPlan(country, callingCode);\n\n _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n\n _this.parser.reset(_this.metadata.numberingPlan);\n }\n });\n this.formatter = new AsYouTypeFormatter({\n state: this.state,\n metadata: this.metadata\n });\n this.parser = new AsYouTypeParser({\n defaultCountry: this.defaultCountry,\n defaultCallingCode: this.defaultCallingCode,\n metadata: this.metadata,\n state: this.state,\n onNationalSignificantNumberChange: function onNationalSignificantNumberChange() {\n _this.determineTheCountryIfNeeded();\n\n _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n }\n });\n this.state.reset({\n country: this.defaultCountry,\n callingCode: this.defaultCallingCode\n });\n this.formattedOutput = '';\n return this;\n }\n /**\r\n * Returns `true` if the phone number is being input in international format.\r\n * In other words, returns `true` if and only if the parsed phone number starts with a `\"+\"`.\r\n * @return {boolean}\r\n */\n\n }, {\n key: \"isInternational\",\n value: function isInternational() {\n return this.state.international;\n }\n /**\r\n * Returns the \"calling code\" part of the phone number when it's being input\r\n * in an international format.\r\n * If no valid calling code has been entered so far, returns `undefined`.\r\n * @return {string} [callingCode]\r\n */\n\n }, {\n key: \"getCallingCode\",\n value: function getCallingCode() {\n // If the number is being input in national format and some \"default calling code\"\n // has been passed to `AsYouType` constructor, then `this.state.callingCode`\n // is equal to that \"default calling code\".\n //\n // If the number is being input in national format and no \"default calling code\"\n // has been passed to `AsYouType` constructor, then returns `undefined`,\n // even if a \"default country\" has been passed to `AsYouType` constructor.\n //\n if (this.isInternational()) {\n return this.state.callingCode;\n }\n } // A legacy alias.\n\n }, {\n key: \"getCountryCallingCode\",\n value: function getCountryCallingCode() {\n return this.getCallingCode();\n }\n /**\r\n * Returns a two-letter country code of the phone number.\r\n * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n * Returns `undefined` if no phone number has been input yet.\r\n * @return {string} [country]\r\n */\n\n }, {\n key: \"getCountry\",\n value: function getCountry() {\n var digits = this.state.digits; // Return `undefined` if no digits have been input yet.\n\n if (digits) {\n return this._getCountry();\n }\n }\n /**\r\n * Returns a two-letter country code of the phone number.\r\n * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n * @return {string} [country]\r\n */\n\n }, {\n key: \"_getCountry\",\n value: function _getCountry() {\n var country = this.state.country;\n /* istanbul ignore if */\n\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n // `AsYouType.getCountry()` returns `undefined`\n // for \"non-geographic\" phone numbering plans.\n if (country === '001') {\n return;\n }\n }\n\n return country;\n }\n }, {\n key: \"determineTheCountryIfNeeded\",\n value: function determineTheCountryIfNeeded() {\n // Suppose a user enters a phone number in international format,\n // and there're several countries corresponding to that country calling code,\n // and a country has been derived from the number, and then\n // a user enters one more digit and the number is no longer\n // valid for the derived country, so the country should be re-derived\n // on every new digit in those cases.\n //\n // If the phone number is being input in national format,\n // then it could be a case when `defaultCountry` wasn't specified\n // when creating `AsYouType` instance, and just `defaultCallingCode` was specified,\n // and that \"calling code\" could correspond to a \"non-geographic entity\",\n // or there could be several countries corresponding to that country calling code.\n // In those cases, `this.country` is `undefined` and should be derived\n // from the number. Again, if country calling code is ambiguous, then\n // `this.country` should be re-derived with each new digit.\n //\n if (!this.state.country || this.isCountryCallingCodeAmbiguous()) {\n this.determineTheCountry();\n }\n } // Prepends `+CountryCode ` in case of an international phone number\n\n }, {\n key: \"getFullNumber\",\n value: function getFullNumber(formattedNationalNumber) {\n var _this2 = this;\n\n if (this.isInternational()) {\n var prefix = function prefix(text) {\n return _this2.formatter.getInternationalPrefixBeforeCountryCallingCode(_this2.state, {\n spacing: text ? true : false\n }) + text;\n };\n\n var callingCode = this.state.callingCode;\n\n if (!callingCode) {\n return prefix(\"\".concat(this.state.getDigitsWithoutInternationalPrefix()));\n }\n\n if (!formattedNationalNumber) {\n return prefix(callingCode);\n }\n\n return prefix(\"\".concat(callingCode, \" \").concat(formattedNationalNumber));\n }\n\n return formattedNationalNumber;\n }\n }, {\n key: \"getNonFormattedNationalNumberWithPrefix\",\n value: function getNonFormattedNationalNumberWithPrefix() {\n var _this$state = this.state,\n nationalSignificantNumber = _this$state.nationalSignificantNumber,\n complexPrefixBeforeNationalSignificantNumber = _this$state.complexPrefixBeforeNationalSignificantNumber,\n nationalPrefix = _this$state.nationalPrefix;\n var number = nationalSignificantNumber;\n var prefix = complexPrefixBeforeNationalSignificantNumber || nationalPrefix;\n\n if (prefix) {\n number = prefix + number;\n }\n\n return number;\n }\n }, {\n key: \"getNonFormattedNumber\",\n value: function getNonFormattedNumber() {\n var nationalSignificantNumberMatchesInput = this.state.nationalSignificantNumberMatchesInput;\n return this.getFullNumber(nationalSignificantNumberMatchesInput ? this.getNonFormattedNationalNumberWithPrefix() : this.state.getNationalDigits());\n }\n }, {\n key: \"getNonFormattedTemplate\",\n value: function getNonFormattedTemplate() {\n var number = this.getNonFormattedNumber();\n\n if (number) {\n return number.replace(/[\\+\\d]/g, DIGIT_PLACEHOLDER);\n }\n }\n }, {\n key: \"isCountryCallingCodeAmbiguous\",\n value: function isCountryCallingCodeAmbiguous() {\n var callingCode = this.state.callingCode;\n var countryCodes = this.metadata.getCountryCodesForCallingCode(callingCode);\n return countryCodes && countryCodes.length > 1;\n } // Determines the country of the phone number\n // entered so far based on the country phone code\n // and the national phone number.\n\n }, {\n key: \"determineTheCountry\",\n value: function determineTheCountry() {\n this.state.setCountry(getCountryByCallingCode(this.isInternational() ? this.state.callingCode : this.defaultCallingCode, {\n nationalNumber: this.state.nationalSignificantNumber,\n defaultCountry: this.defaultCountry,\n metadata: this.metadata\n }));\n }\n /**\r\n * Returns a E.164 phone number value for the user's input.\r\n *\r\n * For example, for country `\"US\"` and input `\"(222) 333-4444\"`\r\n * it will return `\"+12223334444\"`.\r\n *\r\n * For international phone number input, it will also auto-correct\r\n * some minor errors such as using a national prefix when writing\r\n * an international phone number. For example, if the user inputs\r\n * `\"+44 0 7400 000000\"` then it will return an auto-corrected\r\n * `\"+447400000000\"` phone number value.\r\n *\r\n * Will return `undefined` if no digits have been input,\r\n * or when inputting a phone number in national format and no\r\n * default country or default \"country calling code\" have been set.\r\n *\r\n * @return {string} [value]\r\n */\n\n }, {\n key: \"getNumberValue\",\n value: function getNumberValue() {\n var _this$state2 = this.state,\n digits = _this$state2.digits,\n callingCode = _this$state2.callingCode,\n country = _this$state2.country,\n nationalSignificantNumber = _this$state2.nationalSignificantNumber; // Will return `undefined` if no digits have been input.\n\n if (!digits) {\n return;\n }\n\n if (this.isInternational()) {\n if (callingCode) {\n return '+' + callingCode + nationalSignificantNumber;\n } else {\n return '+' + digits;\n }\n } else {\n if (country || callingCode) {\n var callingCode_ = country ? this.metadata.countryCallingCode() : callingCode;\n return '+' + callingCode_ + nationalSignificantNumber;\n }\n }\n }\n /**\r\n * Returns an instance of `PhoneNumber` class.\r\n * Will return `undefined` if no national (significant) number\r\n * digits have been entered so far, or if no `defaultCountry` has been\r\n * set and the user enters a phone number not in international format.\r\n */\n\n }, {\n key: \"getNumber\",\n value: function getNumber() {\n var _this$state3 = this.state,\n nationalSignificantNumber = _this$state3.nationalSignificantNumber,\n carrierCode = _this$state3.carrierCode,\n callingCode = _this$state3.callingCode; // `this._getCountry()` is basically same as `this.state.country`\n // with the only change that it return `undefined` in case of a\n // \"non-geographic\" numbering plan instead of `\"001\"` \"internal use\" value.\n\n var country = this._getCountry();\n\n if (!nationalSignificantNumber) {\n return;\n } // `state.country` and `state.callingCode` aren't required to be in sync.\n // For example, `country` could be `\"AR\"` and `callingCode` could be `undefined`.\n // So `country` and `callingCode` are totally independent.\n\n\n if (!country && !callingCode) {\n return;\n } // By default, if `defaultCountry` parameter was passed when\n // creating `AsYouType` instance, `state.country` is gonna be\n // that `defaultCountry`, which doesn't entirely conform with\n // `parsePhoneNumber()`'s behavior where it attempts to determine\n // the country more precisely in cases when multiple countries\n // could correspond to the same `countryCallingCode`.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417192969\n //\n // Because `AsYouType.getNumber()` method is supposed to be a 1:1\n // equivalent for `parsePhoneNumber(AsYouType.getNumberValue())`,\n // then it should also behave accordingly in cases of `country` ambiguity.\n // That's how users of this library would expect it to behave anyway.\n //\n\n\n if (country) {\n if (country === this.defaultCountry) {\n // `state.country` and `state.callingCode` aren't required to be in sync.\n // For example, `state.country` could be `\"AR\"` and `state.callingCode` could be `undefined`.\n // So `state.country` and `state.callingCode` are totally independent.\n var metadata = new Metadata(this.metadata.metadata);\n metadata.selectNumberingPlan(country);\n\n var _callingCode = metadata.numberingPlan.callingCode();\n\n var ambiguousCountries = this.metadata.getCountryCodesForCallingCode(_callingCode);\n\n if (ambiguousCountries.length > 1) {\n var exactCountry = getCountryByNationalNumber(nationalSignificantNumber, {\n countries: ambiguousCountries,\n defaultCountry: this.defaultCountry,\n metadata: this.metadata.metadata\n });\n\n if (exactCountry) {\n country = exactCountry;\n }\n }\n }\n }\n\n var phoneNumber = new PhoneNumber(country || callingCode, nationalSignificantNumber, this.metadata.metadata);\n\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n } // Phone number extensions are not supported by \"As You Type\" formatter.\n\n\n return phoneNumber;\n }\n /**\r\n * Returns `true` if the phone number is \"possible\".\r\n * Is just a shortcut for `PhoneNumber.isPossible()`.\r\n * @return {boolean}\r\n */\n\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n var phoneNumber = this.getNumber();\n\n if (!phoneNumber) {\n return false;\n }\n\n return phoneNumber.isPossible();\n }\n /**\r\n * Returns `true` if the phone number is \"valid\".\r\n * Is just a shortcut for `PhoneNumber.isValid()`.\r\n * @return {boolean}\r\n */\n\n }, {\n key: \"isValid\",\n value: function isValid() {\n var phoneNumber = this.getNumber();\n\n if (!phoneNumber) {\n return false;\n }\n\n return phoneNumber.isValid();\n }\n /**\r\n * @deprecated\r\n * This method is used in `react-phone-number-input/source/input-control.js`\r\n * in versions before `3.0.16`.\r\n */\n\n }, {\n key: \"getNationalNumber\",\n value: function getNationalNumber() {\n return this.state.nationalSignificantNumber;\n }\n /**\r\n * Returns the phone number characters entered by the user.\r\n * @return {string}\r\n */\n\n }, {\n key: \"getChars\",\n value: function getChars() {\n return (this.state.international ? '+' : '') + this.state.digits;\n }\n /**\r\n * Returns the template for the formatted phone number.\r\n * @return {string}\r\n */\n\n }, {\n key: \"getTemplate\",\n value: function getTemplate() {\n return this.formatter.getTemplate(this.state) || this.getNonFormattedTemplate() || '';\n }\n }]);\n\n return AsYouType;\n}();\n\nexport { AsYouType as default };\n//# sourceMappingURL=AsYouType.js.map","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.mobile.json.js'\r\n\r\nimport { AsYouType as _AsYouType } from '../../core/index.js'\r\n\r\nexport function AsYouType(country) {\r\n\treturn _AsYouType.call(this, country, metadata)\r\n}\r\n\r\nAsYouType.prototype = Object.create(_AsYouType.prototype, {})\r\nAsYouType.prototype.constructor = AsYouType","import PhoneNumber from './PhoneNumber.js';\nexport default function getExampleNumber(country, examples, metadata) {\n if (examples[country]) {\n return new PhoneNumber(country, examples[country], metadata);\n }\n}\n//# sourceMappingURL=getExampleNumber.js.map","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { getExampleNumber as _getExampleNumber } from '../../core/index.js'\r\n\r\nexport function getExampleNumber() {\r\n\treturn withMetadataArgument(_getExampleNumber, arguments)\r\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// https://stackoverflow.com/a/46971044/970769\n// \"Breaking changes in Typescript 2.1\"\n// \"Extending built-ins like Error, Array, and Map may no longer work.\"\n// \"As a recommendation, you can manually adjust the prototype immediately after any super(...) calls.\"\n// https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nvar ParseError = /*#__PURE__*/function (_Error) {\n _inherits(ParseError, _Error);\n\n var _super = _createSuper(ParseError);\n\n function ParseError(code) {\n var _this;\n\n _classCallCheck(this, ParseError);\n\n _this = _super.call(this, code); // Set the prototype explicitly.\n // Any subclass of FooError will have to manually set the prototype as well.\n\n Object.setPrototypeOf(_assertThisInitialized(_this), ParseError.prototype);\n _this.name = _this.constructor.name;\n return _this;\n }\n\n return _createClass(ParseError);\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nexport { ParseError as default };\n//# sourceMappingURL=ParseError.js.map","import { VALID_DIGITS } from '../../constants.js'; // The RFC 3966 format for extensions.\n\nvar RFC3966_EXTN_PREFIX = ';ext=';\n/**\r\n * Helper method for constructing regular expressions for parsing. Creates\r\n * an expression that captures up to max_length digits.\r\n * @return {string} RegEx pattern to capture extension digits.\r\n */\n\nvar getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) {\n return \"([\".concat(VALID_DIGITS, \"]{1,\").concat(maxLength, \"})\");\n};\n/**\r\n * Helper initialiser method to create the regular-expression pattern to match\r\n * extensions.\r\n * Copy-pasted from Google's `libphonenumber`:\r\n * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766\r\n * @return {string} RegEx pattern to capture extensions.\r\n */\n\n\nexport default function createExtensionPattern(purpose) {\n // We cap the maximum length of an extension based on the ambiguity of the way\n // the extension is prefixed. As per ITU, the officially allowed length for\n // extensions is actually 40, but we don't support this since we haven't seen real\n // examples and this introduces many false interpretations as the extension labels\n // are not standardized.\n\n /** @type {string} */\n var extLimitAfterExplicitLabel = '20';\n /** @type {string} */\n\n var extLimitAfterLikelyLabel = '15';\n /** @type {string} */\n\n var extLimitAfterAmbiguousChar = '9';\n /** @type {string} */\n\n var extLimitWhenNotSure = '6';\n /** @type {string} */\n\n var possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\xA0\\\\t,]*\"; // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\n\n /** @type {string} */\n\n var possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\";\n /** @type {string} */\n\n var optionalExtnSuffix = \"#?\"; // Here the extension is called out in more explicit way, i.e mentioning it obvious\n // patterns like \"ext.\".\n\n /** @type {string} */\n\n var explicitExtLabels = \"(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\"; // One-character symbols that can be used to indicate an extension, and less\n // commonly used or more ambiguous extension labels.\n\n /** @type {string} */\n\n var ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\"; // When extension is not separated clearly.\n\n /** @type {string} */\n\n var ambiguousSeparator = \"[- ]+\"; // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\n // comma as extension label may have it.\n\n /** @type {string} */\n\n var possibleSeparatorsNumberExtLabelNoComma = \"[ \\xA0\\\\t]*\"; // \",,\" is commonly used for auto dialling the extension when connected. First\n // comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do\n // not repeat it here. Semi-colon works in Iphone and Android also to pop up a\n // button with the extension number following.\n\n /** @type {string} */\n\n var autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\n /** @type {string} */\n\n var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\n /** @type {string} */\n\n var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix;\n /** @type {string} */\n\n var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n /** @type {string} */\n\n var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\n /** @type {string} */\n\n var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix;\n /** @type {string} */\n\n var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + \"(?:,)+\" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix; // The first regular expression covers RFC 3966 format, where the extension is added\n // using \";ext=\". The second more generic where extension is mentioned with explicit\n // labels like \"ext:\". In both the above cases we allow more numbers in extension than\n // any other extension labels. The third one captures when single character extension\n // labels or less commonly used labels are used. In such cases we capture fewer\n // extension digits in order to reduce the chance of falsely interpreting two\n // numbers beside each other as a number + extension. The fourth one covers the\n // special case of American numbers where the extension is written with a hash\n // at the end, such as \"- 503#\". The fifth one is exclusively for extension\n // autodialling formats which are used when dialling and in this case we accept longer\n // extensions. The last one is more liberal on the number of commas that acts as\n // extension labels, so we have a strict cap on the number of digits in such extensions.\n\n return rfcExtn + \"|\" + explicitExtn + \"|\" + ambiguousExtn + \"|\" + americanStyleExtnWithSuffix + \"|\" + autoDiallingExtn + \"|\" + onlyCommasExtn;\n}\n//# sourceMappingURL=createExtensionPattern.js.map","import { MIN_LENGTH_FOR_NSN, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from '../constants.js';\nimport createExtensionPattern from './extension/createExtensionPattern.js'; // Regular expression of viable phone numbers. This is location independent.\n// Checks we have at least three leading digits, and only valid punctuation,\n// alpha characters and digits in the phone number. Does not include extension\n// data. The symbol 'x' is allowed here as valid punctuation since it is often\n// used as a placeholder for carrier codes, for example in Brazilian phone\n// numbers. We also allow multiple '+' characters at the start.\n//\n// Corresponds to the following:\n// [digits]{minLengthNsn}|\n// plus_sign*\n// (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n// The first reg-ex is to allow short numbers (two digits long) to be parsed if\n// they are entered as \"15\" etc, but only if there is no punctuation in them.\n// The second expression restricts the number of digits to three or more, but\n// then allows them to be in international form, and to have alpha-characters\n// and punctuation. We split up the two reg-exes here and combine them when\n// creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n// with ^ and append $ to each branch.\n//\n// \"Note VALID_PUNCTUATION starts with a -,\n// so must be the first in the range\" (c) Google devs.\n// (wtf did they mean by saying that; probably nothing)\n//\n\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}'; //\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\n\nexport var VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*'; // This regular expression isn't present in Google's `libphonenumber`\n// and is only used to determine whether the phone number being input\n// is too short for it to even consider it a \"valid\" number.\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\n\nvar VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){1,2}' + '$', 'i');\nexport var VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER + // Phone number extensions\n'(?:' + createExtensionPattern() + ')?'; // The combined regular expression for valid phone numbers:\n//\n\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp( // Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' + // Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i'); // Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\n\nexport default function isViablePhoneNumber(number) {\n return number.length >= MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number);\n} // This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\n\nexport function isViablePhoneNumberStart(number) {\n return VALID_PHONE_NUMBER_START_REG_EXP.test(number);\n}\n//# sourceMappingURL=isViablePhoneNumber.js.map","import createExtensionPattern from './createExtensionPattern.js'; // Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\n\nvar EXTN_PATTERN = new RegExp('(?:' + createExtensionPattern() + ')$', 'i'); // Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\n\nexport default function extractExtension(number) {\n var start = number.search(EXTN_PATTERN);\n\n if (start < 0) {\n return {};\n } // If we find a potential extension, and the number preceding this is a viable\n // number, we assume it is an extension.\n\n\n var numberWithoutExtension = number.slice(0, start);\n var matches = number.match(EXTN_PATTERN);\n var i = 1;\n\n while (i < matches.length) {\n if (matches[i]) {\n return {\n number: numberWithoutExtension,\n ext: matches[i]\n };\n }\n\n i++;\n }\n}\n//# sourceMappingURL=extractExtension.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { parseDigit } from './helpers/parseDigits.js';\n/**\r\n * Parses phone number characters from a string.\r\n * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * // Outputs '8800555'.\r\n * parseIncompletePhoneNumber('8 (800) 555')\r\n * // Outputs '+7800555'.\r\n * parseIncompletePhoneNumber('+7 800 555')\r\n * ```\r\n */\n\nexport default function parseIncompletePhoneNumber(string) {\n var result = ''; // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n result += parsePhoneNumberCharacter(character, result) || '';\n }\n\n return result;\n}\n/**\r\n * Parses next character while parsing phone number digits (including a `+`)\r\n * from text: discards everything except `+` and digits, and `+` is only allowed\r\n * at the start of a phone number.\r\n * For example, is used in `react-phone-number-input` where it uses\r\n * [`input-format`](https://gitlab.com/catamphetamine/input-format).\r\n * @param {string} character - Yet another character from raw input string.\r\n * @param {string?} prevParsedCharacters - Previous parsed characters.\r\n * @param {object} meta - Optional custom use-case-specific metadata.\r\n * @return {string?} The parsed character.\r\n */\n\nexport function parsePhoneNumberCharacter(character, prevParsedCharacters) {\n // Only allow a leading `+`.\n if (character === '+') {\n // If this `+` is not the first parsed character\n // then discard it.\n if (prevParsedCharacters) {\n return;\n }\n\n return '+';\n } // Allow digits.\n\n\n return parseDigit(character);\n}\n//# sourceMappingURL=parseIncompletePhoneNumber.js.map","// When phone numbers are written in `RFC3966` format — `\"tel:+12133734253\"` —\n// they can have their \"calling code\" part written separately in a `phone-context` parameter.\n// Example: `\"tel:12133734253;phone-context=+1\"`.\n// This function parses the full phone number from the local number and the `phone-context`\n// when the `phone-context` contains a `+` sign.\nimport { VALID_DIGITS // PLUS_CHARS\n} from '../constants.js';\nexport var PLUS_SIGN = '+';\nvar RFC3966_VISUAL_SEPARATOR_ = '[\\\\-\\\\.\\\\(\\\\)]?';\nvar RFC3966_PHONE_DIGIT_ = '(' + '[' + VALID_DIGITS + ']' + '|' + RFC3966_VISUAL_SEPARATOR_ + ')';\nvar RFC3966_GLOBAL_NUMBER_DIGITS_ = '^' + '\\\\' + PLUS_SIGN + RFC3966_PHONE_DIGIT_ + '*' + '[' + VALID_DIGITS + ']' + RFC3966_PHONE_DIGIT_ + '*' + '$';\n/**\r\n * Regular expression of valid global-number-digits for the phone-context\r\n * parameter, following the syntax defined in RFC3966.\r\n */\n\nvar RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_ = new RegExp(RFC3966_GLOBAL_NUMBER_DIGITS_, 'g'); // In this port of Google's library, we don't accept alpha characters in phone numbers.\n// const ALPHANUM_ = VALID_ALPHA_ + VALID_DIGITS\n\nvar ALPHANUM_ = VALID_DIGITS;\nvar RFC3966_DOMAINLABEL_ = '[' + ALPHANUM_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar VALID_ALPHA_ = 'a-zA-Z';\nvar RFC3966_TOPLABEL_ = '[' + VALID_ALPHA_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar RFC3966_DOMAINNAME_ = '^(' + RFC3966_DOMAINLABEL_ + '\\\\.)*' + RFC3966_TOPLABEL_ + '\\\\.?$';\n/**\r\n * Regular expression of valid domainname for the phone-context parameter,\r\n * following the syntax defined in RFC3966.\r\n */\n\nvar RFC3966_DOMAINNAME_PATTERN_ = new RegExp(RFC3966_DOMAINNAME_, 'g');\nexport var RFC3966_PREFIX_ = 'tel:';\nexport var RFC3966_PHONE_CONTEXT_ = ';phone-context=';\nexport var RFC3966_ISDN_SUBADDRESS_ = ';isub=';\n/**\r\n * Extracts the value of the phone-context parameter of `numberToExtractFrom`,\r\n * following the syntax defined in RFC3966.\r\n *\r\n * @param {string} numberToExtractFrom\r\n * @return {string|null} the extracted string (possibly empty), or `null` if no phone-context parameter is found.\r\n */\n\nexport default function extractPhoneContext(numberToExtractFrom) {\n var indexOfPhoneContext = numberToExtractFrom.indexOf(RFC3966_PHONE_CONTEXT_); // If no phone-context parameter is present\n\n if (indexOfPhoneContext < 0) {\n return null;\n }\n\n var phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT_.length; // If phone-context parameter is empty\n\n if (phoneContextStart >= numberToExtractFrom.length) {\n return '';\n }\n\n var phoneContextEnd = numberToExtractFrom.indexOf(';', phoneContextStart); // If phone-context is not the last parameter\n\n if (phoneContextEnd >= 0) {\n return numberToExtractFrom.substring(phoneContextStart, phoneContextEnd);\n } else {\n return numberToExtractFrom.substring(phoneContextStart);\n }\n}\n/**\r\n * Returns whether the value of phoneContext follows the syntax defined in RFC3966.\r\n *\r\n * @param {string|null} phoneContext\r\n * @return {boolean}\r\n */\n\nexport function isPhoneContextValid(phoneContext) {\n if (phoneContext === null) {\n return true;\n }\n\n if (phoneContext.length === 0) {\n return false;\n } // Does phone-context value match pattern of global-number-digits or domainname.\n\n\n return RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.test(phoneContext) || RFC3966_DOMAINNAME_PATTERN_.test(phoneContext);\n}\n//# sourceMappingURL=extractPhoneContext.js.map","import extractPhoneContext, { isPhoneContextValid, PLUS_SIGN, RFC3966_PREFIX_, RFC3966_PHONE_CONTEXT_, RFC3966_ISDN_SUBADDRESS_ } from './extractPhoneContext.js';\nimport ParseError from '../ParseError.js';\n/**\r\n * @param {string} numberToParse\r\n * @param {string} nationalNumber\r\n * @return {}\r\n */\n\nexport default function extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(numberToParse, _ref) {\n var extractFormattedPhoneNumber = _ref.extractFormattedPhoneNumber;\n var phoneContext = extractPhoneContext(numberToParse);\n\n if (!isPhoneContextValid(phoneContext)) {\n throw new ParseError('NOT_A_NUMBER');\n }\n\n var phoneNumberString;\n\n if (phoneContext === null) {\n // Extract a possible number from the string passed in.\n // (this strips leading characters that could not be the start of a phone number)\n phoneNumberString = extractFormattedPhoneNumber(numberToParse) || '';\n } else {\n phoneNumberString = ''; // If the phone context contains a phone number prefix, we need to capture\n // it, whereas domains will be ignored.\n\n if (phoneContext.charAt(0) === PLUS_SIGN) {\n phoneNumberString += phoneContext;\n } // Now append everything between the \"tel:\" prefix and the phone-context.\n // This should include the national number, an optional extension or\n // isdn-subaddress component. Note we also handle the case when \"tel:\" is\n // missing, as we have seen in some of the phone number inputs.\n // In that case, we append everything from the beginning.\n\n\n var indexOfRfc3966Prefix = numberToParse.indexOf(RFC3966_PREFIX_);\n var indexOfNationalNumber; // RFC 3966 \"tel:\" prefix is preset at this stage because\n // `isPhoneContextValid()` requires it to be present.\n\n /* istanbul ignore else */\n\n if (indexOfRfc3966Prefix >= 0) {\n indexOfNationalNumber = indexOfRfc3966Prefix + RFC3966_PREFIX_.length;\n } else {\n indexOfNationalNumber = 0;\n }\n\n var indexOfPhoneContext = numberToParse.indexOf(RFC3966_PHONE_CONTEXT_);\n phoneNumberString += numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext);\n } // Delete the isdn-subaddress and everything after it if it is present.\n // Note extension won't appear at the same time with isdn-subaddress\n // according to paragraph 5.3 of the RFC3966 spec.\n\n\n var indexOfIsdn = phoneNumberString.indexOf(RFC3966_ISDN_SUBADDRESS_);\n\n if (indexOfIsdn > 0) {\n phoneNumberString = phoneNumberString.substring(0, indexOfIsdn);\n } // If both phone context and isdn-subaddress are absent but other\n // parameters are present, the parameters are left in nationalNumber.\n // This is because we are concerned about deleting content from a potential\n // number string when there is no strong evidence that the number is\n // actually written in RFC3966.\n\n\n if (phoneNumberString !== '') {\n return phoneNumberString;\n }\n}\n//# sourceMappingURL=extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\nimport { VALID_DIGITS, PLUS_CHARS, MIN_LENGTH_FOR_NSN, MAX_LENGTH_FOR_NSN } from './constants.js';\nimport ParseError from './ParseError.js';\nimport Metadata from './metadata.js';\nimport isViablePhoneNumber, { isViablePhoneNumberStart } from './helpers/isViablePhoneNumber.js';\nimport extractExtension from './helpers/extension/extractExtension.js';\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber.js';\nimport getCountryCallingCode from './getCountryCallingCode.js';\nimport { isPossibleNumber } from './isPossible.js'; // import { parseRFC3966 } from './helpers/RFC3966.js'\n\nimport PhoneNumber from './PhoneNumber.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractNationalNumber from './helpers/extractNationalNumber.js';\nimport stripIddPrefix from './helpers/stripIddPrefix.js';\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport extractFormattedPhoneNumberFromPossibleRfc3966NumberUri from './helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js'; // We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\n\nvar MAX_INPUT_STRING_LENGTH = 250; // This consists of the plus symbol, digits, and arabic-indic digits.\n\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']'); // Regular expression of trailing characters that we want to remove.\n// A trailing `#` is sometimes used when writing phone numbers with extensions in US.\n// Example: \"+1 (645) 123 1234-910#\" number has extension \"910\".\n\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + '#' + ']+$');\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false; // Examples:\n//\n// ```js\n// parse('8 (800) 555-35-35', 'RU')\n// parse('8 (800) 555-35-35', 'RU', metadata)\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n// parse('+7 800 555 35 35')\n// parse('+7 800 555 35 35', metadata)\n// ```\n//\n\n/**\r\n * Parses a phone number.\r\n *\r\n * parse('123456789', { defaultCountry: 'RU', v2: true }, metadata)\r\n * parse('123456789', { defaultCountry: 'RU' }, metadata)\r\n * parse('123456789', undefined, metadata)\r\n *\r\n * @param {string} input\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {object|PhoneNumber?} If `options.v2: true` flag is passed, it returns a `PhoneNumber?` instance. Otherwise, returns an object of shape `{ phone: '...', country: '...' }` (or just `{}` if no phone number was parsed).\r\n */\n\nexport default function parse(text, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata); // Validate `defaultCountry`.\n\n if (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n\n throw new Error(\"Unknown country: \".concat(options.defaultCountry));\n } // Parse the phone number.\n\n\n var _parseInput = parseInput(text, options.v2, options.extract),\n formattedPhoneNumber = _parseInput.number,\n ext = _parseInput.ext,\n error = _parseInput.error; // If the phone number is not viable then return nothing.\n\n\n if (!formattedPhoneNumber) {\n if (options.v2) {\n if (error === 'TOO_SHORT') {\n throw new ParseError('TOO_SHORT');\n }\n\n throw new ParseError('NOT_A_NUMBER');\n }\n\n return {};\n }\n\n var _parsePhoneNumber = parsePhoneNumber(formattedPhoneNumber, options.defaultCountry, options.defaultCallingCode, metadata),\n country = _parsePhoneNumber.country,\n nationalNumber = _parsePhoneNumber.nationalNumber,\n countryCallingCode = _parsePhoneNumber.countryCallingCode,\n countryCallingCodeSource = _parsePhoneNumber.countryCallingCodeSource,\n carrierCode = _parsePhoneNumber.carrierCode;\n\n if (!metadata.hasSelectedNumberingPlan()) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n\n return {};\n } // Validate national (significant) number length.\n\n\n if (!nationalNumber || nationalNumber.length < MIN_LENGTH_FOR_NSN) {\n // Won't throw here because the regexp already demands length > 1.\n\n /* istanbul ignore if */\n if (options.v2) {\n throw new ParseError('TOO_SHORT');\n } // Google's demo just throws an error in this case.\n\n\n return {};\n } // Validate national (significant) number length.\n //\n // A sidenote:\n //\n // They say that sometimes national (significant) numbers\n // can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n // https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n // Such numbers will just be discarded.\n //\n\n\n if (nationalNumber.length > MAX_LENGTH_FOR_NSN) {\n if (options.v2) {\n throw new ParseError('TOO_LONG');\n } // Google's demo just throws an error in this case.\n\n\n return {};\n }\n\n if (options.v2) {\n var phoneNumber = new PhoneNumber(countryCallingCode, nationalNumber, metadata.metadata);\n\n if (country) {\n phoneNumber.country = country;\n }\n\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n }\n\n if (ext) {\n phoneNumber.ext = ext;\n }\n\n phoneNumber.__countryCallingCodeSource = countryCallingCodeSource;\n return phoneNumber;\n } // Check if national phone number pattern matches the number.\n // National number pattern is different for each country,\n // even for those ones which are part of the \"NANPA\" group.\n\n\n var valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ? matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) : false;\n\n if (!options.extended) {\n return valid ? result(country, nationalNumber, ext) : {};\n } // isInternational: countryCallingCode !== undefined\n\n\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n carrierCode: carrierCode,\n valid: valid,\n possible: valid ? true : options.extended === true && metadata.possibleLengths() && isPossibleNumber(nationalNumber, metadata) ? true : false,\n phone: nationalNumber,\n ext: ext\n };\n}\n/**\r\n * Extracts a formatted phone number from text.\r\n * Doesn't guarantee that the extracted phone number\r\n * is a valid phone number (for example, doesn't validate its length).\r\n * @param {string} text\r\n * @param {boolean} [extract] — If `false`, then will parse the entire `text` as a phone number.\r\n * @param {boolean} [throwOnError] — By default, it won't throw if the text is too long.\r\n * @return {string}\r\n * @example\r\n * // Returns \"(213) 373-4253\".\r\n * extractFormattedPhoneNumber(\"Call (213) 373-4253 for assistance.\")\r\n */\n\nfunction _extractFormattedPhoneNumber(text, extract, throwOnError) {\n if (!text) {\n return;\n }\n\n if (text.length > MAX_INPUT_STRING_LENGTH) {\n if (throwOnError) {\n throw new ParseError('TOO_LONG');\n }\n\n return;\n }\n\n if (extract === false) {\n return text;\n } // Attempt to extract a possible number from the string passed in\n\n\n var startsAt = text.search(PHONE_NUMBER_START_PATTERN);\n\n if (startsAt < 0) {\n return;\n }\n\n return text // Trim everything to the left of the phone number\n .slice(startsAt) // Remove trailing non-numerical characters\n .replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n/**\r\n * @param {string} text - Input.\r\n * @param {boolean} v2 - Legacy API functions don't pass `v2: true` flag.\r\n * @param {boolean} [extract] - Whether to extract a phone number from `text`, or attempt to parse the entire text as a phone number.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\n\n\nfunction parseInput(text, v2, extract) {\n // // Parse RFC 3966 phone number URI.\n // if (text && text.indexOf('tel:') === 0) {\n // \treturn parseRFC3966(text)\n // }\n // let number = extractFormattedPhoneNumber(text, extract, v2)\n var number = extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(text, {\n extractFormattedPhoneNumber: function extractFormattedPhoneNumber(text) {\n return _extractFormattedPhoneNumber(text, extract, v2);\n }\n }); // If the phone number is not viable, then abort.\n\n if (!number) {\n return {};\n }\n\n if (!isViablePhoneNumber(number)) {\n if (isViablePhoneNumberStart(number)) {\n return {\n error: 'TOO_SHORT'\n };\n }\n\n return {};\n } // Attempt to parse extension first, since it doesn't require region-specific\n // data and we want to have the non-normalised number here.\n\n\n var withExtensionStripped = extractExtension(number);\n\n if (withExtensionStripped.ext) {\n return withExtensionStripped;\n }\n\n return {\n number: number\n };\n}\n/**\r\n * Creates `parse()` result object.\r\n */\n\n\nfunction result(country, nationalNumber, ext) {\n var result = {\n country: country,\n phone: nationalNumber\n };\n\n if (ext) {\n result.ext = ext;\n }\n\n return result;\n}\n/**\r\n * Parses a viable phone number.\r\n * @param {string} formattedPhoneNumber — Example: \"(213) 373-4253\".\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {Metadata} metadata\r\n * @return {object} Returns `{ country: string?, countryCallingCode: string?, nationalNumber: string? }`.\r\n */\n\n\nfunction parsePhoneNumber(formattedPhoneNumber, defaultCountry, defaultCallingCode, metadata) {\n // Extract calling code from phone number.\n var _extractCountryCallin = extractCountryCallingCode(parseIncompletePhoneNumber(formattedPhoneNumber), defaultCountry, defaultCallingCode, metadata.metadata),\n countryCallingCodeSource = _extractCountryCallin.countryCallingCodeSource,\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number; // Choose a country by `countryCallingCode`.\n\n\n var country;\n\n if (countryCallingCode) {\n metadata.selectNumberingPlan(countryCallingCode);\n } // If `formattedPhoneNumber` is passed in \"national\" format\n // then `number` is defined and `countryCallingCode` is `undefined`.\n else if (number && (defaultCountry || defaultCallingCode)) {\n metadata.selectNumberingPlan(defaultCountry, defaultCallingCode);\n\n if (defaultCountry) {\n country = defaultCountry;\n } else {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n country = '001';\n }\n }\n }\n\n countryCallingCode = defaultCallingCode || getCountryCallingCode(defaultCountry, metadata.metadata);\n } else return {};\n\n if (!number) {\n return {\n countryCallingCodeSource: countryCallingCodeSource,\n countryCallingCode: countryCallingCode\n };\n }\n\n var _extractNationalNumbe = extractNationalNumber(parseIncompletePhoneNumber(number), metadata),\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode; // Sometimes there are several countries\n // corresponding to the same country phone code\n // (e.g. NANPA countries all having `1` country phone code).\n // Therefore, to reliably determine the exact country,\n // national (significant) number should have been parsed first.\n //\n // When `metadata.json` is generated, all \"ambiguous\" country phone codes\n // get their countries populated with the full set of\n // \"phone number type\" regular expressions.\n //\n\n\n var exactCountry = getCountryByCallingCode(countryCallingCode, {\n nationalNumber: nationalNumber,\n defaultCountry: defaultCountry,\n metadata: metadata\n });\n\n if (exactCountry) {\n country = exactCountry;\n /* istanbul ignore if */\n\n if (exactCountry === '001') {// Can't happen with `USE_NON_GEOGRAPHIC_COUNTRY_CODE` being `false`.\n // If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` is set to `true` for some reason,\n // then remove the \"istanbul ignore if\".\n } else {\n metadata.country(country);\n }\n }\n\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n countryCallingCodeSource: countryCallingCodeSource,\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n//# sourceMappingURL=parse.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport parse from './parse.js';\nexport default function parsePhoneNumberWithError(text, options, metadata) {\n return parse(text, _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }), metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError_.js.map","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n// Extracts the following properties from function arguments:\n// * input `text`\n// * `options` object\n// * `metadata` JSON\nexport default function normalizeArguments(args) {\n var _Array$prototype$slic = Array.prototype.slice.call(args),\n _Array$prototype$slic2 = _slicedToArray(_Array$prototype$slic, 4),\n arg_1 = _Array$prototype$slic2[0],\n arg_2 = _Array$prototype$slic2[1],\n arg_3 = _Array$prototype$slic2[2],\n arg_4 = _Array$prototype$slic2[3];\n\n var text;\n var options;\n var metadata; // If the phone number is passed as a string.\n // `parsePhoneNumber('88005553535', ...)`.\n\n if (typeof arg_1 === 'string') {\n text = arg_1;\n } else throw new TypeError('A text for parsing must be a string.'); // If \"default country\" argument is being passed then move it to `options`.\n // `parsePhoneNumber('88005553535', 'RU', [options], metadata)`.\n\n\n if (!arg_2 || typeof arg_2 === 'string') {\n if (arg_4) {\n options = arg_3;\n metadata = arg_4;\n } else {\n options = undefined;\n metadata = arg_3;\n }\n\n if (arg_2) {\n options = _objectSpread({\n defaultCountry: arg_2\n }, options);\n }\n } // `defaultCountry` is not passed.\n // Example: `parsePhoneNumber('+78005553535', [options], metadata)`.\n else if (isObject(arg_2)) {\n if (arg_3) {\n options = arg_2;\n metadata = arg_3;\n } else {\n metadata = arg_2;\n }\n } else throw new Error(\"Invalid second argument: \".concat(arg_2));\n\n return {\n text: text,\n options: options,\n metadata: metadata\n };\n} // Otherwise istanbul would show this as \"branch not covered\".\n\n/* istanbul ignore next */\n\nvar isObject = function isObject(_) {\n return _typeof(_) === 'object';\n};\n//# sourceMappingURL=normalizeArguments.js.map","import parsePhoneNumberWithError_ from './parsePhoneNumberWithError_.js';\nimport normalizeArguments from './normalizeArguments.js';\nexport default function parsePhoneNumberWithError() {\n var _normalizeArguments = normalizeArguments(arguments),\n text = _normalizeArguments.text,\n options = _normalizeArguments.options,\n metadata = _normalizeArguments.metadata;\n\n return parsePhoneNumberWithError_(text, options, metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError.js.map","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { parsePhoneNumberWithError as _parsePhoneNumberWithError } from '../../core/index.js'\r\n\r\nexport function parsePhoneNumberWithError() {\r\n\treturn withMetadataArgument(_parsePhoneNumberWithError, arguments)\r\n}\r\n","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.mobile.json.js'\r\n\r\nexport default function withMetadataArgument(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(metadata)\r\n\treturn func.apply(this, args)\r\n}"],"names":["getPossibleCountriesForNumber","callingCode","nationalNumber","metadata","possibleCountries","getCountryCodesForCallingCode","filter","country","_metadata","selectNumberingPlan","numberingPlan","possibleLengths","indexOf","length","couldNationalNumberBelongToCountry","SINGLE_IDD_PREFIX_REG_EXP","o","allowArrayLike","it","Symbol","iterator","call","next","bind","Array","isArray","minLen","n","Object","prototype","toString","slice","constructor","name","from","test","i","done","value","TypeError","arr","len","arr2","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","arguments","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","configurable","writable","DEFAULT_OPTIONS","formatExtension","formattedNumber","extension","concat","ext","formatNumber","input","format","options","hasCountry","Error","countryCallingCode","phone","number","v2","addExtension","formatNationalNumber","carrierCode","_ref","formatRFC3966","fromCountry","fromCountryCallingCode","iddPrefix","countryMetadata","defaultIDDPrefix","IDDPrefix","getIddPrefix","undefined","formatIDD","formatAs","availableFormats","nationalNnumber","_step","_iterator","leadingDigitsPatterns","lastLeadingDigitsPattern","search","matchesEntirely","pattern","chooseFormatForNumber","formats","formatNationalNumberUsingFormat","useInternationalFormat","withNationalPrefix","nationalPrefixIsOptionalWhenFormattingInNationalFormat","nationalPrefix","_defineProperties","props","descriptor","PhoneNumber","countryOrCountryCallingCode","instance","Constructor","_classCallCheck","this","_getCountryAndCountry","metadataJson","isCountryCode","getCountryAndCountryCallingCode","getMetadata","protoProps","staticProps","hasTypes","getNumberType","nationalNumberPattern","isValidNumber","isNonGeographicCallingCode","phoneNumber","_format","MIN_LENGTH_FOR_NSN","MAX_LENGTH_FOR_NSN","MAX_LENGTH_COUNTRY_CODE","VALID_DIGITS","VALID_PUNCTUATION","PLUS_CHARS","applyInternationalSeparatorStyle","replace","RegExp","trim","_createForOfIteratorHelperLoose","_arrayLikeToArray","_unsupportedIterableToArray","checkNumberLength","checkNumberLengthForType","type","type_info","possible_lengths","mobile_type","a","b","merged","element","sort","mergeArrays","actual_length","minimum_length","extractCountryCallingCode","isNumberWithIddPrefix","numberWithoutIDD","_extractCountryCallin","shorterNumber","countryCallingCodeSource","_countryCallingCode","hasCallingCode","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","possibleShorterNumber","possibleShorterNationalNumber","extractNationalNumber","_extractNationalNumbe","nationalNumberBefore","nationalNumberAfter","shouldHaveExtractedNationalPrefix","isPossibleIncompleteNationalNumber","extractNationalNumberFromPossiblyIncompleteNumber","nationalPrefixForParsing","prefixPattern","prefixMatch","exec","capturedGroupsCount","hasCapturedGroups","nationalPrefixTransformRule","prefixBeforeNationalNumber","possiblePositionOfTheFirstCapturedGroup","FIRST_GROUP_PATTERN","internationalFormat","nationalPrefixFormattingRule","USE_NON_GEOGRAPHIC_COUNTRY_CODE","getCountryByCallingCode","nationalPhoneNumber","defaultCountry","countries","getCountryByNationalNumber","matchingCountries","leadingDigits","NON_FIXED_LINE_PHONE_TYPES","isNumberTypeEqualTo","text","regular_expression","DIGITS","parseDigit","character","parseDigits","string","result","split","digit","CAPTURING_DIGIT_PATTERN","stripIddPrefix","IDDPrefixPattern","matchedGroups","match","isPossiblePhoneNumber","isPossibleNumber","pa","pb","na","Number","nb","isNaN","_typeof","_createClass","DEFAULT_EXT_PREFIX","CALLING_CODE_REG_EXP","Metadata","is_object","join","type_of","validateMetadata","setVersion","_","countryCode","v1","v3","nonGeographic","nonGeographical","getCountryMetadata","countryCodes","countryCallingCodes","NumberingPlan","getNumberingPlanMetadata","getCountryCodeForCallingCode","_type","country_phone_code_to_countries","country_calling_codes","globalMetadataObject","_this","_getFormats","getDefaultCountryMetadataForRegion","map","Format","_getNationalPrefixFormattingRule","_nationalPrefixForParsing","_getNationalPrefixIsOptionalWhenFormatting","types","_type2","getType","Type","usesNationalPrefix","FIRST_GROUP_ONLY_PREFIX_PATTERN","getCountryCallingCode","version","v4","AsYouTypeState","onCountryChange","onCallingCodeChange","_ref2","international","missingPlus","digits","resetNationalSignificantNumber","initCountryAndCallingCode","nationalSignificantNumber","getNationalDigits","nationalSignificantNumberMatchesInput","complexPrefixBeforeNationalSignificantNumber","properties","_i","_Object$keys","setCountry","setCallingCode","nextDigits","DIGIT_PLACEHOLDER","DIGIT_PLACEHOLDER_MATCHER","repeat","times","cutAndStripNonPairedParens","cutBeforeIndex","dangling_braces","pop","start","cleared_string","_dangling_braces","index","stripNonPairedParens","formatCompleteNumber","state","shouldTryNationalPrefixFormattingRule","getSeparatorAfterNationalPrefix","useNationalPrefixFormattingRule","formatNationalNumberWithAndWithoutNationalPrefixFormattingRule","_ref3","formattedNationalNumber","isValidFormattedNationalNumber","PatternParser","context","or","instructions","parsePattern","_this$context$","branches","op","args","expandSingleElementArray","OPERATOR","operator","before","rightPart","startContext","getContext","endContext","oneOfSet","parseOneOfSet","ILLEGAL_CHARACTER_REGEXP","values","prevValue","charCodeAt","nextValue","String","fromCharCode","array","PatternMatcher","matchTree","parse","allowOverflow","_match","matchedChars","overflow","characters","tree","last","characterString","partialMatch","restCharacters","JSON","stringify","_result","_step2","_iterator2","_char","LONGEST_DUMMY_PHONE_NUMBER","NATIONAL_PREFIX_SEPARATORS_PATTERN","CREATE_CHARACTER_CLASS_PATTERN","CREATE_STANDALONE_DIGIT_PATTERN","NON_ALTERING_FORMAT_REG_EXP","AsYouTypeFormatter","resetFormat","chosenFormat","template","nationalNumberTemplate","populatedNationalNumberTemplate","populatedNationalNumberTemplatePosition","isNANP","matchingFormats","narrowDownMatchingFormats","formattedCompleteNumber","setNationalNumberTemplate","lastIndexOf","formatNationalNumberWithNextDigits","previouslyChosenFormat","newlyChosenFormat","chooseFormat","formatNextNationalNumberDigits","_this2","leadingDigitsPatternIndex","formatSuits","formatMatches","nationalPrefixIsMandatoryWhenFormattingInNationalFormat","leadingDigitsPatternsCount","Math","min","leadingDigitsPattern","error","console","_this3","_loop","getFormatFormat","createTemplateForFormat","_ret","getTemplateForFormat","spacing","internationalPrefix","getInternationalPrefixBeforeCountryCallingCode","getDigitsWithoutInternationalPrefix","_ref4","strictPattern","nationalNumberDummyDigits","nationalPrefixIncludedInTemplate","numberFormat","numberFormatWithNationalPrefix","position","populateTemplateWithDigits","_ref5","_slicedToArray","_arrayWithHoles","_s","_e","_arr","_n","_d","err","_iterableToArrayLimit","_nonIterableRest","VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART","VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN","VALID_FORMATTED_PHONE_NUMBER_PART","AFTER_PHONE_NUMBER_DIGITS_END_PATTERN","COMPLEX_NATIONAL_PREFIX","AsYouTypeParser","defaultCallingCode","onNationalSignificantNumberChange","justLeadingPlus","_extractFormattedDigi","_extractFormattedDigi3","extractedNumber","hasPlus","startsAt","extractFormattedPhoneNumber","_extractFormattedDigitsAndPlus","_extractFormattedDigi4","formattedDigits","extractFormattedDigitsAndPlus","_extractFormattedDigi2","startInternationalNumber","inputDigits","hasReceivedThreeLeadingDigits","appendDigits","extractIddPrefix","isWaitingForCountryCallingCode","appendNationalSignificantNumberDigits","hasExtractedNationalSignificantNumber","extractNationalSignificantNumber","stateUpdate","update","hasSelectedNumberingPlan","couldPossiblyExtractAnotherNationalSignificantNumber","nationalDigits","setState","onExtractedNationalNumber","prevNationalSignificantNumber","_extractNationalNumbe2","nationalSignificantNumberIndex","extractAnotherNationalSignificantNumber","fixMissingPlus","extractCallingCodeAndNationalSignificantNumber","_extractCountryCallin2","newCallingCode","AsYouType","optionsOrDefaultCountry","_this$getCountryAndCa2","getCountryAndCallingCode","reset","_this$parser$input","parser","formattedOutput","determineTheCountryIfNeeded","formatter","reExtractNationalSignificantNumber","getFullNumber","getNonFormattedNumber","isInternational","getCallingCode","_getCountry","isCountryCallingCodeAmbiguous","determineTheCountry","prefix","_this$state","getNonFormattedNationalNumberWithPrefix","_this$state2","_this$state3","_callingCode","ambiguousCountries","exactCountry","getNumber","isPossible","isValid","getTemplate","getNonFormattedTemplate","create","getExampleNumber","examples","withMetadataArgument","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","Reflect","construct","self","_assertThisInitialized","_possibleConstructorReturn","ReferenceError","_wrapNativeSuper","Class","_cache","Map","fn","Function","has","get","set","Wrapper","_construct","_setPrototypeOf","Parent","sham","Proxy","Boolean","valueOf","e","p","setPrototypeOf","__proto__","getPrototypeOf","ParseError","_Error","subClass","superClass","_inherits","_super","code","getExtensionDigitsPattern","maxLength","createExtensionPattern","purpose","possibleSeparatorsBetweenNumberAndExtLabel","possibleCharsAfterExtLabel","optionalExtnSuffix","possibleSeparatorsNumberExtLabelNoComma","MIN_LENGTH_PHONE_NUMBER_PATTERN","VALID_PHONE_NUMBER","VALID_PHONE_NUMBER_START_REG_EXP","VALID_PHONE_NUMBER_WITH_EXTENSION","VALID_PHONE_NUMBER_PATTERN","EXTN_PATTERN","parseIncompletePhoneNumber","parsePhoneNumberCharacter","prevParsedCharacters","PLUS_SIGN","RFC3966_PHONE_DIGIT_","RFC3966_GLOBAL_NUMBER_DIGITS_","RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_","ALPHANUM_","RFC3966_DOMAINNAME_PATTERN_","RFC3966_PREFIX_","RFC3966_PHONE_CONTEXT_","RFC3966_ISDN_SUBADDRESS_","extractFormattedPhoneNumberFromPossibleRfc3966NumberUri","numberToParse","phoneNumberString","phoneContext","numberToExtractFrom","indexOfPhoneContext","phoneContextStart","phoneContextEnd","substring","extractPhoneContext","isPhoneContextValid","charAt","indexOfNationalNumber","indexOfRfc3966Prefix","indexOfIsdn","MAX_INPUT_STRING_LENGTH","PHONE_NUMBER_START_PATTERN","AFTER_PHONE_NUMBER_END_PATTERN","_parseInput","extract","throwOnError","_extractFormattedPhoneNumber","isViablePhoneNumber","isViablePhoneNumberStart","withExtensionStripped","numberWithoutExtension","matches","extractExtension","parseInput","formattedPhoneNumber","_parsePhoneNumber","parsePhoneNumber","__countryCallingCodeSource","valid","extended","possible","normalizeArguments","_Array$prototype$slic2","arg_1","arg_2","arg_3","arg_4","isObject","_normalizeArguments","parsePhoneNumberWithError","func","_arguments"],"sourceRoot":""}
\ No newline at end of file
diff --git a/umd/226.prod.js b/umd/226.prod.js
index b3e60b0a..d089117e 100644
--- a/umd/226.prod.js
+++ b/umd/226.prod.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[226],{5226:e=>{e.exports=JSON.parse('{"action_block_contact":"封鎖聯絡人","action_cancel":"取消","action_clear_messages":"清除訊息","action_delete_messages":"為所有人清除訊息","action_leave_chat":"離開對話","action_report_chat":"檢舉對話","archived_contacts":"已封存的聯絡人 ({count})","badge_danger":"不可信","badge_owner":"擁有者","badge_staff":"員工管理","badge_verified":"已驗證/官方","badge_you":"您","block_contact_warning":"您確定要封鎖此聯絡人嗎?","blocked_contacts_link":"已封鎖的聯絡人 ({count})","button_add_members":"新增成員","button_cancel":"取消","button_confirm":"確認","button_create":"建立","button_delete_account":"刪除帳號","button_edit":"編輯","button_logout":"登出","button_ok":"OK","button_reset":"重設","button_send_request":"傳送要求","button_sign_in":"登入","button_sign_up":"註冊","button_subscribe":"訂閱","button_update":"更新","cannot_initiate_file_upload":"無法為檔案上傳初始化。","channel":"頻道","channel_prompt":"這是頻道","chat_invitation":"您已被邀請開始新對話。您接下來要做什麼呢?","chat_invitation_accept":"接受","chat_invitation_block":"封鎖","chat_invitation_ignore":"忽略","clear_messages_warning":"您確定要清除所有訊息嗎?此操作無法復原。","code_doesnot_match":"代碼不相符","contacts_not_found":"您沒有任何對話
¯∖_(ツ)_/¯","contacts_not_found_short":"沒有符合 \'\'{query}\'\' 的聯絡人","credential_email_prompt":"您的註冊電子郵件地址","delete_account":"刪除帳號","delete_account_warning":"您確定要刪除您的帳戶嗎?此操作無法撤消。","delete_messages_warning":"您確定要為所有人刪除所有訊息嗎?此操作無法復原。","download_action":"下載","drafty_attachment":"附加檔案","drafty_form":"表單:","drafty_image":"圖片","email_dative":"電子郵件地址","email_prompt":"電子郵件地址,例如:jdoe@example.com","enable_peers_messaging":"啟用","enter_confirmation_code_prompt":"輸入透過 {method} 傳送給您的確認碼:","error_invalid_id":"ID 無效","file_attachment_too_large":"檔案大小 {size} 超出 {limit} 限制。","forgot_password_link":"忘記密碼?","full_name_prompt":"全名,例如:王小明","granted_permissions":"已授權","group_has_no_members":"無成員","group_user_id_prompt":"群組或使用者 ID","image_caption_prompt":"圖片說明","invalid_content":"內容無效","invalid_security_token":"安全權杖無效","label_client":"客戶端:","label_content_type":"類型:","label_default_access_mode":"預設存取模式:","label_file_name":"檔名:","label_group_members":"群組成員:","label_incognito_mode":"無痕模式:","label_message_sound":"訊息提示聲:","label_muting_topic":"靜音:","label_other_user":"其他","label_password":"密碼","label_permissions":"權限:","label_private":"私人留言","label_push_notifications":"通知:","label_push_notifications_disabled":"通知 (需要 HTTPS):","label_reset_password":"傳送重設密碼郵件:","label_sdk":"SDK:","label_server":"伺服器:","label_server_address":"伺服器位址:","label_server_to_use":"使用的伺服器:","label_size":"大小:","label_topic_name":"名稱","label_user_contacts":"聯絡人","label_user_id":"ID:","label_wire_transport":"線路傳輸:","label_you":"您:","label_your_name":"您的名字","label_your_permissions":"您的權限:","last_seen_timestamp":"最後上線","leave_chat_warning":"您確定要離開此對話嗎?","link_contact_us":"聯絡我們","link_privacy_policy":"隱私權政策","link_terms_of_service":"服務條款","login_prompt":"登入","menu_item_archive_topic":"封存","menu_item_block":"封鎖","menu_item_clear_messages":"清除訊息","menu_item_clear_messages_for_all":"為所有人清除訊息","menu_item_delete":"刪除","menu_item_delete_for_all":"為所有人刪除","menu_item_delete_topic":"刪除","menu_item_edit_permissions":"編輯權限","menu_item_info":"Info","menu_item_member_delete":"移除","menu_item_mute":"靜音","menu_item_restore_topic":"恢復","menu_item_send_retry":"重試","menu_item_unblock":"解除封鎖","menu_item_unmute":"解除靜音","message_sending":"正在傳送...","message_sending_failed":"失敗","messages_not_readable":"沒有存取訊息的權限","messaging_disabled_prompt":"停用訊息","more_online_members":"+{overflow}","new_message_prompt":"新訊息","new_password_placeholder":"輸入新的密碼","no_connection":"無連線","no_contacts":"您沒有任何聯絡人 :-(","numeric_confirmation_code_prompt":"僅數字","online_now":"上線中","password_prompt":"密碼","password_unchanged_prompt":"未修改","peers_messaging_disabled":"Peer 已停用訊息。","permission_admin":"核可 ({val})","permission_delete":"刪除 ({val})","permission_join":"加入 ({val})","permission_owner":"擁有者 ({val})","permission_pres":"收到通知 ({val})","permission_read":"讀取 ({val})","permission_share":"分享 ({val})","permission_write":"撰寫 ({val})","phone_dative":"phone","private_editing_placeholder":"僅您可見","push_init_failed":"初始化通知失敗。","reconnect_countdown":"已斷線。將在 {seconds} 秒後重新連線…","reconnect_now":"現在重試","reload_update":"重新載入","report_chat_warning":"您確定要封鎖並檢舉此對話嗎?","requested_permissions":"重新請求","save_attachment":"儲存","search_for_contacts":"使用搜尋來尋找聯絡人","search_no_results":"搜尋無結果","search_placeholder":"例如 email:alice@example.com, tel:17025550003... 的清單","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支援","sidepanel_title_account_settings":"帳號設定","sidepanel_title_archive":"已封存的對話","sidepanel_title_blocked":"已封鎖的對話","sidepanel_title_cred":"確認認證","sidepanel_title_login":"登入","sidepanel_title_newtpk":"開始新對話","sidepanel_title_register":"建立帳號","sidepanel_title_reset":"重設密碼","sidepanel_title_settings":"設定","stay_logged_in":"保持登入","tabtitle_find_user":"尋找","tabtitle_group_by_id":"以 id","tabtitle_new_group":"新群組","tags_editor_no_tags":"新增一些標籤","tags_not_found":"未定義任何標籤。請新增一些標籤。","title_all_contacts":"所有聯絡人","title_group_members":"群組成員","title_manage_tags":"管理","title_not_found":"找不到","title_permissions":"權限","title_tag_manager":"標籤 (使用者探索)","topic_block_warning":"您確定要封鎖此對話嗎?","topic_delete_warning":"您確定要刪除此對話嗎?","topic_name_editing_placeholder":"群組的任意名稱","unnamed_topic":"未命名","update_available":"有可用的更新。","upload_finishing":"正在完成...","user_not_found":"找不到","description_editing_placeholder":"說明(可選)","label_description":"說明","button_security":"安全性","panel_title_crop":"拖動調整","panel_title_general":"一般","panel_title_members":"成員","panel_title_security":"安全性","panel_title_info":"資訊","permissions_anonymous":"匿名","permissions_authenticated":"已認證","topic_delete":"刪除聊天","permissions_user":"用戶權限","password_reset_email_sent":"已發送一封帶有安全代碼的電子郵件。","label_unarchive_topic":"存檔聊天:","menu_item_reply":"回答","menu_item_forward":"重定向","forward_to":"重定向消息","forward_to_search_placeholder":"搜索聯繫人","label_new_password":"新密碼","drafty_unknown":"不支持","calls_incoming":"來電","calls_outgoing":"撥出電話","calls_you_label":"你","menu_item_video_call":"視頻電話","already_in_call":"你已經在說話了!","call_cancelled":"取消","call_missed":"未接","call_declined":"被拒","call_disconnected":"斷開連接","label_use_secure_connection":"使用安全連接","cred_confirmed_successfully":"確認成功","menu_item_edit":"編輯","editing_message":"編輯","message_edited_marker":",編輯","icon_title_add_image":"添加圖片","icon_title_attach_file":"附加文件","icon_title_delete":"刪除錄音","icon_title_pause":"暫停播放","icon_title_play":"播放錄音","icon_title_record_voice":"錄製語音消息","icon_title_resume":"恢復播放","icon_title_send":"發信息","drag_file":"將文件拖到這裡","drafty_video":"視頻錄製","call_in_progress":"通話中","menu_item_audio_call":"稱呼","unrecognized_video_format":"無法識別此視頻的格式","loading_note":"加載中...","password_i_have_code":"我有代碼","label_reset_password_tel":"發送短信重置密碼","mobile_phone_number":"手機號碼","password_reset_sms_sent":"已發送帶有安全代碼的短信。","mobile_number_required":"需要手機號","current_email":"當前郵箱","current_phone":"當前電話號碼","new_email":"新電子郵件地址","new_phone_number":"新電話號碼","change_email":"更改郵箱","change_phone":"更改電話號碼","call_busy":"忙碌的","failed_to_init_audio":"初始化錄音失敗"}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[226],{5226:e=>{e.exports=JSON.parse('{"action_block_contact":"封鎖聯絡人","action_cancel":"取消","action_clear_messages":"清除訊息","action_delete_messages":"為所有人清除訊息","action_leave_chat":"離開對話","action_report_chat":"檢舉對話","archived_contacts":"已封存的聯絡人 ({count})","badge_danger":"不可信","badge_owner":"擁有者","badge_staff":"員工管理","badge_verified":"已驗證/官方","badge_you":"您","block_contact_warning":"您確定要封鎖此聯絡人嗎?","blocked_contacts_link":"已封鎖的聯絡人 ({count})","button_add_members":"新增成員","button_cancel":"取消","button_confirm":"確認","button_create":"建立","button_delete_account":"刪除帳號","button_edit":"編輯","button_logout":"登出","button_ok":"OK","button_reset":"重設","button_send_request":"傳送要求","button_sign_in":"登入","button_sign_up":"註冊","button_subscribe":"訂閱","button_update":"更新","cannot_initiate_file_upload":"無法為檔案上傳初始化。","channel":"頻道","channel_prompt":"這是頻道","chat_invitation":"您已被邀請開始新對話。您接下來要做什麼呢?","chat_invitation_accept":"接受","chat_invitation_block":"封鎖","chat_invitation_ignore":"忽略","clear_messages_warning":"您確定要清除所有訊息嗎?此操作無法復原。","code_doesnot_match":"代碼不相符","contacts_not_found":"您沒有任何對話
¯∖_(ツ)_/¯","contacts_not_found_short":"沒有符合 \'\'{query}\'\' 的聯絡人","credential_email_prompt":"您的註冊電子郵件地址","delete_account":"刪除帳號","delete_account_warning":"您確定要刪除您的帳戶嗎?此操作無法撤消。","delete_messages_warning":"您確定要為所有人刪除所有訊息嗎?此操作無法復原。","download_action":"下載","drafty_attachment":"附加檔案","drafty_form":"表單:","drafty_image":"圖片","email_dative":"電子郵件地址","email_prompt":"電子郵件地址,例如:jdoe@example.com","enable_peers_messaging":"啟用","enter_confirmation_code_prompt":"輸入透過 {method} 傳送給您的確認碼:","error_invalid_id":"ID 無效","file_attachment_too_large":"檔案大小 {size} 超出 {limit} 限制。","forgot_password_link":"忘記密碼?","full_name_prompt":"全名,例如:王小明","granted_permissions":"已授權","group_has_no_members":"無成員","group_user_id_prompt":"群組或使用者 ID","image_caption_prompt":"圖片說明","invalid_content":"內容無效","invalid_security_token":"安全權杖無效","label_client":"客戶端:","label_content_type":"類型:","label_default_access_mode":"預設存取模式:","label_file_name":"檔名:","label_group_members":"群組成員:","label_incognito_mode":"無痕模式:","label_message_sound":"訊息提示聲:","label_muting_topic":"靜音:","label_other_user":"其他","label_password":"密碼","label_permissions":"權限:","label_private":"私人留言","label_push_notifications":"通知:","label_push_notifications_disabled":"通知 (需要 HTTPS):","label_reset_password":"傳送重設密碼郵件:","label_sdk":"SDK:","label_server":"伺服器:","label_server_address":"伺服器位址:","label_server_to_use":"使用的伺服器:","label_size":"大小:","label_topic_name":"名稱","label_user_contacts":"聯絡人","label_user_id":"ID:","label_wire_transport":"線路傳輸:","label_you":"您:","label_your_name":"您的名字","label_your_permissions":"您的權限:","last_seen_timestamp":"最後上線","leave_chat_warning":"您確定要離開此對話嗎?","link_contact_us":"聯絡我們","link_privacy_policy":"隱私權政策","link_terms_of_service":"服務條款","login_prompt":"登入","menu_item_archive_topic":"封存","menu_item_block":"封鎖","menu_item_clear_messages":"清除訊息","menu_item_clear_messages_for_all":"為所有人清除訊息","menu_item_delete":"刪除","menu_item_delete_for_all":"為所有人刪除","menu_item_delete_topic":"刪除","menu_item_edit_permissions":"編輯權限","menu_item_info":"Info","menu_item_member_delete":"移除","menu_item_mute":"靜音","menu_item_restore_topic":"恢復","menu_item_send_retry":"重試","menu_item_unblock":"解除封鎖","menu_item_unmute":"解除靜音","message_sending":"正在傳送...","message_sending_failed":"失敗","messages_not_readable":"沒有存取訊息的權限","messaging_disabled_prompt":"停用訊息","more_online_members":"+{overflow}","new_message_prompt":"新訊息","new_password_placeholder":"輸入新的密碼","no_connection":"無連線","no_contacts":"您沒有任何聯絡人 :-(","numeric_confirmation_code_prompt":"僅數字","online_now":"上線中","password_prompt":"密碼","password_unchanged_prompt":"未修改","peers_messaging_disabled":"Peer 已停用訊息。","permission_admin":"核可 ({val})","permission_delete":"刪除 ({val})","permission_join":"加入 ({val})","permission_owner":"擁有者 ({val})","permission_pres":"收到通知 ({val})","permission_read":"讀取 ({val})","permission_share":"分享 ({val})","permission_write":"撰寫 ({val})","phone_dative":"phone","private_editing_placeholder":"僅您可見","push_init_failed":"初始化通知失敗。","reconnect_countdown":"已斷線。將在 {seconds} 秒後重新連線…","reconnect_now":"現在重試","reload_update":"重新載入","report_chat_warning":"您確定要封鎖並檢舉此對話嗎?","requested_permissions":"重新請求","save_attachment":"儲存","search_for_contacts":"使用搜尋來尋找聯絡人","search_no_results":"搜尋無結果","search_placeholder":"例如 email:alice@example.com, tel:17025550003... 的清單","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支援","sidepanel_title_account_settings":"帳號設定","sidepanel_title_archive":"已封存的對話","sidepanel_title_blocked":"已封鎖的對話","sidepanel_title_cred":"確認認證","sidepanel_title_login":"登入","sidepanel_title_newtpk":"開始新對話","sidepanel_title_register":"建立帳號","sidepanel_title_reset":"重設密碼","sidepanel_title_settings":"設定","stay_logged_in":"保持登入","tabtitle_find_user":"尋找","tabtitle_group_by_id":"以 id","tabtitle_new_group":"新群組","tags_editor_no_tags":"新增一些標籤","tags_not_found":"未定義任何標籤。請新增一些標籤。","title_all_contacts":"所有聯絡人","title_group_members":"群組成員","title_manage_tags":"管理","title_not_found":"找不到","title_permissions":"權限","title_tag_manager":"標籤 (使用者探索)","topic_block_warning":"您確定要封鎖此對話嗎?","topic_delete_warning":"您確定要刪除此對話嗎?","topic_name_editing_placeholder":"群組的任意名稱","unnamed_topic":"未命名","update_available":"有可用的更新。","upload_finishing":"正在完成...","user_not_found":"找不到","description_editing_placeholder":"說明(可選)","label_description":"說明","button_security":"安全性","panel_title_crop":"拖動調整","panel_title_general":"一般","panel_title_members":"成員","panel_title_security":"安全性","panel_title_info":"資訊","permissions_anonymous":"匿名","permissions_authenticated":"已認證","topic_delete":"刪除聊天","permissions_user":"用戶權限","password_reset_email_sent":"已發送一封帶有安全代碼的電子郵件。","label_unarchive_topic":"存檔聊天:","menu_item_reply":"回答","menu_item_forward":"重定向","forward_to":"重定向消息","forward_to_search_placeholder":"搜索聯繫人","label_new_password":"新密碼","drafty_unknown":"不支持","calls_incoming":"來電","calls_outgoing":"撥出電話","calls_you_label":"你","menu_item_video_call":"視頻電話","already_in_call":"你已經在說話了!","call_cancelled":"取消","call_missed":"未接","call_declined":"被拒","call_disconnected":"斷開連接","label_use_secure_connection":"使用安全連接","cred_confirmed_successfully":"確認成功","menu_item_edit":"編輯","editing_message":"編輯","message_edited_marker":",編輯","icon_title_add_image":"添加圖片","icon_title_attach_file":"附加文件","icon_title_delete":"刪除錄音","icon_title_pause":"暫停播放","icon_title_play":"播放錄音","icon_title_record_voice":"錄製語音消息","icon_title_resume":"恢復播放","icon_title_send":"發信息","drag_file":"將文件拖到這裡","drafty_video":"視頻錄製","call_in_progress":"通話中","menu_item_audio_call":"稱呼","unrecognized_video_format":"無法識別此視頻的格式","loading_note":"加載中...","password_i_have_code":"我有代碼","label_reset_password_tel":"發送短信重置密碼","mobile_phone_number":"手機號碼","password_reset_sms_sent":"已發送帶有安全代碼的短信。","mobile_number_required":"需要手機號","current_email":"當前郵箱","current_phone":"當前電話號碼","new_email":"新電子郵件地址","new_phone_number":"新電話號碼","change_email":"更改郵箱","change_phone":"更改電話號碼","call_busy":"忙碌的","failed_to_init_audio":"初始化錄音失敗","password_reset_success":"密碼重置成功"}')}}]);
\ No newline at end of file
diff --git a/umd/246.prod.js b/umd/246.prod.js
index 3f6c1e8a..19ada4cb 100644
--- a/umd/246.prod.js
+++ b/umd/246.prod.js
@@ -1,2 +1,2 @@
-(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[246],{9742:(e,t)=>{"use strict";t.byteLength=function(e){var t=l(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,o=l(e),a=o[0],s=o[1],u=new i(function(e,t,n){return 3*(t+n)/4-n}(0,a,s)),c=0,f=s>0?a-4:a;for(n=0;n>16&255,u[c++]=t>>8&255,u[c++]=255&t;2===s&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,u[c++]=255&t);1===s&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t);return u},t.fromByteArray=function(e){for(var t,r=e.length,i=r%3,o=[],a=16383,s=0,l=r-i;sl?l:s+a));1===i?(t=e[r-1],o.push(n[t>>2]+n[t<<4&63]+"==")):2===i&&(t=(e[r-2]<<8)+e[r-1],o.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return o.join("")};for(var n=[],r=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,s=o.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function u(e,t,r){for(var i,o,a=[],s=t;s>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},8764:(e,t,n)=>{"use strict";const r=n(9742),i=n(645),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=l,t.SlowBuffer=function(e){+e!=e&&(e=0);return l.alloc(+e)},t.INSPECT_MAX_BYTES=50;const a=2147483647;function s(e){if(e>a)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return f(e)}return u(e,t,n)}function u(e,t,n){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const n=0|m(e,t);let r=s(n);const i=r.write(e,t);i!==n&&(r=r.slice(0,i));return r}(e,t);if(ArrayBuffer.isView(e))return function(e){if(Y(e,Uint8Array)){const t=new Uint8Array(e);return p(t.buffer,t.byteOffset,t.byteLength)}return h(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Y(e,ArrayBuffer)||e&&Y(e.buffer,ArrayBuffer))return p(e,t,n);if("undefined"!=typeof SharedArrayBuffer&&(Y(e,SharedArrayBuffer)||e&&Y(e.buffer,SharedArrayBuffer)))return p(e,t,n);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return l.from(r,t,n);const i=function(e){if(l.isBuffer(e)){const t=0|d(e.length),n=s(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return"number"!=typeof e.length||J(e.length)?s(0):h(e);if("Buffer"===e.type&&Array.isArray(e.data))return h(e.data)}(e);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function c(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function f(e){return c(e),s(e<0?0:0|d(e))}function h(e){const t=e.length<0?0:0|d(e.length),n=s(t);for(let r=0;r=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Y(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;let i=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return W(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return G(e).length;default:if(i)return r?-1:W(e).length;t=(""+t).toLowerCase(),i=!0}}function y(e,t,n){let r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return _(this,t,n);case"utf8":case"utf-8":return B(this,t,n);case"ascii":return A(this,t,n);case"latin1":case"binary":return D(this,t,n);case"base64":return S(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function g(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),J(n=+n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,i){let o,a=1,s=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,l/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){let r=-1;for(o=n;os&&(n=s-l),o=n;o>=0;o--){let n=!0;for(let r=0;ri&&(r=i):r=i;const o=t.length;let a;for(r>o/2&&(r=o/2),a=0;a>8,i=n%256,o.push(i),o.push(r);return o}(t,e.length-n),e,n,r)}function S(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function B(e,t,n){n=Math.min(e.length,n);const r=[];let i=t;for(;i239?4:t>223?3:t>191?2:1;if(i+a<=n){let n,r,s,l;switch(a){case 1:t<128&&(o=t);break;case 2:n=e[i+1],128==(192&n)&&(l=(31&t)<<6|63&n,l>127&&(o=l));break;case 3:n=e[i+1],r=e[i+2],128==(192&n)&&128==(192&r)&&(l=(15&t)<<12|(63&n)<<6|63&r,l>2047&&(l<55296||l>57343)&&(o=l));break;case 4:n=e[i+1],r=e[i+2],s=e[i+3],128==(192&n)&&128==(192&r)&&128==(192&s)&&(l=(15&t)<<18|(63&n)<<12|(63&r)<<6|63&s,l>65535&&l<1114112&&(o=l))}}null===o?(o=65533,a=1):o>65535&&(o-=65536,r.push(o>>>10&1023|55296),o=56320|1023&o),r.push(o),i+=a}return function(e){const t=e.length;if(t<=I)return String.fromCharCode.apply(String,e);let n="",r=0;for(;rr.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(r,i)):Uint8Array.prototype.set.call(r,t,i);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(r,i)}i+=t.length}return r},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tn&&(e+=" ... "),""},o&&(l.prototype[o]=l.prototype.inspect),l.prototype.compare=function(e,t,n,r,i){if(Y(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(this===e)return 0;let o=(i>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0);const s=Math.min(o,a),u=this.slice(r,i),c=e.slice(t,n);for(let e=0;e>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}const i=this.length-t;if((void 0===n||n>i)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");let o=!1;for(;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return k(this,e,t,n);case"ascii":case"latin1":case"binary":return T(this,e,t,n);case"base64":return E(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const I=4096;function A(e,t,n){let r="";n=Math.min(e.length,n);for(let i=t;ir)&&(n=r);let i="";for(let r=t;rn)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,i,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function U(e,t,n,r,i){j(t,r,i,e,n,7);let o=Number(t&BigInt(4294967295));e[n++]=o,o>>=8,e[n++]=o,o>>=8,e[n++]=o,o>>=8,e[n++]=o;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a,n}function O(e,t,n,r,i){j(t,r,i,e,n,7);let o=Number(t&BigInt(4294967295));e[n+7]=o,o>>=8,e[n+6]=o,o>>=8,e[n+5]=o,o>>=8,e[n+4]=o;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[n+3]=a,a>>=8,e[n+2]=a,a>>=8,e[n+1]=a,a>>=8,e[n]=a,n+8}function M(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function R(e,t,n,r,o){return t=+t,n>>>=0,o||M(e,0,n,4),i.write(e,t,n,r,23,4),n+4}function N(e,t,n,r,o){return t=+t,n>>>=0,o||M(e,0,n,8),i.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){const n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e],i=1,o=0;for(;++o>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e+--t],i=1;for(;t>0&&(i*=256);)r+=this[e+--t]*i;return r},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||P(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||P(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||P(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||P(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||P(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=Z((function(e){H(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||q(e,this.length-8);const r=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,i=this[++e]+256*this[++e]+65536*this[++e]+n*2**24;return BigInt(r)+(BigInt(i)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||q(e,this.length-8);const r=t*2**24+65536*this[++e]+256*this[++e]+this[++e],i=this[++e]*2**24+65536*this[++e]+256*this[++e]+n;return(BigInt(r)<>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e],i=1,o=0;for(;++o=i&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||P(e,t,this.length);let r=t,i=1,o=this[e+--r];for(;r>0&&(i*=256);)o+=this[e+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o},l.prototype.readInt8=function(e,t){return e>>>=0,t||P(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||P(e,2,this.length);const n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||P(e,2,this.length);const n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||P(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||P(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=Z((function(e){H(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||q(e,this.length-8);const r=this[e+4]+256*this[e+5]+65536*this[e+6]+(n<<24);return(BigInt(r)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||q(e,this.length-8);const r=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<>>=0,t||P(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||P(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||P(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||P(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){L(this,e,t,n,Math.pow(2,8*n)-1,0)}let i=1,o=0;for(this[t]=255&e;++o>>=0,n>>>=0,!r){L(this,e,t,n,Math.pow(2,8*n)-1,0)}let i=n-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=Z((function(e,t=0){return U(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=Z((function(e,t=0){return O(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);L(this,e,t,n,r-1,-r)}let i=0,o=1,a=0;for(this[t]=255&e;++i>0)-a&255;return t+n},l.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);L(this,e,t,n,r-1,-r)}let i=n-1,o=1,a=0;for(this[t+i]=255&e;--i>=0&&(o*=256);)e<0&&0===a&&0!==this[t+i+1]&&(a=1),this[t+i]=(e/o>>0)-a&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=Z((function(e,t=0){return U(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=Z((function(e,t=0){return O(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,n){return R(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return R(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return N(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return N(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i=r+4;n-=3)t=`_${e.slice(n-3,n)}${t}`;return`${e.slice(0,n)}${t}`}function j(e,t,n,r,i,o){if(e>n||e3?0===t||t===BigInt(0)?`>= 0${r} and < 2${r} ** ${8*(o+1)}${r}`:`>= -(2${r} ** ${8*(o+1)-1}${r}) and < 2 ** ${8*(o+1)-1}${r}`:`>= ${t}${r} and <= ${n}${r}`,new F.ERR_OUT_OF_RANGE("value",i,e)}!function(e,t,n){H(t,"offset"),void 0!==e[t]&&void 0!==e[t+n]||q(t,e.length-(n+1))}(r,i,o)}function H(e,t){if("number"!=typeof e)throw new F.ERR_INVALID_ARG_TYPE(t,"number",e)}function q(e,t,n){if(Math.floor(e)!==e)throw H(e,n),new F.ERR_OUT_OF_RANGE(n||"offset","an integer",e);if(t<0)throw new F.ERR_BUFFER_OUT_OF_BOUNDS;throw new F.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${t}`,e)}V("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),V("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),V("ERR_OUT_OF_RANGE",(function(e,t,n){let r=`The value of "${e}" is out of range.`,i=n;return Number.isInteger(n)&&Math.abs(n)>2**32?i=z(String(n)):"bigint"==typeof n&&(i=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(i=z(i)),i+="n"),r+=` It must be ${t}. Received ${i}`,r}),RangeError);const $=/[^+/0-9A-Za-z-_]/g;function W(e,t){let n;t=t||1/0;const r=e.length;let i=null;const o=[];for(let a=0;a55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function G(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace($,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function X(e,t,n,r){let i;for(i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}function Y(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function J(e){return e!=e}const K=function(){const e="0123456789abcdef",t=new Array(256);for(let n=0;n<16;++n){const r=16*n;for(let i=0;i<16;++i)t[r+i]=e[n]+e[i]}return t}();function Z(e){return"undefined"==typeof BigInt?Q:e}function Q(){throw new Error("BigInt not supported")}},1586:(e,t,n)=>{var r=n(1721),i=1,o=3,a=2;e.exports=function(e){var t={},n=new r(e);t.trackNumber=n.nextUIntV(),t.timecode=n.nextInt16BE();var s=n.nextUInt8();t.invisible=!!(8&s),t.keyframe=!!(128&s),t.discardable=!!(1&s);var l=(6&s)>>1;return t.frames=function(e,t){if(!t)return[e.nextBuffer()];var n,r,s=[],l=e.nextUInt8()+1;if(t===a){if(e.length%l!=0)throw new Error("Fixed-Size Lacing Error");for(r=e.length/l,n=0;n{var r=n(8826);function i(e){this.buffer=e,this.offset=0}i.prototype.nextInt16BE=function(){var e=this.buffer.readInt16BE(this.offset);return this.offset+=2,e},i.prototype.nextUInt8=function(){var e=this.buffer.readUInt8(this.offset);return this.offset+=1,e},i.prototype.nextUIntV=function(){var e=r(this.buffer,this.offset);return this.offset+=e.length,e.value},i.prototype.nextIntV=function(){var e=r(this.buffer,this.offset,!0);return this.offset+=e.length,e.value},i.prototype.nextBuffer=function(e){var t=e?this.buffer.slice(this.offset,this.offset+e):this.buffer.slice(this.offset);return this.offset+=e||this.length,t},Object.defineProperty(i.prototype,"length",{get:function(){return this.buffer.length-this.offset}}),e.exports=i},8826:e=>{e.exports=function(e,t,n){t=t||0;for(var r=1;r<=8&&!(e[t]>=Math.pow(2,8-r));r++);if(r>8)throw new Error("Unrepresentable length: "+r+" "+e.toString("hex",t,t+r));if(t+r>e.length)return null;var i,o=e[t]&(1<<8-r)-1;for(i=1;i=Math.pow(2,45)&&e[t+7]>0)return{length:r,value:-1};o*=Math.pow(2,8),o+=e[t+i]}return n&&(o-=Math.pow(2,7*r-1)-1),{length:r,value:o}}},7187:e=>{"use strict";var t,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var i=Number.isNaN||function(e){return e!=e};function o(){o.init.call(this)}e.exports=o,e.exports.once=function(e,t){return new Promise((function(n,r){function i(n){e.removeListener(t,o),r(n)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",i),n([].slice.call(arguments))}m(e,t,o,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,i,{once:!0})}))},o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var a=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?o.defaultMaxListeners:e._maxListeners}function u(e,t,n,r){var i,o,a,u;if(s(n),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),a=o[t]),void 0===a)a=o[t]=n,++e._eventsCount;else if("function"==typeof a?a=o[t]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(i=l(e))>0&&a.length>i&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,u=c,console&&console.warn&&console.warn(u)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=c.bind(r);return i.listener=n,r.wrapFn=i,i}function h(e,t,n){var r=e._events;if(void 0===r)return[];var i=r[t];return void 0===i?[]:"function"==typeof i?n?[i.listener||i]:[i]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var l=o[e];if(void 0===l)return!1;if("function"==typeof l)r(l,this,t);else{var u=l.length,c=d(l,u);for(n=0;n=0;o--)if(n[o]===t||n[o].listener===t){a=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},o.prototype.listeners=function(e){return h(this,e,!0)},o.prototype.rawListeners=function(e){return h(this,e,!1)},o.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},o.prototype.listenerCount=p,o.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},645:(e,t)=>{t.read=function(e,t,n,r,i){var o,a,s=8*i-r-1,l=(1<>1,c=-7,f=n?i-1:0,h=n?-1:1,p=e[t+f];for(f+=h,o=p&(1<<-c)-1,p>>=-c,c+=s;c>0;o=256*o+e[t+f],f+=h,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=r;c>0;a=256*a+e[t+f],f+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),o-=u}return(p?-1:1)*a*Math.pow(2,o-r)},t.write=function(e,t,n,r,i,o){var a,s,l,u=8*o-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:o-1,d=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),(t+=a+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(a++,l/=2),a+f>=c?(s=0,a=c):a+f>=1?(s=(t*l-1)*Math.pow(2,i),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;e[n+p]=255&s,p+=d,s/=256,i-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*m}},1166:function(e,t){!function(e){var t,n="undefined",r=n!==typeof Buffer&&Buffer,i=n!==typeof Uint8Array&&Uint8Array,o=n!==typeof ArrayBuffer&&ArrayBuffer,a=[0,0,0,0,0,0,0,0],s=Array.isArray||function(e){return!!e&&"[object Array]"==Object.prototype.toString.call(e)},l=4294967296,u=16777216;function c(s,c,k){var T=c?0:4,E=c?4:0,C=c?0:3,S=c?1:2,B=c?2:1,I=c?3:0,A=c?g:b,D=c?v:w,_=L.prototype,x="is"+s,P="_"+x;return _.buffer=void 0,_.offset=0,_[P]=!0,_.toNumber=U,_.toString=function(e){var t=this.buffer,n=this.offset,r=M(t,n+T),i=M(t,n+E),o="",a=!k&&2147483648&r;a&&(r=~r,i=l-i);e=e||10;for(;;){var s=r%e*l+i;if(r=Math.floor(r/e),i=Math.floor(s/e),o=(s%e).toString(e)+o,!r&&!i)break}a&&(o="-"+o);return o},_.toJSON=U,_.toArray=f,r&&(_.toBuffer=h),i&&(_.toArrayBuffer=p),L[x]=function(e){return!(!e||!e[P])},e[s]=L,L;function L(e,s,u,c){return this instanceof L?function(e,s,u,c,f){i&&o&&(s instanceof o&&(s=new i(s)),c instanceof o&&(c=new i(c)));if(!(s||u||c||t))return void(e.buffer=y(a,0));if(!d(s,u)){var h=t||Array;f=u,c=s,u=0,s=t===r?r.alloc(8):new h(8)}if(e.buffer=s,e.offset=u|=0,n===typeof c)return;"string"==typeof c?function(e,t,n,r){var i=0,o=n.length,a=0,s=0;"-"===n[0]&&i++;var u=i;for(;i=0))break;s=s*r+c,a=a*r+Math.floor(s/l),s%=l}u&&(a=~a,s?s=l-s:a++);O(e,t+T,a),O(e,t+E,s)}(s,u,c,f||10):d(c,f)?m(s,u,c,f):"number"==typeof f?(O(s,u+T,c),O(s,u+E,f)):c>0?A(s,u,c):c<0?D(s,u,c):m(s,u,a,0)}(this,e,s,u,c):new L(e,s,u,c)}function U(){var e=this.buffer,t=this.offset,n=M(e,t+T),r=M(e,t+E);return k||(n|=0),n?n*l+r:r}function O(e,t,n){e[t+I]=255&n,n>>=8,e[t+B]=255&n,n>>=8,e[t+S]=255&n,n>>=8,e[t+C]=255&n}function M(e,t){return e[t+C]*u+(e[t+S]<<16)+(e[t+B]<<8)+e[t+I]}}function f(e){var n=this.buffer,r=this.offset;return t=null,!1!==e&&s(n)?8===n.length?n:n.slice(r,r+8):y(n,r)}function h(e){var n=this.buffer,i=this.offset;return t=r,!1!==e&&r.isBuffer(n)?8===n.length?n:n.slice(i,i+8):r.from(p.call(this,e))}function p(e){var n=this.buffer,r=this.offset,a=n.buffer;if(t=i,!1!==e&&!n.offset&&a instanceof o)return 8===a.byteLength?a:a.slice(r,r+8);var s=new i(8);return m(s,0,n,r),s.buffer}function d(e,t){var n=e&&e.length;return t|=0,n&&t+8<=n&&"string"!=typeof e[t]}function m(e,t,n,r){t|=0,r|=0;for(var i=0;i<8;i++)e[t++]=255&n[r++]}function y(e,t){return Array.prototype.slice.call(e,t,t+8)}function g(e,t,n){for(var r=t+8;r>t;)e[--r]=255&n,n/=256}function v(e,t,n){var r=t+8;for(n++;r>t;)e[--r]=255&-n^255,n/=256}function b(e,t,n){for(var r=t+8;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},2800:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=n(1166),o=n(3210),a=n(3210),s=n(4370);!function(e){e[e.STATE_TAG=1]="STATE_TAG",e[e.STATE_SIZE=2]="STATE_SIZE",e[e.STATE_CONTENT=3]="STATE_CONTENT"}(r||(r={}));var l=function(){function e(){this._buffer=new o.Buffer(0),this._tag_stack=[],this._state=r.STATE_TAG,this._cursor=0,this._total=0,this._schema=s.byEbmlID,this._result=[]}return e.prototype.decode=function(e){this.readChunk(e);var t=this._result;return this._result=[],t},e.prototype.readChunk=function(e){for(this._buffer=a.concat([this._buffer,new o.Buffer(e)]);this._cursor=this._buffer.length)return!1;var e=(0,o.readVint)(this._buffer,this._cursor);if(null==e)return!1;var t=this._buffer.slice(this._cursor,this._cursor+e.length).reduce((function(e,t,n,r){return e+t*Math.pow(16,2*(r.length-1-n))}),0),n=this.getSchemaInfo(t),i={EBML_ID:t.toString(16),schema:n,type:n.type,name:n.name,level:n.level,tagStart:this._total,tagEnd:this._total+e.length,sizeStart:this._total+e.length,sizeEnd:null,dataStart:null,dataEnd:null,dataSize:null,data:null};return this._tag_stack.push(i),this._cursor+=e.length,this._total+=e.length,this._state=r.STATE_SIZE,!0},e.prototype.readSize=function(){if(this._cursor>=this._buffer.length)return!1;var e=(0,o.readVint)(this._buffer,this._cursor);if(null==e)return!1;var t=this._tag_stack[this._tag_stack.length-1];return t.sizeEnd=t.sizeStart+e.length,t.dataStart=t.sizeEnd,t.dataSize=e.value,-1===e.value?(t.dataEnd=-1,"m"===t.type&&(t.unknownSize=!0)):t.dataEnd=t.sizeEnd+e.value,this._cursor+=e.length,this._total+=e.length,this._state=r.STATE_CONTENT,!0},e.prototype.readContent=function(){var e=this._tag_stack[this._tag_stack.length-1];if("m"===e.type){if(e.isEnd=!1,this._result.push(e),this._state=r.STATE_TAG,0===e.dataSize){var t=Object.assign({},e,{isEnd:!0});this._result.push(t),this._tag_stack.pop()}return!0}if(this._buffer.length0;){var a=this._tag_stack[this._tag_stack.length-1];if(a.dataEnd<0)return this._tag_stack.pop(),!0;if(this._total{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(3210),i=n(3210),o=n(4370),a=function(){function e(){this._schema=o.byEbmlID,this._buffers=[],this._stack=[]}return e.prototype.encode=function(e){var t=this;return r.concat(e.reduce((function(e,n){return e.concat(t.encodeChunk(n))}),[])).buffer},e.prototype.encodeChunk=function(e){return"m"===e.type?e.isEnd?this.endTag(e):this.startTag(e):(e.data=i.Buffer.from(e.data),this.writeTag(e)),this.flush()},e.prototype.flush=function(){var e=this._buffers;return this._buffers=[],e},e.prototype.getSchemaInfo=function(e){for(var t=Object.keys(this._schema).map(Number),n=0;n0?this._stack[this._stack.length-1].children.push({tagId:n,elm:e,children:[],data:o}):this._buffers=this._buffers.concat(o)},e.prototype.startTag=function(e){var t=e.name,n=this.getSchemaInfo(t);if(null==n)throw new Error("No schema entry found for "+t);if(e.unknownSize){var o=r.encodeTag(n,new i.Buffer(0),e.unknownSize);this._buffers=this._buffers.concat(o)}else{var a={tagId:n,elm:e,children:[],data:null};this._stack.length>0&&this._stack[this._stack.length-1].children.push(a),this._stack.push(a)}},e.prototype.endTag=function(e){e.name;var t=this._stack.pop();if(null==t)throw new Error("EBML structure is broken");if(t.elm.name!==e.name)throw new Error("EBML structure is broken");var n=t.children.reduce((function(e,t){if(null===t.data)throw new Error("EBML structure is broken");return e.concat(t.data)}),[]),i=r.concat(n);"m"===t.elm.type?t.data=r.encodeTag(t.tagId,i,t.elm.unknownSize):t.data=r.encodeTag(t.tagId,i),this._stack.length<1&&(this._buffers=this._buffers.concat(t.data))},e}();t.default=a},1381:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(7187),a=n(3210),s=function(e){function t(){var t=e.call(this)||this;return t.logGroup="",t.hasLoggingStarted=!1,t.metadataloaded=!1,t.chunks=[],t.stack=[],t.segmentOffset=0,t.last2SimpleBlockVideoTrackTimecode=[0,0],t.last2SimpleBlockAudioTrackTimecode=[0,0],t.lastClusterTimecode=0,t.lastClusterPosition=0,t.timecodeScale=1e6,t.metadataSize=0,t.metadatas=[],t.cues=[],t.firstVideoBlockRead=!1,t.firstAudioBlockRead=!1,t.currentTrack={TrackNumber:-1,TrackType:-1,DefaultDuration:null,CodecDelay:null},t.trackTypes=[],t.trackDefaultDuration=[],t.trackCodecDelay=[],t.trackInfo={type:"nothing"},t.ended=!1,t.logging=!1,t.use_duration_every_simpleblock=!1,t.use_webp=!1,t.use_segment_info=!0,t.drop_default_duration=!0,t}return i(t,e),t.prototype.stop=function(){for(this.ended=!0,this.emit_segment_info();this.stack.length;)this.stack.pop(),this.logging&&console.groupEnd();this.logging&&this.hasLoggingStarted&&this.logGroup&&console.groupEnd()},t.prototype.emit_segment_info=function(){var e=this.chunks;if(this.chunks=[],this.metadataloaded){if(!this.use_segment_info)return;var t=this.lastClusterTimecode,n=this.duration,r=this.timecodeScale;this.emit("cluster",{timecode:t,data:e}),this.emit("duration",{timecodeScale:r,duration:n})}else{this.metadataloaded=!0,this.metadatas=e;var i=this.trackTypes.indexOf(1),o=this.trackTypes.indexOf(2);if(this.trackInfo=i>=0&&o>=0?{type:"both",trackNumber:i}:i>=0?{type:"video",trackNumber:i}:o>=0?{type:"audio",trackNumber:o}:{type:"nothing"},!this.use_segment_info)return;this.emit("metadata",{data:e,metadataSize:this.metadataSize})}},t.prototype.read=function(e){var t=this,n=!1;if(!this.ended){if("m"===e.type)if(e.isEnd)this.stack.pop();else{var r=this.stack[this.stack.length-1];if(null!=r&&r.level>=e.level){this.stack.pop(),this.logging&&console.groupEnd(),r.dataEnd=e.dataEnd,r.dataSize=e.dataEnd-r.dataStart,r.unknownSize=!1;var i=Object.assign({},r,{name:r.name,type:r.type,isEnd:!0});this.chunks.push(i)}this.stack.push(e)}if("m"===e.type&&"Segment"==e.name)0!=this.segmentOffset&&console.warn("Multiple segments detected!"),this.segmentOffset=e.dataStart,this.emit("segment_offset",this.segmentOffset);else if("b"===e.type&&"SimpleBlock"===e.name){var o=a.ebmlBlock(e.data),s=o.timecode,l=o.trackNumber,u=o.frames;if(1===this.trackTypes[l]){if(!this.firstVideoBlockRead&&(this.firstVideoBlockRead=!0,"both"===this.trackInfo.type||"video"===this.trackInfo.type)){var c=this.lastClusterTimecode+s;this.cues.push({CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:c}),this.emit("cue_info",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:this.lastClusterTimecode}),this.emit("cue",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:c})}this.last2SimpleBlockVideoTrackTimecode=[this.last2SimpleBlockVideoTrackTimecode[1],s]}else if(2===this.trackTypes[l]){if(!this.firstAudioBlockRead&&(this.firstAudioBlockRead=!0,"audio"===this.trackInfo.type)){c=this.lastClusterTimecode+s;this.cues.push({CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:c}),this.emit("cue_info",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:this.lastClusterTimecode}),this.emit("cue",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:c})}this.last2SimpleBlockAudioTrackTimecode=[this.last2SimpleBlockAudioTrackTimecode[1],s]}this.use_duration_every_simpleblock&&this.emit("duration",{timecodeScale:this.timecodeScale,duration:this.duration}),this.use_webp&&u.forEach((function(e){if("9d012a"===e.slice(3,6).toString("hex")){var n=a.VP8BitStreamToRiffWebPBuffer(e),r=new Blob([n],{type:"image/webp"}),i=t.duration;t.emit("webp",{currentTime:i,webp:r})}}))}else"m"===e.type&&"Cluster"===e.name&&!1===e.isEnd?(this.firstVideoBlockRead=!1,this.firstAudioBlockRead=!1,this.emit_segment_info(),this.emit("cluster_ptr",e.tagStart),this.lastClusterPosition=e.tagStart):"u"===e.type&&"Timecode"===e.name?this.lastClusterTimecode=e.value:"u"===e.type&&"TimecodeScale"===e.name?this.timecodeScale=e.value:"m"===e.type&&"TrackEntry"===e.name?e.isEnd?(this.trackTypes[this.currentTrack.TrackNumber]=this.currentTrack.TrackType,this.trackDefaultDuration[this.currentTrack.TrackNumber]=this.currentTrack.DefaultDuration,this.trackCodecDelay[this.currentTrack.TrackNumber]=this.currentTrack.CodecDelay):this.currentTrack={TrackNumber:-1,TrackType:-1,DefaultDuration:null,CodecDelay:null}:"u"===e.type&&"TrackType"===e.name?this.currentTrack.TrackType=e.value:"u"===e.type&&"TrackNumber"===e.name?this.currentTrack.TrackNumber=e.value:"u"===e.type&&"CodecDelay"===e.name?this.currentTrack.CodecDelay=e.value:"u"===e.type&&"DefaultDuration"===e.name?this.drop_default_duration?(console.warn("DefaultDuration detected!, remove it"),n=!0):this.currentTrack.DefaultDuration=e.value:"unknown"===e.name&&console.warn(e);!this.metadataloaded&&e.dataEnd>0&&(this.metadataSize=e.dataEnd),n||this.chunks.push(e),this.logging&&this.put(e)}},Object.defineProperty(t.prototype,"duration",{get:function(){if("nothing"===this.trackInfo.type)return console.warn("no video, no audio track"),0;var e=0,t=0,n=0,r=this.trackDefaultDuration[this.trackInfo.trackNumber];if("number"==typeof r)e=r;else if("both"===this.trackInfo.type)this.last2SimpleBlockAudioTrackTimecode[1]>this.last2SimpleBlockVideoTrackTimecode[1]?(e=(this.last2SimpleBlockAudioTrackTimecode[1]-this.last2SimpleBlockAudioTrackTimecode[0])*this.timecodeScale,"number"==typeof(i=this.trackCodecDelay[this.trackTypes.indexOf(2)])&&(t=i),n=this.last2SimpleBlockAudioTrackTimecode[1]):(e=(this.last2SimpleBlockVideoTrackTimecode[1]-this.last2SimpleBlockVideoTrackTimecode[0])*this.timecodeScale,"number"==typeof(i=this.trackCodecDelay[this.trackTypes.indexOf(1)])&&(t=i),n=this.last2SimpleBlockVideoTrackTimecode[1]);else if("video"===this.trackInfo.type){e=(this.last2SimpleBlockVideoTrackTimecode[1]-this.last2SimpleBlockVideoTrackTimecode[0])*this.timecodeScale,"number"==typeof(i=this.trackCodecDelay[this.trackInfo.trackNumber])&&(t=i),n=this.last2SimpleBlockVideoTrackTimecode[1]}else if("audio"===this.trackInfo.type){var i;e=(this.last2SimpleBlockAudioTrackTimecode[1]-this.last2SimpleBlockAudioTrackTimecode[0])*this.timecodeScale,"number"==typeof(i=this.trackCodecDelay[this.trackInfo.trackNumber])&&(t=i),n=this.last2SimpleBlockAudioTrackTimecode[1]}var o=((this.lastClusterTimecode+n)*this.timecodeScale+e-t)/this.timecodeScale;return Math.floor(o)},enumerable:!1,configurable:!0}),t.prototype.addListener=function(t,n){return e.prototype.addListener.call(this,t,n)},t.prototype.put=function(e){this.hasLoggingStarted||(this.hasLoggingStarted=!0,this.logging&&this.logGroup&&console.groupCollapsed(this.logGroup)),"m"===e.type?e.isEnd?console.groupEnd():console.group(e.name+":"+e.tagStart):"b"===e.type?console.log(e.name,e.type):console.log(e.name,e.tagStart,e.type,e.value)},t}(o.EventEmitter);t.default=s},4370:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.byEbmlID=void 0,t.byEbmlID={128:{name:"ChapterDisplay",level:4,type:"m",multiple:!0,minver:1,webm:!0,description:"Contains all possible strings to use for the chapter display."},131:{name:"TrackType",level:3,type:"u",mandatory:!0,minver:1,range:"1-254",description:"A set of track types coded on 8 bits (1: video, 2: audio, 3: complex, 0x10: logo, 0x11: subtitle, 0x12: buttons, 0x20: control)."},133:{name:"ChapString",cppname:"ChapterString",level:5,type:"8",mandatory:!0,minver:1,webm:!0,description:"Contains the string to use as the chapter atom."},134:{name:"CodecID",level:3,type:"s",mandatory:!0,minver:1,description:"An ID corresponding to the codec, see the codec page for more info."},136:{name:"FlagDefault",cppname:"TrackFlagDefault",level:3,type:"u",mandatory:!0,minver:1,default:1,range:"0-1",description:"Set if that track (audio, video or subs) SHOULD be active if no language found matches the user preference. (1 bit)"},137:{name:"ChapterTrackNumber",level:5,type:"u",mandatory:!0,multiple:!0,minver:1,webm:!1,range:"not 0",description:"UID of the Track to apply this chapter too. In the absense of a control track, choosing this chapter will select the listed Tracks and deselect unlisted tracks. Absense of this element indicates that the Chapter should be applied to any currently used Tracks."},145:{name:"ChapterTimeStart",level:4,type:"u",mandatory:!0,minver:1,webm:!0,description:"Timestamp of the start of Chapter (not scaled)."},146:{name:"ChapterTimeEnd",level:4,type:"u",minver:1,webm:!1,description:"Timestamp of the end of Chapter (timestamp excluded, not scaled)."},150:{name:"CueRefTime",level:5,type:"u",mandatory:!0,minver:2,webm:!1,description:"Timestamp of the referenced Block."},151:{name:"CueRefCluster",level:5,type:"u",mandatory:!0,webm:!1,description:"The Position of the Cluster containing the referenced Block."},152:{name:"ChapterFlagHidden",level:4,type:"u",mandatory:!0,minver:1,webm:!1,default:0,range:"0-1",description:"If a chapter is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)"},16980:{name:"ContentCompAlgo",level:6,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"The compression algorithm used. Algorithms that have been specified so far are: 0 - zlib, 3 - Header Stripping"},16981:{name:"ContentCompSettings",level:6,type:"b",minver:1,webm:!1,description:"Settings that might be needed by the decompressor. For Header Stripping (ContentCompAlgo=3), the bytes that were removed from the beggining of each frames of the track."},17026:{name:"DocType",level:1,type:"s",mandatory:!0,default:"matroska",minver:1,description:"A string that describes the type of document that follows this EBML header. 'matroska' in our case or 'webm' for webm files."},17029:{name:"DocTypeReadVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The minimum DocType version an interpreter has to support to read this file."},17030:{name:"EBMLVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The version of EBML parser used to create the file."},17031:{name:"DocTypeVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The version of DocType interpreter used to create the file."},17476:{name:"SegmentFamily",level:2,type:"b",multiple:!0,minver:1,webm:!1,bytesize:16,description:"A randomly generated unique ID that all segments related to each other must use (128 bits)."},17505:{name:"DateUTC",level:2,type:"d",minver:1,description:"Date of the origin of timestamp (value 0), i.e. production date."},17540:{name:"TagDefault",level:4,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"0-1",description:"Indication to know if this is the default/original language to use for the given tag. (1 bit)"},17541:{name:"TagBinary",level:4,type:"b",minver:1,webm:!1,description:"The values of the Tag if it is binary. Note that this cannot be used in the same SimpleTag as TagString."},17543:{name:"TagString",level:4,type:"8",minver:1,webm:!1,description:"The value of the Element."},17545:{name:"Duration",level:2,type:"f",minver:1,range:"> 0",description:"Duration of the segment (based on TimecodeScale)."},17816:{name:"ChapterFlagEnabled",level:4,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"0-1",description:"Specify wether the chapter is enabled. It can be enabled/disabled by a Control Track. When disabled, the movie should skip all the content between the TimeStart and TimeEnd of this chapter (see flag notes). (1 bit)"},18016:{name:"FileMimeType",level:3,type:"s",mandatory:!0,minver:1,webm:!1,description:"MIME type of the file."},18017:{name:"FileUsedStartTime",level:3,type:"u",divx:!0,description:"DivX font extension"},18018:{name:"FileUsedEndTime",level:3,type:"u",divx:!0,description:"DivX font extension"},18037:{name:"FileReferral",level:3,type:"b",webm:!1,description:"A binary value that a track/codec can refer to when the attachment is needed."},20529:{name:"ContentEncodingOrder",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"Tells when this modification was used during encoding/muxing starting with 0 and counting upwards. The decoder/demuxer has to start with the highest order number it finds and work its way down. This value has to be unique over all ContentEncodingOrder elements in the segment."},20530:{name:"ContentEncodingScope",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"not 0",description:"A bit field that describes which elements have been modified in this way. Values (big endian) can be OR'ed. Possible values: 1 - all frame contents, 2 - the track's private data, 4 - the next ContentEncoding (next ContentEncodingOrder. Either the data inside ContentCompression and/or ContentEncryption)"},20531:{name:"ContentEncodingType",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"A value describing what kind of transformation has been done. Possible values: 0 - compression, 1 - encryption"},20532:{name:"ContentCompression",level:5,type:"m",minver:1,webm:!1,description:"Settings describing the compression used. Must be present if the value of ContentEncodingType is 0 and absent otherwise. Each block must be decompressable even if no previous block is available in order not to prevent seeking."},20533:{name:"ContentEncryption",level:5,type:"m",minver:1,webm:!1,description:"Settings describing the encryption used. Must be present if the value of ContentEncodingType is 1 and absent otherwise."},21368:{name:"CueBlockNumber",level:4,type:"u",minver:1,default:1,range:"not 0",description:"Number of the Block in the specified Cluster."},22100:{name:"ChapterStringUID",level:4,type:"8",mandatory:!1,minver:3,webm:!0,description:"A unique string ID to identify the Chapter. Use for WebVTT cue identifier storage."},22337:{name:"WritingApp",level:2,type:"8",mandatory:!0,minver:1,description:'Writing application ("mkvmerge-0.3.3").'},22612:{name:"SilentTracks",cppname:"ClusterSilentTracks",level:2,type:"m",minver:1,webm:!1,description:"The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks on seeking. Then you should decide what track to use."},25152:{name:"ContentEncoding",level:4,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Settings for one content encoding like compression or encryption."},25188:{name:"BitDepth",cppname:"AudioBitDepth",level:4,type:"u",minver:1,range:"not 0",description:"Bits per sample, mostly used for PCM."},25906:{name:"SignedElement",level:3,type:"b",multiple:!0,webm:!1,description:"An element ID whose data will be used to compute the signature."},26148:{name:"TrackTranslate",level:3,type:"m",multiple:!0,minver:1,webm:!1,description:"The track identification for the given Chapter Codec."},26897:{name:"ChapProcessCommand",cppname:"ChapterProcessCommand",level:5,type:"m",multiple:!0,minver:1,webm:!1,description:"Contains all the commands associated to the Atom."},26914:{name:"ChapProcessTime",cppname:"ChapterProcessTime",level:6,type:"u",mandatory:!0,minver:1,webm:!1,description:"Defines when the process command should be handled (0: during the whole chapter, 1: before starting playback, 2: after playback of the chapter)."},26916:{name:"ChapterTranslate",level:2,type:"m",multiple:!0,minver:1,webm:!1,description:"A tuple of corresponding ID used by chapter codecs to represent this segment."},26931:{name:"ChapProcessData",cppname:"ChapterProcessData",level:6,type:"b",mandatory:!0,minver:1,webm:!1,description:"Contains the command information. The data should be interpreted depending on the ChapProcessCodecID value. For ChapProcessCodecID = 1, the data correspond to the binary DVD cell pre/post commands."},26948:{name:"ChapProcess",cppname:"ChapterProcess",level:4,type:"m",multiple:!0,minver:1,webm:!1,description:"Contains all the commands associated to the Atom."},26965:{name:"ChapProcessCodecID",cppname:"ChapterProcessCodecID",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"Contains the type of the codec used for the processing. A value of 0 means native Matroska processing (to be defined), a value of 1 means the DVD command set is used. More codec IDs can be added later."},29555:{name:"Tag",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Element containing elements specific to Tracks/Chapters."},29572:{name:"SegmentFilename",level:2,type:"8",minver:1,webm:!1,description:"A filename corresponding to this segment."},29766:{name:"AttachmentLink",cppname:"TrackAttachmentLink",level:3,type:"u",minver:1,webm:!1,range:"not 0",description:"The UID of an attachment that is used by this codec."},2459272:{name:"CodecName",level:3,type:"8",minver:1,description:"A human-readable string specifying the codec."},408125543:{name:"Segment",level:"0",type:"m",mandatory:!0,multiple:!0,minver:1,description:"This element contains all other top-level (level 1) elements. Typically a Matroska file is composed of 1 segment."},17530:{name:"TagLanguage",level:4,type:"s",mandatory:!0,minver:1,webm:!1,default:"und",description:"Specifies the language of the tag specified, in the Matroska languages form."},17827:{name:"TagName",level:4,type:"8",mandatory:!0,minver:1,webm:!1,description:"The name of the Tag that is going to be stored."},26568:{name:"SimpleTag",cppname:"TagSimple",level:3,recursive:"1",type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Contains general information about the target."},25542:{name:"TagAttachmentUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the Attachment(s) the tags belong to. If the value is 0 at this level, the tags apply to all the attachments in the Segment."},25540:{name:"TagChapterUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the Chapter(s) the tags belong to. If the value is 0 at this level, the tags apply to all chapters in the Segment."},25545:{name:"TagEditionUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the EditionEntry(s) the tags belong to. If the value is 0 at this level, the tags apply to all editions in the Segment."},25541:{name:"TagTrackUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the Track(s) the tags belong to. If the value is 0 at this level, the tags apply to all tracks in the Segment."},25546:{name:"TargetType",cppname:"TagTargetType",level:4,type:"s",minver:1,webm:!1,strong:"informational",description:'An string that can be used to display the logical level of the target like "ALBUM", "TRACK", "MOVIE", "CHAPTER", etc (see TargetType).'},26826:{name:"TargetTypeValue",cppname:"TagTargetTypeValue",level:4,type:"u",minver:1,webm:!1,default:50,description:"A number to indicate the logical level of the target (see TargetType)."},25536:{name:"Targets",cppname:"TagTargets",level:3,type:"m",mandatory:!0,minver:1,webm:!1,description:"Contain all UIDs where the specified meta data apply. It is empty to describe everything in the segment."},307544935:{name:"Tags",level:1,type:"m",multiple:!0,minver:1,webm:!1,description:"Element containing elements specific to Tracks/Chapters. A list of valid tags can be found here."},17677:{name:"ChapProcessPrivate",cppname:"ChapterProcessPrivate",level:5,type:"b",minver:1,webm:!1,description:'Some optional data attached to the ChapProcessCodecID information. For ChapProcessCodecID = 1, it is the "DVD level" equivalent.'},17278:{name:"ChapCountry",cppname:"ChapterCountry",level:5,type:"s",multiple:!0,minver:1,webm:!1,description:"The countries corresponding to the string, same 2 octets as in Internet domains."},17276:{name:"ChapLanguage",cppname:"ChapterLanguage",level:5,type:"s",mandatory:!0,multiple:!0,minver:1,webm:!0,default:"eng",description:"The languages corresponding to the string, in the bibliographic ISO-639-2 form."},143:{name:"ChapterTrack",level:4,type:"m",minver:1,webm:!1,description:"List of tracks on which the chapter applies. If this element is not present, all tracks apply"},25539:{name:"ChapterPhysicalEquiv",level:4,type:"u",minver:1,webm:!1,description:'Specify the physical equivalent of this ChapterAtom like "DVD" (60) or "SIDE" (50), see complete list of values.'},28348:{name:"ChapterSegmentEditionUID",level:4,type:"u",minver:1,webm:!1,range:"not 0",description:"The EditionUID to play from the segment linked in ChapterSegmentUID."},28263:{name:"ChapterSegmentUID",level:4,type:"b",minver:1,webm:!1,range:">0",bytesize:16,description:"A segment to play in place of this chapter. Edition ChapterSegmentEditionUID should be used for this segment, otherwise no edition is used."},29636:{name:"ChapterUID",level:4,type:"u",mandatory:!0,minver:1,webm:!0,range:"not 0",description:"A unique ID to identify the Chapter."},182:{name:"ChapterAtom",level:3,recursive:"1",type:"m",mandatory:!0,multiple:!0,minver:1,webm:!0,description:"Contains the atom information to use as the chapter atom (apply to all tracks)."},17885:{name:"EditionFlagOrdered",level:3,type:"u",minver:1,webm:!1,default:0,range:"0-1",description:"Specify if the chapters can be defined multiple times and the order to play them is enforced. (1 bit)"},17883:{name:"EditionFlagDefault",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,range:"0-1",description:"If a flag is set (1) the edition should be used as the default one. (1 bit)"},17853:{name:"EditionFlagHidden",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,range:"0-1",description:"If an edition is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)"},17852:{name:"EditionUID",level:3,type:"u",minver:1,webm:!1,range:"not 0",description:"A unique ID to identify the edition. It's useful for tagging an edition."},17849:{name:"EditionEntry",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!0,description:"Contains all information about a segment edition."},272869232:{name:"Chapters",level:1,type:"m",minver:1,webm:!0,description:"A system to define basic menus and partition data. For more detailed information, look at the Chapters Explanation."},18094:{name:"FileUID",level:3,type:"u",mandatory:!0,minver:1,webm:!1,range:"not 0",description:"Unique ID representing the file, as random as possible."},18012:{name:"FileData",level:3,type:"b",mandatory:!0,minver:1,webm:!1,description:"The data of the file."},18030:{name:"FileName",level:3,type:"8",mandatory:!0,minver:1,webm:!1,description:"Filename of the attached file."},18046:{name:"FileDescription",level:3,type:"8",minver:1,webm:!1,description:"A human-friendly name for the attached file."},24999:{name:"AttachedFile",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"An attached file."},423732329:{name:"Attachments",level:1,type:"m",minver:1,webm:!1,description:"Contain attached files."},235:{name:"CueRefCodecState",level:5,type:"u",webm:!1,default:0,description:"The position of the Codec State corresponding to this referenced element. 0 means that the data is taken from the initial Track Entry."},21343:{name:"CueRefNumber",level:5,type:"u",webm:!1,default:1,range:"not 0",description:"Number of the referenced Block of Track X in the specified Cluster."},219:{name:"CueReference",level:4,type:"m",multiple:!0,minver:2,webm:!1,description:"The Clusters containing the required referenced Blocks."},234:{name:"CueCodecState",level:4,type:"u",minver:2,webm:!1,default:0,description:"The position of the Codec State corresponding to this Cue element. 0 means that the data is taken from the initial Track Entry."},178:{name:"CueDuration",level:4,type:"u",mandatory:!1,minver:4,webm:!1,description:"The duration of the block according to the segment time base. If missing the track's DefaultDuration does not apply and no duration information is available in terms of the cues."},240:{name:"CueRelativePosition",level:4,type:"u",mandatory:!1,minver:4,webm:!1,description:"The relative position of the referenced block inside the cluster with 0 being the first possible position for an element inside that cluster.",position:"clusterRelative"},241:{name:"CueClusterPosition",level:4,type:"u",mandatory:!0,minver:1,description:"The position of the Cluster containing the required Block.",position:"segment"},247:{name:"CueTrack",level:4,type:"u",mandatory:!0,minver:1,range:"not 0",description:"The track for which a position is given."},183:{name:"CueTrackPositions",level:3,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contain positions for different tracks corresponding to the timestamp."},179:{name:"CueTime",level:3,type:"u",mandatory:!0,minver:1,description:"Absolute timestamp according to the segment time base."},187:{name:"CuePoint",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contains all information relative to a seek point in the segment."},475249515:{name:"Cues",level:1,type:"m",minver:1,description:'A top-level element to speed seeking access. All entries are local to the segment. Should be mandatory for non "live" streams.'},18406:{name:"ContentSigHashAlgo",level:6,type:"u",minver:1,webm:!1,default:0,description:"The hash algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - SHA1-160 2 - MD5"},18405:{name:"ContentSigAlgo",level:6,type:"u",minver:1,webm:!1,default:0,description:"The algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - RSA"},18404:{name:"ContentSigKeyID",level:6,type:"b",minver:1,webm:!1,description:"This is the ID of the private key the data was signed with."},18403:{name:"ContentSignature",level:6,type:"b",minver:1,webm:!1,description:"A cryptographic signature of the contents."},18402:{name:"ContentEncKeyID",level:6,type:"b",minver:1,webm:!1,description:"For public key algorithms this is the ID of the public key the the data was encrypted with."},18401:{name:"ContentEncAlgo",level:6,type:"u",minver:1,webm:!1,default:0,description:"The encryption algorithm used. The value '0' means that the contents have not been encrypted but only signed. Predefined values: 1 - DES, 2 - 3DES, 3 - Twofish, 4 - Blowfish, 5 - AES"},28032:{name:"ContentEncodings",level:3,type:"m",minver:1,webm:!1,description:"Settings for several content encoding mechanisms like compression or encryption."},196:{name:"TrickMasterTrackSegmentUID",level:3,type:"b",divx:!0,bytesize:16,description:"DivX trick track extenstions"},199:{name:"TrickMasterTrackUID",level:3,type:"u",divx:!0,description:"DivX trick track extenstions"},198:{name:"TrickTrackFlag",level:3,type:"u",divx:!0,default:0,description:"DivX trick track extenstions"},193:{name:"TrickTrackSegmentUID",level:3,type:"b",divx:!0,bytesize:16,description:"DivX trick track extenstions"},192:{name:"TrickTrackUID",level:3,type:"u",divx:!0,description:"DivX trick track extenstions"},237:{name:"TrackJoinUID",level:5,type:"u",mandatory:!0,multiple:!0,minver:3,webm:!1,range:"not 0",description:"The trackUID number of a track whose blocks are used to create this virtual track."},233:{name:"TrackJoinBlocks",level:4,type:"m",minver:3,webm:!1,description:"Contains the list of all tracks whose Blocks need to be combined to create this virtual track"},230:{name:"TrackPlaneType",level:6,type:"u",mandatory:!0,minver:3,webm:!1,description:"The kind of plane this track corresponds to (0: left eye, 1: right eye, 2: background)."},229:{name:"TrackPlaneUID",level:6,type:"u",mandatory:!0,minver:3,webm:!1,range:"not 0",description:"The trackUID number of the track representing the plane."},228:{name:"TrackPlane",level:5,type:"m",mandatory:!0,multiple:!0,minver:3,webm:!1,description:"Contains a video plane track that need to be combined to create this 3D track"},227:{name:"TrackCombinePlanes",level:4,type:"m",minver:3,webm:!1,description:"Contains the list of all video plane tracks that need to be combined to create this 3D track"},226:{name:"TrackOperation",level:3,type:"m",minver:3,webm:!1,description:"Operation that needs to be applied on tracks to create this virtual track. For more details look at the Specification Notes on the subject."},32123:{name:"ChannelPositions",cppname:"AudioPosition",level:4,type:"b",webm:!1,description:"Table of horizontal angles for each successive channel, see appendix."},159:{name:"Channels",cppname:"AudioChannels",level:4,type:"u",mandatory:!0,minver:1,default:1,range:"not 0",description:"Numbers of channels in the track."},30901:{name:"OutputSamplingFrequency",cppname:"AudioOutputSamplingFreq",level:4,type:"f",minver:1,default:"Sampling Frequency",range:"> 0",description:"Real output sampling frequency in Hz (used for SBR techniques)."},181:{name:"SamplingFrequency",cppname:"AudioSamplingFreq",level:4,type:"f",mandatory:!0,minver:1,default:8e3,range:"> 0",description:"Sampling frequency in Hz."},225:{name:"Audio",cppname:"TrackAudio",level:3,type:"m",minver:1,description:"Audio settings."},2327523:{name:"FrameRate",cppname:"VideoFrameRate",level:4,type:"f",range:"> 0",strong:"Informational",description:"Number of frames per second. only."},3126563:{name:"GammaValue",cppname:"VideoGamma",level:4,type:"f",webm:!1,range:"> 0",description:"Gamma Value."},3061028:{name:"ColourSpace",cppname:"VideoColourSpace",level:4,type:"b",minver:1,webm:!1,bytesize:4,description:"Same value as in AVI (32 bits)."},21683:{name:"AspectRatioType",cppname:"VideoAspectRatio",level:4,type:"u",minver:1,default:0,description:"Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect ratio, 2: fixed)."},21682:{name:"DisplayUnit",cppname:"VideoDisplayUnit",level:4,type:"u",minver:1,default:0,description:"How DisplayWidth & DisplayHeight should be interpreted (0: pixels, 1: centimeters, 2: inches, 3: Display Aspect Ratio)."},21690:{name:"DisplayHeight",cppname:"VideoDisplayHeight",level:4,type:"u",minver:1,default:"PixelHeight",range:"not 0",description:"Height of the video frames to display. The default value is only valid when DisplayUnit is 0."},21680:{name:"DisplayWidth",cppname:"VideoDisplayWidth",level:4,type:"u",minver:1,default:"PixelWidth",range:"not 0",description:"Width of the video frames to display. The default value is only valid when DisplayUnit is 0."},21725:{name:"PixelCropRight",cppname:"VideoPixelCropRight",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove on the right of the image."},21708:{name:"PixelCropLeft",cppname:"VideoPixelCropLeft",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove on the left of the image."},21691:{name:"PixelCropTop",cppname:"VideoPixelCropTop",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove at the top of the image."},21674:{name:"PixelCropBottom",cppname:"VideoPixelCropBottom",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove at the bottom of the image (for HDTV content)."},186:{name:"PixelHeight",cppname:"VideoPixelHeight",level:4,type:"u",mandatory:!0,minver:1,range:"not 0",description:"Height of the encoded video frames in pixels."},176:{name:"PixelWidth",cppname:"VideoPixelWidth",level:4,type:"u",mandatory:!0,minver:1,range:"not 0",description:"Width of the encoded video frames in pixels."},21433:{name:"OldStereoMode",level:4,type:"u",maxver:"0",webm:!1,divx:!1,description:"DEPRECATED, DO NOT USE. Bogus StereoMode value used in old versions of libmatroska. (0: mono, 1: right eye, 2: left eye, 3: both eyes)."},21440:{name:"AlphaMode",cppname:"VideoAlphaMode",level:4,type:"u",minver:3,webm:!0,default:0,description:"Alpha Video Mode. Presence of this element indicates that the BlockAdditional element could contain Alpha data."},21432:{name:"StereoMode",cppname:"VideoStereoMode",level:4,type:"u",minver:3,webm:!0,default:0,description:"Stereo-3D video mode (0: mono, 1: side by side (left eye is first), 2: top-bottom (right eye is first), 3: top-bottom (left eye is first), 4: checkboard (right is first), 5: checkboard (left is first), 6: row interleaved (right is first), 7: row interleaved (left is first), 8: column interleaved (right is first), 9: column interleaved (left is first), 10: anaglyph (cyan/red), 11: side by side (right eye is first), 12: anaglyph (green/magenta), 13 both eyes laced in one Block (left eye is first), 14 both eyes laced in one Block (right eye is first)) . There are some more details on 3D support in the Specification Notes."},154:{name:"FlagInterlaced",cppname:"VideoFlagInterlaced",level:4,type:"u",mandatory:!0,minver:2,webm:!0,default:0,range:"0-1",description:"Set if the video is interlaced. (1 bit)"},224:{name:"Video",cppname:"TrackVideo",level:3,type:"m",minver:1,description:"Video settings."},26277:{name:"TrackTranslateTrackID",level:4,type:"b",mandatory:!0,minver:1,webm:!1,description:"The binary value used to represent this track in the chapter codec data. The format depends on the ChapProcessCodecID used."},26303:{name:"TrackTranslateCodec",level:4,type:"u",mandatory:!0,minver:1,webm:!1,description:"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu)."},26364:{name:"TrackTranslateEditionUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,description:"Specify an edition UID on which this translation applies. When not specified, it means for all editions found in the segment."},22203:{name:"SeekPreRoll",level:3,type:"u",mandatory:!0,multiple:!1,default:0,minver:4,webm:!0,description:"After a discontinuity, SeekPreRoll is the duration in nanoseconds of the data the decoder must decode before the decoded data is valid."},22186:{name:"CodecDelay",level:3,type:"u",multiple:!1,default:0,minver:4,webm:!0,description:"CodecDelay is The codec-built-in delay in nanoseconds. This value must be subtracted from each block timestamp in order to get the actual timestamp. The value should be small so the muxing of tracks with the same actual timestamp are in the same Cluster."},28587:{name:"TrackOverlay",level:3,type:"u",multiple:!0,minver:1,webm:!1,description:"Specify that this track is an overlay track for the Track specified (in the u-integer). That means when this track has a gap (see SilentTracks) the overlay track should be used instead. The order of multiple TrackOverlay matters, the first one is the one that should be used. If not found it should be the second, etc."},170:{name:"CodecDecodeAll",level:3,type:"u",mandatory:!0,minver:2,webm:!1,default:1,range:"0-1",description:"The codec can decode potentially damaged data (1 bit)."},2536e3:{name:"CodecDownloadURL",level:3,type:"s",multiple:!0,webm:!1,description:"A URL to download about the codec used."},3883072:{name:"CodecInfoURL",level:3,type:"s",multiple:!0,webm:!1,description:"A URL to find information about the codec used."},3839639:{name:"CodecSettings",level:3,type:"8",webm:!1,description:"A string describing the encoding setting used."},25506:{name:"CodecPrivate",level:3,type:"b",minver:1,description:"Private data only known to the codec."},2274716:{name:"Language",cppname:"TrackLanguage",level:3,type:"s",minver:1,default:"eng",description:"Specifies the language of the track in the Matroska languages form."},21358:{name:"Name",cppname:"TrackName",level:3,type:"8",minver:1,description:"A human-readable track name."},21998:{name:"MaxBlockAdditionID",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"The maximum value of BlockAdditions for this track."},21375:{name:"TrackOffset",level:3,type:"i",webm:!1,default:0,description:"A value to add to the Block's Timestamp. This can be used to adjust the playback offset of a track."},2306383:{name:"TrackTimecodeScale",level:3,type:"f",mandatory:!0,minver:1,maxver:"3",webm:!1,default:1,range:"> 0",description:"DEPRECATED, DO NOT USE. The scale to apply on this track to work at normal speed in relation with other tracks (mostly used to adjust video speed when the audio length differs)."},2313850:{name:"DefaultDecodedFieldDuration",cppname:"TrackDefaultDecodedFieldDuration",level:3,type:"u",minver:4,range:"not 0",description:"The period in nanoseconds (not scaled by TimcodeScale)\nbetween two successive fields at the output of the decoding process (see the notes)"},2352003:{name:"DefaultDuration",cppname:"TrackDefaultDuration",level:3,type:"u",minver:1,range:"not 0",description:"Number of nanoseconds (not scaled via TimecodeScale) per frame ('frame' in the Matroska sense -- one element put into a (Simple)Block)."},28152:{name:"MaxCache",cppname:"TrackMaxCache",level:3,type:"u",minver:1,webm:!1,description:"The maximum cache size required to store referenced frames in and the current frame. 0 means no cache is needed."},28135:{name:"MinCache",cppname:"TrackMinCache",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"The minimum number of frames a player should be able to cache during playback. If set to 0, the reference pseudo-cache system is not used."},156:{name:"FlagLacing",cppname:"TrackFlagLacing",level:3,type:"u",mandatory:!0,minver:1,default:1,range:"0-1",description:"Set if the track may contain blocks using lacing. (1 bit)"},21930:{name:"FlagForced",cppname:"TrackFlagForced",level:3,type:"u",mandatory:!0,minver:1,default:0,range:"0-1",description:"Set if that track MUST be active during playback. There can be many forced track for a kind (audio, video or subs), the player should select the one which language matches the user preference or the default + forced track. Overlay MAY happen between a forced and non-forced track of the same kind. (1 bit)"},185:{name:"FlagEnabled",cppname:"TrackFlagEnabled",level:3,type:"u",mandatory:!0,minver:2,webm:!0,default:1,range:"0-1",description:"Set if the track is usable. (1 bit)"},29637:{name:"TrackUID",level:3,type:"u",mandatory:!0,minver:1,range:"not 0",description:"A unique ID to identify the Track. This should be kept the same when making a direct stream copy of the Track to another file."},215:{name:"TrackNumber",level:3,type:"u",mandatory:!0,minver:1,range:"not 0",description:"The track number as used in the Block Header (using more than 127 tracks is not encouraged, though the design allows an unlimited number)."},174:{name:"TrackEntry",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Describes a track with all elements."},374648427:{name:"Tracks",level:1,type:"m",multiple:!0,minver:1,description:"A top-level block of information with many tracks described."},175:{name:"EncryptedBlock",level:2,type:"b",multiple:!0,webm:!1,description:"Similar to EncryptedBlock Structure)"},202:{name:"ReferenceTimeCode",level:4,type:"u",multiple:!1,mandatory:!0,minver:0,webm:!1,divx:!0,description:"DivX trick track extenstions"},201:{name:"ReferenceOffset",level:4,type:"u",multiple:!1,mandatory:!0,minver:0,webm:!1,divx:!0,description:"DivX trick track extenstions"},200:{name:"ReferenceFrame",level:3,type:"m",multiple:!1,minver:0,webm:!1,divx:!0,description:"DivX trick track extenstions"},207:{name:"SliceDuration",level:5,type:"u",default:0,description:"The (scaled) duration to apply to the element."},206:{name:"Delay",cppname:"SliceDelay",level:5,type:"u",default:0,description:"The (scaled) delay to apply to the element."},203:{name:"BlockAdditionID",cppname:"SliceBlockAddID",level:5,type:"u",default:0,description:"The ID of the BlockAdditional element (0 is the main Block)."},205:{name:"FrameNumber",cppname:"SliceFrameNumber",level:5,type:"u",default:0,description:"The number of the frame to generate from this lace with this delay (allow you to generate many frames from the same Block/Frame)."},204:{name:"LaceNumber",cppname:"SliceLaceNumber",level:5,type:"u",minver:1,default:0,divx:!1,description:"The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback."},232:{name:"TimeSlice",level:4,type:"m",multiple:!0,minver:1,divx:!1,description:"Contains extra time information about the data contained in the Block. While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback."},142:{name:"Slices",level:3,type:"m",minver:1,divx:!1,description:"Contains slices description."},30114:{name:"DiscardPadding",level:3,type:"i",minver:4,webm:!0,description:"Duration in nanoseconds of the silent data added to the Block (padding at the end of the Block for positive value, at the beginning of the Block for negative value). The duration of DiscardPadding is not calculated in the duration of the TrackEntry and should be discarded during playback."},164:{name:"CodecState",level:3,type:"b",minver:2,webm:!1,description:"The new codec state to use. Data interpretation is private to the codec. This information should always be referenced by a seek entry."},253:{name:"ReferenceVirtual",level:3,type:"i",webm:!1,description:"Relative position of the data that should be in position of the virtual block."},251:{name:"ReferenceBlock",level:3,type:"i",multiple:!0,minver:1,description:"Timestamp of another frame used as a reference (ie: B or P frame). The timestamp is relative to the block it's attached to."},250:{name:"ReferencePriority",cppname:"FlagReferenced",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"This frame is referenced and has the specified cache priority. In cache only a frame of the same or higher priority can replace this frame. A value of 0 means the frame is not referenced."},155:{name:"BlockDuration",level:3,type:"u",minver:1,default:"TrackDuration",description:'The duration of the Block (based on TimecodeScale). This element is mandatory when DefaultDuration is set for the track (but can be omitted as other default values). When not written and with no DefaultDuration, the value is assumed to be the difference between the timestamp of this Block and the timestamp of the next Block in "display" order (not coding order). This element can be useful at the end of a Track (as there is not other Block available), or when there is a break in a track like for subtitle tracks. When set to 0 that means the frame is not a keyframe.'},165:{name:"BlockAdditional",level:5,type:"b",mandatory:!0,minver:1,webm:!1,description:"Interpreted by the codec as it wishes (using the BlockAddID)."},238:{name:"BlockAddID",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"not 0",description:"An ID to identify the BlockAdditional level."},166:{name:"BlockMore",level:4,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Contain the BlockAdditional and some parameters."},30113:{name:"BlockAdditions",level:3,type:"m",minver:1,webm:!1,description:"Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block structure could still see and use/skip these data."},162:{name:"BlockVirtual",level:3,type:"b",webm:!1,description:"A Block with no data. It must be stored in the stream at the place the real Block should be in display order. (see Block Virtual)"},161:{name:"Block",level:3,type:"b",mandatory:!0,minver:1,description:"Block containing the actual data to be rendered and a timestamp relative to the Cluster Timecode. (see Block Structure)"},160:{name:"BlockGroup",level:2,type:"m",multiple:!0,minver:1,description:"Basic container of information containing a single Block or BlockVirtual, and information specific to that Block/VirtualBlock."},163:{name:"SimpleBlock",level:2,type:"b",multiple:!0,minver:2,webm:!0,divx:!0,description:"Similar to SimpleBlock Structure"},171:{name:"PrevSize",cppname:"ClusterPrevSize",level:2,type:"u",minver:1,description:"Size of the previous Cluster, in octets. Can be useful for backward playing.",position:"prevCluster"},167:{name:"Position",cppname:"ClusterPosition",level:2,type:"u",minver:1,webm:!1,description:"The Position of the Cluster in the segment (0 in live broadcast streams). It might help to resynchronise offset on damaged streams.",position:"segment"},22743:{name:"SilentTrackNumber",cppname:"ClusterSilentTrackNumber",level:3,type:"u",multiple:!0,minver:1,webm:!1,description:"One of the track number that are not used from now on in the stream. It could change later if not specified as silent in a further Cluster."},231:{name:"Timecode",cppname:"ClusterTimecode",level:2,type:"u",mandatory:!0,minver:1,description:"Absolute timestamp of the cluster (based on TimecodeScale)."},524531317:{name:"Cluster",level:1,type:"m",multiple:!0,minver:1,description:"The lower level element containing the (monolithic) Block structure."},19840:{name:"MuxingApp",level:2,type:"8",mandatory:!0,minver:1,description:'Muxing application or library ("libmatroska-0.4.3").'},31657:{name:"Title",level:2,type:"8",minver:1,webm:!1,description:"General name of the segment."},2807730:{name:"TimecodeScaleDenominator",level:2,type:"u",mandatory:!0,minver:4,default:"1000000000",description:"Timestamp scale numerator, see TimecodeScale."},2807729:{name:"TimecodeScale",level:2,type:"u",mandatory:!0,minver:1,default:"1000000",description:"Timestamp scale in nanoseconds (1.000.000 means all timestamps in the segment are expressed in milliseconds)."},27045:{name:"ChapterTranslateID",level:3,type:"b",mandatory:!0,minver:1,webm:!1,description:"The binary value used to represent this segment in the chapter codec data. The format depends on the ChapProcessCodecID used."},27071:{name:"ChapterTranslateCodec",level:3,type:"u",mandatory:!0,minver:1,webm:!1,description:"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu)."},27132:{name:"ChapterTranslateEditionUID",level:3,type:"u",multiple:!0,minver:1,webm:!1,description:"Specify an edition UID on which this correspondance applies. When not specified, it means for all editions found in the segment."},4096955:{name:"NextFilename",level:2,type:"8",minver:1,webm:!1,description:"An escaped filename corresponding to the next segment."},4110627:{name:"NextUID",level:2,type:"b",minver:1,webm:!1,bytesize:16,description:"A unique ID to identify the next chained segment (128 bits)."},3965867:{name:"PrevFilename",level:2,type:"8",minver:1,webm:!1,description:"An escaped filename corresponding to the previous segment."},3979555:{name:"PrevUID",level:2,type:"b",minver:1,webm:!1,bytesize:16,description:"A unique ID to identify the previous chained segment (128 bits)."},29604:{name:"SegmentUID",level:2,type:"b",minver:1,webm:!1,range:"not 0",bytesize:16,description:"A randomly generated unique ID to identify the current segment between many others (128 bits)."},357149030:{name:"Info",level:1,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contains miscellaneous general information and statistics on the file."},21420:{name:"SeekPosition",level:3,type:"u",mandatory:!0,minver:1,description:"The position of the element in the segment in octets (0 = first level 1 element).",position:"segment"},21419:{name:"SeekID",level:3,type:"b",mandatory:!0,minver:1,description:"The binary ID corresponding to the element name.",type2:"ebmlID"},19899:{name:"Seek",cppname:"SeekPoint",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contains a single seek entry to an EBML element."},290298740:{name:"SeekHead",cppname:"SeekHeader",level:1,type:"m",multiple:!0,minver:1,description:"Contains the position of other level 1 elements."},32379:{name:"SignatureElementList",level:2,type:"m",multiple:!0,webm:!1,i:"Cluster|Block|BlockAdditional",description:"A list consists of a number of consecutive elements that represent one case where data is used in signature. Ex: means that the BlockAdditional of all Blocks in all Clusters is used for encryption."},32347:{name:"SignatureElements",level:1,type:"m",webm:!1,description:"Contains elements that will be used to compute the signature."},32437:{name:"Signature",level:1,type:"b",webm:!1,description:"The signature of the data (until a new."},32421:{name:"SignaturePublicKey",level:1,type:"b",webm:!1,description:"The public key to use with the algorithm (in the case of a PKI-based signature)."},32410:{name:"SignatureHash",level:1,type:"u",webm:!1,description:"Hash algorithm used (1=SHA1-160, 2=MD5)."},32394:{name:"SignatureAlgo",level:1,type:"u",webm:!1,description:"Signature algorithm used (1=RSA, 2=elliptic)."},458458727:{name:"SignatureSlot",level:-1,type:"m",multiple:!0,webm:!1,description:"Contain signature of some (coming) elements in the stream."},191:{name:"CRC-32",level:-1,type:"b",minver:1,webm:!1,description:"The CRC is computed on all the data of the Master element it's in. The CRC element should be the first in it's parent master for easier reading. All level 1 elements should include a CRC-32. The CRC in use is the IEEE CRC32 Little Endian",crc:!0},236:{name:"Void",level:-1,type:"b",minver:1,description:"Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is discarded. Also used to reserve space in a sub-element for later use."},17139:{name:"EBMLMaxSizeLength",level:1,type:"u",mandatory:!0,default:8,minver:1,description:"The maximum length of the sizes you'll find in this file (8 or less in Matroska). This does not override the element size indicated at the beginning of an element. Elements that have an indicated size which is larger than what is allowed by EBMLMaxSizeLength shall be considered invalid."},17138:{name:"EBMLMaxIDLength",level:1,type:"u",mandatory:!0,default:4,minver:1,description:"The maximum length of the IDs you'll find in this file (4 or less in Matroska)."},17143:{name:"EBMLReadVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The minimum EBML version a parser has to support to read this file."},440786851:{name:"EBML",level:"0",type:"m",mandatory:!0,multiple:!0,minver:1,description:"Set the EBML characteristics of the data to follow. Each EBML document has to start with this."},21936:{name:"Colour",level:"4",type:"m",mandatory:!0,multiple:!0,description:"Settings describing the colour format."},21937:{name:"MatrixCoefficients",level:"5",type:"u",mandatory:!0,multiple:!0,description:"The Matrix Coefficients of the video used to derive luma and chroma values from red, green, and blue color primaries. For clarity, the value and meanings for MatrixCoefficients are adopted from Table 4 of ISO/IEC 23001-8:2016 or ITU-T H.273."},21945:{name:"Range",level:"5",type:"u",mandatory:!0,multiple:!0,description:"Clipping of the color ranges."},21946:{name:"TransferCharacteristics",level:"5",type:"u",mandatory:!0,multiple:!0,description:"The transfer characteristics of the video."},21947:{name:"Primaries",level:"5",type:"u",mandatory:!0,multiple:!0,description:"The colour primaries of the video. For clarity, the value and meanings for Primaries are adopted from Table 2 of ISO/IEC 23091-4 or ITU-T H.273."}}},1384:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.tools=t.Reader=t.Encoder=t.Decoder=void 0,i(n(4990),t);var o=n(2800);t.Decoder=o.default;var a=n(8031);t.Encoder=a.default;var s=n(1381);t.Reader=s.default;var l=n(3210);t.tools=l},190:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n8){var i=e.readHexString(t,n,n+r);throw new Error("Unrepresentable length: ".concat(r," ").concat(i))}if(n+r>t.length)return null;for(var o=t[n]&(1<<8-r)-1,a=1;a=Math.pow(2,8)&&t[n+7]>0)return{length:r,value:-1};o*=Math.pow(2,8),o+=t[n+a]}return{length:r,value:o}},e.writeVint=function(e){if(e<0||e>Math.pow(2,53))throw new Error("Unrepresentable value: ".concat(e));var t=1;for(t=1;t<=8&&!(e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.convertEBMLDateToJSDate=t.createFloatBuffer=t.createIntBuffer=t.createUIntBuffer=t.encodeValueToBuffer=t.concat=t.putRefinedMetaData=t.extractElement=t.removeElement=t.makeMetadataSeekable=t.createRIFFChunk=t.VP8BitStreamToRiffWebPBuffer=t.WebPBlockFilter=t.encodeTag=t.readBlock=t.ebmlBlock=t.writeVint=t.readVint=t.Buffer=void 0;var r=n(1166),i=n(8031),o=n(8764),a=n(190),s=n(1586);function l(e,n){var r=new t.Buffer(4);return r.writeUInt32LE(n.byteLength,0),d([new t.Buffer(e.substr(0,4),"ascii"),r,n,new t.Buffer(n.byteLength%2==0?0:1)])}function u(e,t){for(var n=-1,r=0;r=0?Array.prototype.splice.apply(e,[i+1,0].concat(n)):r?[].concat([{name:t,type:"m",isEnd:!1}],n,[{name:t,type:"m",isEnd:!0}]).reverse().forEach((function(t){e.unshift(t)})):(e.push({name:t,type:"m",isEnd:!1}),n.forEach((function(t){e.push(t)})),e.push({name:t,type:"m",isEnd:!0}))}function d(e){return t.Buffer.concat(e)}function m(e){for(var n=1;e>=Math.pow(2,8*n);n++);if(n>=7)return console.warn("7bit or more bigger uint not supported."),new r.Uint64BE(e).toBuffer();var i=new t.Buffer(n);return i.writeUIntBE(e,0,n),i}function y(e){for(var n=1;e>=Math.pow(2,8*n);n++);if(n>=7)return console.warn("7bit or more bigger uint not supported."),new r.Int64BE(e).toBuffer();var i=new t.Buffer(n);return i.writeIntBE(e,0,n),i}function g(e,n){var r;if(void 0===n&&(n=8),8===n)return(r=new t.Buffer(8)).writeDoubleBE(e,0),r;if(4===n)return(r=new t.Buffer(4)).writeFloatBE(e,0),r;throw new Error("float type bits must 4bytes or 8bytes")}t.Buffer=o.Buffer,t.readVint=a.default.readVint,t.writeVint=a.default.writeVint,t.ebmlBlock=s,t.readBlock=function(e){return(0,t.ebmlBlock)(new t.Buffer(e))},t.encodeTag=function(e,n,r){return void 0===r&&(r=!1),d([e,r?new t.Buffer("01ffffffffffffff","hex"):(0,t.writeVint)(n.length),n])},t.WebPBlockFilter=function(e){return e.reduce((function(e,n){return"b"!==n.type||"SimpleBlock"!==n.name?e:(0,t.ebmlBlock)(n.data).frames.some((function(e){return"9d012a"===e.slice(3,6).toString("hex")}))?e.concat(n):e}),[])},t.VP8BitStreamToRiffWebPBuffer=function(e){var n=l("VP8 ",e);return l("RIFF",d([new t.Buffer("WEBP","ascii"),n]))},t.createRIFFChunk=l,t.makeMetadataSeekable=function(e,n,r){var o=c("EBML",e),a=f(o)+12,s=e[e.length-1].dataEnd-a,l=c("Info",e);u("Duration",l),l.splice(1,0,{name:"Duration",type:"f",data:g(n,8)});for(var h=f(l),p=c("Tracks",e),d=f(p),y=47,v=[],b=5+15*r.length,w=[],k=-1,T=function(e){var n=y,i=n+h,o=i+d,l=o+b-s;if((v=[]).push({name:"SeekHead",type:"m",isEnd:!1}),v.push({name:"Seek",type:"m",isEnd:!1}),v.push({name:"SeekID",type:"b",data:new t.Buffer([21,73,169,102])}),v.push({name:"SeekPosition",type:"u",data:m(n)}),v.push({name:"Seek",type:"m",isEnd:!0}),v.push({name:"Seek",type:"m",isEnd:!1}),v.push({name:"SeekID",type:"b",data:new t.Buffer([22,84,174,107])}),v.push({name:"SeekPosition",type:"u",data:m(i)}),v.push({name:"Seek",type:"m",isEnd:!0}),v.push({name:"Seek",type:"m",isEnd:!1}),v.push({name:"SeekID",type:"b",data:new t.Buffer([28,83,187,107])}),v.push({name:"SeekPosition",type:"u",data:m(o)}),v.push({name:"Seek",type:"m",isEnd:!0}),v.push({name:"SeekHead",type:"m",isEnd:!0}),y=f(v),(w=[]).push({name:"Cues",type:"m",isEnd:!1}),r.forEach((function(e){var t=e.CueTrack,n=e.CueClusterPosition,r=e.CueTime;w.push({name:"CuePoint",type:"m",isEnd:!1}),w.push({name:"CueTime",type:"u",data:m(r)}),w.push({name:"CueTrackPositions",type:"m",isEnd:!1}),w.push({name:"CueTrack",type:"u",data:m(t)}),n-=a,n+=l,w.push({name:"CueClusterPosition",type:"u",data:m(n)}),w.push({name:"CueTrackPositions",type:"m",isEnd:!0}),w.push({name:"CuePoint",type:"m",isEnd:!0})})),w.push({name:"Cues",type:"m",isEnd:!0}),b=f(w),k===l)return"break";if(k=l,9===e)throw new Error("Failed to converge to a stable metadata size")},E=0;E<10;E++){if("break"===T(E))break}var C=[].concat.apply([],[o,{name:"Segment",type:"m",isEnd:!1,unknownSize:!0},v,l,p,w]);return(new i.default).encode(C)},t.removeElement=u,t.extractElement=c,t.putRefinedMetaData=function(e,n){Array.isArray(n.cueInfos)&&!Array.isArray(n.cues)&&(console.warn("putRefinedMetaData: info.cueInfos property is deprecated. please use info.cues"),n.cues=n.cueInfos);for(var r=[],o=[],a=0;a0))throw new Error("metadata dataEnd has wrong number");var l,u=o[o.length-1].dataEnd,c=r[r.length-1].dataEnd,f=(new i.default).encode(r).byteLength-c,p=u-o[0].tagStart,d=(o[0].tagStart,o[0].tagStart,new t.Buffer([24,83,128,103])),m=new t.Buffer("01ffffffffffffff","hex"),y=d.byteLength+m.byteLength,g=p;for(l=1;l<20;l++){var v=h(o,f+(c+y+g-u),n),b=(new i.default).encode(v).byteLength;if(b===g)return(new i.default).encode([].concat(r,[{type:"m",name:"Segment",isEnd:!1,unknownSize:!0}],v));g=b}throw new Error("unable to refine metadata, stable size could not be found in "+l+" iterations!")},t.concat=d,t.encodeValueToBuffer=function(e){var n=new t.Buffer(0);if("m"===e.type)return e;switch(e.type){case"u":n=m(e.value);break;case"i":n=y(e.value);break;case"f":n=g(e.value);break;case"s":n=new t.Buffer(e.value,"ascii");break;case"8":n=new t.Buffer(e.value,"utf8");break;case"b":n=e.value;break;case"d":n=new r.Int64BE(e.value.getTime().toString()).toBuffer()}return Object.assign({},e,{data:n})},t.createUIntBuffer=m,t.createIntBuffer=y,t.createFloatBuffer=g,t.convertEBMLDateToJSDate=function(e){return e instanceof Date?e:new Date(new Date("2001-01-01T00:00:00.000Z").getTime()+Number(e)/1e3/1e3)}},8246:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(e){o(e)}}function s(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]{"use strict";t.byteLength=function(e){var t=s(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,o=s(e),a=o[0],l=o[1],u=new i(function(e,t,n){return 3*(t+n)/4-n}(0,a,l)),c=0,f=l>0?a-4:a;for(n=0;n>16&255,u[c++]=t>>8&255,u[c++]=255&t;2===l&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,u[c++]=255&t);1===l&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t);return u},t.fromByteArray=function(e){for(var t,r=e.length,i=r%3,o=[],a=16383,s=0,u=r-i;su?u:s+a));1===i?(t=e[r-1],o.push(n[t>>2]+n[t<<4&63]+"==")):2===i&&(t=(e[r-2]<<8)+e[r-1],o.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return o.join("")};for(var n=[],r=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)n[a]=o[a],r[o.charCodeAt(a)]=a;function s(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,r){for(var i,o,a=[],s=t;s>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},8764:(e,t,n)=>{"use strict";const r=n(9742),i=n(645),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=l,t.SlowBuffer=function(e){+e!=e&&(e=0);return l.alloc(+e)},t.INSPECT_MAX_BYTES=50;const a=2147483647;function s(e){if(e>a)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return f(e)}return u(e,t,n)}function u(e,t,n){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const n=0|m(e,t);let r=s(n);const i=r.write(e,t);i!==n&&(r=r.slice(0,i));return r}(e,t);if(ArrayBuffer.isView(e))return function(e){if(Y(e,Uint8Array)){const t=new Uint8Array(e);return p(t.buffer,t.byteOffset,t.byteLength)}return h(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Y(e,ArrayBuffer)||e&&Y(e.buffer,ArrayBuffer))return p(e,t,n);if("undefined"!=typeof SharedArrayBuffer&&(Y(e,SharedArrayBuffer)||e&&Y(e.buffer,SharedArrayBuffer)))return p(e,t,n);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return l.from(r,t,n);const i=function(e){if(l.isBuffer(e)){const t=0|d(e.length),n=s(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return"number"!=typeof e.length||J(e.length)?s(0):h(e);if("Buffer"===e.type&&Array.isArray(e.data))return h(e.data)}(e);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function c(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function f(e){return c(e),s(e<0?0:0|d(e))}function h(e){const t=e.length<0?0:0|d(e.length),n=s(t);for(let r=0;r=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Y(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;let i=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return W(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return G(e).length;default:if(i)return r?-1:W(e).length;t=(""+t).toLowerCase(),i=!0}}function y(e,t,n){let r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return _(this,t,n);case"utf8":case"utf-8":return B(this,t,n);case"ascii":return A(this,t,n);case"latin1":case"binary":return D(this,t,n);case"base64":return S(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function g(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),J(n=+n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,i){let o,a=1,s=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,l/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){let r=-1;for(o=n;os&&(n=s-l),o=n;o>=0;o--){let n=!0;for(let r=0;ri&&(r=i):r=i;const o=t.length;let a;for(r>o/2&&(r=o/2),a=0;a>8,i=n%256,o.push(i),o.push(r);return o}(t,e.length-n),e,n,r)}function S(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function B(e,t,n){n=Math.min(e.length,n);const r=[];let i=t;for(;i239?4:t>223?3:t>191?2:1;if(i+a<=n){let n,r,s,l;switch(a){case 1:t<128&&(o=t);break;case 2:n=e[i+1],128==(192&n)&&(l=(31&t)<<6|63&n,l>127&&(o=l));break;case 3:n=e[i+1],r=e[i+2],128==(192&n)&&128==(192&r)&&(l=(15&t)<<12|(63&n)<<6|63&r,l>2047&&(l<55296||l>57343)&&(o=l));break;case 4:n=e[i+1],r=e[i+2],s=e[i+3],128==(192&n)&&128==(192&r)&&128==(192&s)&&(l=(15&t)<<18|(63&n)<<12|(63&r)<<6|63&s,l>65535&&l<1114112&&(o=l))}}null===o?(o=65533,a=1):o>65535&&(o-=65536,r.push(o>>>10&1023|55296),o=56320|1023&o),r.push(o),i+=a}return function(e){const t=e.length;if(t<=I)return String.fromCharCode.apply(String,e);let n="",r=0;for(;rr.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(r,i)):Uint8Array.prototype.set.call(r,t,i);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(r,i)}i+=t.length}return r},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tn&&(e+=" ... "),""},o&&(l.prototype[o]=l.prototype.inspect),l.prototype.compare=function(e,t,n,r,i){if(Y(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(this===e)return 0;let o=(i>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0);const s=Math.min(o,a),u=this.slice(r,i),c=e.slice(t,n);for(let e=0;e>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}const i=this.length-t;if((void 0===n||n>i)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");let o=!1;for(;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return k(this,e,t,n);case"ascii":case"latin1":case"binary":return T(this,e,t,n);case"base64":return E(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const I=4096;function A(e,t,n){let r="";n=Math.min(e.length,n);for(let i=t;ir)&&(n=r);let i="";for(let r=t;rn)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,i,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function U(e,t,n,r,i){j(t,r,i,e,n,7);let o=Number(t&BigInt(4294967295));e[n++]=o,o>>=8,e[n++]=o,o>>=8,e[n++]=o,o>>=8,e[n++]=o;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a,n}function O(e,t,n,r,i){j(t,r,i,e,n,7);let o=Number(t&BigInt(4294967295));e[n+7]=o,o>>=8,e[n+6]=o,o>>=8,e[n+5]=o,o>>=8,e[n+4]=o;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[n+3]=a,a>>=8,e[n+2]=a,a>>=8,e[n+1]=a,a>>=8,e[n]=a,n+8}function M(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function R(e,t,n,r,o){return t=+t,n>>>=0,o||M(e,0,n,4),i.write(e,t,n,r,23,4),n+4}function N(e,t,n,r,o){return t=+t,n>>>=0,o||M(e,0,n,8),i.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){const n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e],i=1,o=0;for(;++o>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e+--t],i=1;for(;t>0&&(i*=256);)r+=this[e+--t]*i;return r},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||P(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||P(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||P(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||P(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||P(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=Z((function(e){H(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||q(e,this.length-8);const r=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,i=this[++e]+256*this[++e]+65536*this[++e]+n*2**24;return BigInt(r)+(BigInt(i)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||q(e,this.length-8);const r=t*2**24+65536*this[++e]+256*this[++e]+this[++e],i=this[++e]*2**24+65536*this[++e]+256*this[++e]+n;return(BigInt(r)<>>=0,t>>>=0,n||P(e,t,this.length);let r=this[e],i=1,o=0;for(;++o=i&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||P(e,t,this.length);let r=t,i=1,o=this[e+--r];for(;r>0&&(i*=256);)o+=this[e+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o},l.prototype.readInt8=function(e,t){return e>>>=0,t||P(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||P(e,2,this.length);const n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||P(e,2,this.length);const n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||P(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||P(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=Z((function(e){H(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||q(e,this.length-8);const r=this[e+4]+256*this[e+5]+65536*this[e+6]+(n<<24);return(BigInt(r)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||q(e,this.length-8);const r=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<>>=0,t||P(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||P(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||P(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||P(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){L(this,e,t,n,Math.pow(2,8*n)-1,0)}let i=1,o=0;for(this[t]=255&e;++o>>=0,n>>>=0,!r){L(this,e,t,n,Math.pow(2,8*n)-1,0)}let i=n-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=Z((function(e,t=0){return U(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=Z((function(e,t=0){return O(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);L(this,e,t,n,r-1,-r)}let i=0,o=1,a=0;for(this[t]=255&e;++i>0)-a&255;return t+n},l.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);L(this,e,t,n,r-1,-r)}let i=n-1,o=1,a=0;for(this[t+i]=255&e;--i>=0&&(o*=256);)e<0&&0===a&&0!==this[t+i+1]&&(a=1),this[t+i]=(e/o>>0)-a&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=Z((function(e,t=0){return U(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=Z((function(e,t=0){return O(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,n){return R(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return R(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return N(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return N(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i=r+4;n-=3)t=`_${e.slice(n-3,n)}${t}`;return`${e.slice(0,n)}${t}`}function j(e,t,n,r,i,o){if(e>n||e3?0===t||t===BigInt(0)?`>= 0${r} and < 2${r} ** ${8*(o+1)}${r}`:`>= -(2${r} ** ${8*(o+1)-1}${r}) and < 2 ** ${8*(o+1)-1}${r}`:`>= ${t}${r} and <= ${n}${r}`,new F.ERR_OUT_OF_RANGE("value",i,e)}!function(e,t,n){H(t,"offset"),void 0!==e[t]&&void 0!==e[t+n]||q(t,e.length-(n+1))}(r,i,o)}function H(e,t){if("number"!=typeof e)throw new F.ERR_INVALID_ARG_TYPE(t,"number",e)}function q(e,t,n){if(Math.floor(e)!==e)throw H(e,n),new F.ERR_OUT_OF_RANGE(n||"offset","an integer",e);if(t<0)throw new F.ERR_BUFFER_OUT_OF_BOUNDS;throw new F.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${t}`,e)}V("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),V("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),V("ERR_OUT_OF_RANGE",(function(e,t,n){let r=`The value of "${e}" is out of range.`,i=n;return Number.isInteger(n)&&Math.abs(n)>2**32?i=z(String(n)):"bigint"==typeof n&&(i=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(i=z(i)),i+="n"),r+=` It must be ${t}. Received ${i}`,r}),RangeError);const $=/[^+/0-9A-Za-z-_]/g;function W(e,t){let n;t=t||1/0;const r=e.length;let i=null;const o=[];for(let a=0;a55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function G(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace($,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function X(e,t,n,r){let i;for(i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}function Y(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function J(e){return e!=e}const K=function(){const e="0123456789abcdef",t=new Array(256);for(let n=0;n<16;++n){const r=16*n;for(let i=0;i<16;++i)t[r+i]=e[n]+e[i]}return t}();function Z(e){return"undefined"==typeof BigInt?Q:e}function Q(){throw new Error("BigInt not supported")}},1586:(e,t,n)=>{var r=n(1721);e.exports=function(e){var t={},n=new r(e);t.trackNumber=n.nextUIntV(),t.timecode=n.nextInt16BE();var i=n.nextUInt8();t.invisible=!!(8&i),t.keyframe=!!(128&i),t.discardable=!!(1&i);var o=(6&i)>>1;return t.frames=function(e,t){if(!t)return[e.nextBuffer()];var n,r,i=[],o=e.nextUInt8()+1;if(2===t){if(e.length%o!=0)throw new Error("Fixed-Size Lacing Error");for(r=e.length/o,n=0;n{var r=n(8826);function i(e){this.buffer=e,this.offset=0}i.prototype.nextInt16BE=function(){var e=this.buffer.readInt16BE(this.offset);return this.offset+=2,e},i.prototype.nextUInt8=function(){var e=this.buffer.readUInt8(this.offset);return this.offset+=1,e},i.prototype.nextUIntV=function(){var e=r(this.buffer,this.offset);return this.offset+=e.length,e.value},i.prototype.nextIntV=function(){var e=r(this.buffer,this.offset,!0);return this.offset+=e.length,e.value},i.prototype.nextBuffer=function(e){var t=e?this.buffer.slice(this.offset,this.offset+e):this.buffer.slice(this.offset);return this.offset+=e||this.length,t},Object.defineProperty(i.prototype,"length",{get:function(){return this.buffer.length-this.offset}}),e.exports=i},8826:e=>{e.exports=function(e,t,n){t=t||0;for(var r=1;r<=8&&!(e[t]>=Math.pow(2,8-r));r++);if(r>8)throw new Error("Unrepresentable length: "+r+" "+e.toString("hex",t,t+r));if(t+r>e.length)return null;var i,o=e[t]&(1<<8-r)-1;for(i=1;i=Math.pow(2,45)&&e[t+7]>0)return{length:r,value:-1};o*=Math.pow(2,8),o+=e[t+i]}return n&&(o-=Math.pow(2,7*r-1)-1),{length:r,value:o}}},7187:e=>{"use strict";var t,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var i=Number.isNaN||function(e){return e!=e};function o(){o.init.call(this)}e.exports=o,e.exports.once=function(e,t){return new Promise((function(n,r){function i(n){e.removeListener(t,o),r(n)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",i),n([].slice.call(arguments))}m(e,t,o,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,i,{once:!0})}))},o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var a=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?o.defaultMaxListeners:e._maxListeners}function u(e,t,n,r){var i,o,a,u;if(s(n),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),a=o[t]),void 0===a)a=o[t]=n,++e._eventsCount;else if("function"==typeof a?a=o[t]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(i=l(e))>0&&a.length>i&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,u=c,console&&console.warn&&console.warn(u)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=c.bind(r);return i.listener=n,r.wrapFn=i,i}function h(e,t,n){var r=e._events;if(void 0===r)return[];var i=r[t];return void 0===i?[]:"function"==typeof i?n?[i.listener||i]:[i]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var l=o[e];if(void 0===l)return!1;if("function"==typeof l)r(l,this,t);else{var u=l.length,c=d(l,u);for(n=0;n=0;o--)if(n[o]===t||n[o].listener===t){a=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},o.prototype.listeners=function(e){return h(this,e,!0)},o.prototype.rawListeners=function(e){return h(this,e,!1)},o.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},o.prototype.listenerCount=p,o.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},645:(e,t)=>{t.read=function(e,t,n,r,i){var o,a,s=8*i-r-1,l=(1<>1,c=-7,f=n?i-1:0,h=n?-1:1,p=e[t+f];for(f+=h,o=p&(1<<-c)-1,p>>=-c,c+=s;c>0;o=256*o+e[t+f],f+=h,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=r;c>0;a=256*a+e[t+f],f+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),o-=u}return(p?-1:1)*a*Math.pow(2,o-r)},t.write=function(e,t,n,r,i,o){var a,s,l,u=8*o-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:o-1,d=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),(t+=a+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(a++,l/=2),a+f>=c?(s=0,a=c):a+f>=1?(s=(t*l-1)*Math.pow(2,i),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;e[n+p]=255&s,p+=d,s/=256,i-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*m}},1166:function(e,t){!function(e){var t,n="undefined",r=n!==typeof Buffer&&Buffer,i=n!==typeof Uint8Array&&Uint8Array,o=n!==typeof ArrayBuffer&&ArrayBuffer,a=[0,0,0,0,0,0,0,0],s=Array.isArray||function(e){return!!e&&"[object Array]"==Object.prototype.toString.call(e)},l=4294967296;function u(s,u,w){var k=u?0:4,T=u?4:0,E=u?0:3,C=u?1:2,S=u?2:1,B=u?3:0,I=u?y:v,A=u?g:b,D=P.prototype,_="is"+s,x="_"+_;return D.buffer=void 0,D.offset=0,D[x]=!0,D.toNumber=L,D.toString=function(e){var t=this.buffer,n=this.offset,r=O(t,n+k),i=O(t,n+T),o="",a=!w&&2147483648&r;a&&(r=~r,i=l-i);e=e||10;for(;;){var s=r%e*l+i;if(r=Math.floor(r/e),i=Math.floor(s/e),o=(s%e).toString(e)+o,!r&&!i)break}a&&(o="-"+o);return o},D.toJSON=L,D.toArray=c,r&&(D.toBuffer=f),i&&(D.toArrayBuffer=h),P[_]=function(e){return!(!e||!e[x])},e[s]=P,P;function P(e,s,u,c){return this instanceof P?function(e,s,u,c,f){i&&o&&(s instanceof o&&(s=new i(s)),c instanceof o&&(c=new i(c)));if(!(s||u||c||t))return void(e.buffer=m(a,0));if(!p(s,u)){var h=t||Array;f=u,c=s,u=0,s=t===r?r.alloc(8):new h(8)}if(e.buffer=s,e.offset=u|=0,n===typeof c)return;"string"==typeof c?function(e,t,n,r){var i=0,o=n.length,a=0,s=0;"-"===n[0]&&i++;var u=i;for(;i=0))break;s=s*r+c,a=a*r+Math.floor(s/l),s%=l}u&&(a=~a,s?s=l-s:a++);U(e,t+k,a),U(e,t+T,s)}(s,u,c,f||10):p(c,f)?d(s,u,c,f):"number"==typeof f?(U(s,u+k,c),U(s,u+T,f)):c>0?I(s,u,c):c<0?A(s,u,c):d(s,u,a,0)}(this,e,s,u,c):new P(e,s,u,c)}function L(){var e=this.buffer,t=this.offset,n=O(e,t+k),r=O(e,t+T);return w||(n|=0),n?n*l+r:r}function U(e,t,n){e[t+B]=255&n,n>>=8,e[t+S]=255&n,n>>=8,e[t+C]=255&n,n>>=8,e[t+E]=255&n}function O(e,t){return 16777216*e[t+E]+(e[t+C]<<16)+(e[t+S]<<8)+e[t+B]}}function c(e){var n=this.buffer,r=this.offset;return t=null,!1!==e&&s(n)?8===n.length?n:n.slice(r,r+8):m(n,r)}function f(e){var n=this.buffer,i=this.offset;return t=r,!1!==e&&r.isBuffer(n)?8===n.length?n:n.slice(i,i+8):r.from(h.call(this,e))}function h(e){var n=this.buffer,r=this.offset,a=n.buffer;if(t=i,!1!==e&&!n.offset&&a instanceof o)return 8===a.byteLength?a:a.slice(r,r+8);var s=new i(8);return d(s,0,n,r),s.buffer}function p(e,t){var n=e&&e.length;return t|=0,n&&t+8<=n&&"string"!=typeof e[t]}function d(e,t,n,r){t|=0,r|=0;for(var i=0;i<8;i++)e[t++]=255&n[r++]}function m(e,t){return Array.prototype.slice.call(e,t,t+8)}function y(e,t,n){for(var r=t+8;r>t;)e[--r]=255&n,n/=256}function g(e,t,n){var r=t+8;for(n++;r>t;)e[--r]=255&-n^255,n/=256}function v(e,t,n){for(var r=t+8;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},2800:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=n(1166),o=n(3210),a=n(3210),s=n(4370);!function(e){e[e.STATE_TAG=1]="STATE_TAG",e[e.STATE_SIZE=2]="STATE_SIZE",e[e.STATE_CONTENT=3]="STATE_CONTENT"}(r||(r={}));var l=function(){function e(){this._buffer=new o.Buffer(0),this._tag_stack=[],this._state=r.STATE_TAG,this._cursor=0,this._total=0,this._schema=s.byEbmlID,this._result=[]}return e.prototype.decode=function(e){this.readChunk(e);var t=this._result;return this._result=[],t},e.prototype.readChunk=function(e){for(this._buffer=a.concat([this._buffer,new o.Buffer(e)]);this._cursor=this._buffer.length)return!1;var e=(0,o.readVint)(this._buffer,this._cursor);if(null==e)return!1;var t=this._buffer.slice(this._cursor,this._cursor+e.length).reduce((function(e,t,n,r){return e+t*Math.pow(16,2*(r.length-1-n))}),0),n=this.getSchemaInfo(t),i={EBML_ID:t.toString(16),schema:n,type:n.type,name:n.name,level:n.level,tagStart:this._total,tagEnd:this._total+e.length,sizeStart:this._total+e.length,sizeEnd:null,dataStart:null,dataEnd:null,dataSize:null,data:null};return this._tag_stack.push(i),this._cursor+=e.length,this._total+=e.length,this._state=r.STATE_SIZE,!0},e.prototype.readSize=function(){if(this._cursor>=this._buffer.length)return!1;var e=(0,o.readVint)(this._buffer,this._cursor);if(null==e)return!1;var t=this._tag_stack[this._tag_stack.length-1];return t.sizeEnd=t.sizeStart+e.length,t.dataStart=t.sizeEnd,t.dataSize=e.value,-1===e.value?(t.dataEnd=-1,"m"===t.type&&(t.unknownSize=!0)):t.dataEnd=t.sizeEnd+e.value,this._cursor+=e.length,this._total+=e.length,this._state=r.STATE_CONTENT,!0},e.prototype.readContent=function(){var e=this._tag_stack[this._tag_stack.length-1];if("m"===e.type){if(e.isEnd=!1,this._result.push(e),this._state=r.STATE_TAG,0===e.dataSize){var t=Object.assign({},e,{isEnd:!0});this._result.push(t),this._tag_stack.pop()}return!0}if(this._buffer.length0;){var a=this._tag_stack[this._tag_stack.length-1];if(a.dataEnd<0)return this._tag_stack.pop(),!0;if(this._total{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(3210),i=n(3210),o=n(4370),a=function(){function e(){this._schema=o.byEbmlID,this._buffers=[],this._stack=[]}return e.prototype.encode=function(e){var t=this;return r.concat(e.reduce((function(e,n){return e.concat(t.encodeChunk(n))}),[])).buffer},e.prototype.encodeChunk=function(e){return"m"===e.type?e.isEnd?this.endTag(e):this.startTag(e):(e.data=i.Buffer.from(e.data),this.writeTag(e)),this.flush()},e.prototype.flush=function(){var e=this._buffers;return this._buffers=[],e},e.prototype.getSchemaInfo=function(e){for(var t=Object.keys(this._schema).map(Number),n=0;n0?this._stack[this._stack.length-1].children.push({tagId:n,elm:e,children:[],data:o}):this._buffers=this._buffers.concat(o)},e.prototype.startTag=function(e){var t=e.name,n=this.getSchemaInfo(t);if(null==n)throw new Error("No schema entry found for "+t);if(e.unknownSize){var o=r.encodeTag(n,new i.Buffer(0),e.unknownSize);this._buffers=this._buffers.concat(o)}else{var a={tagId:n,elm:e,children:[],data:null};this._stack.length>0&&this._stack[this._stack.length-1].children.push(a),this._stack.push(a)}},e.prototype.endTag=function(e){e.name;var t=this._stack.pop();if(null==t)throw new Error("EBML structure is broken");if(t.elm.name!==e.name)throw new Error("EBML structure is broken");var n=t.children.reduce((function(e,t){if(null===t.data)throw new Error("EBML structure is broken");return e.concat(t.data)}),[]),i=r.concat(n);"m"===t.elm.type?t.data=r.encodeTag(t.tagId,i,t.elm.unknownSize):t.data=r.encodeTag(t.tagId,i),this._stack.length<1&&(this._buffers=this._buffers.concat(t.data))},e}();t.default=a},1381:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(7187),a=n(3210),s=function(e){function t(){var t=e.call(this)||this;return t.logGroup="",t.hasLoggingStarted=!1,t.metadataloaded=!1,t.chunks=[],t.stack=[],t.segmentOffset=0,t.last2SimpleBlockVideoTrackTimecode=[0,0],t.last2SimpleBlockAudioTrackTimecode=[0,0],t.lastClusterTimecode=0,t.lastClusterPosition=0,t.timecodeScale=1e6,t.metadataSize=0,t.metadatas=[],t.cues=[],t.firstVideoBlockRead=!1,t.firstAudioBlockRead=!1,t.currentTrack={TrackNumber:-1,TrackType:-1,DefaultDuration:null,CodecDelay:null},t.trackTypes=[],t.trackDefaultDuration=[],t.trackCodecDelay=[],t.trackInfo={type:"nothing"},t.ended=!1,t.logging=!1,t.use_duration_every_simpleblock=!1,t.use_webp=!1,t.use_segment_info=!0,t.drop_default_duration=!0,t}return i(t,e),t.prototype.stop=function(){for(this.ended=!0,this.emit_segment_info();this.stack.length;)this.stack.pop(),this.logging&&console.groupEnd();this.logging&&this.hasLoggingStarted&&this.logGroup&&console.groupEnd()},t.prototype.emit_segment_info=function(){var e=this.chunks;if(this.chunks=[],this.metadataloaded){if(!this.use_segment_info)return;var t=this.lastClusterTimecode,n=this.duration,r=this.timecodeScale;this.emit("cluster",{timecode:t,data:e}),this.emit("duration",{timecodeScale:r,duration:n})}else{this.metadataloaded=!0,this.metadatas=e;var i=this.trackTypes.indexOf(1),o=this.trackTypes.indexOf(2);if(this.trackInfo=i>=0&&o>=0?{type:"both",trackNumber:i}:i>=0?{type:"video",trackNumber:i}:o>=0?{type:"audio",trackNumber:o}:{type:"nothing"},!this.use_segment_info)return;this.emit("metadata",{data:e,metadataSize:this.metadataSize})}},t.prototype.read=function(e){var t=this,n=!1;if(!this.ended){if("m"===e.type)if(e.isEnd)this.stack.pop();else{var r=this.stack[this.stack.length-1];if(null!=r&&r.level>=e.level){this.stack.pop(),this.logging&&console.groupEnd(),r.dataEnd=e.dataEnd,r.dataSize=e.dataEnd-r.dataStart,r.unknownSize=!1;var i=Object.assign({},r,{name:r.name,type:r.type,isEnd:!0});this.chunks.push(i)}this.stack.push(e)}if("m"===e.type&&"Segment"==e.name)0!=this.segmentOffset&&console.warn("Multiple segments detected!"),this.segmentOffset=e.dataStart,this.emit("segment_offset",this.segmentOffset);else if("b"===e.type&&"SimpleBlock"===e.name){var o=a.ebmlBlock(e.data),s=o.timecode,l=o.trackNumber,u=o.frames;if(1===this.trackTypes[l]){if(!this.firstVideoBlockRead&&(this.firstVideoBlockRead=!0,"both"===this.trackInfo.type||"video"===this.trackInfo.type)){var c=this.lastClusterTimecode+s;this.cues.push({CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:c}),this.emit("cue_info",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:this.lastClusterTimecode}),this.emit("cue",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:c})}this.last2SimpleBlockVideoTrackTimecode=[this.last2SimpleBlockVideoTrackTimecode[1],s]}else if(2===this.trackTypes[l]){if(!this.firstAudioBlockRead&&(this.firstAudioBlockRead=!0,"audio"===this.trackInfo.type)){c=this.lastClusterTimecode+s;this.cues.push({CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:c}),this.emit("cue_info",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:this.lastClusterTimecode}),this.emit("cue",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:c})}this.last2SimpleBlockAudioTrackTimecode=[this.last2SimpleBlockAudioTrackTimecode[1],s]}this.use_duration_every_simpleblock&&this.emit("duration",{timecodeScale:this.timecodeScale,duration:this.duration}),this.use_webp&&u.forEach((function(e){if("9d012a"===e.slice(3,6).toString("hex")){var n=a.VP8BitStreamToRiffWebPBuffer(e),r=new Blob([n],{type:"image/webp"}),i=t.duration;t.emit("webp",{currentTime:i,webp:r})}}))}else"m"===e.type&&"Cluster"===e.name&&!1===e.isEnd?(this.firstVideoBlockRead=!1,this.firstAudioBlockRead=!1,this.emit_segment_info(),this.emit("cluster_ptr",e.tagStart),this.lastClusterPosition=e.tagStart):"u"===e.type&&"Timecode"===e.name?this.lastClusterTimecode=e.value:"u"===e.type&&"TimecodeScale"===e.name?this.timecodeScale=e.value:"m"===e.type&&"TrackEntry"===e.name?e.isEnd?(this.trackTypes[this.currentTrack.TrackNumber]=this.currentTrack.TrackType,this.trackDefaultDuration[this.currentTrack.TrackNumber]=this.currentTrack.DefaultDuration,this.trackCodecDelay[this.currentTrack.TrackNumber]=this.currentTrack.CodecDelay):this.currentTrack={TrackNumber:-1,TrackType:-1,DefaultDuration:null,CodecDelay:null}:"u"===e.type&&"TrackType"===e.name?this.currentTrack.TrackType=e.value:"u"===e.type&&"TrackNumber"===e.name?this.currentTrack.TrackNumber=e.value:"u"===e.type&&"CodecDelay"===e.name?this.currentTrack.CodecDelay=e.value:"u"===e.type&&"DefaultDuration"===e.name?this.drop_default_duration?(console.warn("DefaultDuration detected!, remove it"),n=!0):this.currentTrack.DefaultDuration=e.value:"unknown"===e.name&&console.warn(e);!this.metadataloaded&&e.dataEnd>0&&(this.metadataSize=e.dataEnd),n||this.chunks.push(e),this.logging&&this.put(e)}},Object.defineProperty(t.prototype,"duration",{get:function(){if("nothing"===this.trackInfo.type)return console.warn("no video, no audio track"),0;var e=0,t=0,n=0,r=this.trackDefaultDuration[this.trackInfo.trackNumber];if("number"==typeof r)e=r;else if("both"===this.trackInfo.type)this.last2SimpleBlockAudioTrackTimecode[1]>this.last2SimpleBlockVideoTrackTimecode[1]?(e=(this.last2SimpleBlockAudioTrackTimecode[1]-this.last2SimpleBlockAudioTrackTimecode[0])*this.timecodeScale,"number"==typeof(i=this.trackCodecDelay[this.trackTypes.indexOf(2)])&&(t=i),n=this.last2SimpleBlockAudioTrackTimecode[1]):(e=(this.last2SimpleBlockVideoTrackTimecode[1]-this.last2SimpleBlockVideoTrackTimecode[0])*this.timecodeScale,"number"==typeof(i=this.trackCodecDelay[this.trackTypes.indexOf(1)])&&(t=i),n=this.last2SimpleBlockVideoTrackTimecode[1]);else if("video"===this.trackInfo.type){e=(this.last2SimpleBlockVideoTrackTimecode[1]-this.last2SimpleBlockVideoTrackTimecode[0])*this.timecodeScale,"number"==typeof(i=this.trackCodecDelay[this.trackInfo.trackNumber])&&(t=i),n=this.last2SimpleBlockVideoTrackTimecode[1]}else if("audio"===this.trackInfo.type){var i;e=(this.last2SimpleBlockAudioTrackTimecode[1]-this.last2SimpleBlockAudioTrackTimecode[0])*this.timecodeScale,"number"==typeof(i=this.trackCodecDelay[this.trackInfo.trackNumber])&&(t=i),n=this.last2SimpleBlockAudioTrackTimecode[1]}var o=((this.lastClusterTimecode+n)*this.timecodeScale+e-t)/this.timecodeScale;return Math.floor(o)},enumerable:!1,configurable:!0}),t.prototype.addListener=function(t,n){return e.prototype.addListener.call(this,t,n)},t.prototype.put=function(e){this.hasLoggingStarted||(this.hasLoggingStarted=!0,this.logging&&this.logGroup&&console.groupCollapsed(this.logGroup)),"m"===e.type?e.isEnd?console.groupEnd():console.group(e.name+":"+e.tagStart):"b"===e.type?console.log(e.name,e.type):console.log(e.name,e.tagStart,e.type,e.value)},t}(o.EventEmitter);t.default=s},4370:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.byEbmlID=void 0,t.byEbmlID={128:{name:"ChapterDisplay",level:4,type:"m",multiple:!0,minver:1,webm:!0,description:"Contains all possible strings to use for the chapter display."},131:{name:"TrackType",level:3,type:"u",mandatory:!0,minver:1,range:"1-254",description:"A set of track types coded on 8 bits (1: video, 2: audio, 3: complex, 0x10: logo, 0x11: subtitle, 0x12: buttons, 0x20: control)."},133:{name:"ChapString",cppname:"ChapterString",level:5,type:"8",mandatory:!0,minver:1,webm:!0,description:"Contains the string to use as the chapter atom."},134:{name:"CodecID",level:3,type:"s",mandatory:!0,minver:1,description:"An ID corresponding to the codec, see the codec page for more info."},136:{name:"FlagDefault",cppname:"TrackFlagDefault",level:3,type:"u",mandatory:!0,minver:1,default:1,range:"0-1",description:"Set if that track (audio, video or subs) SHOULD be active if no language found matches the user preference. (1 bit)"},137:{name:"ChapterTrackNumber",level:5,type:"u",mandatory:!0,multiple:!0,minver:1,webm:!1,range:"not 0",description:"UID of the Track to apply this chapter too. In the absense of a control track, choosing this chapter will select the listed Tracks and deselect unlisted tracks. Absense of this element indicates that the Chapter should be applied to any currently used Tracks."},145:{name:"ChapterTimeStart",level:4,type:"u",mandatory:!0,minver:1,webm:!0,description:"Timestamp of the start of Chapter (not scaled)."},146:{name:"ChapterTimeEnd",level:4,type:"u",minver:1,webm:!1,description:"Timestamp of the end of Chapter (timestamp excluded, not scaled)."},150:{name:"CueRefTime",level:5,type:"u",mandatory:!0,minver:2,webm:!1,description:"Timestamp of the referenced Block."},151:{name:"CueRefCluster",level:5,type:"u",mandatory:!0,webm:!1,description:"The Position of the Cluster containing the referenced Block."},152:{name:"ChapterFlagHidden",level:4,type:"u",mandatory:!0,minver:1,webm:!1,default:0,range:"0-1",description:"If a chapter is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)"},16980:{name:"ContentCompAlgo",level:6,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"The compression algorithm used. Algorithms that have been specified so far are: 0 - zlib, 3 - Header Stripping"},16981:{name:"ContentCompSettings",level:6,type:"b",minver:1,webm:!1,description:"Settings that might be needed by the decompressor. For Header Stripping (ContentCompAlgo=3), the bytes that were removed from the beggining of each frames of the track."},17026:{name:"DocType",level:1,type:"s",mandatory:!0,default:"matroska",minver:1,description:"A string that describes the type of document that follows this EBML header. 'matroska' in our case or 'webm' for webm files."},17029:{name:"DocTypeReadVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The minimum DocType version an interpreter has to support to read this file."},17030:{name:"EBMLVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The version of EBML parser used to create the file."},17031:{name:"DocTypeVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The version of DocType interpreter used to create the file."},17476:{name:"SegmentFamily",level:2,type:"b",multiple:!0,minver:1,webm:!1,bytesize:16,description:"A randomly generated unique ID that all segments related to each other must use (128 bits)."},17505:{name:"DateUTC",level:2,type:"d",minver:1,description:"Date of the origin of timestamp (value 0), i.e. production date."},17540:{name:"TagDefault",level:4,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"0-1",description:"Indication to know if this is the default/original language to use for the given tag. (1 bit)"},17541:{name:"TagBinary",level:4,type:"b",minver:1,webm:!1,description:"The values of the Tag if it is binary. Note that this cannot be used in the same SimpleTag as TagString."},17543:{name:"TagString",level:4,type:"8",minver:1,webm:!1,description:"The value of the Element."},17545:{name:"Duration",level:2,type:"f",minver:1,range:"> 0",description:"Duration of the segment (based on TimecodeScale)."},17816:{name:"ChapterFlagEnabled",level:4,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"0-1",description:"Specify wether the chapter is enabled. It can be enabled/disabled by a Control Track. When disabled, the movie should skip all the content between the TimeStart and TimeEnd of this chapter (see flag notes). (1 bit)"},18016:{name:"FileMimeType",level:3,type:"s",mandatory:!0,minver:1,webm:!1,description:"MIME type of the file."},18017:{name:"FileUsedStartTime",level:3,type:"u",divx:!0,description:"DivX font extension"},18018:{name:"FileUsedEndTime",level:3,type:"u",divx:!0,description:"DivX font extension"},18037:{name:"FileReferral",level:3,type:"b",webm:!1,description:"A binary value that a track/codec can refer to when the attachment is needed."},20529:{name:"ContentEncodingOrder",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"Tells when this modification was used during encoding/muxing starting with 0 and counting upwards. The decoder/demuxer has to start with the highest order number it finds and work its way down. This value has to be unique over all ContentEncodingOrder elements in the segment."},20530:{name:"ContentEncodingScope",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"not 0",description:"A bit field that describes which elements have been modified in this way. Values (big endian) can be OR'ed. Possible values: 1 - all frame contents, 2 - the track's private data, 4 - the next ContentEncoding (next ContentEncodingOrder. Either the data inside ContentCompression and/or ContentEncryption)"},20531:{name:"ContentEncodingType",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"A value describing what kind of transformation has been done. Possible values: 0 - compression, 1 - encryption"},20532:{name:"ContentCompression",level:5,type:"m",minver:1,webm:!1,description:"Settings describing the compression used. Must be present if the value of ContentEncodingType is 0 and absent otherwise. Each block must be decompressable even if no previous block is available in order not to prevent seeking."},20533:{name:"ContentEncryption",level:5,type:"m",minver:1,webm:!1,description:"Settings describing the encryption used. Must be present if the value of ContentEncodingType is 1 and absent otherwise."},21368:{name:"CueBlockNumber",level:4,type:"u",minver:1,default:1,range:"not 0",description:"Number of the Block in the specified Cluster."},22100:{name:"ChapterStringUID",level:4,type:"8",mandatory:!1,minver:3,webm:!0,description:"A unique string ID to identify the Chapter. Use for WebVTT cue identifier storage."},22337:{name:"WritingApp",level:2,type:"8",mandatory:!0,minver:1,description:'Writing application ("mkvmerge-0.3.3").'},22612:{name:"SilentTracks",cppname:"ClusterSilentTracks",level:2,type:"m",minver:1,webm:!1,description:"The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks on seeking. Then you should decide what track to use."},25152:{name:"ContentEncoding",level:4,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Settings for one content encoding like compression or encryption."},25188:{name:"BitDepth",cppname:"AudioBitDepth",level:4,type:"u",minver:1,range:"not 0",description:"Bits per sample, mostly used for PCM."},25906:{name:"SignedElement",level:3,type:"b",multiple:!0,webm:!1,description:"An element ID whose data will be used to compute the signature."},26148:{name:"TrackTranslate",level:3,type:"m",multiple:!0,minver:1,webm:!1,description:"The track identification for the given Chapter Codec."},26897:{name:"ChapProcessCommand",cppname:"ChapterProcessCommand",level:5,type:"m",multiple:!0,minver:1,webm:!1,description:"Contains all the commands associated to the Atom."},26914:{name:"ChapProcessTime",cppname:"ChapterProcessTime",level:6,type:"u",mandatory:!0,minver:1,webm:!1,description:"Defines when the process command should be handled (0: during the whole chapter, 1: before starting playback, 2: after playback of the chapter)."},26916:{name:"ChapterTranslate",level:2,type:"m",multiple:!0,minver:1,webm:!1,description:"A tuple of corresponding ID used by chapter codecs to represent this segment."},26931:{name:"ChapProcessData",cppname:"ChapterProcessData",level:6,type:"b",mandatory:!0,minver:1,webm:!1,description:"Contains the command information. The data should be interpreted depending on the ChapProcessCodecID value. For ChapProcessCodecID = 1, the data correspond to the binary DVD cell pre/post commands."},26948:{name:"ChapProcess",cppname:"ChapterProcess",level:4,type:"m",multiple:!0,minver:1,webm:!1,description:"Contains all the commands associated to the Atom."},26965:{name:"ChapProcessCodecID",cppname:"ChapterProcessCodecID",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"Contains the type of the codec used for the processing. A value of 0 means native Matroska processing (to be defined), a value of 1 means the DVD command set is used. More codec IDs can be added later."},29555:{name:"Tag",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Element containing elements specific to Tracks/Chapters."},29572:{name:"SegmentFilename",level:2,type:"8",minver:1,webm:!1,description:"A filename corresponding to this segment."},29766:{name:"AttachmentLink",cppname:"TrackAttachmentLink",level:3,type:"u",minver:1,webm:!1,range:"not 0",description:"The UID of an attachment that is used by this codec."},2459272:{name:"CodecName",level:3,type:"8",minver:1,description:"A human-readable string specifying the codec."},408125543:{name:"Segment",level:"0",type:"m",mandatory:!0,multiple:!0,minver:1,description:"This element contains all other top-level (level 1) elements. Typically a Matroska file is composed of 1 segment."},17530:{name:"TagLanguage",level:4,type:"s",mandatory:!0,minver:1,webm:!1,default:"und",description:"Specifies the language of the tag specified, in the Matroska languages form."},17827:{name:"TagName",level:4,type:"8",mandatory:!0,minver:1,webm:!1,description:"The name of the Tag that is going to be stored."},26568:{name:"SimpleTag",cppname:"TagSimple",level:3,recursive:"1",type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Contains general information about the target."},25542:{name:"TagAttachmentUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the Attachment(s) the tags belong to. If the value is 0 at this level, the tags apply to all the attachments in the Segment."},25540:{name:"TagChapterUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the Chapter(s) the tags belong to. If the value is 0 at this level, the tags apply to all chapters in the Segment."},25545:{name:"TagEditionUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the EditionEntry(s) the tags belong to. If the value is 0 at this level, the tags apply to all editions in the Segment."},25541:{name:"TagTrackUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the Track(s) the tags belong to. If the value is 0 at this level, the tags apply to all tracks in the Segment."},25546:{name:"TargetType",cppname:"TagTargetType",level:4,type:"s",minver:1,webm:!1,strong:"informational",description:'An string that can be used to display the logical level of the target like "ALBUM", "TRACK", "MOVIE", "CHAPTER", etc (see TargetType).'},26826:{name:"TargetTypeValue",cppname:"TagTargetTypeValue",level:4,type:"u",minver:1,webm:!1,default:50,description:"A number to indicate the logical level of the target (see TargetType)."},25536:{name:"Targets",cppname:"TagTargets",level:3,type:"m",mandatory:!0,minver:1,webm:!1,description:"Contain all UIDs where the specified meta data apply. It is empty to describe everything in the segment."},307544935:{name:"Tags",level:1,type:"m",multiple:!0,minver:1,webm:!1,description:"Element containing elements specific to Tracks/Chapters. A list of valid tags can be found here."},17677:{name:"ChapProcessPrivate",cppname:"ChapterProcessPrivate",level:5,type:"b",minver:1,webm:!1,description:'Some optional data attached to the ChapProcessCodecID information. For ChapProcessCodecID = 1, it is the "DVD level" equivalent.'},17278:{name:"ChapCountry",cppname:"ChapterCountry",level:5,type:"s",multiple:!0,minver:1,webm:!1,description:"The countries corresponding to the string, same 2 octets as in Internet domains."},17276:{name:"ChapLanguage",cppname:"ChapterLanguage",level:5,type:"s",mandatory:!0,multiple:!0,minver:1,webm:!0,default:"eng",description:"The languages corresponding to the string, in the bibliographic ISO-639-2 form."},143:{name:"ChapterTrack",level:4,type:"m",minver:1,webm:!1,description:"List of tracks on which the chapter applies. If this element is not present, all tracks apply"},25539:{name:"ChapterPhysicalEquiv",level:4,type:"u",minver:1,webm:!1,description:'Specify the physical equivalent of this ChapterAtom like "DVD" (60) or "SIDE" (50), see complete list of values.'},28348:{name:"ChapterSegmentEditionUID",level:4,type:"u",minver:1,webm:!1,range:"not 0",description:"The EditionUID to play from the segment linked in ChapterSegmentUID."},28263:{name:"ChapterSegmentUID",level:4,type:"b",minver:1,webm:!1,range:">0",bytesize:16,description:"A segment to play in place of this chapter. Edition ChapterSegmentEditionUID should be used for this segment, otherwise no edition is used."},29636:{name:"ChapterUID",level:4,type:"u",mandatory:!0,minver:1,webm:!0,range:"not 0",description:"A unique ID to identify the Chapter."},182:{name:"ChapterAtom",level:3,recursive:"1",type:"m",mandatory:!0,multiple:!0,minver:1,webm:!0,description:"Contains the atom information to use as the chapter atom (apply to all tracks)."},17885:{name:"EditionFlagOrdered",level:3,type:"u",minver:1,webm:!1,default:0,range:"0-1",description:"Specify if the chapters can be defined multiple times and the order to play them is enforced. (1 bit)"},17883:{name:"EditionFlagDefault",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,range:"0-1",description:"If a flag is set (1) the edition should be used as the default one. (1 bit)"},17853:{name:"EditionFlagHidden",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,range:"0-1",description:"If an edition is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)"},17852:{name:"EditionUID",level:3,type:"u",minver:1,webm:!1,range:"not 0",description:"A unique ID to identify the edition. It's useful for tagging an edition."},17849:{name:"EditionEntry",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!0,description:"Contains all information about a segment edition."},272869232:{name:"Chapters",level:1,type:"m",minver:1,webm:!0,description:"A system to define basic menus and partition data. For more detailed information, look at the Chapters Explanation."},18094:{name:"FileUID",level:3,type:"u",mandatory:!0,minver:1,webm:!1,range:"not 0",description:"Unique ID representing the file, as random as possible."},18012:{name:"FileData",level:3,type:"b",mandatory:!0,minver:1,webm:!1,description:"The data of the file."},18030:{name:"FileName",level:3,type:"8",mandatory:!0,minver:1,webm:!1,description:"Filename of the attached file."},18046:{name:"FileDescription",level:3,type:"8",minver:1,webm:!1,description:"A human-friendly name for the attached file."},24999:{name:"AttachedFile",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"An attached file."},423732329:{name:"Attachments",level:1,type:"m",minver:1,webm:!1,description:"Contain attached files."},235:{name:"CueRefCodecState",level:5,type:"u",webm:!1,default:0,description:"The position of the Codec State corresponding to this referenced element. 0 means that the data is taken from the initial Track Entry."},21343:{name:"CueRefNumber",level:5,type:"u",webm:!1,default:1,range:"not 0",description:"Number of the referenced Block of Track X in the specified Cluster."},219:{name:"CueReference",level:4,type:"m",multiple:!0,minver:2,webm:!1,description:"The Clusters containing the required referenced Blocks."},234:{name:"CueCodecState",level:4,type:"u",minver:2,webm:!1,default:0,description:"The position of the Codec State corresponding to this Cue element. 0 means that the data is taken from the initial Track Entry."},178:{name:"CueDuration",level:4,type:"u",mandatory:!1,minver:4,webm:!1,description:"The duration of the block according to the segment time base. If missing the track's DefaultDuration does not apply and no duration information is available in terms of the cues."},240:{name:"CueRelativePosition",level:4,type:"u",mandatory:!1,minver:4,webm:!1,description:"The relative position of the referenced block inside the cluster with 0 being the first possible position for an element inside that cluster.",position:"clusterRelative"},241:{name:"CueClusterPosition",level:4,type:"u",mandatory:!0,minver:1,description:"The position of the Cluster containing the required Block.",position:"segment"},247:{name:"CueTrack",level:4,type:"u",mandatory:!0,minver:1,range:"not 0",description:"The track for which a position is given."},183:{name:"CueTrackPositions",level:3,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contain positions for different tracks corresponding to the timestamp."},179:{name:"CueTime",level:3,type:"u",mandatory:!0,minver:1,description:"Absolute timestamp according to the segment time base."},187:{name:"CuePoint",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contains all information relative to a seek point in the segment."},475249515:{name:"Cues",level:1,type:"m",minver:1,description:'A top-level element to speed seeking access. All entries are local to the segment. Should be mandatory for non "live" streams.'},18406:{name:"ContentSigHashAlgo",level:6,type:"u",minver:1,webm:!1,default:0,description:"The hash algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - SHA1-160 2 - MD5"},18405:{name:"ContentSigAlgo",level:6,type:"u",minver:1,webm:!1,default:0,description:"The algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - RSA"},18404:{name:"ContentSigKeyID",level:6,type:"b",minver:1,webm:!1,description:"This is the ID of the private key the data was signed with."},18403:{name:"ContentSignature",level:6,type:"b",minver:1,webm:!1,description:"A cryptographic signature of the contents."},18402:{name:"ContentEncKeyID",level:6,type:"b",minver:1,webm:!1,description:"For public key algorithms this is the ID of the public key the the data was encrypted with."},18401:{name:"ContentEncAlgo",level:6,type:"u",minver:1,webm:!1,default:0,description:"The encryption algorithm used. The value '0' means that the contents have not been encrypted but only signed. Predefined values: 1 - DES, 2 - 3DES, 3 - Twofish, 4 - Blowfish, 5 - AES"},28032:{name:"ContentEncodings",level:3,type:"m",minver:1,webm:!1,description:"Settings for several content encoding mechanisms like compression or encryption."},196:{name:"TrickMasterTrackSegmentUID",level:3,type:"b",divx:!0,bytesize:16,description:"DivX trick track extenstions"},199:{name:"TrickMasterTrackUID",level:3,type:"u",divx:!0,description:"DivX trick track extenstions"},198:{name:"TrickTrackFlag",level:3,type:"u",divx:!0,default:0,description:"DivX trick track extenstions"},193:{name:"TrickTrackSegmentUID",level:3,type:"b",divx:!0,bytesize:16,description:"DivX trick track extenstions"},192:{name:"TrickTrackUID",level:3,type:"u",divx:!0,description:"DivX trick track extenstions"},237:{name:"TrackJoinUID",level:5,type:"u",mandatory:!0,multiple:!0,minver:3,webm:!1,range:"not 0",description:"The trackUID number of a track whose blocks are used to create this virtual track."},233:{name:"TrackJoinBlocks",level:4,type:"m",minver:3,webm:!1,description:"Contains the list of all tracks whose Blocks need to be combined to create this virtual track"},230:{name:"TrackPlaneType",level:6,type:"u",mandatory:!0,minver:3,webm:!1,description:"The kind of plane this track corresponds to (0: left eye, 1: right eye, 2: background)."},229:{name:"TrackPlaneUID",level:6,type:"u",mandatory:!0,minver:3,webm:!1,range:"not 0",description:"The trackUID number of the track representing the plane."},228:{name:"TrackPlane",level:5,type:"m",mandatory:!0,multiple:!0,minver:3,webm:!1,description:"Contains a video plane track that need to be combined to create this 3D track"},227:{name:"TrackCombinePlanes",level:4,type:"m",minver:3,webm:!1,description:"Contains the list of all video plane tracks that need to be combined to create this 3D track"},226:{name:"TrackOperation",level:3,type:"m",minver:3,webm:!1,description:"Operation that needs to be applied on tracks to create this virtual track. For more details look at the Specification Notes on the subject."},32123:{name:"ChannelPositions",cppname:"AudioPosition",level:4,type:"b",webm:!1,description:"Table of horizontal angles for each successive channel, see appendix."},159:{name:"Channels",cppname:"AudioChannels",level:4,type:"u",mandatory:!0,minver:1,default:1,range:"not 0",description:"Numbers of channels in the track."},30901:{name:"OutputSamplingFrequency",cppname:"AudioOutputSamplingFreq",level:4,type:"f",minver:1,default:"Sampling Frequency",range:"> 0",description:"Real output sampling frequency in Hz (used for SBR techniques)."},181:{name:"SamplingFrequency",cppname:"AudioSamplingFreq",level:4,type:"f",mandatory:!0,minver:1,default:8e3,range:"> 0",description:"Sampling frequency in Hz."},225:{name:"Audio",cppname:"TrackAudio",level:3,type:"m",minver:1,description:"Audio settings."},2327523:{name:"FrameRate",cppname:"VideoFrameRate",level:4,type:"f",range:"> 0",strong:"Informational",description:"Number of frames per second. only."},3126563:{name:"GammaValue",cppname:"VideoGamma",level:4,type:"f",webm:!1,range:"> 0",description:"Gamma Value."},3061028:{name:"ColourSpace",cppname:"VideoColourSpace",level:4,type:"b",minver:1,webm:!1,bytesize:4,description:"Same value as in AVI (32 bits)."},21683:{name:"AspectRatioType",cppname:"VideoAspectRatio",level:4,type:"u",minver:1,default:0,description:"Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect ratio, 2: fixed)."},21682:{name:"DisplayUnit",cppname:"VideoDisplayUnit",level:4,type:"u",minver:1,default:0,description:"How DisplayWidth & DisplayHeight should be interpreted (0: pixels, 1: centimeters, 2: inches, 3: Display Aspect Ratio)."},21690:{name:"DisplayHeight",cppname:"VideoDisplayHeight",level:4,type:"u",minver:1,default:"PixelHeight",range:"not 0",description:"Height of the video frames to display. The default value is only valid when DisplayUnit is 0."},21680:{name:"DisplayWidth",cppname:"VideoDisplayWidth",level:4,type:"u",minver:1,default:"PixelWidth",range:"not 0",description:"Width of the video frames to display. The default value is only valid when DisplayUnit is 0."},21725:{name:"PixelCropRight",cppname:"VideoPixelCropRight",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove on the right of the image."},21708:{name:"PixelCropLeft",cppname:"VideoPixelCropLeft",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove on the left of the image."},21691:{name:"PixelCropTop",cppname:"VideoPixelCropTop",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove at the top of the image."},21674:{name:"PixelCropBottom",cppname:"VideoPixelCropBottom",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove at the bottom of the image (for HDTV content)."},186:{name:"PixelHeight",cppname:"VideoPixelHeight",level:4,type:"u",mandatory:!0,minver:1,range:"not 0",description:"Height of the encoded video frames in pixels."},176:{name:"PixelWidth",cppname:"VideoPixelWidth",level:4,type:"u",mandatory:!0,minver:1,range:"not 0",description:"Width of the encoded video frames in pixels."},21433:{name:"OldStereoMode",level:4,type:"u",maxver:"0",webm:!1,divx:!1,description:"DEPRECATED, DO NOT USE. Bogus StereoMode value used in old versions of libmatroska. (0: mono, 1: right eye, 2: left eye, 3: both eyes)."},21440:{name:"AlphaMode",cppname:"VideoAlphaMode",level:4,type:"u",minver:3,webm:!0,default:0,description:"Alpha Video Mode. Presence of this element indicates that the BlockAdditional element could contain Alpha data."},21432:{name:"StereoMode",cppname:"VideoStereoMode",level:4,type:"u",minver:3,webm:!0,default:0,description:"Stereo-3D video mode (0: mono, 1: side by side (left eye is first), 2: top-bottom (right eye is first), 3: top-bottom (left eye is first), 4: checkboard (right is first), 5: checkboard (left is first), 6: row interleaved (right is first), 7: row interleaved (left is first), 8: column interleaved (right is first), 9: column interleaved (left is first), 10: anaglyph (cyan/red), 11: side by side (right eye is first), 12: anaglyph (green/magenta), 13 both eyes laced in one Block (left eye is first), 14 both eyes laced in one Block (right eye is first)) . There are some more details on 3D support in the Specification Notes."},154:{name:"FlagInterlaced",cppname:"VideoFlagInterlaced",level:4,type:"u",mandatory:!0,minver:2,webm:!0,default:0,range:"0-1",description:"Set if the video is interlaced. (1 bit)"},224:{name:"Video",cppname:"TrackVideo",level:3,type:"m",minver:1,description:"Video settings."},26277:{name:"TrackTranslateTrackID",level:4,type:"b",mandatory:!0,minver:1,webm:!1,description:"The binary value used to represent this track in the chapter codec data. The format depends on the ChapProcessCodecID used."},26303:{name:"TrackTranslateCodec",level:4,type:"u",mandatory:!0,minver:1,webm:!1,description:"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu)."},26364:{name:"TrackTranslateEditionUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,description:"Specify an edition UID on which this translation applies. When not specified, it means for all editions found in the segment."},22203:{name:"SeekPreRoll",level:3,type:"u",mandatory:!0,multiple:!1,default:0,minver:4,webm:!0,description:"After a discontinuity, SeekPreRoll is the duration in nanoseconds of the data the decoder must decode before the decoded data is valid."},22186:{name:"CodecDelay",level:3,type:"u",multiple:!1,default:0,minver:4,webm:!0,description:"CodecDelay is The codec-built-in delay in nanoseconds. This value must be subtracted from each block timestamp in order to get the actual timestamp. The value should be small so the muxing of tracks with the same actual timestamp are in the same Cluster."},28587:{name:"TrackOverlay",level:3,type:"u",multiple:!0,minver:1,webm:!1,description:"Specify that this track is an overlay track for the Track specified (in the u-integer). That means when this track has a gap (see SilentTracks) the overlay track should be used instead. The order of multiple TrackOverlay matters, the first one is the one that should be used. If not found it should be the second, etc."},170:{name:"CodecDecodeAll",level:3,type:"u",mandatory:!0,minver:2,webm:!1,default:1,range:"0-1",description:"The codec can decode potentially damaged data (1 bit)."},2536e3:{name:"CodecDownloadURL",level:3,type:"s",multiple:!0,webm:!1,description:"A URL to download about the codec used."},3883072:{name:"CodecInfoURL",level:3,type:"s",multiple:!0,webm:!1,description:"A URL to find information about the codec used."},3839639:{name:"CodecSettings",level:3,type:"8",webm:!1,description:"A string describing the encoding setting used."},25506:{name:"CodecPrivate",level:3,type:"b",minver:1,description:"Private data only known to the codec."},2274716:{name:"Language",cppname:"TrackLanguage",level:3,type:"s",minver:1,default:"eng",description:"Specifies the language of the track in the Matroska languages form."},21358:{name:"Name",cppname:"TrackName",level:3,type:"8",minver:1,description:"A human-readable track name."},21998:{name:"MaxBlockAdditionID",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"The maximum value of BlockAdditions for this track."},21375:{name:"TrackOffset",level:3,type:"i",webm:!1,default:0,description:"A value to add to the Block's Timestamp. This can be used to adjust the playback offset of a track."},2306383:{name:"TrackTimecodeScale",level:3,type:"f",mandatory:!0,minver:1,maxver:"3",webm:!1,default:1,range:"> 0",description:"DEPRECATED, DO NOT USE. The scale to apply on this track to work at normal speed in relation with other tracks (mostly used to adjust video speed when the audio length differs)."},2313850:{name:"DefaultDecodedFieldDuration",cppname:"TrackDefaultDecodedFieldDuration",level:3,type:"u",minver:4,range:"not 0",description:"The period in nanoseconds (not scaled by TimcodeScale)\nbetween two successive fields at the output of the decoding process (see the notes)"},2352003:{name:"DefaultDuration",cppname:"TrackDefaultDuration",level:3,type:"u",minver:1,range:"not 0",description:"Number of nanoseconds (not scaled via TimecodeScale) per frame ('frame' in the Matroska sense -- one element put into a (Simple)Block)."},28152:{name:"MaxCache",cppname:"TrackMaxCache",level:3,type:"u",minver:1,webm:!1,description:"The maximum cache size required to store referenced frames in and the current frame. 0 means no cache is needed."},28135:{name:"MinCache",cppname:"TrackMinCache",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"The minimum number of frames a player should be able to cache during playback. If set to 0, the reference pseudo-cache system is not used."},156:{name:"FlagLacing",cppname:"TrackFlagLacing",level:3,type:"u",mandatory:!0,minver:1,default:1,range:"0-1",description:"Set if the track may contain blocks using lacing. (1 bit)"},21930:{name:"FlagForced",cppname:"TrackFlagForced",level:3,type:"u",mandatory:!0,minver:1,default:0,range:"0-1",description:"Set if that track MUST be active during playback. There can be many forced track for a kind (audio, video or subs), the player should select the one which language matches the user preference or the default + forced track. Overlay MAY happen between a forced and non-forced track of the same kind. (1 bit)"},185:{name:"FlagEnabled",cppname:"TrackFlagEnabled",level:3,type:"u",mandatory:!0,minver:2,webm:!0,default:1,range:"0-1",description:"Set if the track is usable. (1 bit)"},29637:{name:"TrackUID",level:3,type:"u",mandatory:!0,minver:1,range:"not 0",description:"A unique ID to identify the Track. This should be kept the same when making a direct stream copy of the Track to another file."},215:{name:"TrackNumber",level:3,type:"u",mandatory:!0,minver:1,range:"not 0",description:"The track number as used in the Block Header (using more than 127 tracks is not encouraged, though the design allows an unlimited number)."},174:{name:"TrackEntry",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Describes a track with all elements."},374648427:{name:"Tracks",level:1,type:"m",multiple:!0,minver:1,description:"A top-level block of information with many tracks described."},175:{name:"EncryptedBlock",level:2,type:"b",multiple:!0,webm:!1,description:"Similar to EncryptedBlock Structure)"},202:{name:"ReferenceTimeCode",level:4,type:"u",multiple:!1,mandatory:!0,minver:0,webm:!1,divx:!0,description:"DivX trick track extenstions"},201:{name:"ReferenceOffset",level:4,type:"u",multiple:!1,mandatory:!0,minver:0,webm:!1,divx:!0,description:"DivX trick track extenstions"},200:{name:"ReferenceFrame",level:3,type:"m",multiple:!1,minver:0,webm:!1,divx:!0,description:"DivX trick track extenstions"},207:{name:"SliceDuration",level:5,type:"u",default:0,description:"The (scaled) duration to apply to the element."},206:{name:"Delay",cppname:"SliceDelay",level:5,type:"u",default:0,description:"The (scaled) delay to apply to the element."},203:{name:"BlockAdditionID",cppname:"SliceBlockAddID",level:5,type:"u",default:0,description:"The ID of the BlockAdditional element (0 is the main Block)."},205:{name:"FrameNumber",cppname:"SliceFrameNumber",level:5,type:"u",default:0,description:"The number of the frame to generate from this lace with this delay (allow you to generate many frames from the same Block/Frame)."},204:{name:"LaceNumber",cppname:"SliceLaceNumber",level:5,type:"u",minver:1,default:0,divx:!1,description:"The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback."},232:{name:"TimeSlice",level:4,type:"m",multiple:!0,minver:1,divx:!1,description:"Contains extra time information about the data contained in the Block. While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback."},142:{name:"Slices",level:3,type:"m",minver:1,divx:!1,description:"Contains slices description."},30114:{name:"DiscardPadding",level:3,type:"i",minver:4,webm:!0,description:"Duration in nanoseconds of the silent data added to the Block (padding at the end of the Block for positive value, at the beginning of the Block for negative value). The duration of DiscardPadding is not calculated in the duration of the TrackEntry and should be discarded during playback."},164:{name:"CodecState",level:3,type:"b",minver:2,webm:!1,description:"The new codec state to use. Data interpretation is private to the codec. This information should always be referenced by a seek entry."},253:{name:"ReferenceVirtual",level:3,type:"i",webm:!1,description:"Relative position of the data that should be in position of the virtual block."},251:{name:"ReferenceBlock",level:3,type:"i",multiple:!0,minver:1,description:"Timestamp of another frame used as a reference (ie: B or P frame). The timestamp is relative to the block it's attached to."},250:{name:"ReferencePriority",cppname:"FlagReferenced",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"This frame is referenced and has the specified cache priority. In cache only a frame of the same or higher priority can replace this frame. A value of 0 means the frame is not referenced."},155:{name:"BlockDuration",level:3,type:"u",minver:1,default:"TrackDuration",description:'The duration of the Block (based on TimecodeScale). This element is mandatory when DefaultDuration is set for the track (but can be omitted as other default values). When not written and with no DefaultDuration, the value is assumed to be the difference between the timestamp of this Block and the timestamp of the next Block in "display" order (not coding order). This element can be useful at the end of a Track (as there is not other Block available), or when there is a break in a track like for subtitle tracks. When set to 0 that means the frame is not a keyframe.'},165:{name:"BlockAdditional",level:5,type:"b",mandatory:!0,minver:1,webm:!1,description:"Interpreted by the codec as it wishes (using the BlockAddID)."},238:{name:"BlockAddID",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"not 0",description:"An ID to identify the BlockAdditional level."},166:{name:"BlockMore",level:4,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Contain the BlockAdditional and some parameters."},30113:{name:"BlockAdditions",level:3,type:"m",minver:1,webm:!1,description:"Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block structure could still see and use/skip these data."},162:{name:"BlockVirtual",level:3,type:"b",webm:!1,description:"A Block with no data. It must be stored in the stream at the place the real Block should be in display order. (see Block Virtual)"},161:{name:"Block",level:3,type:"b",mandatory:!0,minver:1,description:"Block containing the actual data to be rendered and a timestamp relative to the Cluster Timecode. (see Block Structure)"},160:{name:"BlockGroup",level:2,type:"m",multiple:!0,minver:1,description:"Basic container of information containing a single Block or BlockVirtual, and information specific to that Block/VirtualBlock."},163:{name:"SimpleBlock",level:2,type:"b",multiple:!0,minver:2,webm:!0,divx:!0,description:"Similar to SimpleBlock Structure"},171:{name:"PrevSize",cppname:"ClusterPrevSize",level:2,type:"u",minver:1,description:"Size of the previous Cluster, in octets. Can be useful for backward playing.",position:"prevCluster"},167:{name:"Position",cppname:"ClusterPosition",level:2,type:"u",minver:1,webm:!1,description:"The Position of the Cluster in the segment (0 in live broadcast streams). It might help to resynchronise offset on damaged streams.",position:"segment"},22743:{name:"SilentTrackNumber",cppname:"ClusterSilentTrackNumber",level:3,type:"u",multiple:!0,minver:1,webm:!1,description:"One of the track number that are not used from now on in the stream. It could change later if not specified as silent in a further Cluster."},231:{name:"Timecode",cppname:"ClusterTimecode",level:2,type:"u",mandatory:!0,minver:1,description:"Absolute timestamp of the cluster (based on TimecodeScale)."},524531317:{name:"Cluster",level:1,type:"m",multiple:!0,minver:1,description:"The lower level element containing the (monolithic) Block structure."},19840:{name:"MuxingApp",level:2,type:"8",mandatory:!0,minver:1,description:'Muxing application or library ("libmatroska-0.4.3").'},31657:{name:"Title",level:2,type:"8",minver:1,webm:!1,description:"General name of the segment."},2807730:{name:"TimecodeScaleDenominator",level:2,type:"u",mandatory:!0,minver:4,default:"1000000000",description:"Timestamp scale numerator, see TimecodeScale."},2807729:{name:"TimecodeScale",level:2,type:"u",mandatory:!0,minver:1,default:"1000000",description:"Timestamp scale in nanoseconds (1.000.000 means all timestamps in the segment are expressed in milliseconds)."},27045:{name:"ChapterTranslateID",level:3,type:"b",mandatory:!0,minver:1,webm:!1,description:"The binary value used to represent this segment in the chapter codec data. The format depends on the ChapProcessCodecID used."},27071:{name:"ChapterTranslateCodec",level:3,type:"u",mandatory:!0,minver:1,webm:!1,description:"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu)."},27132:{name:"ChapterTranslateEditionUID",level:3,type:"u",multiple:!0,minver:1,webm:!1,description:"Specify an edition UID on which this correspondance applies. When not specified, it means for all editions found in the segment."},4096955:{name:"NextFilename",level:2,type:"8",minver:1,webm:!1,description:"An escaped filename corresponding to the next segment."},4110627:{name:"NextUID",level:2,type:"b",minver:1,webm:!1,bytesize:16,description:"A unique ID to identify the next chained segment (128 bits)."},3965867:{name:"PrevFilename",level:2,type:"8",minver:1,webm:!1,description:"An escaped filename corresponding to the previous segment."},3979555:{name:"PrevUID",level:2,type:"b",minver:1,webm:!1,bytesize:16,description:"A unique ID to identify the previous chained segment (128 bits)."},29604:{name:"SegmentUID",level:2,type:"b",minver:1,webm:!1,range:"not 0",bytesize:16,description:"A randomly generated unique ID to identify the current segment between many others (128 bits)."},357149030:{name:"Info",level:1,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contains miscellaneous general information and statistics on the file."},21420:{name:"SeekPosition",level:3,type:"u",mandatory:!0,minver:1,description:"The position of the element in the segment in octets (0 = first level 1 element).",position:"segment"},21419:{name:"SeekID",level:3,type:"b",mandatory:!0,minver:1,description:"The binary ID corresponding to the element name.",type2:"ebmlID"},19899:{name:"Seek",cppname:"SeekPoint",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contains a single seek entry to an EBML element."},290298740:{name:"SeekHead",cppname:"SeekHeader",level:1,type:"m",multiple:!0,minver:1,description:"Contains the position of other level 1 elements."},32379:{name:"SignatureElementList",level:2,type:"m",multiple:!0,webm:!1,i:"Cluster|Block|BlockAdditional",description:"A list consists of a number of consecutive elements that represent one case where data is used in signature. Ex: means that the BlockAdditional of all Blocks in all Clusters is used for encryption."},32347:{name:"SignatureElements",level:1,type:"m",webm:!1,description:"Contains elements that will be used to compute the signature."},32437:{name:"Signature",level:1,type:"b",webm:!1,description:"The signature of the data (until a new."},32421:{name:"SignaturePublicKey",level:1,type:"b",webm:!1,description:"The public key to use with the algorithm (in the case of a PKI-based signature)."},32410:{name:"SignatureHash",level:1,type:"u",webm:!1,description:"Hash algorithm used (1=SHA1-160, 2=MD5)."},32394:{name:"SignatureAlgo",level:1,type:"u",webm:!1,description:"Signature algorithm used (1=RSA, 2=elliptic)."},458458727:{name:"SignatureSlot",level:-1,type:"m",multiple:!0,webm:!1,description:"Contain signature of some (coming) elements in the stream."},191:{name:"CRC-32",level:-1,type:"b",minver:1,webm:!1,description:"The CRC is computed on all the data of the Master element it's in. The CRC element should be the first in it's parent master for easier reading. All level 1 elements should include a CRC-32. The CRC in use is the IEEE CRC32 Little Endian",crc:!0},236:{name:"Void",level:-1,type:"b",minver:1,description:"Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is discarded. Also used to reserve space in a sub-element for later use."},17139:{name:"EBMLMaxSizeLength",level:1,type:"u",mandatory:!0,default:8,minver:1,description:"The maximum length of the sizes you'll find in this file (8 or less in Matroska). This does not override the element size indicated at the beginning of an element. Elements that have an indicated size which is larger than what is allowed by EBMLMaxSizeLength shall be considered invalid."},17138:{name:"EBMLMaxIDLength",level:1,type:"u",mandatory:!0,default:4,minver:1,description:"The maximum length of the IDs you'll find in this file (4 or less in Matroska)."},17143:{name:"EBMLReadVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The minimum EBML version a parser has to support to read this file."},440786851:{name:"EBML",level:"0",type:"m",mandatory:!0,multiple:!0,minver:1,description:"Set the EBML characteristics of the data to follow. Each EBML document has to start with this."},21936:{name:"Colour",level:"4",type:"m",mandatory:!0,multiple:!0,description:"Settings describing the colour format."},21937:{name:"MatrixCoefficients",level:"5",type:"u",mandatory:!0,multiple:!0,description:"The Matrix Coefficients of the video used to derive luma and chroma values from red, green, and blue color primaries. For clarity, the value and meanings for MatrixCoefficients are adopted from Table 4 of ISO/IEC 23001-8:2016 or ITU-T H.273."},21945:{name:"Range",level:"5",type:"u",mandatory:!0,multiple:!0,description:"Clipping of the color ranges."},21946:{name:"TransferCharacteristics",level:"5",type:"u",mandatory:!0,multiple:!0,description:"The transfer characteristics of the video."},21947:{name:"Primaries",level:"5",type:"u",mandatory:!0,multiple:!0,description:"The colour primaries of the video. For clarity, the value and meanings for Primaries are adopted from Table 2 of ISO/IEC 23091-4 or ITU-T H.273."}}},1384:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.tools=t.Reader=t.Encoder=t.Decoder=void 0,i(n(4990),t);var o=n(2800);t.Decoder=o.default;var a=n(8031);t.Encoder=a.default;var s=n(1381);t.Reader=s.default;var l=n(3210);t.tools=l},190:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n8){var i=e.readHexString(t,n,n+r);throw new Error("Unrepresentable length: ".concat(r," ").concat(i))}if(n+r>t.length)return null;for(var o=t[n]&(1<<8-r)-1,a=1;a=Math.pow(2,8)&&t[n+7]>0)return{length:r,value:-1};o*=Math.pow(2,8),o+=t[n+a]}return{length:r,value:o}},e.writeVint=function(e){if(e<0||e>Math.pow(2,53))throw new Error("Unrepresentable value: ".concat(e));var t=1;for(t=1;t<=8&&!(e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.convertEBMLDateToJSDate=t.createFloatBuffer=t.createIntBuffer=t.createUIntBuffer=t.encodeValueToBuffer=t.concat=t.putRefinedMetaData=t.extractElement=t.removeElement=t.makeMetadataSeekable=t.createRIFFChunk=t.VP8BitStreamToRiffWebPBuffer=t.WebPBlockFilter=t.encodeTag=t.readBlock=t.ebmlBlock=t.writeVint=t.readVint=t.Buffer=void 0;var r=n(1166),i=n(8031),o=n(8764),a=n(190),s=n(1586);function l(e,n){var r=new t.Buffer(4);return r.writeUInt32LE(n.byteLength,0),d([new t.Buffer(e.substr(0,4),"ascii"),r,n,new t.Buffer(n.byteLength%2==0?0:1)])}function u(e,t){for(var n=-1,r=0;r=0?Array.prototype.splice.apply(e,[i+1,0].concat(n)):r?[].concat([{name:t,type:"m",isEnd:!1}],n,[{name:t,type:"m",isEnd:!0}]).reverse().forEach((function(t){e.unshift(t)})):(e.push({name:t,type:"m",isEnd:!1}),n.forEach((function(t){e.push(t)})),e.push({name:t,type:"m",isEnd:!0}))}function d(e){return t.Buffer.concat(e)}function m(e){for(var n=1;e>=Math.pow(2,8*n);n++);if(n>=7)return console.warn("7bit or more bigger uint not supported."),new r.Uint64BE(e).toBuffer();var i=new t.Buffer(n);return i.writeUIntBE(e,0,n),i}function y(e){for(var n=1;e>=Math.pow(2,8*n);n++);if(n>=7)return console.warn("7bit or more bigger uint not supported."),new r.Int64BE(e).toBuffer();var i=new t.Buffer(n);return i.writeIntBE(e,0,n),i}function g(e,n){var r;if(void 0===n&&(n=8),8===n)return(r=new t.Buffer(8)).writeDoubleBE(e,0),r;if(4===n)return(r=new t.Buffer(4)).writeFloatBE(e,0),r;throw new Error("float type bits must 4bytes or 8bytes")}t.Buffer=o.Buffer,t.readVint=a.default.readVint,t.writeVint=a.default.writeVint,t.ebmlBlock=s,t.readBlock=function(e){return(0,t.ebmlBlock)(new t.Buffer(e))},t.encodeTag=function(e,n,r){return void 0===r&&(r=!1),d([e,r?new t.Buffer("01ffffffffffffff","hex"):(0,t.writeVint)(n.length),n])},t.WebPBlockFilter=function(e){return e.reduce((function(e,n){return"b"!==n.type||"SimpleBlock"!==n.name?e:(0,t.ebmlBlock)(n.data).frames.some((function(e){return"9d012a"===e.slice(3,6).toString("hex")}))?e.concat(n):e}),[])},t.VP8BitStreamToRiffWebPBuffer=function(e){var n=l("VP8 ",e);return l("RIFF",d([new t.Buffer("WEBP","ascii"),n]))},t.createRIFFChunk=l,t.makeMetadataSeekable=function(e,n,r){var o=c("EBML",e),a=f(o)+12,s=e[e.length-1].dataEnd-a,l=c("Info",e);u("Duration",l),l.splice(1,0,{name:"Duration",type:"f",data:g(n,8)});for(var h=f(l),p=c("Tracks",e),d=f(p),y=47,v=[],b=5+15*r.length,w=[],k=-1,T=function(e){var n=y,i=n+h,o=i+d,l=o+b-s;if((v=[]).push({name:"SeekHead",type:"m",isEnd:!1}),v.push({name:"Seek",type:"m",isEnd:!1}),v.push({name:"SeekID",type:"b",data:new t.Buffer([21,73,169,102])}),v.push({name:"SeekPosition",type:"u",data:m(n)}),v.push({name:"Seek",type:"m",isEnd:!0}),v.push({name:"Seek",type:"m",isEnd:!1}),v.push({name:"SeekID",type:"b",data:new t.Buffer([22,84,174,107])}),v.push({name:"SeekPosition",type:"u",data:m(i)}),v.push({name:"Seek",type:"m",isEnd:!0}),v.push({name:"Seek",type:"m",isEnd:!1}),v.push({name:"SeekID",type:"b",data:new t.Buffer([28,83,187,107])}),v.push({name:"SeekPosition",type:"u",data:m(o)}),v.push({name:"Seek",type:"m",isEnd:!0}),v.push({name:"SeekHead",type:"m",isEnd:!0}),y=f(v),(w=[]).push({name:"Cues",type:"m",isEnd:!1}),r.forEach((function(e){var t=e.CueTrack,n=e.CueClusterPosition,r=e.CueTime;w.push({name:"CuePoint",type:"m",isEnd:!1}),w.push({name:"CueTime",type:"u",data:m(r)}),w.push({name:"CueTrackPositions",type:"m",isEnd:!1}),w.push({name:"CueTrack",type:"u",data:m(t)}),n-=a,n+=l,w.push({name:"CueClusterPosition",type:"u",data:m(n)}),w.push({name:"CueTrackPositions",type:"m",isEnd:!0}),w.push({name:"CuePoint",type:"m",isEnd:!0})})),w.push({name:"Cues",type:"m",isEnd:!0}),b=f(w),k===l)return"break";if(k=l,9===e)throw new Error("Failed to converge to a stable metadata size")},E=0;E<10;E++){if("break"===T(E))break}var C=[].concat.apply([],[o,{name:"Segment",type:"m",isEnd:!1,unknownSize:!0},v,l,p,w]);return(new i.default).encode(C)},t.removeElement=u,t.extractElement=c,t.putRefinedMetaData=function(e,n){Array.isArray(n.cueInfos)&&!Array.isArray(n.cues)&&(console.warn("putRefinedMetaData: info.cueInfos property is deprecated. please use info.cues"),n.cues=n.cueInfos);for(var r=[],o=[],a=0;a0))throw new Error("metadata dataEnd has wrong number");var l,u=o[o.length-1].dataEnd,c=r[r.length-1].dataEnd,f=(new i.default).encode(r).byteLength-c,p=u-o[0].tagStart,d=(o[0].tagStart,o[0].tagStart,new t.Buffer([24,83,128,103])),m=new t.Buffer("01ffffffffffffff","hex"),y=d.byteLength+m.byteLength,g=p;for(l=1;l<20;l++){var v=h(o,f+(c+y+g-u),n),b=(new i.default).encode(v).byteLength;if(b===g)return(new i.default).encode([].concat(r,[{type:"m",name:"Segment",isEnd:!1,unknownSize:!0}],v));g=b}throw new Error("unable to refine metadata, stable size could not be found in "+l+" iterations!")},t.concat=d,t.encodeValueToBuffer=function(e){var n=new t.Buffer(0);if("m"===e.type)return e;switch(e.type){case"u":n=m(e.value);break;case"i":n=y(e.value);break;case"f":n=g(e.value);break;case"s":n=new t.Buffer(e.value,"ascii");break;case"8":n=new t.Buffer(e.value,"utf8");break;case"b":n=e.value;break;case"d":n=new r.Int64BE(e.value.getTime().toString()).toBuffer()}return Object.assign({},e,{data:n})},t.createUIntBuffer=m,t.createIntBuffer=y,t.createFloatBuffer=g,t.convertEBMLDateToJSDate=function(e){return e instanceof Date?e:new Date(new Date("2001-01-01T00:00:00.000Z").getTime()+Number(e)/1e3/1e3)}},8246:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(e){o(e)}}function s(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1] 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","var BufferReader = require('./lib/buffer-reader')\n\nvar XIPH_LACING = 1\nvar EBML_LACING = 3\nvar FIXED_SIZE_LACING = 2\n\nmodule.exports = function (buffer) {\n var block = {}\n var reader = new BufferReader(buffer)\n\n block.trackNumber = reader.nextUIntV()\n block.timecode = reader.nextInt16BE()\n\n var flags = reader.nextUInt8()\n\n block.invisible = !!(flags & 0x8)\n\n // only valid for SimpleBlock\n block.keyframe = !!(flags & 0x80)\n block.discardable = !!(flags & 0x1)\n\n var lacing = (flags & 0x6) >> 1\n\n block.frames = readLacedData(reader, lacing)\n\n return block\n}\n\nfunction readLacedData (reader, lacing) {\n if (!lacing) return [reader.nextBuffer()]\n\n var i, frameSize\n var frames = []\n var framesNum = reader.nextUInt8() + 1 // number of frames\n\n if (lacing === FIXED_SIZE_LACING) {\n // remaining data should be divisible by the number of frames\n if (reader.length % framesNum !== 0) throw new Error('Fixed-Size Lacing Error')\n\n frameSize = reader.length / framesNum\n for (i = 0; i < framesNum; i++) {\n frames.push(reader.nextBuffer(frameSize))\n }\n return frames\n }\n\n var frameSizes = []\n\n if (lacing === XIPH_LACING) {\n for (i = 0; i < framesNum - 1; i++) {\n var val\n frameSize = 0\n do {\n val = reader.nextUInt8()\n frameSize += val\n } while (val === 0xff)\n frameSizes.push(frameSize)\n }\n } else if (lacing === EBML_LACING) {\n // first frame\n frameSize = reader.nextUIntV()\n frameSizes.push(frameSize)\n\n // middle frames\n for (i = 1; i < framesNum - 1; i++) {\n frameSize += reader.nextIntV()\n frameSizes.push(frameSize)\n }\n }\n\n for (i = 0; i < framesNum - 1; i++) {\n frames.push(reader.nextBuffer(frameSizes[i]))\n }\n\n // last frame (remaining buffer)\n frames.push(reader.nextBuffer())\n\n return frames\n}\n","var vint = require('./vint')\n\nfunction BufferReader (buffer) {\n this.buffer = buffer\n this.offset = 0\n}\n\n// a super limited subset of the node buffer API\nBufferReader.prototype.nextInt16BE = function () {\n var value = this.buffer.readInt16BE(this.offset)\n this.offset += 2\n return value\n}\n\nBufferReader.prototype.nextUInt8 = function () {\n var value = this.buffer.readUInt8(this.offset)\n this.offset += 1\n return value\n}\n\n// EBML variable sized integers\nBufferReader.prototype.nextUIntV = function () {\n var v = vint(this.buffer, this.offset)\n this.offset += v.length\n return v.value\n}\n\nBufferReader.prototype.nextIntV = function () {\n var v = vint(this.buffer, this.offset, true)\n this.offset += v.length\n return v.value\n}\n\n// buffer slice\nBufferReader.prototype.nextBuffer = function (length) {\n var buffer = length\n ? this.buffer.slice(this.offset, this.offset + length)\n : this.buffer.slice(this.offset)\n this.offset += length || this.length\n return buffer\n}\n\n// remaining bytes to read\nObject.defineProperty(BufferReader.prototype, 'length', {\n get: function () { return this.buffer.length - this.offset }\n})\n\nmodule.exports = BufferReader\n","// https://github.com/themasch/node-ebml/blob/master/lib/ebml/tools.js\nmodule.exports = function (buffer, start, signed) {\n start = start || 0\n for (var length = 1; length <= 8; length++) {\n if (buffer[start] >= Math.pow(2, 8 - length)) {\n break\n }\n }\n if (length > 8) {\n throw new Error('Unrepresentable length: ' + length + ' ' +\n buffer.toString('hex', start, start + length))\n }\n if (start + length > buffer.length) {\n return null\n }\n var i\n var value = buffer[start] & (1 << (8 - length)) - 1\n for (i = 1; i < length; i++) {\n if (i === 7) {\n if (value >= Math.pow(2, 53 - 8) && buffer[start + 7] > 0) {\n return {\n length: length,\n value: -1\n }\n }\n }\n value *= Math.pow(2, 8)\n value += buffer[start + i]\n }\n if (signed) {\n value -= Math.pow(2, length * 7 - 1) - 1\n }\n return {\n length: length,\n value: value\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","// int64-buffer.js\n\n/*jshint -W018 */ // Confusing use of '!'.\n/*jshint -W030 */ // Expected an assignment or function call and instead saw an expression.\n/*jshint -W093 */ // Did you mean to return a conditional instead of an assignment?\n\nvar Uint64BE, Int64BE, Uint64LE, Int64LE;\n\n!function(exports) {\n // constants\n\n var UNDEFINED = \"undefined\";\n var BUFFER = (UNDEFINED !== typeof Buffer) && Buffer;\n var UINT8ARRAY = (UNDEFINED !== typeof Uint8Array) && Uint8Array;\n var ARRAYBUFFER = (UNDEFINED !== typeof ArrayBuffer) && ArrayBuffer;\n var ZERO = [0, 0, 0, 0, 0, 0, 0, 0];\n var isArray = Array.isArray || _isArray;\n var BIT32 = 4294967296;\n var BIT24 = 16777216;\n\n // storage class\n\n var storage; // Array;\n\n // generate classes\n\n Uint64BE = factory(\"Uint64BE\", true, true);\n Int64BE = factory(\"Int64BE\", true, false);\n Uint64LE = factory(\"Uint64LE\", false, true);\n Int64LE = factory(\"Int64LE\", false, false);\n\n // class factory\n\n function factory(name, bigendian, unsigned) {\n var posH = bigendian ? 0 : 4;\n var posL = bigendian ? 4 : 0;\n var pos0 = bigendian ? 0 : 3;\n var pos1 = bigendian ? 1 : 2;\n var pos2 = bigendian ? 2 : 1;\n var pos3 = bigendian ? 3 : 0;\n var fromPositive = bigendian ? fromPositiveBE : fromPositiveLE;\n var fromNegative = bigendian ? fromNegativeBE : fromNegativeLE;\n var proto = Int64.prototype;\n var isName = \"is\" + name;\n var _isInt64 = \"_\" + isName;\n\n // properties\n proto.buffer = void 0;\n proto.offset = 0;\n proto[_isInt64] = true;\n\n // methods\n proto.toNumber = toNumber;\n proto.toString = toString;\n proto.toJSON = toNumber;\n proto.toArray = toArray;\n\n // add .toBuffer() method only when Buffer available\n if (BUFFER) proto.toBuffer = toBuffer;\n\n // add .toArrayBuffer() method only when Uint8Array available\n if (UINT8ARRAY) proto.toArrayBuffer = toArrayBuffer;\n\n // isUint64BE, isInt64BE\n Int64[isName] = isInt64;\n\n // CommonJS\n exports[name] = Int64;\n\n return Int64;\n\n // constructor\n function Int64(buffer, offset, value, raddix) {\n if (!(this instanceof Int64)) return new Int64(buffer, offset, value, raddix);\n return init(this, buffer, offset, value, raddix);\n }\n\n // isUint64BE, isInt64BE\n function isInt64(b) {\n return !!(b && b[_isInt64]);\n }\n\n // initializer\n function init(that, buffer, offset, value, raddix) {\n if (UINT8ARRAY && ARRAYBUFFER) {\n if (buffer instanceof ARRAYBUFFER) buffer = new UINT8ARRAY(buffer);\n if (value instanceof ARRAYBUFFER) value = new UINT8ARRAY(value);\n }\n\n // Int64BE() style\n if (!buffer && !offset && !value && !storage) {\n // shortcut to initialize with zero\n that.buffer = newArray(ZERO, 0);\n return;\n }\n\n // Int64BE(value, raddix) style\n if (!isValidBuffer(buffer, offset)) {\n var _storage = storage || Array;\n raddix = offset;\n value = buffer;\n offset = 0;\n buffer = (storage === BUFFER) ? BUFFER.alloc(8) : new _storage(8);\n }\n\n that.buffer = buffer;\n that.offset = offset |= 0;\n\n // Int64BE(buffer, offset) style\n if (UNDEFINED === typeof value) return;\n\n // Int64BE(buffer, offset, value, raddix) style\n if (\"string\" === typeof value) {\n fromString(buffer, offset, value, raddix || 10);\n } else if (isValidBuffer(value, raddix)) {\n fromArray(buffer, offset, value, raddix);\n } else if (\"number\" === typeof raddix) {\n writeInt32(buffer, offset + posH, value); // high\n writeInt32(buffer, offset + posL, raddix); // low\n } else if (value > 0) {\n fromPositive(buffer, offset, value); // positive\n } else if (value < 0) {\n fromNegative(buffer, offset, value); // negative\n } else {\n fromArray(buffer, offset, ZERO, 0); // zero, NaN and others\n }\n }\n\n function fromString(buffer, offset, str, raddix) {\n var pos = 0;\n var len = str.length;\n var high = 0;\n var low = 0;\n if (str[0] === \"-\") pos++;\n var sign = pos;\n while (pos < len) {\n var chr = parseInt(str[pos++], raddix);\n if (!(chr >= 0)) break; // NaN\n low = low * raddix + chr;\n high = high * raddix + Math.floor(low / BIT32);\n low %= BIT32;\n }\n if (sign) {\n high = ~high;\n if (low) {\n low = BIT32 - low;\n } else {\n high++;\n }\n }\n writeInt32(buffer, offset + posH, high);\n writeInt32(buffer, offset + posL, low);\n }\n\n function toNumber() {\n var buffer = this.buffer;\n var offset = this.offset;\n var high = readInt32(buffer, offset + posH);\n var low = readInt32(buffer, offset + posL);\n if (!unsigned) high |= 0; // a trick to get signed\n return high ? (high * BIT32 + low) : low;\n }\n\n function toString(radix) {\n var buffer = this.buffer;\n var offset = this.offset;\n var high = readInt32(buffer, offset + posH);\n var low = readInt32(buffer, offset + posL);\n var str = \"\";\n var sign = !unsigned && (high & 0x80000000);\n if (sign) {\n high = ~high;\n low = BIT32 - low;\n }\n radix = radix || 10;\n while (1) {\n var mod = (high % radix) * BIT32 + low;\n high = Math.floor(high / radix);\n low = Math.floor(mod / radix);\n str = (mod % radix).toString(radix) + str;\n if (!high && !low) break;\n }\n if (sign) {\n str = \"-\" + str;\n }\n return str;\n }\n\n function writeInt32(buffer, offset, value) {\n buffer[offset + pos3] = value & 255;\n value = value >> 8;\n buffer[offset + pos2] = value & 255;\n value = value >> 8;\n buffer[offset + pos1] = value & 255;\n value = value >> 8;\n buffer[offset + pos0] = value & 255;\n }\n\n function readInt32(buffer, offset) {\n return (buffer[offset + pos0] * BIT24) +\n (buffer[offset + pos1] << 16) +\n (buffer[offset + pos2] << 8) +\n buffer[offset + pos3];\n }\n }\n\n function toArray(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n storage = null; // Array\n\n if (raw !== false && isArray(buffer)) {\n return (buffer.length === 8) ? buffer : buffer.slice(offset, offset + 8);\n }\n\n return newArray(buffer, offset);\n }\n\n function toBuffer(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n storage = BUFFER;\n\n if (raw !== false && BUFFER.isBuffer(buffer)) {\n return (buffer.length === 8) ? buffer : buffer.slice(offset, offset + 8);\n }\n\n // Buffer.from(arraybuffer) available since Node v4.5.0\n // https://nodejs.org/en/blog/release/v4.5.0/\n return BUFFER.from(toArrayBuffer.call(this, raw));\n }\n\n function toArrayBuffer(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n var arrbuf = buffer.buffer;\n storage = UINT8ARRAY;\n\n // arrbuf.slice() ignores buffer.offset until Node v8.0.0\n if (raw !== false && !buffer.offset && (arrbuf instanceof ARRAYBUFFER)) {\n return (arrbuf.byteLength === 8) ? arrbuf : arrbuf.slice(offset, offset + 8);\n }\n\n var dest = new UINT8ARRAY(8);\n fromArray(dest, 0, buffer, offset);\n return dest.buffer;\n }\n\n function isValidBuffer(buffer, offset) {\n var len = buffer && buffer.length;\n offset |= 0;\n return len && (offset + 8 <= len) && (\"string\" !== typeof buffer[offset]);\n }\n\n function fromArray(destbuf, destoff, srcbuf, srcoff) {\n destoff |= 0;\n srcoff |= 0;\n for (var i = 0; i < 8; i++) {\n destbuf[destoff++] = srcbuf[srcoff++] & 255;\n }\n }\n\n function newArray(buffer, offset) {\n return Array.prototype.slice.call(buffer, offset, offset + 8);\n }\n\n function fromPositiveBE(buffer, offset, value) {\n var pos = offset + 8;\n while (pos > offset) {\n buffer[--pos] = value & 255;\n value /= 256;\n }\n }\n\n function fromNegativeBE(buffer, offset, value) {\n var pos = offset + 8;\n value++;\n while (pos > offset) {\n buffer[--pos] = ((-value) & 255) ^ 255;\n value /= 256;\n }\n }\n\n function fromPositiveLE(buffer, offset, value) {\n var end = offset + 8;\n while (offset < end) {\n buffer[offset++] = value & 255;\n value /= 256;\n }\n }\n\n function fromNegativeLE(buffer, offset, value) {\n var end = offset + 8;\n value++;\n while (offset < end) {\n buffer[offset++] = ((-value) & 255) ^ 255;\n value /= 256;\n }\n }\n\n // https://github.com/retrofox/is-array\n function _isArray(val) {\n return !!val && \"[object Array]\" == Object.prototype.toString.call(val);\n }\n\n}(typeof exports === 'object' && typeof exports.nodeName !== 'string' ? exports : (this || {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar int64_buffer_1 = require(\"int64-buffer\");\nvar tools_1 = require(\"./tools\");\nvar tools = require(\"./tools\");\nvar ebmlID_1 = require(\"./ebmlID\");\nvar State;\n(function (State) {\n State[State[\"STATE_TAG\"] = 1] = \"STATE_TAG\";\n State[State[\"STATE_SIZE\"] = 2] = \"STATE_SIZE\";\n State[State[\"STATE_CONTENT\"] = 3] = \"STATE_CONTENT\";\n})(State || (State = {}));\nvar EBMLDecoder = /** @class */ (function () {\n function EBMLDecoder() {\n this._buffer = new tools_1.Buffer(0);\n this._tag_stack = [];\n this._state = State.STATE_TAG;\n this._cursor = 0;\n this._total = 0;\n this._schema = ebmlID_1.byEbmlID;\n this._result = [];\n }\n EBMLDecoder.prototype.decode = function (chunk) {\n this.readChunk(chunk);\n var diff = this._result;\n this._result = [];\n return diff;\n };\n EBMLDecoder.prototype.readChunk = function (chunk) {\n // 読みかけの(読めなかった) this._buffer と 新しい chunk を合わせて読み直す\n this._buffer = tools.concat([this._buffer, new tools_1.Buffer(chunk)]);\n while (this._cursor < this._buffer.length) {\n // console.log(this._cursor, this._total, this._tag_stack);\n if (this._state === State.STATE_TAG && !this.readTag()) {\n break;\n }\n if (this._state === State.STATE_SIZE && !this.readSize()) {\n break;\n }\n if (this._state === State.STATE_CONTENT && !this.readContent()) {\n break;\n }\n }\n };\n EBMLDecoder.prototype.getSchemaInfo = function (tagNum) {\n return this._schema[tagNum] || {\n name: \"unknown\",\n level: -1,\n type: \"unknown\",\n description: \"unknown\"\n };\n };\n /**\n * vint された parsing tag\n * @return - return false when waiting for more data\n */\n EBMLDecoder.prototype.readTag = function () {\n // tag.length が buffer の外にある\n if (this._cursor >= this._buffer.length) {\n return false;\n }\n // read ebml id vint without first byte\n var tag = (0, tools_1.readVint)(this._buffer, this._cursor);\n // tag が読めなかった\n if (tag == null) {\n return false;\n }\n // >>>>>>>>>\n // tag 識別子\n //const tagStr = this._buffer.toString(\"hex\", this._cursor, this._cursor + tag.length);\n //const tagNum = parseInt(tagStr, 16);\n // 上と等価\n var buf = this._buffer.slice(this._cursor, this._cursor + tag.length);\n var tagNum = buf.reduce(function (o, v, i, arr) { return o + v * Math.pow(16, 2 * (arr.length - 1 - i)); }, 0);\n var schema = this.getSchemaInfo(tagNum);\n var tagObj = {\n EBML_ID: tagNum.toString(16),\n schema: schema,\n type: schema.type,\n name: schema.name,\n level: schema.level,\n tagStart: this._total,\n tagEnd: this._total + tag.length,\n sizeStart: this._total + tag.length,\n sizeEnd: null,\n dataStart: null,\n dataEnd: null,\n dataSize: null,\n data: null\n };\n // | tag: vint | size: vint | data: Buffer(size) |\n this._tag_stack.push(tagObj);\n // <<<<<<<<\n // ポインタを進める\n this._cursor += tag.length;\n this._total += tag.length;\n // 読み込み状態変更\n this._state = State.STATE_SIZE;\n return true;\n };\n /**\n * vint された現在のタグの内容の大きさを読み込む\n * @return - return false when waiting for more data\n */\n EBMLDecoder.prototype.readSize = function () {\n // tag.length が buffer の外にある\n if (this._cursor >= this._buffer.length) {\n return false;\n }\n // read ebml datasize vint without first byte\n var size = (0, tools_1.readVint)(this._buffer, this._cursor);\n // まだ読めない\n if (size == null) {\n return false;\n }\n // >>>>>>>>>\n // current tag の data size 決定\n var tagObj = this._tag_stack[this._tag_stack.length - 1];\n tagObj.sizeEnd = tagObj.sizeStart + size.length;\n tagObj.dataStart = tagObj.sizeEnd;\n tagObj.dataSize = size.value;\n if (size.value === -1) {\n // unknown size\n tagObj.dataEnd = -1;\n if (tagObj.type === \"m\") {\n tagObj.unknownSize = true;\n }\n }\n else {\n tagObj.dataEnd = tagObj.sizeEnd + size.value;\n }\n // <<<<<<<<\n // ポインタを進める\n this._cursor += size.length;\n this._total += size.length;\n this._state = State.STATE_CONTENT;\n return true;\n };\n /**\n * データ読み込み\n */\n EBMLDecoder.prototype.readContent = function () {\n var tagObj = this._tag_stack[this._tag_stack.length - 1];\n // master element は子要素を持つので生データはない\n if (tagObj.type === 'm') {\n // console.log('content should be tags');\n tagObj.isEnd = false;\n this._result.push(tagObj);\n this._state = State.STATE_TAG;\n // この Mastert Element は空要素か\n if (tagObj.dataSize === 0) {\n // 即座に終了タグを追加\n var elm = Object.assign({}, tagObj, { isEnd: true });\n this._result.push(elm);\n this._tag_stack.pop(); // スタックからこのタグを捨てる\n }\n return true;\n }\n // waiting for more data\n if (this._buffer.length < this._cursor + tagObj.dataSize) {\n return false;\n }\n // タグの中身の生データ\n var data = this._buffer.slice(this._cursor, this._cursor + tagObj.dataSize);\n // 読み終わったバッファを捨てて読み込んでいる部分のバッファのみ残す\n this._buffer = this._buffer.slice(this._cursor + tagObj.dataSize);\n tagObj.data = data;\n // >>>>>>>>>\n switch (tagObj.type) {\n //case \"m\": break;\n // Master-Element - contains other EBML sub-elements of the next lower level\n case \"u\":\n tagObj.value = data.readUIntBE(0, data.length);\n break;\n // Unsigned Integer - Big-endian, any size from 1 to 8 octets\n case \"i\":\n tagObj.value = data.readIntBE(0, data.length);\n break;\n // Signed Integer - Big-endian, any size from 1 to 8 octets\n case \"f\":\n tagObj.value = tagObj.dataSize === 4 ? data.readFloatBE(0) :\n tagObj.dataSize === 8 ? data.readDoubleBE(0) :\n (console.warn(\"cannot read \".concat(tagObj.dataSize, \" octets float. failback to 0\")), 0);\n break;\n // Float - Big-endian, defined for 4 and 8 octets (32, 64 bits)\n case \"s\":\n tagObj.value = data.toString(\"ascii\");\n break; // ascii\n // Printable ASCII (0x20 to 0x7E), zero-padded when needed\n case \"8\":\n tagObj.value = data.toString(\"utf8\");\n break;\n // Unicode string, zero padded when needed (RFC 2279)\n case \"b\":\n tagObj.value = data;\n break;\n // Binary - not interpreted by the parser\n case \"d\":\n tagObj.value = (0, tools_1.convertEBMLDateToJSDate)(new int64_buffer_1.Int64BE(data).toNumber());\n break;\n // nano second; Date.UTC(2001,1,1,0,0,0,0) === 980985600000\n // Date - signed 8 octets integer in nanoseconds with 0 indicating \n // the precise beginning of the millennium (at 2001-01-01T00:00:00,000000000 UTC)\n }\n if (tagObj.value === null) {\n throw new Error(\"unknown tag type:\" + tagObj.type);\n }\n this._result.push(tagObj);\n // <<<<<<<<\n // ポインタを進める\n this._total += tagObj.dataSize;\n // タグ待ちモードに変更\n this._state = State.STATE_TAG;\n this._cursor = 0;\n this._tag_stack.pop(); // remove the object from the stack\n while (this._tag_stack.length > 0) {\n var topEle = this._tag_stack[this._tag_stack.length - 1];\n // 親が不定長サイズなので閉じタグは期待できない\n if (topEle.dataEnd < 0) {\n this._tag_stack.pop(); // 親タグを捨てる\n return true;\n }\n // 閉じタグの来るべき場所まで来たかどうか\n if (this._total < topEle.dataEnd) {\n break;\n }\n // 閉じタグを挿入すべきタイミングが来た\n if (topEle.type !== \"m\") {\n throw new Error(\"parent element is not master element\");\n }\n var elm = Object.assign({}, topEle, { isEnd: true });\n this._result.push(elm);\n this._tag_stack.pop();\n }\n return true;\n };\n return EBMLDecoder;\n}());\nexports.default = EBMLDecoder;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tools = require(\"./tools\");\nvar tools_1 = require(\"./tools\");\nvar ebmlID_1 = require(\"./ebmlID\");\nvar EBMLEncoder = /** @class */ (function () {\n function EBMLEncoder() {\n this._schema = ebmlID_1.byEbmlID;\n this._buffers = [];\n this._stack = [];\n }\n EBMLEncoder.prototype.encode = function (elms) {\n var _this = this;\n return tools.concat(elms.reduce(function (lst, elm) {\n return lst.concat(_this.encodeChunk(elm));\n }, [])).buffer;\n };\n EBMLEncoder.prototype.encodeChunk = function (elm) {\n if (elm.type === \"m\") {\n if (!elm.isEnd) {\n this.startTag(elm);\n }\n else {\n this.endTag(elm);\n }\n }\n else {\n // ensure that we are working with an internal `Buffer` instance\n elm.data = tools_1.Buffer.from(elm.data);\n this.writeTag(elm);\n }\n return this.flush();\n };\n EBMLEncoder.prototype.flush = function () {\n var ret = this._buffers;\n this._buffers = [];\n return ret;\n };\n EBMLEncoder.prototype.getSchemaInfo = function (tagName) {\n var tagNums = Object.keys(this._schema).map(Number);\n for (var i = 0; i < tagNums.length; i++) {\n var tagNum = tagNums[i];\n if (this._schema[tagNum].name === tagName) {\n return new tools_1.Buffer(tagNum.toString(16), 'hex');\n }\n }\n return null;\n };\n EBMLEncoder.prototype.writeTag = function (elm) {\n var tagName = elm.name;\n var tagId = this.getSchemaInfo(tagName);\n var tagData = elm.data;\n if (tagId == null) {\n throw new Error('No schema entry found for ' + tagName);\n }\n var data = tools.encodeTag(tagId, tagData);\n /**\n * 親要素が閉じタグあり(isEnd)なら閉じタグが来るまで待つ(children queに入る)\n */\n if (this._stack.length > 0) {\n var last = this._stack[this._stack.length - 1];\n last.children.push({\n tagId: tagId,\n elm: elm,\n children: [],\n data: data\n });\n return;\n }\n this._buffers = this._buffers.concat(data);\n return;\n };\n EBMLEncoder.prototype.startTag = function (elm) {\n var tagName = elm.name;\n var tagId = this.getSchemaInfo(tagName);\n if (tagId == null) {\n throw new Error('No schema entry found for ' + tagName);\n }\n /**\n * 閉じタグ不定長の場合はスタックに積まずに即時バッファに書き込む\n */\n if (elm.unknownSize) {\n var data = tools.encodeTag(tagId, new tools_1.Buffer(0), elm.unknownSize);\n this._buffers = this._buffers.concat(data);\n return;\n }\n var tag = {\n tagId: tagId,\n elm: elm,\n children: [],\n data: null\n };\n if (this._stack.length > 0) {\n this._stack[this._stack.length - 1].children.push(tag);\n }\n this._stack.push(tag);\n };\n EBMLEncoder.prototype.endTag = function (elm) {\n var tagName = elm.name;\n var tag = this._stack.pop();\n if (tag == null) {\n throw new Error(\"EBML structure is broken\");\n }\n if (tag.elm.name !== elm.name) {\n throw new Error(\"EBML structure is broken\");\n }\n var childTagDataBuffers = tag.children.reduce(function (lst, child) {\n if (child.data === null) {\n throw new Error(\"EBML structure is broken\");\n }\n return lst.concat(child.data);\n }, []);\n var childTagDataBuffer = tools.concat(childTagDataBuffers);\n if (tag.elm.type === \"m\") {\n tag.data = tools.encodeTag(tag.tagId, childTagDataBuffer, tag.elm.unknownSize);\n }\n else {\n tag.data = tools.encodeTag(tag.tagId, childTagDataBuffer);\n }\n if (this._stack.length < 1) {\n this._buffers = this._buffers.concat(tag.data);\n }\n };\n return EBMLEncoder;\n}());\nexports.default = EBMLEncoder;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar events_1 = require(\"events\");\nvar tools = require(\"./tools\");\n/**\n * This is an informal code for reference.\n * EBMLReader is a class for getting information to enable seeking Webm recorded by MediaRecorder.\n * So please do not use for regular WebM files.\n */\nvar EBMLReader = /** @class */ (function (_super) {\n __extends(EBMLReader, _super);\n function EBMLReader() {\n var _this = _super.call(this) || this;\n _this.logGroup = \"\";\n _this.hasLoggingStarted = false;\n _this.metadataloaded = false;\n _this.chunks = [];\n _this.stack = [];\n _this.segmentOffset = 0;\n _this.last2SimpleBlockVideoTrackTimecode = [0, 0];\n _this.last2SimpleBlockAudioTrackTimecode = [0, 0];\n _this.lastClusterTimecode = 0;\n _this.lastClusterPosition = 0;\n _this.timecodeScale = 1000000; // webm default TimecodeScale is 1ms\n _this.metadataSize = 0;\n _this.metadatas = [];\n _this.cues = [];\n _this.firstVideoBlockRead = false;\n _this.firstAudioBlockRead = false;\n _this.currentTrack = { TrackNumber: -1, TrackType: -1, DefaultDuration: null, CodecDelay: null };\n _this.trackTypes = [];\n _this.trackDefaultDuration = [];\n _this.trackCodecDelay = [];\n _this.trackInfo = { type: \"nothing\" };\n _this.ended = false;\n _this.logging = false;\n _this.use_duration_every_simpleblock = false;\n _this.use_webp = false;\n _this.use_segment_info = true;\n _this.drop_default_duration = true;\n return _this;\n }\n /**\n * emit final state.\n */\n EBMLReader.prototype.stop = function () {\n this.ended = true;\n this.emit_segment_info();\n // clean up any unclosed Master Elements at the end of the stream.\n while (this.stack.length) {\n this.stack.pop();\n if (this.logging) {\n console.groupEnd();\n }\n }\n // close main group if set, logging is enabled, and has actually logged anything.\n if (this.logging && this.hasLoggingStarted && this.logGroup) {\n console.groupEnd();\n }\n };\n /**\n * emit chunk info\n */\n EBMLReader.prototype.emit_segment_info = function () {\n var data = this.chunks;\n this.chunks = [];\n if (!this.metadataloaded) {\n this.metadataloaded = true;\n this.metadatas = data;\n var videoTrackNum = this.trackTypes.indexOf(1); // find first video track\n var audioTrackNum = this.trackTypes.indexOf(2); // find first audio track\n this.trackInfo = videoTrackNum >= 0 && audioTrackNum >= 0 ? { type: \"both\", trackNumber: videoTrackNum }\n : videoTrackNum >= 0 ? { type: \"video\", trackNumber: videoTrackNum }\n : audioTrackNum >= 0 ? { type: \"audio\", trackNumber: audioTrackNum }\n : { type: \"nothing\" };\n if (!this.use_segment_info) {\n return;\n }\n this.emit(\"metadata\", { data: data, metadataSize: this.metadataSize });\n }\n else {\n if (!this.use_segment_info) {\n return;\n }\n var timecode = this.lastClusterTimecode;\n var duration = this.duration;\n var timecodeScale = this.timecodeScale;\n this.emit(\"cluster\", { timecode: timecode, data: data });\n this.emit(\"duration\", { timecodeScale: timecodeScale, duration: duration });\n }\n };\n EBMLReader.prototype.read = function (elm) {\n var _this = this;\n var drop = false;\n if (this.ended) {\n // reader is finished\n return;\n }\n if (elm.type === \"m\") {\n // 閉じタグの自動挿入\n if (elm.isEnd) {\n this.stack.pop();\n }\n else {\n var parent_1 = this.stack[this.stack.length - 1];\n if (parent_1 != null && parent_1.level >= elm.level) {\n // 閉じタグなしでレベルが下がったら閉じタグを挿入\n this.stack.pop();\n // From http://w3c.github.io/media-source/webm-byte-stream-format.html#webm-media-segments\n // This fixes logging for webm streams with Cluster of unknown length and no Cluster closing elements.\n if (this.logging) {\n console.groupEnd();\n }\n parent_1.dataEnd = elm.dataEnd;\n parent_1.dataSize = elm.dataEnd - parent_1.dataStart;\n parent_1.unknownSize = false;\n var o = Object.assign({}, parent_1, { name: parent_1.name, type: parent_1.type, isEnd: true });\n this.chunks.push(o);\n }\n this.stack.push(elm);\n }\n }\n if (elm.type === \"m\" && elm.name == \"Segment\") {\n if (this.segmentOffset != 0) {\n console.warn(\"Multiple segments detected!\");\n }\n this.segmentOffset = elm.dataStart;\n this.emit(\"segment_offset\", this.segmentOffset);\n }\n else if (elm.type === \"b\" && elm.name === \"SimpleBlock\") {\n var _a = tools.ebmlBlock(elm.data), timecode = _a.timecode, trackNumber = _a.trackNumber, frames_1 = _a.frames;\n if (this.trackTypes[trackNumber] === 1) { // trackType === 1 => video track\n if (!this.firstVideoBlockRead) {\n this.firstVideoBlockRead = true;\n if (this.trackInfo.type === \"both\" || this.trackInfo.type === \"video\") {\n var CueTime = this.lastClusterTimecode + timecode;\n this.cues.push({ CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n this.emit(\"cue_info\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: this.lastClusterTimecode });\n this.emit(\"cue\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n }\n }\n this.last2SimpleBlockVideoTrackTimecode = [this.last2SimpleBlockVideoTrackTimecode[1], timecode];\n }\n else if (this.trackTypes[trackNumber] === 2) { // trackType === 2 => audio track\n if (!this.firstAudioBlockRead) {\n this.firstAudioBlockRead = true;\n if (this.trackInfo.type === \"audio\") {\n var CueTime = this.lastClusterTimecode + timecode;\n this.cues.push({ CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n this.emit(\"cue_info\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: this.lastClusterTimecode });\n this.emit(\"cue\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n }\n }\n this.last2SimpleBlockAudioTrackTimecode = [this.last2SimpleBlockAudioTrackTimecode[1], timecode];\n }\n if (this.use_duration_every_simpleblock) {\n this.emit(\"duration\", { timecodeScale: this.timecodeScale, duration: this.duration });\n }\n if (this.use_webp) {\n frames_1.forEach(function (frame) {\n var startcode = frame.slice(3, 6).toString(\"hex\");\n if (startcode !== \"9d012a\") {\n return;\n }\n ; // VP8 の場合\n var webpBuf = tools.VP8BitStreamToRiffWebPBuffer(frame);\n var webp = new Blob([webpBuf], { type: \"image/webp\" });\n var currentTime = _this.duration;\n _this.emit(\"webp\", { currentTime: currentTime, webp: webp });\n });\n }\n }\n else if (elm.type === \"m\" && elm.name === \"Cluster\" && elm.isEnd === false) {\n this.firstVideoBlockRead = false;\n this.firstAudioBlockRead = false;\n this.emit_segment_info();\n this.emit(\"cluster_ptr\", elm.tagStart);\n this.lastClusterPosition = elm.tagStart;\n }\n else if (elm.type === \"u\" && elm.name === \"Timecode\") {\n this.lastClusterTimecode = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"TimecodeScale\") {\n this.timecodeScale = elm.value;\n }\n else if (elm.type === \"m\" && elm.name === \"TrackEntry\") {\n if (elm.isEnd) {\n this.trackTypes[this.currentTrack.TrackNumber] = this.currentTrack.TrackType;\n this.trackDefaultDuration[this.currentTrack.TrackNumber] = this.currentTrack.DefaultDuration;\n this.trackCodecDelay[this.currentTrack.TrackNumber] = this.currentTrack.CodecDelay;\n }\n else {\n this.currentTrack = { TrackNumber: -1, TrackType: -1, DefaultDuration: null, CodecDelay: null };\n }\n }\n else if (elm.type === \"u\" && elm.name === \"TrackType\") {\n this.currentTrack.TrackType = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"TrackNumber\") {\n this.currentTrack.TrackNumber = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"CodecDelay\") {\n this.currentTrack.CodecDelay = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"DefaultDuration\") {\n // media source api は DefaultDuration を計算するとバグる。\n // https://bugs.chromium.org/p/chromium/issues/detail?id=606000#c22\n // chrome 58 ではこれを回避するために DefaultDuration 要素を抜き取った。\n // chrome 58 以前でもこのタグを抜き取ることで回避できる\n if (this.drop_default_duration) {\n console.warn(\"DefaultDuration detected!, remove it\");\n drop = true;\n }\n else {\n this.currentTrack.DefaultDuration = elm.value;\n }\n }\n else if (elm.name === \"unknown\") {\n console.warn(elm);\n }\n if (!this.metadataloaded && elm.dataEnd > 0) {\n this.metadataSize = elm.dataEnd;\n }\n if (!drop) {\n this.chunks.push(elm);\n }\n if (this.logging) {\n this.put(elm);\n }\n };\n Object.defineProperty(EBMLReader.prototype, \"duration\", {\n /**\n * DefaultDuration が定義されている場合は最後のフレームのdurationも考慮する\n * 単位 timecodeScale\n *\n * !!! if you need duration with seconds !!!\n * ```js\n * const nanosec = reader.duration * reader.timecodeScale;\n * const sec = nanosec / 1000 / 1000 / 1000;\n * ```\n */\n get: function () {\n if (this.trackInfo.type === \"nothing\") {\n console.warn(\"no video, no audio track\");\n return 0;\n }\n // defaultDuration は 生の nano sec\n var defaultDuration = 0;\n // nanoseconds\n var codecDelay = 0;\n var lastTimecode = 0;\n var _defaultDuration = this.trackDefaultDuration[this.trackInfo.trackNumber];\n if (typeof _defaultDuration === \"number\") {\n defaultDuration = _defaultDuration;\n }\n else {\n // https://bugs.chromium.org/p/chromium/issues/detail?id=606000#c22\n // default duration がないときに使う delta\n if (this.trackInfo.type === \"both\") {\n if (this.last2SimpleBlockAudioTrackTimecode[1] > this.last2SimpleBlockVideoTrackTimecode[1]) {\n // audio diff\n defaultDuration = (this.last2SimpleBlockAudioTrackTimecode[1] - this.last2SimpleBlockAudioTrackTimecode[0]) * this.timecodeScale;\n // audio delay\n var delay = this.trackCodecDelay[this.trackTypes.indexOf(2)]; // 2 => audio\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n // audio timecode\n lastTimecode = this.last2SimpleBlockAudioTrackTimecode[1];\n }\n else {\n // video diff\n defaultDuration = (this.last2SimpleBlockVideoTrackTimecode[1] - this.last2SimpleBlockVideoTrackTimecode[0]) * this.timecodeScale;\n // video delay\n var delay = this.trackCodecDelay[this.trackTypes.indexOf(1)]; // 1 => video\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n // video timecode\n lastTimecode = this.last2SimpleBlockVideoTrackTimecode[1];\n }\n }\n else if (this.trackInfo.type === \"video\") {\n defaultDuration = (this.last2SimpleBlockVideoTrackTimecode[1] - this.last2SimpleBlockVideoTrackTimecode[0]) * this.timecodeScale;\n var delay = this.trackCodecDelay[this.trackInfo.trackNumber]; // 2 => audio\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n lastTimecode = this.last2SimpleBlockVideoTrackTimecode[1];\n }\n else if (this.trackInfo.type === \"audio\") {\n defaultDuration = (this.last2SimpleBlockAudioTrackTimecode[1] - this.last2SimpleBlockAudioTrackTimecode[0]) * this.timecodeScale;\n var delay = this.trackCodecDelay[this.trackInfo.trackNumber]; // 1 => video\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n lastTimecode = this.last2SimpleBlockAudioTrackTimecode[1];\n } // else { not reached }\n }\n // convert to timecodescale\n var duration_nanosec = ((this.lastClusterTimecode + lastTimecode) * this.timecodeScale) + defaultDuration - codecDelay;\n var duration = duration_nanosec / this.timecodeScale;\n return Math.floor(duration);\n },\n enumerable: false,\n configurable: true\n });\n EBMLReader.prototype.addListener = function (event, listener) {\n return _super.prototype.addListener.call(this, event, listener);\n };\n EBMLReader.prototype.put = function (elm) {\n if (!this.hasLoggingStarted) {\n this.hasLoggingStarted = true;\n if (this.logging && this.logGroup) {\n console.groupCollapsed(this.logGroup);\n }\n }\n if (elm.type === \"m\") {\n if (elm.isEnd) {\n console.groupEnd();\n }\n else {\n console.group(elm.name + \":\" + elm.tagStart);\n }\n }\n else if (elm.type === \"b\") {\n // for debug\n //if(elm.name === \"SimpleBlock\"){\n //const o = EBML.tools.ebmlBlock(elm.value);\n //console.log(elm.name, elm.type, o.trackNumber, o.timecode);\n //}else{\n console.log(elm.name, elm.type);\n //}\n }\n else {\n console.log(elm.name, elm.tagStart, elm.type, elm.value);\n }\n };\n return EBMLReader;\n}(events_1.EventEmitter));\nexports.default = EBMLReader;\n;\n;\n;\n;\n","\"use strict\";\n// source: https://www.matroska.org/technical/elements.html\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.byEbmlID = void 0;\nexports.byEbmlID = {\n 0x80: {\n name: \"ChapterDisplay\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains all possible strings to use for the chapter display.\"\n },\n 0x83: {\n name: \"TrackType\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"1-254\",\n description: \"A set of track types coded on 8 bits (1: video, 2: audio, 3: complex, 0x10: logo, 0x11: subtitle, 0x12: buttons, 0x20: control).\"\n },\n 0x85: {\n name: \"ChapString\",\n cppname: \"ChapterString\",\n level: 5,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: true,\n description: \"Contains the string to use as the chapter atom.\"\n },\n 0x86: {\n name: \"CodecID\",\n level: 3,\n type: \"s\",\n mandatory: true,\n minver: 1,\n description: \"An ID corresponding to the codec, see the codec page for more info.\"\n },\n 0x88: {\n name: \"FlagDefault\",\n cppname: \"TrackFlagDefault\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if that track (audio, video or subs) SHOULD be active if no language found matches the user preference. (1 bit)\"\n },\n 0x89: {\n name: \"ChapterTrackNumber\",\n level: 5,\n type: \"u\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"UID of the Track to apply this chapter too. In the absense of a control track, choosing this chapter will select the listed Tracks and deselect unlisted tracks. Absense of this element indicates that the Chapter should be applied to any currently used Tracks.\"\n },\n 0x91: {\n name: \"ChapterTimeStart\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: true,\n description: \"Timestamp of the start of Chapter (not scaled).\"\n },\n 0x92: {\n name: \"ChapterTimeEnd\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"Timestamp of the end of Chapter (timestamp excluded, not scaled).\"\n },\n 0x96: {\n name: \"CueRefTime\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: false,\n description: \"Timestamp of the referenced Block.\"\n },\n 0x97: {\n name: \"CueRefCluster\",\n level: 5,\n type: \"u\",\n mandatory: true,\n webm: false,\n description: \"The Position of the Cluster containing the referenced Block.\"\n },\n 0x98: {\n name: \"ChapterFlagHidden\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If a chapter is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)\"\n },\n 0x4254: {\n name: \"ContentCompAlgo\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\", \"\", \"\" ],\n // \"del\": [ \"1 - bzlib,\", \"2 - lzo1x\" ],\n description: \"The compression algorithm used. Algorithms that have been specified so far are: 0 - zlib, 3 - Header Stripping\"\n },\n 0x4255: {\n name: \"ContentCompSettings\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"Settings that might be needed by the decompressor. For Header Stripping (ContentCompAlgo=3), the bytes that were removed from the beggining of each frames of the track.\"\n },\n 0x4282: {\n name: \"DocType\",\n level: 1,\n type: \"s\",\n mandatory: true,\n \"default\": \"matroska\",\n minver: 1,\n description: \"A string that describes the type of document that follows this EBML header. 'matroska' in our case or 'webm' for webm files.\"\n },\n 0x4285: {\n name: \"DocTypeReadVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The minimum DocType version an interpreter has to support to read this file.\"\n },\n 0x4286: {\n name: \"EBMLVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The version of EBML parser used to create the file.\"\n },\n 0x4287: {\n name: \"DocTypeVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The version of DocType interpreter used to create the file.\"\n },\n 0x4444: {\n name: \"SegmentFamily\",\n level: 2,\n type: \"b\",\n multiple: true,\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A randomly generated unique ID that all segments related to each other must use (128 bits).\"\n },\n 0x4461: {\n name: \"DateUTC\",\n level: 2,\n type: \"d\",\n minver: 1,\n description: \"Date of the origin of timestamp (value 0), i.e. production date.\"\n },\n 0x4484: {\n name: \"TagDefault\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"Indication to know if this is the default/original language to use for the given tag. (1 bit)\"\n },\n 0x4485: {\n name: \"TagBinary\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"The values of the Tag if it is binary. Note that this cannot be used in the same SimpleTag as TagString.\"\n },\n 0x4487: {\n name: \"TagString\",\n level: 4,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"The value of the Element.\"\n },\n 0x4489: {\n name: \"Duration\",\n level: 2,\n type: \"f\",\n minver: 1,\n range: \"> 0\",\n description: \"Duration of the segment (based on TimecodeScale).\"\n },\n 0x4598: {\n name: \"ChapterFlagEnabled\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"Specify wether the chapter is enabled. It can be enabled/disabled by a Control Track. When disabled, the movie should skip all the content between the TimeStart and TimeEnd of this chapter (see flag notes). (1 bit)\"\n },\n 0x4660: {\n name: \"FileMimeType\",\n level: 3,\n type: \"s\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"MIME type of the file.\"\n },\n 0x4661: {\n name: \"FileUsedStartTime\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX font extension\"\n },\n 0x4662: {\n name: \"FileUsedEndTime\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX font extension\"\n },\n 0x4675: {\n name: \"FileReferral\",\n level: 3,\n type: \"b\",\n webm: false,\n description: \"A binary value that a track/codec can refer to when the attachment is needed.\"\n },\n 0x5031: {\n name: \"ContentEncodingOrder\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"Tells when this modification was used during encoding/muxing starting with 0 and counting upwards. The decoder/demuxer has to start with the highest order number it finds and work its way down. This value has to be unique over all ContentEncodingOrder elements in the segment.\"\n },\n 0x5032: {\n name: \"ContentEncodingScope\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n // \"br\": [ \"\", \"\", \"\" ],\n description: \"A bit field that describes which elements have been modified in this way. Values (big endian) can be OR'ed. Possible values: 1 - all frame contents, 2 - the track's private data, 4 - the next ContentEncoding (next ContentEncodingOrder. Either the data inside ContentCompression and/or ContentEncryption)\"\n },\n 0x5033: {\n name: \"ContentEncodingType\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\" ],\n description: \"A value describing what kind of transformation has been done. Possible values: 0 - compression, 1 - encryption\"\n },\n 0x5034: {\n name: \"ContentCompression\",\n level: 5,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings describing the compression used. Must be present if the value of ContentEncodingType is 0 and absent otherwise. Each block must be decompressable even if no previous block is available in order not to prevent seeking.\"\n },\n 0x5035: {\n name: \"ContentEncryption\",\n level: 5,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings describing the encryption used. Must be present if the value of ContentEncodingType is 1 and absent otherwise.\"\n },\n 0x5378: {\n name: \"CueBlockNumber\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 1,\n range: \"not 0\",\n description: \"Number of the Block in the specified Cluster.\"\n },\n 0x5654: {\n name: \"ChapterStringUID\",\n level: 4,\n type: \"8\",\n mandatory: false,\n minver: 3,\n webm: true,\n description: \"A unique string ID to identify the Chapter. Use for WebVTT cue identifier storage.\"\n },\n 0x5741: {\n name: \"WritingApp\",\n level: 2,\n type: \"8\",\n mandatory: true,\n minver: 1,\n description: \"Writing application (\\\"mkvmerge-0.3.3\\\").\"\n },\n 0x5854: {\n name: \"SilentTracks\",\n cppname: \"ClusterSilentTracks\",\n level: 2,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks on seeking. Then you should decide what track to use.\"\n },\n 0x6240: {\n name: \"ContentEncoding\",\n level: 4,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Settings for one content encoding like compression or encryption.\"\n },\n 0x6264: {\n name: \"BitDepth\",\n cppname: \"AudioBitDepth\",\n level: 4,\n type: \"u\",\n minver: 1,\n range: \"not 0\",\n description: \"Bits per sample, mostly used for PCM.\"\n },\n 0x6532: {\n name: \"SignedElement\",\n level: 3,\n type: \"b\",\n multiple: true,\n webm: false,\n description: \"An element ID whose data will be used to compute the signature.\"\n },\n 0x6624: {\n name: \"TrackTranslate\",\n level: 3,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"The track identification for the given Chapter Codec.\"\n },\n 0x6911: {\n name: \"ChapProcessCommand\",\n cppname: \"ChapterProcessCommand\",\n level: 5,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains all the commands associated to the Atom.\"\n },\n 0x6922: {\n name: \"ChapProcessTime\",\n cppname: \"ChapterProcessTime\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Defines when the process command should be handled (0: during the whole chapter, 1: before starting playback, 2: after playback of the chapter).\"\n },\n 0x6924: {\n name: \"ChapterTranslate\",\n level: 2,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"A tuple of corresponding ID used by chapter codecs to represent this segment.\"\n },\n 0x6933: {\n name: \"ChapProcessData\",\n cppname: \"ChapterProcessData\",\n level: 6,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Contains the command information. The data should be interpreted depending on the ChapProcessCodecID value. For ChapProcessCodecID = 1, the data correspond to the binary DVD cell pre/post commands.\"\n },\n 0x6944: {\n name: \"ChapProcess\",\n cppname: \"ChapterProcess\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains all the commands associated to the Atom.\"\n },\n 0x6955: {\n name: \"ChapProcessCodecID\",\n cppname: \"ChapterProcessCodecID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"Contains the type of the codec used for the processing. A value of 0 means native Matroska processing (to be defined), a value of 1 means the DVD command set is used. More codec IDs can be added later.\"\n },\n 0x7373: {\n name: \"Tag\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Element containing elements specific to Tracks/Chapters.\"\n },\n 0x7384: {\n name: \"SegmentFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"A filename corresponding to this segment.\"\n },\n 0x7446: {\n name: \"AttachmentLink\",\n cppname: \"TrackAttachmentLink\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"The UID of an attachment that is used by this codec.\"\n },\n 0x258688: {\n name: \"CodecName\",\n level: 3,\n type: \"8\",\n minver: 1,\n description: \"A human-readable string specifying the codec.\"\n },\n 0x18538067: {\n name: \"Segment\",\n level: \"0\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"This element contains all other top-level (level 1) elements. Typically a Matroska file is composed of 1 segment.\"\n },\n 0x447a: {\n name: \"TagLanguage\",\n level: 4,\n type: \"s\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": \"und\",\n description: \"Specifies the language of the tag specified, in the Matroska languages form.\"\n },\n 0x45a3: {\n name: \"TagName\",\n level: 4,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The name of the Tag that is going to be stored.\"\n },\n 0x67c8: {\n name: \"SimpleTag\",\n cppname: \"TagSimple\",\n level: 3,\n \"recursive\": \"1\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains general information about the target.\"\n },\n 0x63c6: {\n name: \"TagAttachmentUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Attachment(s) the tags belong to. If the value is 0 at this level, the tags apply to all the attachments in the Segment.\"\n },\n 0x63c4: {\n name: \"TagChapterUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Chapter(s) the tags belong to. If the value is 0 at this level, the tags apply to all chapters in the Segment.\"\n },\n 0x63c9: {\n name: \"TagEditionUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the EditionEntry(s) the tags belong to. If the value is 0 at this level, the tags apply to all editions in the Segment.\"\n },\n 0x63c5: {\n name: \"TagTrackUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Track(s) the tags belong to. If the value is 0 at this level, the tags apply to all tracks in the Segment.\"\n },\n 0x63ca: {\n name: \"TargetType\",\n cppname: \"TagTargetType\",\n level: 4,\n type: \"s\",\n minver: 1,\n webm: false,\n \"strong\": \"informational\",\n description: \"An string that can be used to display the logical level of the target like \\\"ALBUM\\\", \\\"TRACK\\\", \\\"MOVIE\\\", \\\"CHAPTER\\\", etc (see TargetType).\"\n },\n 0x68ca: {\n name: \"TargetTypeValue\",\n cppname: \"TagTargetTypeValue\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 50,\n description: \"A number to indicate the logical level of the target (see TargetType).\"\n },\n 0x63c0: {\n name: \"Targets\",\n cppname: \"TagTargets\",\n level: 3,\n type: \"m\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Contain all UIDs where the specified meta data apply. It is empty to describe everything in the segment.\"\n },\n 0x1254c367: {\n name: \"Tags\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Element containing elements specific to Tracks/Chapters. A list of valid tags can be found here.\"\n },\n 0x450d: {\n name: \"ChapProcessPrivate\",\n cppname: \"ChapterProcessPrivate\",\n level: 5,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"Some optional data attached to the ChapProcessCodecID information. For ChapProcessCodecID = 1, it is the \\\"DVD level\\\" equivalent.\"\n },\n 0x437e: {\n name: \"ChapCountry\",\n cppname: \"ChapterCountry\",\n level: 5,\n type: \"s\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"The countries corresponding to the string, same 2 octets as in Internet domains.\"\n },\n 0x437c: {\n name: \"ChapLanguage\",\n cppname: \"ChapterLanguage\",\n level: 5,\n type: \"s\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n \"default\": \"eng\",\n description: \"The languages corresponding to the string, in the bibliographic ISO-639-2 form.\"\n },\n 0x8f: {\n name: \"ChapterTrack\",\n level: 4,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"List of tracks on which the chapter applies. If this element is not present, all tracks apply\"\n },\n 0x63c3: {\n name: \"ChapterPhysicalEquiv\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"Specify the physical equivalent of this ChapterAtom like \\\"DVD\\\" (60) or \\\"SIDE\\\" (50), see complete list of values.\"\n },\n 0x6ebc: {\n name: \"ChapterSegmentEditionUID\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"The EditionUID to play from the segment linked in ChapterSegmentUID.\"\n },\n 0x6e67: {\n name: \"ChapterSegmentUID\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n range: \">0\",\n bytesize: 16,\n description: \"A segment to play in place of this chapter. Edition ChapterSegmentEditionUID should be used for this segment, otherwise no edition is used.\"\n },\n 0x73c4: {\n name: \"ChapterUID\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: true,\n range: \"not 0\",\n description: \"A unique ID to identify the Chapter.\"\n },\n 0xb6: {\n name: \"ChapterAtom\",\n level: 3,\n \"recursive\": \"1\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains the atom information to use as the chapter atom (apply to all tracks).\"\n },\n 0x45dd: {\n name: \"EditionFlagOrdered\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"Specify if the chapters can be defined multiple times and the order to play them is enforced. (1 bit)\"\n },\n 0x45db: {\n name: \"EditionFlagDefault\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If a flag is set (1) the edition should be used as the default one. (1 bit)\"\n },\n 0x45bd: {\n name: \"EditionFlagHidden\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If an edition is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)\"\n },\n 0x45bc: {\n name: \"EditionUID\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"A unique ID to identify the edition. It's useful for tagging an edition.\"\n },\n 0x45b9: {\n name: \"EditionEntry\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains all information about a segment edition.\"\n },\n 0x1043a770: {\n name: \"Chapters\",\n level: 1,\n type: \"m\",\n minver: 1,\n webm: true,\n description: \"A system to define basic menus and partition data. For more detailed information, look at the Chapters Explanation.\"\n },\n 0x46ae: {\n name: \"FileUID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"Unique ID representing the file, as random as possible.\"\n },\n 0x465c: {\n name: \"FileData\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The data of the file.\"\n },\n 0x466e: {\n name: \"FileName\",\n level: 3,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Filename of the attached file.\"\n },\n 0x467e: {\n name: \"FileDescription\",\n level: 3,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"A human-friendly name for the attached file.\"\n },\n 0x61a7: {\n name: \"AttachedFile\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"An attached file.\"\n },\n 0x1941a469: {\n name: \"Attachments\",\n level: 1,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Contain attached files.\"\n },\n 0xeb: {\n name: \"CueRefCodecState\",\n level: 5,\n type: \"u\",\n webm: false,\n \"default\": 0,\n description: \"The position of the Codec State corresponding to this referenced element. 0 means that the data is taken from the initial Track Entry.\"\n },\n 0x535f: {\n name: \"CueRefNumber\",\n level: 5,\n type: \"u\",\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n description: \"Number of the referenced Block of Track X in the specified Cluster.\"\n },\n 0xdb: {\n name: \"CueReference\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 2,\n webm: false,\n description: \"The Clusters containing the required referenced Blocks.\"\n },\n 0xea: {\n name: \"CueCodecState\",\n level: 4,\n type: \"u\",\n minver: 2,\n webm: false,\n \"default\": 0,\n description: \"The position of the Codec State corresponding to this Cue element. 0 means that the data is taken from the initial Track Entry.\"\n },\n 0xb2: {\n name: \"CueDuration\",\n level: 4,\n type: \"u\",\n mandatory: false,\n minver: 4,\n webm: false,\n description: \"The duration of the block according to the segment time base. If missing the track's DefaultDuration does not apply and no duration information is available in terms of the cues.\"\n },\n 0xf0: {\n name: \"CueRelativePosition\",\n level: 4,\n type: \"u\",\n mandatory: false,\n minver: 4,\n webm: false,\n description: \"The relative position of the referenced block inside the cluster with 0 being the first possible position for an element inside that cluster.\",\n position: \"clusterRelative\"\n },\n 0xf1: {\n name: \"CueClusterPosition\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"The position of the Cluster containing the required Block.\",\n position: \"segment\",\n },\n 0xf7: {\n name: \"CueTrack\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"The track for which a position is given.\"\n },\n 0xb7: {\n name: \"CueTrackPositions\",\n level: 3,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contain positions for different tracks corresponding to the timestamp.\"\n },\n 0xb3: {\n name: \"CueTime\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"Absolute timestamp according to the segment time base.\"\n },\n 0xbb: {\n name: \"CuePoint\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains all information relative to a seek point in the segment.\"\n },\n 0x1c53bb6b: {\n name: \"Cues\",\n level: 1,\n type: \"m\",\n minver: 1,\n description: \"A top-level element to speed seeking access. All entries are local to the segment. Should be mandatory for non \\\"live\\\" streams.\"\n },\n 0x47e6: {\n name: \"ContentSigHashAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\" ],\n description: \"The hash algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - SHA1-160 2 - MD5\"\n },\n 0x47e5: {\n name: \"ContentSigAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": \"\",\n description: \"The algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - RSA\"\n },\n 0x47e4: {\n name: \"ContentSigKeyID\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"This is the ID of the private key the data was signed with.\"\n },\n 0x47e3: {\n name: \"ContentSignature\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"A cryptographic signature of the contents.\"\n },\n 0x47e2: {\n name: \"ContentEncKeyID\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"For public key algorithms this is the ID of the public key the the data was encrypted with.\"\n },\n 0x47e1: {\n name: \"ContentEncAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": \"\",\n description: \"The encryption algorithm used. The value '0' means that the contents have not been encrypted but only signed. Predefined values: 1 - DES, 2 - 3DES, 3 - Twofish, 4 - Blowfish, 5 - AES\"\n },\n 0x6d80: {\n name: \"ContentEncodings\",\n level: 3,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings for several content encoding mechanisms like compression or encryption.\"\n },\n 0xc4: {\n name: \"TrickMasterTrackSegmentUID\",\n level: 3,\n type: \"b\",\n divx: true,\n bytesize: 16,\n description: \"DivX trick track extenstions\"\n },\n 0xc7: {\n name: \"TrickMasterTrackUID\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc6: {\n name: \"TrickTrackFlag\",\n level: 3,\n type: \"u\",\n divx: true,\n \"default\": 0,\n description: \"DivX trick track extenstions\"\n },\n 0xc1: {\n name: \"TrickTrackSegmentUID\",\n level: 3,\n type: \"b\",\n divx: true,\n bytesize: 16,\n description: \"DivX trick track extenstions\"\n },\n 0xc0: {\n name: \"TrickTrackUID\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xed: {\n name: \"TrackJoinUID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n multiple: true,\n minver: 3,\n webm: false,\n range: \"not 0\",\n description: \"The trackUID number of a track whose blocks are used to create this virtual track.\"\n },\n 0xe9: {\n name: \"TrackJoinBlocks\",\n level: 4,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Contains the list of all tracks whose Blocks need to be combined to create this virtual track\"\n },\n 0xe6: {\n name: \"TrackPlaneType\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 3,\n webm: false,\n description: \"The kind of plane this track corresponds to (0: left eye, 1: right eye, 2: background).\"\n },\n 0xe5: {\n name: \"TrackPlaneUID\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 3,\n webm: false,\n range: \"not 0\",\n description: \"The trackUID number of the track representing the plane.\"\n },\n 0xe4: {\n name: \"TrackPlane\",\n level: 5,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 3,\n webm: false,\n description: \"Contains a video plane track that need to be combined to create this 3D track\"\n },\n 0xe3: {\n name: \"TrackCombinePlanes\",\n level: 4,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Contains the list of all video plane tracks that need to be combined to create this 3D track\"\n },\n 0xe2: {\n name: \"TrackOperation\",\n level: 3,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Operation that needs to be applied on tracks to create this virtual track. For more details look at the Specification Notes on the subject.\"\n },\n 0x7d7b: {\n name: \"ChannelPositions\",\n cppname: \"AudioPosition\",\n level: 4,\n type: \"b\",\n webm: false,\n description: \"Table of horizontal angles for each successive channel, see appendix.\"\n },\n 0x9f: {\n name: \"Channels\",\n cppname: \"AudioChannels\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"not 0\",\n description: \"Numbers of channels in the track.\"\n },\n 0x78b5: {\n name: \"OutputSamplingFrequency\",\n cppname: \"AudioOutputSamplingFreq\",\n level: 4,\n type: \"f\",\n minver: 1,\n \"default\": \"Sampling Frequency\",\n range: \"> 0\",\n description: \"Real output sampling frequency in Hz (used for SBR techniques).\"\n },\n 0xb5: {\n name: \"SamplingFrequency\",\n cppname: \"AudioSamplingFreq\",\n level: 4,\n type: \"f\",\n mandatory: true,\n minver: 1,\n \"default\": 8000.0,\n range: \"> 0\",\n description: \"Sampling frequency in Hz.\"\n },\n 0xe1: {\n name: \"Audio\",\n cppname: \"TrackAudio\",\n level: 3,\n type: \"m\",\n minver: 1,\n description: \"Audio settings.\"\n },\n 0x2383e3: {\n name: \"FrameRate\",\n cppname: \"VideoFrameRate\",\n level: 4,\n type: \"f\",\n range: \"> 0\",\n \"strong\": \"Informational\",\n description: \"Number of frames per second. only.\"\n },\n 0x2fb523: {\n name: \"GammaValue\",\n cppname: \"VideoGamma\",\n level: 4,\n type: \"f\",\n webm: false,\n range: \"> 0\",\n description: \"Gamma Value.\"\n },\n 0x2eb524: {\n name: \"ColourSpace\",\n cppname: \"VideoColourSpace\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 4,\n description: \"Same value as in AVI (32 bits).\"\n },\n 0x54b3: {\n name: \"AspectRatioType\",\n cppname: \"VideoAspectRatio\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect ratio, 2: fixed).\"\n },\n 0x54b2: {\n name: \"DisplayUnit\",\n cppname: \"VideoDisplayUnit\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"How DisplayWidth & DisplayHeight should be interpreted (0: pixels, 1: centimeters, 2: inches, 3: Display Aspect Ratio).\"\n },\n 0x54ba: {\n name: \"DisplayHeight\",\n cppname: \"VideoDisplayHeight\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": \"PixelHeight\",\n range: \"not 0\",\n description: \"Height of the video frames to display. The default value is only valid when DisplayUnit is 0.\"\n },\n 0x54b0: {\n name: \"DisplayWidth\",\n cppname: \"VideoDisplayWidth\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": \"PixelWidth\",\n range: \"not 0\",\n description: \"Width of the video frames to display. The default value is only valid when DisplayUnit is 0.\"\n },\n 0x54dd: {\n name: \"PixelCropRight\",\n cppname: \"VideoPixelCropRight\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove on the right of the image.\"\n },\n 0x54cc: {\n name: \"PixelCropLeft\",\n cppname: \"VideoPixelCropLeft\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove on the left of the image.\"\n },\n 0x54bb: {\n name: \"PixelCropTop\",\n cppname: \"VideoPixelCropTop\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove at the top of the image.\"\n },\n 0x54aa: {\n name: \"PixelCropBottom\",\n cppname: \"VideoPixelCropBottom\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove at the bottom of the image (for HDTV content).\"\n },\n 0xba: {\n name: \"PixelHeight\",\n cppname: \"VideoPixelHeight\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"Height of the encoded video frames in pixels.\"\n },\n 0xb0: {\n name: \"PixelWidth\",\n cppname: \"VideoPixelWidth\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"Width of the encoded video frames in pixels.\"\n },\n 0x53b9: {\n name: \"OldStereoMode\",\n level: 4,\n type: \"u\",\n \"maxver\": \"0\",\n webm: false,\n divx: false,\n description: \"DEPRECATED, DO NOT USE. Bogus StereoMode value used in old versions of libmatroska. (0: mono, 1: right eye, 2: left eye, 3: both eyes).\"\n },\n 0x53c0: {\n name: \"AlphaMode\",\n cppname: \"VideoAlphaMode\",\n level: 4,\n type: \"u\",\n minver: 3,\n webm: true,\n \"default\": 0,\n description: \"Alpha Video Mode. Presence of this element indicates that the BlockAdditional element could contain Alpha data.\"\n },\n 0x53b8: {\n name: \"StereoMode\",\n cppname: \"VideoStereoMode\",\n level: 4,\n type: \"u\",\n minver: 3,\n webm: true,\n \"default\": 0,\n description: \"Stereo-3D video mode (0: mono, 1: side by side (left eye is first), 2: top-bottom (right eye is first), 3: top-bottom (left eye is first), 4: checkboard (right is first), 5: checkboard (left is first), 6: row interleaved (right is first), 7: row interleaved (left is first), 8: column interleaved (right is first), 9: column interleaved (left is first), 10: anaglyph (cyan/red), 11: side by side (right eye is first), 12: anaglyph (green/magenta), 13 both eyes laced in one Block (left eye is first), 14 both eyes laced in one Block (right eye is first)) . There are some more details on 3D support in the Specification Notes.\"\n },\n 0x9a: {\n name: \"FlagInterlaced\",\n cppname: \"VideoFlagInterlaced\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: true,\n \"default\": 0,\n range: \"0-1\",\n description: \"Set if the video is interlaced. (1 bit)\"\n },\n 0xe0: {\n name: \"Video\",\n cppname: \"TrackVideo\",\n level: 3,\n type: \"m\",\n minver: 1,\n description: \"Video settings.\"\n },\n 0x66a5: {\n name: \"TrackTranslateTrackID\",\n level: 4,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The binary value used to represent this track in the chapter codec data. The format depends on the ChapProcessCodecID used.\"\n },\n 0x66bf: {\n name: \"TrackTranslateCodec\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).\"\n },\n 0x66fc: {\n name: \"TrackTranslateEditionUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify an edition UID on which this translation applies. When not specified, it means for all editions found in the segment.\"\n },\n 0x56bb: {\n name: \"SeekPreRoll\",\n level: 3,\n type: \"u\",\n mandatory: true,\n multiple: false,\n \"default\": 0,\n minver: 4,\n webm: true,\n description: \"After a discontinuity, SeekPreRoll is the duration in nanoseconds of the data the decoder must decode before the decoded data is valid.\"\n },\n 0x56aa: {\n name: \"CodecDelay\",\n level: 3,\n type: \"u\",\n multiple: false,\n \"default\": 0,\n minver: 4,\n webm: true,\n description: \"CodecDelay is The codec-built-in delay in nanoseconds. This value must be subtracted from each block timestamp in order to get the actual timestamp. The value should be small so the muxing of tracks with the same actual timestamp are in the same Cluster.\"\n },\n 0x6fab: {\n name: \"TrackOverlay\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify that this track is an overlay track for the Track specified (in the u-integer). That means when this track has a gap (see SilentTracks) the overlay track should be used instead. The order of multiple TrackOverlay matters, the first one is the one that should be used. If not found it should be the second, etc.\"\n },\n 0xaa: {\n name: \"CodecDecodeAll\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"The codec can decode potentially damaged data (1 bit).\"\n },\n 0x26b240: {\n name: \"CodecDownloadURL\",\n level: 3,\n type: \"s\",\n multiple: true,\n webm: false,\n description: \"A URL to download about the codec used.\"\n },\n 0x3b4040: {\n name: \"CodecInfoURL\",\n level: 3,\n type: \"s\",\n multiple: true,\n webm: false,\n description: \"A URL to find information about the codec used.\"\n },\n 0x3a9697: {\n name: \"CodecSettings\",\n level: 3,\n type: \"8\",\n webm: false,\n description: \"A string describing the encoding setting used.\"\n },\n 0x63a2: {\n name: \"CodecPrivate\",\n level: 3,\n type: \"b\",\n minver: 1,\n description: \"Private data only known to the codec.\"\n },\n 0x22b59c: {\n name: \"Language\",\n cppname: \"TrackLanguage\",\n level: 3,\n type: \"s\",\n minver: 1,\n \"default\": \"eng\",\n description: \"Specifies the language of the track in the Matroska languages form.\"\n },\n 0x536e: {\n name: \"Name\",\n cppname: \"TrackName\",\n level: 3,\n type: \"8\",\n minver: 1,\n description: \"A human-readable track name.\"\n },\n 0x55ee: {\n name: \"MaxBlockAdditionID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"The maximum value of BlockAdditions for this track.\"\n },\n 0x537f: {\n name: \"TrackOffset\",\n level: 3,\n type: \"i\",\n webm: false,\n \"default\": 0,\n description: \"A value to add to the Block's Timestamp. This can be used to adjust the playback offset of a track.\"\n },\n 0x23314f: {\n name: \"TrackTimecodeScale\",\n level: 3,\n type: \"f\",\n mandatory: true,\n minver: 1,\n \"maxver\": \"3\",\n webm: false,\n \"default\": 1.0,\n range: \"> 0\",\n description: \"DEPRECATED, DO NOT USE. The scale to apply on this track to work at normal speed in relation with other tracks (mostly used to adjust video speed when the audio length differs).\"\n },\n 0x234e7a: {\n name: \"DefaultDecodedFieldDuration\",\n cppname: \"TrackDefaultDecodedFieldDuration\",\n level: 3,\n type: \"u\",\n minver: 4,\n range: \"not 0\",\n description: \"The period in nanoseconds (not scaled by TimcodeScale)\\nbetween two successive fields at the output of the decoding process (see the notes)\"\n },\n 0x23e383: {\n name: \"DefaultDuration\",\n cppname: \"TrackDefaultDuration\",\n level: 3,\n type: \"u\",\n minver: 1,\n range: \"not 0\",\n description: \"Number of nanoseconds (not scaled via TimecodeScale) per frame ('frame' in the Matroska sense -- one element put into a (Simple)Block).\"\n },\n 0x6df8: {\n name: \"MaxCache\",\n cppname: \"TrackMaxCache\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"The maximum cache size required to store referenced frames in and the current frame. 0 means no cache is needed.\"\n },\n 0x6de7: {\n name: \"MinCache\",\n cppname: \"TrackMinCache\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"The minimum number of frames a player should be able to cache during playback. If set to 0, the reference pseudo-cache system is not used.\"\n },\n 0x9c: {\n name: \"FlagLacing\",\n cppname: \"TrackFlagLacing\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if the track may contain blocks using lacing. (1 bit)\"\n },\n 0x55aa: {\n name: \"FlagForced\",\n cppname: \"TrackFlagForced\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 0,\n range: \"0-1\",\n description: \"Set if that track MUST be active during playback. There can be many forced track for a kind (audio, video or subs), the player should select the one which language matches the user preference or the default + forced track. Overlay MAY happen between a forced and non-forced track of the same kind. (1 bit)\"\n },\n 0xb9: {\n name: \"FlagEnabled\",\n cppname: \"TrackFlagEnabled\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: true,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if the track is usable. (1 bit)\"\n },\n 0x73c5: {\n name: \"TrackUID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"A unique ID to identify the Track. This should be kept the same when making a direct stream copy of the Track to another file.\"\n },\n 0xd7: {\n name: \"TrackNumber\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"The track number as used in the Block Header (using more than 127 tracks is not encouraged, though the design allows an unlimited number).\"\n },\n 0xae: {\n name: \"TrackEntry\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Describes a track with all elements.\"\n },\n 0x1654ae6b: {\n name: \"Tracks\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"A top-level block of information with many tracks described.\"\n },\n 0xaf: {\n name: \"EncryptedBlock\",\n level: 2,\n type: \"b\",\n multiple: true,\n webm: false,\n description: \"Similar to EncryptedBlock Structure)\"\n },\n 0xca: {\n name: \"ReferenceTimeCode\",\n level: 4,\n type: \"u\",\n multiple: false,\n mandatory: true,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc9: {\n name: \"ReferenceOffset\",\n level: 4,\n type: \"u\",\n multiple: false,\n mandatory: true,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc8: {\n name: \"ReferenceFrame\",\n level: 3,\n type: \"m\",\n multiple: false,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xcf: {\n name: \"SliceDuration\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The (scaled) duration to apply to the element.\"\n },\n 0xce: {\n name: \"Delay\",\n cppname: \"SliceDelay\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The (scaled) delay to apply to the element.\"\n },\n 0xcb: {\n name: \"BlockAdditionID\",\n cppname: \"SliceBlockAddID\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The ID of the BlockAdditional element (0 is the main Block).\"\n },\n 0xcd: {\n name: \"FrameNumber\",\n cppname: \"SliceFrameNumber\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The number of the frame to generate from this lace with this delay (allow you to generate many frames from the same Block/Frame).\"\n },\n 0xcc: {\n name: \"LaceNumber\",\n cppname: \"SliceLaceNumber\",\n level: 5,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n divx: false,\n description: \"The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.\"\n },\n 0xe8: {\n name: \"TimeSlice\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n divx: false,\n description: \"Contains extra time information about the data contained in the Block. While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.\"\n },\n 0x8e: {\n name: \"Slices\",\n level: 3,\n type: \"m\",\n minver: 1,\n divx: false,\n description: \"Contains slices description.\"\n },\n 0x75a2: {\n name: \"DiscardPadding\",\n level: 3,\n type: \"i\",\n minver: 4,\n webm: true,\n description: \"Duration in nanoseconds of the silent data added to the Block (padding at the end of the Block for positive value, at the beginning of the Block for negative value). The duration of DiscardPadding is not calculated in the duration of the TrackEntry and should be discarded during playback.\"\n },\n 0xa4: {\n name: \"CodecState\",\n level: 3,\n type: \"b\",\n minver: 2,\n webm: false,\n description: \"The new codec state to use. Data interpretation is private to the codec. This information should always be referenced by a seek entry.\"\n },\n 0xfd: {\n name: \"ReferenceVirtual\",\n level: 3,\n type: \"i\",\n webm: false,\n description: \"Relative position of the data that should be in position of the virtual block.\"\n },\n 0xfb: {\n name: \"ReferenceBlock\",\n level: 3,\n type: \"i\",\n multiple: true,\n minver: 1,\n description: \"Timestamp of another frame used as a reference (ie: B or P frame). The timestamp is relative to the block it's attached to.\"\n },\n 0xfa: {\n name: \"ReferencePriority\",\n cppname: \"FlagReferenced\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"This frame is referenced and has the specified cache priority. In cache only a frame of the same or higher priority can replace this frame. A value of 0 means the frame is not referenced.\"\n },\n 0x9b: {\n name: \"BlockDuration\",\n level: 3,\n type: \"u\",\n minver: 1,\n \"default\": \"TrackDuration\",\n description: \"The duration of the Block (based on TimecodeScale). This element is mandatory when DefaultDuration is set for the track (but can be omitted as other default values). When not written and with no DefaultDuration, the value is assumed to be the difference between the timestamp of this Block and the timestamp of the next Block in \\\"display\\\" order (not coding order). This element can be useful at the end of a Track (as there is not other Block available), or when there is a break in a track like for subtitle tracks. When set to 0 that means the frame is not a keyframe.\"\n },\n 0xa5: {\n name: \"BlockAdditional\",\n level: 5,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Interpreted by the codec as it wishes (using the BlockAddID).\"\n },\n 0xee: {\n name: \"BlockAddID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n description: \"An ID to identify the BlockAdditional level.\"\n },\n 0xa6: {\n name: \"BlockMore\",\n level: 4,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contain the BlockAdditional and some parameters.\"\n },\n 0x75a1: {\n name: \"BlockAdditions\",\n level: 3,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block structure could still see and use/skip these data.\"\n },\n 0xa2: {\n name: \"BlockVirtual\",\n level: 3,\n type: \"b\",\n webm: false,\n description: \"A Block with no data. It must be stored in the stream at the place the real Block should be in display order. (see Block Virtual)\"\n },\n 0xa1: {\n name: \"Block\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n description: \"Block containing the actual data to be rendered and a timestamp relative to the Cluster Timecode. (see Block Structure)\"\n },\n 0xa0: {\n name: \"BlockGroup\",\n level: 2,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"Basic container of information containing a single Block or BlockVirtual, and information specific to that Block/VirtualBlock.\"\n },\n 0xa3: {\n name: \"SimpleBlock\",\n level: 2,\n type: \"b\",\n multiple: true,\n minver: 2,\n webm: true,\n divx: true,\n description: \"Similar to SimpleBlock Structure\"\n },\n 0xab: {\n name: \"PrevSize\",\n cppname: \"ClusterPrevSize\",\n level: 2,\n type: \"u\",\n minver: 1,\n description: \"Size of the previous Cluster, in octets. Can be useful for backward playing.\",\n position: \"prevCluster\"\n },\n 0xa7: {\n name: \"Position\",\n cppname: \"ClusterPosition\",\n level: 2,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"The Position of the Cluster in the segment (0 in live broadcast streams). It might help to resynchronise offset on damaged streams.\",\n position: \"segment\"\n },\n 0x58d7: {\n name: \"SilentTrackNumber\",\n cppname: \"ClusterSilentTrackNumber\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"One of the track number that are not used from now on in the stream. It could change later if not specified as silent in a further Cluster.\"\n },\n 0xe7: {\n name: \"Timecode\",\n cppname: \"ClusterTimecode\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"Absolute timestamp of the cluster (based on TimecodeScale).\"\n },\n 0x1f43b675: {\n name: \"Cluster\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"The lower level element containing the (monolithic) Block structure.\"\n },\n 0x4d80: {\n name: \"MuxingApp\",\n level: 2,\n type: \"8\",\n mandatory: true,\n minver: 1,\n description: \"Muxing application or library (\\\"libmatroska-0.4.3\\\").\"\n },\n 0x7ba9: {\n name: \"Title\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"General name of the segment.\"\n },\n 0x2ad7b2: {\n name: \"TimecodeScaleDenominator\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 4,\n \"default\": \"1000000000\",\n description: \"Timestamp scale numerator, see TimecodeScale.\"\n },\n 0x2ad7b1: {\n name: \"TimecodeScale\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": \"1000000\",\n description: \"Timestamp scale in nanoseconds (1.000.000 means all timestamps in the segment are expressed in milliseconds).\"\n },\n 0x69a5: {\n name: \"ChapterTranslateID\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The binary value used to represent this segment in the chapter codec data. The format depends on the ChapProcessCodecID used.\"\n },\n 0x69bf: {\n name: \"ChapterTranslateCodec\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).\"\n },\n 0x69fc: {\n name: \"ChapterTranslateEditionUID\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify an edition UID on which this correspondance applies. When not specified, it means for all editions found in the segment.\"\n },\n 0x3e83bb: {\n name: \"NextFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"An escaped filename corresponding to the next segment.\"\n },\n 0x3eb923: {\n name: \"NextUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A unique ID to identify the next chained segment (128 bits).\"\n },\n 0x3c83ab: {\n name: \"PrevFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"An escaped filename corresponding to the previous segment.\"\n },\n 0x3cb923: {\n name: \"PrevUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A unique ID to identify the previous chained segment (128 bits).\"\n },\n 0x73a4: {\n name: \"SegmentUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n bytesize: 16,\n description: \"A randomly generated unique ID to identify the current segment between many others (128 bits).\"\n },\n 0x1549a966: {\n name: \"Info\",\n level: 1,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains miscellaneous general information and statistics on the file.\"\n },\n 0x53ac: {\n name: \"SeekPosition\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"The position of the element in the segment in octets (0 = first level 1 element).\",\n position: \"segment\"\n },\n 0x53ab: {\n name: \"SeekID\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n description: \"The binary ID corresponding to the element name.\",\n type2: \"ebmlID\"\n },\n 0x4dbb: {\n name: \"Seek\",\n cppname: \"SeekPoint\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains a single seek entry to an EBML element.\"\n },\n 0x114d9b74: {\n name: \"SeekHead\",\n cppname: \"SeekHeader\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"Contains the position of other level 1 elements.\"\n },\n 0x7e7b: {\n name: \"SignatureElementList\",\n level: 2,\n type: \"m\",\n multiple: true,\n webm: false,\n i: \"Cluster|Block|BlockAdditional\",\n description: \"A list consists of a number of consecutive elements that represent one case where data is used in signature. Ex: means that the BlockAdditional of all Blocks in all Clusters is used for encryption.\"\n },\n 0x7e5b: {\n name: \"SignatureElements\",\n level: 1,\n type: \"m\",\n webm: false,\n description: \"Contains elements that will be used to compute the signature.\"\n },\n 0x7eb5: {\n name: \"Signature\",\n level: 1,\n type: \"b\",\n webm: false,\n description: \"The signature of the data (until a new.\"\n },\n 0x7ea5: {\n name: \"SignaturePublicKey\",\n level: 1,\n type: \"b\",\n webm: false,\n description: \"The public key to use with the algorithm (in the case of a PKI-based signature).\"\n },\n 0x7e9a: {\n name: \"SignatureHash\",\n level: 1,\n type: \"u\",\n webm: false,\n description: \"Hash algorithm used (1=SHA1-160, 2=MD5).\"\n },\n 0x7e8a: {\n name: \"SignatureAlgo\",\n level: 1,\n type: \"u\",\n webm: false,\n description: \"Signature algorithm used (1=RSA, 2=elliptic).\"\n },\n 0x1b538667: {\n name: \"SignatureSlot\",\n level: -1,\n type: \"m\",\n multiple: true,\n webm: false,\n description: \"Contain signature of some (coming) elements in the stream.\"\n },\n 0xbf: {\n name: \"CRC-32\",\n level: -1,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"The CRC is computed on all the data of the Master element it's in. The CRC element should be the first in it's parent master for easier reading. All level 1 elements should include a CRC-32. The CRC in use is the IEEE CRC32 Little Endian\",\n crc: true\n },\n 0xec: {\n name: \"Void\",\n level: -1,\n type: \"b\",\n minver: 1,\n description: \"Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is discarded. Also used to reserve space in a sub-element for later use.\"\n },\n 0x42f3: {\n name: \"EBMLMaxSizeLength\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 8,\n minver: 1,\n description: \"The maximum length of the sizes you'll find in this file (8 or less in Matroska). This does not override the element size indicated at the beginning of an element. Elements that have an indicated size which is larger than what is allowed by EBMLMaxSizeLength shall be considered invalid.\"\n },\n 0x42f2: {\n name: \"EBMLMaxIDLength\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 4,\n minver: 1,\n description: \"The maximum length of the IDs you'll find in this file (4 or less in Matroska).\"\n },\n 0x42f7: {\n name: \"EBMLReadVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The minimum EBML version a parser has to support to read this file.\"\n },\n 0x1a45dfa3: {\n name: \"EBML\",\n level: \"0\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Set the EBML characteristics of the data to follow. Each EBML document has to start with this.\"\n },\n 0x55b0: {\n name: \"Colour\",\n level: \"4\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n description: \"Settings describing the colour format.\"\n },\n 0x55b1: {\n name: \"MatrixCoefficients\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The Matrix Coefficients of the video used to derive luma and chroma values from red, green, and blue color primaries. For clarity, the value and meanings for MatrixCoefficients are adopted from Table 4 of ISO/IEC 23001-8:2016 or ITU-T H.273.\"\n },\n 0x55b9: {\n name: \"Range\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"Clipping of the color ranges.\"\n },\n 0x55ba: {\n name: \"TransferCharacteristics\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The transfer characteristics of the video.\"\n },\n 0x55bb: {\n name: \"Primaries\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The colour primaries of the video. For clarity, the value and meanings for Primaries are adopted from Table 2 of ISO/IEC 23091-4 or ITU-T H.273.\"\n },\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tools = exports.Reader = exports.Encoder = exports.Decoder = void 0;\n__exportStar(require(\"./EBML\"), exports);\nvar EBMLDecoder_1 = require(\"./EBMLDecoder\");\nexports.Decoder = EBMLDecoder_1.default;\nvar EBMLEncoder_1 = require(\"./EBMLEncoder\");\nexports.Encoder = EBMLEncoder_1.default;\nvar EBMLReader_1 = require(\"./EBMLReader\");\nexports.Reader = EBMLReader_1.default;\nvar tools = require(\"./tools\");\nexports.tools = tools;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tools_1 = require(\"./tools\");\nvar Tools = /** @class */ (function () {\n function Tools() {\n }\n /**\n * read variable length integer per\n * https://www.matroska.org/technical/specs/index.html#EBML_ex\n * @static\n * @param {Buffer} buffer containing input\n * @param {Number} [start=0] position in buffer\n * @returns {{length: Number, value: number}} value / length object\n */\n Tools.readVint = function (buffer, start) {\n if (start === void 0) { start = 0; }\n var length = 8 - Math.floor(Math.log2(buffer[start]));\n if (length > 8) {\n var number = Tools.readHexString(buffer, start, start + length);\n throw new Error(\"Unrepresentable length: \".concat(length, \" \").concat(number));\n }\n if (start + length > buffer.length) {\n return null;\n }\n var value = buffer[start] & ((1 << (8 - length)) - 1);\n for (var i = 1; i < length; i += 1) {\n if (i === 7) {\n if (value >= Math.pow(2, 8) && buffer[start + 7] > 0) {\n return { length: length, value: -1 };\n }\n }\n value *= Math.pow(2, 8);\n value += buffer[start + i];\n }\n return { length: length, value: value };\n };\n /**\n * write variable length integer\n * @static\n * @param {Number} value to store into buffer\n * @returns {Buffer} containing the value\n */\n Tools.writeVint = function (value) {\n if (value < 0 || value > Math.pow(2, 53)) {\n throw new Error(\"Unrepresentable value: \".concat(value));\n }\n var length = 1;\n for (length = 1; length <= 8; length += 1) {\n if (value < Math.pow(2, (7 * length)) - 1) {\n break;\n }\n }\n var buffer = tools_1.Buffer.alloc(length);\n var val = value;\n for (var i = 1; i <= length; i += 1) {\n var b = val & 0xff;\n buffer[length - i] = b;\n val -= b;\n val /= Math.pow(2, 8);\n }\n buffer[0] |= 1 << (8 - length);\n return buffer;\n };\n /**\n * *\n * concatenate two arrays of bytes\n * @static\n * @param {Buffer} a1 First array\n * @param {Buffer} a2 Second array\n * @returns {Buffer} concatenated arrays\n */\n Tools.concatenate = function (a1, a2) {\n // both null or undefined\n if (!a1 && !a2) {\n return tools_1.Buffer.from([]);\n }\n if (!a1 || a1.byteLength === 0) {\n return a2;\n }\n if (!a2 || a2.byteLength === 0) {\n return a1;\n }\n return tools_1.Buffer.from(__spreadArray(__spreadArray([], a1, true), a2, true));\n };\n /**\n * get a hex text string from Buff[start,end)\n * @param {Buffer} buff from which to read the string\n * @param {Number} [start=0] starting point (default 0)\n * @param {Number} [end=buff.byteLength] ending point (default the whole buffer)\n * @returns {string} the hex string\n */\n Tools.readHexString = function (buff, start, end) {\n if (start === void 0) { start = 0; }\n if (end === void 0) { end = buff.byteLength; }\n return Array.from(buff.slice(start, end))\n .map(function (q) { return Number(q).toString(16); })\n .reduce(function (acc, current) { return \"\".concat(acc).concat(current.padStart(2, '0')); }, '');\n };\n /**\n * tries to read out a UTF-8 encoded string\n * @param {Buffer} buff the buffer to attempt to read from\n * @return {string|null} the decoded text, or null if unable to\n */\n Tools.readUtf8 = function (buff) {\n try {\n return tools_1.Buffer.from(buff).toString('utf8');\n }\n catch (exception) {\n return null;\n }\n };\n /**\n * get an unsigned number from a buffer\n * @param {Buffer} buff from which to read variable-length unsigned number\n * @returns {number|string} result (in hex for lengths > 6)\n */\n Tools.readUnsigned = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return b.getUint8(0);\n case 2:\n return b.getUint16(0);\n case 4:\n return b.getUint32(0);\n default:\n break;\n }\n if (buff.byteLength <= 6) {\n return buff.reduce(function (acc, current) { return acc * 256 + current; }, 0);\n }\n return Tools.readHexString(buff, 0, buff.byteLength);\n };\n /**\n * get an signed number from a buffer\n * @static\n * @param {Buffer} buff from which to read variable-length signed number\n * @returns {number} result\n */\n Tools.readSigned = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return b.getInt8(0);\n case 2:\n return b.getInt16(0);\n case 4:\n return b.getInt32(0);\n default:\n return NaN;\n }\n };\n /**\n * get an floating-point number from a buffer\n * @static\n * @param {Buffer} buff from which to read variable-length floating-point number\n * @returns {number} result\n */\n Tools.readFloat = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 4:\n return b.getFloat32(0);\n case 8:\n return b.getFloat64(0);\n default:\n return NaN;\n }\n };\n /**\n * get a date from a buffer\n * @static\n * @param {Buffer} buff from which to read the date\n * @return {Date} result\n */\n Tools.readDate = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return new Date(b.getUint8(0));\n case 2:\n return new Date(b.getUint16(0));\n case 4:\n return new Date(b.getUint32(0));\n case 8:\n return new Date(Number.parseInt(Tools.readHexString(buff), 16));\n default:\n return new Date(0);\n }\n };\n /**\n * Reads the data from a tag\n * @static\n * @param {TagData} tagObj The tag object to be read\n * @param {Buffer} data Data to be transformed\n * @return {Tag} result\n */\n Tools.readDataFromTag = function (tagObj, data) {\n var type = tagObj.type, name = tagObj.name;\n var track = tagObj.track;\n var discardable = tagObj.discardable || false;\n var keyframe = tagObj.keyframe || false;\n var payload = null;\n var value;\n switch (type) {\n case 'u':\n value = Tools.readUnsigned(data);\n break;\n case 'f':\n value = Tools.readFloat(data);\n break;\n case 'i':\n value = Tools.readSigned(data);\n break;\n case 's':\n value = String.fromCharCode.apply(String, data);\n break;\n case '8':\n value = Tools.readUtf8(data);\n break;\n case 'd':\n value = Tools.readDate(data);\n break;\n default:\n break;\n }\n if (name === 'SimpleBlock' || name === 'Block') {\n var p = 0;\n var _a = Tools.readVint(data, p), length_1 = _a.length, trak = _a.value;\n p += length_1;\n track = trak;\n value = Tools.readSigned(data.subarray(p, p + 2));\n p += 2;\n if (name === 'SimpleBlock') {\n keyframe = Boolean(data[length_1 + 2] & 0x80);\n discardable = Boolean(data[length_1 + 2] & 0x01);\n }\n p += 1;\n payload = data.subarray(p);\n }\n return __assign(__assign({}, tagObj), { data: data, discardable: discardable, keyframe: keyframe, payload: payload, track: track, value: value });\n };\n return Tools;\n}());\nexports.default = Tools;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertEBMLDateToJSDate = exports.createFloatBuffer = exports.createIntBuffer = exports.createUIntBuffer = exports.encodeValueToBuffer = exports.concat = exports.putRefinedMetaData = exports.extractElement = exports.removeElement = exports.makeMetadataSeekable = exports.createRIFFChunk = exports.VP8BitStreamToRiffWebPBuffer = exports.WebPBlockFilter = exports.encodeTag = exports.readBlock = exports.ebmlBlock = exports.writeVint = exports.readVint = exports.Buffer = void 0;\n/// \nvar int64_buffer_1 = require(\"int64-buffer\");\nvar EBMLEncoder_1 = require(\"./EBMLEncoder\");\nvar _Buffer = require(\"buffer\");\nvar tools_ebml_1 = require(\"./tools-ebml\");\nvar _block = require(\"ebml-block\");\nexports.Buffer = _Buffer.Buffer;\nexports.readVint = tools_ebml_1.default.readVint;\nexports.writeVint = tools_ebml_1.default.writeVint;\nexports.ebmlBlock = _block;\nfunction readBlock(buf) {\n return (0, exports.ebmlBlock)(new exports.Buffer(buf));\n}\nexports.readBlock = readBlock;\n/**\n * @param end - if end === false then length is unknown\n */\nfunction encodeTag(tagId, tagData, unknownSize) {\n if (unknownSize === void 0) { unknownSize = false; }\n return concat([\n tagId,\n unknownSize ?\n new exports.Buffer('01ffffffffffffff', 'hex') :\n (0, exports.writeVint)(tagData.length),\n tagData\n ]);\n}\nexports.encodeTag = encodeTag;\n/**\n * WebP ファイルにできる SimpleBlock の パスフィルタ\n */\nfunction WebPBlockFilter(elms) {\n return elms.reduce(function (lst, elm) {\n if (elm.type !== \"b\") {\n return lst;\n }\n if (elm.name !== \"SimpleBlock\") {\n return lst;\n }\n var o = (0, exports.ebmlBlock)(elm.data);\n var hasWebP = o.frames.some(function (frame) {\n // https://tools.ietf.org/html/rfc6386#section-19.1\n var startcode = frame.slice(3, 6).toString(\"hex\");\n return startcode === \"9d012a\";\n });\n if (!hasWebP) {\n return lst;\n }\n return lst.concat(elm);\n }, []);\n}\nexports.WebPBlockFilter = WebPBlockFilter;\n/**\n * @param frame - VP8 BitStream のうち startcode をもつ frame\n * @return - WebP ファイルの ArrayBuffer\n */\nfunction VP8BitStreamToRiffWebPBuffer(frame) {\n var VP8Chunk = createRIFFChunk(\"VP8 \", frame);\n var WebPChunk = concat([\n new exports.Buffer(\"WEBP\", \"ascii\"),\n VP8Chunk\n ]);\n return createRIFFChunk(\"RIFF\", WebPChunk);\n}\nexports.VP8BitStreamToRiffWebPBuffer = VP8BitStreamToRiffWebPBuffer;\n/**\n * RIFF データチャンクを作る\n */\nfunction createRIFFChunk(FourCC, chunk) {\n var chunkSize = new exports.Buffer(4);\n chunkSize.writeUInt32LE(chunk.byteLength, 0);\n return concat([\n new exports.Buffer(FourCC.substr(0, 4), \"ascii\"),\n chunkSize,\n chunk,\n new exports.Buffer(chunk.byteLength % 2 === 0 ? 0 : 1) // padding\n ]);\n}\nexports.createRIFFChunk = createRIFFChunk;\n/* Original Metadata\n\n m 0\tEBML\n u 1\t EBMLVersion 1\n u 1\t EBMLReadVersion 1\n u 1\t EBMLMaxIDLength 4\n u 1\t EBMLMaxSizeLength 8\n s 1\t DocType webm\n u 1\t DocTypeVersion 4\n u 1\t DocTypeReadVersion 2\n m 0\tSegment\n m 1\t Info segmentContentStartPos, all CueClusterPositions provided in info.cues will be relative to here and will need adjusted\n u 2\t TimecodeScale 1000000\n 8 2\t MuxingApp Chrome\n 8 2\t WritingApp Chrome\n m 1\t Tracks tracksStartPos\n m 2\t TrackEntry\n u 3\t TrackNumber 1\n u 3\t TrackUID 31790271978391090\n u 3\t TrackType 2\n s 3\t CodecID A_OPUS\n b 3\t CodecPrivate \n m 3\t Audio\n f 4\t SamplingFrequency 48000\n u 4\t Channels 1\n m 2\t TrackEntry\n u 3\t TrackNumber 2\n u 3\t TrackUID 24051277436254136\n u 3\t TrackType 1\n s 3\t CodecID V_VP8\n m 3\t Video\n u 4\t PixelWidth 1024\n u 4\t PixelHeight 576\n m 1\t Cluster clusterStartPos\n u 2\t Timecode 0\n b 2\t SimpleBlock track:2 timecode:0\tkeyframe:true\tinvisible:false\tdiscardable:false\tlacing:1\n*/\n/* Desired Metadata\n\n m\t0 EBML\n u\t1 EBMLVersion 1\n u\t1 EBMLReadVersion 1\n u\t1 EBMLMaxIDLength 4\n u\t1 EBMLMaxSizeLength 8\n s\t1 DocType webm\n u\t1 DocTypeVersion 4\n u\t1 DocTypeReadVersion 2\n m\t0 Segment\n m\t1 SeekHead -> This is SeekPosition 0, so all SeekPositions can be calculated as (bytePos - segmentContentStartPos), which is 44 in this case\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x15, 0x49, 0xA9, 0x66]) Info\n u\t3 SeekPosition -> infoStartPos =\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x16, 0x54, 0xAE, 0x6B]) Tracks\n u\t3 SeekPosition { tracksStartPos }\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x1C, 0x53, 0xBB, 0x6B]) Cues\n u\t3 SeekPosition { cuesStartPos }\n m\t1 Info\n f\t2 Duration 32480 -> overwrite, or insert if it doesn't exist\n u\t2 TimecodeScale 1000000\n 8\t2 MuxingApp Chrome\n 8\t2 WritingApp Chrome\n m\t1 Tracks\n m\t2 TrackEntry\n u\t3 TrackNumber 1\n u\t3 TrackUID 31790271978391090\n u\t3 TrackType 2\n s\t3 CodecID A_OPUS\n b\t3 CodecPrivate \n m\t3 Audio\n f\t4 SamplingFrequency 48000\n u\t4 Channels 1\n m\t2 TrackEntry\n u\t3 TrackNumber 2\n u\t3 TrackUID 24051277436254136\n u\t3 TrackType 1\n s\t3 CodecID V_VP8\n m\t3 Video\n u\t4 PixelWidth 1024\n u\t4 PixelHeight 576\n m 1 Cues -> cuesStartPos\n m 2 CuePoint\n u 3 CueTime 0\n m 3 CueTrackPositions\n u 4 CueTrack 1\n u 4 CueClusterPosition 3911\n m 2 CuePoint\n u 3 CueTime 600\n m 3 CueTrackPositions\n u 4 CueTrack 1\n u 4 CueClusterPosition 3911\n m 1 Cluster\n u 2 Timecode 0\n b 2 SimpleBlock track:2 timecode:0\tkeyframe:true\tinvisible:false\tdiscardable:false\tlacing:1\n*/\n/**\n * convert the metadata from a streaming webm bytestream to a seekable file by inserting Duration, Seekhead and Cues\n * @param originalMetadata - orginal metadata (everything before the clusters start) from media recorder\n * @param duration - Duration (TimecodeScale)\n * @param cues - cue points for clusters\n */\nfunction makeMetadataSeekable(originalMetadata, duration, cuesInfo) {\n // extract the header, we can reuse this as-is\n var header = extractElement(\"EBML\", originalMetadata);\n var headerSize = encodedSizeOfEbml(header);\n //console.error(\"Header size: \" + headerSize);\n //printElementIds(header);\n // After the header comes the Segment open tag, which in this implementation is always 12 bytes (4 byte id, 8 byte 'unknown length')\n // After that the segment content starts. All SeekPositions and CueClusterPosition must be relative to segmentContentStartPos\n var segmentContentStartPos = headerSize + 12;\n //console.error(\"segmentContentStartPos: \" + segmentContentStartPos); \n // find the original metadata size, and adjust it for header size and Segment start element so we can keep all positions relative to segmentContentStartPos\n var originalMetadataSize = originalMetadata[originalMetadata.length - 1].dataEnd - segmentContentStartPos;\n //console.error(\"Original Metadata size: \" + originalMetadataSize);\n //printElementIds(originalMetadata);\n // extract the segment info, remove the potentially existing Duration element, and add our own one.\n var info = extractElement(\"Info\", originalMetadata);\n removeElement(\"Duration\", info);\n info.splice(1, 0, { name: \"Duration\", type: \"f\", data: createFloatBuffer(duration, 8) });\n var infoSize = encodedSizeOfEbml(info);\n //console.error(\"Info size: \" + infoSize);\n //printElementIds(info); \n // extract the track info, we can re-use this as is\n var tracks = extractElement(\"Tracks\", originalMetadata);\n var tracksSize = encodedSizeOfEbml(tracks);\n //console.error(\"Tracks size: \" + tracksSize);\n //printElementIds(tracks); \n var seekHeadSize = 47; // Initial best guess, but could be slightly larger if the Cues element is huge.\n var seekHead = [];\n var cuesSize = 5 + cuesInfo.length * 15; // very rough initial approximation, depends a lot on file size and number of CuePoints \n var cues = [];\n var lastSizeDifference = -1; // \n // The size of SeekHead and Cues elements depends on how many bytes the offsets values can be encoded in.\n // The actual offsets in CueClusterPosition depend on the final size of the SeekHead and Cues elements\n // We need to iteratively converge to a stable solution.\n var maxIterations = 10;\n var _loop_1 = function (i) {\n // SeekHead starts at 0\n var infoStart = seekHeadSize; // Info comes directly after SeekHead\n var tracksStart = infoStart + infoSize; // Tracks comes directly after Info\n var cuesStart = tracksStart + tracksSize; // Cues starts directly after \n var newMetadataSize = cuesStart + cuesSize; // total size of metadata \n // This is the offset all CueClusterPositions should be adjusted by due to the metadata size changing.\n var sizeDifference = newMetadataSize - originalMetadataSize;\n // console.error(`infoStart: ${infoStart}, infoSize: ${infoSize}`);\n // console.error(`tracksStart: ${tracksStart}, tracksSize: ${tracksSize}`);\n // console.error(`cuesStart: ${cuesStart}, cuesSize: ${cuesSize}`);\n // console.error(`originalMetadataSize: ${originalMetadataSize}, newMetadataSize: ${newMetadataSize}, sizeDifference: ${sizeDifference}`); \n // create the SeekHead element\n seekHead = [];\n seekHead.push({ name: \"SeekHead\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x15, 0x49, 0xA9, 0x66]) }); // Info\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(infoStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x16, 0x54, 0xAE, 0x6B]) }); // Tracks\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(tracksStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1C, 0x53, 0xBB, 0x6B]) }); // Cues\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(cuesStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"SeekHead\", type: \"m\", isEnd: true });\n seekHeadSize = encodedSizeOfEbml(seekHead);\n //console.error(\"SeekHead size: \" + seekHeadSize);\n //printElementIds(seekHead); \n // create the Cues element\n cues = [];\n cues.push({ name: \"Cues\", type: \"m\", isEnd: false });\n cuesInfo.forEach(function (_a) {\n var CueTrack = _a.CueTrack, CueClusterPosition = _a.CueClusterPosition, CueTime = _a.CueTime;\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTime\", type: \"u\", data: createUIntBuffer(CueTime) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTrack\", type: \"u\", data: createUIntBuffer(CueTrack) });\n //console.error(`CueClusterPosition: ${CueClusterPosition}, Corrected to: ${CueClusterPosition - segmentContentStartPos} , offset by ${sizeDifference} to become ${(CueClusterPosition - segmentContentStartPos) + sizeDifference - segmentContentStartPos}`);\n // EBMLReader returns CueClusterPosition with absolute byte offsets. The Cues section expects them as offsets from the first level 1 element of the Segment, so we need to adjust it.\n CueClusterPosition -= segmentContentStartPos;\n // We also need to adjust to take into account the change in metadata size from when EBMLReader read the original metadata.\n CueClusterPosition += sizeDifference;\n cues.push({ name: \"CueClusterPosition\", type: \"u\", data: createUIntBuffer(CueClusterPosition) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: true });\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: true });\n });\n cues.push({ name: \"Cues\", type: \"m\", isEnd: true });\n cuesSize = encodedSizeOfEbml(cues);\n //console.error(\"Cues size: \" + cuesSize); \n //console.error(\"Cue count: \" + cuesInfo.length);\n //printElementIds(cues); \n // If the new MetadataSize is not the same as the previous iteration, we need to run once more.\n if (lastSizeDifference !== sizeDifference) {\n lastSizeDifference = sizeDifference;\n if (i === maxIterations - 1) {\n throw new Error(\"Failed to converge to a stable metadata size\");\n }\n }\n else {\n return \"break\";\n }\n };\n for (var i = 0; i < maxIterations; i++) {\n var state_1 = _loop_1(i);\n if (state_1 === \"break\")\n break;\n }\n var finalMetadata = [].concat.apply([], [\n header,\n { name: \"Segment\", type: \"m\", isEnd: false, unknownSize: true },\n seekHead,\n info,\n tracks,\n cues\n ]);\n var result = new EBMLEncoder_1.default().encode(finalMetadata);\n //printElementIds(finalMetadata);\n //console.error(`Final metadata buffer size: ${result.byteLength}`);\n //console.error(`Final metadata buffer size without header and segment: ${result.byteLength-segmentContentStartPos}`);\n return result;\n}\nexports.makeMetadataSeekable = makeMetadataSeekable;\n/**\n * print all element id names in a list\n\n * @param metadata - array of EBML elements to print\n *\nexport function printElementIds(metadata: EBML.EBMLElementBuffer[]) {\n\n let result: EBML.EBMLElementBuffer[] = [];\n let start: number = -1;\n\n for (let i = 0; i < metadata.length; i++) {\n console.error(\"\\t id: \" + metadata[i].name);\n }\n}\n*/\n/**\n * remove all occurances of an EBML element from an array of elements\n * If it's a MasterElement you will also remove the content. (everything between start and end)\n * @param idName - name of the EBML Element to remove.\n * @param metadata - array of EBML elements to search\n */\nfunction removeElement(idName, metadata) {\n var result = [];\n var start = -1;\n for (var i = 0; i < metadata.length; i++) {\n var element = metadata[i];\n if (element.name === idName) {\n // if it's a Master element, extract the start and end element, and everything in between\n if (element.type === \"m\") {\n if (!element.isEnd) {\n start = i;\n }\n else {\n // we've reached the end, extract the whole thing\n if (start == -1)\n throw new Error(\"Detected \".concat(idName, \" closing element before finding the start\"));\n metadata.splice(start, i - start + 1);\n return;\n }\n }\n else {\n // not a Master element, so we've found what we're looking for.\n metadata.splice(i, 1);\n return;\n }\n }\n }\n}\nexports.removeElement = removeElement;\n/**\n * extract the first occurance of an EBML tag from a flattened array of EBML data.\n * If it's a MasterElement you will also get the content. (everything between start and end)\n * @param idName - name of the EBML Element to extract.\n * @param metadata - array of EBML elements to search\n */\nfunction extractElement(idName, metadata) {\n var result = [];\n var start = -1;\n for (var i = 0; i < metadata.length; i++) {\n var element = metadata[i];\n if (element.name === idName) {\n // if it's a Master element, extract the start and end element, and everything in between\n if (element.type === \"m\") {\n if (!element.isEnd) {\n start = i;\n }\n else {\n // we've reached the end, extract the whole thing\n if (start == -1)\n throw new Error(\"Detected \".concat(idName, \" closing element before finding the start\"));\n result = metadata.slice(start, i + 1);\n break;\n }\n }\n else {\n // not a Master element, so we've found what we're looking for.\n result.push(metadata[i]);\n break;\n }\n }\n }\n return result;\n}\nexports.extractElement = extractElement;\n/**\n * @deprecated\n * metadata に対して duration と seekhead を追加した metadata を返す\n * @param metadata - 変更前の webm における ファイル先頭から 最初の Cluster 要素までの 要素\n * @param duration - Duration (TimecodeScale)\n * @param cues - cue points for clusters\n * @deprecated @param clusterPtrs - 変更前の webm における SeekHead に追加する Cluster 要素 への start pointer\n * @deprecated @param cueInfos - please use cues.\n */\nfunction putRefinedMetaData(metadata, info) {\n if (Array.isArray(info.cueInfos) && !Array.isArray(info.cues)) {\n console.warn(\"putRefinedMetaData: info.cueInfos property is deprecated. please use info.cues\");\n info.cues = info.cueInfos;\n }\n var ebml = [];\n var payload = [];\n for (var i_1 = 0; i_1 < metadata.length; i_1++) {\n var elm = metadata[i_1];\n if (elm.type === \"m\" && elm.name === \"Segment\") {\n ebml = metadata.slice(0, i_1);\n payload = metadata.slice(i_1);\n if (elm.unknownSize) {\n payload.shift(); // remove segment tag\n break;\n }\n throw new Error(\"this metadata is not streaming webm file\");\n }\n }\n // *0 *4 *5 *36 *40 *48=segmentOffset *185=originalPayloadOffsetEnd\n // | | | | | | |\n // [EBML][size]....[Segment][size][Info][size][Duration][size]...[Cluster]\n // | | |^inf | |\n // | +segmentSiz(12)+ |\n // +-ebmlSize(36)--+ | +-payloadSize(137)-------------+offsetEndDiff+\n // | | +-newPayloadSize(??)-------------------------+\n // | | | |\n // [Segment][size][Info][size][Duration][size]....[size][value][Cluster]\n // ^ |\n // | *??=newPayloadOffsetEnd\n // inf\n if (!(payload[payload.length - 1].dataEnd > 0)) {\n throw new Error(\"metadata dataEnd has wrong number\");\n }\n var originalPayloadOffsetEnd = payload[payload.length - 1].dataEnd; // = first cluster ptr\n var ebmlSize = ebml[ebml.length - 1].dataEnd; // = first segment ptr\n var refinedEBMLSize = new EBMLEncoder_1.default().encode(ebml).byteLength;\n var offsetDiff = refinedEBMLSize - ebmlSize;\n var payloadSize = originalPayloadOffsetEnd - payload[0].tagStart;\n var segmentSize = payload[0].tagStart - ebmlSize;\n var segmentOffset = payload[0].tagStart;\n var segmentTagBuf = new exports.Buffer([0x18, 0x53, 0x80, 0x67]); // Segment\n var segmentSizeBuf = new exports.Buffer('01ffffffffffffff', 'hex'); // Segmentの最後の位置は無数の Cluster 依存なので。 writeVint(newPayloadSize).byteLength ではなく、 infinity.\n var _segmentSize = segmentTagBuf.byteLength + segmentSizeBuf.byteLength; // == segmentSize\n var newPayloadSize = payloadSize;\n // We need the size to be stable between two refinements in order for our offsets to be correct\n // Bound the number of possible refinements so we can't go infinate if something goes wrong\n var i;\n for (i = 1; i < 20; i++) {\n var newPayloadOffsetEnd = ebmlSize + _segmentSize + newPayloadSize;\n var offsetEndDiff = newPayloadOffsetEnd - originalPayloadOffsetEnd;\n var sizeDiff = offsetDiff + offsetEndDiff;\n var refined = refineMetadata(payload, sizeDiff, info);\n var newNewRefinedSize = new EBMLEncoder_1.default().encode(refined).byteLength; // 一旦 seekhead を作って自身のサイズを調べる\n if (newNewRefinedSize === newPayloadSize) {\n // Size is stable\n return new EBMLEncoder_1.default().encode([].concat(ebml, [{ type: \"m\", name: \"Segment\", isEnd: false, unknownSize: true }], refined));\n }\n newPayloadSize = newNewRefinedSize;\n }\n throw new Error(\"unable to refine metadata, stable size could not be found in \" + i + \" iterations!\");\n}\nexports.putRefinedMetaData = putRefinedMetaData;\n// Given a list of EBMLElementBuffers, returns their encoded size in bytes\nfunction encodedSizeOfEbml(refinedMetaData) {\n var encorder = new EBMLEncoder_1.default();\n return refinedMetaData.reduce(function (lst, elm) { return lst.concat(encorder.encode([elm])); }, []).reduce(function (o, buf) { return o + buf.byteLength; }, 0);\n}\nfunction refineMetadata(mesetadata, sizeDiff, info) {\n var duration = info.duration, clusterPtrs = info.clusterPtrs, cues = info.cues;\n var _metadata = mesetadata.slice(0);\n if (typeof duration === \"number\") {\n // duration を追加する\n var overwrited_1 = false;\n _metadata.forEach(function (elm) {\n if (elm.type === \"f\" && elm.name === \"Duration\") {\n overwrited_1 = true;\n elm.data = createFloatBuffer(duration, 8);\n }\n });\n if (!overwrited_1) {\n insertTag(_metadata, \"Info\", [{ name: \"Duration\", type: \"f\", data: createFloatBuffer(duration, 8) }]);\n }\n }\n if (Array.isArray(cues)) {\n insertTag(_metadata, \"Cues\", create_cue(cues, sizeDiff));\n }\n var seekhead_children = [];\n if (Array.isArray(clusterPtrs)) {\n console.warn(\"append cluster pointers to seekhead is deprecated. please use cues\");\n seekhead_children = create_seek_from_clusters(clusterPtrs, sizeDiff);\n }\n // remove seek info\n /*\n _metadata = _metadata.filter((elm)=> !(\n elm.name === \"Seek\" ||\n elm.name === \"SeekID\" ||\n elm.name === \"SeekPosition\") );\n */\n // working on progress\n //seekhead_children = seekhead_children.concat(create_seekhead(_metadata));\n insertTag(_metadata, \"SeekHead\", seekhead_children, true);\n return _metadata;\n}\nfunction create_seekhead(metadata, sizeDiff) {\n var seeks = [];\n [\"Info\", \"Tracks\", \"Cues\"].forEach(function (tagName) {\n var tagStarts = metadata.filter(function (elm) { return elm.type === \"m\" && elm.name === tagName && elm.isEnd === false; }).map(function (elm) { return elm[\"tagStart\"]; });\n var tagStart = tagStarts[0];\n if (typeof tagStart !== \"number\") {\n return;\n }\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: false });\n switch (tagName) {\n case \"Info\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x15, 0x49, 0xA9, 0x66]) });\n break;\n case \"Tracks\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x16, 0x54, 0xAE, 0x6B]) });\n break;\n case \"Cues\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1C, 0x53, 0xBB, 0x6B]) });\n break;\n }\n seeks.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(tagStart + sizeDiff) });\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: true });\n });\n return seeks;\n}\nfunction create_seek_from_clusters(clusterPtrs, sizeDiff) {\n var seeks = [];\n clusterPtrs.forEach(function (start) {\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: false });\n // [0x1F, 0x43, 0xB6, 0x75] で Cluster 意\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1F, 0x43, 0xB6, 0x75]) });\n seeks.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(start + sizeDiff) });\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: true });\n });\n return seeks;\n}\nfunction create_cue(cueInfos, sizeDiff) {\n var cues = [];\n cueInfos.forEach(function (_a) {\n var CueTrack = _a.CueTrack, CueClusterPosition = _a.CueClusterPosition, CueTime = _a.CueTime;\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTime\", type: \"u\", data: createUIntBuffer(CueTime) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTrack\", type: \"u\", data: createUIntBuffer(CueTrack) }); // video track\n cues.push({ name: \"CueClusterPosition\", type: \"u\", data: createUIntBuffer(CueClusterPosition + sizeDiff) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: true });\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: true });\n });\n return cues;\n}\nfunction insertTag(_metadata, tagName, children, insertHead) {\n if (insertHead === void 0) { insertHead = false; }\n // find the tagname from _metadata\n var idx = -1;\n for (var i = 0; i < _metadata.length; i++) {\n var elm = _metadata[i];\n if (elm.type === \"m\" && elm.name === tagName && elm.isEnd === false) {\n idx = i;\n break;\n }\n }\n if (idx >= 0) {\n // insert [] to \n Array.prototype.splice.apply(_metadata, [idx + 1, 0].concat(children));\n }\n else if (insertHead) {\n [].concat([{ name: tagName, type: \"m\", isEnd: false }], children, [{ name: tagName, type: \"m\", isEnd: true }]).reverse().forEach(function (elm) { _metadata.unshift(elm); });\n }\n else {\n // metadata 末尾に を追加\n // insert \n _metadata.push({ name: tagName, type: \"m\", isEnd: false });\n children.forEach(function (elm) { _metadata.push(elm); });\n _metadata.push({ name: tagName, type: \"m\", isEnd: true });\n }\n}\nfunction concat(list) {\n return exports.Buffer.concat(list);\n}\nexports.concat = concat;\nfunction encodeValueToBuffer(elm) {\n var data = new exports.Buffer(0);\n if (elm.type === \"m\") {\n return elm;\n }\n switch (elm.type) {\n case \"u\":\n data = createUIntBuffer(elm.value);\n break;\n case \"i\":\n data = createIntBuffer(elm.value);\n break;\n case \"f\":\n data = createFloatBuffer(elm.value);\n break;\n case \"s\":\n data = new exports.Buffer(elm.value, 'ascii');\n break;\n case \"8\":\n data = new exports.Buffer(elm.value, 'utf8');\n break;\n case \"b\":\n data = elm.value;\n break;\n case \"d\":\n data = new int64_buffer_1.Int64BE(elm.value.getTime().toString()).toBuffer();\n break;\n }\n return Object.assign({}, elm, { data: data });\n}\nexports.encodeValueToBuffer = encodeValueToBuffer;\nfunction createUIntBuffer(value) {\n // Big-endian, any size from 1 to 8\n // but js number is float64, so max 6 bit octets\n var bytes = 1;\n for (; value >= Math.pow(2, 8 * bytes); bytes++) { }\n if (bytes >= 7) {\n console.warn(\"7bit or more bigger uint not supported.\");\n return new int64_buffer_1.Uint64BE(value).toBuffer();\n }\n var data = new exports.Buffer(bytes);\n data.writeUIntBE(value, 0, bytes);\n return data;\n}\nexports.createUIntBuffer = createUIntBuffer;\nfunction createIntBuffer(value) {\n // Big-endian, any size from 1 to 8 octets\n // but js number is float64, so max 6 bit\n var bytes = 1;\n for (; value >= Math.pow(2, 8 * bytes); bytes++) { }\n if (bytes >= 7) {\n console.warn(\"7bit or more bigger uint not supported.\");\n return new int64_buffer_1.Int64BE(value).toBuffer();\n }\n var data = new exports.Buffer(bytes);\n data.writeIntBE(value, 0, bytes);\n return data;\n}\nexports.createIntBuffer = createIntBuffer;\nfunction createFloatBuffer(value, bytes) {\n if (bytes === void 0) { bytes = 8; }\n // Big-endian, defined for 4 and 8 octets (32, 64 bits)\n // js number is float64 so 8 bytes.\n if (bytes === 8) {\n // 64bit\n var data = new exports.Buffer(8);\n data.writeDoubleBE(value, 0);\n return data;\n }\n else if (bytes === 4) {\n // 32bit\n var data = new exports.Buffer(4);\n data.writeFloatBE(value, 0);\n return data;\n }\n else {\n throw new Error(\"float type bits must 4bytes or 8bytes\");\n }\n}\nexports.createFloatBuffer = createFloatBuffer;\nfunction convertEBMLDateToJSDate(int64str) {\n if (int64str instanceof Date) {\n return int64str;\n }\n return new Date(new Date(\"2001-01-01T00:00:00.000Z\").getTime() + (Number(int64str) / 1000 / 1000));\n}\nexports.convertEBMLDateToJSDate = convertEBMLDateToJSDate;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ebml_1 = require(\"./ebml\");\n/**\n * based on ts-ebml and support large file,optimize memory usage during repair\n *\n * @param blob the blob you need to fix\n * @returns the blob that has been fixed\n *\n */\nfunction fixWebmDuration(blob) {\n return __awaiter(this, void 0, void 0, function () {\n var decoder, reader, readstream, readerBlob, _a, done, value, elms, refinedMetadataBuf, refinedMetadataBlob, firstPartBlobWithoutMetadata, finalBlob;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!blob) {\n throw Error('call to fixWebmDuration requires a blob');\n }\n decoder = new ebml_1.Decoder();\n reader = new ebml_1.Reader();\n readstream = blob.stream();\n readerBlob = readstream.getReader();\n _b.label = 1;\n case 1:\n if (!true) return [3 /*break*/, 3];\n return [4 /*yield*/, readerBlob.read()];\n case 2:\n _a = _b.sent(), done = _a.done, value = _a.value;\n if (done) {\n reader.stop();\n return [3 /*break*/, 3];\n }\n elms = decoder.decode(value);\n // As browser upgrade webm meta attributes are gradually added, \n // so filter unknown type to bypass this issue.\n elms = elms === null || elms === void 0 ? void 0 : elms.filter(function (elm) { return elm.type !== 'unknown'; });\n elms.forEach(function (elm) {\n reader.read(elm);\n });\n value = null;\n return [3 /*break*/, 1];\n case 3:\n refinedMetadataBuf = ebml_1.tools.makeMetadataSeekable(reader.metadatas, reader.duration, reader.cues);\n refinedMetadataBlob = new Blob([refinedMetadataBuf], { type: blob.type });\n firstPartBlobWithoutMetadata = blob.slice(reader.metadataSize);\n finalBlob = new Blob([refinedMetadataBlob, firstPartBlobWithoutMetadata], { type: blob.type });\n return [2 /*return*/, finalBlob];\n }\n });\n });\n}\nexports.default = fixWebmDuration;\n"],"names":["exports","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","base64","ieee754","customInspectSymbol","Symbol","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","value","string","encoding","isEncoding","actual","write","slice","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","b","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","fromObject","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","this","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","val","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","c","hi","lo","utf16leToBytes","Math","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","e","typedArraySupport","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","name","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","abs","INVALID_BASE64_RE","Infinity","leadSurrogate","split","base64clean","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","BufferReader","XIPH_LACING","EBML_LACING","FIXED_SIZE_LACING","module","block","reader","trackNumber","nextUIntV","timecode","nextInt16BE","flags","nextUInt8","invisible","keyframe","discardable","lacing","frames","nextBuffer","frameSize","framesNum","frameSizes","nextIntV","readLacedData","vint","v","signed","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","args","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","isNaN","EventEmitter","init","once","emitter","Promise","resolve","reject","errorListener","err","removeListener","resolver","eventTargetAgnosticAddListener","handler","on","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","events","existing","warning","create","newListener","emit","unshift","warned","w","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","addEventListener","wrapListener","removeEventListener","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","listeners","addListener","prependListener","prependOnceListener","position","originalListener","shift","index","pop","spliceOne","off","removeAllListeners","key","keys","rawListeners","eventNames","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","s","NaN","rt","log","LN2","storage","UNDEFINED","BUFFER","UINT8ARRAY","ARRAYBUFFER","ZERO","BIT32","BIT24","factory","bigendian","unsigned","posH","posL","pos0","pos1","pos2","pos3","fromPositive","fromPositiveBE","fromPositiveLE","fromNegative","fromNegativeBE","fromNegativeLE","Int64","isName","_isInt64","toNumber","radix","high","readInt32","low","sign","mod","toArray","toBuffer","toArrayBuffer","raddix","newArray","isValidBuffer","_storage","chr","writeInt32","fromArray","raw","arrbuf","dest","destbuf","destoff","srcbuf","srcoff","nodeName","State","int64_buffer_1","tools_1","tools","ebmlID_1","EBMLDecoder","_buffer","_tag_stack","_state","STATE_TAG","_cursor","_total","_schema","byEbmlID","_result","decode","chunk","readChunk","diff","readTag","STATE_SIZE","readSize","STATE_CONTENT","readContent","getSchemaInfo","tagNum","level","description","tag","readVint","reduce","o","schema","tagObj","EBML_ID","tagStart","tagEnd","sizeStart","sizeEnd","dataStart","dataEnd","dataSize","unknownSize","isEnd","elm","assign","convertEBMLDateToJSDate","Int64BE","topEle","EBMLEncoder","_buffers","_stack","encode","elms","_this","lst","endTag","startTag","writeTag","flush","tagName","tagNums","map","tagId","tagData","encodeTag","children","childTagDataBuffers","child","childTagDataBuffer","extendStatics","__extends","__proto__","p","hasOwnProperty","__","events_1","EBMLReader","_super","logGroup","hasLoggingStarted","metadataloaded","chunks","segmentOffset","last2SimpleBlockVideoTrackTimecode","last2SimpleBlockAudioTrackTimecode","lastClusterTimecode","lastClusterPosition","timecodeScale","metadataSize","metadatas","cues","firstVideoBlockRead","firstAudioBlockRead","currentTrack","TrackNumber","TrackType","DefaultDuration","CodecDelay","trackTypes","trackDefaultDuration","trackCodecDelay","trackInfo","ended","logging","use_duration_every_simpleblock","use_webp","use_segment_info","drop_default_duration","stop","emit_segment_info","groupEnd","duration","videoTrackNum","audioTrackNum","drop","parent_1","_a","ebmlBlock","frames_1","CueTime","CueTrack","CueClusterPosition","forEach","frame","webpBuf","VP8BitStreamToRiffWebPBuffer","webp","Blob","currentTime","put","defaultDuration","codecDelay","lastTimecode","_defaultDuration","delay","event","groupCollapsed","group","multiple","minver","webm","mandatory","cppname","bytesize","divx","type2","crc","__createBinding","k","k2","__exportStar","Reader","Encoder","Decoder","EBMLDecoder_1","default","EBMLEncoder_1","EBMLReader_1","__assign","t","__spreadArray","to","pack","ar","l","Tools","log2","number","readHexString","writeVint","concatenate","a1","a2","buff","q","acc","current","padStart","readUtf8","exception","readUnsigned","DataView","getUint8","getUint16","getUint32","readSigned","getInt8","getInt16","getInt32","readFloat","getFloat32","getFloat64","readDate","Date","readDataFromTag","track","payload","length_1","Boolean","createFloatBuffer","createIntBuffer","createUIntBuffer","encodeValueToBuffer","putRefinedMetaData","extractElement","removeElement","makeMetadataSeekable","createRIFFChunk","WebPBlockFilter","readBlock","_Buffer","tools_ebml_1","_block","FourCC","chunkSize","idName","metadata","element","splice","result","encodedSizeOfEbml","refinedMetaData","encorder","refineMetadata","mesetadata","sizeDiff","info","clusterPtrs","_metadata","overwrited_1","insertTag","cueInfos","create_cue","seekhead_children","seeks","create_seek_from_clusters","insertHead","idx","reverse","Uint64BE","some","VP8Chunk","originalMetadata","cuesInfo","header","segmentContentStartPos","originalMetadataSize","infoSize","tracks","tracksSize","seekHeadSize","seekHead","cuesSize","lastSizeDifference","_loop_1","infoStart","tracksStart","cuesStart","sizeDifference","maxIterations","finalMetadata","ebml","i_1","originalPayloadOffsetEnd","ebmlSize","offsetDiff","payloadSize","segmentTagBuf","segmentSizeBuf","_segmentSize","newPayloadSize","refined","newNewRefinedSize","getTime","int64str","__awaiter","thisArg","_arguments","P","generator","fulfilled","step","next","rejected","done","then","__generator","body","f","g","_","label","sent","trys","ops","verb","iterator","op","ebml_1","blob","decoder","readstream","readerBlob","refinedMetadataBuf","refinedMetadataBlob","firstPartBlobWithoutMetadata","_b","stream","getReader","filter"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"246.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./node_modules/base64-js/index.js","webpack://tinode-webapp/./node_modules/buffer/index.js","webpack://tinode-webapp/./node_modules/ebml-block/index.js","webpack://tinode-webapp/./node_modules/ebml-block/lib/buffer-reader.js","webpack://tinode-webapp/./node_modules/ebml-block/lib/vint.js","webpack://tinode-webapp/./node_modules/events/events.js","webpack://tinode-webapp/./node_modules/ieee754/index.js","webpack://tinode-webapp/./node_modules/int64-buffer/int64-buffer.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBML.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBMLDecoder.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBMLEncoder.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBMLReader.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/ebmlID.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/index.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/tools-ebml.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/tools.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/index.js"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","var BufferReader = require('./lib/buffer-reader')\n\nvar XIPH_LACING = 1\nvar EBML_LACING = 3\nvar FIXED_SIZE_LACING = 2\n\nmodule.exports = function (buffer) {\n var block = {}\n var reader = new BufferReader(buffer)\n\n block.trackNumber = reader.nextUIntV()\n block.timecode = reader.nextInt16BE()\n\n var flags = reader.nextUInt8()\n\n block.invisible = !!(flags & 0x8)\n\n // only valid for SimpleBlock\n block.keyframe = !!(flags & 0x80)\n block.discardable = !!(flags & 0x1)\n\n var lacing = (flags & 0x6) >> 1\n\n block.frames = readLacedData(reader, lacing)\n\n return block\n}\n\nfunction readLacedData (reader, lacing) {\n if (!lacing) return [reader.nextBuffer()]\n\n var i, frameSize\n var frames = []\n var framesNum = reader.nextUInt8() + 1 // number of frames\n\n if (lacing === FIXED_SIZE_LACING) {\n // remaining data should be divisible by the number of frames\n if (reader.length % framesNum !== 0) throw new Error('Fixed-Size Lacing Error')\n\n frameSize = reader.length / framesNum\n for (i = 0; i < framesNum; i++) {\n frames.push(reader.nextBuffer(frameSize))\n }\n return frames\n }\n\n var frameSizes = []\n\n if (lacing === XIPH_LACING) {\n for (i = 0; i < framesNum - 1; i++) {\n var val\n frameSize = 0\n do {\n val = reader.nextUInt8()\n frameSize += val\n } while (val === 0xff)\n frameSizes.push(frameSize)\n }\n } else if (lacing === EBML_LACING) {\n // first frame\n frameSize = reader.nextUIntV()\n frameSizes.push(frameSize)\n\n // middle frames\n for (i = 1; i < framesNum - 1; i++) {\n frameSize += reader.nextIntV()\n frameSizes.push(frameSize)\n }\n }\n\n for (i = 0; i < framesNum - 1; i++) {\n frames.push(reader.nextBuffer(frameSizes[i]))\n }\n\n // last frame (remaining buffer)\n frames.push(reader.nextBuffer())\n\n return frames\n}\n","var vint = require('./vint')\n\nfunction BufferReader (buffer) {\n this.buffer = buffer\n this.offset = 0\n}\n\n// a super limited subset of the node buffer API\nBufferReader.prototype.nextInt16BE = function () {\n var value = this.buffer.readInt16BE(this.offset)\n this.offset += 2\n return value\n}\n\nBufferReader.prototype.nextUInt8 = function () {\n var value = this.buffer.readUInt8(this.offset)\n this.offset += 1\n return value\n}\n\n// EBML variable sized integers\nBufferReader.prototype.nextUIntV = function () {\n var v = vint(this.buffer, this.offset)\n this.offset += v.length\n return v.value\n}\n\nBufferReader.prototype.nextIntV = function () {\n var v = vint(this.buffer, this.offset, true)\n this.offset += v.length\n return v.value\n}\n\n// buffer slice\nBufferReader.prototype.nextBuffer = function (length) {\n var buffer = length\n ? this.buffer.slice(this.offset, this.offset + length)\n : this.buffer.slice(this.offset)\n this.offset += length || this.length\n return buffer\n}\n\n// remaining bytes to read\nObject.defineProperty(BufferReader.prototype, 'length', {\n get: function () { return this.buffer.length - this.offset }\n})\n\nmodule.exports = BufferReader\n","// https://github.com/themasch/node-ebml/blob/master/lib/ebml/tools.js\nmodule.exports = function (buffer, start, signed) {\n start = start || 0\n for (var length = 1; length <= 8; length++) {\n if (buffer[start] >= Math.pow(2, 8 - length)) {\n break\n }\n }\n if (length > 8) {\n throw new Error('Unrepresentable length: ' + length + ' ' +\n buffer.toString('hex', start, start + length))\n }\n if (start + length > buffer.length) {\n return null\n }\n var i\n var value = buffer[start] & (1 << (8 - length)) - 1\n for (i = 1; i < length; i++) {\n if (i === 7) {\n if (value >= Math.pow(2, 53 - 8) && buffer[start + 7] > 0) {\n return {\n length: length,\n value: -1\n }\n }\n }\n value *= Math.pow(2, 8)\n value += buffer[start + i]\n }\n if (signed) {\n value -= Math.pow(2, length * 7 - 1) - 1\n }\n return {\n length: length,\n value: value\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","// int64-buffer.js\n\n/*jshint -W018 */ // Confusing use of '!'.\n/*jshint -W030 */ // Expected an assignment or function call and instead saw an expression.\n/*jshint -W093 */ // Did you mean to return a conditional instead of an assignment?\n\nvar Uint64BE, Int64BE, Uint64LE, Int64LE;\n\n!function(exports) {\n // constants\n\n var UNDEFINED = \"undefined\";\n var BUFFER = (UNDEFINED !== typeof Buffer) && Buffer;\n var UINT8ARRAY = (UNDEFINED !== typeof Uint8Array) && Uint8Array;\n var ARRAYBUFFER = (UNDEFINED !== typeof ArrayBuffer) && ArrayBuffer;\n var ZERO = [0, 0, 0, 0, 0, 0, 0, 0];\n var isArray = Array.isArray || _isArray;\n var BIT32 = 4294967296;\n var BIT24 = 16777216;\n\n // storage class\n\n var storage; // Array;\n\n // generate classes\n\n Uint64BE = factory(\"Uint64BE\", true, true);\n Int64BE = factory(\"Int64BE\", true, false);\n Uint64LE = factory(\"Uint64LE\", false, true);\n Int64LE = factory(\"Int64LE\", false, false);\n\n // class factory\n\n function factory(name, bigendian, unsigned) {\n var posH = bigendian ? 0 : 4;\n var posL = bigendian ? 4 : 0;\n var pos0 = bigendian ? 0 : 3;\n var pos1 = bigendian ? 1 : 2;\n var pos2 = bigendian ? 2 : 1;\n var pos3 = bigendian ? 3 : 0;\n var fromPositive = bigendian ? fromPositiveBE : fromPositiveLE;\n var fromNegative = bigendian ? fromNegativeBE : fromNegativeLE;\n var proto = Int64.prototype;\n var isName = \"is\" + name;\n var _isInt64 = \"_\" + isName;\n\n // properties\n proto.buffer = void 0;\n proto.offset = 0;\n proto[_isInt64] = true;\n\n // methods\n proto.toNumber = toNumber;\n proto.toString = toString;\n proto.toJSON = toNumber;\n proto.toArray = toArray;\n\n // add .toBuffer() method only when Buffer available\n if (BUFFER) proto.toBuffer = toBuffer;\n\n // add .toArrayBuffer() method only when Uint8Array available\n if (UINT8ARRAY) proto.toArrayBuffer = toArrayBuffer;\n\n // isUint64BE, isInt64BE\n Int64[isName] = isInt64;\n\n // CommonJS\n exports[name] = Int64;\n\n return Int64;\n\n // constructor\n function Int64(buffer, offset, value, raddix) {\n if (!(this instanceof Int64)) return new Int64(buffer, offset, value, raddix);\n return init(this, buffer, offset, value, raddix);\n }\n\n // isUint64BE, isInt64BE\n function isInt64(b) {\n return !!(b && b[_isInt64]);\n }\n\n // initializer\n function init(that, buffer, offset, value, raddix) {\n if (UINT8ARRAY && ARRAYBUFFER) {\n if (buffer instanceof ARRAYBUFFER) buffer = new UINT8ARRAY(buffer);\n if (value instanceof ARRAYBUFFER) value = new UINT8ARRAY(value);\n }\n\n // Int64BE() style\n if (!buffer && !offset && !value && !storage) {\n // shortcut to initialize with zero\n that.buffer = newArray(ZERO, 0);\n return;\n }\n\n // Int64BE(value, raddix) style\n if (!isValidBuffer(buffer, offset)) {\n var _storage = storage || Array;\n raddix = offset;\n value = buffer;\n offset = 0;\n buffer = (storage === BUFFER) ? BUFFER.alloc(8) : new _storage(8);\n }\n\n that.buffer = buffer;\n that.offset = offset |= 0;\n\n // Int64BE(buffer, offset) style\n if (UNDEFINED === typeof value) return;\n\n // Int64BE(buffer, offset, value, raddix) style\n if (\"string\" === typeof value) {\n fromString(buffer, offset, value, raddix || 10);\n } else if (isValidBuffer(value, raddix)) {\n fromArray(buffer, offset, value, raddix);\n } else if (\"number\" === typeof raddix) {\n writeInt32(buffer, offset + posH, value); // high\n writeInt32(buffer, offset + posL, raddix); // low\n } else if (value > 0) {\n fromPositive(buffer, offset, value); // positive\n } else if (value < 0) {\n fromNegative(buffer, offset, value); // negative\n } else {\n fromArray(buffer, offset, ZERO, 0); // zero, NaN and others\n }\n }\n\n function fromString(buffer, offset, str, raddix) {\n var pos = 0;\n var len = str.length;\n var high = 0;\n var low = 0;\n if (str[0] === \"-\") pos++;\n var sign = pos;\n while (pos < len) {\n var chr = parseInt(str[pos++], raddix);\n if (!(chr >= 0)) break; // NaN\n low = low * raddix + chr;\n high = high * raddix + Math.floor(low / BIT32);\n low %= BIT32;\n }\n if (sign) {\n high = ~high;\n if (low) {\n low = BIT32 - low;\n } else {\n high++;\n }\n }\n writeInt32(buffer, offset + posH, high);\n writeInt32(buffer, offset + posL, low);\n }\n\n function toNumber() {\n var buffer = this.buffer;\n var offset = this.offset;\n var high = readInt32(buffer, offset + posH);\n var low = readInt32(buffer, offset + posL);\n if (!unsigned) high |= 0; // a trick to get signed\n return high ? (high * BIT32 + low) : low;\n }\n\n function toString(radix) {\n var buffer = this.buffer;\n var offset = this.offset;\n var high = readInt32(buffer, offset + posH);\n var low = readInt32(buffer, offset + posL);\n var str = \"\";\n var sign = !unsigned && (high & 0x80000000);\n if (sign) {\n high = ~high;\n low = BIT32 - low;\n }\n radix = radix || 10;\n while (1) {\n var mod = (high % radix) * BIT32 + low;\n high = Math.floor(high / radix);\n low = Math.floor(mod / radix);\n str = (mod % radix).toString(radix) + str;\n if (!high && !low) break;\n }\n if (sign) {\n str = \"-\" + str;\n }\n return str;\n }\n\n function writeInt32(buffer, offset, value) {\n buffer[offset + pos3] = value & 255;\n value = value >> 8;\n buffer[offset + pos2] = value & 255;\n value = value >> 8;\n buffer[offset + pos1] = value & 255;\n value = value >> 8;\n buffer[offset + pos0] = value & 255;\n }\n\n function readInt32(buffer, offset) {\n return (buffer[offset + pos0] * BIT24) +\n (buffer[offset + pos1] << 16) +\n (buffer[offset + pos2] << 8) +\n buffer[offset + pos3];\n }\n }\n\n function toArray(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n storage = null; // Array\n\n if (raw !== false && isArray(buffer)) {\n return (buffer.length === 8) ? buffer : buffer.slice(offset, offset + 8);\n }\n\n return newArray(buffer, offset);\n }\n\n function toBuffer(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n storage = BUFFER;\n\n if (raw !== false && BUFFER.isBuffer(buffer)) {\n return (buffer.length === 8) ? buffer : buffer.slice(offset, offset + 8);\n }\n\n // Buffer.from(arraybuffer) available since Node v4.5.0\n // https://nodejs.org/en/blog/release/v4.5.0/\n return BUFFER.from(toArrayBuffer.call(this, raw));\n }\n\n function toArrayBuffer(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n var arrbuf = buffer.buffer;\n storage = UINT8ARRAY;\n\n // arrbuf.slice() ignores buffer.offset until Node v8.0.0\n if (raw !== false && !buffer.offset && (arrbuf instanceof ARRAYBUFFER)) {\n return (arrbuf.byteLength === 8) ? arrbuf : arrbuf.slice(offset, offset + 8);\n }\n\n var dest = new UINT8ARRAY(8);\n fromArray(dest, 0, buffer, offset);\n return dest.buffer;\n }\n\n function isValidBuffer(buffer, offset) {\n var len = buffer && buffer.length;\n offset |= 0;\n return len && (offset + 8 <= len) && (\"string\" !== typeof buffer[offset]);\n }\n\n function fromArray(destbuf, destoff, srcbuf, srcoff) {\n destoff |= 0;\n srcoff |= 0;\n for (var i = 0; i < 8; i++) {\n destbuf[destoff++] = srcbuf[srcoff++] & 255;\n }\n }\n\n function newArray(buffer, offset) {\n return Array.prototype.slice.call(buffer, offset, offset + 8);\n }\n\n function fromPositiveBE(buffer, offset, value) {\n var pos = offset + 8;\n while (pos > offset) {\n buffer[--pos] = value & 255;\n value /= 256;\n }\n }\n\n function fromNegativeBE(buffer, offset, value) {\n var pos = offset + 8;\n value++;\n while (pos > offset) {\n buffer[--pos] = ((-value) & 255) ^ 255;\n value /= 256;\n }\n }\n\n function fromPositiveLE(buffer, offset, value) {\n var end = offset + 8;\n while (offset < end) {\n buffer[offset++] = value & 255;\n value /= 256;\n }\n }\n\n function fromNegativeLE(buffer, offset, value) {\n var end = offset + 8;\n value++;\n while (offset < end) {\n buffer[offset++] = ((-value) & 255) ^ 255;\n value /= 256;\n }\n }\n\n // https://github.com/retrofox/is-array\n function _isArray(val) {\n return !!val && \"[object Array]\" == Object.prototype.toString.call(val);\n }\n\n}(typeof exports === 'object' && typeof exports.nodeName !== 'string' ? exports : (this || {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar int64_buffer_1 = require(\"int64-buffer\");\nvar tools_1 = require(\"./tools\");\nvar tools = require(\"./tools\");\nvar ebmlID_1 = require(\"./ebmlID\");\nvar State;\n(function (State) {\n State[State[\"STATE_TAG\"] = 1] = \"STATE_TAG\";\n State[State[\"STATE_SIZE\"] = 2] = \"STATE_SIZE\";\n State[State[\"STATE_CONTENT\"] = 3] = \"STATE_CONTENT\";\n})(State || (State = {}));\nvar EBMLDecoder = /** @class */ (function () {\n function EBMLDecoder() {\n this._buffer = new tools_1.Buffer(0);\n this._tag_stack = [];\n this._state = State.STATE_TAG;\n this._cursor = 0;\n this._total = 0;\n this._schema = ebmlID_1.byEbmlID;\n this._result = [];\n }\n EBMLDecoder.prototype.decode = function (chunk) {\n this.readChunk(chunk);\n var diff = this._result;\n this._result = [];\n return diff;\n };\n EBMLDecoder.prototype.readChunk = function (chunk) {\n // 読みかけの(読めなかった) this._buffer と 新しい chunk を合わせて読み直す\n this._buffer = tools.concat([this._buffer, new tools_1.Buffer(chunk)]);\n while (this._cursor < this._buffer.length) {\n // console.log(this._cursor, this._total, this._tag_stack);\n if (this._state === State.STATE_TAG && !this.readTag()) {\n break;\n }\n if (this._state === State.STATE_SIZE && !this.readSize()) {\n break;\n }\n if (this._state === State.STATE_CONTENT && !this.readContent()) {\n break;\n }\n }\n };\n EBMLDecoder.prototype.getSchemaInfo = function (tagNum) {\n return this._schema[tagNum] || {\n name: \"unknown\",\n level: -1,\n type: \"unknown\",\n description: \"unknown\"\n };\n };\n /**\n * vint された parsing tag\n * @return - return false when waiting for more data\n */\n EBMLDecoder.prototype.readTag = function () {\n // tag.length が buffer の外にある\n if (this._cursor >= this._buffer.length) {\n return false;\n }\n // read ebml id vint without first byte\n var tag = (0, tools_1.readVint)(this._buffer, this._cursor);\n // tag が読めなかった\n if (tag == null) {\n return false;\n }\n // >>>>>>>>>\n // tag 識別子\n //const tagStr = this._buffer.toString(\"hex\", this._cursor, this._cursor + tag.length);\n //const tagNum = parseInt(tagStr, 16);\n // 上と等価\n var buf = this._buffer.slice(this._cursor, this._cursor + tag.length);\n var tagNum = buf.reduce(function (o, v, i, arr) { return o + v * Math.pow(16, 2 * (arr.length - 1 - i)); }, 0);\n var schema = this.getSchemaInfo(tagNum);\n var tagObj = {\n EBML_ID: tagNum.toString(16),\n schema: schema,\n type: schema.type,\n name: schema.name,\n level: schema.level,\n tagStart: this._total,\n tagEnd: this._total + tag.length,\n sizeStart: this._total + tag.length,\n sizeEnd: null,\n dataStart: null,\n dataEnd: null,\n dataSize: null,\n data: null\n };\n // | tag: vint | size: vint | data: Buffer(size) |\n this._tag_stack.push(tagObj);\n // <<<<<<<<\n // ポインタを進める\n this._cursor += tag.length;\n this._total += tag.length;\n // 読み込み状態変更\n this._state = State.STATE_SIZE;\n return true;\n };\n /**\n * vint された現在のタグの内容の大きさを読み込む\n * @return - return false when waiting for more data\n */\n EBMLDecoder.prototype.readSize = function () {\n // tag.length が buffer の外にある\n if (this._cursor >= this._buffer.length) {\n return false;\n }\n // read ebml datasize vint without first byte\n var size = (0, tools_1.readVint)(this._buffer, this._cursor);\n // まだ読めない\n if (size == null) {\n return false;\n }\n // >>>>>>>>>\n // current tag の data size 決定\n var tagObj = this._tag_stack[this._tag_stack.length - 1];\n tagObj.sizeEnd = tagObj.sizeStart + size.length;\n tagObj.dataStart = tagObj.sizeEnd;\n tagObj.dataSize = size.value;\n if (size.value === -1) {\n // unknown size\n tagObj.dataEnd = -1;\n if (tagObj.type === \"m\") {\n tagObj.unknownSize = true;\n }\n }\n else {\n tagObj.dataEnd = tagObj.sizeEnd + size.value;\n }\n // <<<<<<<<\n // ポインタを進める\n this._cursor += size.length;\n this._total += size.length;\n this._state = State.STATE_CONTENT;\n return true;\n };\n /**\n * データ読み込み\n */\n EBMLDecoder.prototype.readContent = function () {\n var tagObj = this._tag_stack[this._tag_stack.length - 1];\n // master element は子要素を持つので生データはない\n if (tagObj.type === 'm') {\n // console.log('content should be tags');\n tagObj.isEnd = false;\n this._result.push(tagObj);\n this._state = State.STATE_TAG;\n // この Mastert Element は空要素か\n if (tagObj.dataSize === 0) {\n // 即座に終了タグを追加\n var elm = Object.assign({}, tagObj, { isEnd: true });\n this._result.push(elm);\n this._tag_stack.pop(); // スタックからこのタグを捨てる\n }\n return true;\n }\n // waiting for more data\n if (this._buffer.length < this._cursor + tagObj.dataSize) {\n return false;\n }\n // タグの中身の生データ\n var data = this._buffer.slice(this._cursor, this._cursor + tagObj.dataSize);\n // 読み終わったバッファを捨てて読み込んでいる部分のバッファのみ残す\n this._buffer = this._buffer.slice(this._cursor + tagObj.dataSize);\n tagObj.data = data;\n // >>>>>>>>>\n switch (tagObj.type) {\n //case \"m\": break;\n // Master-Element - contains other EBML sub-elements of the next lower level\n case \"u\":\n tagObj.value = data.readUIntBE(0, data.length);\n break;\n // Unsigned Integer - Big-endian, any size from 1 to 8 octets\n case \"i\":\n tagObj.value = data.readIntBE(0, data.length);\n break;\n // Signed Integer - Big-endian, any size from 1 to 8 octets\n case \"f\":\n tagObj.value = tagObj.dataSize === 4 ? data.readFloatBE(0) :\n tagObj.dataSize === 8 ? data.readDoubleBE(0) :\n (console.warn(\"cannot read \".concat(tagObj.dataSize, \" octets float. failback to 0\")), 0);\n break;\n // Float - Big-endian, defined for 4 and 8 octets (32, 64 bits)\n case \"s\":\n tagObj.value = data.toString(\"ascii\");\n break; // ascii\n // Printable ASCII (0x20 to 0x7E), zero-padded when needed\n case \"8\":\n tagObj.value = data.toString(\"utf8\");\n break;\n // Unicode string, zero padded when needed (RFC 2279)\n case \"b\":\n tagObj.value = data;\n break;\n // Binary - not interpreted by the parser\n case \"d\":\n tagObj.value = (0, tools_1.convertEBMLDateToJSDate)(new int64_buffer_1.Int64BE(data).toNumber());\n break;\n // nano second; Date.UTC(2001,1,1,0,0,0,0) === 980985600000\n // Date - signed 8 octets integer in nanoseconds with 0 indicating \n // the precise beginning of the millennium (at 2001-01-01T00:00:00,000000000 UTC)\n }\n if (tagObj.value === null) {\n throw new Error(\"unknown tag type:\" + tagObj.type);\n }\n this._result.push(tagObj);\n // <<<<<<<<\n // ポインタを進める\n this._total += tagObj.dataSize;\n // タグ待ちモードに変更\n this._state = State.STATE_TAG;\n this._cursor = 0;\n this._tag_stack.pop(); // remove the object from the stack\n while (this._tag_stack.length > 0) {\n var topEle = this._tag_stack[this._tag_stack.length - 1];\n // 親が不定長サイズなので閉じタグは期待できない\n if (topEle.dataEnd < 0) {\n this._tag_stack.pop(); // 親タグを捨てる\n return true;\n }\n // 閉じタグの来るべき場所まで来たかどうか\n if (this._total < topEle.dataEnd) {\n break;\n }\n // 閉じタグを挿入すべきタイミングが来た\n if (topEle.type !== \"m\") {\n throw new Error(\"parent element is not master element\");\n }\n var elm = Object.assign({}, topEle, { isEnd: true });\n this._result.push(elm);\n this._tag_stack.pop();\n }\n return true;\n };\n return EBMLDecoder;\n}());\nexports.default = EBMLDecoder;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tools = require(\"./tools\");\nvar tools_1 = require(\"./tools\");\nvar ebmlID_1 = require(\"./ebmlID\");\nvar EBMLEncoder = /** @class */ (function () {\n function EBMLEncoder() {\n this._schema = ebmlID_1.byEbmlID;\n this._buffers = [];\n this._stack = [];\n }\n EBMLEncoder.prototype.encode = function (elms) {\n var _this = this;\n return tools.concat(elms.reduce(function (lst, elm) {\n return lst.concat(_this.encodeChunk(elm));\n }, [])).buffer;\n };\n EBMLEncoder.prototype.encodeChunk = function (elm) {\n if (elm.type === \"m\") {\n if (!elm.isEnd) {\n this.startTag(elm);\n }\n else {\n this.endTag(elm);\n }\n }\n else {\n // ensure that we are working with an internal `Buffer` instance\n elm.data = tools_1.Buffer.from(elm.data);\n this.writeTag(elm);\n }\n return this.flush();\n };\n EBMLEncoder.prototype.flush = function () {\n var ret = this._buffers;\n this._buffers = [];\n return ret;\n };\n EBMLEncoder.prototype.getSchemaInfo = function (tagName) {\n var tagNums = Object.keys(this._schema).map(Number);\n for (var i = 0; i < tagNums.length; i++) {\n var tagNum = tagNums[i];\n if (this._schema[tagNum].name === tagName) {\n return new tools_1.Buffer(tagNum.toString(16), 'hex');\n }\n }\n return null;\n };\n EBMLEncoder.prototype.writeTag = function (elm) {\n var tagName = elm.name;\n var tagId = this.getSchemaInfo(tagName);\n var tagData = elm.data;\n if (tagId == null) {\n throw new Error('No schema entry found for ' + tagName);\n }\n var data = tools.encodeTag(tagId, tagData);\n /**\n * 親要素が閉じタグあり(isEnd)なら閉じタグが来るまで待つ(children queに入る)\n */\n if (this._stack.length > 0) {\n var last = this._stack[this._stack.length - 1];\n last.children.push({\n tagId: tagId,\n elm: elm,\n children: [],\n data: data\n });\n return;\n }\n this._buffers = this._buffers.concat(data);\n return;\n };\n EBMLEncoder.prototype.startTag = function (elm) {\n var tagName = elm.name;\n var tagId = this.getSchemaInfo(tagName);\n if (tagId == null) {\n throw new Error('No schema entry found for ' + tagName);\n }\n /**\n * 閉じタグ不定長の場合はスタックに積まずに即時バッファに書き込む\n */\n if (elm.unknownSize) {\n var data = tools.encodeTag(tagId, new tools_1.Buffer(0), elm.unknownSize);\n this._buffers = this._buffers.concat(data);\n return;\n }\n var tag = {\n tagId: tagId,\n elm: elm,\n children: [],\n data: null\n };\n if (this._stack.length > 0) {\n this._stack[this._stack.length - 1].children.push(tag);\n }\n this._stack.push(tag);\n };\n EBMLEncoder.prototype.endTag = function (elm) {\n var tagName = elm.name;\n var tag = this._stack.pop();\n if (tag == null) {\n throw new Error(\"EBML structure is broken\");\n }\n if (tag.elm.name !== elm.name) {\n throw new Error(\"EBML structure is broken\");\n }\n var childTagDataBuffers = tag.children.reduce(function (lst, child) {\n if (child.data === null) {\n throw new Error(\"EBML structure is broken\");\n }\n return lst.concat(child.data);\n }, []);\n var childTagDataBuffer = tools.concat(childTagDataBuffers);\n if (tag.elm.type === \"m\") {\n tag.data = tools.encodeTag(tag.tagId, childTagDataBuffer, tag.elm.unknownSize);\n }\n else {\n tag.data = tools.encodeTag(tag.tagId, childTagDataBuffer);\n }\n if (this._stack.length < 1) {\n this._buffers = this._buffers.concat(tag.data);\n }\n };\n return EBMLEncoder;\n}());\nexports.default = EBMLEncoder;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar events_1 = require(\"events\");\nvar tools = require(\"./tools\");\n/**\n * This is an informal code for reference.\n * EBMLReader is a class for getting information to enable seeking Webm recorded by MediaRecorder.\n * So please do not use for regular WebM files.\n */\nvar EBMLReader = /** @class */ (function (_super) {\n __extends(EBMLReader, _super);\n function EBMLReader() {\n var _this = _super.call(this) || this;\n _this.logGroup = \"\";\n _this.hasLoggingStarted = false;\n _this.metadataloaded = false;\n _this.chunks = [];\n _this.stack = [];\n _this.segmentOffset = 0;\n _this.last2SimpleBlockVideoTrackTimecode = [0, 0];\n _this.last2SimpleBlockAudioTrackTimecode = [0, 0];\n _this.lastClusterTimecode = 0;\n _this.lastClusterPosition = 0;\n _this.timecodeScale = 1000000; // webm default TimecodeScale is 1ms\n _this.metadataSize = 0;\n _this.metadatas = [];\n _this.cues = [];\n _this.firstVideoBlockRead = false;\n _this.firstAudioBlockRead = false;\n _this.currentTrack = { TrackNumber: -1, TrackType: -1, DefaultDuration: null, CodecDelay: null };\n _this.trackTypes = [];\n _this.trackDefaultDuration = [];\n _this.trackCodecDelay = [];\n _this.trackInfo = { type: \"nothing\" };\n _this.ended = false;\n _this.logging = false;\n _this.use_duration_every_simpleblock = false;\n _this.use_webp = false;\n _this.use_segment_info = true;\n _this.drop_default_duration = true;\n return _this;\n }\n /**\n * emit final state.\n */\n EBMLReader.prototype.stop = function () {\n this.ended = true;\n this.emit_segment_info();\n // clean up any unclosed Master Elements at the end of the stream.\n while (this.stack.length) {\n this.stack.pop();\n if (this.logging) {\n console.groupEnd();\n }\n }\n // close main group if set, logging is enabled, and has actually logged anything.\n if (this.logging && this.hasLoggingStarted && this.logGroup) {\n console.groupEnd();\n }\n };\n /**\n * emit chunk info\n */\n EBMLReader.prototype.emit_segment_info = function () {\n var data = this.chunks;\n this.chunks = [];\n if (!this.metadataloaded) {\n this.metadataloaded = true;\n this.metadatas = data;\n var videoTrackNum = this.trackTypes.indexOf(1); // find first video track\n var audioTrackNum = this.trackTypes.indexOf(2); // find first audio track\n this.trackInfo = videoTrackNum >= 0 && audioTrackNum >= 0 ? { type: \"both\", trackNumber: videoTrackNum }\n : videoTrackNum >= 0 ? { type: \"video\", trackNumber: videoTrackNum }\n : audioTrackNum >= 0 ? { type: \"audio\", trackNumber: audioTrackNum }\n : { type: \"nothing\" };\n if (!this.use_segment_info) {\n return;\n }\n this.emit(\"metadata\", { data: data, metadataSize: this.metadataSize });\n }\n else {\n if (!this.use_segment_info) {\n return;\n }\n var timecode = this.lastClusterTimecode;\n var duration = this.duration;\n var timecodeScale = this.timecodeScale;\n this.emit(\"cluster\", { timecode: timecode, data: data });\n this.emit(\"duration\", { timecodeScale: timecodeScale, duration: duration });\n }\n };\n EBMLReader.prototype.read = function (elm) {\n var _this = this;\n var drop = false;\n if (this.ended) {\n // reader is finished\n return;\n }\n if (elm.type === \"m\") {\n // 閉じタグの自動挿入\n if (elm.isEnd) {\n this.stack.pop();\n }\n else {\n var parent_1 = this.stack[this.stack.length - 1];\n if (parent_1 != null && parent_1.level >= elm.level) {\n // 閉じタグなしでレベルが下がったら閉じタグを挿入\n this.stack.pop();\n // From http://w3c.github.io/media-source/webm-byte-stream-format.html#webm-media-segments\n // This fixes logging for webm streams with Cluster of unknown length and no Cluster closing elements.\n if (this.logging) {\n console.groupEnd();\n }\n parent_1.dataEnd = elm.dataEnd;\n parent_1.dataSize = elm.dataEnd - parent_1.dataStart;\n parent_1.unknownSize = false;\n var o = Object.assign({}, parent_1, { name: parent_1.name, type: parent_1.type, isEnd: true });\n this.chunks.push(o);\n }\n this.stack.push(elm);\n }\n }\n if (elm.type === \"m\" && elm.name == \"Segment\") {\n if (this.segmentOffset != 0) {\n console.warn(\"Multiple segments detected!\");\n }\n this.segmentOffset = elm.dataStart;\n this.emit(\"segment_offset\", this.segmentOffset);\n }\n else if (elm.type === \"b\" && elm.name === \"SimpleBlock\") {\n var _a = tools.ebmlBlock(elm.data), timecode = _a.timecode, trackNumber = _a.trackNumber, frames_1 = _a.frames;\n if (this.trackTypes[trackNumber] === 1) { // trackType === 1 => video track\n if (!this.firstVideoBlockRead) {\n this.firstVideoBlockRead = true;\n if (this.trackInfo.type === \"both\" || this.trackInfo.type === \"video\") {\n var CueTime = this.lastClusterTimecode + timecode;\n this.cues.push({ CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n this.emit(\"cue_info\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: this.lastClusterTimecode });\n this.emit(\"cue\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n }\n }\n this.last2SimpleBlockVideoTrackTimecode = [this.last2SimpleBlockVideoTrackTimecode[1], timecode];\n }\n else if (this.trackTypes[trackNumber] === 2) { // trackType === 2 => audio track\n if (!this.firstAudioBlockRead) {\n this.firstAudioBlockRead = true;\n if (this.trackInfo.type === \"audio\") {\n var CueTime = this.lastClusterTimecode + timecode;\n this.cues.push({ CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n this.emit(\"cue_info\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: this.lastClusterTimecode });\n this.emit(\"cue\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n }\n }\n this.last2SimpleBlockAudioTrackTimecode = [this.last2SimpleBlockAudioTrackTimecode[1], timecode];\n }\n if (this.use_duration_every_simpleblock) {\n this.emit(\"duration\", { timecodeScale: this.timecodeScale, duration: this.duration });\n }\n if (this.use_webp) {\n frames_1.forEach(function (frame) {\n var startcode = frame.slice(3, 6).toString(\"hex\");\n if (startcode !== \"9d012a\") {\n return;\n }\n ; // VP8 の場合\n var webpBuf = tools.VP8BitStreamToRiffWebPBuffer(frame);\n var webp = new Blob([webpBuf], { type: \"image/webp\" });\n var currentTime = _this.duration;\n _this.emit(\"webp\", { currentTime: currentTime, webp: webp });\n });\n }\n }\n else if (elm.type === \"m\" && elm.name === \"Cluster\" && elm.isEnd === false) {\n this.firstVideoBlockRead = false;\n this.firstAudioBlockRead = false;\n this.emit_segment_info();\n this.emit(\"cluster_ptr\", elm.tagStart);\n this.lastClusterPosition = elm.tagStart;\n }\n else if (elm.type === \"u\" && elm.name === \"Timecode\") {\n this.lastClusterTimecode = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"TimecodeScale\") {\n this.timecodeScale = elm.value;\n }\n else if (elm.type === \"m\" && elm.name === \"TrackEntry\") {\n if (elm.isEnd) {\n this.trackTypes[this.currentTrack.TrackNumber] = this.currentTrack.TrackType;\n this.trackDefaultDuration[this.currentTrack.TrackNumber] = this.currentTrack.DefaultDuration;\n this.trackCodecDelay[this.currentTrack.TrackNumber] = this.currentTrack.CodecDelay;\n }\n else {\n this.currentTrack = { TrackNumber: -1, TrackType: -1, DefaultDuration: null, CodecDelay: null };\n }\n }\n else if (elm.type === \"u\" && elm.name === \"TrackType\") {\n this.currentTrack.TrackType = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"TrackNumber\") {\n this.currentTrack.TrackNumber = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"CodecDelay\") {\n this.currentTrack.CodecDelay = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"DefaultDuration\") {\n // media source api は DefaultDuration を計算するとバグる。\n // https://bugs.chromium.org/p/chromium/issues/detail?id=606000#c22\n // chrome 58 ではこれを回避するために DefaultDuration 要素を抜き取った。\n // chrome 58 以前でもこのタグを抜き取ることで回避できる\n if (this.drop_default_duration) {\n console.warn(\"DefaultDuration detected!, remove it\");\n drop = true;\n }\n else {\n this.currentTrack.DefaultDuration = elm.value;\n }\n }\n else if (elm.name === \"unknown\") {\n console.warn(elm);\n }\n if (!this.metadataloaded && elm.dataEnd > 0) {\n this.metadataSize = elm.dataEnd;\n }\n if (!drop) {\n this.chunks.push(elm);\n }\n if (this.logging) {\n this.put(elm);\n }\n };\n Object.defineProperty(EBMLReader.prototype, \"duration\", {\n /**\n * DefaultDuration が定義されている場合は最後のフレームのdurationも考慮する\n * 単位 timecodeScale\n *\n * !!! if you need duration with seconds !!!\n * ```js\n * const nanosec = reader.duration * reader.timecodeScale;\n * const sec = nanosec / 1000 / 1000 / 1000;\n * ```\n */\n get: function () {\n if (this.trackInfo.type === \"nothing\") {\n console.warn(\"no video, no audio track\");\n return 0;\n }\n // defaultDuration は 生の nano sec\n var defaultDuration = 0;\n // nanoseconds\n var codecDelay = 0;\n var lastTimecode = 0;\n var _defaultDuration = this.trackDefaultDuration[this.trackInfo.trackNumber];\n if (typeof _defaultDuration === \"number\") {\n defaultDuration = _defaultDuration;\n }\n else {\n // https://bugs.chromium.org/p/chromium/issues/detail?id=606000#c22\n // default duration がないときに使う delta\n if (this.trackInfo.type === \"both\") {\n if (this.last2SimpleBlockAudioTrackTimecode[1] > this.last2SimpleBlockVideoTrackTimecode[1]) {\n // audio diff\n defaultDuration = (this.last2SimpleBlockAudioTrackTimecode[1] - this.last2SimpleBlockAudioTrackTimecode[0]) * this.timecodeScale;\n // audio delay\n var delay = this.trackCodecDelay[this.trackTypes.indexOf(2)]; // 2 => audio\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n // audio timecode\n lastTimecode = this.last2SimpleBlockAudioTrackTimecode[1];\n }\n else {\n // video diff\n defaultDuration = (this.last2SimpleBlockVideoTrackTimecode[1] - this.last2SimpleBlockVideoTrackTimecode[0]) * this.timecodeScale;\n // video delay\n var delay = this.trackCodecDelay[this.trackTypes.indexOf(1)]; // 1 => video\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n // video timecode\n lastTimecode = this.last2SimpleBlockVideoTrackTimecode[1];\n }\n }\n else if (this.trackInfo.type === \"video\") {\n defaultDuration = (this.last2SimpleBlockVideoTrackTimecode[1] - this.last2SimpleBlockVideoTrackTimecode[0]) * this.timecodeScale;\n var delay = this.trackCodecDelay[this.trackInfo.trackNumber]; // 2 => audio\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n lastTimecode = this.last2SimpleBlockVideoTrackTimecode[1];\n }\n else if (this.trackInfo.type === \"audio\") {\n defaultDuration = (this.last2SimpleBlockAudioTrackTimecode[1] - this.last2SimpleBlockAudioTrackTimecode[0]) * this.timecodeScale;\n var delay = this.trackCodecDelay[this.trackInfo.trackNumber]; // 1 => video\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n lastTimecode = this.last2SimpleBlockAudioTrackTimecode[1];\n } // else { not reached }\n }\n // convert to timecodescale\n var duration_nanosec = ((this.lastClusterTimecode + lastTimecode) * this.timecodeScale) + defaultDuration - codecDelay;\n var duration = duration_nanosec / this.timecodeScale;\n return Math.floor(duration);\n },\n enumerable: false,\n configurable: true\n });\n EBMLReader.prototype.addListener = function (event, listener) {\n return _super.prototype.addListener.call(this, event, listener);\n };\n EBMLReader.prototype.put = function (elm) {\n if (!this.hasLoggingStarted) {\n this.hasLoggingStarted = true;\n if (this.logging && this.logGroup) {\n console.groupCollapsed(this.logGroup);\n }\n }\n if (elm.type === \"m\") {\n if (elm.isEnd) {\n console.groupEnd();\n }\n else {\n console.group(elm.name + \":\" + elm.tagStart);\n }\n }\n else if (elm.type === \"b\") {\n // for debug\n //if(elm.name === \"SimpleBlock\"){\n //const o = EBML.tools.ebmlBlock(elm.value);\n //console.log(elm.name, elm.type, o.trackNumber, o.timecode);\n //}else{\n console.log(elm.name, elm.type);\n //}\n }\n else {\n console.log(elm.name, elm.tagStart, elm.type, elm.value);\n }\n };\n return EBMLReader;\n}(events_1.EventEmitter));\nexports.default = EBMLReader;\n;\n;\n;\n;\n","\"use strict\";\n// source: https://www.matroska.org/technical/elements.html\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.byEbmlID = void 0;\nexports.byEbmlID = {\n 0x80: {\n name: \"ChapterDisplay\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains all possible strings to use for the chapter display.\"\n },\n 0x83: {\n name: \"TrackType\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"1-254\",\n description: \"A set of track types coded on 8 bits (1: video, 2: audio, 3: complex, 0x10: logo, 0x11: subtitle, 0x12: buttons, 0x20: control).\"\n },\n 0x85: {\n name: \"ChapString\",\n cppname: \"ChapterString\",\n level: 5,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: true,\n description: \"Contains the string to use as the chapter atom.\"\n },\n 0x86: {\n name: \"CodecID\",\n level: 3,\n type: \"s\",\n mandatory: true,\n minver: 1,\n description: \"An ID corresponding to the codec, see the codec page for more info.\"\n },\n 0x88: {\n name: \"FlagDefault\",\n cppname: \"TrackFlagDefault\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if that track (audio, video or subs) SHOULD be active if no language found matches the user preference. (1 bit)\"\n },\n 0x89: {\n name: \"ChapterTrackNumber\",\n level: 5,\n type: \"u\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"UID of the Track to apply this chapter too. In the absense of a control track, choosing this chapter will select the listed Tracks and deselect unlisted tracks. Absense of this element indicates that the Chapter should be applied to any currently used Tracks.\"\n },\n 0x91: {\n name: \"ChapterTimeStart\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: true,\n description: \"Timestamp of the start of Chapter (not scaled).\"\n },\n 0x92: {\n name: \"ChapterTimeEnd\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"Timestamp of the end of Chapter (timestamp excluded, not scaled).\"\n },\n 0x96: {\n name: \"CueRefTime\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: false,\n description: \"Timestamp of the referenced Block.\"\n },\n 0x97: {\n name: \"CueRefCluster\",\n level: 5,\n type: \"u\",\n mandatory: true,\n webm: false,\n description: \"The Position of the Cluster containing the referenced Block.\"\n },\n 0x98: {\n name: \"ChapterFlagHidden\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If a chapter is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)\"\n },\n 0x4254: {\n name: \"ContentCompAlgo\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\", \"\", \"\" ],\n // \"del\": [ \"1 - bzlib,\", \"2 - lzo1x\" ],\n description: \"The compression algorithm used. Algorithms that have been specified so far are: 0 - zlib, 3 - Header Stripping\"\n },\n 0x4255: {\n name: \"ContentCompSettings\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"Settings that might be needed by the decompressor. For Header Stripping (ContentCompAlgo=3), the bytes that were removed from the beggining of each frames of the track.\"\n },\n 0x4282: {\n name: \"DocType\",\n level: 1,\n type: \"s\",\n mandatory: true,\n \"default\": \"matroska\",\n minver: 1,\n description: \"A string that describes the type of document that follows this EBML header. 'matroska' in our case or 'webm' for webm files.\"\n },\n 0x4285: {\n name: \"DocTypeReadVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The minimum DocType version an interpreter has to support to read this file.\"\n },\n 0x4286: {\n name: \"EBMLVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The version of EBML parser used to create the file.\"\n },\n 0x4287: {\n name: \"DocTypeVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The version of DocType interpreter used to create the file.\"\n },\n 0x4444: {\n name: \"SegmentFamily\",\n level: 2,\n type: \"b\",\n multiple: true,\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A randomly generated unique ID that all segments related to each other must use (128 bits).\"\n },\n 0x4461: {\n name: \"DateUTC\",\n level: 2,\n type: \"d\",\n minver: 1,\n description: \"Date of the origin of timestamp (value 0), i.e. production date.\"\n },\n 0x4484: {\n name: \"TagDefault\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"Indication to know if this is the default/original language to use for the given tag. (1 bit)\"\n },\n 0x4485: {\n name: \"TagBinary\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"The values of the Tag if it is binary. Note that this cannot be used in the same SimpleTag as TagString.\"\n },\n 0x4487: {\n name: \"TagString\",\n level: 4,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"The value of the Element.\"\n },\n 0x4489: {\n name: \"Duration\",\n level: 2,\n type: \"f\",\n minver: 1,\n range: \"> 0\",\n description: \"Duration of the segment (based on TimecodeScale).\"\n },\n 0x4598: {\n name: \"ChapterFlagEnabled\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"Specify wether the chapter is enabled. It can be enabled/disabled by a Control Track. When disabled, the movie should skip all the content between the TimeStart and TimeEnd of this chapter (see flag notes). (1 bit)\"\n },\n 0x4660: {\n name: \"FileMimeType\",\n level: 3,\n type: \"s\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"MIME type of the file.\"\n },\n 0x4661: {\n name: \"FileUsedStartTime\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX font extension\"\n },\n 0x4662: {\n name: \"FileUsedEndTime\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX font extension\"\n },\n 0x4675: {\n name: \"FileReferral\",\n level: 3,\n type: \"b\",\n webm: false,\n description: \"A binary value that a track/codec can refer to when the attachment is needed.\"\n },\n 0x5031: {\n name: \"ContentEncodingOrder\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"Tells when this modification was used during encoding/muxing starting with 0 and counting upwards. The decoder/demuxer has to start with the highest order number it finds and work its way down. This value has to be unique over all ContentEncodingOrder elements in the segment.\"\n },\n 0x5032: {\n name: \"ContentEncodingScope\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n // \"br\": [ \"\", \"\", \"\" ],\n description: \"A bit field that describes which elements have been modified in this way. Values (big endian) can be OR'ed. Possible values: 1 - all frame contents, 2 - the track's private data, 4 - the next ContentEncoding (next ContentEncodingOrder. Either the data inside ContentCompression and/or ContentEncryption)\"\n },\n 0x5033: {\n name: \"ContentEncodingType\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\" ],\n description: \"A value describing what kind of transformation has been done. Possible values: 0 - compression, 1 - encryption\"\n },\n 0x5034: {\n name: \"ContentCompression\",\n level: 5,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings describing the compression used. Must be present if the value of ContentEncodingType is 0 and absent otherwise. Each block must be decompressable even if no previous block is available in order not to prevent seeking.\"\n },\n 0x5035: {\n name: \"ContentEncryption\",\n level: 5,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings describing the encryption used. Must be present if the value of ContentEncodingType is 1 and absent otherwise.\"\n },\n 0x5378: {\n name: \"CueBlockNumber\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 1,\n range: \"not 0\",\n description: \"Number of the Block in the specified Cluster.\"\n },\n 0x5654: {\n name: \"ChapterStringUID\",\n level: 4,\n type: \"8\",\n mandatory: false,\n minver: 3,\n webm: true,\n description: \"A unique string ID to identify the Chapter. Use for WebVTT cue identifier storage.\"\n },\n 0x5741: {\n name: \"WritingApp\",\n level: 2,\n type: \"8\",\n mandatory: true,\n minver: 1,\n description: \"Writing application (\\\"mkvmerge-0.3.3\\\").\"\n },\n 0x5854: {\n name: \"SilentTracks\",\n cppname: \"ClusterSilentTracks\",\n level: 2,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks on seeking. Then you should decide what track to use.\"\n },\n 0x6240: {\n name: \"ContentEncoding\",\n level: 4,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Settings for one content encoding like compression or encryption.\"\n },\n 0x6264: {\n name: \"BitDepth\",\n cppname: \"AudioBitDepth\",\n level: 4,\n type: \"u\",\n minver: 1,\n range: \"not 0\",\n description: \"Bits per sample, mostly used for PCM.\"\n },\n 0x6532: {\n name: \"SignedElement\",\n level: 3,\n type: \"b\",\n multiple: true,\n webm: false,\n description: \"An element ID whose data will be used to compute the signature.\"\n },\n 0x6624: {\n name: \"TrackTranslate\",\n level: 3,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"The track identification for the given Chapter Codec.\"\n },\n 0x6911: {\n name: \"ChapProcessCommand\",\n cppname: \"ChapterProcessCommand\",\n level: 5,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains all the commands associated to the Atom.\"\n },\n 0x6922: {\n name: \"ChapProcessTime\",\n cppname: \"ChapterProcessTime\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Defines when the process command should be handled (0: during the whole chapter, 1: before starting playback, 2: after playback of the chapter).\"\n },\n 0x6924: {\n name: \"ChapterTranslate\",\n level: 2,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"A tuple of corresponding ID used by chapter codecs to represent this segment.\"\n },\n 0x6933: {\n name: \"ChapProcessData\",\n cppname: \"ChapterProcessData\",\n level: 6,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Contains the command information. The data should be interpreted depending on the ChapProcessCodecID value. For ChapProcessCodecID = 1, the data correspond to the binary DVD cell pre/post commands.\"\n },\n 0x6944: {\n name: \"ChapProcess\",\n cppname: \"ChapterProcess\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains all the commands associated to the Atom.\"\n },\n 0x6955: {\n name: \"ChapProcessCodecID\",\n cppname: \"ChapterProcessCodecID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"Contains the type of the codec used for the processing. A value of 0 means native Matroska processing (to be defined), a value of 1 means the DVD command set is used. More codec IDs can be added later.\"\n },\n 0x7373: {\n name: \"Tag\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Element containing elements specific to Tracks/Chapters.\"\n },\n 0x7384: {\n name: \"SegmentFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"A filename corresponding to this segment.\"\n },\n 0x7446: {\n name: \"AttachmentLink\",\n cppname: \"TrackAttachmentLink\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"The UID of an attachment that is used by this codec.\"\n },\n 0x258688: {\n name: \"CodecName\",\n level: 3,\n type: \"8\",\n minver: 1,\n description: \"A human-readable string specifying the codec.\"\n },\n 0x18538067: {\n name: \"Segment\",\n level: \"0\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"This element contains all other top-level (level 1) elements. Typically a Matroska file is composed of 1 segment.\"\n },\n 0x447a: {\n name: \"TagLanguage\",\n level: 4,\n type: \"s\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": \"und\",\n description: \"Specifies the language of the tag specified, in the Matroska languages form.\"\n },\n 0x45a3: {\n name: \"TagName\",\n level: 4,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The name of the Tag that is going to be stored.\"\n },\n 0x67c8: {\n name: \"SimpleTag\",\n cppname: \"TagSimple\",\n level: 3,\n \"recursive\": \"1\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains general information about the target.\"\n },\n 0x63c6: {\n name: \"TagAttachmentUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Attachment(s) the tags belong to. If the value is 0 at this level, the tags apply to all the attachments in the Segment.\"\n },\n 0x63c4: {\n name: \"TagChapterUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Chapter(s) the tags belong to. If the value is 0 at this level, the tags apply to all chapters in the Segment.\"\n },\n 0x63c9: {\n name: \"TagEditionUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the EditionEntry(s) the tags belong to. If the value is 0 at this level, the tags apply to all editions in the Segment.\"\n },\n 0x63c5: {\n name: \"TagTrackUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Track(s) the tags belong to. If the value is 0 at this level, the tags apply to all tracks in the Segment.\"\n },\n 0x63ca: {\n name: \"TargetType\",\n cppname: \"TagTargetType\",\n level: 4,\n type: \"s\",\n minver: 1,\n webm: false,\n \"strong\": \"informational\",\n description: \"An string that can be used to display the logical level of the target like \\\"ALBUM\\\", \\\"TRACK\\\", \\\"MOVIE\\\", \\\"CHAPTER\\\", etc (see TargetType).\"\n },\n 0x68ca: {\n name: \"TargetTypeValue\",\n cppname: \"TagTargetTypeValue\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 50,\n description: \"A number to indicate the logical level of the target (see TargetType).\"\n },\n 0x63c0: {\n name: \"Targets\",\n cppname: \"TagTargets\",\n level: 3,\n type: \"m\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Contain all UIDs where the specified meta data apply. It is empty to describe everything in the segment.\"\n },\n 0x1254c367: {\n name: \"Tags\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Element containing elements specific to Tracks/Chapters. A list of valid tags can be found here.\"\n },\n 0x450d: {\n name: \"ChapProcessPrivate\",\n cppname: \"ChapterProcessPrivate\",\n level: 5,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"Some optional data attached to the ChapProcessCodecID information. For ChapProcessCodecID = 1, it is the \\\"DVD level\\\" equivalent.\"\n },\n 0x437e: {\n name: \"ChapCountry\",\n cppname: \"ChapterCountry\",\n level: 5,\n type: \"s\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"The countries corresponding to the string, same 2 octets as in Internet domains.\"\n },\n 0x437c: {\n name: \"ChapLanguage\",\n cppname: \"ChapterLanguage\",\n level: 5,\n type: \"s\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n \"default\": \"eng\",\n description: \"The languages corresponding to the string, in the bibliographic ISO-639-2 form.\"\n },\n 0x8f: {\n name: \"ChapterTrack\",\n level: 4,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"List of tracks on which the chapter applies. If this element is not present, all tracks apply\"\n },\n 0x63c3: {\n name: \"ChapterPhysicalEquiv\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"Specify the physical equivalent of this ChapterAtom like \\\"DVD\\\" (60) or \\\"SIDE\\\" (50), see complete list of values.\"\n },\n 0x6ebc: {\n name: \"ChapterSegmentEditionUID\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"The EditionUID to play from the segment linked in ChapterSegmentUID.\"\n },\n 0x6e67: {\n name: \"ChapterSegmentUID\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n range: \">0\",\n bytesize: 16,\n description: \"A segment to play in place of this chapter. Edition ChapterSegmentEditionUID should be used for this segment, otherwise no edition is used.\"\n },\n 0x73c4: {\n name: \"ChapterUID\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: true,\n range: \"not 0\",\n description: \"A unique ID to identify the Chapter.\"\n },\n 0xb6: {\n name: \"ChapterAtom\",\n level: 3,\n \"recursive\": \"1\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains the atom information to use as the chapter atom (apply to all tracks).\"\n },\n 0x45dd: {\n name: \"EditionFlagOrdered\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"Specify if the chapters can be defined multiple times and the order to play them is enforced. (1 bit)\"\n },\n 0x45db: {\n name: \"EditionFlagDefault\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If a flag is set (1) the edition should be used as the default one. (1 bit)\"\n },\n 0x45bd: {\n name: \"EditionFlagHidden\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If an edition is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)\"\n },\n 0x45bc: {\n name: \"EditionUID\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"A unique ID to identify the edition. It's useful for tagging an edition.\"\n },\n 0x45b9: {\n name: \"EditionEntry\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains all information about a segment edition.\"\n },\n 0x1043a770: {\n name: \"Chapters\",\n level: 1,\n type: \"m\",\n minver: 1,\n webm: true,\n description: \"A system to define basic menus and partition data. For more detailed information, look at the Chapters Explanation.\"\n },\n 0x46ae: {\n name: \"FileUID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"Unique ID representing the file, as random as possible.\"\n },\n 0x465c: {\n name: \"FileData\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The data of the file.\"\n },\n 0x466e: {\n name: \"FileName\",\n level: 3,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Filename of the attached file.\"\n },\n 0x467e: {\n name: \"FileDescription\",\n level: 3,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"A human-friendly name for the attached file.\"\n },\n 0x61a7: {\n name: \"AttachedFile\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"An attached file.\"\n },\n 0x1941a469: {\n name: \"Attachments\",\n level: 1,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Contain attached files.\"\n },\n 0xeb: {\n name: \"CueRefCodecState\",\n level: 5,\n type: \"u\",\n webm: false,\n \"default\": 0,\n description: \"The position of the Codec State corresponding to this referenced element. 0 means that the data is taken from the initial Track Entry.\"\n },\n 0x535f: {\n name: \"CueRefNumber\",\n level: 5,\n type: \"u\",\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n description: \"Number of the referenced Block of Track X in the specified Cluster.\"\n },\n 0xdb: {\n name: \"CueReference\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 2,\n webm: false,\n description: \"The Clusters containing the required referenced Blocks.\"\n },\n 0xea: {\n name: \"CueCodecState\",\n level: 4,\n type: \"u\",\n minver: 2,\n webm: false,\n \"default\": 0,\n description: \"The position of the Codec State corresponding to this Cue element. 0 means that the data is taken from the initial Track Entry.\"\n },\n 0xb2: {\n name: \"CueDuration\",\n level: 4,\n type: \"u\",\n mandatory: false,\n minver: 4,\n webm: false,\n description: \"The duration of the block according to the segment time base. If missing the track's DefaultDuration does not apply and no duration information is available in terms of the cues.\"\n },\n 0xf0: {\n name: \"CueRelativePosition\",\n level: 4,\n type: \"u\",\n mandatory: false,\n minver: 4,\n webm: false,\n description: \"The relative position of the referenced block inside the cluster with 0 being the first possible position for an element inside that cluster.\",\n position: \"clusterRelative\"\n },\n 0xf1: {\n name: \"CueClusterPosition\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"The position of the Cluster containing the required Block.\",\n position: \"segment\",\n },\n 0xf7: {\n name: \"CueTrack\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"The track for which a position is given.\"\n },\n 0xb7: {\n name: \"CueTrackPositions\",\n level: 3,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contain positions for different tracks corresponding to the timestamp.\"\n },\n 0xb3: {\n name: \"CueTime\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"Absolute timestamp according to the segment time base.\"\n },\n 0xbb: {\n name: \"CuePoint\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains all information relative to a seek point in the segment.\"\n },\n 0x1c53bb6b: {\n name: \"Cues\",\n level: 1,\n type: \"m\",\n minver: 1,\n description: \"A top-level element to speed seeking access. All entries are local to the segment. Should be mandatory for non \\\"live\\\" streams.\"\n },\n 0x47e6: {\n name: \"ContentSigHashAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\" ],\n description: \"The hash algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - SHA1-160 2 - MD5\"\n },\n 0x47e5: {\n name: \"ContentSigAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": \"\",\n description: \"The algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - RSA\"\n },\n 0x47e4: {\n name: \"ContentSigKeyID\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"This is the ID of the private key the data was signed with.\"\n },\n 0x47e3: {\n name: \"ContentSignature\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"A cryptographic signature of the contents.\"\n },\n 0x47e2: {\n name: \"ContentEncKeyID\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"For public key algorithms this is the ID of the public key the the data was encrypted with.\"\n },\n 0x47e1: {\n name: \"ContentEncAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": \"\",\n description: \"The encryption algorithm used. The value '0' means that the contents have not been encrypted but only signed. Predefined values: 1 - DES, 2 - 3DES, 3 - Twofish, 4 - Blowfish, 5 - AES\"\n },\n 0x6d80: {\n name: \"ContentEncodings\",\n level: 3,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings for several content encoding mechanisms like compression or encryption.\"\n },\n 0xc4: {\n name: \"TrickMasterTrackSegmentUID\",\n level: 3,\n type: \"b\",\n divx: true,\n bytesize: 16,\n description: \"DivX trick track extenstions\"\n },\n 0xc7: {\n name: \"TrickMasterTrackUID\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc6: {\n name: \"TrickTrackFlag\",\n level: 3,\n type: \"u\",\n divx: true,\n \"default\": 0,\n description: \"DivX trick track extenstions\"\n },\n 0xc1: {\n name: \"TrickTrackSegmentUID\",\n level: 3,\n type: \"b\",\n divx: true,\n bytesize: 16,\n description: \"DivX trick track extenstions\"\n },\n 0xc0: {\n name: \"TrickTrackUID\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xed: {\n name: \"TrackJoinUID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n multiple: true,\n minver: 3,\n webm: false,\n range: \"not 0\",\n description: \"The trackUID number of a track whose blocks are used to create this virtual track.\"\n },\n 0xe9: {\n name: \"TrackJoinBlocks\",\n level: 4,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Contains the list of all tracks whose Blocks need to be combined to create this virtual track\"\n },\n 0xe6: {\n name: \"TrackPlaneType\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 3,\n webm: false,\n description: \"The kind of plane this track corresponds to (0: left eye, 1: right eye, 2: background).\"\n },\n 0xe5: {\n name: \"TrackPlaneUID\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 3,\n webm: false,\n range: \"not 0\",\n description: \"The trackUID number of the track representing the plane.\"\n },\n 0xe4: {\n name: \"TrackPlane\",\n level: 5,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 3,\n webm: false,\n description: \"Contains a video plane track that need to be combined to create this 3D track\"\n },\n 0xe3: {\n name: \"TrackCombinePlanes\",\n level: 4,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Contains the list of all video plane tracks that need to be combined to create this 3D track\"\n },\n 0xe2: {\n name: \"TrackOperation\",\n level: 3,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Operation that needs to be applied on tracks to create this virtual track. For more details look at the Specification Notes on the subject.\"\n },\n 0x7d7b: {\n name: \"ChannelPositions\",\n cppname: \"AudioPosition\",\n level: 4,\n type: \"b\",\n webm: false,\n description: \"Table of horizontal angles for each successive channel, see appendix.\"\n },\n 0x9f: {\n name: \"Channels\",\n cppname: \"AudioChannels\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"not 0\",\n description: \"Numbers of channels in the track.\"\n },\n 0x78b5: {\n name: \"OutputSamplingFrequency\",\n cppname: \"AudioOutputSamplingFreq\",\n level: 4,\n type: \"f\",\n minver: 1,\n \"default\": \"Sampling Frequency\",\n range: \"> 0\",\n description: \"Real output sampling frequency in Hz (used for SBR techniques).\"\n },\n 0xb5: {\n name: \"SamplingFrequency\",\n cppname: \"AudioSamplingFreq\",\n level: 4,\n type: \"f\",\n mandatory: true,\n minver: 1,\n \"default\": 8000.0,\n range: \"> 0\",\n description: \"Sampling frequency in Hz.\"\n },\n 0xe1: {\n name: \"Audio\",\n cppname: \"TrackAudio\",\n level: 3,\n type: \"m\",\n minver: 1,\n description: \"Audio settings.\"\n },\n 0x2383e3: {\n name: \"FrameRate\",\n cppname: \"VideoFrameRate\",\n level: 4,\n type: \"f\",\n range: \"> 0\",\n \"strong\": \"Informational\",\n description: \"Number of frames per second. only.\"\n },\n 0x2fb523: {\n name: \"GammaValue\",\n cppname: \"VideoGamma\",\n level: 4,\n type: \"f\",\n webm: false,\n range: \"> 0\",\n description: \"Gamma Value.\"\n },\n 0x2eb524: {\n name: \"ColourSpace\",\n cppname: \"VideoColourSpace\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 4,\n description: \"Same value as in AVI (32 bits).\"\n },\n 0x54b3: {\n name: \"AspectRatioType\",\n cppname: \"VideoAspectRatio\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect ratio, 2: fixed).\"\n },\n 0x54b2: {\n name: \"DisplayUnit\",\n cppname: \"VideoDisplayUnit\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"How DisplayWidth & DisplayHeight should be interpreted (0: pixels, 1: centimeters, 2: inches, 3: Display Aspect Ratio).\"\n },\n 0x54ba: {\n name: \"DisplayHeight\",\n cppname: \"VideoDisplayHeight\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": \"PixelHeight\",\n range: \"not 0\",\n description: \"Height of the video frames to display. The default value is only valid when DisplayUnit is 0.\"\n },\n 0x54b0: {\n name: \"DisplayWidth\",\n cppname: \"VideoDisplayWidth\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": \"PixelWidth\",\n range: \"not 0\",\n description: \"Width of the video frames to display. The default value is only valid when DisplayUnit is 0.\"\n },\n 0x54dd: {\n name: \"PixelCropRight\",\n cppname: \"VideoPixelCropRight\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove on the right of the image.\"\n },\n 0x54cc: {\n name: \"PixelCropLeft\",\n cppname: \"VideoPixelCropLeft\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove on the left of the image.\"\n },\n 0x54bb: {\n name: \"PixelCropTop\",\n cppname: \"VideoPixelCropTop\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove at the top of the image.\"\n },\n 0x54aa: {\n name: \"PixelCropBottom\",\n cppname: \"VideoPixelCropBottom\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove at the bottom of the image (for HDTV content).\"\n },\n 0xba: {\n name: \"PixelHeight\",\n cppname: \"VideoPixelHeight\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"Height of the encoded video frames in pixels.\"\n },\n 0xb0: {\n name: \"PixelWidth\",\n cppname: \"VideoPixelWidth\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"Width of the encoded video frames in pixels.\"\n },\n 0x53b9: {\n name: \"OldStereoMode\",\n level: 4,\n type: \"u\",\n \"maxver\": \"0\",\n webm: false,\n divx: false,\n description: \"DEPRECATED, DO NOT USE. Bogus StereoMode value used in old versions of libmatroska. (0: mono, 1: right eye, 2: left eye, 3: both eyes).\"\n },\n 0x53c0: {\n name: \"AlphaMode\",\n cppname: \"VideoAlphaMode\",\n level: 4,\n type: \"u\",\n minver: 3,\n webm: true,\n \"default\": 0,\n description: \"Alpha Video Mode. Presence of this element indicates that the BlockAdditional element could contain Alpha data.\"\n },\n 0x53b8: {\n name: \"StereoMode\",\n cppname: \"VideoStereoMode\",\n level: 4,\n type: \"u\",\n minver: 3,\n webm: true,\n \"default\": 0,\n description: \"Stereo-3D video mode (0: mono, 1: side by side (left eye is first), 2: top-bottom (right eye is first), 3: top-bottom (left eye is first), 4: checkboard (right is first), 5: checkboard (left is first), 6: row interleaved (right is first), 7: row interleaved (left is first), 8: column interleaved (right is first), 9: column interleaved (left is first), 10: anaglyph (cyan/red), 11: side by side (right eye is first), 12: anaglyph (green/magenta), 13 both eyes laced in one Block (left eye is first), 14 both eyes laced in one Block (right eye is first)) . There are some more details on 3D support in the Specification Notes.\"\n },\n 0x9a: {\n name: \"FlagInterlaced\",\n cppname: \"VideoFlagInterlaced\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: true,\n \"default\": 0,\n range: \"0-1\",\n description: \"Set if the video is interlaced. (1 bit)\"\n },\n 0xe0: {\n name: \"Video\",\n cppname: \"TrackVideo\",\n level: 3,\n type: \"m\",\n minver: 1,\n description: \"Video settings.\"\n },\n 0x66a5: {\n name: \"TrackTranslateTrackID\",\n level: 4,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The binary value used to represent this track in the chapter codec data. The format depends on the ChapProcessCodecID used.\"\n },\n 0x66bf: {\n name: \"TrackTranslateCodec\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).\"\n },\n 0x66fc: {\n name: \"TrackTranslateEditionUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify an edition UID on which this translation applies. When not specified, it means for all editions found in the segment.\"\n },\n 0x56bb: {\n name: \"SeekPreRoll\",\n level: 3,\n type: \"u\",\n mandatory: true,\n multiple: false,\n \"default\": 0,\n minver: 4,\n webm: true,\n description: \"After a discontinuity, SeekPreRoll is the duration in nanoseconds of the data the decoder must decode before the decoded data is valid.\"\n },\n 0x56aa: {\n name: \"CodecDelay\",\n level: 3,\n type: \"u\",\n multiple: false,\n \"default\": 0,\n minver: 4,\n webm: true,\n description: \"CodecDelay is The codec-built-in delay in nanoseconds. This value must be subtracted from each block timestamp in order to get the actual timestamp. The value should be small so the muxing of tracks with the same actual timestamp are in the same Cluster.\"\n },\n 0x6fab: {\n name: \"TrackOverlay\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify that this track is an overlay track for the Track specified (in the u-integer). That means when this track has a gap (see SilentTracks) the overlay track should be used instead. The order of multiple TrackOverlay matters, the first one is the one that should be used. If not found it should be the second, etc.\"\n },\n 0xaa: {\n name: \"CodecDecodeAll\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"The codec can decode potentially damaged data (1 bit).\"\n },\n 0x26b240: {\n name: \"CodecDownloadURL\",\n level: 3,\n type: \"s\",\n multiple: true,\n webm: false,\n description: \"A URL to download about the codec used.\"\n },\n 0x3b4040: {\n name: \"CodecInfoURL\",\n level: 3,\n type: \"s\",\n multiple: true,\n webm: false,\n description: \"A URL to find information about the codec used.\"\n },\n 0x3a9697: {\n name: \"CodecSettings\",\n level: 3,\n type: \"8\",\n webm: false,\n description: \"A string describing the encoding setting used.\"\n },\n 0x63a2: {\n name: \"CodecPrivate\",\n level: 3,\n type: \"b\",\n minver: 1,\n description: \"Private data only known to the codec.\"\n },\n 0x22b59c: {\n name: \"Language\",\n cppname: \"TrackLanguage\",\n level: 3,\n type: \"s\",\n minver: 1,\n \"default\": \"eng\",\n description: \"Specifies the language of the track in the Matroska languages form.\"\n },\n 0x536e: {\n name: \"Name\",\n cppname: \"TrackName\",\n level: 3,\n type: \"8\",\n minver: 1,\n description: \"A human-readable track name.\"\n },\n 0x55ee: {\n name: \"MaxBlockAdditionID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"The maximum value of BlockAdditions for this track.\"\n },\n 0x537f: {\n name: \"TrackOffset\",\n level: 3,\n type: \"i\",\n webm: false,\n \"default\": 0,\n description: \"A value to add to the Block's Timestamp. This can be used to adjust the playback offset of a track.\"\n },\n 0x23314f: {\n name: \"TrackTimecodeScale\",\n level: 3,\n type: \"f\",\n mandatory: true,\n minver: 1,\n \"maxver\": \"3\",\n webm: false,\n \"default\": 1.0,\n range: \"> 0\",\n description: \"DEPRECATED, DO NOT USE. The scale to apply on this track to work at normal speed in relation with other tracks (mostly used to adjust video speed when the audio length differs).\"\n },\n 0x234e7a: {\n name: \"DefaultDecodedFieldDuration\",\n cppname: \"TrackDefaultDecodedFieldDuration\",\n level: 3,\n type: \"u\",\n minver: 4,\n range: \"not 0\",\n description: \"The period in nanoseconds (not scaled by TimcodeScale)\\nbetween two successive fields at the output of the decoding process (see the notes)\"\n },\n 0x23e383: {\n name: \"DefaultDuration\",\n cppname: \"TrackDefaultDuration\",\n level: 3,\n type: \"u\",\n minver: 1,\n range: \"not 0\",\n description: \"Number of nanoseconds (not scaled via TimecodeScale) per frame ('frame' in the Matroska sense -- one element put into a (Simple)Block).\"\n },\n 0x6df8: {\n name: \"MaxCache\",\n cppname: \"TrackMaxCache\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"The maximum cache size required to store referenced frames in and the current frame. 0 means no cache is needed.\"\n },\n 0x6de7: {\n name: \"MinCache\",\n cppname: \"TrackMinCache\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"The minimum number of frames a player should be able to cache during playback. If set to 0, the reference pseudo-cache system is not used.\"\n },\n 0x9c: {\n name: \"FlagLacing\",\n cppname: \"TrackFlagLacing\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if the track may contain blocks using lacing. (1 bit)\"\n },\n 0x55aa: {\n name: \"FlagForced\",\n cppname: \"TrackFlagForced\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 0,\n range: \"0-1\",\n description: \"Set if that track MUST be active during playback. There can be many forced track for a kind (audio, video or subs), the player should select the one which language matches the user preference or the default + forced track. Overlay MAY happen between a forced and non-forced track of the same kind. (1 bit)\"\n },\n 0xb9: {\n name: \"FlagEnabled\",\n cppname: \"TrackFlagEnabled\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: true,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if the track is usable. (1 bit)\"\n },\n 0x73c5: {\n name: \"TrackUID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"A unique ID to identify the Track. This should be kept the same when making a direct stream copy of the Track to another file.\"\n },\n 0xd7: {\n name: \"TrackNumber\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"The track number as used in the Block Header (using more than 127 tracks is not encouraged, though the design allows an unlimited number).\"\n },\n 0xae: {\n name: \"TrackEntry\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Describes a track with all elements.\"\n },\n 0x1654ae6b: {\n name: \"Tracks\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"A top-level block of information with many tracks described.\"\n },\n 0xaf: {\n name: \"EncryptedBlock\",\n level: 2,\n type: \"b\",\n multiple: true,\n webm: false,\n description: \"Similar to EncryptedBlock Structure)\"\n },\n 0xca: {\n name: \"ReferenceTimeCode\",\n level: 4,\n type: \"u\",\n multiple: false,\n mandatory: true,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc9: {\n name: \"ReferenceOffset\",\n level: 4,\n type: \"u\",\n multiple: false,\n mandatory: true,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc8: {\n name: \"ReferenceFrame\",\n level: 3,\n type: \"m\",\n multiple: false,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xcf: {\n name: \"SliceDuration\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The (scaled) duration to apply to the element.\"\n },\n 0xce: {\n name: \"Delay\",\n cppname: \"SliceDelay\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The (scaled) delay to apply to the element.\"\n },\n 0xcb: {\n name: \"BlockAdditionID\",\n cppname: \"SliceBlockAddID\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The ID of the BlockAdditional element (0 is the main Block).\"\n },\n 0xcd: {\n name: \"FrameNumber\",\n cppname: \"SliceFrameNumber\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The number of the frame to generate from this lace with this delay (allow you to generate many frames from the same Block/Frame).\"\n },\n 0xcc: {\n name: \"LaceNumber\",\n cppname: \"SliceLaceNumber\",\n level: 5,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n divx: false,\n description: \"The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.\"\n },\n 0xe8: {\n name: \"TimeSlice\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n divx: false,\n description: \"Contains extra time information about the data contained in the Block. While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.\"\n },\n 0x8e: {\n name: \"Slices\",\n level: 3,\n type: \"m\",\n minver: 1,\n divx: false,\n description: \"Contains slices description.\"\n },\n 0x75a2: {\n name: \"DiscardPadding\",\n level: 3,\n type: \"i\",\n minver: 4,\n webm: true,\n description: \"Duration in nanoseconds of the silent data added to the Block (padding at the end of the Block for positive value, at the beginning of the Block for negative value). The duration of DiscardPadding is not calculated in the duration of the TrackEntry and should be discarded during playback.\"\n },\n 0xa4: {\n name: \"CodecState\",\n level: 3,\n type: \"b\",\n minver: 2,\n webm: false,\n description: \"The new codec state to use. Data interpretation is private to the codec. This information should always be referenced by a seek entry.\"\n },\n 0xfd: {\n name: \"ReferenceVirtual\",\n level: 3,\n type: \"i\",\n webm: false,\n description: \"Relative position of the data that should be in position of the virtual block.\"\n },\n 0xfb: {\n name: \"ReferenceBlock\",\n level: 3,\n type: \"i\",\n multiple: true,\n minver: 1,\n description: \"Timestamp of another frame used as a reference (ie: B or P frame). The timestamp is relative to the block it's attached to.\"\n },\n 0xfa: {\n name: \"ReferencePriority\",\n cppname: \"FlagReferenced\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"This frame is referenced and has the specified cache priority. In cache only a frame of the same or higher priority can replace this frame. A value of 0 means the frame is not referenced.\"\n },\n 0x9b: {\n name: \"BlockDuration\",\n level: 3,\n type: \"u\",\n minver: 1,\n \"default\": \"TrackDuration\",\n description: \"The duration of the Block (based on TimecodeScale). This element is mandatory when DefaultDuration is set for the track (but can be omitted as other default values). When not written and with no DefaultDuration, the value is assumed to be the difference between the timestamp of this Block and the timestamp of the next Block in \\\"display\\\" order (not coding order). This element can be useful at the end of a Track (as there is not other Block available), or when there is a break in a track like for subtitle tracks. When set to 0 that means the frame is not a keyframe.\"\n },\n 0xa5: {\n name: \"BlockAdditional\",\n level: 5,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Interpreted by the codec as it wishes (using the BlockAddID).\"\n },\n 0xee: {\n name: \"BlockAddID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n description: \"An ID to identify the BlockAdditional level.\"\n },\n 0xa6: {\n name: \"BlockMore\",\n level: 4,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contain the BlockAdditional and some parameters.\"\n },\n 0x75a1: {\n name: \"BlockAdditions\",\n level: 3,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block structure could still see and use/skip these data.\"\n },\n 0xa2: {\n name: \"BlockVirtual\",\n level: 3,\n type: \"b\",\n webm: false,\n description: \"A Block with no data. It must be stored in the stream at the place the real Block should be in display order. (see Block Virtual)\"\n },\n 0xa1: {\n name: \"Block\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n description: \"Block containing the actual data to be rendered and a timestamp relative to the Cluster Timecode. (see Block Structure)\"\n },\n 0xa0: {\n name: \"BlockGroup\",\n level: 2,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"Basic container of information containing a single Block or BlockVirtual, and information specific to that Block/VirtualBlock.\"\n },\n 0xa3: {\n name: \"SimpleBlock\",\n level: 2,\n type: \"b\",\n multiple: true,\n minver: 2,\n webm: true,\n divx: true,\n description: \"Similar to SimpleBlock Structure\"\n },\n 0xab: {\n name: \"PrevSize\",\n cppname: \"ClusterPrevSize\",\n level: 2,\n type: \"u\",\n minver: 1,\n description: \"Size of the previous Cluster, in octets. Can be useful for backward playing.\",\n position: \"prevCluster\"\n },\n 0xa7: {\n name: \"Position\",\n cppname: \"ClusterPosition\",\n level: 2,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"The Position of the Cluster in the segment (0 in live broadcast streams). It might help to resynchronise offset on damaged streams.\",\n position: \"segment\"\n },\n 0x58d7: {\n name: \"SilentTrackNumber\",\n cppname: \"ClusterSilentTrackNumber\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"One of the track number that are not used from now on in the stream. It could change later if not specified as silent in a further Cluster.\"\n },\n 0xe7: {\n name: \"Timecode\",\n cppname: \"ClusterTimecode\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"Absolute timestamp of the cluster (based on TimecodeScale).\"\n },\n 0x1f43b675: {\n name: \"Cluster\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"The lower level element containing the (monolithic) Block structure.\"\n },\n 0x4d80: {\n name: \"MuxingApp\",\n level: 2,\n type: \"8\",\n mandatory: true,\n minver: 1,\n description: \"Muxing application or library (\\\"libmatroska-0.4.3\\\").\"\n },\n 0x7ba9: {\n name: \"Title\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"General name of the segment.\"\n },\n 0x2ad7b2: {\n name: \"TimecodeScaleDenominator\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 4,\n \"default\": \"1000000000\",\n description: \"Timestamp scale numerator, see TimecodeScale.\"\n },\n 0x2ad7b1: {\n name: \"TimecodeScale\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": \"1000000\",\n description: \"Timestamp scale in nanoseconds (1.000.000 means all timestamps in the segment are expressed in milliseconds).\"\n },\n 0x69a5: {\n name: \"ChapterTranslateID\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The binary value used to represent this segment in the chapter codec data. The format depends on the ChapProcessCodecID used.\"\n },\n 0x69bf: {\n name: \"ChapterTranslateCodec\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).\"\n },\n 0x69fc: {\n name: \"ChapterTranslateEditionUID\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify an edition UID on which this correspondance applies. When not specified, it means for all editions found in the segment.\"\n },\n 0x3e83bb: {\n name: \"NextFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"An escaped filename corresponding to the next segment.\"\n },\n 0x3eb923: {\n name: \"NextUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A unique ID to identify the next chained segment (128 bits).\"\n },\n 0x3c83ab: {\n name: \"PrevFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"An escaped filename corresponding to the previous segment.\"\n },\n 0x3cb923: {\n name: \"PrevUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A unique ID to identify the previous chained segment (128 bits).\"\n },\n 0x73a4: {\n name: \"SegmentUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n bytesize: 16,\n description: \"A randomly generated unique ID to identify the current segment between many others (128 bits).\"\n },\n 0x1549a966: {\n name: \"Info\",\n level: 1,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains miscellaneous general information and statistics on the file.\"\n },\n 0x53ac: {\n name: \"SeekPosition\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"The position of the element in the segment in octets (0 = first level 1 element).\",\n position: \"segment\"\n },\n 0x53ab: {\n name: \"SeekID\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n description: \"The binary ID corresponding to the element name.\",\n type2: \"ebmlID\"\n },\n 0x4dbb: {\n name: \"Seek\",\n cppname: \"SeekPoint\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains a single seek entry to an EBML element.\"\n },\n 0x114d9b74: {\n name: \"SeekHead\",\n cppname: \"SeekHeader\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"Contains the position of other level 1 elements.\"\n },\n 0x7e7b: {\n name: \"SignatureElementList\",\n level: 2,\n type: \"m\",\n multiple: true,\n webm: false,\n i: \"Cluster|Block|BlockAdditional\",\n description: \"A list consists of a number of consecutive elements that represent one case where data is used in signature. Ex: means that the BlockAdditional of all Blocks in all Clusters is used for encryption.\"\n },\n 0x7e5b: {\n name: \"SignatureElements\",\n level: 1,\n type: \"m\",\n webm: false,\n description: \"Contains elements that will be used to compute the signature.\"\n },\n 0x7eb5: {\n name: \"Signature\",\n level: 1,\n type: \"b\",\n webm: false,\n description: \"The signature of the data (until a new.\"\n },\n 0x7ea5: {\n name: \"SignaturePublicKey\",\n level: 1,\n type: \"b\",\n webm: false,\n description: \"The public key to use with the algorithm (in the case of a PKI-based signature).\"\n },\n 0x7e9a: {\n name: \"SignatureHash\",\n level: 1,\n type: \"u\",\n webm: false,\n description: \"Hash algorithm used (1=SHA1-160, 2=MD5).\"\n },\n 0x7e8a: {\n name: \"SignatureAlgo\",\n level: 1,\n type: \"u\",\n webm: false,\n description: \"Signature algorithm used (1=RSA, 2=elliptic).\"\n },\n 0x1b538667: {\n name: \"SignatureSlot\",\n level: -1,\n type: \"m\",\n multiple: true,\n webm: false,\n description: \"Contain signature of some (coming) elements in the stream.\"\n },\n 0xbf: {\n name: \"CRC-32\",\n level: -1,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"The CRC is computed on all the data of the Master element it's in. The CRC element should be the first in it's parent master for easier reading. All level 1 elements should include a CRC-32. The CRC in use is the IEEE CRC32 Little Endian\",\n crc: true\n },\n 0xec: {\n name: \"Void\",\n level: -1,\n type: \"b\",\n minver: 1,\n description: \"Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is discarded. Also used to reserve space in a sub-element for later use.\"\n },\n 0x42f3: {\n name: \"EBMLMaxSizeLength\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 8,\n minver: 1,\n description: \"The maximum length of the sizes you'll find in this file (8 or less in Matroska). This does not override the element size indicated at the beginning of an element. Elements that have an indicated size which is larger than what is allowed by EBMLMaxSizeLength shall be considered invalid.\"\n },\n 0x42f2: {\n name: \"EBMLMaxIDLength\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 4,\n minver: 1,\n description: \"The maximum length of the IDs you'll find in this file (4 or less in Matroska).\"\n },\n 0x42f7: {\n name: \"EBMLReadVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The minimum EBML version a parser has to support to read this file.\"\n },\n 0x1a45dfa3: {\n name: \"EBML\",\n level: \"0\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Set the EBML characteristics of the data to follow. Each EBML document has to start with this.\"\n },\n 0x55b0: {\n name: \"Colour\",\n level: \"4\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n description: \"Settings describing the colour format.\"\n },\n 0x55b1: {\n name: \"MatrixCoefficients\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The Matrix Coefficients of the video used to derive luma and chroma values from red, green, and blue color primaries. For clarity, the value and meanings for MatrixCoefficients are adopted from Table 4 of ISO/IEC 23001-8:2016 or ITU-T H.273.\"\n },\n 0x55b9: {\n name: \"Range\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"Clipping of the color ranges.\"\n },\n 0x55ba: {\n name: \"TransferCharacteristics\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The transfer characteristics of the video.\"\n },\n 0x55bb: {\n name: \"Primaries\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The colour primaries of the video. For clarity, the value and meanings for Primaries are adopted from Table 2 of ISO/IEC 23091-4 or ITU-T H.273.\"\n },\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tools = exports.Reader = exports.Encoder = exports.Decoder = void 0;\n__exportStar(require(\"./EBML\"), exports);\nvar EBMLDecoder_1 = require(\"./EBMLDecoder\");\nexports.Decoder = EBMLDecoder_1.default;\nvar EBMLEncoder_1 = require(\"./EBMLEncoder\");\nexports.Encoder = EBMLEncoder_1.default;\nvar EBMLReader_1 = require(\"./EBMLReader\");\nexports.Reader = EBMLReader_1.default;\nvar tools = require(\"./tools\");\nexports.tools = tools;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tools_1 = require(\"./tools\");\nvar Tools = /** @class */ (function () {\n function Tools() {\n }\n /**\n * read variable length integer per\n * https://www.matroska.org/technical/specs/index.html#EBML_ex\n * @static\n * @param {Buffer} buffer containing input\n * @param {Number} [start=0] position in buffer\n * @returns {{length: Number, value: number}} value / length object\n */\n Tools.readVint = function (buffer, start) {\n if (start === void 0) { start = 0; }\n var length = 8 - Math.floor(Math.log2(buffer[start]));\n if (length > 8) {\n var number = Tools.readHexString(buffer, start, start + length);\n throw new Error(\"Unrepresentable length: \".concat(length, \" \").concat(number));\n }\n if (start + length > buffer.length) {\n return null;\n }\n var value = buffer[start] & ((1 << (8 - length)) - 1);\n for (var i = 1; i < length; i += 1) {\n if (i === 7) {\n if (value >= Math.pow(2, 8) && buffer[start + 7] > 0) {\n return { length: length, value: -1 };\n }\n }\n value *= Math.pow(2, 8);\n value += buffer[start + i];\n }\n return { length: length, value: value };\n };\n /**\n * write variable length integer\n * @static\n * @param {Number} value to store into buffer\n * @returns {Buffer} containing the value\n */\n Tools.writeVint = function (value) {\n if (value < 0 || value > Math.pow(2, 53)) {\n throw new Error(\"Unrepresentable value: \".concat(value));\n }\n var length = 1;\n for (length = 1; length <= 8; length += 1) {\n if (value < Math.pow(2, (7 * length)) - 1) {\n break;\n }\n }\n var buffer = tools_1.Buffer.alloc(length);\n var val = value;\n for (var i = 1; i <= length; i += 1) {\n var b = val & 0xff;\n buffer[length - i] = b;\n val -= b;\n val /= Math.pow(2, 8);\n }\n buffer[0] |= 1 << (8 - length);\n return buffer;\n };\n /**\n * *\n * concatenate two arrays of bytes\n * @static\n * @param {Buffer} a1 First array\n * @param {Buffer} a2 Second array\n * @returns {Buffer} concatenated arrays\n */\n Tools.concatenate = function (a1, a2) {\n // both null or undefined\n if (!a1 && !a2) {\n return tools_1.Buffer.from([]);\n }\n if (!a1 || a1.byteLength === 0) {\n return a2;\n }\n if (!a2 || a2.byteLength === 0) {\n return a1;\n }\n return tools_1.Buffer.from(__spreadArray(__spreadArray([], a1, true), a2, true));\n };\n /**\n * get a hex text string from Buff[start,end)\n * @param {Buffer} buff from which to read the string\n * @param {Number} [start=0] starting point (default 0)\n * @param {Number} [end=buff.byteLength] ending point (default the whole buffer)\n * @returns {string} the hex string\n */\n Tools.readHexString = function (buff, start, end) {\n if (start === void 0) { start = 0; }\n if (end === void 0) { end = buff.byteLength; }\n return Array.from(buff.slice(start, end))\n .map(function (q) { return Number(q).toString(16); })\n .reduce(function (acc, current) { return \"\".concat(acc).concat(current.padStart(2, '0')); }, '');\n };\n /**\n * tries to read out a UTF-8 encoded string\n * @param {Buffer} buff the buffer to attempt to read from\n * @return {string|null} the decoded text, or null if unable to\n */\n Tools.readUtf8 = function (buff) {\n try {\n return tools_1.Buffer.from(buff).toString('utf8');\n }\n catch (exception) {\n return null;\n }\n };\n /**\n * get an unsigned number from a buffer\n * @param {Buffer} buff from which to read variable-length unsigned number\n * @returns {number|string} result (in hex for lengths > 6)\n */\n Tools.readUnsigned = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return b.getUint8(0);\n case 2:\n return b.getUint16(0);\n case 4:\n return b.getUint32(0);\n default:\n break;\n }\n if (buff.byteLength <= 6) {\n return buff.reduce(function (acc, current) { return acc * 256 + current; }, 0);\n }\n return Tools.readHexString(buff, 0, buff.byteLength);\n };\n /**\n * get an signed number from a buffer\n * @static\n * @param {Buffer} buff from which to read variable-length signed number\n * @returns {number} result\n */\n Tools.readSigned = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return b.getInt8(0);\n case 2:\n return b.getInt16(0);\n case 4:\n return b.getInt32(0);\n default:\n return NaN;\n }\n };\n /**\n * get an floating-point number from a buffer\n * @static\n * @param {Buffer} buff from which to read variable-length floating-point number\n * @returns {number} result\n */\n Tools.readFloat = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 4:\n return b.getFloat32(0);\n case 8:\n return b.getFloat64(0);\n default:\n return NaN;\n }\n };\n /**\n * get a date from a buffer\n * @static\n * @param {Buffer} buff from which to read the date\n * @return {Date} result\n */\n Tools.readDate = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return new Date(b.getUint8(0));\n case 2:\n return new Date(b.getUint16(0));\n case 4:\n return new Date(b.getUint32(0));\n case 8:\n return new Date(Number.parseInt(Tools.readHexString(buff), 16));\n default:\n return new Date(0);\n }\n };\n /**\n * Reads the data from a tag\n * @static\n * @param {TagData} tagObj The tag object to be read\n * @param {Buffer} data Data to be transformed\n * @return {Tag} result\n */\n Tools.readDataFromTag = function (tagObj, data) {\n var type = tagObj.type, name = tagObj.name;\n var track = tagObj.track;\n var discardable = tagObj.discardable || false;\n var keyframe = tagObj.keyframe || false;\n var payload = null;\n var value;\n switch (type) {\n case 'u':\n value = Tools.readUnsigned(data);\n break;\n case 'f':\n value = Tools.readFloat(data);\n break;\n case 'i':\n value = Tools.readSigned(data);\n break;\n case 's':\n value = String.fromCharCode.apply(String, data);\n break;\n case '8':\n value = Tools.readUtf8(data);\n break;\n case 'd':\n value = Tools.readDate(data);\n break;\n default:\n break;\n }\n if (name === 'SimpleBlock' || name === 'Block') {\n var p = 0;\n var _a = Tools.readVint(data, p), length_1 = _a.length, trak = _a.value;\n p += length_1;\n track = trak;\n value = Tools.readSigned(data.subarray(p, p + 2));\n p += 2;\n if (name === 'SimpleBlock') {\n keyframe = Boolean(data[length_1 + 2] & 0x80);\n discardable = Boolean(data[length_1 + 2] & 0x01);\n }\n p += 1;\n payload = data.subarray(p);\n }\n return __assign(__assign({}, tagObj), { data: data, discardable: discardable, keyframe: keyframe, payload: payload, track: track, value: value });\n };\n return Tools;\n}());\nexports.default = Tools;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertEBMLDateToJSDate = exports.createFloatBuffer = exports.createIntBuffer = exports.createUIntBuffer = exports.encodeValueToBuffer = exports.concat = exports.putRefinedMetaData = exports.extractElement = exports.removeElement = exports.makeMetadataSeekable = exports.createRIFFChunk = exports.VP8BitStreamToRiffWebPBuffer = exports.WebPBlockFilter = exports.encodeTag = exports.readBlock = exports.ebmlBlock = exports.writeVint = exports.readVint = exports.Buffer = void 0;\n/// \nvar int64_buffer_1 = require(\"int64-buffer\");\nvar EBMLEncoder_1 = require(\"./EBMLEncoder\");\nvar _Buffer = require(\"buffer\");\nvar tools_ebml_1 = require(\"./tools-ebml\");\nvar _block = require(\"ebml-block\");\nexports.Buffer = _Buffer.Buffer;\nexports.readVint = tools_ebml_1.default.readVint;\nexports.writeVint = tools_ebml_1.default.writeVint;\nexports.ebmlBlock = _block;\nfunction readBlock(buf) {\n return (0, exports.ebmlBlock)(new exports.Buffer(buf));\n}\nexports.readBlock = readBlock;\n/**\n * @param end - if end === false then length is unknown\n */\nfunction encodeTag(tagId, tagData, unknownSize) {\n if (unknownSize === void 0) { unknownSize = false; }\n return concat([\n tagId,\n unknownSize ?\n new exports.Buffer('01ffffffffffffff', 'hex') :\n (0, exports.writeVint)(tagData.length),\n tagData\n ]);\n}\nexports.encodeTag = encodeTag;\n/**\n * WebP ファイルにできる SimpleBlock の パスフィルタ\n */\nfunction WebPBlockFilter(elms) {\n return elms.reduce(function (lst, elm) {\n if (elm.type !== \"b\") {\n return lst;\n }\n if (elm.name !== \"SimpleBlock\") {\n return lst;\n }\n var o = (0, exports.ebmlBlock)(elm.data);\n var hasWebP = o.frames.some(function (frame) {\n // https://tools.ietf.org/html/rfc6386#section-19.1\n var startcode = frame.slice(3, 6).toString(\"hex\");\n return startcode === \"9d012a\";\n });\n if (!hasWebP) {\n return lst;\n }\n return lst.concat(elm);\n }, []);\n}\nexports.WebPBlockFilter = WebPBlockFilter;\n/**\n * @param frame - VP8 BitStream のうち startcode をもつ frame\n * @return - WebP ファイルの ArrayBuffer\n */\nfunction VP8BitStreamToRiffWebPBuffer(frame) {\n var VP8Chunk = createRIFFChunk(\"VP8 \", frame);\n var WebPChunk = concat([\n new exports.Buffer(\"WEBP\", \"ascii\"),\n VP8Chunk\n ]);\n return createRIFFChunk(\"RIFF\", WebPChunk);\n}\nexports.VP8BitStreamToRiffWebPBuffer = VP8BitStreamToRiffWebPBuffer;\n/**\n * RIFF データチャンクを作る\n */\nfunction createRIFFChunk(FourCC, chunk) {\n var chunkSize = new exports.Buffer(4);\n chunkSize.writeUInt32LE(chunk.byteLength, 0);\n return concat([\n new exports.Buffer(FourCC.substr(0, 4), \"ascii\"),\n chunkSize,\n chunk,\n new exports.Buffer(chunk.byteLength % 2 === 0 ? 0 : 1) // padding\n ]);\n}\nexports.createRIFFChunk = createRIFFChunk;\n/* Original Metadata\n\n m 0\tEBML\n u 1\t EBMLVersion 1\n u 1\t EBMLReadVersion 1\n u 1\t EBMLMaxIDLength 4\n u 1\t EBMLMaxSizeLength 8\n s 1\t DocType webm\n u 1\t DocTypeVersion 4\n u 1\t DocTypeReadVersion 2\n m 0\tSegment\n m 1\t Info segmentContentStartPos, all CueClusterPositions provided in info.cues will be relative to here and will need adjusted\n u 2\t TimecodeScale 1000000\n 8 2\t MuxingApp Chrome\n 8 2\t WritingApp Chrome\n m 1\t Tracks tracksStartPos\n m 2\t TrackEntry\n u 3\t TrackNumber 1\n u 3\t TrackUID 31790271978391090\n u 3\t TrackType 2\n s 3\t CodecID A_OPUS\n b 3\t CodecPrivate \n m 3\t Audio\n f 4\t SamplingFrequency 48000\n u 4\t Channels 1\n m 2\t TrackEntry\n u 3\t TrackNumber 2\n u 3\t TrackUID 24051277436254136\n u 3\t TrackType 1\n s 3\t CodecID V_VP8\n m 3\t Video\n u 4\t PixelWidth 1024\n u 4\t PixelHeight 576\n m 1\t Cluster clusterStartPos\n u 2\t Timecode 0\n b 2\t SimpleBlock track:2 timecode:0\tkeyframe:true\tinvisible:false\tdiscardable:false\tlacing:1\n*/\n/* Desired Metadata\n\n m\t0 EBML\n u\t1 EBMLVersion 1\n u\t1 EBMLReadVersion 1\n u\t1 EBMLMaxIDLength 4\n u\t1 EBMLMaxSizeLength 8\n s\t1 DocType webm\n u\t1 DocTypeVersion 4\n u\t1 DocTypeReadVersion 2\n m\t0 Segment\n m\t1 SeekHead -> This is SeekPosition 0, so all SeekPositions can be calculated as (bytePos - segmentContentStartPos), which is 44 in this case\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x15, 0x49, 0xA9, 0x66]) Info\n u\t3 SeekPosition -> infoStartPos =\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x16, 0x54, 0xAE, 0x6B]) Tracks\n u\t3 SeekPosition { tracksStartPos }\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x1C, 0x53, 0xBB, 0x6B]) Cues\n u\t3 SeekPosition { cuesStartPos }\n m\t1 Info\n f\t2 Duration 32480 -> overwrite, or insert if it doesn't exist\n u\t2 TimecodeScale 1000000\n 8\t2 MuxingApp Chrome\n 8\t2 WritingApp Chrome\n m\t1 Tracks\n m\t2 TrackEntry\n u\t3 TrackNumber 1\n u\t3 TrackUID 31790271978391090\n u\t3 TrackType 2\n s\t3 CodecID A_OPUS\n b\t3 CodecPrivate \n m\t3 Audio\n f\t4 SamplingFrequency 48000\n u\t4 Channels 1\n m\t2 TrackEntry\n u\t3 TrackNumber 2\n u\t3 TrackUID 24051277436254136\n u\t3 TrackType 1\n s\t3 CodecID V_VP8\n m\t3 Video\n u\t4 PixelWidth 1024\n u\t4 PixelHeight 576\n m 1 Cues -> cuesStartPos\n m 2 CuePoint\n u 3 CueTime 0\n m 3 CueTrackPositions\n u 4 CueTrack 1\n u 4 CueClusterPosition 3911\n m 2 CuePoint\n u 3 CueTime 600\n m 3 CueTrackPositions\n u 4 CueTrack 1\n u 4 CueClusterPosition 3911\n m 1 Cluster\n u 2 Timecode 0\n b 2 SimpleBlock track:2 timecode:0\tkeyframe:true\tinvisible:false\tdiscardable:false\tlacing:1\n*/\n/**\n * convert the metadata from a streaming webm bytestream to a seekable file by inserting Duration, Seekhead and Cues\n * @param originalMetadata - orginal metadata (everything before the clusters start) from media recorder\n * @param duration - Duration (TimecodeScale)\n * @param cues - cue points for clusters\n */\nfunction makeMetadataSeekable(originalMetadata, duration, cuesInfo) {\n // extract the header, we can reuse this as-is\n var header = extractElement(\"EBML\", originalMetadata);\n var headerSize = encodedSizeOfEbml(header);\n //console.error(\"Header size: \" + headerSize);\n //printElementIds(header);\n // After the header comes the Segment open tag, which in this implementation is always 12 bytes (4 byte id, 8 byte 'unknown length')\n // After that the segment content starts. All SeekPositions and CueClusterPosition must be relative to segmentContentStartPos\n var segmentContentStartPos = headerSize + 12;\n //console.error(\"segmentContentStartPos: \" + segmentContentStartPos); \n // find the original metadata size, and adjust it for header size and Segment start element so we can keep all positions relative to segmentContentStartPos\n var originalMetadataSize = originalMetadata[originalMetadata.length - 1].dataEnd - segmentContentStartPos;\n //console.error(\"Original Metadata size: \" + originalMetadataSize);\n //printElementIds(originalMetadata);\n // extract the segment info, remove the potentially existing Duration element, and add our own one.\n var info = extractElement(\"Info\", originalMetadata);\n removeElement(\"Duration\", info);\n info.splice(1, 0, { name: \"Duration\", type: \"f\", data: createFloatBuffer(duration, 8) });\n var infoSize = encodedSizeOfEbml(info);\n //console.error(\"Info size: \" + infoSize);\n //printElementIds(info); \n // extract the track info, we can re-use this as is\n var tracks = extractElement(\"Tracks\", originalMetadata);\n var tracksSize = encodedSizeOfEbml(tracks);\n //console.error(\"Tracks size: \" + tracksSize);\n //printElementIds(tracks); \n var seekHeadSize = 47; // Initial best guess, but could be slightly larger if the Cues element is huge.\n var seekHead = [];\n var cuesSize = 5 + cuesInfo.length * 15; // very rough initial approximation, depends a lot on file size and number of CuePoints \n var cues = [];\n var lastSizeDifference = -1; // \n // The size of SeekHead and Cues elements depends on how many bytes the offsets values can be encoded in.\n // The actual offsets in CueClusterPosition depend on the final size of the SeekHead and Cues elements\n // We need to iteratively converge to a stable solution.\n var maxIterations = 10;\n var _loop_1 = function (i) {\n // SeekHead starts at 0\n var infoStart = seekHeadSize; // Info comes directly after SeekHead\n var tracksStart = infoStart + infoSize; // Tracks comes directly after Info\n var cuesStart = tracksStart + tracksSize; // Cues starts directly after \n var newMetadataSize = cuesStart + cuesSize; // total size of metadata \n // This is the offset all CueClusterPositions should be adjusted by due to the metadata size changing.\n var sizeDifference = newMetadataSize - originalMetadataSize;\n // console.error(`infoStart: ${infoStart}, infoSize: ${infoSize}`);\n // console.error(`tracksStart: ${tracksStart}, tracksSize: ${tracksSize}`);\n // console.error(`cuesStart: ${cuesStart}, cuesSize: ${cuesSize}`);\n // console.error(`originalMetadataSize: ${originalMetadataSize}, newMetadataSize: ${newMetadataSize}, sizeDifference: ${sizeDifference}`); \n // create the SeekHead element\n seekHead = [];\n seekHead.push({ name: \"SeekHead\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x15, 0x49, 0xA9, 0x66]) }); // Info\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(infoStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x16, 0x54, 0xAE, 0x6B]) }); // Tracks\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(tracksStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1C, 0x53, 0xBB, 0x6B]) }); // Cues\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(cuesStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"SeekHead\", type: \"m\", isEnd: true });\n seekHeadSize = encodedSizeOfEbml(seekHead);\n //console.error(\"SeekHead size: \" + seekHeadSize);\n //printElementIds(seekHead); \n // create the Cues element\n cues = [];\n cues.push({ name: \"Cues\", type: \"m\", isEnd: false });\n cuesInfo.forEach(function (_a) {\n var CueTrack = _a.CueTrack, CueClusterPosition = _a.CueClusterPosition, CueTime = _a.CueTime;\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTime\", type: \"u\", data: createUIntBuffer(CueTime) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTrack\", type: \"u\", data: createUIntBuffer(CueTrack) });\n //console.error(`CueClusterPosition: ${CueClusterPosition}, Corrected to: ${CueClusterPosition - segmentContentStartPos} , offset by ${sizeDifference} to become ${(CueClusterPosition - segmentContentStartPos) + sizeDifference - segmentContentStartPos}`);\n // EBMLReader returns CueClusterPosition with absolute byte offsets. The Cues section expects them as offsets from the first level 1 element of the Segment, so we need to adjust it.\n CueClusterPosition -= segmentContentStartPos;\n // We also need to adjust to take into account the change in metadata size from when EBMLReader read the original metadata.\n CueClusterPosition += sizeDifference;\n cues.push({ name: \"CueClusterPosition\", type: \"u\", data: createUIntBuffer(CueClusterPosition) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: true });\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: true });\n });\n cues.push({ name: \"Cues\", type: \"m\", isEnd: true });\n cuesSize = encodedSizeOfEbml(cues);\n //console.error(\"Cues size: \" + cuesSize); \n //console.error(\"Cue count: \" + cuesInfo.length);\n //printElementIds(cues); \n // If the new MetadataSize is not the same as the previous iteration, we need to run once more.\n if (lastSizeDifference !== sizeDifference) {\n lastSizeDifference = sizeDifference;\n if (i === maxIterations - 1) {\n throw new Error(\"Failed to converge to a stable metadata size\");\n }\n }\n else {\n return \"break\";\n }\n };\n for (var i = 0; i < maxIterations; i++) {\n var state_1 = _loop_1(i);\n if (state_1 === \"break\")\n break;\n }\n var finalMetadata = [].concat.apply([], [\n header,\n { name: \"Segment\", type: \"m\", isEnd: false, unknownSize: true },\n seekHead,\n info,\n tracks,\n cues\n ]);\n var result = new EBMLEncoder_1.default().encode(finalMetadata);\n //printElementIds(finalMetadata);\n //console.error(`Final metadata buffer size: ${result.byteLength}`);\n //console.error(`Final metadata buffer size without header and segment: ${result.byteLength-segmentContentStartPos}`);\n return result;\n}\nexports.makeMetadataSeekable = makeMetadataSeekable;\n/**\n * print all element id names in a list\n\n * @param metadata - array of EBML elements to print\n *\nexport function printElementIds(metadata: EBML.EBMLElementBuffer[]) {\n\n let result: EBML.EBMLElementBuffer[] = [];\n let start: number = -1;\n\n for (let i = 0; i < metadata.length; i++) {\n console.error(\"\\t id: \" + metadata[i].name);\n }\n}\n*/\n/**\n * remove all occurances of an EBML element from an array of elements\n * If it's a MasterElement you will also remove the content. (everything between start and end)\n * @param idName - name of the EBML Element to remove.\n * @param metadata - array of EBML elements to search\n */\nfunction removeElement(idName, metadata) {\n var result = [];\n var start = -1;\n for (var i = 0; i < metadata.length; i++) {\n var element = metadata[i];\n if (element.name === idName) {\n // if it's a Master element, extract the start and end element, and everything in between\n if (element.type === \"m\") {\n if (!element.isEnd) {\n start = i;\n }\n else {\n // we've reached the end, extract the whole thing\n if (start == -1)\n throw new Error(\"Detected \".concat(idName, \" closing element before finding the start\"));\n metadata.splice(start, i - start + 1);\n return;\n }\n }\n else {\n // not a Master element, so we've found what we're looking for.\n metadata.splice(i, 1);\n return;\n }\n }\n }\n}\nexports.removeElement = removeElement;\n/**\n * extract the first occurance of an EBML tag from a flattened array of EBML data.\n * If it's a MasterElement you will also get the content. (everything between start and end)\n * @param idName - name of the EBML Element to extract.\n * @param metadata - array of EBML elements to search\n */\nfunction extractElement(idName, metadata) {\n var result = [];\n var start = -1;\n for (var i = 0; i < metadata.length; i++) {\n var element = metadata[i];\n if (element.name === idName) {\n // if it's a Master element, extract the start and end element, and everything in between\n if (element.type === \"m\") {\n if (!element.isEnd) {\n start = i;\n }\n else {\n // we've reached the end, extract the whole thing\n if (start == -1)\n throw new Error(\"Detected \".concat(idName, \" closing element before finding the start\"));\n result = metadata.slice(start, i + 1);\n break;\n }\n }\n else {\n // not a Master element, so we've found what we're looking for.\n result.push(metadata[i]);\n break;\n }\n }\n }\n return result;\n}\nexports.extractElement = extractElement;\n/**\n * @deprecated\n * metadata に対して duration と seekhead を追加した metadata を返す\n * @param metadata - 変更前の webm における ファイル先頭から 最初の Cluster 要素までの 要素\n * @param duration - Duration (TimecodeScale)\n * @param cues - cue points for clusters\n * @deprecated @param clusterPtrs - 変更前の webm における SeekHead に追加する Cluster 要素 への start pointer\n * @deprecated @param cueInfos - please use cues.\n */\nfunction putRefinedMetaData(metadata, info) {\n if (Array.isArray(info.cueInfos) && !Array.isArray(info.cues)) {\n console.warn(\"putRefinedMetaData: info.cueInfos property is deprecated. please use info.cues\");\n info.cues = info.cueInfos;\n }\n var ebml = [];\n var payload = [];\n for (var i_1 = 0; i_1 < metadata.length; i_1++) {\n var elm = metadata[i_1];\n if (elm.type === \"m\" && elm.name === \"Segment\") {\n ebml = metadata.slice(0, i_1);\n payload = metadata.slice(i_1);\n if (elm.unknownSize) {\n payload.shift(); // remove segment tag\n break;\n }\n throw new Error(\"this metadata is not streaming webm file\");\n }\n }\n // *0 *4 *5 *36 *40 *48=segmentOffset *185=originalPayloadOffsetEnd\n // | | | | | | |\n // [EBML][size]....[Segment][size][Info][size][Duration][size]...[Cluster]\n // | | |^inf | |\n // | +segmentSiz(12)+ |\n // +-ebmlSize(36)--+ | +-payloadSize(137)-------------+offsetEndDiff+\n // | | +-newPayloadSize(??)-------------------------+\n // | | | |\n // [Segment][size][Info][size][Duration][size]....[size][value][Cluster]\n // ^ |\n // | *??=newPayloadOffsetEnd\n // inf\n if (!(payload[payload.length - 1].dataEnd > 0)) {\n throw new Error(\"metadata dataEnd has wrong number\");\n }\n var originalPayloadOffsetEnd = payload[payload.length - 1].dataEnd; // = first cluster ptr\n var ebmlSize = ebml[ebml.length - 1].dataEnd; // = first segment ptr\n var refinedEBMLSize = new EBMLEncoder_1.default().encode(ebml).byteLength;\n var offsetDiff = refinedEBMLSize - ebmlSize;\n var payloadSize = originalPayloadOffsetEnd - payload[0].tagStart;\n var segmentSize = payload[0].tagStart - ebmlSize;\n var segmentOffset = payload[0].tagStart;\n var segmentTagBuf = new exports.Buffer([0x18, 0x53, 0x80, 0x67]); // Segment\n var segmentSizeBuf = new exports.Buffer('01ffffffffffffff', 'hex'); // Segmentの最後の位置は無数の Cluster 依存なので。 writeVint(newPayloadSize).byteLength ではなく、 infinity.\n var _segmentSize = segmentTagBuf.byteLength + segmentSizeBuf.byteLength; // == segmentSize\n var newPayloadSize = payloadSize;\n // We need the size to be stable between two refinements in order for our offsets to be correct\n // Bound the number of possible refinements so we can't go infinate if something goes wrong\n var i;\n for (i = 1; i < 20; i++) {\n var newPayloadOffsetEnd = ebmlSize + _segmentSize + newPayloadSize;\n var offsetEndDiff = newPayloadOffsetEnd - originalPayloadOffsetEnd;\n var sizeDiff = offsetDiff + offsetEndDiff;\n var refined = refineMetadata(payload, sizeDiff, info);\n var newNewRefinedSize = new EBMLEncoder_1.default().encode(refined).byteLength; // 一旦 seekhead を作って自身のサイズを調べる\n if (newNewRefinedSize === newPayloadSize) {\n // Size is stable\n return new EBMLEncoder_1.default().encode([].concat(ebml, [{ type: \"m\", name: \"Segment\", isEnd: false, unknownSize: true }], refined));\n }\n newPayloadSize = newNewRefinedSize;\n }\n throw new Error(\"unable to refine metadata, stable size could not be found in \" + i + \" iterations!\");\n}\nexports.putRefinedMetaData = putRefinedMetaData;\n// Given a list of EBMLElementBuffers, returns their encoded size in bytes\nfunction encodedSizeOfEbml(refinedMetaData) {\n var encorder = new EBMLEncoder_1.default();\n return refinedMetaData.reduce(function (lst, elm) { return lst.concat(encorder.encode([elm])); }, []).reduce(function (o, buf) { return o + buf.byteLength; }, 0);\n}\nfunction refineMetadata(mesetadata, sizeDiff, info) {\n var duration = info.duration, clusterPtrs = info.clusterPtrs, cues = info.cues;\n var _metadata = mesetadata.slice(0);\n if (typeof duration === \"number\") {\n // duration を追加する\n var overwrited_1 = false;\n _metadata.forEach(function (elm) {\n if (elm.type === \"f\" && elm.name === \"Duration\") {\n overwrited_1 = true;\n elm.data = createFloatBuffer(duration, 8);\n }\n });\n if (!overwrited_1) {\n insertTag(_metadata, \"Info\", [{ name: \"Duration\", type: \"f\", data: createFloatBuffer(duration, 8) }]);\n }\n }\n if (Array.isArray(cues)) {\n insertTag(_metadata, \"Cues\", create_cue(cues, sizeDiff));\n }\n var seekhead_children = [];\n if (Array.isArray(clusterPtrs)) {\n console.warn(\"append cluster pointers to seekhead is deprecated. please use cues\");\n seekhead_children = create_seek_from_clusters(clusterPtrs, sizeDiff);\n }\n // remove seek info\n /*\n _metadata = _metadata.filter((elm)=> !(\n elm.name === \"Seek\" ||\n elm.name === \"SeekID\" ||\n elm.name === \"SeekPosition\") );\n */\n // working on progress\n //seekhead_children = seekhead_children.concat(create_seekhead(_metadata));\n insertTag(_metadata, \"SeekHead\", seekhead_children, true);\n return _metadata;\n}\nfunction create_seekhead(metadata, sizeDiff) {\n var seeks = [];\n [\"Info\", \"Tracks\", \"Cues\"].forEach(function (tagName) {\n var tagStarts = metadata.filter(function (elm) { return elm.type === \"m\" && elm.name === tagName && elm.isEnd === false; }).map(function (elm) { return elm[\"tagStart\"]; });\n var tagStart = tagStarts[0];\n if (typeof tagStart !== \"number\") {\n return;\n }\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: false });\n switch (tagName) {\n case \"Info\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x15, 0x49, 0xA9, 0x66]) });\n break;\n case \"Tracks\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x16, 0x54, 0xAE, 0x6B]) });\n break;\n case \"Cues\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1C, 0x53, 0xBB, 0x6B]) });\n break;\n }\n seeks.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(tagStart + sizeDiff) });\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: true });\n });\n return seeks;\n}\nfunction create_seek_from_clusters(clusterPtrs, sizeDiff) {\n var seeks = [];\n clusterPtrs.forEach(function (start) {\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: false });\n // [0x1F, 0x43, 0xB6, 0x75] で Cluster 意\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1F, 0x43, 0xB6, 0x75]) });\n seeks.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(start + sizeDiff) });\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: true });\n });\n return seeks;\n}\nfunction create_cue(cueInfos, sizeDiff) {\n var cues = [];\n cueInfos.forEach(function (_a) {\n var CueTrack = _a.CueTrack, CueClusterPosition = _a.CueClusterPosition, CueTime = _a.CueTime;\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTime\", type: \"u\", data: createUIntBuffer(CueTime) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTrack\", type: \"u\", data: createUIntBuffer(CueTrack) }); // video track\n cues.push({ name: \"CueClusterPosition\", type: \"u\", data: createUIntBuffer(CueClusterPosition + sizeDiff) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: true });\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: true });\n });\n return cues;\n}\nfunction insertTag(_metadata, tagName, children, insertHead) {\n if (insertHead === void 0) { insertHead = false; }\n // find the tagname from _metadata\n var idx = -1;\n for (var i = 0; i < _metadata.length; i++) {\n var elm = _metadata[i];\n if (elm.type === \"m\" && elm.name === tagName && elm.isEnd === false) {\n idx = i;\n break;\n }\n }\n if (idx >= 0) {\n // insert [] to \n Array.prototype.splice.apply(_metadata, [idx + 1, 0].concat(children));\n }\n else if (insertHead) {\n [].concat([{ name: tagName, type: \"m\", isEnd: false }], children, [{ name: tagName, type: \"m\", isEnd: true }]).reverse().forEach(function (elm) { _metadata.unshift(elm); });\n }\n else {\n // metadata 末尾に を追加\n // insert \n _metadata.push({ name: tagName, type: \"m\", isEnd: false });\n children.forEach(function (elm) { _metadata.push(elm); });\n _metadata.push({ name: tagName, type: \"m\", isEnd: true });\n }\n}\nfunction concat(list) {\n return exports.Buffer.concat(list);\n}\nexports.concat = concat;\nfunction encodeValueToBuffer(elm) {\n var data = new exports.Buffer(0);\n if (elm.type === \"m\") {\n return elm;\n }\n switch (elm.type) {\n case \"u\":\n data = createUIntBuffer(elm.value);\n break;\n case \"i\":\n data = createIntBuffer(elm.value);\n break;\n case \"f\":\n data = createFloatBuffer(elm.value);\n break;\n case \"s\":\n data = new exports.Buffer(elm.value, 'ascii');\n break;\n case \"8\":\n data = new exports.Buffer(elm.value, 'utf8');\n break;\n case \"b\":\n data = elm.value;\n break;\n case \"d\":\n data = new int64_buffer_1.Int64BE(elm.value.getTime().toString()).toBuffer();\n break;\n }\n return Object.assign({}, elm, { data: data });\n}\nexports.encodeValueToBuffer = encodeValueToBuffer;\nfunction createUIntBuffer(value) {\n // Big-endian, any size from 1 to 8\n // but js number is float64, so max 6 bit octets\n var bytes = 1;\n for (; value >= Math.pow(2, 8 * bytes); bytes++) { }\n if (bytes >= 7) {\n console.warn(\"7bit or more bigger uint not supported.\");\n return new int64_buffer_1.Uint64BE(value).toBuffer();\n }\n var data = new exports.Buffer(bytes);\n data.writeUIntBE(value, 0, bytes);\n return data;\n}\nexports.createUIntBuffer = createUIntBuffer;\nfunction createIntBuffer(value) {\n // Big-endian, any size from 1 to 8 octets\n // but js number is float64, so max 6 bit\n var bytes = 1;\n for (; value >= Math.pow(2, 8 * bytes); bytes++) { }\n if (bytes >= 7) {\n console.warn(\"7bit or more bigger uint not supported.\");\n return new int64_buffer_1.Int64BE(value).toBuffer();\n }\n var data = new exports.Buffer(bytes);\n data.writeIntBE(value, 0, bytes);\n return data;\n}\nexports.createIntBuffer = createIntBuffer;\nfunction createFloatBuffer(value, bytes) {\n if (bytes === void 0) { bytes = 8; }\n // Big-endian, defined for 4 and 8 octets (32, 64 bits)\n // js number is float64 so 8 bytes.\n if (bytes === 8) {\n // 64bit\n var data = new exports.Buffer(8);\n data.writeDoubleBE(value, 0);\n return data;\n }\n else if (bytes === 4) {\n // 32bit\n var data = new exports.Buffer(4);\n data.writeFloatBE(value, 0);\n return data;\n }\n else {\n throw new Error(\"float type bits must 4bytes or 8bytes\");\n }\n}\nexports.createFloatBuffer = createFloatBuffer;\nfunction convertEBMLDateToJSDate(int64str) {\n if (int64str instanceof Date) {\n return int64str;\n }\n return new Date(new Date(\"2001-01-01T00:00:00.000Z\").getTime() + (Number(int64str) / 1000 / 1000));\n}\nexports.convertEBMLDateToJSDate = convertEBMLDateToJSDate;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ebml_1 = require(\"./ebml\");\n/**\n * based on ts-ebml and support large file,optimize memory usage during repair\n *\n * @param blob the blob you need to fix\n * @returns the blob that has been fixed\n *\n */\nfunction fixWebmDuration(blob) {\n return __awaiter(this, void 0, void 0, function () {\n var decoder, reader, readstream, readerBlob, _a, done, value, elms, refinedMetadataBuf, refinedMetadataBlob, firstPartBlobWithoutMetadata, finalBlob;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!blob) {\n throw Error('call to fixWebmDuration requires a blob');\n }\n decoder = new ebml_1.Decoder();\n reader = new ebml_1.Reader();\n readstream = blob.stream();\n readerBlob = readstream.getReader();\n _b.label = 1;\n case 1:\n if (!true) return [3 /*break*/, 3];\n return [4 /*yield*/, readerBlob.read()];\n case 2:\n _a = _b.sent(), done = _a.done, value = _a.value;\n if (done) {\n reader.stop();\n return [3 /*break*/, 3];\n }\n elms = decoder.decode(value);\n // As browser upgrade webm meta attributes are gradually added, \n // so filter unknown type to bypass this issue.\n elms = elms === null || elms === void 0 ? void 0 : elms.filter(function (elm) { return elm.type !== 'unknown'; });\n elms.forEach(function (elm) {\n reader.read(elm);\n });\n value = null;\n return [3 /*break*/, 1];\n case 3:\n refinedMetadataBuf = ebml_1.tools.makeMetadataSeekable(reader.metadatas, reader.duration, reader.cues);\n refinedMetadataBlob = new Blob([refinedMetadataBuf], { type: blob.type });\n firstPartBlobWithoutMetadata = blob.slice(reader.metadataSize);\n finalBlob = new Blob([refinedMetadataBlob, firstPartBlobWithoutMetadata], { type: blob.type });\n return [2 /*return*/, finalBlob];\n }\n });\n });\n}\nexports.default = fixWebmDuration;\n"],"names":["exports","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","base64","ieee754","customInspectSymbol","Symbol","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","value","string","encoding","isEncoding","actual","write","slice","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","b","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","fromObject","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","this","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","val","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","base64Write","ucs2Write","units","c","hi","lo","utf16leToBytes","Math","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","e","typedArraySupport","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","name","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","abs","INVALID_BASE64_RE","Infinity","leadSurrogate","split","base64clean","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","BufferReader","module","block","reader","trackNumber","nextUIntV","timecode","nextInt16BE","flags","nextUInt8","invisible","keyframe","discardable","lacing","frames","nextBuffer","frameSize","framesNum","frameSizes","nextIntV","readLacedData","vint","v","signed","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","args","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","isNaN","EventEmitter","init","once","emitter","Promise","resolve","reject","errorListener","err","removeListener","resolver","eventTargetAgnosticAddListener","handler","on","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","events","existing","warning","create","newListener","emit","unshift","warned","w","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","addEventListener","wrapListener","removeEventListener","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","listeners","addListener","prependListener","prependOnceListener","position","originalListener","shift","index","pop","spliceOne","off","removeAllListeners","key","keys","rawListeners","eventNames","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","s","NaN","rt","log","LN2","storage","UNDEFINED","BUFFER","UINT8ARRAY","ARRAYBUFFER","ZERO","BIT32","factory","bigendian","unsigned","posH","posL","pos0","pos1","pos2","pos3","fromPositive","fromPositiveBE","fromPositiveLE","fromNegative","fromNegativeBE","fromNegativeLE","Int64","isName","_isInt64","toNumber","radix","high","readInt32","low","sign","mod","toArray","toBuffer","toArrayBuffer","raddix","newArray","isValidBuffer","_storage","chr","writeInt32","fromArray","raw","arrbuf","dest","destbuf","destoff","srcbuf","srcoff","nodeName","State","int64_buffer_1","tools_1","tools","ebmlID_1","EBMLDecoder","_buffer","_tag_stack","_state","STATE_TAG","_cursor","_total","_schema","byEbmlID","_result","decode","chunk","readChunk","diff","readTag","STATE_SIZE","readSize","STATE_CONTENT","readContent","getSchemaInfo","tagNum","level","description","tag","readVint","reduce","o","schema","tagObj","EBML_ID","tagStart","tagEnd","sizeStart","sizeEnd","dataStart","dataEnd","dataSize","unknownSize","isEnd","elm","assign","convertEBMLDateToJSDate","Int64BE","topEle","EBMLEncoder","_buffers","_stack","encode","elms","_this","lst","endTag","startTag","writeTag","flush","tagName","tagNums","map","tagId","tagData","encodeTag","children","childTagDataBuffers","child","childTagDataBuffer","extendStatics","__extends","__proto__","p","hasOwnProperty","__","events_1","EBMLReader","_super","logGroup","hasLoggingStarted","metadataloaded","chunks","segmentOffset","last2SimpleBlockVideoTrackTimecode","last2SimpleBlockAudioTrackTimecode","lastClusterTimecode","lastClusterPosition","timecodeScale","metadataSize","metadatas","cues","firstVideoBlockRead","firstAudioBlockRead","currentTrack","TrackNumber","TrackType","DefaultDuration","CodecDelay","trackTypes","trackDefaultDuration","trackCodecDelay","trackInfo","ended","logging","use_duration_every_simpleblock","use_webp","use_segment_info","drop_default_duration","stop","emit_segment_info","groupEnd","duration","videoTrackNum","audioTrackNum","drop","parent_1","_a","ebmlBlock","frames_1","CueTime","CueTrack","CueClusterPosition","forEach","frame","webpBuf","VP8BitStreamToRiffWebPBuffer","webp","Blob","currentTime","put","defaultDuration","codecDelay","lastTimecode","_defaultDuration","delay","event","groupCollapsed","group","multiple","minver","webm","mandatory","cppname","bytesize","divx","type2","crc","__createBinding","k","k2","__exportStar","Reader","Encoder","Decoder","EBMLDecoder_1","default","EBMLEncoder_1","EBMLReader_1","__assign","t","__spreadArray","to","pack","ar","l","Tools","log2","number","readHexString","writeVint","concatenate","a1","a2","buff","q","acc","current","padStart","readUtf8","exception","readUnsigned","DataView","getUint8","getUint16","getUint32","readSigned","getInt8","getInt16","getInt32","readFloat","getFloat32","getFloat64","readDate","Date","readDataFromTag","track","payload","length_1","Boolean","createFloatBuffer","createIntBuffer","createUIntBuffer","encodeValueToBuffer","putRefinedMetaData","extractElement","removeElement","makeMetadataSeekable","createRIFFChunk","WebPBlockFilter","readBlock","_Buffer","tools_ebml_1","_block","FourCC","chunkSize","idName","metadata","element","splice","result","encodedSizeOfEbml","refinedMetaData","encorder","refineMetadata","mesetadata","sizeDiff","info","clusterPtrs","_metadata","overwrited_1","insertTag","cueInfos","create_cue","seekhead_children","seeks","create_seek_from_clusters","insertHead","idx","reverse","Uint64BE","some","VP8Chunk","originalMetadata","cuesInfo","header","segmentContentStartPos","originalMetadataSize","infoSize","tracks","tracksSize","seekHeadSize","seekHead","cuesSize","lastSizeDifference","_loop_1","infoStart","tracksStart","cuesStart","sizeDifference","maxIterations","finalMetadata","ebml","i_1","originalPayloadOffsetEnd","ebmlSize","offsetDiff","payloadSize","segmentTagBuf","segmentSizeBuf","_segmentSize","newPayloadSize","refined","newNewRefinedSize","getTime","int64str","__awaiter","thisArg","_arguments","P","generator","fulfilled","step","next","rejected","done","then","__generator","body","f","g","_","label","sent","trys","ops","verb","iterator","op","ebml_1","blob","decoder","readstream","readerBlob","refinedMetadataBuf","refinedMetadataBlob","firstPartBlobWithoutMetadata","_b","stream","getReader","filter"],"sourceRoot":""}
\ No newline at end of file
diff --git a/umd/290.prod.js.map b/umd/290.prod.js.map
index 94603bb3..ee7bc747 100644
--- a/umd/290.prod.js.map
+++ b/umd/290.prod.js.map
@@ -1 +1 @@
-{"version":3,"file":"290.prod.js","mappings":"2MASA,MAAMA,UAA6BC,IAAAA,cACjCC,YAAYC,GACVC,MAAMD,GAENE,KAAKC,UAAY,GACjB,MAAM,kBAAEC,GAAsBJ,EAAMK,KACpCC,EAAAA,SAAuBC,IACPA,EAAGC,KAAKC,MAAM,KACtBC,SAAQC,IACZT,KAAKC,UAAUS,KAAK,CAClBJ,KAAMG,EAAKE,OACXC,KAAMP,EAAGO,KACTC,MAAMC,EAAAA,EAAAA,IAAUT,EAAGO,MACnBG,KAAMb,EAAkBG,EAAGO,KAAM,CAACI,KAAM,YACxC,GACF,IAGJhB,KAAKC,UAAUgB,MAAK,CAACC,EAAGC,IAAMD,EAAEH,KAAKK,cAAcD,EAAEJ,OACvD,CAEAM,oBACMrB,KAAKsB,aACPtB,KAAKsB,YAAYC,eAAe,CAACC,MAAO,SAAUC,OAAQ,WAE9D,CAEAC,SACE,MAAMzB,EAAY,GACZ0B,EAAW3B,KAAKF,MAAM6B,UAAY,KAYxC,OAXA3B,KAAKC,UAAUO,SAAQ,CAACoB,EAAGC,KACzB,MAAMC,EAASF,EAAEhB,MAAQe,EAAW,YAAc,GAClD1B,EAAUS,KAAKd,IAAAA,cAAA,MAAImC,UAAWD,EAAOE,IAAKH,EACxCI,IAAKA,IAAYL,EAAEhB,MAAQe,IAAW3B,KAAKsB,YAAcW,EAAG,EAC5DC,QAASC,GAAKnC,KAAKF,MAAMsC,SAASR,EAAEhB,KAAMgB,EAAEtB,OAC5CV,IAAAA,cAAA,QAAMmC,UAAU,gBAAgBH,EAAEf,MAClCjB,IAAAA,cAAA,QAAMmC,UAAU,WAAU,IAAOH,EAAEb,MACnCnB,IAAAA,cAAA,QAAMmC,UAAU,aAAY,KAAQH,EAAEtB,OAClC,IAINV,IAAAA,cAAA,OAAKmC,UAAU,mBAAmBD,MAAO,CAACO,OAAQ,UAChDzC,IAAAA,cAAA,MAAImC,UAAU,0BACX9B,GAIT,EAGF,SAAeqC,EAAAA,EAAAA,YAAW3C,E","sources":["webpack://tinode-webapp/./src/widgets/phone-country-selector.jsx"],"sourcesContent":["// Selector for country dialing code.\n\nimport React from 'react';\nimport { injectIntl } from 'react-intl';\n\nimport * as dcodes from '../dcodes.json';\n\nimport { flagEmoji } from '../lib/strformat';\n\nclass PhoneCountrySelector extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.countries = [];\n const { formatDisplayName } = props.intl;\n dcodes.default.forEach(dc => {\n const parts = dc.dial.split(',');\n parts.forEach(part => {\n this.countries.push({\n dial: part.trim(),\n code: dc.code,\n flag: flagEmoji(dc.code),\n name: formatDisplayName(dc.code, {type: 'region'})\n });\n });\n });\n\n this.countries.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n componentDidMount() {\n if (this.selectedRef) {\n this.selectedRef.scrollIntoView({block: 'center', inline: 'nearest'});\n }\n }\n\n render() {\n const countries = [];\n const selected = this.props.selected || 'US';\n this.countries.forEach((c, idx) => {\n const style = (c.code == selected ? 'selected ' : '');\n countries.push( {if (c.code == selected) {this.selectedRef = ref}}}\n onClick={_ => this.props.onSubmit(c.code, c.dial)}>\n {c.flag}\n {c.name}\n +{c.dial}\n );\n });\n\n return (\n \n );\n }\n}\n\nexport default injectIntl(PhoneCountrySelector);\n"],"names":["PhoneCountrySelector","React","constructor","props","super","this","countries","formatDisplayName","intl","dcodes","dc","dial","split","forEach","part","push","trim","code","flag","flagEmoji","name","type","sort","a","b","localeCompare","componentDidMount","selectedRef","scrollIntoView","block","inline","render","selected","c","idx","style","className","key","ref","onClick","_","onSubmit","height","injectIntl"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"290.prod.js","mappings":"2MASA,MAAMA,UAA6BC,IAAAA,cACjCC,YAAYC,GACVC,MAAMD,GAENE,KAAKC,UAAY,GACjB,MAAM,kBAAEC,GAAsBJ,EAAMK,KACpCC,EAAeC,SAAQC,IACPA,EAAGC,KAAKC,MAAM,KACtBH,SAAQI,IACZT,KAAKC,UAAUS,KAAK,CAClBH,KAAME,EAAKE,OACXC,KAAMN,EAAGM,KACTC,MAAMC,EAAAA,EAAAA,IAAUR,EAAGM,MACnBG,KAAMb,EAAkBI,EAAGM,KAAM,CAACI,KAAM,YACxC,GACF,IAGJhB,KAAKC,UAAUgB,MAAK,CAACC,EAAGC,IAAMD,EAAEH,KAAKK,cAAcD,EAAEJ,OACvD,CAEAM,oBACMrB,KAAKsB,aACPtB,KAAKsB,YAAYC,eAAe,CAACC,MAAO,SAAUC,OAAQ,WAE9D,CAEAC,SACE,MAAMzB,EAAY,GACZ0B,EAAW3B,KAAKF,MAAM6B,UAAY,KAYxC,OAXA3B,KAAKC,UAAUI,SAAQ,CAACuB,EAAGC,KACzB,MAAMC,EAASF,EAAEhB,MAAQe,EAAW,YAAc,GAClD1B,EAAUS,KAAKd,IAAAA,cAAA,MAAImC,UAAWD,EAAOE,IAAKH,EACxCI,IAAKA,IAAYL,EAAEhB,MAAQe,IAAW3B,KAAKsB,YAAcW,EAAG,EAC5DC,QAASC,GAAKnC,KAAKF,MAAMsC,SAASR,EAAEhB,KAAMgB,EAAErB,OAC5CX,IAAAA,cAAA,QAAMmC,UAAU,gBAAgBH,EAAEf,MAClCjB,IAAAA,cAAA,QAAMmC,UAAU,WAAU,IAAOH,EAAEb,MACnCnB,IAAAA,cAAA,QAAMmC,UAAU,aAAY,KAAQH,EAAErB,OAClC,IAINX,IAAAA,cAAA,OAAKmC,UAAU,mBAAmBD,MAAO,CAACO,OAAQ,UAChDzC,IAAAA,cAAA,MAAImC,UAAU,0BACX9B,GAIT,EAGF,SAAeqC,EAAAA,EAAAA,YAAW3C,E","sources":["webpack://tinode-webapp/./src/widgets/phone-country-selector.jsx"],"sourcesContent":["// Selector for country dialing code.\n\nimport React from 'react';\nimport { injectIntl } from 'react-intl';\n\nimport * as dcodes from '../dcodes.json';\n\nimport { flagEmoji } from '../lib/strformat';\n\nclass PhoneCountrySelector extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.countries = [];\n const { formatDisplayName } = props.intl;\n dcodes.default.forEach(dc => {\n const parts = dc.dial.split(',');\n parts.forEach(part => {\n this.countries.push({\n dial: part.trim(),\n code: dc.code,\n flag: flagEmoji(dc.code),\n name: formatDisplayName(dc.code, {type: 'region'})\n });\n });\n });\n\n this.countries.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n componentDidMount() {\n if (this.selectedRef) {\n this.selectedRef.scrollIntoView({block: 'center', inline: 'nearest'});\n }\n }\n\n render() {\n const countries = [];\n const selected = this.props.selected || 'US';\n this.countries.forEach((c, idx) => {\n const style = (c.code == selected ? 'selected ' : '');\n countries.push( {if (c.code == selected) {this.selectedRef = ref}}}\n onClick={_ => this.props.onSubmit(c.code, c.dial)}>\n {c.flag}\n {c.name}\n +{c.dial}\n );\n });\n\n return (\n \n );\n }\n}\n\nexport default injectIntl(PhoneCountrySelector);\n"],"names":["PhoneCountrySelector","React","constructor","props","super","this","countries","formatDisplayName","intl","dcodes","forEach","dc","dial","split","part","push","trim","code","flag","flagEmoji","name","type","sort","a","b","localeCompare","componentDidMount","selectedRef","scrollIntoView","block","inline","render","selected","c","idx","style","className","key","ref","onClick","_","onSubmit","height","injectIntl"],"sourceRoot":""}
\ No newline at end of file
diff --git a/umd/311.prod.js b/umd/311.prod.js
index d90b7f05..f0960ba2 100644
--- a/umd/311.prod.js
+++ b/umd/311.prod.js
@@ -1,2 +1,2 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[311],{1311:(e,d,a)=>{a.r(d),a.d(d,{default:()=>h});var t=a(7363),l=a.n(t),o=a(916),i=a(2078),s=a(195),c=a(5030);const n=(0,o.defineMessages)({password_reset_email_sent:{id:"password_reset_email_sent",defaultMessage:[{type:0,value:"An email with security code has been sent."}]},password_reset_sms_sent:{id:"password_reset_sms_sent",defaultMessage:[{type:0,value:"A text message with security code has been sent."}]}});class r extends l().PureComponent{constructor(e){super(e),this.state={tel:"",email:"",password:"",sent:!1,haveCode:!1,code:""},this.handleSubmit=this.handleSubmit.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleCodeChange=this.handleCodeChange.bind(this),this.handleShowCodeField=this.handleShowCodeField.bind(this),e.tinode.connect().catch((e=>{this.props.onError(e.message,"err")}))}componentDidMount(){const e=c.Z.parseUrlHash(window.location.hash);this.setState({token:e.params.token,scheme:e.params.scheme})}handleSubmit(e){if(e.preventDefault(),this.state.token)this.props.onReset(this.state.password.trim(),{scheme:"token",token:this.state.token});else if(this.state.code&&this.props.reqCredMethod){const e=this.state.email.trim()||this.state.tel.trim();this.props.onReset(this.state.password.trim(),{scheme:"code",secret:btoa(`${this.state.code}:${this.props.reqCredMethod}:${e}`)})}else{const e=this.state.email.trim(),d=this.state.tel.trim();this.setState({email:e,tel:d}),this.props.onRequest(this.props.reqCredMethod,e||d).then((e=>{this.setState({sent:!0});const d="email"==this.props.reqCredMethod?n.password_reset_email_sent:"tel"==this.props.reqCredMethod?n.password_reset_sms_sent:null;d&&this.props.onError(this.props.intl.formatMessage(d),"info")}))}}handleEmailChange(e){this.setState({email:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}handleCodeChange(e){this.setState({code:e.target.value.replace(/[^\d]/g,"")})}handleShowCodeField(e){e.preventDefault(),this.setState({haveCode:!0})}render(){const e=!(this.state.token&&this.state.scheme),d=!e||this.state.haveCode||this.state.sent,a=l().createElement(l().Fragment,null,l().createElement("label",{className:"small gray",htmlFor:"new-password"},l().createElement(o.FormattedMessage,{id:"label_new_password",defaultMessage:[{type:0,value:"New password"}]})),l().createElement(o.FormattedMessage,{id:"new_password_placeholder",defaultMessage:[{type:0,value:"Enter new password"}]},(e=>l().createElement(s.Z,{id:"new-password",placeholder:e,autoComplete:"new-password",value:this.state.password,required:!0,autoFocus:!0,onChange:this.handlePasswordChange})))),t=l().createElement(l().Fragment,null,this.state.haveCode?null:l().createElement("label",{htmlFor:"inputEmail"},l().createElement(o.FormattedMessage,{id:"label_reset_password",defaultMessage:[{type:0,value:"Send a password reset email"}]})),l().createElement(o.FormattedMessage,{id:"credential_email_prompt",defaultMessage:[{type:0,value:"Your registration email"}]},(e=>l().createElement("input",{type:"email",id:"inputEmail",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0,autoFocus:!0})))),c=l().createElement(l().Fragment,null,this.state.haveCode?null:l().createElement("div",null,l().createElement("label",null,l().createElement(o.FormattedMessage,{id:"label_reset_password_tel",defaultMessage:[{type:0,value:"Send SMS to reset password"}]}))),l().createElement("div",null,l().createElement("label",{className:"small gray"},l().createElement(o.FormattedMessage,{id:"mobile_phone_number",defaultMessage:[{type:0,value:"Mobile phone number"}]}))),l().createElement("div",{className:"panel-form-row"},l().createElement(i.Z,{autoFocus:!0,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:e=>this.setState({tel:e})}))),n=l().createElement(l().Fragment,null,l().createElement("div",null,l().createElement("label",{className:"small gray",htmlFor:"enter-confirmation-code"},l().createElement(o.FormattedMessage,{id:"enter_confirmation_code_prompt",defaultMessage:[{type:0,value:"Confirmation code"}]}))),l().createElement("div",null,l().createElement(o.FormattedMessage,{id:"numeric_confirmation_code_prompt",defaultMessage:[{type:0,value:"Numbers only"}]},(e=>l().createElement("input",{type:"text",id:"enter-confirmation-code",placeholder:e,maxLength:10,value:this.state.code,onChange:this.handleCodeChange,required:!0}))))),r="email"==this.props.reqCredMethod?t:"tel"==this.props.reqCredMethod?c:null;return l().createElement("form",{id:"password-reset-form",onSubmit:this.handleSubmit},!this.state.sent&&e?r:null,this.state.haveCode||this.state.sent?n:null,d?a:null,l().createElement("div",{className:"dialog-buttons"},this.state.haveCode||this.state.sent?null:l().createElement("a",{href:"#",onClick:this.handleShowCodeField,style:{marginRight:"auto"}},l().createElement(o.FormattedMessage,{id:"password_i_have_code",defaultMessage:[{type:0,value:"I have code"}]})),l().createElement("button",{className:"primary",type:"submit"},d?l().createElement(o.FormattedMessage,{id:"button_reset",defaultMessage:[{type:0,value:"Reset"}]}):l().createElement(o.FormattedMessage,{id:"button_send_request",defaultMessage:[{type:0,value:"Send request"}]}))))}}const h=(0,o.injectIntl)(r)},2078:(e,d,a)=>{a.d(d,{Z:()=>p});var t=a(7363),l=a.n(t),o=a(916),i=a(306),s=a(2610),c=a(2689),n=a(6359),r=a(6670),h=a(3905);const m=(0,o.defineMessages)({mobile_number_required:{id:"mobile_number_required",defaultMessage:[{type:0,value:"Mobile phone number required"}]}});class u extends l().PureComponent{constructor(e){super(e),this.codeMap={},r.forEach((e=>{this.codeMap[e.code]=e.dial}));const d=e.countryCode||"US",a=this.codeMap[d];this.state={countryCode:d,dialCode:a,localNumber:"",placeholderNumber:this.placeholderNumber(d,a)},this.handleChange=this.handleChange.bind(this),this.handleFinished=this.handleFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.showCountrySelector=this.showCountrySelector.bind(this)}handleChange(e){const d=`+${this.state.dialCode}`;let a=(new i.R).input(`${d}${this.filterNumber(e.target.value)}`);a=a.substring(d.length).trim(),this.setState({localNumber:a})}handleFinished(e){e.preventDefault();const d=`${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\d]/g,"");let a=null;try{a=(0,s.h)(`+${d}`)}catch(e){}a&&a.isValid()?(this.inputField.setCustomValidity(""),this.props.onSubmit(a.format("E.164"))):this.inputField.setCustomValidity(this.props.intl.formatMessage(m.mobile_number_required))}handleKeyDown(e){"Enter"===e.key&&this.handleFinished(e)}showCountrySelector(){this.props.onShowCountrySelector(this.state.countryCode,this.state.dialCode,((e,d)=>{this.setState({countryCode:e,dialCode:d,placeholderNumber:this.placeholderNumber(e,d)})}))}filterNumber(e){return e?e.replace(/[^-\s().\d]/g,""):e}placeholderNumber(e,d){const a=(0,c.L)(e,n.Z);return a?a.formatInternational().substring(d.length+1).trim():"123 0123"}render(){return l().createElement(l().Fragment,null,l().createElement("span",{className:"dial-code",onClick:this.showCountrySelector},l().createElement("span",{className:"country-flag"},(0,h.Yu)(this.state.countryCode)," "),"+",this.state.dialCode," "),l().createElement("input",{type:"tel",ref:e=>{this.inputField=e},placeholder:this.state.placeholderNumber,value:this.state.localNumber,onChange:this.handleChange,maxLength:17,onKeyDown:this.handleKeyDown,onBlur:this.handleFinished,required:!0,autoFocus:this.props.autoFocus}))}}const p=(0,o.injectIntl)(u)},6670:e=>{e.exports=JSON.parse('[{"dial":"93","code":"AF"},{"dial":"355","code":"AL"},{"dial":"213","code":"DZ"},{"dial":"1-684","code":"AS"},{"dial":"376","code":"AD"},{"dial":"244","code":"AO"},{"dial":"1-264","code":"AI"},{"dial":"672","code":"AQ"},{"dial":"1-268","code":"AG"},{"dial":"54","code":"AR"},{"dial":"374","code":"AM"},{"dial":"297","code":"AW"},{"dial":"61","code":"AU"},{"dial":"43","code":"AT"},{"dial":"994","code":"AZ"},{"dial":"1-242","code":"BS"},{"dial":"973","code":"BH"},{"dial":"880","code":"BD"},{"dial":"1-246","code":"BB"},{"dial":"375","code":"BY"},{"dial":"32","code":"BE"},{"dial":"501","code":"BZ"},{"dial":"229","code":"BJ"},{"dial":"1-441","code":"BM"},{"dial":"975","code":"BT"},{"dial":"591","code":"BO"},{"dial":"387","code":"BA"},{"dial":"267","code":"BW"},{"dial":"55","code":"BR"},{"dial":"246","code":"IO"},{"dial":"1-284","code":"VG"},{"dial":"673","code":"BN"},{"dial":"359","code":"BG"},{"dial":"226","code":"BF"},{"dial":"257","code":"BI"},{"dial":"855","code":"KH"},{"dial":"237","code":"CM"},{"dial":"1","code":"CA"},{"dial":"238","code":"CV"},{"dial":"1-345","code":"KY"},{"dial":"236","code":"CF"},{"dial":"235","code":"TD"},{"dial":"56","code":"CL"},{"dial":"86","code":"CN"},{"dial":"61","code":"CX"},{"dial":"61","code":"CC"},{"dial":"57","code":"CO"},{"dial":"269","code":"KM"},{"dial":"682","code":"CK"},{"dial":"506","code":"CR"},{"dial":"385","code":"HR"},{"dial":"53","code":"CU"},{"dial":"599","code":"CW"},{"dial":"357","code":"CY"},{"dial":"420","code":"CZ"},{"dial":"243","code":"CD"},{"dial":"45","code":"DK"},{"dial":"253","code":"DJ"},{"dial":"1-767","code":"DM"},{"dial":"1-809, 1-829, 1-849","code":"DO"},{"dial":"670","code":"TL"},{"dial":"593","code":"EC"},{"dial":"20","code":"EG"},{"dial":"503","code":"SV"},{"dial":"240","code":"GQ"},{"dial":"291","code":"ER"},{"dial":"372","code":"EE"},{"dial":"251","code":"ET"},{"dial":"500","code":"FK"},{"dial":"298","code":"FO"},{"dial":"679","code":"FJ"},{"dial":"358","code":"FI"},{"dial":"33","code":"FR"},{"dial":"689","code":"PF"},{"dial":"241","code":"GA"},{"dial":"220","code":"GM"},{"dial":"995","code":"GE"},{"dial":"49","code":"DE"},{"dial":"233","code":"GH"},{"dial":"350","code":"GI"},{"dial":"30","code":"GR"},{"dial":"299","code":"GL"},{"dial":"1-473","code":"GD"},{"dial":"1-671","code":"GU"},{"dial":"502","code":"GT"},{"dial":"44-1481","code":"GG"},{"dial":"224","code":"GN"},{"dial":"245","code":"GW"},{"dial":"592","code":"GY"},{"dial":"509","code":"HT"},{"dial":"504","code":"HN"},{"dial":"852","code":"HK"},{"dial":"36","code":"HU"},{"dial":"354","code":"IS"},{"dial":"91","code":"IN"},{"dial":"62","code":"ID"},{"dial":"98","code":"IR"},{"dial":"964","code":"IQ"},{"dial":"353","code":"IE"},{"dial":"44-1624","code":"IM"},{"dial":"972","code":"IL"},{"dial":"39","code":"IT"},{"dial":"225","code":"CI"},{"dial":"1-876","code":"JM"},{"dial":"81","code":"JP"},{"dial":"44-1534","code":"JE"},{"dial":"962","code":"JO"},{"dial":"7, 997","code":"KZ"},{"dial":"254","code":"KE"},{"dial":"686","code":"KI"},{"dial":"383","code":"XK"},{"dial":"965","code":"KW"},{"dial":"996","code":"KG"},{"dial":"856","code":"LA"},{"dial":"371","code":"LV"},{"dial":"961","code":"LB"},{"dial":"266","code":"LS"},{"dial":"231","code":"LR"},{"dial":"218","code":"LY"},{"dial":"423","code":"LI"},{"dial":"370","code":"LT"},{"dial":"352","code":"LU"},{"dial":"853","code":"MO"},{"dial":"389","code":"MK"},{"dial":"261","code":"MG"},{"dial":"265","code":"MW"},{"dial":"60","code":"MY"},{"dial":"960","code":"MV"},{"dial":"223","code":"ML"},{"dial":"356","code":"MT"},{"dial":"692","code":"MH"},{"dial":"222","code":"MR"},{"dial":"230","code":"MU"},{"dial":"262","code":"YT"},{"dial":"52","code":"MX"},{"dial":"691","code":"FM"},{"dial":"373","code":"MD"},{"dial":"377","code":"MC"},{"dial":"976","code":"MN"},{"dial":"382","code":"ME"},{"dial":"1-664","code":"MS"},{"dial":"212","code":"MA"},{"dial":"258","code":"MZ"},{"dial":"95","code":"MM"},{"dial":"264","code":"NA"},{"dial":"674","code":"NR"},{"dial":"977","code":"NP"},{"dial":"31","code":"NL"},{"dial":"599","code":"CW"},{"dial":"687","code":"NC"},{"dial":"64","code":"NZ"},{"dial":"505","code":"NI"},{"dial":"227","code":"NE"},{"dial":"234","code":"NG"},{"dial":"683","code":"NU"},{"dial":"850","code":"KP"},{"dial":"1-670","code":"MP"},{"dial":"47","code":"NO"},{"dial":"968","code":"OM"},{"dial":"92","code":"PK"},{"dial":"680","code":"PW"},{"dial":"970","code":"PS"},{"dial":"507","code":"PA"},{"dial":"675","code":"PG"},{"dial":"595","code":"PY"},{"dial":"51","code":"PE"},{"dial":"63","code":"PH"},{"dial":"64","code":"PN"},{"dial":"48","code":"PL"},{"dial":"351","code":"PT"},{"dial":"1-787, 1-939","code":"PR"},{"dial":"974","code":"QA"},{"dial":"242","code":"CG"},{"dial":"262","code":"RE"},{"dial":"40","code":"RO"},{"dial":"7","code":"RU"},{"dial":"250","code":"RW"},{"dial":"590","code":"BL"},{"dial":"290","code":"SH"},{"dial":"1-869","code":"KN"},{"dial":"1-758","code":"LC"},{"dial":"590","code":"MF"},{"dial":"508","code":"PM"},{"dial":"1-784","code":"VC"},{"dial":"685","code":"WS"},{"dial":"378","code":"SM"},{"dial":"239","code":"ST"},{"dial":"966","code":"SA"},{"dial":"221","code":"SN"},{"dial":"381","code":"RS"},{"dial":"248","code":"SC"},{"dial":"232","code":"SL"},{"dial":"65","code":"SG"},{"dial":"1-721","code":"SX"},{"dial":"421","code":"SK"},{"dial":"386","code":"SI"},{"dial":"677","code":"SB"},{"dial":"252","code":"SO"},{"dial":"27","code":"ZA"},{"dial":"82","code":"KR"},{"dial":"211","code":"SS"},{"dial":"34","code":"ES"},{"dial":"94","code":"LK"},{"dial":"249","code":"SD"},{"dial":"597","code":"SR"},{"dial":"47","code":"SJ"},{"dial":"268","code":"SZ"},{"dial":"46","code":"SE"},{"dial":"41","code":"CH"},{"dial":"963","code":"SY"},{"dial":"886","code":"TW"},{"dial":"992","code":"TJ"},{"dial":"255","code":"TZ"},{"dial":"66","code":"TH"},{"dial":"228","code":"TG"},{"dial":"690","code":"TK"},{"dial":"676","code":"TO"},{"dial":"1-868","code":"TT"},{"dial":"216","code":"TN"},{"dial":"90","code":"TR"},{"dial":"993","code":"TM"},{"dial":"1-649","code":"TC"},{"dial":"688","code":"TV"},{"dial":"1-340","code":"VI"},{"dial":"256","code":"UG"},{"dial":"380","code":"UA"},{"dial":"971","code":"AE"},{"dial":"44","code":"GB"},{"dial":"1","code":"US"},{"dial":"598","code":"UY"},{"dial":"998","code":"UZ"},{"dial":"678","code":"VU"},{"dial":"379","code":"VA"},{"dial":"58","code":"VE"},{"dial":"84","code":"VN"},{"dial":"681","code":"WF"},{"dial":"212","code":"EH"},{"dial":"967","code":"YE"},{"dial":"260","code":"ZM"},{"dial":"263","code":"ZW"}]')}}]);
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[311],{1311:(e,d,a)=>{a.r(d),a.d(d,{default:()=>h});var t=a(7363),l=a.n(t),o=a(916),i=a(2078),s=a(195),c=a(5030);const r=(0,o.defineMessages)({password_reset_email_sent:{id:"password_reset_email_sent",defaultMessage:[{type:0,value:"An email with security code has been sent."}]},password_reset_sms_sent:{id:"password_reset_sms_sent",defaultMessage:[{type:0,value:"A text message with security code has been sent."}]}});class n extends l().PureComponent{constructor(e){super(e),this.state={tel:"",email:"",password:"",sent:!1,haveCode:!1,code:""},this.handleSubmit=this.handleSubmit.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleCodeChange=this.handleCodeChange.bind(this),this.handleShowCodeField=this.handleShowCodeField.bind(this),e.tinode.connect().catch((e=>{this.props.onError(e.message,"err")}))}componentDidMount(){const e=c.Z.parseUrlHash(window.location.hash),d={token:e.params.token,scheme:e.params.scheme,code:e.params.code||""};this.savedCred=e.params.cred,this.props.reqCredMethod&&e.params.cred&&(d[this.props.reqCredMethod]=this.savedCred),this.setState(d)}componentDidUpdate(e,d){e.reqCredMethod!=this.props.reqCredMethod&&this.props.reqCredMethod&&this.setState({[this.props.reqCredMethod]:this.savedCred||""})}handleSubmit(e){if(e.preventDefault(),this.state.token)this.props.onReset(this.state.password.trim(),{scheme:"token",secret:this.state.token});else if(this.state.code&&this.props.reqCredMethod){const e="email"==this.props.reqCredMethod?this.state.email.trim():this.state.tel.trim();this.props.onReset(this.state.password.trim(),{scheme:"code",secret:btoa(`${this.state.code}:${this.props.reqCredMethod}:${e}`)})}else{const e=this.state.email.trim(),d=this.state.tel.trim();this.setState({email:e,tel:d}),this.props.onRequest(this.props.reqCredMethod,e||d).then((e=>{this.setState({sent:!0});const d="email"==this.props.reqCredMethod?r.password_reset_email_sent:"tel"==this.props.reqCredMethod?r.password_reset_sms_sent:null;d&&this.props.onError(this.props.intl.formatMessage(d),"info")}))}}handleEmailChange(e){this.setState({email:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}handleCodeChange(e){this.setState({code:e.target.value.replace(/[^\d]/g,"")})}handleShowCodeField(e){e.preventDefault(),this.setState({haveCode:!0})}render(){const e=!((this.state.token||this.state.code&&this.props.reqCredMethod)&&this.state.scheme),d=!e||this.state.haveCode||this.state.sent,a=l().createElement(l().Fragment,null,l().createElement("label",{className:"small gray",htmlFor:"new-password"},l().createElement(o.FormattedMessage,{id:"label_new_password",defaultMessage:[{type:0,value:"New password"}]})),l().createElement(o.FormattedMessage,{id:"new_password_placeholder",defaultMessage:[{type:0,value:"Enter new password"}]},(e=>l().createElement(s.Z,{id:"new-password",placeholder:e,autoComplete:"new-password",value:this.state.password,required:!0,autoFocus:!0,onChange:this.handlePasswordChange})))),t=l().createElement(l().Fragment,null,this.state.haveCode?null:l().createElement("label",{htmlFor:"inputEmail"},l().createElement(o.FormattedMessage,{id:"label_reset_password",defaultMessage:[{type:0,value:"Send a password reset email"}]})),l().createElement(o.FormattedMessage,{id:"credential_email_prompt",defaultMessage:[{type:0,value:"Your registration email"}]},(e=>l().createElement("input",{type:"email",id:"inputEmail",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0,autoFocus:!0})))),c=l().createElement(l().Fragment,null,this.state.haveCode?null:l().createElement("div",null,l().createElement("label",null,l().createElement(o.FormattedMessage,{id:"label_reset_password_tel",defaultMessage:[{type:0,value:"Send SMS to reset password"}]}))),l().createElement("div",null,l().createElement("label",{className:"small gray"},l().createElement(o.FormattedMessage,{id:"mobile_phone_number",defaultMessage:[{type:0,value:"Mobile phone number"}]}))),l().createElement("div",{className:"panel-form-row"},l().createElement(i.Z,{autoFocus:!0,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:e=>this.setState({tel:e})}))),r=l().createElement(l().Fragment,null,l().createElement("div",null,l().createElement("label",{className:"small gray",htmlFor:"enter-confirmation-code"},l().createElement(o.FormattedMessage,{id:"enter_confirmation_code_prompt",defaultMessage:[{type:0,value:"Confirmation code"}]}))),l().createElement("div",null,l().createElement(o.FormattedMessage,{id:"numeric_confirmation_code_prompt",defaultMessage:[{type:0,value:"Numbers only"}]},(e=>l().createElement("input",{type:"text",id:"enter-confirmation-code",placeholder:e,maxLength:10,value:this.state.code,onChange:this.handleCodeChange,required:!0}))))),n="email"==this.props.reqCredMethod?t:"tel"==this.props.reqCredMethod?c:null;return l().createElement("form",{id:"password-reset-form",onSubmit:this.handleSubmit},!this.state.sent&&e?n:null,this.state.haveCode||this.state.sent?r:null,d?a:null,l().createElement("div",{className:"dialog-buttons"},this.state.haveCode||this.state.sent||this.state.token||this.state.code?null:l().createElement("a",{href:"#",onClick:this.handleShowCodeField,style:{marginRight:"auto"}},l().createElement(o.FormattedMessage,{id:"password_i_have_code",defaultMessage:[{type:0,value:"I have code"}]})),l().createElement("button",{className:"primary",type:"submit"},d?l().createElement(o.FormattedMessage,{id:"button_reset",defaultMessage:[{type:0,value:"Reset"}]}):l().createElement(o.FormattedMessage,{id:"button_send_request",defaultMessage:[{type:0,value:"Send request"}]}))))}}const h=(0,o.injectIntl)(n)},2078:(e,d,a)=>{a.d(d,{Z:()=>p});var t=a(7363),l=a.n(t),o=a(916),i=a(306),s=a(6198),c=a(2689),r=a(6359),n=a(6670),h=a(3905);const m=(0,o.defineMessages)({mobile_number_required:{id:"mobile_number_required",defaultMessage:[{type:0,value:"Mobile phone number required"}]}});class u extends l().PureComponent{constructor(e){super(e),this.codeMap={},n.forEach((e=>{this.codeMap[e.code]=e.dial}));const d=e.countryCode||"US",a=this.codeMap[d];this.state={countryCode:d,dialCode:a,localNumber:"",placeholderNumber:this.placeholderNumber(d,a)},this.handleChange=this.handleChange.bind(this),this.handleFinished=this.handleFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.showCountrySelector=this.showCountrySelector.bind(this)}handleChange(e){const d=`+${this.state.dialCode}`;let a=(new i.R).input(`${d}${this.filterNumber(e.target.value)}`);a=a.substring(d.length).trim(),this.setState({localNumber:a})}handleFinished(e){e.preventDefault();const d=`${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\d]/g,"");let a=null;try{a=(0,s.h)(`+${d}`)}catch(e){}a&&a.isValid()?(this.inputField.setCustomValidity(""),this.props.onSubmit(a.format("E.164"))):this.inputField.setCustomValidity(this.props.intl.formatMessage(m.mobile_number_required))}handleKeyDown(e){"Enter"===e.key&&this.handleFinished(e)}showCountrySelector(){this.props.onShowCountrySelector(this.state.countryCode,this.state.dialCode,((e,d)=>{this.setState({countryCode:e,dialCode:d,placeholderNumber:this.placeholderNumber(e,d)})}))}filterNumber(e){return e?e.replace(/[^-\s().\d]/g,""):e}placeholderNumber(e,d){const a=(0,c.L)(e,r.Z);return a?a.formatInternational().substring(d.length+1).trim():"123 0123"}render(){return l().createElement(l().Fragment,null,l().createElement("span",{className:"dial-code",onClick:this.showCountrySelector},l().createElement("span",{className:"country-flag"},(0,h.Yu)(this.state.countryCode)," "),"+",this.state.dialCode," "),l().createElement("input",{type:"tel",ref:e=>{this.inputField=e},placeholder:this.state.placeholderNumber,value:this.state.localNumber,onChange:this.handleChange,maxLength:17,onKeyDown:this.handleKeyDown,onBlur:this.handleFinished,required:!0,autoFocus:this.props.autoFocus}))}}const p=(0,o.injectIntl)(u)},6670:e=>{e.exports=JSON.parse('[{"dial":"93","code":"AF"},{"dial":"355","code":"AL"},{"dial":"213","code":"DZ"},{"dial":"1-684","code":"AS"},{"dial":"376","code":"AD"},{"dial":"244","code":"AO"},{"dial":"1-264","code":"AI"},{"dial":"672","code":"AQ"},{"dial":"1-268","code":"AG"},{"dial":"54","code":"AR"},{"dial":"374","code":"AM"},{"dial":"297","code":"AW"},{"dial":"61","code":"AU"},{"dial":"43","code":"AT"},{"dial":"994","code":"AZ"},{"dial":"1-242","code":"BS"},{"dial":"973","code":"BH"},{"dial":"880","code":"BD"},{"dial":"1-246","code":"BB"},{"dial":"375","code":"BY"},{"dial":"32","code":"BE"},{"dial":"501","code":"BZ"},{"dial":"229","code":"BJ"},{"dial":"1-441","code":"BM"},{"dial":"975","code":"BT"},{"dial":"591","code":"BO"},{"dial":"387","code":"BA"},{"dial":"267","code":"BW"},{"dial":"55","code":"BR"},{"dial":"246","code":"IO"},{"dial":"1-284","code":"VG"},{"dial":"673","code":"BN"},{"dial":"359","code":"BG"},{"dial":"226","code":"BF"},{"dial":"257","code":"BI"},{"dial":"855","code":"KH"},{"dial":"237","code":"CM"},{"dial":"1","code":"CA"},{"dial":"238","code":"CV"},{"dial":"1-345","code":"KY"},{"dial":"236","code":"CF"},{"dial":"235","code":"TD"},{"dial":"56","code":"CL"},{"dial":"86","code":"CN"},{"dial":"61","code":"CX"},{"dial":"61","code":"CC"},{"dial":"57","code":"CO"},{"dial":"269","code":"KM"},{"dial":"682","code":"CK"},{"dial":"506","code":"CR"},{"dial":"385","code":"HR"},{"dial":"53","code":"CU"},{"dial":"599","code":"CW"},{"dial":"357","code":"CY"},{"dial":"420","code":"CZ"},{"dial":"243","code":"CD"},{"dial":"45","code":"DK"},{"dial":"253","code":"DJ"},{"dial":"1-767","code":"DM"},{"dial":"1-809, 1-829, 1-849","code":"DO"},{"dial":"670","code":"TL"},{"dial":"593","code":"EC"},{"dial":"20","code":"EG"},{"dial":"503","code":"SV"},{"dial":"240","code":"GQ"},{"dial":"291","code":"ER"},{"dial":"372","code":"EE"},{"dial":"251","code":"ET"},{"dial":"500","code":"FK"},{"dial":"298","code":"FO"},{"dial":"679","code":"FJ"},{"dial":"358","code":"FI"},{"dial":"33","code":"FR"},{"dial":"689","code":"PF"},{"dial":"241","code":"GA"},{"dial":"220","code":"GM"},{"dial":"995","code":"GE"},{"dial":"49","code":"DE"},{"dial":"233","code":"GH"},{"dial":"350","code":"GI"},{"dial":"30","code":"GR"},{"dial":"299","code":"GL"},{"dial":"1-473","code":"GD"},{"dial":"1-671","code":"GU"},{"dial":"502","code":"GT"},{"dial":"44-1481","code":"GG"},{"dial":"224","code":"GN"},{"dial":"245","code":"GW"},{"dial":"592","code":"GY"},{"dial":"509","code":"HT"},{"dial":"504","code":"HN"},{"dial":"852","code":"HK"},{"dial":"36","code":"HU"},{"dial":"354","code":"IS"},{"dial":"91","code":"IN"},{"dial":"62","code":"ID"},{"dial":"98","code":"IR"},{"dial":"964","code":"IQ"},{"dial":"353","code":"IE"},{"dial":"44-1624","code":"IM"},{"dial":"972","code":"IL"},{"dial":"39","code":"IT"},{"dial":"225","code":"CI"},{"dial":"1-876","code":"JM"},{"dial":"81","code":"JP"},{"dial":"44-1534","code":"JE"},{"dial":"962","code":"JO"},{"dial":"7, 997","code":"KZ"},{"dial":"254","code":"KE"},{"dial":"686","code":"KI"},{"dial":"383","code":"XK"},{"dial":"965","code":"KW"},{"dial":"996","code":"KG"},{"dial":"856","code":"LA"},{"dial":"371","code":"LV"},{"dial":"961","code":"LB"},{"dial":"266","code":"LS"},{"dial":"231","code":"LR"},{"dial":"218","code":"LY"},{"dial":"423","code":"LI"},{"dial":"370","code":"LT"},{"dial":"352","code":"LU"},{"dial":"853","code":"MO"},{"dial":"389","code":"MK"},{"dial":"261","code":"MG"},{"dial":"265","code":"MW"},{"dial":"60","code":"MY"},{"dial":"960","code":"MV"},{"dial":"223","code":"ML"},{"dial":"356","code":"MT"},{"dial":"692","code":"MH"},{"dial":"222","code":"MR"},{"dial":"230","code":"MU"},{"dial":"262","code":"YT"},{"dial":"52","code":"MX"},{"dial":"691","code":"FM"},{"dial":"373","code":"MD"},{"dial":"377","code":"MC"},{"dial":"976","code":"MN"},{"dial":"382","code":"ME"},{"dial":"1-664","code":"MS"},{"dial":"212","code":"MA"},{"dial":"258","code":"MZ"},{"dial":"95","code":"MM"},{"dial":"264","code":"NA"},{"dial":"674","code":"NR"},{"dial":"977","code":"NP"},{"dial":"31","code":"NL"},{"dial":"599","code":"CW"},{"dial":"687","code":"NC"},{"dial":"64","code":"NZ"},{"dial":"505","code":"NI"},{"dial":"227","code":"NE"},{"dial":"234","code":"NG"},{"dial":"683","code":"NU"},{"dial":"850","code":"KP"},{"dial":"1-670","code":"MP"},{"dial":"47","code":"NO"},{"dial":"968","code":"OM"},{"dial":"92","code":"PK"},{"dial":"680","code":"PW"},{"dial":"970","code":"PS"},{"dial":"507","code":"PA"},{"dial":"675","code":"PG"},{"dial":"595","code":"PY"},{"dial":"51","code":"PE"},{"dial":"63","code":"PH"},{"dial":"64","code":"PN"},{"dial":"48","code":"PL"},{"dial":"351","code":"PT"},{"dial":"1-787, 1-939","code":"PR"},{"dial":"974","code":"QA"},{"dial":"242","code":"CG"},{"dial":"262","code":"RE"},{"dial":"40","code":"RO"},{"dial":"7","code":"RU"},{"dial":"250","code":"RW"},{"dial":"590","code":"BL"},{"dial":"290","code":"SH"},{"dial":"1-869","code":"KN"},{"dial":"1-758","code":"LC"},{"dial":"590","code":"MF"},{"dial":"508","code":"PM"},{"dial":"1-784","code":"VC"},{"dial":"685","code":"WS"},{"dial":"378","code":"SM"},{"dial":"239","code":"ST"},{"dial":"966","code":"SA"},{"dial":"221","code":"SN"},{"dial":"381","code":"RS"},{"dial":"248","code":"SC"},{"dial":"232","code":"SL"},{"dial":"65","code":"SG"},{"dial":"1-721","code":"SX"},{"dial":"421","code":"SK"},{"dial":"386","code":"SI"},{"dial":"677","code":"SB"},{"dial":"252","code":"SO"},{"dial":"27","code":"ZA"},{"dial":"82","code":"KR"},{"dial":"211","code":"SS"},{"dial":"34","code":"ES"},{"dial":"94","code":"LK"},{"dial":"249","code":"SD"},{"dial":"597","code":"SR"},{"dial":"47","code":"SJ"},{"dial":"268","code":"SZ"},{"dial":"46","code":"SE"},{"dial":"41","code":"CH"},{"dial":"963","code":"SY"},{"dial":"886","code":"TW"},{"dial":"992","code":"TJ"},{"dial":"255","code":"TZ"},{"dial":"66","code":"TH"},{"dial":"228","code":"TG"},{"dial":"690","code":"TK"},{"dial":"676","code":"TO"},{"dial":"1-868","code":"TT"},{"dial":"216","code":"TN"},{"dial":"90","code":"TR"},{"dial":"993","code":"TM"},{"dial":"1-649","code":"TC"},{"dial":"688","code":"TV"},{"dial":"1-340","code":"VI"},{"dial":"256","code":"UG"},{"dial":"380","code":"UA"},{"dial":"971","code":"AE"},{"dial":"44","code":"GB"},{"dial":"1","code":"US"},{"dial":"598","code":"UY"},{"dial":"998","code":"UZ"},{"dial":"678","code":"VU"},{"dial":"379","code":"VA"},{"dial":"58","code":"VE"},{"dial":"84","code":"VN"},{"dial":"681","code":"WF"},{"dial":"212","code":"EH"},{"dial":"967","code":"YE"},{"dial":"260","code":"ZM"},{"dial":"263","code":"ZW"}]')}}]);
//# sourceMappingURL=311.prod.js.map
\ No newline at end of file
diff --git a/umd/311.prod.js.map b/umd/311.prod.js.map
index f87bdb61..954a2b18 100644
--- a/umd/311.prod.js.map
+++ b/umd/311.prod.js.map
@@ -1 +1 @@
-{"version":3,"file":"311.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/views/password-reset-view.jsx","webpack://tinode-webapp/./src/widgets/phone-edit.jsx"],"sourcesContent":["// A password reset form.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport PhoneEdit from '../widgets/phone-edit.jsx';\nimport VisiblePassword from '../widgets/visible-password.jsx';\n\nimport HashNavigation from '../lib/navigation.js';\n\nconst messages = defineMessages({\n password_reset_email_sent: {\n id: 'password_reset_email_sent',\n defaultMessage: 'An email with security code has been sent.',\n description: 'Notification that the email with password reset instructions has been sent'\n },\n password_reset_sms_sent: {\n id: 'password_reset_sms_sent',\n defaultMessage: 'A text message with security code has been sent.',\n description: 'Notification that the SMS with password reset instructions has been sent'\n }\n});\n\nclass PasswordResetView extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n tel: '',\n email: '',\n password: '',\n sent: false,\n haveCode: false,\n code: ''\n };\n\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleEmailChange = this.handleEmailChange.bind(this);\n this.handlePasswordChange = this.handlePasswordChange.bind(this);\n this.handleCodeChange = this.handleCodeChange.bind(this);\n this.handleShowCodeField = this.handleShowCodeField.bind(this);\n\n // Connection will trigger change by changing the this.props.serverVersion.\n props.tinode.connect()\n .catch(err => {\n this.props.onError(err.message, 'err');\n });\n }\n\n componentDidMount() {\n const parsed = HashNavigation.parseUrlHash(window.location.hash);\n this.setState({token: parsed.params.token, scheme: parsed.params.scheme});\n }\n\n handleSubmit(e) {\n e.preventDefault();\n if (this.state.token) {\n // Reset using token.\n this.props.onReset(this.state.password.trim(), {\n scheme: 'token',\n token: this.state.token\n });\n } else if (this.state.code && this.props.reqCredMethod) {\n // Reset using security code.\n // The secret is structured as ::, \"123456:email:alice@example.com\".\n const cred = this.state.email.trim() || this.state.tel.trim();\n this.props.onReset(this.state.password.trim(), {\n scheme: 'code',\n secret: btoa(`${this.state.code}:${this.props.reqCredMethod}:${cred}`)\n });\n } else {\n // Send email or SMS with the secret code.\n const email = this.state.email.trim();\n const tel = this.state.tel.trim();\n this.setState({email: email, tel: tel});\n this.props.onRequest(this.props.reqCredMethod, email || tel)\n .then(_ => {\n this.setState({sent: true});\n const msg = this.props.reqCredMethod == 'email' ? messages.password_reset_email_sent :\n this.props.reqCredMethod == 'tel' ? messages.password_reset_sms_sent : null;\n if (msg) {\n this.props.onError(this.props.intl.formatMessage(msg), 'info');\n }\n });\n }\n }\n\n handleEmailChange(e) {\n this.setState({email: e.target.value});\n }\n\n handlePasswordChange(e) {\n this.setState({password: e.target.value});\n }\n\n handleCodeChange(e) {\n this.setState({code: e.target.value.replace(/[^\\d]/g, '')});\n }\n\n handleShowCodeField(e) {\n e.preventDefault();\n this.setState({haveCode: true});\n }\n\n render() {\n const showCredentialInput = !(this.state.token && this.state.scheme);\n const showPasswordInput = !showCredentialInput || this.state.haveCode || this.state.sent;\n\n const passwordInput = (<>\n \n {\n (placeholder) => \n }\n >);\n\n const emailInput = (<>\n {this.state.haveCode ?\n null :\n \n }\n {\n (placeholder) => \n }\n >);\n\n const phoneInput = (<>\n {this.state.haveCode ?\n null :\n \n }\n \n \n
\n \n
this.setState({tel: number})} />\n \n >);\n\n const codeInput = (<>\n \n \n
\n \n {\n (numbers_only) => \n }\n
\n >);\n\n const credentialInput = this.props.reqCredMethod == 'email' ?\n emailInput : this.props.reqCredMethod == 'tel' ? phoneInput : null;\n\n return (\n \n );\n }\n}\n\nexport default injectIntl(PasswordResetView);\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n >\n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["messages","defineMessages","password_reset_email_sent","id","defaultMessage","password_reset_sms_sent","PasswordResetView","React","constructor","props","super","this","state","tel","email","password","sent","haveCode","code","handleSubmit","bind","handleEmailChange","handlePasswordChange","handleCodeChange","handleShowCodeField","tinode","connect","catch","err","onError","message","componentDidMount","parsed","HashNavigation","window","location","hash","setState","token","params","scheme","e","preventDefault","onReset","trim","reqCredMethod","cred","secret","btoa","onRequest","then","_","msg","intl","formatMessage","target","value","replace","render","showCredentialInput","showPasswordInput","passwordInput","className","htmlFor","FormattedMessage","placeholder","VisiblePassword","autoComplete","required","autoFocus","onChange","emailInput","type","phoneInput","PhoneEdit","onShowCountrySelector","onSubmit","number","codeInput","numbers_only","maxLength","credentialInput","href","onClick","style","marginRight","injectIntl","mobile_number_required","codeMap","dcodes","dc","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","AsYouType","input","filterNumber","substring","length","raw","parsePhoneNumber","isValid","inputField","setCustomValidity","format","key","sample","getExampleNumber","examples","formatInternational","flagEmoji","ref","onKeyDown","onBlur"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"311.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/views/password-reset-view.jsx","webpack://tinode-webapp/./src/widgets/phone-edit.jsx"],"sourcesContent":["// A password reset form.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport PhoneEdit from '../widgets/phone-edit.jsx';\nimport VisiblePassword from '../widgets/visible-password.jsx';\n\nimport HashNavigation from '../lib/navigation.js';\n\nconst messages = defineMessages({\n password_reset_email_sent: {\n id: 'password_reset_email_sent',\n defaultMessage: 'An email with security code has been sent.',\n description: 'Notification that the email with password reset instructions has been sent'\n },\n password_reset_sms_sent: {\n id: 'password_reset_sms_sent',\n defaultMessage: 'A text message with security code has been sent.',\n description: 'Notification that the SMS with password reset instructions has been sent'\n }\n});\n\nclass PasswordResetView extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n tel: '',\n email: '',\n password: '',\n sent: false,\n haveCode: false,\n code: ''\n };\n\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleEmailChange = this.handleEmailChange.bind(this);\n this.handlePasswordChange = this.handlePasswordChange.bind(this);\n this.handleCodeChange = this.handleCodeChange.bind(this);\n this.handleShowCodeField = this.handleShowCodeField.bind(this);\n\n // Connection will trigger change by changing the this.props.serverVersion.\n props.tinode.connect()\n .catch(err => {\n this.props.onError(err.message, 'err');\n });\n }\n\n componentDidMount() {\n const parsed = HashNavigation.parseUrlHash(window.location.hash);\n const newState = {\n token: parsed.params.token,\n scheme: parsed.params.scheme,\n code: parsed.params.code || ''\n }\n\n this.savedCred = parsed.params.cred;\n if (this.props.reqCredMethod && parsed.params.cred) {\n newState[this.props.reqCredMethod] = this.savedCred;\n }\n this.setState(newState);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.reqCredMethod != this.props.reqCredMethod && this.props.reqCredMethod) {\n this.setState({[this.props.reqCredMethod]: this.savedCred || ''});\n }\n }\n\n handleSubmit(e) {\n e.preventDefault();\n if (this.state.token) {\n // Reset using token.\n this.props.onReset(this.state.password.trim(), {\n scheme: 'token',\n secret: this.state.token\n });\n } else if (this.state.code && this.props.reqCredMethod) {\n // Reset using security code.\n // The secret is structured as ::, \"123456:email:alice@example.com\".\n const cred = this.props.reqCredMethod == 'email' ? this.state.email.trim() : this.state.tel.trim();\n this.props.onReset(this.state.password.trim(), {\n scheme: 'code',\n secret: btoa(`${this.state.code}:${this.props.reqCredMethod}:${cred}`)\n });\n } else {\n // Send email or SMS with the secret code.\n const email = this.state.email.trim();\n const tel = this.state.tel.trim();\n this.setState({email: email, tel: tel});\n this.props.onRequest(this.props.reqCredMethod, email || tel)\n .then(_ => {\n this.setState({sent: true});\n const msg = this.props.reqCredMethod == 'email' ? messages.password_reset_email_sent :\n this.props.reqCredMethod == 'tel' ? messages.password_reset_sms_sent : null;\n if (msg) {\n this.props.onError(this.props.intl.formatMessage(msg), 'info');\n }\n });\n }\n }\n\n handleEmailChange(e) {\n this.setState({email: e.target.value});\n }\n\n handlePasswordChange(e) {\n this.setState({password: e.target.value});\n }\n\n handleCodeChange(e) {\n this.setState({code: e.target.value.replace(/[^\\d]/g, '')});\n }\n\n handleShowCodeField(e) {\n e.preventDefault();\n this.setState({haveCode: true});\n }\n\n render() {\n const showCredentialInput = !((this.state.token || (this.state.code && this.props.reqCredMethod)) && this.state.scheme);\n const showPasswordInput = !showCredentialInput || this.state.haveCode || this.state.sent;\n\n const passwordInput = (<>\n \n {\n (placeholder) => \n }\n >);\n\n const emailInput = (<>\n {this.state.haveCode ?\n null :\n \n }\n {\n (placeholder) => \n }\n >);\n\n const phoneInput = (<>\n {this.state.haveCode ?\n null :\n \n }\n \n \n
\n \n
this.setState({tel: number})} />\n \n >);\n\n const codeInput = (<>\n \n \n
\n \n {\n (numbers_only) => \n }\n
\n >);\n\n const credentialInput = this.props.reqCredMethod == 'email' ?\n emailInput : this.props.reqCredMethod == 'tel' ? phoneInput : null;\n\n return (\n \n );\n }\n}\n\nexport default injectIntl(PasswordResetView);\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n >\n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["messages","defineMessages","password_reset_email_sent","id","defaultMessage","password_reset_sms_sent","PasswordResetView","React","constructor","props","super","this","state","tel","email","password","sent","haveCode","code","handleSubmit","bind","handleEmailChange","handlePasswordChange","handleCodeChange","handleShowCodeField","tinode","connect","catch","err","onError","message","componentDidMount","parsed","HashNavigation","parseUrlHash","window","location","hash","newState","token","params","scheme","savedCred","cred","reqCredMethod","setState","componentDidUpdate","prevProps","prevState","e","preventDefault","onReset","trim","secret","btoa","onRequest","then","_","msg","intl","formatMessage","target","value","replace","render","showCredentialInput","showPasswordInput","passwordInput","className","htmlFor","FormattedMessage","placeholder","VisiblePassword","autoComplete","required","autoFocus","onChange","emailInput","type","phoneInput","PhoneEdit","onShowCountrySelector","onSubmit","number","codeInput","numbers_only","maxLength","credentialInput","href","onClick","style","marginRight","injectIntl","mobile_number_required","codeMap","dcodes","forEach","dc","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","AsYouType","input","filterNumber","substring","length","raw","parsePhoneNumber","isValid","inputField","setCustomValidity","format","key","sample","getExampleNumber","examples","formatInternational","flagEmoji","ref","onKeyDown","onBlur"],"sourceRoot":""}
\ No newline at end of file
diff --git a/umd/327.prod.js b/umd/327.prod.js
index 638ada93..d111deef 100644
--- a/umd/327.prod.js
+++ b/umd/327.prod.js
@@ -1,2 +1,2 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[327],{327:(e,a,d)=>{d.r(a),d.d(a,{default:()=>g});var l=d(7363),t=d.n(l),i=d(916),o=d(9875),c=d(7432),s=d(2323),n=d(2078),r=d(195),h=d(320),m=d(8405),u=d(3740),p=d(8962);class g extends t().PureComponent{constructor(e){super(e),this.state={login:"",password:"",meth:"",email:"",tel:"",fn:"",imageUrl:null,uploadUrl:null,newAvatar:null,newAvatarMime:null,buttonDisabled:!1,saveToken:h.Z.getObject("keep-logged-in")},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handlePhoneChange=this.handlePhoneChange.bind(this),this.handleFnChange=this.handleFnChange.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleAvatarCropped=this.handleAvatarCropped.bind(this),this.handleAvatarCropCancel=this.handleAvatarCropCancel.bind(this),this.uploadAvatar=this.uploadAvatar.bind(this),this.handleSubmit=this.handleSubmit.bind(this),e.tinode.connect().catch((e=>{this.props.onError(e.message,"err")}))}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e})}handleEmailChange(e){this.setState({meth:"email",email:e.target.value})}handlePhoneChange(e){this.setState({meth:"tel",tel:e})}handleFnChange(e){this.setState({fn:e.target.value})}handleImageChanged(e,a){this.setState({newAvatar:a,newAvatarMime:e})}handleToggleSaveToken(){h.Z.setObject("keep-logged-in",!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.props.onCreateAccount(this.state.login.trim(),this.state.password.trim(),(0,u.n$)(this.state.fn.trim().substring(0,p.S8),this.state.uploadUrl),{meth:this.state.meth,val:"email"==this.state.meth?this.state.email:"tel"==this.state.meth?this.state.tel:null})}handleAvatarCropped(e,a,d,l){const t=a?URL.createObjectURL(a):null;this.setState({avatar:t,newAvatar:null,newAvatarMime:null}),a&&this.uploadAvatar(e,a,d,l)}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}uploadAvatar(e,a,d,l){const t=e=>{let{mime:a,blob:d}=e;if(this.setState({imageUrl:URL.createObjectURL(d),buttonDisabled:!0}),d.size>p.uv){this.props.tinode.getLargeFileHelper().upload(d,"newacc").then((e=>this.setState({uploadUrl:e}))).catch((e=>this.props.onError(e.message,"err"))).finally((e=>this.setState({buttonDisabled:!1})))}else(0,m.w8)(d).then((e=>this.setState({uploadUrl:(0,m.PD)({data:e.bits,type:a})}))).finally((e=>this.setState({buttonDisabled:!1})))};d>p.IX||l>p.IX||d!=l?(0,m.EA)(a,p.IX,p.IX,p.GQ,!0).then((e=>t(e))).catch((e=>this.props.onError(e.message,"err"))):t({mime:e,blob:a,width:d,height:l})}render(){if(this.state.newAvatar)return t().createElement(o.Z,{avatar:this.state.newAvatar,mime:this.state.newAvatarMime,onSubmit:this.handleAvatarCropped,onCancel:this.handleAvatarCropCancel,onError:this.props.onError});let e="primary";return this.props.disabled&&(e+=" disabled"),t().createElement("form",{className:"panel-form-column",onSubmit:this.handleSubmit},t().createElement("div",{className:"panel-form-row"},t().createElement("div",{className:"umn"},t().createElement(i.FormattedMessage,{id:"login_prompt",defaultMessage:[{type:0,value:"Login"}]},(e=>t().createElement("input",{type:"text",placeholder:e,autoComplete:"user-name",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),t().createElement(i.FormattedMessage,{id:"password_prompt",defaultMessage:[{type:0,value:"Password"}]},(e=>t().createElement(r.Z,{placeholder:e,autoComplete:"new-password",value:this.state.password,onFinished:this.handlePasswordChange,required:!0})))),t().createElement(c.Z,{tinode:this.props.tinode,avatar:this.state.imageUrl,onImageUpdated:this.handleImageChanged,onError:this.props.onError})),t().createElement("div",{className:"panel-form-row"},t().createElement(i.FormattedMessage,{id:"full_name_prompt",defaultMessage:[{type:0,value:"Full name, e.g. John Doe"}]},(e=>t().createElement("input",{type:"text",placeholder:e,autoComplete:"name",value:this.state.fn,onChange:this.handleFnChange,required:!0})))),"email"==this.props.reqCredMethod?t().createElement("div",{className:"panel-form-row"},t().createElement(i.FormattedMessage,{id:"email_prompt",defaultMessage:[{type:0,value:"Email, e.g. jdoe@example.com"}]},(e=>t().createElement("input",{type:"email",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0})))):"tel"==this.props.reqCredMethod?t().createElement(t().Fragment,null,t().createElement("div",{className:"panel-form-row"},t().createElement("label",{className:"small gray"},t().createElement(i.FormattedMessage,{id:"mobile_phone_number",defaultMessage:[{type:0,value:"Mobile phone number"}]}))),t().createElement("div",{className:"panel-form-row"},t().createElement(n.Z,{autoFocus:!1,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:this.handlePhoneChange}))):null,t().createElement("div",{className:"panel-form-row"},t().createElement(s.Z,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),t().createElement(i.FormattedMessage,{id:"stay_logged_in",defaultMessage:[{type:0,value:"Stay logged in"}]},(e=>t().createElement("label",{htmlFor:"save-token"}," ",e)))),t().createElement("div",{className:"dialog-buttons"},t().createElement("button",{className:e,type:"submit",disabled:this.state.buttonDisabled},t().createElement(i.FormattedMessage,{id:"button_sign_up",defaultMessage:[{type:0,value:"Sign up"}]}))))}}},2078:(e,a,d)=>{d.d(a,{Z:()=>p});var l=d(7363),t=d.n(l),i=d(916),o=d(306),c=d(2610),s=d(2689),n=d(6359),r=d(6670),h=d(3905);const m=(0,i.defineMessages)({mobile_number_required:{id:"mobile_number_required",defaultMessage:[{type:0,value:"Mobile phone number required"}]}});class u extends t().PureComponent{constructor(e){super(e),this.codeMap={},r.forEach((e=>{this.codeMap[e.code]=e.dial}));const a=e.countryCode||"US",d=this.codeMap[a];this.state={countryCode:a,dialCode:d,localNumber:"",placeholderNumber:this.placeholderNumber(a,d)},this.handleChange=this.handleChange.bind(this),this.handleFinished=this.handleFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.showCountrySelector=this.showCountrySelector.bind(this)}handleChange(e){const a=`+${this.state.dialCode}`;let d=(new o.R).input(`${a}${this.filterNumber(e.target.value)}`);d=d.substring(a.length).trim(),this.setState({localNumber:d})}handleFinished(e){e.preventDefault();const a=`${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\d]/g,"");let d=null;try{d=(0,c.h)(`+${a}`)}catch(e){}d&&d.isValid()?(this.inputField.setCustomValidity(""),this.props.onSubmit(d.format("E.164"))):this.inputField.setCustomValidity(this.props.intl.formatMessage(m.mobile_number_required))}handleKeyDown(e){"Enter"===e.key&&this.handleFinished(e)}showCountrySelector(){this.props.onShowCountrySelector(this.state.countryCode,this.state.dialCode,((e,a)=>{this.setState({countryCode:e,dialCode:a,placeholderNumber:this.placeholderNumber(e,a)})}))}filterNumber(e){return e?e.replace(/[^-\s().\d]/g,""):e}placeholderNumber(e,a){const d=(0,s.L)(e,n.Z);return d?d.formatInternational().substring(a.length+1).trim():"123 0123"}render(){return t().createElement(t().Fragment,null,t().createElement("span",{className:"dial-code",onClick:this.showCountrySelector},t().createElement("span",{className:"country-flag"},(0,h.Yu)(this.state.countryCode)," "),"+",this.state.dialCode," "),t().createElement("input",{type:"tel",ref:e=>{this.inputField=e},placeholder:this.state.placeholderNumber,value:this.state.localNumber,onChange:this.handleChange,maxLength:17,onKeyDown:this.handleKeyDown,onBlur:this.handleFinished,required:!0,autoFocus:this.props.autoFocus}))}}const p=(0,i.injectIntl)(u)},6670:e=>{e.exports=JSON.parse('[{"dial":"93","code":"AF"},{"dial":"355","code":"AL"},{"dial":"213","code":"DZ"},{"dial":"1-684","code":"AS"},{"dial":"376","code":"AD"},{"dial":"244","code":"AO"},{"dial":"1-264","code":"AI"},{"dial":"672","code":"AQ"},{"dial":"1-268","code":"AG"},{"dial":"54","code":"AR"},{"dial":"374","code":"AM"},{"dial":"297","code":"AW"},{"dial":"61","code":"AU"},{"dial":"43","code":"AT"},{"dial":"994","code":"AZ"},{"dial":"1-242","code":"BS"},{"dial":"973","code":"BH"},{"dial":"880","code":"BD"},{"dial":"1-246","code":"BB"},{"dial":"375","code":"BY"},{"dial":"32","code":"BE"},{"dial":"501","code":"BZ"},{"dial":"229","code":"BJ"},{"dial":"1-441","code":"BM"},{"dial":"975","code":"BT"},{"dial":"591","code":"BO"},{"dial":"387","code":"BA"},{"dial":"267","code":"BW"},{"dial":"55","code":"BR"},{"dial":"246","code":"IO"},{"dial":"1-284","code":"VG"},{"dial":"673","code":"BN"},{"dial":"359","code":"BG"},{"dial":"226","code":"BF"},{"dial":"257","code":"BI"},{"dial":"855","code":"KH"},{"dial":"237","code":"CM"},{"dial":"1","code":"CA"},{"dial":"238","code":"CV"},{"dial":"1-345","code":"KY"},{"dial":"236","code":"CF"},{"dial":"235","code":"TD"},{"dial":"56","code":"CL"},{"dial":"86","code":"CN"},{"dial":"61","code":"CX"},{"dial":"61","code":"CC"},{"dial":"57","code":"CO"},{"dial":"269","code":"KM"},{"dial":"682","code":"CK"},{"dial":"506","code":"CR"},{"dial":"385","code":"HR"},{"dial":"53","code":"CU"},{"dial":"599","code":"CW"},{"dial":"357","code":"CY"},{"dial":"420","code":"CZ"},{"dial":"243","code":"CD"},{"dial":"45","code":"DK"},{"dial":"253","code":"DJ"},{"dial":"1-767","code":"DM"},{"dial":"1-809, 1-829, 1-849","code":"DO"},{"dial":"670","code":"TL"},{"dial":"593","code":"EC"},{"dial":"20","code":"EG"},{"dial":"503","code":"SV"},{"dial":"240","code":"GQ"},{"dial":"291","code":"ER"},{"dial":"372","code":"EE"},{"dial":"251","code":"ET"},{"dial":"500","code":"FK"},{"dial":"298","code":"FO"},{"dial":"679","code":"FJ"},{"dial":"358","code":"FI"},{"dial":"33","code":"FR"},{"dial":"689","code":"PF"},{"dial":"241","code":"GA"},{"dial":"220","code":"GM"},{"dial":"995","code":"GE"},{"dial":"49","code":"DE"},{"dial":"233","code":"GH"},{"dial":"350","code":"GI"},{"dial":"30","code":"GR"},{"dial":"299","code":"GL"},{"dial":"1-473","code":"GD"},{"dial":"1-671","code":"GU"},{"dial":"502","code":"GT"},{"dial":"44-1481","code":"GG"},{"dial":"224","code":"GN"},{"dial":"245","code":"GW"},{"dial":"592","code":"GY"},{"dial":"509","code":"HT"},{"dial":"504","code":"HN"},{"dial":"852","code":"HK"},{"dial":"36","code":"HU"},{"dial":"354","code":"IS"},{"dial":"91","code":"IN"},{"dial":"62","code":"ID"},{"dial":"98","code":"IR"},{"dial":"964","code":"IQ"},{"dial":"353","code":"IE"},{"dial":"44-1624","code":"IM"},{"dial":"972","code":"IL"},{"dial":"39","code":"IT"},{"dial":"225","code":"CI"},{"dial":"1-876","code":"JM"},{"dial":"81","code":"JP"},{"dial":"44-1534","code":"JE"},{"dial":"962","code":"JO"},{"dial":"7, 997","code":"KZ"},{"dial":"254","code":"KE"},{"dial":"686","code":"KI"},{"dial":"383","code":"XK"},{"dial":"965","code":"KW"},{"dial":"996","code":"KG"},{"dial":"856","code":"LA"},{"dial":"371","code":"LV"},{"dial":"961","code":"LB"},{"dial":"266","code":"LS"},{"dial":"231","code":"LR"},{"dial":"218","code":"LY"},{"dial":"423","code":"LI"},{"dial":"370","code":"LT"},{"dial":"352","code":"LU"},{"dial":"853","code":"MO"},{"dial":"389","code":"MK"},{"dial":"261","code":"MG"},{"dial":"265","code":"MW"},{"dial":"60","code":"MY"},{"dial":"960","code":"MV"},{"dial":"223","code":"ML"},{"dial":"356","code":"MT"},{"dial":"692","code":"MH"},{"dial":"222","code":"MR"},{"dial":"230","code":"MU"},{"dial":"262","code":"YT"},{"dial":"52","code":"MX"},{"dial":"691","code":"FM"},{"dial":"373","code":"MD"},{"dial":"377","code":"MC"},{"dial":"976","code":"MN"},{"dial":"382","code":"ME"},{"dial":"1-664","code":"MS"},{"dial":"212","code":"MA"},{"dial":"258","code":"MZ"},{"dial":"95","code":"MM"},{"dial":"264","code":"NA"},{"dial":"674","code":"NR"},{"dial":"977","code":"NP"},{"dial":"31","code":"NL"},{"dial":"599","code":"CW"},{"dial":"687","code":"NC"},{"dial":"64","code":"NZ"},{"dial":"505","code":"NI"},{"dial":"227","code":"NE"},{"dial":"234","code":"NG"},{"dial":"683","code":"NU"},{"dial":"850","code":"KP"},{"dial":"1-670","code":"MP"},{"dial":"47","code":"NO"},{"dial":"968","code":"OM"},{"dial":"92","code":"PK"},{"dial":"680","code":"PW"},{"dial":"970","code":"PS"},{"dial":"507","code":"PA"},{"dial":"675","code":"PG"},{"dial":"595","code":"PY"},{"dial":"51","code":"PE"},{"dial":"63","code":"PH"},{"dial":"64","code":"PN"},{"dial":"48","code":"PL"},{"dial":"351","code":"PT"},{"dial":"1-787, 1-939","code":"PR"},{"dial":"974","code":"QA"},{"dial":"242","code":"CG"},{"dial":"262","code":"RE"},{"dial":"40","code":"RO"},{"dial":"7","code":"RU"},{"dial":"250","code":"RW"},{"dial":"590","code":"BL"},{"dial":"290","code":"SH"},{"dial":"1-869","code":"KN"},{"dial":"1-758","code":"LC"},{"dial":"590","code":"MF"},{"dial":"508","code":"PM"},{"dial":"1-784","code":"VC"},{"dial":"685","code":"WS"},{"dial":"378","code":"SM"},{"dial":"239","code":"ST"},{"dial":"966","code":"SA"},{"dial":"221","code":"SN"},{"dial":"381","code":"RS"},{"dial":"248","code":"SC"},{"dial":"232","code":"SL"},{"dial":"65","code":"SG"},{"dial":"1-721","code":"SX"},{"dial":"421","code":"SK"},{"dial":"386","code":"SI"},{"dial":"677","code":"SB"},{"dial":"252","code":"SO"},{"dial":"27","code":"ZA"},{"dial":"82","code":"KR"},{"dial":"211","code":"SS"},{"dial":"34","code":"ES"},{"dial":"94","code":"LK"},{"dial":"249","code":"SD"},{"dial":"597","code":"SR"},{"dial":"47","code":"SJ"},{"dial":"268","code":"SZ"},{"dial":"46","code":"SE"},{"dial":"41","code":"CH"},{"dial":"963","code":"SY"},{"dial":"886","code":"TW"},{"dial":"992","code":"TJ"},{"dial":"255","code":"TZ"},{"dial":"66","code":"TH"},{"dial":"228","code":"TG"},{"dial":"690","code":"TK"},{"dial":"676","code":"TO"},{"dial":"1-868","code":"TT"},{"dial":"216","code":"TN"},{"dial":"90","code":"TR"},{"dial":"993","code":"TM"},{"dial":"1-649","code":"TC"},{"dial":"688","code":"TV"},{"dial":"1-340","code":"VI"},{"dial":"256","code":"UG"},{"dial":"380","code":"UA"},{"dial":"971","code":"AE"},{"dial":"44","code":"GB"},{"dial":"1","code":"US"},{"dial":"598","code":"UY"},{"dial":"998","code":"UZ"},{"dial":"678","code":"VU"},{"dial":"379","code":"VA"},{"dial":"58","code":"VE"},{"dial":"84","code":"VN"},{"dial":"681","code":"WF"},{"dial":"212","code":"EH"},{"dial":"967","code":"YE"},{"dial":"260","code":"ZM"},{"dial":"263","code":"ZW"}]')}}]);
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[327],{327:(e,a,d)=>{d.r(a),d.d(a,{default:()=>g});var l=d(7363),t=d.n(l),i=d(916),o=d(9875),c=d(7432),s=d(2323),n=d(2078),r=d(195),h=d(320),m=d(8405),u=d(3740),p=d(8962);class g extends t().PureComponent{constructor(e){super(e),this.state={login:"",password:"",meth:"",email:"",tel:"",fn:"",imageUrl:null,uploadUrl:null,newAvatar:null,newAvatarMime:null,buttonDisabled:!1,saveToken:h.Z.getObject("keep-logged-in")},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handlePhoneChange=this.handlePhoneChange.bind(this),this.handleFnChange=this.handleFnChange.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleAvatarCropped=this.handleAvatarCropped.bind(this),this.handleAvatarCropCancel=this.handleAvatarCropCancel.bind(this),this.uploadAvatar=this.uploadAvatar.bind(this),this.handleSubmit=this.handleSubmit.bind(this),e.tinode.connect().catch((e=>{this.props.onError(e.message,"err")}))}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e})}handleEmailChange(e){this.setState({meth:"email",email:e.target.value})}handlePhoneChange(e){this.setState({meth:"tel",tel:e})}handleFnChange(e){this.setState({fn:e.target.value})}handleImageChanged(e,a){this.setState({newAvatar:a,newAvatarMime:e})}handleToggleSaveToken(){h.Z.setObject("keep-logged-in",!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.props.onCreateAccount(this.state.login.trim(),this.state.password.trim(),(0,u.n$)(this.state.fn.trim().substring(0,p.S8),this.state.uploadUrl),{meth:this.state.meth,val:"email"==this.state.meth?this.state.email:"tel"==this.state.meth?this.state.tel:null})}handleAvatarCropped(e,a,d,l){const t=a?URL.createObjectURL(a):null;this.setState({avatar:t,newAvatar:null,newAvatarMime:null}),a&&this.uploadAvatar(e,a,d,l)}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}uploadAvatar(e,a,d,l){const t=e=>{let{mime:a,blob:d}=e;if(this.setState({imageUrl:URL.createObjectURL(d),buttonDisabled:!0}),d.size>p.uv){this.props.tinode.getLargeFileHelper().upload(d,"newacc").then((e=>this.setState({uploadUrl:e}))).catch((e=>this.props.onError(e.message,"err"))).finally((e=>this.setState({buttonDisabled:!1})))}else(0,m.w8)(d).then((e=>this.setState({uploadUrl:(0,m.PD)({data:e.bits,type:a})}))).finally((e=>this.setState({buttonDisabled:!1})))};d>p.IX||l>p.IX||d!=l?(0,m.EA)(a,p.IX,p.IX,p.GQ,!0).then((e=>t(e))).catch((e=>this.props.onError(e.message,"err"))):t({mime:e,blob:a,width:d,height:l})}render(){if(this.state.newAvatar)return t().createElement(o.Z,{avatar:this.state.newAvatar,mime:this.state.newAvatarMime,onSubmit:this.handleAvatarCropped,onCancel:this.handleAvatarCropCancel,onError:this.props.onError});let e="primary";return this.props.disabled&&(e+=" disabled"),t().createElement("form",{className:"panel-form-column",onSubmit:this.handleSubmit},t().createElement("div",{className:"panel-form-row"},t().createElement("div",{className:"umn"},t().createElement(i.FormattedMessage,{id:"login_prompt",defaultMessage:[{type:0,value:"Login"}]},(e=>t().createElement("input",{type:"text",placeholder:e,autoComplete:"user-name",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),t().createElement(i.FormattedMessage,{id:"password_prompt",defaultMessage:[{type:0,value:"Password"}]},(e=>t().createElement(r.Z,{placeholder:e,autoComplete:"new-password",value:this.state.password,onFinished:this.handlePasswordChange,required:!0})))),t().createElement(c.Z,{tinode:this.props.tinode,avatar:this.state.imageUrl,onImageUpdated:this.handleImageChanged,onError:this.props.onError})),t().createElement("div",{className:"panel-form-row"},t().createElement(i.FormattedMessage,{id:"full_name_prompt",defaultMessage:[{type:0,value:"Full name, e.g. John Doe"}]},(e=>t().createElement("input",{type:"text",placeholder:e,autoComplete:"name",value:this.state.fn,onChange:this.handleFnChange,required:!0})))),"email"==this.props.reqCredMethod?t().createElement("div",{className:"panel-form-row"},t().createElement(i.FormattedMessage,{id:"email_prompt",defaultMessage:[{type:0,value:"Email, e.g. jdoe@example.com"}]},(e=>t().createElement("input",{type:"email",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0})))):"tel"==this.props.reqCredMethod?t().createElement(t().Fragment,null,t().createElement("div",{className:"panel-form-row"},t().createElement("label",{className:"small gray"},t().createElement(i.FormattedMessage,{id:"mobile_phone_number",defaultMessage:[{type:0,value:"Mobile phone number"}]}))),t().createElement("div",{className:"panel-form-row"},t().createElement(n.Z,{autoFocus:!1,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:this.handlePhoneChange}))):null,t().createElement("div",{className:"panel-form-row"},t().createElement(s.Z,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),t().createElement(i.FormattedMessage,{id:"stay_logged_in",defaultMessage:[{type:0,value:"Stay logged in"}]},(e=>t().createElement("label",{htmlFor:"save-token"}," ",e)))),t().createElement("div",{className:"dialog-buttons"},t().createElement("button",{className:e,type:"submit",disabled:this.state.buttonDisabled},t().createElement(i.FormattedMessage,{id:"button_sign_up",defaultMessage:[{type:0,value:"Sign up"}]}))))}}},2078:(e,a,d)=>{d.d(a,{Z:()=>p});var l=d(7363),t=d.n(l),i=d(916),o=d(306),c=d(6198),s=d(2689),n=d(6359),r=d(6670),h=d(3905);const m=(0,i.defineMessages)({mobile_number_required:{id:"mobile_number_required",defaultMessage:[{type:0,value:"Mobile phone number required"}]}});class u extends t().PureComponent{constructor(e){super(e),this.codeMap={},r.forEach((e=>{this.codeMap[e.code]=e.dial}));const a=e.countryCode||"US",d=this.codeMap[a];this.state={countryCode:a,dialCode:d,localNumber:"",placeholderNumber:this.placeholderNumber(a,d)},this.handleChange=this.handleChange.bind(this),this.handleFinished=this.handleFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.showCountrySelector=this.showCountrySelector.bind(this)}handleChange(e){const a=`+${this.state.dialCode}`;let d=(new o.R).input(`${a}${this.filterNumber(e.target.value)}`);d=d.substring(a.length).trim(),this.setState({localNumber:d})}handleFinished(e){e.preventDefault();const a=`${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\d]/g,"");let d=null;try{d=(0,c.h)(`+${a}`)}catch(e){}d&&d.isValid()?(this.inputField.setCustomValidity(""),this.props.onSubmit(d.format("E.164"))):this.inputField.setCustomValidity(this.props.intl.formatMessage(m.mobile_number_required))}handleKeyDown(e){"Enter"===e.key&&this.handleFinished(e)}showCountrySelector(){this.props.onShowCountrySelector(this.state.countryCode,this.state.dialCode,((e,a)=>{this.setState({countryCode:e,dialCode:a,placeholderNumber:this.placeholderNumber(e,a)})}))}filterNumber(e){return e?e.replace(/[^-\s().\d]/g,""):e}placeholderNumber(e,a){const d=(0,s.L)(e,n.Z);return d?d.formatInternational().substring(a.length+1).trim():"123 0123"}render(){return t().createElement(t().Fragment,null,t().createElement("span",{className:"dial-code",onClick:this.showCountrySelector},t().createElement("span",{className:"country-flag"},(0,h.Yu)(this.state.countryCode)," "),"+",this.state.dialCode," "),t().createElement("input",{type:"tel",ref:e=>{this.inputField=e},placeholder:this.state.placeholderNumber,value:this.state.localNumber,onChange:this.handleChange,maxLength:17,onKeyDown:this.handleKeyDown,onBlur:this.handleFinished,required:!0,autoFocus:this.props.autoFocus}))}}const p=(0,i.injectIntl)(u)},6670:e=>{e.exports=JSON.parse('[{"dial":"93","code":"AF"},{"dial":"355","code":"AL"},{"dial":"213","code":"DZ"},{"dial":"1-684","code":"AS"},{"dial":"376","code":"AD"},{"dial":"244","code":"AO"},{"dial":"1-264","code":"AI"},{"dial":"672","code":"AQ"},{"dial":"1-268","code":"AG"},{"dial":"54","code":"AR"},{"dial":"374","code":"AM"},{"dial":"297","code":"AW"},{"dial":"61","code":"AU"},{"dial":"43","code":"AT"},{"dial":"994","code":"AZ"},{"dial":"1-242","code":"BS"},{"dial":"973","code":"BH"},{"dial":"880","code":"BD"},{"dial":"1-246","code":"BB"},{"dial":"375","code":"BY"},{"dial":"32","code":"BE"},{"dial":"501","code":"BZ"},{"dial":"229","code":"BJ"},{"dial":"1-441","code":"BM"},{"dial":"975","code":"BT"},{"dial":"591","code":"BO"},{"dial":"387","code":"BA"},{"dial":"267","code":"BW"},{"dial":"55","code":"BR"},{"dial":"246","code":"IO"},{"dial":"1-284","code":"VG"},{"dial":"673","code":"BN"},{"dial":"359","code":"BG"},{"dial":"226","code":"BF"},{"dial":"257","code":"BI"},{"dial":"855","code":"KH"},{"dial":"237","code":"CM"},{"dial":"1","code":"CA"},{"dial":"238","code":"CV"},{"dial":"1-345","code":"KY"},{"dial":"236","code":"CF"},{"dial":"235","code":"TD"},{"dial":"56","code":"CL"},{"dial":"86","code":"CN"},{"dial":"61","code":"CX"},{"dial":"61","code":"CC"},{"dial":"57","code":"CO"},{"dial":"269","code":"KM"},{"dial":"682","code":"CK"},{"dial":"506","code":"CR"},{"dial":"385","code":"HR"},{"dial":"53","code":"CU"},{"dial":"599","code":"CW"},{"dial":"357","code":"CY"},{"dial":"420","code":"CZ"},{"dial":"243","code":"CD"},{"dial":"45","code":"DK"},{"dial":"253","code":"DJ"},{"dial":"1-767","code":"DM"},{"dial":"1-809, 1-829, 1-849","code":"DO"},{"dial":"670","code":"TL"},{"dial":"593","code":"EC"},{"dial":"20","code":"EG"},{"dial":"503","code":"SV"},{"dial":"240","code":"GQ"},{"dial":"291","code":"ER"},{"dial":"372","code":"EE"},{"dial":"251","code":"ET"},{"dial":"500","code":"FK"},{"dial":"298","code":"FO"},{"dial":"679","code":"FJ"},{"dial":"358","code":"FI"},{"dial":"33","code":"FR"},{"dial":"689","code":"PF"},{"dial":"241","code":"GA"},{"dial":"220","code":"GM"},{"dial":"995","code":"GE"},{"dial":"49","code":"DE"},{"dial":"233","code":"GH"},{"dial":"350","code":"GI"},{"dial":"30","code":"GR"},{"dial":"299","code":"GL"},{"dial":"1-473","code":"GD"},{"dial":"1-671","code":"GU"},{"dial":"502","code":"GT"},{"dial":"44-1481","code":"GG"},{"dial":"224","code":"GN"},{"dial":"245","code":"GW"},{"dial":"592","code":"GY"},{"dial":"509","code":"HT"},{"dial":"504","code":"HN"},{"dial":"852","code":"HK"},{"dial":"36","code":"HU"},{"dial":"354","code":"IS"},{"dial":"91","code":"IN"},{"dial":"62","code":"ID"},{"dial":"98","code":"IR"},{"dial":"964","code":"IQ"},{"dial":"353","code":"IE"},{"dial":"44-1624","code":"IM"},{"dial":"972","code":"IL"},{"dial":"39","code":"IT"},{"dial":"225","code":"CI"},{"dial":"1-876","code":"JM"},{"dial":"81","code":"JP"},{"dial":"44-1534","code":"JE"},{"dial":"962","code":"JO"},{"dial":"7, 997","code":"KZ"},{"dial":"254","code":"KE"},{"dial":"686","code":"KI"},{"dial":"383","code":"XK"},{"dial":"965","code":"KW"},{"dial":"996","code":"KG"},{"dial":"856","code":"LA"},{"dial":"371","code":"LV"},{"dial":"961","code":"LB"},{"dial":"266","code":"LS"},{"dial":"231","code":"LR"},{"dial":"218","code":"LY"},{"dial":"423","code":"LI"},{"dial":"370","code":"LT"},{"dial":"352","code":"LU"},{"dial":"853","code":"MO"},{"dial":"389","code":"MK"},{"dial":"261","code":"MG"},{"dial":"265","code":"MW"},{"dial":"60","code":"MY"},{"dial":"960","code":"MV"},{"dial":"223","code":"ML"},{"dial":"356","code":"MT"},{"dial":"692","code":"MH"},{"dial":"222","code":"MR"},{"dial":"230","code":"MU"},{"dial":"262","code":"YT"},{"dial":"52","code":"MX"},{"dial":"691","code":"FM"},{"dial":"373","code":"MD"},{"dial":"377","code":"MC"},{"dial":"976","code":"MN"},{"dial":"382","code":"ME"},{"dial":"1-664","code":"MS"},{"dial":"212","code":"MA"},{"dial":"258","code":"MZ"},{"dial":"95","code":"MM"},{"dial":"264","code":"NA"},{"dial":"674","code":"NR"},{"dial":"977","code":"NP"},{"dial":"31","code":"NL"},{"dial":"599","code":"CW"},{"dial":"687","code":"NC"},{"dial":"64","code":"NZ"},{"dial":"505","code":"NI"},{"dial":"227","code":"NE"},{"dial":"234","code":"NG"},{"dial":"683","code":"NU"},{"dial":"850","code":"KP"},{"dial":"1-670","code":"MP"},{"dial":"47","code":"NO"},{"dial":"968","code":"OM"},{"dial":"92","code":"PK"},{"dial":"680","code":"PW"},{"dial":"970","code":"PS"},{"dial":"507","code":"PA"},{"dial":"675","code":"PG"},{"dial":"595","code":"PY"},{"dial":"51","code":"PE"},{"dial":"63","code":"PH"},{"dial":"64","code":"PN"},{"dial":"48","code":"PL"},{"dial":"351","code":"PT"},{"dial":"1-787, 1-939","code":"PR"},{"dial":"974","code":"QA"},{"dial":"242","code":"CG"},{"dial":"262","code":"RE"},{"dial":"40","code":"RO"},{"dial":"7","code":"RU"},{"dial":"250","code":"RW"},{"dial":"590","code":"BL"},{"dial":"290","code":"SH"},{"dial":"1-869","code":"KN"},{"dial":"1-758","code":"LC"},{"dial":"590","code":"MF"},{"dial":"508","code":"PM"},{"dial":"1-784","code":"VC"},{"dial":"685","code":"WS"},{"dial":"378","code":"SM"},{"dial":"239","code":"ST"},{"dial":"966","code":"SA"},{"dial":"221","code":"SN"},{"dial":"381","code":"RS"},{"dial":"248","code":"SC"},{"dial":"232","code":"SL"},{"dial":"65","code":"SG"},{"dial":"1-721","code":"SX"},{"dial":"421","code":"SK"},{"dial":"386","code":"SI"},{"dial":"677","code":"SB"},{"dial":"252","code":"SO"},{"dial":"27","code":"ZA"},{"dial":"82","code":"KR"},{"dial":"211","code":"SS"},{"dial":"34","code":"ES"},{"dial":"94","code":"LK"},{"dial":"249","code":"SD"},{"dial":"597","code":"SR"},{"dial":"47","code":"SJ"},{"dial":"268","code":"SZ"},{"dial":"46","code":"SE"},{"dial":"41","code":"CH"},{"dial":"963","code":"SY"},{"dial":"886","code":"TW"},{"dial":"992","code":"TJ"},{"dial":"255","code":"TZ"},{"dial":"66","code":"TH"},{"dial":"228","code":"TG"},{"dial":"690","code":"TK"},{"dial":"676","code":"TO"},{"dial":"1-868","code":"TT"},{"dial":"216","code":"TN"},{"dial":"90","code":"TR"},{"dial":"993","code":"TM"},{"dial":"1-649","code":"TC"},{"dial":"688","code":"TV"},{"dial":"1-340","code":"VI"},{"dial":"256","code":"UG"},{"dial":"380","code":"UA"},{"dial":"971","code":"AE"},{"dial":"44","code":"GB"},{"dial":"1","code":"US"},{"dial":"598","code":"UY"},{"dial":"998","code":"UZ"},{"dial":"678","code":"VU"},{"dial":"379","code":"VA"},{"dial":"58","code":"VE"},{"dial":"84","code":"VN"},{"dial":"681","code":"WF"},{"dial":"212","code":"EH"},{"dial":"967","code":"YE"},{"dial":"260","code":"ZM"},{"dial":"263","code":"ZW"}]')}}]);
//# sourceMappingURL=327.prod.js.map
\ No newline at end of file
diff --git a/umd/327.prod.js.map b/umd/327.prod.js.map
index b7be7dba..20985553 100644
--- a/umd/327.prod.js.map
+++ b/umd/327.prod.js.map
@@ -1 +1 @@
-{"version":3,"file":"327.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/views/create-account-view.jsx","webpack://tinode-webapp/./src/widgets/phone-edit.jsx"],"sourcesContent":["// Account registration.\nimport React, { Suspense } from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport AvatarCrop from '../widgets/avatar-crop.jsx';\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport CheckBox from '../widgets/checkbox.jsx';\nimport PhoneEdit from '../widgets/phone-edit.jsx';\nimport VisiblePassword from '../widgets/visible-password.jsx';\n\nimport LocalStorageUtil from '../lib/local-storage.js';\nimport { imageScaled, blobToBase64, makeImageUrl } from '../lib/blob-helpers.js';\nimport { theCard } from '../lib/utils.js';\n\nimport { AVATAR_SIZE, MAX_AVATAR_BYTES, MAX_EXTERN_ATTACHMENT_SIZE,\n MAX_TITLE_LENGTH } from '../config.js';\n\nexport default class CreateAccountView extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n login: '',\n password: '',\n meth: '',\n email: '',\n tel: '',\n fn: '', // full/formatted name\n imageUrl: null,\n uploadUrl: null,\n newAvatar: null,\n newAvatarMime: null,\n buttonDisabled: false,\n saveToken: LocalStorageUtil.getObject('keep-logged-in')\n };\n\n this.handleLoginChange = this.handleLoginChange.bind(this);\n this.handlePasswordChange = this.handlePasswordChange.bind(this);\n this.handleEmailChange = this.handleEmailChange.bind(this);\n this.handlePhoneChange = this.handlePhoneChange.bind(this);\n this.handleFnChange = this.handleFnChange.bind(this);\n this.handleImageChanged = this.handleImageChanged.bind(this);\n this.handleToggleSaveToken = this.handleToggleSaveToken.bind(this);\n this.handleAvatarCropped = this.handleAvatarCropped.bind(this);\n this.handleAvatarCropCancel = this.handleAvatarCropCancel.bind(this);\n this.uploadAvatar = this.uploadAvatar.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n\n // Connection will trigger change by changing the this.props.serverVersion.\n props.tinode.connect()\n .catch(err => {\n this.props.onError(err.message, 'err');\n });\n }\n\n handleLoginChange(e) {\n this.setState({login: e.target.value});\n }\n\n handlePasswordChange(password) {\n this.setState({password: password});\n }\n\n handleEmailChange(e) {\n this.setState({meth: 'email', email: e.target.value});\n }\n\n handlePhoneChange(number) {\n this.setState({meth: 'tel', tel: number});\n }\n\n handleFnChange(e) {\n this.setState({fn: e.target.value});\n }\n\n handleImageChanged(mime, img) {\n this.setState({newAvatar: img, newAvatarMime: mime});\n }\n\n handleToggleSaveToken() {\n LocalStorageUtil.setObject('keep-logged-in', !this.state.saveToken);\n this.setState({saveToken: !this.state.saveToken});\n }\n\n handleSubmit(e) {\n e.preventDefault();\n this.props.onCreateAccount(\n this.state.login.trim(),\n this.state.password.trim(),\n theCard(this.state.fn.trim().substring(0, MAX_TITLE_LENGTH), this.state.uploadUrl),\n {\n 'meth': this.state.meth,\n 'val': this.state.meth == 'email' ?\n this.state.email :\n this.state.meth == 'tel' ? this.state.tel : null\n }\n );\n }\n\n // AvatarCropView calls this method when the user has cropped the image.\n handleAvatarCropped(mime, blob, width, height) {\n const url = blob ? URL.createObjectURL(blob) : null;\n this.setState({avatar: url, newAvatar: null, newAvatarMime: null});\n if (blob) {\n this.uploadAvatar(mime, blob, width, height);\n }\n }\n\n handleAvatarCropCancel() {\n this.setState({newAvatar: null, newAvatarMime: null});\n }\n\n // Utility method for converting cropped avatar blob to bytes for sending inband or\n // for uploading it to the server out of band.\n uploadAvatar(mime, blob, width, height) {\n const readyToUpload = image => {\n let {mime, blob} = image;\n this.setState({imageUrl: URL.createObjectURL(blob), buttonDisabled: true});\n if (blob.size > MAX_AVATAR_BYTES) {\n // Too large to send inband - uploading out of band and sending as a link.\n const uploader = this.props.tinode.getLargeFileHelper();\n uploader.upload(blob, 'newacc')\n .then(url => this.setState({uploadUrl: url}))\n .catch(err => this.props.onError(err.message, 'err'))\n .finally(_ => this.setState({buttonDisabled: false}));\n } else {\n // Convert blob to base64-encoded bits.\n blobToBase64(blob)\n .then(b64 => this.setState({uploadUrl: makeImageUrl({data: b64.bits, type: mime})}))\n .finally(_ => this.setState({buttonDisabled: false}));\n }\n };\n\n if (width > AVATAR_SIZE || height > AVATAR_SIZE || width != height) {\n // Avatar is not square or too large even after cropping. Shrink it and make square.\n imageScaled(blob, AVATAR_SIZE, AVATAR_SIZE, MAX_EXTERN_ATTACHMENT_SIZE, true)\n .then(scaled => readyToUpload(scaled))\n .catch(err => this.props.onError(err.message, 'err'));\n } else {\n readyToUpload({mime: mime, blob: blob, width: width, height: height});\n }\n }\n\n render() {\n if (this.state.newAvatar) {\n return (\n \n );\n }\n\n let submitClasses = 'primary';\n if (this.props.disabled) {\n submitClasses += ' disabled';\n }\n\n return (\n \n );\n }\n};\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n >\n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["CreateAccountView","React","constructor","props","super","this","state","login","password","meth","email","tel","fn","imageUrl","uploadUrl","newAvatar","newAvatarMime","buttonDisabled","saveToken","LocalStorageUtil","handleLoginChange","bind","handlePasswordChange","handleEmailChange","handlePhoneChange","handleFnChange","handleImageChanged","handleToggleSaveToken","handleAvatarCropped","handleAvatarCropCancel","uploadAvatar","handleSubmit","tinode","connect","catch","err","onError","message","e","setState","target","value","number","mime","img","preventDefault","onCreateAccount","trim","theCard","substring","MAX_TITLE_LENGTH","blob","width","height","url","URL","createObjectURL","avatar","readyToUpload","image","size","MAX_AVATAR_BYTES","getLargeFileHelper","upload","then","finally","_","blobToBase64","b64","makeImageUrl","data","bits","type","AVATAR_SIZE","imageScaled","MAX_EXTERN_ATTACHMENT_SIZE","scaled","render","AvatarCrop","onSubmit","onCancel","submitClasses","disabled","className","FormattedMessage","id","defaultMessage","login_prompt","placeholder","autoComplete","onChange","required","autoFocus","password_prompt","VisiblePassword","onFinished","AvatarUpload","onImageUpdated","full_name_prompt","reqCredMethod","email_prompt","PhoneEdit","onShowCountrySelector","CheckBox","name","checked","stay_logged_in","htmlFor","messages","defineMessages","mobile_number_required","codeMap","dcodes","dc","code","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","AsYouType","input","filterNumber","length","raw","replace","parsePhoneNumber","isValid","inputField","setCustomValidity","format","intl","formatMessage","key","sample","getExampleNumber","examples","formatInternational","onClick","flagEmoji","ref","maxLength","onKeyDown","onBlur","injectIntl"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"327.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/views/create-account-view.jsx","webpack://tinode-webapp/./src/widgets/phone-edit.jsx"],"sourcesContent":["// Account registration.\nimport React, { Suspense } from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport AvatarCrop from '../widgets/avatar-crop.jsx';\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport CheckBox from '../widgets/checkbox.jsx';\nimport PhoneEdit from '../widgets/phone-edit.jsx';\nimport VisiblePassword from '../widgets/visible-password.jsx';\n\nimport LocalStorageUtil from '../lib/local-storage.js';\nimport { imageScaled, blobToBase64, makeImageUrl } from '../lib/blob-helpers.js';\nimport { theCard } from '../lib/utils.js';\n\nimport { AVATAR_SIZE, MAX_AVATAR_BYTES, MAX_EXTERN_ATTACHMENT_SIZE,\n MAX_TITLE_LENGTH } from '../config.js';\n\nexport default class CreateAccountView extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n login: '',\n password: '',\n meth: '',\n email: '',\n tel: '',\n fn: '', // full/formatted name\n imageUrl: null,\n uploadUrl: null,\n newAvatar: null,\n newAvatarMime: null,\n buttonDisabled: false,\n saveToken: LocalStorageUtil.getObject('keep-logged-in')\n };\n\n this.handleLoginChange = this.handleLoginChange.bind(this);\n this.handlePasswordChange = this.handlePasswordChange.bind(this);\n this.handleEmailChange = this.handleEmailChange.bind(this);\n this.handlePhoneChange = this.handlePhoneChange.bind(this);\n this.handleFnChange = this.handleFnChange.bind(this);\n this.handleImageChanged = this.handleImageChanged.bind(this);\n this.handleToggleSaveToken = this.handleToggleSaveToken.bind(this);\n this.handleAvatarCropped = this.handleAvatarCropped.bind(this);\n this.handleAvatarCropCancel = this.handleAvatarCropCancel.bind(this);\n this.uploadAvatar = this.uploadAvatar.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n\n // Connection will trigger change by changing the this.props.serverVersion.\n props.tinode.connect()\n .catch(err => {\n this.props.onError(err.message, 'err');\n });\n }\n\n handleLoginChange(e) {\n this.setState({login: e.target.value});\n }\n\n handlePasswordChange(password) {\n this.setState({password: password});\n }\n\n handleEmailChange(e) {\n this.setState({meth: 'email', email: e.target.value});\n }\n\n handlePhoneChange(number) {\n this.setState({meth: 'tel', tel: number});\n }\n\n handleFnChange(e) {\n this.setState({fn: e.target.value});\n }\n\n handleImageChanged(mime, img) {\n this.setState({newAvatar: img, newAvatarMime: mime});\n }\n\n handleToggleSaveToken() {\n LocalStorageUtil.setObject('keep-logged-in', !this.state.saveToken);\n this.setState({saveToken: !this.state.saveToken});\n }\n\n handleSubmit(e) {\n e.preventDefault();\n this.props.onCreateAccount(\n this.state.login.trim(),\n this.state.password.trim(),\n theCard(this.state.fn.trim().substring(0, MAX_TITLE_LENGTH), this.state.uploadUrl),\n {\n 'meth': this.state.meth,\n 'val': this.state.meth == 'email' ?\n this.state.email :\n this.state.meth == 'tel' ? this.state.tel : null\n }\n );\n }\n\n // AvatarCropView calls this method when the user has cropped the image.\n handleAvatarCropped(mime, blob, width, height) {\n const url = blob ? URL.createObjectURL(blob) : null;\n this.setState({avatar: url, newAvatar: null, newAvatarMime: null});\n if (blob) {\n this.uploadAvatar(mime, blob, width, height);\n }\n }\n\n handleAvatarCropCancel() {\n this.setState({newAvatar: null, newAvatarMime: null});\n }\n\n // Utility method for converting cropped avatar blob to bytes for sending inband or\n // for uploading it to the server out of band.\n uploadAvatar(mime, blob, width, height) {\n const readyToUpload = image => {\n let {mime, blob} = image;\n this.setState({imageUrl: URL.createObjectURL(blob), buttonDisabled: true});\n if (blob.size > MAX_AVATAR_BYTES) {\n // Too large to send inband - uploading out of band and sending as a link.\n const uploader = this.props.tinode.getLargeFileHelper();\n uploader.upload(blob, 'newacc')\n .then(url => this.setState({uploadUrl: url}))\n .catch(err => this.props.onError(err.message, 'err'))\n .finally(_ => this.setState({buttonDisabled: false}));\n } else {\n // Convert blob to base64-encoded bits.\n blobToBase64(blob)\n .then(b64 => this.setState({uploadUrl: makeImageUrl({data: b64.bits, type: mime})}))\n .finally(_ => this.setState({buttonDisabled: false}));\n }\n };\n\n if (width > AVATAR_SIZE || height > AVATAR_SIZE || width != height) {\n // Avatar is not square or too large even after cropping. Shrink it and make square.\n imageScaled(blob, AVATAR_SIZE, AVATAR_SIZE, MAX_EXTERN_ATTACHMENT_SIZE, true)\n .then(scaled => readyToUpload(scaled))\n .catch(err => this.props.onError(err.message, 'err'));\n } else {\n readyToUpload({mime: mime, blob: blob, width: width, height: height});\n }\n }\n\n render() {\n if (this.state.newAvatar) {\n return (\n \n );\n }\n\n let submitClasses = 'primary';\n if (this.props.disabled) {\n submitClasses += ' disabled';\n }\n\n return (\n \n );\n }\n};\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n >\n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["CreateAccountView","React","constructor","props","super","this","state","login","password","meth","email","tel","fn","imageUrl","uploadUrl","newAvatar","newAvatarMime","buttonDisabled","saveToken","LocalStorageUtil","getObject","handleLoginChange","bind","handlePasswordChange","handleEmailChange","handlePhoneChange","handleFnChange","handleImageChanged","handleToggleSaveToken","handleAvatarCropped","handleAvatarCropCancel","uploadAvatar","handleSubmit","tinode","connect","catch","err","onError","message","e","setState","target","value","number","mime","img","setObject","preventDefault","onCreateAccount","trim","theCard","substring","MAX_TITLE_LENGTH","blob","width","height","url","URL","createObjectURL","avatar","readyToUpload","image","size","MAX_AVATAR_BYTES","getLargeFileHelper","upload","then","finally","_","blobToBase64","b64","makeImageUrl","data","bits","type","AVATAR_SIZE","imageScaled","MAX_EXTERN_ATTACHMENT_SIZE","scaled","render","AvatarCrop","onSubmit","onCancel","submitClasses","disabled","className","FormattedMessage","id","defaultMessage","login_prompt","placeholder","autoComplete","onChange","required","autoFocus","password_prompt","VisiblePassword","onFinished","AvatarUpload","onImageUpdated","full_name_prompt","reqCredMethod","email_prompt","PhoneEdit","onShowCountrySelector","CheckBox","name","checked","stay_logged_in","htmlFor","messages","defineMessages","mobile_number_required","codeMap","dcodes","forEach","dc","code","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","AsYouType","input","filterNumber","length","raw","replace","parsePhoneNumber","isValid","inputField","setCustomValidity","format","intl","formatMessage","key","sample","getExampleNumber","examples","formatInternational","onClick","flagEmoji","ref","maxLength","onKeyDown","onBlur","injectIntl"],"sourceRoot":""}
\ No newline at end of file
diff --git a/umd/365.prod.js b/umd/365.prod.js
index dc060f8b..95ea5916 100644
--- a/umd/365.prod.js
+++ b/umd/365.prod.js
@@ -1,2 +1,2 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[365],{1365:(e,a,t)=>{t.r(a),t.d(a,{default:()=>g});var d=t(7363),l=t.n(d),i=t(916),o=t(2610),c=t(7432),s=t(955),n=t(8405),r=t(8962),m=t(2078);const h=(0,i.defineMessages)({password_reset_email_sent:{id:"password_reset_email_sent",defaultMessage:[{type:0,value:"An email with security code has been sent."}]},password_reset_sms_sent:{id:"password_reset_sms_sent",defaultMessage:[{type:0,value:"A text message with security code has been sent."}]}});class u extends l().PureComponent{constructor(e){super(e),this.state={code:"",tel:"",email:"",sent:!1},this.handleSubmit=this.handleSubmit.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handlePhoneChange=this.handlePhoneChange.bind(this),this.handleCodeChange=this.handleCodeChange.bind(this)}static formatPhoneNumber(e){let a;try{a=(0,o.h)(e)}catch(e){}return a?a.formatInternational():e}handleEmailChange(e){this.setState({email:e.target.value})}handlePhoneChange(e){this.setState({tel:e})}handleCodeChange(e){this.setState({code:e.target.value.replace(/[^\d]/g,"")})}handleSubmit(e){e.preventDefault();const a="email"==this.props.method?this.state.email:this.state.tel;if(a){this.props.onSubmit(this.props.method,a),this.setState({sent:!0});const e="email"==this.props.method?h.password_reset_email_sent:h.password_reset_sms_sent;this.props.onError(this.props.intl.formatMessage(e),"info")}}render(){const e=this.state.sent||!this.props.done,a=u.formatPhoneNumber(e?this.state.tel||this.state.email:this.props.val),t=l().createElement(l().Fragment,null,l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"large"},l().createElement(i.FormattedMessage,{id:"change_email",defaultMessage:[{type:0,value:"Change email"}]}))),l().createElement("div",{className:"group"},l().createElement("label",{className:"small gray"},l().createElement(i.FormattedMessage,{id:"current_email",defaultMessage:[{type:0,value:"Current email"}]})))),d=l().createElement(l().Fragment,null,l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"large"},l().createElement(i.FormattedMessage,{id:"change_phone",defaultMessage:[{type:0,value:"Change phone number"}]}))),l().createElement("div",{className:"group"},l().createElement("label",{className:"small gray"},l().createElement(i.FormattedMessage,{id:"current_phone",defaultMessage:[{type:0,value:"Current phone number"}]})))),o=l().createElement("label",{className:"small gray"},l().createElement(i.FormattedMessage,{id:"new_email",defaultMessage:[{type:0,value:"New email"}]})),c=l().createElement(l().Fragment,null,l().createElement("div",{className:"group"},o),l().createElement("div",{className:"group"},l().createElement(i.FormattedMessage,{id:"email_prompt",defaultMessage:[{type:0,value:"Email, e.g. jdoe@example.com"}]},(e=>l().createElement("input",{type:"email",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0}))))),s=l().createElement("label",{className:"small gray"},l().createElement(i.FormattedMessage,{id:"new_phone_number",defaultMessage:[{type:0,value:"New phone number"}]})),n=l().createElement(l().Fragment,null,l().createElement("div",{className:"group"},s),l().createElement("div",{className:"panel-form-row"},l().createElement(m.Z,{autoFocus:!0,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:this.handlePhoneChange}))),r=l().createElement(l().Fragment,null,l().createElement("div",{className:"group"},l().createElement("label",{className:"small gray"},l().createElement(i.FormattedMessage,{id:"enter_confirmation_code_prompt",defaultMessage:[{type:0,value:"Confirmation code"}]}))),l().createElement("div",{className:"group"},l().createElement(i.FormattedMessage,{id:"numeric_confirmation_code_prompt",defaultMessage:[{type:0,value:"Numbers only"}]},(e=>l().createElement("input",{type:"text",placeholder:e,maxLength:10,value:this.state.code,onChange:this.handleCodeChange,required:!0})))));return l().createElement("form",{className:"panel-form-column",onSubmit:this.handleSubmit},e?null:"email"==this.props.method?t:"tel"==this.props.method?d:null,l().createElement("div",{className:"panel-form-row"},l().createElement("tt",{className:"quoted"},a)),e?null:"email"==this.props.method?c:"tel"==this.props.method?n:null,e?r:null,l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{className:"secondary",onClick:this.props.onCancel},l().createElement(i.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]})),l().createElement("button",{className:"primary",type:"submit"},l().createElement(i.FormattedMessage,{id:"button_ok",defaultMessage:[{type:0,value:"OK"}]}))))}}const p=(0,i.injectIntl)(u);function E(e,a){return e&&e.substring(0,a)}class g extends l().Component{constructor(e){super(e);const a=this.props.tinode.getMeTopic();this.state={fullName:E(a.public?a.public.fn:void 0,r.S8),description:E(a.public?a.public.note:void 0,r.EI),avatar:(0,n.PD)(a.public?a.public.photo:null),credentials:a.getCredentials()||[],credEdit:void 0}}componentDidMount(){const e=this.props.tinode.getMeTopic();e.onCredsUpdated=a=>this.setState({credentials:e.getCredentials()})}componentWillUnmount(){this.props.tinode.getMeTopic().onCredsUpdated=null}render(){if(this.state.credEdit)return l().createElement(p,{method:this.state.credEdit.meth,val:this.state.credEdit.val,done:this.state.credEdit.done,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:this.props.onCredAdd,onCancel:e=>this.setState({credEdit:void 0}),onError:this.props.onError});const e=[];return this.state.credentials.forEach(((a,t)=>{if(!["email","tel"].includes(a.meth))return;let d=a.val;if("tel"==a.meth){const e=(0,o.h)(a.val);d=e?e.formatInternational():a.val}e.push(l().createElement("div",{className:"group quoted",key:t},l().createElement("tt",{className:"clickable",onClick:e=>{e.preventDefault(),this.setState({credEdit:a})}},d),l().createElement("span",null," ",a.done?null:l().createElement(l().Fragment,null,l().createElement("i",{className:"material-icons"},"pending")," ",l().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCredDelete(a.meth,a.val)}},l().createElement("i",{className:"material-icons"},"delete"))))))})),e.length>0&&e.unshift(l().createElement("label",{className:"small",key:"title"},l().createElement(i.FormattedMessage,{id:"label_user_contacts",defaultMessage:[{type:0,value:"Contacts"}]}))),l().createElement("div",{className:"scrollable-panel"},l().createElement("div",{className:"panel-form-column"},l().createElement("a",{href:"#",className:"flat-button float-right",onClick:e=>{e.preventDefault(),this.props.onNavigate("general")}},l().createElement("i",{className:"material-icons"},"edit")," ",l().createElement(i.FormattedMessage,{id:"button_edit",defaultMessage:[{type:0,value:"Edit"}]})),l().createElement("center",null,l().createElement(c.Z,{tinode:this.props.tinode,avatar:this.state.avatar,readOnly:!0,uid:this.props.myUserId,title:this.state.fullName})),l().createElement("div",{className:"group"},l().createElement("label",{className:"small"},l().createElement(i.FormattedMessage,{id:"label_your_name",defaultMessage:[{type:0,value:"Your name"}]})),l().createElement("div",{className:"large ellipsized"},this.state.fullName)),l().createElement("div",{className:"group"},l().createElement("label",{className:"small"},l().createElement(i.FormattedMessage,{id:"label_user_id",defaultMessage:[{type:0,value:"ID:"}]}))," ",l().createElement("tt",null,this.props.myUserId)),l().createElement("div",{className:"group"},l().createElement(s.Z,{trustedBadges:this.props.trustedBadges})),this.state.description?l().createElement("div",{className:"group"},l().createElement("label",{className:"small"},l().createElement(i.FormattedMessage,{id:"label_description",defaultMessage:[{type:0,value:"Description"}]})),l().createElement("div",{className:"quoted"},this.state.description)):null),l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-column"},l().createElement("div",{className:"group"},e)),l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-column"},l().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onNavigate("notif")}},l().createElement("i",{className:"material-icons"},"notifications")," ",l().createElement(i.FormattedMessage,{id:"sidepanel_title_acc_notifications",defaultMessage:[{type:0,value:"Notifications"}]})),l().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onNavigate("security")}},l().createElement("i",{className:"material-icons"},"security")," ",l().createElement(i.FormattedMessage,{id:"button_security",defaultMessage:[{type:0,value:"Security"}]})),l().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onNavigate("support")}},l().createElement("i",{className:"material-icons"},"contact_support")," ",l().createElement(i.FormattedMessage,{id:"sidepanel_title_acc_support",defaultMessage:[{type:0,value:"Support"}]}))))}}},2078:(e,a,t)=>{t.d(a,{Z:()=>p});var d=t(7363),l=t.n(d),i=t(916),o=t(306),c=t(2610),s=t(2689),n=t(6359),r=t(6670),m=t(3905);const h=(0,i.defineMessages)({mobile_number_required:{id:"mobile_number_required",defaultMessage:[{type:0,value:"Mobile phone number required"}]}});class u extends l().PureComponent{constructor(e){super(e),this.codeMap={},r.forEach((e=>{this.codeMap[e.code]=e.dial}));const a=e.countryCode||"US",t=this.codeMap[a];this.state={countryCode:a,dialCode:t,localNumber:"",placeholderNumber:this.placeholderNumber(a,t)},this.handleChange=this.handleChange.bind(this),this.handleFinished=this.handleFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.showCountrySelector=this.showCountrySelector.bind(this)}handleChange(e){const a=`+${this.state.dialCode}`;let t=(new o.R).input(`${a}${this.filterNumber(e.target.value)}`);t=t.substring(a.length).trim(),this.setState({localNumber:t})}handleFinished(e){e.preventDefault();const a=`${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\d]/g,"");let t=null;try{t=(0,c.h)(`+${a}`)}catch(e){}t&&t.isValid()?(this.inputField.setCustomValidity(""),this.props.onSubmit(t.format("E.164"))):this.inputField.setCustomValidity(this.props.intl.formatMessage(h.mobile_number_required))}handleKeyDown(e){"Enter"===e.key&&this.handleFinished(e)}showCountrySelector(){this.props.onShowCountrySelector(this.state.countryCode,this.state.dialCode,((e,a)=>{this.setState({countryCode:e,dialCode:a,placeholderNumber:this.placeholderNumber(e,a)})}))}filterNumber(e){return e?e.replace(/[^-\s().\d]/g,""):e}placeholderNumber(e,a){const t=(0,s.L)(e,n.Z);return t?t.formatInternational().substring(a.length+1).trim():"123 0123"}render(){return l().createElement(l().Fragment,null,l().createElement("span",{className:"dial-code",onClick:this.showCountrySelector},l().createElement("span",{className:"country-flag"},(0,m.Yu)(this.state.countryCode)," "),"+",this.state.dialCode," "),l().createElement("input",{type:"tel",ref:e=>{this.inputField=e},placeholder:this.state.placeholderNumber,value:this.state.localNumber,onChange:this.handleChange,maxLength:17,onKeyDown:this.handleKeyDown,onBlur:this.handleFinished,required:!0,autoFocus:this.props.autoFocus}))}}const p=(0,i.injectIntl)(u)},6670:e=>{e.exports=JSON.parse('[{"dial":"93","code":"AF"},{"dial":"355","code":"AL"},{"dial":"213","code":"DZ"},{"dial":"1-684","code":"AS"},{"dial":"376","code":"AD"},{"dial":"244","code":"AO"},{"dial":"1-264","code":"AI"},{"dial":"672","code":"AQ"},{"dial":"1-268","code":"AG"},{"dial":"54","code":"AR"},{"dial":"374","code":"AM"},{"dial":"297","code":"AW"},{"dial":"61","code":"AU"},{"dial":"43","code":"AT"},{"dial":"994","code":"AZ"},{"dial":"1-242","code":"BS"},{"dial":"973","code":"BH"},{"dial":"880","code":"BD"},{"dial":"1-246","code":"BB"},{"dial":"375","code":"BY"},{"dial":"32","code":"BE"},{"dial":"501","code":"BZ"},{"dial":"229","code":"BJ"},{"dial":"1-441","code":"BM"},{"dial":"975","code":"BT"},{"dial":"591","code":"BO"},{"dial":"387","code":"BA"},{"dial":"267","code":"BW"},{"dial":"55","code":"BR"},{"dial":"246","code":"IO"},{"dial":"1-284","code":"VG"},{"dial":"673","code":"BN"},{"dial":"359","code":"BG"},{"dial":"226","code":"BF"},{"dial":"257","code":"BI"},{"dial":"855","code":"KH"},{"dial":"237","code":"CM"},{"dial":"1","code":"CA"},{"dial":"238","code":"CV"},{"dial":"1-345","code":"KY"},{"dial":"236","code":"CF"},{"dial":"235","code":"TD"},{"dial":"56","code":"CL"},{"dial":"86","code":"CN"},{"dial":"61","code":"CX"},{"dial":"61","code":"CC"},{"dial":"57","code":"CO"},{"dial":"269","code":"KM"},{"dial":"682","code":"CK"},{"dial":"506","code":"CR"},{"dial":"385","code":"HR"},{"dial":"53","code":"CU"},{"dial":"599","code":"CW"},{"dial":"357","code":"CY"},{"dial":"420","code":"CZ"},{"dial":"243","code":"CD"},{"dial":"45","code":"DK"},{"dial":"253","code":"DJ"},{"dial":"1-767","code":"DM"},{"dial":"1-809, 1-829, 1-849","code":"DO"},{"dial":"670","code":"TL"},{"dial":"593","code":"EC"},{"dial":"20","code":"EG"},{"dial":"503","code":"SV"},{"dial":"240","code":"GQ"},{"dial":"291","code":"ER"},{"dial":"372","code":"EE"},{"dial":"251","code":"ET"},{"dial":"500","code":"FK"},{"dial":"298","code":"FO"},{"dial":"679","code":"FJ"},{"dial":"358","code":"FI"},{"dial":"33","code":"FR"},{"dial":"689","code":"PF"},{"dial":"241","code":"GA"},{"dial":"220","code":"GM"},{"dial":"995","code":"GE"},{"dial":"49","code":"DE"},{"dial":"233","code":"GH"},{"dial":"350","code":"GI"},{"dial":"30","code":"GR"},{"dial":"299","code":"GL"},{"dial":"1-473","code":"GD"},{"dial":"1-671","code":"GU"},{"dial":"502","code":"GT"},{"dial":"44-1481","code":"GG"},{"dial":"224","code":"GN"},{"dial":"245","code":"GW"},{"dial":"592","code":"GY"},{"dial":"509","code":"HT"},{"dial":"504","code":"HN"},{"dial":"852","code":"HK"},{"dial":"36","code":"HU"},{"dial":"354","code":"IS"},{"dial":"91","code":"IN"},{"dial":"62","code":"ID"},{"dial":"98","code":"IR"},{"dial":"964","code":"IQ"},{"dial":"353","code":"IE"},{"dial":"44-1624","code":"IM"},{"dial":"972","code":"IL"},{"dial":"39","code":"IT"},{"dial":"225","code":"CI"},{"dial":"1-876","code":"JM"},{"dial":"81","code":"JP"},{"dial":"44-1534","code":"JE"},{"dial":"962","code":"JO"},{"dial":"7, 997","code":"KZ"},{"dial":"254","code":"KE"},{"dial":"686","code":"KI"},{"dial":"383","code":"XK"},{"dial":"965","code":"KW"},{"dial":"996","code":"KG"},{"dial":"856","code":"LA"},{"dial":"371","code":"LV"},{"dial":"961","code":"LB"},{"dial":"266","code":"LS"},{"dial":"231","code":"LR"},{"dial":"218","code":"LY"},{"dial":"423","code":"LI"},{"dial":"370","code":"LT"},{"dial":"352","code":"LU"},{"dial":"853","code":"MO"},{"dial":"389","code":"MK"},{"dial":"261","code":"MG"},{"dial":"265","code":"MW"},{"dial":"60","code":"MY"},{"dial":"960","code":"MV"},{"dial":"223","code":"ML"},{"dial":"356","code":"MT"},{"dial":"692","code":"MH"},{"dial":"222","code":"MR"},{"dial":"230","code":"MU"},{"dial":"262","code":"YT"},{"dial":"52","code":"MX"},{"dial":"691","code":"FM"},{"dial":"373","code":"MD"},{"dial":"377","code":"MC"},{"dial":"976","code":"MN"},{"dial":"382","code":"ME"},{"dial":"1-664","code":"MS"},{"dial":"212","code":"MA"},{"dial":"258","code":"MZ"},{"dial":"95","code":"MM"},{"dial":"264","code":"NA"},{"dial":"674","code":"NR"},{"dial":"977","code":"NP"},{"dial":"31","code":"NL"},{"dial":"599","code":"CW"},{"dial":"687","code":"NC"},{"dial":"64","code":"NZ"},{"dial":"505","code":"NI"},{"dial":"227","code":"NE"},{"dial":"234","code":"NG"},{"dial":"683","code":"NU"},{"dial":"850","code":"KP"},{"dial":"1-670","code":"MP"},{"dial":"47","code":"NO"},{"dial":"968","code":"OM"},{"dial":"92","code":"PK"},{"dial":"680","code":"PW"},{"dial":"970","code":"PS"},{"dial":"507","code":"PA"},{"dial":"675","code":"PG"},{"dial":"595","code":"PY"},{"dial":"51","code":"PE"},{"dial":"63","code":"PH"},{"dial":"64","code":"PN"},{"dial":"48","code":"PL"},{"dial":"351","code":"PT"},{"dial":"1-787, 1-939","code":"PR"},{"dial":"974","code":"QA"},{"dial":"242","code":"CG"},{"dial":"262","code":"RE"},{"dial":"40","code":"RO"},{"dial":"7","code":"RU"},{"dial":"250","code":"RW"},{"dial":"590","code":"BL"},{"dial":"290","code":"SH"},{"dial":"1-869","code":"KN"},{"dial":"1-758","code":"LC"},{"dial":"590","code":"MF"},{"dial":"508","code":"PM"},{"dial":"1-784","code":"VC"},{"dial":"685","code":"WS"},{"dial":"378","code":"SM"},{"dial":"239","code":"ST"},{"dial":"966","code":"SA"},{"dial":"221","code":"SN"},{"dial":"381","code":"RS"},{"dial":"248","code":"SC"},{"dial":"232","code":"SL"},{"dial":"65","code":"SG"},{"dial":"1-721","code":"SX"},{"dial":"421","code":"SK"},{"dial":"386","code":"SI"},{"dial":"677","code":"SB"},{"dial":"252","code":"SO"},{"dial":"27","code":"ZA"},{"dial":"82","code":"KR"},{"dial":"211","code":"SS"},{"dial":"34","code":"ES"},{"dial":"94","code":"LK"},{"dial":"249","code":"SD"},{"dial":"597","code":"SR"},{"dial":"47","code":"SJ"},{"dial":"268","code":"SZ"},{"dial":"46","code":"SE"},{"dial":"41","code":"CH"},{"dial":"963","code":"SY"},{"dial":"886","code":"TW"},{"dial":"992","code":"TJ"},{"dial":"255","code":"TZ"},{"dial":"66","code":"TH"},{"dial":"228","code":"TG"},{"dial":"690","code":"TK"},{"dial":"676","code":"TO"},{"dial":"1-868","code":"TT"},{"dial":"216","code":"TN"},{"dial":"90","code":"TR"},{"dial":"993","code":"TM"},{"dial":"1-649","code":"TC"},{"dial":"688","code":"TV"},{"dial":"1-340","code":"VI"},{"dial":"256","code":"UG"},{"dial":"380","code":"UA"},{"dial":"971","code":"AE"},{"dial":"44","code":"GB"},{"dial":"1","code":"US"},{"dial":"598","code":"UY"},{"dial":"998","code":"UZ"},{"dial":"678","code":"VU"},{"dial":"379","code":"VA"},{"dial":"58","code":"VE"},{"dial":"84","code":"VN"},{"dial":"681","code":"WF"},{"dial":"212","code":"EH"},{"dial":"967","code":"YE"},{"dial":"260","code":"ZM"},{"dial":"263","code":"ZW"}]')}}]);
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[365],{1365:(e,a,t)=>{t.r(a),t.d(a,{default:()=>g});var d=t(7363),l=t.n(d),i=t(916),o=t(6198),s=t(7432),c=t(955),n=t(8405),r=t(8962),m=t(2078);const h=(0,i.defineMessages)({password_reset_email_sent:{id:"password_reset_email_sent",defaultMessage:[{type:0,value:"An email with security code has been sent."}]},password_reset_sms_sent:{id:"password_reset_sms_sent",defaultMessage:[{type:0,value:"A text message with security code has been sent."}]}});class u extends l().PureComponent{constructor(e){super(e),this.state={code:"",tel:"",email:"",sent:!1},this.handleSubmit=this.handleSubmit.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handlePhoneChange=this.handlePhoneChange.bind(this),this.handleCodeChange=this.handleCodeChange.bind(this)}static formatPhoneNumber(e){let a;try{a=(0,o.h)(e)}catch(e){}return a?a.formatInternational():e}handleEmailChange(e){this.setState({email:e.target.value})}handlePhoneChange(e){this.setState({tel:e})}handleCodeChange(e){this.setState({code:e.target.value.replace(/[^\d]/g,"")})}handleSubmit(e){e.preventDefault();const a="email"==this.props.method?this.state.email:this.state.tel;if(this.state.code)this.props.onError(null),this.props.onCredConfirm(this.props.method,this.state.code);else if(a){this.props.onCredAdd(this.props.method,a),this.setState({sent:!0});const e="email"==this.props.method?h.password_reset_email_sent:h.password_reset_sms_sent;this.props.onError(this.props.intl.formatMessage(e),"info")}}render(){const e=this.state.sent||!this.props.done,a=e?this.state.tel||this.state.email:this.props.val,t="tel"==this.props.method?u.formatPhoneNumber(a):a,d=l().createElement(l().Fragment,null,l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"large"},l().createElement(i.FormattedMessage,{id:"change_email",defaultMessage:[{type:0,value:"Change email"}]}))),l().createElement("div",{className:"group"},l().createElement("label",{className:"small gray"},l().createElement(i.FormattedMessage,{id:"current_email",defaultMessage:[{type:0,value:"Current email"}]})))),o=l().createElement(l().Fragment,null,l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"large"},l().createElement(i.FormattedMessage,{id:"change_phone",defaultMessage:[{type:0,value:"Change phone number"}]}))),l().createElement("div",{className:"group"},l().createElement("label",{className:"small gray"},l().createElement(i.FormattedMessage,{id:"current_phone",defaultMessage:[{type:0,value:"Current phone number"}]})))),s=l().createElement("label",{className:"small gray"},l().createElement(i.FormattedMessage,{id:"new_email",defaultMessage:[{type:0,value:"New email"}]})),c=l().createElement(l().Fragment,null,l().createElement("div",{className:"group"},s),l().createElement("div",{className:"group"},l().createElement(i.FormattedMessage,{id:"email_prompt",defaultMessage:[{type:0,value:"Email, e.g. jdoe@example.com"}]},(e=>l().createElement("input",{type:"email",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0}))))),n=l().createElement("label",{className:"small gray"},l().createElement(i.FormattedMessage,{id:"new_phone_number",defaultMessage:[{type:0,value:"New phone number"}]})),r=l().createElement(l().Fragment,null,l().createElement("div",{className:"group"},n),l().createElement("div",{className:"panel-form-row"},l().createElement(m.Z,{autoFocus:!0,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:this.handlePhoneChange}))),h=l().createElement(l().Fragment,null,l().createElement("div",{className:"group"},l().createElement("label",{className:"small gray"},l().createElement(i.FormattedMessage,{id:"enter_confirmation_code_prompt",defaultMessage:[{type:0,value:"Confirmation code"}]}))),l().createElement("div",{className:"group"},l().createElement(i.FormattedMessage,{id:"numeric_confirmation_code_prompt",defaultMessage:[{type:0,value:"Numbers only"}]},(e=>l().createElement("input",{type:"text",placeholder:e,maxLength:10,value:this.state.code,onChange:this.handleCodeChange,required:!0})))));return l().createElement("form",{className:"panel-form-column",onSubmit:this.handleSubmit},e?"email"==this.props.method?s:"tel"==this.props.method?n:null:"email"==this.props.method?d:"tel"==this.props.method?o:null,l().createElement("div",{className:"panel-form-row"},l().createElement("tt",{className:"quoted"},t)),e?null:"email"==this.props.method?c:"tel"==this.props.method?r:null,e?h:null,l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{className:"secondary",onClick:this.props.onCancel},l().createElement(i.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]})),l().createElement("button",{className:"primary",type:"submit"},l().createElement(i.FormattedMessage,{id:"button_ok",defaultMessage:[{type:0,value:"OK"}]}))))}}const p=(0,i.injectIntl)(u);function E(e,a){return e&&e.substring(0,a)}class g extends l().Component{constructor(e){super(e);const a=this.props.tinode.getMeTopic();this.state={fullName:E(a.public?a.public.fn:void 0,r.S8),description:E(a.public?a.public.note:void 0,r.EI),avatar:(0,n.PD)(a.public?a.public.photo:null),credentials:a.getCredentials()||[],credEdit:void 0}}componentDidMount(){const e=this.props.tinode.getMeTopic();e.onCredsUpdated=a=>this.setState({credentials:e.getCredentials()})}componentWillUnmount(){this.props.tinode.getMeTopic().onCredsUpdated=null}render(){if(this.state.credEdit)return l().createElement(p,{method:this.state.credEdit.meth,val:this.state.credEdit.val,done:this.state.credEdit.done,onShowCountrySelector:this.props.onShowCountrySelector,onCredAdd:this.props.onCredAdd,onCredConfirm:this.props.onCredConfirm,onCancel:e=>this.setState({credEdit:void 0}),onError:this.props.onError});const e={};this.state.credentials.forEach((a=>{a.done&&(e[a.meth]=(e[a.meth]||0)+1)}));const a=[];return this.state.credentials.forEach(((t,d)=>{if(!["email","tel"].includes(t.meth))return;let i=t.val;if("tel"==t.meth){const e=(0,o.h)(t.val);i=e?e.formatInternational():t.val}a.push(l().createElement("div",{className:"group quoted",key:d},l().createElement("tt",{className:"clickable",onClick:e=>{e.preventDefault(),this.setState({credEdit:t})}},i),l().createElement("span",null," ",t.done?null:l().createElement("i",{className:"material-icons"},"pending")," ",!t.done||e[t.meth]>1||this.props.reqCredMethod!=t.meth?l().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCredDelete(t.meth,t.val)}},l().createElement("i",{className:"material-icons"},"delete")):null)))})),a.length>0&&a.unshift(l().createElement("label",{className:"small",key:"title"},l().createElement(i.FormattedMessage,{id:"label_user_contacts",defaultMessage:[{type:0,value:"Contacts"}]}))),l().createElement("div",{className:"scrollable-panel"},l().createElement("div",{className:"panel-form-column"},l().createElement("a",{href:"#",className:"flat-button float-right",onClick:e=>{e.preventDefault(),this.props.onNavigate("general")}},l().createElement("i",{className:"material-icons"},"edit")," ",l().createElement(i.FormattedMessage,{id:"button_edit",defaultMessage:[{type:0,value:"Edit"}]})),l().createElement("center",null,l().createElement(s.Z,{tinode:this.props.tinode,avatar:this.state.avatar,readOnly:!0,uid:this.props.myUserId,title:this.state.fullName})),l().createElement("div",{className:"group"},l().createElement("label",{className:"small"},l().createElement(i.FormattedMessage,{id:"label_your_name",defaultMessage:[{type:0,value:"Your name"}]})),l().createElement("div",{className:"large ellipsized"},this.state.fullName)),l().createElement("div",{className:"group"},l().createElement("label",{className:"small"},l().createElement(i.FormattedMessage,{id:"label_user_id",defaultMessage:[{type:0,value:"ID:"}]}))," ",l().createElement("tt",null,this.props.myUserId)),l().createElement("div",{className:"group"},l().createElement(c.Z,{trustedBadges:this.props.trustedBadges})),this.state.description?l().createElement("div",{className:"group"},l().createElement("label",{className:"small"},l().createElement(i.FormattedMessage,{id:"label_description",defaultMessage:[{type:0,value:"Description"}]})),l().createElement("div",{className:"quoted"},this.state.description)):null),l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-column"},l().createElement("div",{className:"group"},a)),l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-column"},l().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onNavigate("notif")}},l().createElement("i",{className:"material-icons"},"notifications")," ",l().createElement(i.FormattedMessage,{id:"sidepanel_title_acc_notifications",defaultMessage:[{type:0,value:"Notifications"}]})),l().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onNavigate("security")}},l().createElement("i",{className:"material-icons"},"security")," ",l().createElement(i.FormattedMessage,{id:"button_security",defaultMessage:[{type:0,value:"Security"}]})),l().createElement("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onNavigate("support")}},l().createElement("i",{className:"material-icons"},"contact_support")," ",l().createElement(i.FormattedMessage,{id:"sidepanel_title_acc_support",defaultMessage:[{type:0,value:"Support"}]}))))}}},2078:(e,a,t)=>{t.d(a,{Z:()=>p});var d=t(7363),l=t.n(d),i=t(916),o=t(306),s=t(6198),c=t(2689),n=t(6359),r=t(6670),m=t(3905);const h=(0,i.defineMessages)({mobile_number_required:{id:"mobile_number_required",defaultMessage:[{type:0,value:"Mobile phone number required"}]}});class u extends l().PureComponent{constructor(e){super(e),this.codeMap={},r.forEach((e=>{this.codeMap[e.code]=e.dial}));const a=e.countryCode||"US",t=this.codeMap[a];this.state={countryCode:a,dialCode:t,localNumber:"",placeholderNumber:this.placeholderNumber(a,t)},this.handleChange=this.handleChange.bind(this),this.handleFinished=this.handleFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.showCountrySelector=this.showCountrySelector.bind(this)}handleChange(e){const a=`+${this.state.dialCode}`;let t=(new o.R).input(`${a}${this.filterNumber(e.target.value)}`);t=t.substring(a.length).trim(),this.setState({localNumber:t})}handleFinished(e){e.preventDefault();const a=`${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\d]/g,"");let t=null;try{t=(0,s.h)(`+${a}`)}catch(e){}t&&t.isValid()?(this.inputField.setCustomValidity(""),this.props.onSubmit(t.format("E.164"))):this.inputField.setCustomValidity(this.props.intl.formatMessage(h.mobile_number_required))}handleKeyDown(e){"Enter"===e.key&&this.handleFinished(e)}showCountrySelector(){this.props.onShowCountrySelector(this.state.countryCode,this.state.dialCode,((e,a)=>{this.setState({countryCode:e,dialCode:a,placeholderNumber:this.placeholderNumber(e,a)})}))}filterNumber(e){return e?e.replace(/[^-\s().\d]/g,""):e}placeholderNumber(e,a){const t=(0,c.L)(e,n.Z);return t?t.formatInternational().substring(a.length+1).trim():"123 0123"}render(){return l().createElement(l().Fragment,null,l().createElement("span",{className:"dial-code",onClick:this.showCountrySelector},l().createElement("span",{className:"country-flag"},(0,m.Yu)(this.state.countryCode)," "),"+",this.state.dialCode," "),l().createElement("input",{type:"tel",ref:e=>{this.inputField=e},placeholder:this.state.placeholderNumber,value:this.state.localNumber,onChange:this.handleChange,maxLength:17,onKeyDown:this.handleKeyDown,onBlur:this.handleFinished,required:!0,autoFocus:this.props.autoFocus}))}}const p=(0,i.injectIntl)(u)},6670:e=>{e.exports=JSON.parse('[{"dial":"93","code":"AF"},{"dial":"355","code":"AL"},{"dial":"213","code":"DZ"},{"dial":"1-684","code":"AS"},{"dial":"376","code":"AD"},{"dial":"244","code":"AO"},{"dial":"1-264","code":"AI"},{"dial":"672","code":"AQ"},{"dial":"1-268","code":"AG"},{"dial":"54","code":"AR"},{"dial":"374","code":"AM"},{"dial":"297","code":"AW"},{"dial":"61","code":"AU"},{"dial":"43","code":"AT"},{"dial":"994","code":"AZ"},{"dial":"1-242","code":"BS"},{"dial":"973","code":"BH"},{"dial":"880","code":"BD"},{"dial":"1-246","code":"BB"},{"dial":"375","code":"BY"},{"dial":"32","code":"BE"},{"dial":"501","code":"BZ"},{"dial":"229","code":"BJ"},{"dial":"1-441","code":"BM"},{"dial":"975","code":"BT"},{"dial":"591","code":"BO"},{"dial":"387","code":"BA"},{"dial":"267","code":"BW"},{"dial":"55","code":"BR"},{"dial":"246","code":"IO"},{"dial":"1-284","code":"VG"},{"dial":"673","code":"BN"},{"dial":"359","code":"BG"},{"dial":"226","code":"BF"},{"dial":"257","code":"BI"},{"dial":"855","code":"KH"},{"dial":"237","code":"CM"},{"dial":"1","code":"CA"},{"dial":"238","code":"CV"},{"dial":"1-345","code":"KY"},{"dial":"236","code":"CF"},{"dial":"235","code":"TD"},{"dial":"56","code":"CL"},{"dial":"86","code":"CN"},{"dial":"61","code":"CX"},{"dial":"61","code":"CC"},{"dial":"57","code":"CO"},{"dial":"269","code":"KM"},{"dial":"682","code":"CK"},{"dial":"506","code":"CR"},{"dial":"385","code":"HR"},{"dial":"53","code":"CU"},{"dial":"599","code":"CW"},{"dial":"357","code":"CY"},{"dial":"420","code":"CZ"},{"dial":"243","code":"CD"},{"dial":"45","code":"DK"},{"dial":"253","code":"DJ"},{"dial":"1-767","code":"DM"},{"dial":"1-809, 1-829, 1-849","code":"DO"},{"dial":"670","code":"TL"},{"dial":"593","code":"EC"},{"dial":"20","code":"EG"},{"dial":"503","code":"SV"},{"dial":"240","code":"GQ"},{"dial":"291","code":"ER"},{"dial":"372","code":"EE"},{"dial":"251","code":"ET"},{"dial":"500","code":"FK"},{"dial":"298","code":"FO"},{"dial":"679","code":"FJ"},{"dial":"358","code":"FI"},{"dial":"33","code":"FR"},{"dial":"689","code":"PF"},{"dial":"241","code":"GA"},{"dial":"220","code":"GM"},{"dial":"995","code":"GE"},{"dial":"49","code":"DE"},{"dial":"233","code":"GH"},{"dial":"350","code":"GI"},{"dial":"30","code":"GR"},{"dial":"299","code":"GL"},{"dial":"1-473","code":"GD"},{"dial":"1-671","code":"GU"},{"dial":"502","code":"GT"},{"dial":"44-1481","code":"GG"},{"dial":"224","code":"GN"},{"dial":"245","code":"GW"},{"dial":"592","code":"GY"},{"dial":"509","code":"HT"},{"dial":"504","code":"HN"},{"dial":"852","code":"HK"},{"dial":"36","code":"HU"},{"dial":"354","code":"IS"},{"dial":"91","code":"IN"},{"dial":"62","code":"ID"},{"dial":"98","code":"IR"},{"dial":"964","code":"IQ"},{"dial":"353","code":"IE"},{"dial":"44-1624","code":"IM"},{"dial":"972","code":"IL"},{"dial":"39","code":"IT"},{"dial":"225","code":"CI"},{"dial":"1-876","code":"JM"},{"dial":"81","code":"JP"},{"dial":"44-1534","code":"JE"},{"dial":"962","code":"JO"},{"dial":"7, 997","code":"KZ"},{"dial":"254","code":"KE"},{"dial":"686","code":"KI"},{"dial":"383","code":"XK"},{"dial":"965","code":"KW"},{"dial":"996","code":"KG"},{"dial":"856","code":"LA"},{"dial":"371","code":"LV"},{"dial":"961","code":"LB"},{"dial":"266","code":"LS"},{"dial":"231","code":"LR"},{"dial":"218","code":"LY"},{"dial":"423","code":"LI"},{"dial":"370","code":"LT"},{"dial":"352","code":"LU"},{"dial":"853","code":"MO"},{"dial":"389","code":"MK"},{"dial":"261","code":"MG"},{"dial":"265","code":"MW"},{"dial":"60","code":"MY"},{"dial":"960","code":"MV"},{"dial":"223","code":"ML"},{"dial":"356","code":"MT"},{"dial":"692","code":"MH"},{"dial":"222","code":"MR"},{"dial":"230","code":"MU"},{"dial":"262","code":"YT"},{"dial":"52","code":"MX"},{"dial":"691","code":"FM"},{"dial":"373","code":"MD"},{"dial":"377","code":"MC"},{"dial":"976","code":"MN"},{"dial":"382","code":"ME"},{"dial":"1-664","code":"MS"},{"dial":"212","code":"MA"},{"dial":"258","code":"MZ"},{"dial":"95","code":"MM"},{"dial":"264","code":"NA"},{"dial":"674","code":"NR"},{"dial":"977","code":"NP"},{"dial":"31","code":"NL"},{"dial":"599","code":"CW"},{"dial":"687","code":"NC"},{"dial":"64","code":"NZ"},{"dial":"505","code":"NI"},{"dial":"227","code":"NE"},{"dial":"234","code":"NG"},{"dial":"683","code":"NU"},{"dial":"850","code":"KP"},{"dial":"1-670","code":"MP"},{"dial":"47","code":"NO"},{"dial":"968","code":"OM"},{"dial":"92","code":"PK"},{"dial":"680","code":"PW"},{"dial":"970","code":"PS"},{"dial":"507","code":"PA"},{"dial":"675","code":"PG"},{"dial":"595","code":"PY"},{"dial":"51","code":"PE"},{"dial":"63","code":"PH"},{"dial":"64","code":"PN"},{"dial":"48","code":"PL"},{"dial":"351","code":"PT"},{"dial":"1-787, 1-939","code":"PR"},{"dial":"974","code":"QA"},{"dial":"242","code":"CG"},{"dial":"262","code":"RE"},{"dial":"40","code":"RO"},{"dial":"7","code":"RU"},{"dial":"250","code":"RW"},{"dial":"590","code":"BL"},{"dial":"290","code":"SH"},{"dial":"1-869","code":"KN"},{"dial":"1-758","code":"LC"},{"dial":"590","code":"MF"},{"dial":"508","code":"PM"},{"dial":"1-784","code":"VC"},{"dial":"685","code":"WS"},{"dial":"378","code":"SM"},{"dial":"239","code":"ST"},{"dial":"966","code":"SA"},{"dial":"221","code":"SN"},{"dial":"381","code":"RS"},{"dial":"248","code":"SC"},{"dial":"232","code":"SL"},{"dial":"65","code":"SG"},{"dial":"1-721","code":"SX"},{"dial":"421","code":"SK"},{"dial":"386","code":"SI"},{"dial":"677","code":"SB"},{"dial":"252","code":"SO"},{"dial":"27","code":"ZA"},{"dial":"82","code":"KR"},{"dial":"211","code":"SS"},{"dial":"34","code":"ES"},{"dial":"94","code":"LK"},{"dial":"249","code":"SD"},{"dial":"597","code":"SR"},{"dial":"47","code":"SJ"},{"dial":"268","code":"SZ"},{"dial":"46","code":"SE"},{"dial":"41","code":"CH"},{"dial":"963","code":"SY"},{"dial":"886","code":"TW"},{"dial":"992","code":"TJ"},{"dial":"255","code":"TZ"},{"dial":"66","code":"TH"},{"dial":"228","code":"TG"},{"dial":"690","code":"TK"},{"dial":"676","code":"TO"},{"dial":"1-868","code":"TT"},{"dial":"216","code":"TN"},{"dial":"90","code":"TR"},{"dial":"993","code":"TM"},{"dial":"1-649","code":"TC"},{"dial":"688","code":"TV"},{"dial":"1-340","code":"VI"},{"dial":"256","code":"UG"},{"dial":"380","code":"UA"},{"dial":"971","code":"AE"},{"dial":"44","code":"GB"},{"dial":"1","code":"US"},{"dial":"598","code":"UY"},{"dial":"998","code":"UZ"},{"dial":"678","code":"VU"},{"dial":"379","code":"VA"},{"dial":"58","code":"VE"},{"dial":"84","code":"VN"},{"dial":"681","code":"WF"},{"dial":"212","code":"EH"},{"dial":"967","code":"YE"},{"dial":"260","code":"ZM"},{"dial":"263","code":"ZW"}]')}}]);
//# sourceMappingURL=365.prod.js.map
\ No newline at end of file
diff --git a/umd/365.prod.js.map b/umd/365.prod.js.map
index 7f0d2fd4..3f46783c 100644
--- a/umd/365.prod.js.map
+++ b/umd/365.prod.js.map
@@ -1 +1 @@
-{"version":3,"file":"365.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/widgets/credential-edit.jsx","webpack://tinode-webapp/./src/views/account-settings-view.jsx","webpack://tinode-webapp/./src/widgets/phone-edit.jsx"],"sourcesContent":["// Enter one credential at a time.\n\nimport React from 'react';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\nimport PhoneEdit from './phone-edit.jsx';\nimport { parsePhoneNumber } from 'libphonenumber-js/mobile';\n\nconst messages = defineMessages({\n password_reset_email_sent: {\n id: 'password_reset_email_sent',\n defaultMessage: 'An email with security code has been sent.',\n description: 'Notification that the email with password reset instructions has been sent'\n },\n password_reset_sms_sent: {\n id: 'password_reset_sms_sent',\n defaultMessage: 'A text message with security code has been sent.',\n description: 'Notification that the SMS with password reset instructions has been sent'\n },\n});\n\nclass CredentialEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n code: '',\n tel: '',\n email: '',\n sent: false\n };\n\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleEmailChange = this.handleEmailChange.bind(this);\n this.handlePhoneChange = this.handlePhoneChange.bind(this);\n this.handleCodeChange = this.handleCodeChange.bind(this);\n }\n\n static formatPhoneNumber(raw) {\n let number;\n try {\n number = parsePhoneNumber(raw);\n } catch (err) {}\n return number ? number.formatInternational() : raw;\n }\n\n handleEmailChange(e) {\n this.setState({email: e.target.value});\n }\n\n handlePhoneChange(number) {\n this.setState({tel: number});\n }\n\n handleCodeChange(e) {\n this.setState({code: e.target.value.replace(/[^\\d]/g, '')});\n }\n\n handleSubmit(e) {\n e.preventDefault();\n const value = this.props.method == 'email' ? this.state.email : this.state.tel;\n if (value) {\n this.props.onSubmit(this.props.method, value);\n this.setState({sent: true});\n const msg = this.props.method == 'email' ? messages.password_reset_email_sent : messages.password_reset_sms_sent;\n this.props.onError(this.props.intl.formatMessage(msg), 'info');\n }\n }\n\n render() {\n const readyForCode = this.state.sent || !this.props.done;\n const currentValue = CredentialEdit.formatPhoneNumber(readyForCode ?\n (this.state.tel || this.state.email) : this.props.val);\n\n const changeEmail = (\n <>\n \n
\n \n \n
>);\n\n const changePhone = (\n <>\n \n
\n \n \n
>\n );\n\n const newEmailLabel = ();\n\n const newEmailInput = (\n <>{newEmailLabel}
\n \n {\n (email_prompt) => \n }\n
>\n );\n\n const newPhoneLabel = ();\n\n const newPhoneInput = (\n <>{newPhoneLabel}
\n >\n );\n\n const codeInput = (\n <>\n \n
\n \n {\n (numbers_only) => \n }\n
>\n );\n\n return ();\n }\n}\n\nexport default injectIntl(CredentialEdit);\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport { parsePhoneNumber } from 'libphonenumber-js/mobile';\n\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport BadgeList from '../widgets/badge-list.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\nimport { MAX_TITLE_LENGTH, MAX_TOPIC_DESCRIPTION_LENGTH } from '../config.js';\nimport CredentialEdit from '../widgets/credential-edit.jsx';\n\nfunction _clip(str, length) {\n return str && str.substring(0, length);\n}\n\nexport default class AccountSettingsView extends React.Component {\n constructor(props) {\n super(props);\n\n const me = this.props.tinode.getMeTopic();\n this.state = {\n fullName: _clip(me.public ? me.public.fn : undefined, MAX_TITLE_LENGTH),\n description: _clip(me.public ? me.public.note : undefined, MAX_TOPIC_DESCRIPTION_LENGTH),\n avatar: makeImageUrl(me.public ? me.public.photo : null),\n credentials: me.getCredentials() || [],\n credEdit: undefined\n };\n }\n\n componentDidMount() {\n const me = this.props.tinode.getMeTopic();\n me.onCredsUpdated = _ => this.setState({credentials: me.getCredentials()});\n }\n\n componentWillUnmount() {\n const me = this.props.tinode.getMeTopic();\n me.onCredsUpdated = null;\n }\n\n render() {\n if (this.state.credEdit) {\n return (\n this.setState({credEdit: undefined})}\n onError={this.props.onError} />\n );\n }\n\n const credentials = [];\n this.state.credentials.forEach((cred, idx) => {\n if (!['email', 'tel'].includes(cred.meth)) {\n // Skip unknown methods.\n return ;\n }\n\n let val = cred.val\n if (cred.meth == 'tel') {\n const number = parsePhoneNumber(cred.val);\n val = number ? number.formatInternational() : cred.val;\n }\n\n credentials.push(\n );\n });\n if (credentials.length > 0) {\n // Add title as the first element.\n credentials.unshift(\n );\n }\n\n return (\n \n );\n }\n};\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n >\n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["messages","defineMessages","password_reset_email_sent","id","defaultMessage","password_reset_sms_sent","CredentialEdit","React","constructor","props","super","this","state","code","tel","email","sent","handleSubmit","bind","handleEmailChange","handlePhoneChange","handleCodeChange","static","raw","number","parsePhoneNumber","err","formatInternational","e","setState","target","value","replace","preventDefault","method","onSubmit","msg","onError","intl","formatMessage","render","readyForCode","done","currentValue","formatPhoneNumber","val","changeEmail","className","FormattedMessage","changePhone","newEmailLabel","newEmailInput","email_prompt","type","placeholder","autoComplete","onChange","required","newPhoneLabel","newPhoneInput","PhoneEdit","autoFocus","onShowCountrySelector","codeInput","numbers_only","maxLength","onClick","onCancel","injectIntl","_clip","str","length","substring","AccountSettingsView","me","tinode","getMeTopic","fullName","public","fn","undefined","MAX_TITLE_LENGTH","description","note","MAX_TOPIC_DESCRIPTION_LENGTH","avatar","makeImageUrl","photo","credentials","getCredentials","credEdit","componentDidMount","onCredsUpdated","_","componentWillUnmount","meth","onCredAdd","forEach","cred","idx","includes","push","key","href","onCredDelete","unshift","onNavigate","AvatarUpload","readOnly","uid","myUserId","title","BadgeList","trustedBadges","mobile_number_required","codeMap","dcodes","dc","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","AsYouType","input","filterNumber","trim","isValid","inputField","setCustomValidity","format","sample","getExampleNumber","examples","flagEmoji","ref","onKeyDown","onBlur"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"365.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/widgets/credential-edit.jsx","webpack://tinode-webapp/./src/views/account-settings-view.jsx","webpack://tinode-webapp/./src/widgets/phone-edit.jsx"],"sourcesContent":["// Enter one credential at a time.\n\nimport React from 'react';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\nimport PhoneEdit from './phone-edit.jsx';\nimport { parsePhoneNumber } from 'libphonenumber-js/mobile';\n\nconst messages = defineMessages({\n password_reset_email_sent: {\n id: 'password_reset_email_sent',\n defaultMessage: 'An email with security code has been sent.',\n description: 'Notification that the email with password reset instructions has been sent'\n },\n password_reset_sms_sent: {\n id: 'password_reset_sms_sent',\n defaultMessage: 'A text message with security code has been sent.',\n description: 'Notification that the SMS with password reset instructions has been sent'\n },\n});\n\nclass CredentialEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n code: '',\n tel: '',\n email: '',\n sent: false\n };\n\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleEmailChange = this.handleEmailChange.bind(this);\n this.handlePhoneChange = this.handlePhoneChange.bind(this);\n this.handleCodeChange = this.handleCodeChange.bind(this);\n }\n\n static formatPhoneNumber(raw) {\n let number;\n try {\n number = parsePhoneNumber(raw);\n } catch (err) {}\n return number ? number.formatInternational() : raw;\n }\n\n handleEmailChange(e) {\n this.setState({email: e.target.value});\n }\n\n handlePhoneChange(number) {\n this.setState({tel: number});\n }\n\n handleCodeChange(e) {\n this.setState({code: e.target.value.replace(/[^\\d]/g, '')});\n }\n\n handleSubmit(e) {\n e.preventDefault();\n const value = this.props.method == 'email' ? this.state.email : this.state.tel;\n if (this.state.code) {\n this.props.onError(null);\n this.props.onCredConfirm(this.props.method, this.state.code);\n } else if (value) {\n this.props.onCredAdd(this.props.method, value);\n this.setState({sent: true});\n const msg = this.props.method == 'email' ? messages.password_reset_email_sent : messages.password_reset_sms_sent;\n this.props.onError(this.props.intl.formatMessage(msg), 'info');\n }\n }\n\n render() {\n const readyForCode = this.state.sent || !this.props.done;\n const rawValue = readyForCode ? (this.state.tel || this.state.email) : this.props.val;\n const formattedValue = this.props.method == 'tel' ? CredentialEdit.formatPhoneNumber(rawValue) : rawValue;\n\n const changeEmail = (\n <>\n \n
\n \n \n
>);\n\n const changePhone = (\n <>\n \n
\n \n \n
>\n );\n\n const newEmailLabel = ();\n\n const newEmailInput = (\n <>{newEmailLabel}
\n \n {\n (email_prompt) => \n }\n
>\n );\n\n const newPhoneLabel = ();\n\n const newPhoneInput = (\n <>{newPhoneLabel}
\n >\n );\n\n const codeInput = (\n <>\n \n
\n \n {\n (numbers_only) => \n }\n
>\n );\n\n return ();\n }\n}\n\nexport default injectIntl(CredentialEdit);\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport { parsePhoneNumber } from 'libphonenumber-js/mobile';\n\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport BadgeList from '../widgets/badge-list.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\nimport { MAX_TITLE_LENGTH, MAX_TOPIC_DESCRIPTION_LENGTH } from '../config.js';\nimport CredentialEdit from '../widgets/credential-edit.jsx';\n\nfunction _clip(str, length) {\n return str && str.substring(0, length);\n}\n\nexport default class AccountSettingsView extends React.Component {\n constructor(props) {\n super(props);\n\n const me = this.props.tinode.getMeTopic();\n this.state = {\n fullName: _clip(me.public ? me.public.fn : undefined, MAX_TITLE_LENGTH),\n description: _clip(me.public ? me.public.note : undefined, MAX_TOPIC_DESCRIPTION_LENGTH),\n avatar: makeImageUrl(me.public ? me.public.photo : null),\n credentials: me.getCredentials() || [],\n credEdit: undefined\n };\n }\n\n componentDidMount() {\n const me = this.props.tinode.getMeTopic();\n me.onCredsUpdated = _ => this.setState({credentials: me.getCredentials()});\n }\n\n componentWillUnmount() {\n const me = this.props.tinode.getMeTopic();\n me.onCredsUpdated = null;\n }\n\n render() {\n if (this.state.credEdit) {\n return (\n this.setState({credEdit: undefined})}\n onError={this.props.onError} />\n );\n }\n\n // Count how many times each method is validated.\n const validated = {};\n this.state.credentials.forEach(cred => {\n if (cred.done) {\n validated[cred.meth] = (validated[cred.meth] || 0) + 1;\n }\n });\n\n const credentials = [];\n this.state.credentials.forEach((cred, idx) => {\n if (!['email', 'tel'].includes(cred.meth)) {\n // Skip unknown methods.\n return ;\n }\n\n let val = cred.val\n if (cred.meth == 'tel') {\n const number = parsePhoneNumber(cred.val);\n val = number ? number.formatInternational() : cred.val;\n }\n\n credentials.push(\n );\n });\n if (credentials.length > 0) {\n // Add title as the first element.\n credentials.unshift(\n );\n }\n\n return (\n \n );\n }\n};\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n >\n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["messages","defineMessages","password_reset_email_sent","id","defaultMessage","password_reset_sms_sent","CredentialEdit","React","constructor","props","super","this","state","code","tel","email","sent","handleSubmit","bind","handleEmailChange","handlePhoneChange","handleCodeChange","static","raw","number","parsePhoneNumber","err","formatInternational","e","setState","target","value","replace","preventDefault","method","onError","onCredConfirm","onCredAdd","msg","intl","formatMessage","render","readyForCode","done","rawValue","val","formattedValue","formatPhoneNumber","changeEmail","className","FormattedMessage","changePhone","newEmailLabel","newEmailInput","email_prompt","type","placeholder","autoComplete","onChange","required","newPhoneLabel","newPhoneInput","PhoneEdit","autoFocus","onShowCountrySelector","onSubmit","codeInput","numbers_only","maxLength","onClick","onCancel","injectIntl","_clip","str","length","substring","AccountSettingsView","me","tinode","getMeTopic","fullName","public","fn","undefined","MAX_TITLE_LENGTH","description","note","MAX_TOPIC_DESCRIPTION_LENGTH","avatar","makeImageUrl","photo","credentials","getCredentials","credEdit","componentDidMount","onCredsUpdated","_","componentWillUnmount","meth","validated","forEach","cred","idx","includes","push","key","reqCredMethod","href","onCredDelete","unshift","onNavigate","AvatarUpload","readOnly","uid","myUserId","title","BadgeList","trustedBadges","mobile_number_required","codeMap","dcodes","dc","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","AsYouType","input","filterNumber","trim","isValid","inputField","setCustomValidity","format","sample","getExampleNumber","examples","flagEmoji","ref","onKeyDown","onBlur"],"sourceRoot":""}
\ No newline at end of file
diff --git a/umd/514.prod.js b/umd/514.prod.js
index dc20d3bd..112c145b 100644
--- a/umd/514.prod.js
+++ b/umd/514.prod.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[514],{4514:e=>{e.exports=JSON.parse('{"action_block_contact":"Block Contact","action_cancel":"cancel","action_clear_messages":"Clear Messages","action_delete_messages":"Clear Messages for All","action_leave_chat":"Leave Conversation","action_report_chat":"Report Conversation","archived_contacts":"Archived contacts ({count})","badge_danger":"Untrustworthy","badge_owner":"owner","badge_staff":"Staff-managed","badge_verified":"Verified/official","badge_you":"you","block_contact_warning":"Are you sure you want to block this contact?","blocked_contacts_link":"Blocked contacts ({count})","button_add_members":"Add members","button_cancel":"Cancel","button_confirm":"Confirm","button_create":"Create","button_delete_account":"Delete account","button_edit":"Edit","button_logout":"Logout","button_ok":"OK","button_reset":"Reset","button_send_request":"Send request","button_sign_in":"Sign in","button_sign_up":"Sign up","button_subscribe":"Subscribe","button_update":"Update","cannot_initiate_file_upload":"Cannot initiate file upload.","channel":"channel","channel_prompt":"This is a channel","chat_invitation":"You are invited to start a new chat. What would you like to do?","chat_invitation_accept":"Accept","chat_invitation_block":"Block","chat_invitation_ignore":"Ignore","clear_messages_warning":"Are you sure you want to clear all messages? It cannot be undone.","code_doesnot_match":"Code does not match","contacts_not_found":"You have no chats
¯∖_(ツ)_/¯","contacts_not_found_short":"No contacts match \'\'{query}\'\'","credential_email_prompt":"Your registration email","delete_account":"Delete account","delete_account_warning":"Are you sure you want to delete your account? It cannot be undone.","delete_messages_warning":"Are you sure you want to delete all messages for everyone? It cannot be undone.","download_action":"download","drafty_attachment":"Attachment","drafty_form":"Form:","drafty_image":"Picture","email_dative":"email","email_prompt":"Email, e.g. jdoe@example.com","enable_peers_messaging":"Enable","enter_confirmation_code_prompt":"Confirmation code","error_invalid_id":"Invalid ID","file_attachment_too_large":"The file size {size} exceeds the {limit} limit.","forgot_password_link":"Forgot password?","full_name_prompt":"Full name, e.g. John Doe","granted_permissions":"Granted","group_has_no_members":"No members","group_user_id_prompt":"Group or User ID","image_caption_prompt":"Image caption","invalid_content":"invalid content","invalid_security_token":"Invalid security token","label_client":"Client:","label_content_type":"Content type:","label_default_access_mode":"Default access mode:","label_file_name":"File name:","label_group_members":"Group members:","label_incognito_mode":"Incognito mode:","label_message_sound":"Message sound:","label_muting_topic":"Muted:","label_other_user":"Other","label_password":"Password","label_permissions":"Permissions:","label_private":"Private comment","label_push_notifications":"Notification alerts:","label_push_notifications_disabled":"Notification alerts (requires HTTPS):","label_reset_password":"Send a password reset email:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server address:","label_server_to_use":"Server to use:","label_size":"Size:","label_topic_name":"Name","label_user_contacts":"Contacts","label_user_id":"ID:","label_wire_transport":"Wire transport:","label_you":"You:","label_your_name":"Your name","label_your_permissions":"Your permissions:","last_seen_timestamp":"Last seen","leave_chat_warning":"Are you sure you want to leave this conversation?","link_contact_us":"Contact Us","link_privacy_policy":"Privacy Policy","link_terms_of_service":"Terms of Service","login_prompt":"Login","menu_item_archive_topic":"Archive","menu_item_block":"Block","menu_item_clear_messages":"Clear messages","menu_item_clear_messages_for_all":"Clear for All","menu_item_delete":"Delete","menu_item_delete_for_all":"Delete for All","menu_item_delete_topic":"Delete","menu_item_edit_permissions":"Edit permissions","menu_item_info":"Info","menu_item_member_delete":"Remove","menu_item_mute":"Mute","menu_item_reply":"Reply","menu_item_restore_topic":"Restore","menu_item_send_retry":"Retry","menu_item_unblock":"Unblock","menu_item_unmute":"Unmute","message_sending":"sending...","message_sending_failed":"failed","messages_not_readable":"no access to messages","messaging_disabled_prompt":"Messaging disabled","more_online_members":"+{overflow} more","new_message_prompt":"New message","new_password_placeholder":"Enter new password","no_connection":"No connection","no_contacts":"You have no contacts :-(","numeric_confirmation_code_prompt":"Numbers only","online_now":"online now","password_prompt":"Password","password_unchanged_prompt":"Unchanged","peers_messaging_disabled":"Peer\'s messaging is disabled.","permission_admin":"Approve ({val})","permission_delete":"Delete ({val})","permission_join":"Join ({val})","permission_owner":"Owner ({val})","permission_pres":"Get notified ({val})","permission_read":"Read ({val})","permission_share":"Share ({val})","permission_write":"Write ({val})","phone_dative":"phone","private_editing_placeholder":"Visible to you only","push_init_failed":"Failed to initialize push notifications","reconnect_countdown":"Disconnected. Reconnecting in {seconds}…","reconnect_now":"Try now","reload_update":"Reload","report_chat_warning":"Are you sure you want to block and report this conversation?","requested_permissions":"Requested","save_attachment":"save","search_for_contacts":"Use search to find contacts","search_no_results":"Search returned no results","search_placeholder":"List like email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Account Settings","sidepanel_title_archive":"Archived Chats","sidepanel_title_blocked":"Blocked Chats","sidepanel_title_cred":"Confirm Credentials","sidepanel_title_login":"Sign In","sidepanel_title_newtpk":"Start New Chat","sidepanel_title_register":"Create Account","sidepanel_title_reset":"Reset Password","sidepanel_title_settings":"Settings","stay_logged_in":"Stay logged in","tabtitle_find_user":"find","tabtitle_group_by_id":"by id","tabtitle_new_group":"new group","tags_editor_no_tags":"Add some tags","tags_not_found":"No tags defined. Add some.","title_all_contacts":"All Contacts","title_group_members":"Group Members","title_manage_tags":"Manage","title_not_found":"Not found","title_permissions":"Permissions","title_tag_manager":"Tags (search & discovery)","topic_block_warning":"Are you sure you want to block this conversation?","topic_delete_warning":"Are you sure you want to delete this conversation?","topic_name_editing_placeholder":"Freeform name of the group","unnamed_topic":"Unnamed","update_available":"Update available.","upload_finishing":"finishing...","user_not_found":"Not found","description_editing_placeholder":"Optional description","label_description":"Description","button_security":"Security","panel_title_crop":"Drag to Adjust","panel_title_general":"General","panel_title_members":"Members","panel_title_security":"Security","panel_title_info":"Info","permissions_anonymous":"Anonymous","permissions_authenticated":"Authenticated","topic_delete":"Delete Conversation","permissions_user":"User\'s Permissions","password_reset_email_sent":"An email with security code has been sent.","label_unarchive_topic":"Archived:","menu_item_forward":"Forward","forward_to":"Forward to","forward_to_search_placeholder":"Search contacts","label_new_password":"New password","drafty_unknown":"Unsupported","calls_incoming":"Incoming call","calls_outgoing":"Outgoing call","calls_you_label":"You","menu_item_video_call":"Video call","already_in_call":"You already in an ongoing call!","call_cancelled":"cancelled","call_missed":"missed","call_declined":"declined","call_disconnected":"disconnected","label_use_secure_connection":"Use secure connection","cred_confirmed_successfully":"Confirmed successfully","menu_item_edit":"Edit","editing_message":"Editing","message_edited_marker":", edited","icon_title_add_image":"Add image","icon_title_attach_file":"Attach file","icon_title_delete":"Delete","icon_title_pause":"Pause","icon_title_play":"Play","icon_title_record_voice":"Record voice message","icon_title_resume":"Resume","icon_title_send":"Send message","drag_file":"Drag file here","drafty_video":"Video recording","call_in_progress":"in progress","menu_item_audio_call":"Call","unrecognized_video_format":"Format of this video is not recognized","loading_note":"Loading...","password_i_have_code":"I have code","label_reset_password_tel":"Send a password reset SMS:","mobile_phone_number":"Mobile phone number","password_reset_sms_sent":"A text message with security code has been sent.","mobile_number_required":"Mobile phone number required","current_email":"Current email","current_phone":"Current phone number","new_email":"New email","new_phone_number":"New phone number","change_email":"Change email","change_phone":"Change phone number","call_busy":"busy","failed_to_init_audio":"Failed to initialize audio recording","pin_message":"Pin","unpin_message":"Unpin","calls_conference":"Conference call"}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[514],{4514:e=>{e.exports=JSON.parse('{"action_block_contact":"Block Contact","action_cancel":"cancel","action_clear_messages":"Clear Messages","action_delete_messages":"Clear Messages for All","action_leave_chat":"Leave Conversation","action_report_chat":"Report Conversation","archived_contacts":"Archived contacts ({count})","badge_danger":"Untrustworthy","badge_owner":"owner","badge_staff":"Staff-managed","badge_verified":"Verified/official","badge_you":"you","block_contact_warning":"Are you sure you want to block this contact?","blocked_contacts_link":"Blocked contacts ({count})","button_add_members":"Add members","button_cancel":"Cancel","button_confirm":"Confirm","button_create":"Create","button_delete_account":"Delete account","button_edit":"Edit","button_logout":"Logout","button_ok":"OK","button_reset":"Reset","button_send_request":"Send request","button_sign_in":"Sign in","button_sign_up":"Sign up","button_subscribe":"Subscribe","button_update":"Update","cannot_initiate_file_upload":"Cannot initiate file upload.","channel":"channel","channel_prompt":"This is a channel","chat_invitation":"You are invited to start a new chat. What would you like to do?","chat_invitation_accept":"Accept","chat_invitation_block":"Block","chat_invitation_ignore":"Ignore","clear_messages_warning":"Are you sure you want to clear all messages? It cannot be undone.","code_doesnot_match":"Code does not match","contacts_not_found":"You have no chats
¯∖_(ツ)_/¯","contacts_not_found_short":"No contacts match \'\'{query}\'\'","credential_email_prompt":"Your registration email","delete_account":"Delete account","delete_account_warning":"Are you sure you want to delete your account? It cannot be undone.","delete_messages_warning":"Are you sure you want to delete all messages for everyone? It cannot be undone.","download_action":"download","drafty_attachment":"Attachment","drafty_form":"Form:","drafty_image":"Picture","email_dative":"email","email_prompt":"Email, e.g. jdoe@example.com","enable_peers_messaging":"Enable","enter_confirmation_code_prompt":"Confirmation code","error_invalid_id":"Invalid ID","file_attachment_too_large":"The file size {size} exceeds the {limit} limit.","forgot_password_link":"Forgot password?","full_name_prompt":"Full name, e.g. John Doe","granted_permissions":"Granted","group_has_no_members":"No members","group_user_id_prompt":"Group or User ID","image_caption_prompt":"Image caption","invalid_content":"invalid content","invalid_security_token":"Invalid security token","label_client":"Client:","label_content_type":"Content type:","label_default_access_mode":"Default access mode:","label_file_name":"File name:","label_group_members":"Group members:","label_incognito_mode":"Incognito mode:","label_message_sound":"Message sound:","label_muting_topic":"Muted:","label_other_user":"Other","label_password":"Password","label_permissions":"Permissions:","label_private":"Private comment","label_push_notifications":"Notification alerts:","label_push_notifications_disabled":"Notification alerts (requires HTTPS):","label_reset_password":"Send a password reset email:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server address:","label_server_to_use":"Server to use:","label_size":"Size:","label_topic_name":"Name","label_user_contacts":"Contacts","label_user_id":"ID:","label_wire_transport":"Wire transport:","label_you":"You:","label_your_name":"Your name","label_your_permissions":"Your permissions:","last_seen_timestamp":"Last seen","leave_chat_warning":"Are you sure you want to leave this conversation?","link_contact_us":"Contact Us","link_privacy_policy":"Privacy Policy","link_terms_of_service":"Terms of Service","login_prompt":"Login","menu_item_archive_topic":"Archive","menu_item_block":"Block","menu_item_clear_messages":"Clear messages","menu_item_clear_messages_for_all":"Clear for All","menu_item_delete":"Delete","menu_item_delete_for_all":"Delete for All","menu_item_delete_topic":"Delete","menu_item_edit_permissions":"Edit permissions","menu_item_info":"Info","menu_item_member_delete":"Remove","menu_item_mute":"Mute","menu_item_reply":"Reply","menu_item_restore_topic":"Restore","menu_item_send_retry":"Retry","menu_item_unblock":"Unblock","menu_item_unmute":"Unmute","message_sending":"sending...","message_sending_failed":"failed","messages_not_readable":"no access to messages","messaging_disabled_prompt":"Messaging disabled","more_online_members":"+{overflow} more","new_message_prompt":"New message","new_password_placeholder":"Enter new password","no_connection":"No connection","no_contacts":"You have no contacts :-(","numeric_confirmation_code_prompt":"Numbers only","online_now":"online now","password_prompt":"Password","password_unchanged_prompt":"Unchanged","peers_messaging_disabled":"Peer\'s messaging is disabled.","permission_admin":"Approve ({val})","permission_delete":"Delete ({val})","permission_join":"Join ({val})","permission_owner":"Owner ({val})","permission_pres":"Get notified ({val})","permission_read":"Read ({val})","permission_share":"Share ({val})","permission_write":"Write ({val})","phone_dative":"phone","private_editing_placeholder":"Visible to you only","push_init_failed":"Failed to initialize push notifications","reconnect_countdown":"Disconnected. Reconnecting in {seconds}…","reconnect_now":"Try now","reload_update":"Reload","report_chat_warning":"Are you sure you want to block and report this conversation?","requested_permissions":"Requested","save_attachment":"save","search_for_contacts":"Use search to find contacts","search_no_results":"Search returned no results","search_placeholder":"List like email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Account Settings","sidepanel_title_archive":"Archived Chats","sidepanel_title_blocked":"Blocked Chats","sidepanel_title_cred":"Confirm Credentials","sidepanel_title_login":"Sign In","sidepanel_title_newtpk":"Start New Chat","sidepanel_title_register":"Create Account","sidepanel_title_reset":"Reset Password","sidepanel_title_settings":"Settings","stay_logged_in":"Stay logged in","tabtitle_find_user":"find","tabtitle_group_by_id":"by id","tabtitle_new_group":"new group","tags_editor_no_tags":"Add some tags","tags_not_found":"No tags defined. Add some.","title_all_contacts":"All Contacts","title_group_members":"Group Members","title_manage_tags":"Manage","title_not_found":"Not found","title_permissions":"Permissions","title_tag_manager":"Tags (search & discovery)","topic_block_warning":"Are you sure you want to block this conversation?","topic_delete_warning":"Are you sure you want to delete this conversation?","topic_name_editing_placeholder":"Freeform name of the group","unnamed_topic":"Unnamed","update_available":"Update available.","upload_finishing":"finishing...","user_not_found":"Not found","description_editing_placeholder":"Optional description","label_description":"Description","button_security":"Security","panel_title_crop":"Drag to Adjust","panel_title_general":"General","panel_title_members":"Members","panel_title_security":"Security","panel_title_info":"Info","permissions_anonymous":"Anonymous","permissions_authenticated":"Authenticated","topic_delete":"Delete Conversation","permissions_user":"User\'s Permissions","password_reset_email_sent":"An email with security code has been sent.","label_unarchive_topic":"Archived:","menu_item_forward":"Forward","forward_to":"Forward to","forward_to_search_placeholder":"Search contacts","label_new_password":"New password","drafty_unknown":"Unsupported","calls_incoming":"Incoming call","calls_outgoing":"Outgoing call","calls_you_label":"You","menu_item_video_call":"Video call","already_in_call":"You already in an ongoing call!","call_cancelled":"cancelled","call_missed":"missed","call_declined":"declined","call_disconnected":"disconnected","label_use_secure_connection":"Use secure connection","cred_confirmed_successfully":"Confirmed successfully","menu_item_edit":"Edit","editing_message":"Editing","message_edited_marker":", edited","icon_title_add_image":"Add image","icon_title_attach_file":"Attach file","icon_title_delete":"Delete","icon_title_pause":"Pause","icon_title_play":"Play","icon_title_record_voice":"Record voice message","icon_title_resume":"Resume","icon_title_send":"Send message","drag_file":"Drag file here","drafty_video":"Video recording","call_in_progress":"in progress","menu_item_audio_call":"Call","unrecognized_video_format":"Format of this video is not recognized","loading_note":"Loading...","password_i_have_code":"I have code","label_reset_password_tel":"Send a password reset SMS:","mobile_phone_number":"Mobile phone number","password_reset_sms_sent":"A text message with security code has been sent.","mobile_number_required":"Mobile phone number required","current_email":"Current email","current_phone":"Current phone number","new_email":"New email","new_phone_number":"New phone number","change_email":"Change email","change_phone":"Change phone number","call_busy":"busy","failed_to_init_audio":"Failed to initialize audio recording","pin_message":"Pin","unpin_message":"Unpin","calls_conference":"Conference call","password_reset_success":"Password reset successfully"}')}}]);
\ No newline at end of file
diff --git a/umd/700.prod.js b/umd/700.prod.js
index 66fc4dca..b2e96349 100644
--- a/umd/700.prod.js
+++ b/umd/700.prod.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[700],{5700:e=>{e.exports=JSON.parse('{"action_block_contact":"屏蔽联系人","action_cancel":"取消","action_clear_messages":"删除讯息","action_delete_messages":"删除所有帖子","action_leave_chat":"离开","action_report_chat":"检举垃圾邮件","archived_contacts":"已归档联系人 ({count})","badge_danger":"可疑的","badge_owner":"所有者","badge_staff":"在员工管理下","badge_verified":"值得信赖","badge_you":"你","block_contact_warning":"您确定要阻止此联系人吗?","blocked_contacts_link":"封锁的联络人 ({count})","button_add_members":"添加成员","button_cancel":"取消","button_confirm":"确认","button_create":"创建","button_delete_account":"删除帐户","button_edit":"编辑","button_logout":"登出","button_ok":"好","button_reset":"重置","button_send_request":"发送请求","button_sign_in":"登录","button_sign_up":"注册","button_subscribe":"订阅","button_update":"更新","cannot_initiate_file_upload":"无法初始化文件上传。","channel":"频道","channel_prompt":"这是一个频道","chat_invitation":"你受邀开始新会话。你想怎么做?","chat_invitation_accept":"接受","chat_invitation_block":"屏蔽","chat_invitation_ignore":"忽略","clear_messages_warning":"您确定要清除所有消息吗?无法撤消。","code_doesnot_match":"代码不匹配","contacts_not_found":"你尚无会话
¯∖_(ツ)_/¯","contacts_not_found_short":"无联系人匹配\'\'{query}\'\'","credential_email_prompt":"你的注册邮箱","delete_account":"删除帐户","delete_account_warning":"您确定要删除您的帐户吗?无法撤消。","delete_messages_warning":"您确定要删除所有消息吗?无法撤消。","download_action":"下载","drafty_attachment":"附件","drafty_form":"形式:","drafty_image":"图像","email_dative":"电子邮件","email_prompt":"电子邮件,例如 zhang@example.com","enable_peers_messaging":"启用","enter_confirmation_code_prompt":"输入通过{method}发送的验证码:","error_invalid_id":"无效 ID","file_attachment_too_large":"文件大小 {size} 超过 {limit} 限制。","forgot_password_link":"忘记密码?","full_name_prompt":"全名,例如张伟","granted_permissions":"已授予","group_has_no_members":"无成员","group_user_id_prompt":"群组或用户 ID","image_caption_prompt":"图片标题","invalid_content":"无效内容","invalid_security_token":"无效的安全令牌","label_client":"客户端:","label_content_type":"内容类型:","label_default_access_mode":"默认访问模式:","label_file_name":"文件名:","label_group_members":"群组成员:","label_incognito_mode":"无痕模式:","label_message_sound":"消息提示音:","label_muting_topic":"已静音:","label_other_user":"其他","label_password":"密码","label_permissions":"权限:","label_private":"私人评论","label_push_notifications":"通知提醒:","label_push_notifications_disabled":"通知提醒(需要 HTTPS):","label_reset_password":"发送密码重置邮件:","label_sdk":"开发包:","label_server":"服务器:","label_server_address":"服务器地址:","label_server_to_use":"使用的服务器:","label_size":"大小:","label_topic_name":"名称","label_user_contacts":"往来","label_user_id":"地址:","label_wire_transport":"线路传输:","label_you":"你:","label_your_name":"你的姓名","label_your_permissions":"你的权限:","last_seen_timestamp":"最后可见","leave_chat_warning":"您确定要退出此对话吗?","link_contact_us":"联系我们","link_privacy_policy":"隐私政策","link_terms_of_service":"条款和条件","login_prompt":"登录","menu_item_archive_topic":"归档","menu_item_block":"屏蔽","menu_item_clear_messages":"清空消息","menu_item_clear_messages_for_all":"全部清除","menu_item_delete":"删除","menu_item_delete_for_all":"全部删除","menu_item_delete_topic":"删除","menu_item_edit_permissions":"编辑权限","menu_item_info":"信息","menu_item_member_delete":"移除","menu_item_mute":"静音","menu_item_restore_topic":"从存档中恢复","menu_item_send_retry":"重试","menu_item_unblock":"取消屏蔽","menu_item_unmute":"取消静音","message_sending":"正在发送...","message_sending_failed":"发送失败","messages_not_readable":"无消息访问权限","messaging_disabled_prompt":"消息已禁用","more_online_members":"还有{overflow}个","new_message_prompt":"新消息","new_password_placeholder":"输入新密码","no_connection":"无连接","no_contacts":"你尚无联系人 (._.)","numeric_confirmation_code_prompt":"仅数字","online_now":"在线","password_prompt":"密码","password_unchanged_prompt":"未改变","peers_messaging_disabled":"成员间消息已禁用。","permission_admin":"批准 ({val})","permission_delete":"删除 ({val})","permission_join":"加入 ({val})","permission_owner":"所有者 ({val})","permission_pres":"获取通知 ({val})","permission_read":"读取 ({val})","permission_share":"分享 ({val})","permission_write":"写入 ({val})","phone_dative":"电话","private_editing_placeholder":"仅自己可见","push_init_failed":"初始化推送通知失败","reconnect_countdown":"连接已断开。{seconds} 秒后重新连接…","reconnect_now":"立即尝试","reload_update":"重新载入","report_chat_warning":"您确定要停止并报告此对话吗?","requested_permissions":"已请求","save_attachment":"保存","search_for_contacts":"使用搜索寻找联系人","search_no_results":"搜索返回任何结果","search_placeholder":"列表如 email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支持","sidepanel_title_account_settings":"帐号设定","sidepanel_title_archive":"已存档会话","sidepanel_title_blocked":"被阻止的聊天","sidepanel_title_cred":"确认凭据","sidepanel_title_login":"登录","sidepanel_title_newtpk":"开始新会话","sidepanel_title_register":"创建账户","sidepanel_title_reset":"重置密码","sidepanel_title_settings":"设置","stay_logged_in":"保持登录","tabtitle_find_user":"搜索","tabtitle_group_by_id":"通过 id","tabtitle_new_group":"新群组","tags_editor_no_tags":"添加一些标签","tags_not_found":"尚未定义标签。添加一些。","title_all_contacts":"全部联系人","title_group_members":"群组成员","title_manage_tags":"管理标签","title_not_found":"无法找到","title_permissions":"权限","title_tag_manager":"标签(用户发现)","topic_block_warning":"您确定要阻止此对话吗?","topic_delete_warning":"您确定要删除此对话吗?","topic_name_editing_placeholder":"群组自由格式名称","unnamed_topic":"未命名","update_available":"更新可用。","upload_finishing":"正在结束...","user_not_found":"未找到","description_editing_placeholder":"说明(可选)","label_description":"说明","button_security":"安全","panel_title_crop":"拖动调整","panel_title_general":"常用设定","panel_title_members":"成员","panel_title_security":"安全","panel_title_info":"信息","permissions_anonymous":"匿名","permissions_authenticated":"已认证","topic_delete":"删除聊天","permissions_user":"用户权限","password_reset_email_sent":"已发送一封带有安全代码的电子邮件。","label_unarchive_topic":"存档:","menu_item_reply":"回复","menu_item_forward":"重定向","forward_to":"重定向消息","forward_to_search_placeholder":"搜索联系人","label_new_password":"新密码","drafty_unknown":"不支持","calls_incoming":"来电","calls_outgoing":"拨出电话","calls_you_label":"你","menu_item_video_call":"视频电话","already_in_call":"你已经在说话了!","call_cancelled":"取消","call_missed":"未接","call_declined":"被拒","call_disconnected":"断开连接","label_use_secure_connection":"使用安全连接","cred_confirmed_successfully":"确认成功","menu_item_edit":"编辑","editing_message":"编辑","message_edited_marker":",编辑","icon_title_add_image":"添加图片","icon_title_attach_file":"附加文件","icon_title_delete":"删除录音","icon_title_pause":"暂停播放","icon_title_play":"播放录音","icon_title_record_voice":"录制语音信息","icon_title_resume":"恢复播放","icon_title_send":"发信息","drag_file":"将文件拖到这里","drafty_video":"视频录制","call_in_progress":"通话中","menu_item_audio_call":"称呼","unrecognized_video_format":"无法识别此视频的格式","loading_note":"加载中...","password_i_have_code":"我有代码","label_reset_password_tel":"发送短信重置密码","mobile_phone_number":"手机号","password_reset_sms_sent":"已发送带有安全代码的短信。","mobile_number_required":"需要手机号","current_email":"当前邮箱","current_phone":"当前电话号码","new_email":"新电子邮件地址","new_phone_number":"新电话号码","change_email":"更改邮箱","change_phone":"更改电话号码","call_busy":"忙碌的","failed_to_init_audio":"初始化录音失败"}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[700],{5700:e=>{e.exports=JSON.parse('{"action_block_contact":"屏蔽联系人","action_cancel":"取消","action_clear_messages":"删除讯息","action_delete_messages":"删除所有帖子","action_leave_chat":"离开","action_report_chat":"检举垃圾邮件","archived_contacts":"已归档联系人 ({count})","badge_danger":"可疑的","badge_owner":"所有者","badge_staff":"在员工管理下","badge_verified":"值得信赖","badge_you":"你","block_contact_warning":"您确定要阻止此联系人吗?","blocked_contacts_link":"封锁的联络人 ({count})","button_add_members":"添加成员","button_cancel":"取消","button_confirm":"确认","button_create":"创建","button_delete_account":"删除帐户","button_edit":"编辑","button_logout":"登出","button_ok":"好","button_reset":"重置","button_send_request":"发送请求","button_sign_in":"登录","button_sign_up":"注册","button_subscribe":"订阅","button_update":"更新","cannot_initiate_file_upload":"无法初始化文件上传。","channel":"频道","channel_prompt":"这是一个频道","chat_invitation":"你受邀开始新会话。你想怎么做?","chat_invitation_accept":"接受","chat_invitation_block":"屏蔽","chat_invitation_ignore":"忽略","clear_messages_warning":"您确定要清除所有消息吗?无法撤消。","code_doesnot_match":"代码不匹配","contacts_not_found":"你尚无会话
¯∖_(ツ)_/¯","contacts_not_found_short":"无联系人匹配\'\'{query}\'\'","credential_email_prompt":"你的注册邮箱","delete_account":"删除帐户","delete_account_warning":"您确定要删除您的帐户吗?无法撤消。","delete_messages_warning":"您确定要删除所有消息吗?无法撤消。","download_action":"下载","drafty_attachment":"附件","drafty_form":"形式:","drafty_image":"图像","email_dative":"电子邮件","email_prompt":"电子邮件,例如 zhang@example.com","enable_peers_messaging":"启用","enter_confirmation_code_prompt":"输入通过{method}发送的验证码:","error_invalid_id":"无效 ID","file_attachment_too_large":"文件大小 {size} 超过 {limit} 限制。","forgot_password_link":"忘记密码?","full_name_prompt":"全名,例如张伟","granted_permissions":"已授予","group_has_no_members":"无成员","group_user_id_prompt":"群组或用户 ID","image_caption_prompt":"图片标题","invalid_content":"无效内容","invalid_security_token":"无效的安全令牌","label_client":"客户端:","label_content_type":"内容类型:","label_default_access_mode":"默认访问模式:","label_file_name":"文件名:","label_group_members":"群组成员:","label_incognito_mode":"无痕模式:","label_message_sound":"消息提示音:","label_muting_topic":"已静音:","label_other_user":"其他","label_password":"密码","label_permissions":"权限:","label_private":"私人评论","label_push_notifications":"通知提醒:","label_push_notifications_disabled":"通知提醒(需要 HTTPS):","label_reset_password":"发送密码重置邮件:","label_sdk":"开发包:","label_server":"服务器:","label_server_address":"服务器地址:","label_server_to_use":"使用的服务器:","label_size":"大小:","label_topic_name":"名称","label_user_contacts":"往来","label_user_id":"地址:","label_wire_transport":"线路传输:","label_you":"你:","label_your_name":"你的姓名","label_your_permissions":"你的权限:","last_seen_timestamp":"最后可见","leave_chat_warning":"您确定要退出此对话吗?","link_contact_us":"联系我们","link_privacy_policy":"隐私政策","link_terms_of_service":"条款和条件","login_prompt":"登录","menu_item_archive_topic":"归档","menu_item_block":"屏蔽","menu_item_clear_messages":"清空消息","menu_item_clear_messages_for_all":"全部清除","menu_item_delete":"删除","menu_item_delete_for_all":"全部删除","menu_item_delete_topic":"删除","menu_item_edit_permissions":"编辑权限","menu_item_info":"信息","menu_item_member_delete":"移除","menu_item_mute":"静音","menu_item_restore_topic":"从存档中恢复","menu_item_send_retry":"重试","menu_item_unblock":"取消屏蔽","menu_item_unmute":"取消静音","message_sending":"正在发送...","message_sending_failed":"发送失败","messages_not_readable":"无消息访问权限","messaging_disabled_prompt":"消息已禁用","more_online_members":"还有{overflow}个","new_message_prompt":"新消息","new_password_placeholder":"输入新密码","no_connection":"无连接","no_contacts":"你尚无联系人 (._.)","numeric_confirmation_code_prompt":"仅数字","online_now":"在线","password_prompt":"密码","password_unchanged_prompt":"未改变","peers_messaging_disabled":"成员间消息已禁用。","permission_admin":"批准 ({val})","permission_delete":"删除 ({val})","permission_join":"加入 ({val})","permission_owner":"所有者 ({val})","permission_pres":"获取通知 ({val})","permission_read":"读取 ({val})","permission_share":"分享 ({val})","permission_write":"写入 ({val})","phone_dative":"电话","private_editing_placeholder":"仅自己可见","push_init_failed":"初始化推送通知失败","reconnect_countdown":"连接已断开。{seconds} 秒后重新连接…","reconnect_now":"立即尝试","reload_update":"重新载入","report_chat_warning":"您确定要停止并报告此对话吗?","requested_permissions":"已请求","save_attachment":"保存","search_for_contacts":"使用搜索寻找联系人","search_no_results":"搜索返回任何结果","search_placeholder":"列表如 email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支持","sidepanel_title_account_settings":"帐号设定","sidepanel_title_archive":"已存档会话","sidepanel_title_blocked":"被阻止的聊天","sidepanel_title_cred":"确认凭据","sidepanel_title_login":"登录","sidepanel_title_newtpk":"开始新会话","sidepanel_title_register":"创建账户","sidepanel_title_reset":"重置密码","sidepanel_title_settings":"设置","stay_logged_in":"保持登录","tabtitle_find_user":"搜索","tabtitle_group_by_id":"通过 id","tabtitle_new_group":"新群组","tags_editor_no_tags":"添加一些标签","tags_not_found":"尚未定义标签。添加一些。","title_all_contacts":"全部联系人","title_group_members":"群组成员","title_manage_tags":"管理标签","title_not_found":"无法找到","title_permissions":"权限","title_tag_manager":"标签(用户发现)","topic_block_warning":"您确定要阻止此对话吗?","topic_delete_warning":"您确定要删除此对话吗?","topic_name_editing_placeholder":"群组自由格式名称","unnamed_topic":"未命名","update_available":"更新可用。","upload_finishing":"正在结束...","user_not_found":"未找到","description_editing_placeholder":"说明(可选)","label_description":"说明","button_security":"安全","panel_title_crop":"拖动调整","panel_title_general":"常用设定","panel_title_members":"成员","panel_title_security":"安全","panel_title_info":"信息","permissions_anonymous":"匿名","permissions_authenticated":"已认证","topic_delete":"删除聊天","permissions_user":"用户权限","password_reset_email_sent":"已发送一封带有安全代码的电子邮件。","label_unarchive_topic":"存档:","menu_item_reply":"回复","menu_item_forward":"重定向","forward_to":"重定向消息","forward_to_search_placeholder":"搜索联系人","label_new_password":"新密码","drafty_unknown":"不支持","calls_incoming":"来电","calls_outgoing":"拨出电话","calls_you_label":"你","menu_item_video_call":"视频电话","already_in_call":"你已经在说话了!","call_cancelled":"取消","call_missed":"未接","call_declined":"被拒","call_disconnected":"断开连接","label_use_secure_connection":"使用安全连接","cred_confirmed_successfully":"确认成功","menu_item_edit":"编辑","editing_message":"编辑","message_edited_marker":",编辑","icon_title_add_image":"添加图片","icon_title_attach_file":"附加文件","icon_title_delete":"删除录音","icon_title_pause":"暂停播放","icon_title_play":"播放录音","icon_title_record_voice":"录制语音信息","icon_title_resume":"恢复播放","icon_title_send":"发信息","drag_file":"将文件拖到这里","drafty_video":"视频录制","call_in_progress":"通话中","menu_item_audio_call":"称呼","unrecognized_video_format":"无法识别此视频的格式","loading_note":"加载中...","password_i_have_code":"我有代码","label_reset_password_tel":"发送短信重置密码","mobile_phone_number":"手机号","password_reset_sms_sent":"已发送带有安全代码的短信。","mobile_number_required":"需要手机号","current_email":"当前邮箱","current_phone":"当前电话号码","new_email":"新电子邮件地址","new_phone_number":"新电话号码","change_email":"更改邮箱","change_phone":"更改电话号码","call_busy":"忙碌的","failed_to_init_audio":"初始化录音失败","password_reset_success":"密码重置成功"}')}}]);
\ No newline at end of file
diff --git a/umd/734.prod.js b/umd/734.prod.js
index 7aa621d3..65c4b6d2 100644
--- a/umd/734.prod.js
+++ b/umd/734.prod.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[734],{3734:e=>{e.exports=JSON.parse('{"action_block_contact":"Заблокировать контакт","action_cancel":"отменить","action_clear_messages":"Удалить сообщения","action_delete_messages":"Удалить сообщения","action_leave_chat":"Уйти из чата","action_report_chat":"Сообщить о нарушении","archived_contacts":"Чаты в архиве ({count})","badge_danger":"Подозрительный","badge_owner":"влад.","badge_staff":"Администрация","badge_verified":"Верифицированный","badge_you":"вы","block_contact_warning":"Вы действительно заблокировать этот контакт?","blocked_contacts_link":"Заблокированные ({count})","button_add_members":"Добавить","button_cancel":"Отменить","button_confirm":"Подтвердить","button_create":"Создать","button_delete_account":"Удалить аккаунт","button_edit":"Изменить","button_logout":"Выйти","button_ok":"OK","button_reset":"Изменить","button_send_request":"Отправить","button_sign_in":"Войти","button_sign_up":"Создать аккаунт","button_subscribe":"Подписаться","button_update":"Применить","cannot_initiate_file_upload":"Ошибка загрузки файла.","channel":"канал","channel_prompt":"Создать канал","chat_invitation":"Вас пригласили начать новый чат. Как вы хотите поступить?","chat_invitation_accept":"Принять","chat_invitation_block":"Заблокировать","chat_invitation_ignore":"Игнорировать","clear_messages_warning":"Вы действительно хотите удалить все сообщения в чате? Их будет невозможно восстановить.","code_doesnot_match":"Код не совпадает","contacts_not_found":"Чатов нет
¯∖_(ツ)_/¯","contacts_not_found_short":"Нет контактов для запроса \'\'{query}\'\'","credential_email_prompt":"Регистрационный емейл","delete_account":"Удалить аккаунт","delete_account_warning":"Вы уверены, что ходите удалить свой аккаунт? Его невозможно будет восстановить.","delete_messages_warning":"Вы действительно хотите удалить все сообщения?","download_action":"скачать","drafty_attachment":"Аттачмент","drafty_form":"Форма:","drafty_image":"Картинка","email_dative":"емейлу","email_prompt":"Email, напр. ivan@example.com","enable_peers_messaging":"Разблокировать.","enter_confirmation_code_prompt":"Код подтверждения, полученный по {method}:","error_invalid_id":"Неверный ID","file_attachment_too_large":"Размер файла {size} превышает {limit} лимит.","forgot_password_link":"Напомнить пароль","full_name_prompt":"Полное имя, напр. Иван Петров","granted_permissions":"Получены","group_has_no_members":"Нет участников","group_user_id_prompt":"ID чата или пользователя","image_caption_prompt":"Подпись к фото","invalid_content":"сообщение не читается","invalid_security_token":"Токен некорректен","label_client":"Клиент:","label_content_type":"Тип:","label_default_access_mode":"Доступ по умолчанию:","label_file_name":"Имя файла:","label_group_members":"Участники чата:","label_incognito_mode":"Режим инкогнито:","label_message_sound":"Звук нового сообщения:","label_muting_topic":"Без уведомлений","label_other_user":"Второй","label_password":"Пароль","label_permissions":"Права доступа:","label_private":"Комментарий","label_push_notifications":"Уведомления:","label_push_notifications_disabled":"Уведомления (требуют HTTPS):","label_reset_password":"Отправить емейл для смены пароля:","label_sdk":"SDK:","label_server":"Сервер:","label_server_address":"Адрес сервера:","label_server_to_use":"Использовать сервер:","label_size":"Размер:","label_topic_name":"Название","label_user_contacts":"Конакты","label_user_id":"ID:","label_wire_transport":"Соединение:","label_you":"Вы:","label_your_name":"Ваше имя","label_your_permissions":"Ваши права доступа:","last_seen_timestamp":"Был активен","leave_chat_warning":"Вы действительно хотите покинуть этот чат?","link_contact_us":"Связаться с нами","link_privacy_policy":"Политика конфиденциальности","link_terms_of_service":"Условия сервиса","login_prompt":"Логин","menu_item_archive_topic":"В архив","menu_item_block":"Заблокировать","menu_item_clear_messages":"Удалить сообщения","menu_item_clear_messages_for_all":"Удалить для всех","menu_item_delete":"Удалить","menu_item_delete_for_all":"Удалить для всех","menu_item_delete_topic":"Удалить чат","menu_item_edit_permissions":"Права доступа","menu_item_info":"Информация","menu_item_member_delete":"Отписать","menu_item_mute":"Не уведомлять","menu_item_restore_topic":"Разархивировать","menu_item_send_retry":"Отправить заново","menu_item_unblock":"Разблокировать","menu_item_unmute":"Уведомлять","message_sending":"в пути...","message_sending_failed":"ошибка","messages_not_readable":"нет доступа к сообщениям","messaging_disabled_prompt":"Отправка недоступна","more_online_members":"+еще {overflow}","new_message_prompt":"Новое сообщение","new_password_placeholder":"Введите новый пароль","no_connection":"Нет связи","no_contacts":"Ничего нет :-(","numeric_confirmation_code_prompt":"Только цифры","online_now":"онлайн","password_prompt":"Пароль","password_unchanged_prompt":"Не изменен","peers_messaging_disabled":"Чат заблокирован у корреспондента.","permission_admin":"Подтверждать ({val})","permission_delete":"Удалять ({val})","permission_join":"Подписываться ({val})","permission_owner":"Владелец ({val})","permission_pres":"Уведомлять ({val})","permission_read":"Читать ({val})","permission_share":"Приглашать ({val})","permission_write":"Писать ({val})","phone_dative":"телефону","private_editing_placeholder":"Виден только вам","push_init_failed":"Ошибка инициализации пуш уведомлений","reconnect_countdown":"Нет связи. Подключение через {seconds}…","reconnect_now":"Подключить сейчас.","reload_update":"Обновить","report_chat_warning":"Вы действительно хотите сообщить о нарушении и заблокировать этот чат?","requested_permissions":"Требуются","save_attachment":"сохранить","search_for_contacts":"Поиск контактов","search_no_results":"Ничего не найдено","search_placeholder":"Список, напр. email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"Уведомления","sidepanel_title_acc_support":"Поддержка","sidepanel_title_account_settings":"Настройки аккаунта","sidepanel_title_archive":"Архив чатов","sidepanel_title_blocked":"Заблокированные чаты","sidepanel_title_cred":"Подтвердить","sidepanel_title_login":"Авторизация","sidepanel_title_newtpk":"Новый чат","sidepanel_title_register":"Зарегистрироваться","sidepanel_title_reset":"Сменить пароль","sidepanel_title_settings":"Настройки","stay_logged_in":"Запомнить","tabtitle_find_user":"найти","tabtitle_group_by_id":"по id","tabtitle_new_group":"создать","tags_editor_no_tags":"Добавьте теги","tags_not_found":"Тегов нет. Добавьте.","title_all_contacts":"Все контакты","title_group_members":"Участники","title_manage_tags":"Редактировать","title_not_found":"Не найден","title_permissions":"Права доступа","title_tag_manager":"Теги для поиска","topic_block_warning":"Вы действительно хотите заблокировать этот чат?","topic_delete_warning":"Вы действительно хотите удалить этот чат?","topic_name_editing_placeholder":"Название чата","unnamed_topic":"Без названия","update_available":"Есть новая версия приложения.","upload_finishing":"завершение...","user_not_found":"Не найден","description_editing_placeholder":"Описание (не обязательно)","label_description":"Описание","button_security":"Безопасность","panel_title_crop":"Обрезать картинку","panel_title_general":"Общие настройки","panel_title_members":"Участники","panel_title_security":"Безопасность","panel_title_info":"Подробности","permissions_anonymous":"Анонимный","permissions_authenticated":"Авторизованный","topic_delete":"Удалить чат","permissions_user":"Права доступа","password_reset_email_sent":"Сообщение было отправлено на указанный email.","label_unarchive_topic":"Архивирован:","menu_item_reply":"Ответить","menu_item_forward":"Переслать","forward_to":"Переслать","forward_to_search_placeholder":"Поиск контактов","label_new_password":"Новый пароль","drafty_unknown":"Не поддерживается","calls_incoming":"Входящий звонок","calls_outgoing":"Исходящий звонок","calls_you_label":"Вы","menu_item_video_call":"Видеозвонок","already_in_call":"Вы уже звоните кому-то!","call_cancelled":"отменен","call_missed":"пропущен","call_declined":"отклонен","call_disconnected":"разъединен","label_use_secure_connection":"Безопасное соединение","cred_confirmed_successfully":"Подтверждено успешно","menu_item_edit":"Изменить","editing_message":"Редактирование","message_edited_marker":", изменено","icon_title_add_image":"Добавить изображение","icon_title_attach_file":"Прикрепить файл","icon_title_delete":"Удалить запись","icon_title_pause":"Пауза воспроизведения","icon_title_play":"Воспроизвести запись","icon_title_record_voice":"Записать голосовое сообщение","icon_title_resume":"Продолжить","icon_title_send":"Отправить сообщение","drag_file":"Перетащите файл сюда","drafty_video":"Видеозапись","call_in_progress":"в процессе","menu_item_audio_call":"Позвонить","unrecognized_video_format":"Неизвестный формат видео файла","loading_note":"Загружается...","password_i_have_code":"У меня есть код","label_reset_password_tel":"Отправить SMS для сброса пароля","mobile_phone_number":"Номер мобильного телефона","password_reset_sms_sent":"SMS с защитным кодом отправлен.","mobile_number_required":"Номер мобильного телефона","current_email":"Текущий e-mail","current_phone":"Текущий номер телефона","new_email":"Новый e-mail","new_phone_number":"Новый номер телефона","change_email":"Изменить e-mail","change_phone":"Изменить номер телефона","call_busy":"занято","failed_to_init_audio":"Не удалось инициализировать аудиозапись"}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[734],{3734:e=>{e.exports=JSON.parse('{"action_block_contact":"Заблокировать контакт","action_cancel":"отменить","action_clear_messages":"Удалить сообщения","action_delete_messages":"Удалить сообщения","action_leave_chat":"Уйти из чата","action_report_chat":"Сообщить о нарушении","archived_contacts":"Чаты в архиве ({count})","badge_danger":"Подозрительный","badge_owner":"влад.","badge_staff":"Администрация","badge_verified":"Верифицированный","badge_you":"вы","block_contact_warning":"Вы действительно заблокировать этот контакт?","blocked_contacts_link":"Заблокированные ({count})","button_add_members":"Добавить","button_cancel":"Отменить","button_confirm":"Подтвердить","button_create":"Создать","button_delete_account":"Удалить аккаунт","button_edit":"Изменить","button_logout":"Выйти","button_ok":"OK","button_reset":"Изменить","button_send_request":"Отправить","button_sign_in":"Войти","button_sign_up":"Создать аккаунт","button_subscribe":"Подписаться","button_update":"Применить","cannot_initiate_file_upload":"Ошибка загрузки файла.","channel":"канал","channel_prompt":"Создать канал","chat_invitation":"Вас пригласили начать новый чат. Как вы хотите поступить?","chat_invitation_accept":"Принять","chat_invitation_block":"Заблокировать","chat_invitation_ignore":"Игнорировать","clear_messages_warning":"Вы действительно хотите удалить все сообщения в чате? Их будет невозможно восстановить.","code_doesnot_match":"Код не совпадает","contacts_not_found":"Чатов нет
¯∖_(ツ)_/¯","contacts_not_found_short":"Нет контактов для запроса \'\'{query}\'\'","credential_email_prompt":"Регистрационный емейл","delete_account":"Удалить аккаунт","delete_account_warning":"Вы уверены, что ходите удалить свой аккаунт? Его невозможно будет восстановить.","delete_messages_warning":"Вы действительно хотите удалить все сообщения?","download_action":"скачать","drafty_attachment":"Аттачмент","drafty_form":"Форма:","drafty_image":"Картинка","email_dative":"емейлу","email_prompt":"Email, напр. ivan@example.com","enable_peers_messaging":"Разблокировать.","enter_confirmation_code_prompt":"Код подтверждения, полученный по {method}:","error_invalid_id":"Неверный ID","file_attachment_too_large":"Размер файла {size} превышает {limit} лимит.","forgot_password_link":"Напомнить пароль","full_name_prompt":"Полное имя, напр. Иван Петров","granted_permissions":"Получены","group_has_no_members":"Нет участников","group_user_id_prompt":"ID чата или пользователя","image_caption_prompt":"Подпись к фото","invalid_content":"сообщение не читается","invalid_security_token":"Токен некорректен","label_client":"Клиент:","label_content_type":"Тип:","label_default_access_mode":"Доступ по умолчанию:","label_file_name":"Имя файла:","label_group_members":"Участники чата:","label_incognito_mode":"Режим инкогнито:","label_message_sound":"Звук нового сообщения:","label_muting_topic":"Без уведомлений","label_other_user":"Второй","label_password":"Пароль","label_permissions":"Права доступа:","label_private":"Комментарий","label_push_notifications":"Уведомления:","label_push_notifications_disabled":"Уведомления (требуют HTTPS):","label_reset_password":"Отправить емейл для смены пароля:","label_sdk":"SDK:","label_server":"Сервер:","label_server_address":"Адрес сервера:","label_server_to_use":"Использовать сервер:","label_size":"Размер:","label_topic_name":"Название","label_user_contacts":"Конакты","label_user_id":"ID:","label_wire_transport":"Соединение:","label_you":"Вы:","label_your_name":"Ваше имя","label_your_permissions":"Ваши права доступа:","last_seen_timestamp":"Был активен","leave_chat_warning":"Вы действительно хотите покинуть этот чат?","link_contact_us":"Связаться с нами","link_privacy_policy":"Политика конфиденциальности","link_terms_of_service":"Условия сервиса","login_prompt":"Логин","menu_item_archive_topic":"В архив","menu_item_block":"Заблокировать","menu_item_clear_messages":"Удалить сообщения","menu_item_clear_messages_for_all":"Удалить для всех","menu_item_delete":"Удалить","menu_item_delete_for_all":"Удалить для всех","menu_item_delete_topic":"Удалить чат","menu_item_edit_permissions":"Права доступа","menu_item_info":"Информация","menu_item_member_delete":"Отписать","menu_item_mute":"Не уведомлять","menu_item_restore_topic":"Разархивировать","menu_item_send_retry":"Отправить заново","menu_item_unblock":"Разблокировать","menu_item_unmute":"Уведомлять","message_sending":"в пути...","message_sending_failed":"ошибка","messages_not_readable":"нет доступа к сообщениям","messaging_disabled_prompt":"Отправка недоступна","more_online_members":"+еще {overflow}","new_message_prompt":"Новое сообщение","new_password_placeholder":"Введите новый пароль","no_connection":"Нет связи","no_contacts":"Ничего нет :-(","numeric_confirmation_code_prompt":"Только цифры","online_now":"онлайн","password_prompt":"Пароль","password_unchanged_prompt":"Не изменен","peers_messaging_disabled":"Чат заблокирован у корреспондента.","permission_admin":"Подтверждать ({val})","permission_delete":"Удалять ({val})","permission_join":"Подписываться ({val})","permission_owner":"Владелец ({val})","permission_pres":"Уведомлять ({val})","permission_read":"Читать ({val})","permission_share":"Приглашать ({val})","permission_write":"Писать ({val})","phone_dative":"телефону","private_editing_placeholder":"Виден только вам","push_init_failed":"Ошибка инициализации пуш уведомлений","reconnect_countdown":"Нет связи. Подключение через {seconds}…","reconnect_now":"Подключить сейчас.","reload_update":"Обновить","report_chat_warning":"Вы действительно хотите сообщить о нарушении и заблокировать этот чат?","requested_permissions":"Требуются","save_attachment":"сохранить","search_for_contacts":"Поиск контактов","search_no_results":"Ничего не найдено","search_placeholder":"Список, напр. email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"Уведомления","sidepanel_title_acc_support":"Поддержка","sidepanel_title_account_settings":"Настройки аккаунта","sidepanel_title_archive":"Архив чатов","sidepanel_title_blocked":"Заблокированные чаты","sidepanel_title_cred":"Подтвердить","sidepanel_title_login":"Авторизация","sidepanel_title_newtpk":"Новый чат","sidepanel_title_register":"Зарегистрироваться","sidepanel_title_reset":"Сменить пароль","sidepanel_title_settings":"Настройки","stay_logged_in":"Запомнить","tabtitle_find_user":"найти","tabtitle_group_by_id":"по id","tabtitle_new_group":"создать","tags_editor_no_tags":"Добавьте теги","tags_not_found":"Тегов нет. Добавьте.","title_all_contacts":"Все контакты","title_group_members":"Участники","title_manage_tags":"Редактировать","title_not_found":"Не найден","title_permissions":"Права доступа","title_tag_manager":"Теги для поиска","topic_block_warning":"Вы действительно хотите заблокировать этот чат?","topic_delete_warning":"Вы действительно хотите удалить этот чат?","topic_name_editing_placeholder":"Название чата","unnamed_topic":"Без названия","update_available":"Есть новая версия приложения.","upload_finishing":"завершение...","user_not_found":"Не найден","description_editing_placeholder":"Описание (не обязательно)","label_description":"Описание","button_security":"Безопасность","panel_title_crop":"Обрезать картинку","panel_title_general":"Общие настройки","panel_title_members":"Участники","panel_title_security":"Безопасность","panel_title_info":"Подробности","permissions_anonymous":"Анонимный","permissions_authenticated":"Авторизованный","topic_delete":"Удалить чат","permissions_user":"Права доступа","password_reset_email_sent":"Сообщение было отправлено на указанный email.","label_unarchive_topic":"Архивирован:","menu_item_reply":"Ответить","menu_item_forward":"Переслать","forward_to":"Переслать","forward_to_search_placeholder":"Поиск контактов","label_new_password":"Новый пароль","drafty_unknown":"Не поддерживается","calls_incoming":"Входящий звонок","calls_outgoing":"Исходящий звонок","calls_you_label":"Вы","menu_item_video_call":"Видеозвонок","already_in_call":"Вы уже звоните кому-то!","call_cancelled":"отменен","call_missed":"пропущен","call_declined":"отклонен","call_disconnected":"разъединен","label_use_secure_connection":"Безопасное соединение","cred_confirmed_successfully":"Подтверждено успешно","menu_item_edit":"Изменить","editing_message":"Редактирование","message_edited_marker":", изменено","icon_title_add_image":"Добавить изображение","icon_title_attach_file":"Прикрепить файл","icon_title_delete":"Удалить запись","icon_title_pause":"Пауза воспроизведения","icon_title_play":"Воспроизвести запись","icon_title_record_voice":"Записать голосовое сообщение","icon_title_resume":"Продолжить","icon_title_send":"Отправить сообщение","drag_file":"Перетащите файл сюда","drafty_video":"Видеозапись","call_in_progress":"в процессе","menu_item_audio_call":"Позвонить","unrecognized_video_format":"Неизвестный формат видео файла","loading_note":"Загружается...","password_i_have_code":"У меня есть код","label_reset_password_tel":"Отправить SMS для сброса пароля","mobile_phone_number":"Номер мобильного телефона","password_reset_sms_sent":"SMS с защитным кодом отправлен.","mobile_number_required":"Номер мобильного телефона","current_email":"Текущий e-mail","current_phone":"Текущий номер телефона","new_email":"Новый e-mail","new_phone_number":"Новый номер телефона","change_email":"Изменить e-mail","change_phone":"Изменить номер телефона","call_busy":"занято","failed_to_init_audio":"Не удалось инициализировать аудиозапись","password_reset_success":"Пароль успешно изменен"}')}}]);
\ No newline at end of file
diff --git a/umd/817.prod.js b/umd/817.prod.js
index ba7a5a5e..c6808e54 100644
--- a/umd/817.prod.js
+++ b/umd/817.prod.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[817],{4817:e=>{e.exports=JSON.parse('{"action_block_contact":"Blochează contact","action_cancel":"anulează","action_clear_messages":"Șterge mesajele","action_delete_messages":"Șterge toate mesajele","action_leave_chat":"Ieși din conversație","action_report_chat":"Raportează conversația","archived_contacts":"Contacte arhivate ({count})","badge_danger":"Suspicios","badge_owner":"owner","badge_staff":"Administrare","badge_verified":"Verificat","badge_you":"tu","block_contact_warning":"Ești sigur că dorești să blochezi acest contact?","blocked_contacts_link":"Contact blocate ({count})","button_add_members":"Adaugă persoane","button_cancel":"Anulează","button_confirm":"Confirmă","button_create":"Creează","button_delete_account":"Șterge cont","button_edit":"Editează","button_logout":"Deconectare","button_ok":"OK","button_reset":"Resetează","button_send_request":"Trimite cerere","button_sign_in":"Conectează-te","button_sign_up":"Creează cont","button_subscribe":"Subscribe","button_update":"Actualizează","cannot_initiate_file_upload":"Nu se poate face încărcarea.","channel":"canal","channel_prompt":"Acesta este un canal","chat_invitation":"Ai primit invitație într-o conversație. Accepți?","chat_invitation_accept":"Da, accept","chat_invitation_block":"Blochează","chat_invitation_ignore":"Ignoră","clear_messages_warning":"Ești sigur că dorești să ștergi mesajele? Acestea nu pot fi recuperate.","code_doesnot_match":"Codul furnizat nu este valid","contacts_not_found":"Nu ai contacte salvate
¯∖_(ツ)_/¯","contacts_not_found_short":"Niciun contact găsit după criteriile \'\'{query}\'\'","credential_email_prompt":"Adresa de e-mail","delete_account":"Șterge contul","delete_account_warning":"Ești sigur că dorești să ștergi contul? Acesta nu va putea fi recuperat.","delete_messages_warning":"Ești sigur că dorești să șterge mesajele din toate conversațiile? Acestea nu pot fi recuperate.","download_action":"download","drafty_attachment":"Atasament","drafty_form":"Formă:","drafty_image":"Imagine","email_dative":"email","email_prompt":"Adresa de e-mail","enable_peers_messaging":"Activează","enter_confirmation_code_prompt":"Introu codul de confirmare trimis pe {method}:","error_invalid_id":"ID Invalid","file_attachment_too_large":"Dimensiunea fișiterului {size} depășește limita de {limit}.","forgot_password_link":"Ți-ai uitat parola?","full_name_prompt":"Numele tău","granted_permissions":"Oferite","group_has_no_members":"În acest grup nu se află persoane","group_user_id_prompt":"Grup sau user ID","image_caption_prompt":"Titlul imaginii","invalid_content":"conținut invalid","invalid_security_token":"Codul de securitate este invalid","label_client":"Client:","label_content_type":"Tip conținut:","label_default_access_mode":"Default access mode:","label_file_name":"Nume fișier:","label_group_members":"Membrii grupului:","label_incognito_mode":"Mod incognito:","label_message_sound":"Sunet de mesaj:","label_muting_topic":"Mod silențios (muted):","label_other_user":"Altele","label_password":"Parola","label_permissions":"Permisiuni:","label_private":"Comentariu privat","label_push_notifications":"Alerte de notificare:","label_push_notifications_disabled":"Alerte de notificare (necesită HTTPS):","label_reset_password":"Resetează parola:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Adresa serverului:","label_server_to_use":"Server de utilizat:","label_size":"Size:","label_topic_name":"Nume","label_user_contacts":"Contacte","label_user_id":"ID:","label_wire_transport":"Transportul legat:","label_you":"Tu:","label_your_name":"Numele tău","label_your_permissions":"Permisiuniile tale:","last_seen_timestamp":"Văzut ultima dată","leave_chat_warning":"Ești sigur că dorești să ieși din conersație?","link_contact_us":"Contactează-ne","link_privacy_policy":"Politica de Confidențialitate","link_terms_of_service":"Termenii Serviciului","login_prompt":"Conectează-te","menu_item_archive_topic":"Arhivează","menu_item_block":"Blochează","menu_item_clear_messages":"Șterge mesajele","menu_item_clear_messages_for_all":"Ștergele pe toate","menu_item_delete":"Șterge","menu_item_delete_for_all":"Ștergele pe toate","menu_item_delete_topic":"Șterge","menu_item_edit_permissions":"Editează permisiuni","menu_item_info":"Info","menu_item_member_delete":"Șterge persoană","menu_item_mute":"Mute","menu_item_restore_topic":"Restabili","menu_item_send_retry":"Reîncearcă","menu_item_unblock":"Deblochează","menu_item_unmute":"Unmute","message_sending":"se trimite...","message_sending_failed":"eroare","messages_not_readable":"Mesajele nu pot fi citite","messaging_disabled_prompt":"Mesageria este dezactivată","more_online_members":"+{overflow} mai mult","new_message_prompt":"Mesaj nou","new_password_placeholder":"Introdu parolă","no_connection":"Nu există conexiune","no_contacts":"Nu ai contacte adăugate :-(","numeric_confirmation_code_prompt":"Doar cifre","online_now":"online acum","password_prompt":"Parola","password_unchanged_prompt":"Neschimbată","peers_messaging_disabled":"Mesageria de tip Peer este dezactivată.","permission_admin":"Aprobare ({val})","permission_delete":"Ștergere ({val})","permission_join":"Participare ({val})","permission_owner":"Deținător ({val})","permission_pres":"Notificare ({val})","permission_read":"Citire ({val})","permission_share":"Distribuire ({val})","permission_write":"Scriere ({val})","phone_dative":"telefon","private_editing_placeholder":"Vizibil doar ție","push_init_failed":"Nu s-a reușit inițializarea tip push notifications","reconnect_countdown":"Deconectat. Se încearcă conectarea în {seconds}…","reconnect_now":"Încearcă din nou","reload_update":"Reîncarcă","report_chat_warning":"Ești sigur că dorești să blochezi și să raportezi această conversație?","requested_permissions":"Necesare","save_attachment":"salvează","search_for_contacts":"Caută în contacte","search_no_results":"Nu s-au găsit rezultate","search_placeholder":"Caută după e-mail sau număr telefon...","sidepanel_title_acc_notifications":"Notificări","sidepanel_title_acc_support":"Ajutor","sidepanel_title_account_settings":"Setările Contului","sidepanel_title_archive":"Conversații Arhivate","sidepanel_title_blocked":"Conversații Blocate","sidepanel_title_cred":"Confirmă credențiale","sidepanel_title_login":"Conectează-te","sidepanel_title_newtpk":"Creeză un nou Chat","sidepanel_title_register":"Creează Cont","sidepanel_title_reset":"Resetează Parola","sidepanel_title_settings":"Setări","stay_logged_in":"Rămâi conectat","tabtitle_find_user":"caută","tabtitle_group_by_id":"după id","tabtitle_new_group":"grup nou","tags_editor_no_tags":"Adaugă tag-uri","tags_not_found":"Niciun tag definit. Adaugă.","title_all_contacts":"Toate Contactele","title_group_members":"Persoanele din grup","title_manage_tags":"Administrează","title_not_found":"Nu a fost găsit","title_permissions":"Permisiuni","title_tag_manager":"Tag-uri (user discovery)","topic_block_warning":"Ești sigur că dorești să blochezi această conversație?","topic_delete_warning":"Ești sigur că dorești să șterge această conversație?","topic_name_editing_placeholder":"Numele grupului","unnamed_topic":"Nedenumit","update_available":"Actualizare disponibilă.","upload_finishing":"se încarcă...","user_not_found":"Utilizatorul nu a fost găsit","description_editing_placeholder":"Descriere (opțional)","label_description":"Descriere","button_security":"Securitate","panel_title_crop":"Trageți pentru a ajusta","panel_title_general":"Generale","panel_title_members":"Membri","panel_title_security":"Securitate","panel_title_info":"Info","permissions_anonymous":"Anonim","permissions_authenticated":"Autentificat","topic_delete":"Ștergeți Chat","permissions_user":"Permisiunile utilizatorului","password_reset_email_sent":"A fost trimis un e-mail cu cod de securitate.","label_unarchive_topic":"Arhivat:","menu_item_reply":"A raspunde","menu_item_forward":"Redirecţiona","forward_to":"Redirecționați către","forward_to_search_placeholder":"Căutați contacte","label_new_password":"Parolă Nouă","drafty_unknown":"Neacceptat","calls_incoming":"Apel primit","calls_outgoing":"Apel efectuat","calls_you_label":"Tu","menu_item_video_call":"Apel video","already_in_call":"Deja vorbesti!","call_cancelled":"anulat","call_missed":"pierdut","call_declined":"refuzat","call_disconnected":"deconectat","label_use_secure_connection":"Utilizați conexiune securizată","cred_confirmed_successfully":"Confirmat cu succes","menu_item_edit":"Editează","editing_message":"Editare","message_edited_marker":", editat","icon_title_add_image":"Adauga imagine","icon_title_attach_file":"Ataseaza fisier","icon_title_delete":"Ștergeți înregistrarea","icon_title_pause":"Întrerupeți redarea","icon_title_play":"Redați înregistrarea","icon_title_record_voice":"Înregistrați mesajul vocal","icon_title_resume":"Reluați redarea","icon_title_send":"Trimite mesaj","drag_file":"Trageți fișierul aici","drafty_video":"Înregistrare video","call_in_progress":"în curs","menu_item_audio_call":"Apel","unrecognized_video_format":"Formatul acestui videoclip nu este recunoscut","loading_note":"Se încarcă...","password_i_have_code":"Am cod","label_reset_password_tel":"Trimite SMS pentru a reseta parola","mobile_phone_number":"Număr de telefon mobil","password_reset_sms_sent":"A fost trimis un mesaj text cu cod de securitate.","mobile_number_required":"Este necesar un număr de telefon mobil","current_email":"E-mail curent","current_phone":"Număr de telefon actual","new_email":"E-mail nou","new_phone_number":"Număr de telefon nou","change_email":"Schimbați adresa de e-mail","change_phone":"Schimbați numărul de telefon","call_busy":"ocupat","failed_to_init_audio":"Inițializarea înregistrării audio a eșuat"}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[817],{4817:e=>{e.exports=JSON.parse('{"action_block_contact":"Blochează contact","action_cancel":"anulează","action_clear_messages":"Șterge mesajele","action_delete_messages":"Șterge toate mesajele","action_leave_chat":"Ieși din conversație","action_report_chat":"Raportează conversația","archived_contacts":"Contacte arhivate ({count})","badge_danger":"Suspicios","badge_owner":"owner","badge_staff":"Administrare","badge_verified":"Verificat","badge_you":"tu","block_contact_warning":"Ești sigur că dorești să blochezi acest contact?","blocked_contacts_link":"Contact blocate ({count})","button_add_members":"Adaugă persoane","button_cancel":"Anulează","button_confirm":"Confirmă","button_create":"Creează","button_delete_account":"Șterge cont","button_edit":"Editează","button_logout":"Deconectare","button_ok":"OK","button_reset":"Resetează","button_send_request":"Trimite cerere","button_sign_in":"Conectează-te","button_sign_up":"Creează cont","button_subscribe":"Subscribe","button_update":"Actualizează","cannot_initiate_file_upload":"Nu se poate face încărcarea.","channel":"canal","channel_prompt":"Acesta este un canal","chat_invitation":"Ai primit invitație într-o conversație. Accepți?","chat_invitation_accept":"Da, accept","chat_invitation_block":"Blochează","chat_invitation_ignore":"Ignoră","clear_messages_warning":"Ești sigur că dorești să ștergi mesajele? Acestea nu pot fi recuperate.","code_doesnot_match":"Codul furnizat nu este valid","contacts_not_found":"Nu ai contacte salvate
¯∖_(ツ)_/¯","contacts_not_found_short":"Niciun contact găsit după criteriile \'\'{query}\'\'","credential_email_prompt":"Adresa de e-mail","delete_account":"Șterge contul","delete_account_warning":"Ești sigur că dorești să ștergi contul? Acesta nu va putea fi recuperat.","delete_messages_warning":"Ești sigur că dorești să șterge mesajele din toate conversațiile? Acestea nu pot fi recuperate.","download_action":"download","drafty_attachment":"Atasament","drafty_form":"Formă:","drafty_image":"Imagine","email_dative":"email","email_prompt":"Adresa de e-mail","enable_peers_messaging":"Activează","enter_confirmation_code_prompt":"Introu codul de confirmare trimis pe {method}:","error_invalid_id":"ID Invalid","file_attachment_too_large":"Dimensiunea fișiterului {size} depășește limita de {limit}.","forgot_password_link":"Ți-ai uitat parola?","full_name_prompt":"Numele tău","granted_permissions":"Oferite","group_has_no_members":"În acest grup nu se află persoane","group_user_id_prompt":"Grup sau user ID","image_caption_prompt":"Titlul imaginii","invalid_content":"conținut invalid","invalid_security_token":"Codul de securitate este invalid","label_client":"Client:","label_content_type":"Tip conținut:","label_default_access_mode":"Default access mode:","label_file_name":"Nume fișier:","label_group_members":"Membrii grupului:","label_incognito_mode":"Mod incognito:","label_message_sound":"Sunet de mesaj:","label_muting_topic":"Mod silențios (muted):","label_other_user":"Altele","label_password":"Parola","label_permissions":"Permisiuni:","label_private":"Comentariu privat","label_push_notifications":"Alerte de notificare:","label_push_notifications_disabled":"Alerte de notificare (necesită HTTPS):","label_reset_password":"Resetează parola:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Adresa serverului:","label_server_to_use":"Server de utilizat:","label_size":"Size:","label_topic_name":"Nume","label_user_contacts":"Contacte","label_user_id":"ID:","label_wire_transport":"Transportul legat:","label_you":"Tu:","label_your_name":"Numele tău","label_your_permissions":"Permisiuniile tale:","last_seen_timestamp":"Văzut ultima dată","leave_chat_warning":"Ești sigur că dorești să ieși din conersație?","link_contact_us":"Contactează-ne","link_privacy_policy":"Politica de Confidențialitate","link_terms_of_service":"Termenii Serviciului","login_prompt":"Conectează-te","menu_item_archive_topic":"Arhivează","menu_item_block":"Blochează","menu_item_clear_messages":"Șterge mesajele","menu_item_clear_messages_for_all":"Ștergele pe toate","menu_item_delete":"Șterge","menu_item_delete_for_all":"Ștergele pe toate","menu_item_delete_topic":"Șterge","menu_item_edit_permissions":"Editează permisiuni","menu_item_info":"Info","menu_item_member_delete":"Șterge persoană","menu_item_mute":"Mute","menu_item_restore_topic":"Restabili","menu_item_send_retry":"Reîncearcă","menu_item_unblock":"Deblochează","menu_item_unmute":"Unmute","message_sending":"se trimite...","message_sending_failed":"eroare","messages_not_readable":"Mesajele nu pot fi citite","messaging_disabled_prompt":"Mesageria este dezactivată","more_online_members":"+{overflow} mai mult","new_message_prompt":"Mesaj nou","new_password_placeholder":"Introdu parolă","no_connection":"Nu există conexiune","no_contacts":"Nu ai contacte adăugate :-(","numeric_confirmation_code_prompt":"Doar cifre","online_now":"online acum","password_prompt":"Parola","password_unchanged_prompt":"Neschimbată","peers_messaging_disabled":"Mesageria de tip Peer este dezactivată.","permission_admin":"Aprobare ({val})","permission_delete":"Ștergere ({val})","permission_join":"Participare ({val})","permission_owner":"Deținător ({val})","permission_pres":"Notificare ({val})","permission_read":"Citire ({val})","permission_share":"Distribuire ({val})","permission_write":"Scriere ({val})","phone_dative":"telefon","private_editing_placeholder":"Vizibil doar ție","push_init_failed":"Nu s-a reușit inițializarea tip push notifications","reconnect_countdown":"Deconectat. Se încearcă conectarea în {seconds}…","reconnect_now":"Încearcă din nou","reload_update":"Reîncarcă","report_chat_warning":"Ești sigur că dorești să blochezi și să raportezi această conversație?","requested_permissions":"Necesare","save_attachment":"salvează","search_for_contacts":"Caută în contacte","search_no_results":"Nu s-au găsit rezultate","search_placeholder":"Caută după e-mail sau număr telefon...","sidepanel_title_acc_notifications":"Notificări","sidepanel_title_acc_support":"Ajutor","sidepanel_title_account_settings":"Setările Contului","sidepanel_title_archive":"Conversații Arhivate","sidepanel_title_blocked":"Conversații Blocate","sidepanel_title_cred":"Confirmă credențiale","sidepanel_title_login":"Conectează-te","sidepanel_title_newtpk":"Creeză un nou Chat","sidepanel_title_register":"Creează Cont","sidepanel_title_reset":"Resetează Parola","sidepanel_title_settings":"Setări","stay_logged_in":"Rămâi conectat","tabtitle_find_user":"caută","tabtitle_group_by_id":"după id","tabtitle_new_group":"grup nou","tags_editor_no_tags":"Adaugă tag-uri","tags_not_found":"Niciun tag definit. Adaugă.","title_all_contacts":"Toate Contactele","title_group_members":"Persoanele din grup","title_manage_tags":"Administrează","title_not_found":"Nu a fost găsit","title_permissions":"Permisiuni","title_tag_manager":"Tag-uri (user discovery)","topic_block_warning":"Ești sigur că dorești să blochezi această conversație?","topic_delete_warning":"Ești sigur că dorești să șterge această conversație?","topic_name_editing_placeholder":"Numele grupului","unnamed_topic":"Nedenumit","update_available":"Actualizare disponibilă.","upload_finishing":"se încarcă...","user_not_found":"Utilizatorul nu a fost găsit","description_editing_placeholder":"Descriere (opțional)","label_description":"Descriere","button_security":"Securitate","panel_title_crop":"Trageți pentru a ajusta","panel_title_general":"Generale","panel_title_members":"Membri","panel_title_security":"Securitate","panel_title_info":"Info","permissions_anonymous":"Anonim","permissions_authenticated":"Autentificat","topic_delete":"Ștergeți Chat","permissions_user":"Permisiunile utilizatorului","password_reset_email_sent":"A fost trimis un e-mail cu cod de securitate.","label_unarchive_topic":"Arhivat:","menu_item_reply":"A raspunde","menu_item_forward":"Redirecţiona","forward_to":"Redirecționați către","forward_to_search_placeholder":"Căutați contacte","label_new_password":"Parolă Nouă","drafty_unknown":"Neacceptat","calls_incoming":"Apel primit","calls_outgoing":"Apel efectuat","calls_you_label":"Tu","menu_item_video_call":"Apel video","already_in_call":"Deja vorbesti!","call_cancelled":"anulat","call_missed":"pierdut","call_declined":"refuzat","call_disconnected":"deconectat","label_use_secure_connection":"Utilizați conexiune securizată","cred_confirmed_successfully":"Confirmat cu succes","menu_item_edit":"Editează","editing_message":"Editare","message_edited_marker":", editat","icon_title_add_image":"Adauga imagine","icon_title_attach_file":"Ataseaza fisier","icon_title_delete":"Ștergeți înregistrarea","icon_title_pause":"Întrerupeți redarea","icon_title_play":"Redați înregistrarea","icon_title_record_voice":"Înregistrați mesajul vocal","icon_title_resume":"Reluați redarea","icon_title_send":"Trimite mesaj","drag_file":"Trageți fișierul aici","drafty_video":"Înregistrare video","call_in_progress":"în curs","menu_item_audio_call":"Apel","unrecognized_video_format":"Formatul acestui videoclip nu este recunoscut","loading_note":"Se încarcă...","password_i_have_code":"Am cod","label_reset_password_tel":"Trimite SMS pentru a reseta parola","mobile_phone_number":"Număr de telefon mobil","password_reset_sms_sent":"A fost trimis un mesaj text cu cod de securitate.","mobile_number_required":"Este necesar un număr de telefon mobil","current_email":"E-mail curent","current_phone":"Număr de telefon actual","new_email":"E-mail nou","new_phone_number":"Număr de telefon nou","change_email":"Schimbați adresa de e-mail","change_phone":"Schimbați numărul de telefon","call_busy":"ocupat","failed_to_init_audio":"Inițializarea înregistrării audio a eșuat","password_reset_success":"Resetarea parolei cu succes"}')}}]);
\ No newline at end of file
diff --git a/umd/898.prod.js b/umd/898.prod.js
index 564be875..ea597306 100644
--- a/umd/898.prod.js
+++ b/umd/898.prod.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[898],{898:e=>{e.exports=JSON.parse('{"action_block_contact":"연락차단","action_cancel":"취소","action_clear_messages":"메시지지우기","action_delete_messages":"모든메시지지우기","action_leave_chat":"대화나누기","action_report_chat":"대화기록","archived_contacts":"보관된연락처({수})","badge_danger":"의심 많은","badge_owner":"소유자","badge_staff":"직원 관리하에","badge_verified":"확인 됨","badge_you":"당신","block_contact_warning":"이연락처를차단하시겠습니까?","blocked_contacts_link":"차단된연락처({수})","button_add_members":"회원추가","button_cancel":"취소","button_confirm":"확인","button_create":"작성","button_delete_account":"계정삭제","button_edit":"편집","button_logout":"로그아웃","button_ok":"OK","button_reset":"재설정","button_send_request":"요청보내기","button_sign_in":"로그인","button_sign_up":"가입","button_subscribe":"구독","button_update":"업데이트","cannot_initiate_file_upload":"파일업로드를시작할수없습니다.","channel":"채널","channel_prompt":"이 채널입니다","chat_invitation":"새로운대화를시작하도록초대되었습니다.무엇을하시겠습니까?","chat_invitation_accept":"수락","chat_invitation_block":"차단","chat_invitation_ignore":"무시","clear_messages_warning":"모든메시지를지우시겠습니까?실행취소할수없습니다.","code_doesnot_match":"코드가일치하지않습니다","contacts_not_found":"채팅이없습니다
¯∖_(ツ)_/¯","contacts_not_found_short":"\'{문의}\'와일치하는연락처가없습니다.","credential_email_prompt":"등록이메일","delete_account":"계정삭제","delete_account_warning":"계정을삭제하시겠습니까?실행취소할수없습니다.","delete_messages_warning":"모든사람의모든메시지를삭제하시겠습니까?실행취소할수없습니다.","download_action":"다운로드","drafty_attachment":"부착","drafty_form":"형태:","drafty_image":"이미지","email_dative":"이메일","email_prompt":"이메일(예:hong@example.com)","enable_peers_messaging":"활성화","enter_confirmation_code_prompt":"{방법}으로보낸확인코드를입력하십시오:","error_invalid_id":"잘못된ID","file_attachment_too_large":"파일크기{크기}이(가){제한}제한을초과합니다.","forgot_password_link":"비밀번호를잊으셨습니까?","full_name_prompt":"전체이름(예:홍길동)","granted_permissions":"승낙하다","group_has_no_members":"회원없음","group_user_id_prompt":"그룹또는사용자ID","image_caption_prompt":"이미지설명","invalid_content":"잘못된내용","invalid_security_token":"유효하지않은보안토큰","label_client":"클라이언트: ","label_content_type":"컨텐츠유형: ","label_default_access_mode":"기본액세스모드: ","label_file_name":"파일이름: ","label_group_members":"그룹회원: ","label_incognito_mode":"시크릿모드: ","label_message_sound":"메시지소리: ","label_muting_topic":"음소거: ","label_other_user":"기타","label_password":"비밀번호","label_permissions":"권한: ","label_private":"개인코멘트","label_push_notifications":"통지경보: ","label_push_notifications_disabled":"통지경보(HTTPS필요): ","label_reset_password":"비밀번호재설정이메일보내기: ","label_sdk":"SDK:","label_server":"서버: ","label_server_address":"서버주소: ","label_server_to_use":"사용할서버:","label_size":"크기: ","label_topic_name":"이름","label_user_contacts":"연락처","label_user_id":"ID:","label_wire_transport":"와이어수송:","label_you":"당신: ","label_your_name":"이름","label_your_permissions":"권한: ","last_seen_timestamp":"마지막으로본","leave_chat_warning":"이대화를나가시겠습니까?","link_contact_us":"문의처","link_privacy_policy":"개인정보보호정책","link_terms_of_service":"서비스약관","login_prompt":"로그인","menu_item_archive_topic":"보관","menu_item_block":"차단","menu_item_clear_messages":"메시지지우기","menu_item_clear_messages_for_all":"모두지우기","menu_item_delete":"삭제","menu_item_delete_for_all":"모두삭제","menu_item_delete_topic":"삭제","menu_item_edit_permissions":"편집권한","menu_item_info":"정보","menu_item_member_delete":"제거","menu_item_mute":"음소거","menu_item_restore_topic":"복원","menu_item_send_retry":"다시시도","menu_item_unblock":"차단해제","menu_item_unmute":"음소거해제","message_sending":"보내기...","message_sending_failed":"실패","messages_not_readable":"메시지에 액세스 할 수 없습니다","messaging_disabled_prompt":"메시지비활성화","more_online_members":"+{넘침}더보기","new_message_prompt":"새메시지","new_password_placeholder":"새비밀번호입력","no_connection":"연결없음","no_contacts":"연락처가없습니다 (._.)","numeric_confirmation_code_prompt":"숫자만","online_now":"현재접속중","password_prompt":"비밀번호","password_unchanged_prompt":"변경되지않음","peers_messaging_disabled":"동료의메시지가비활성화되었습니다.","permission_admin":"승인({val})","permission_delete":"삭제({val})","permission_join":"참여({val})","permission_owner":"소유자({val})","permission_pres":"알림받기({val})","permission_read":"읽기({val})","permission_share":"공유({val})","permission_write":"쓰기({val})","phone_dative":"전화","private_editing_placeholder":"나만볼수있습니다","push_init_failed":"푸시알림을초기화하지못했습니다","reconnect_countdown":"연결이끊어졌습니다.다시연결하는중{초}…","reconnect_now":"지금시도","reload_update":"재로드","report_chat_warning":"이대화를차단하고기록하시겠습니까?","requested_permissions":"요청","save_attachment":"저장","search_for_contacts":"검색을사용하여연락처찾기","search_no_results":"검색결과가없습니다","search_placeholder":"email:alice@example.com,tel:17025550003...와같은목록","sidepanel_title_acc_notifications":"알림","sidepanel_title_acc_support":"지원","sidepanel_title_account_settings":"계정설정","sidepanel_title_archive":"보관된채팅","sidepanel_title_blocked":"차단된채팅","sidepanel_title_cred":"자격증명확인","sidepanel_title_login":"로그인","sidepanel_title_newtpk":"새채팅시작","sidepanel_title_register":"계정만들기","sidepanel_title_reset":"비밀번호재설정","sidepanel_title_settings":"설정","stay_logged_in":"로그인상태유지","tabtitle_find_user":"찾기","tabtitle_group_by_id":"id로","tabtitle_new_group":"새그룹","tags_editor_no_tags":"일부태그추가","tags_not_found":"태그가정의되지않았습니다.일부를추가하십시오.","title_all_contacts":"모든연락처","title_group_members":"그룹구성원","title_manage_tags":"관리","title_not_found":"찾을수없음","title_permissions":"권한","title_tag_manager":"태그(사용자검색)","topic_block_warning":"이대화를차단하시겠습니까?","topic_delete_warning":"이대화를삭제하시겠습니까?","topic_name_editing_placeholder":"그룹의자유형이름","unnamed_topic":"이름없는","update_available":"업데이트가능.","upload_finishing":"마무리...","user_not_found":"찾을수없음","description_editing_placeholder":"설명(선택 사항)","label_description":"설명","button_security":"보안","panel_title_crop":"드래그하여 조정","panel_title_general":"일반","panel_title_members":"구성원","panel_title_security":"보안","panel_title_info":"정보","permissions_anonymous":"익명","permissions_authenticated":"인증됨","topic_delete":"채팅 삭제","permissions_user":"사용자 권한","password_reset_email_sent":"보안 코드가 포함된 이메일이 전송되었습니다.","label_unarchive_topic":"보관됨:","menu_item_reply":"회신하다","menu_item_forward":"리디렉션","forward_to":"메시지를 리디렉션","forward_to_search_placeholder":"연락처 검색","label_new_password":"새 비밀번호","drafty_unknown":"지원되지 않음","calls_incoming":"수신 전화","calls_outgoing":"발신 전화","calls_you_label":"너","menu_item_video_call":"영상 통화","already_in_call":"당신은 이미 말하고 있습니다!","call_cancelled":"취소 된","call_missed":"부재중","call_declined":"통화 거부","call_disconnected":"연결 끊김","label_use_secure_connection":"보안 연결 사용","cred_confirmed_successfully":"성공적으로 확인됨","menu_item_edit":"편집","editing_message":"교정하다","message_edited_marker":" 수정됨","icon_title_add_image":"이미지 추가","icon_title_attach_file":"파일을 첨부","icon_title_delete":"녹음 삭제","icon_title_pause":"재생 일시 중지","icon_title_play":"녹음 재생","icon_title_record_voice":"음성 메시지 녹음","icon_title_resume":"재생 재개","icon_title_send":"문자 보내","drag_file":"여기로 파일 드래그","drafty_video":"녹화","call_in_progress":"통화 중","menu_item_audio_call":"전화","unrecognized_video_format":"이 동영상의 형식을 인식할 수 없습니다.","loading_note":"로드 중...","password_i_have_code":"코드가 있습니다","label_reset_password_tel":"비밀번호 재설정을 위해 SMS 보내기","mobile_phone_number":"휴대전화 번호","password_reset_sms_sent":"보안 코드가 포함된 문자 메시지가 전송되었습니다.","mobile_number_required":"휴대전화 번호 필요","current_email":"현재 이메일","current_phone":"현재 전화번호","new_email":"새 이메일 주소","new_phone_number":"새 전화번호","change_email":"이메일 변경","change_phone":"전화번호 변경","call_busy":"바쁘다","failed_to_init_audio":"오디오 녹음 초기화 실패"}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[898],{898:e=>{e.exports=JSON.parse('{"action_block_contact":"연락차단","action_cancel":"취소","action_clear_messages":"메시지지우기","action_delete_messages":"모든메시지지우기","action_leave_chat":"대화나누기","action_report_chat":"대화기록","archived_contacts":"보관된연락처({수})","badge_danger":"의심 많은","badge_owner":"소유자","badge_staff":"직원 관리하에","badge_verified":"확인 됨","badge_you":"당신","block_contact_warning":"이연락처를차단하시겠습니까?","blocked_contacts_link":"차단된연락처({수})","button_add_members":"회원추가","button_cancel":"취소","button_confirm":"확인","button_create":"작성","button_delete_account":"계정삭제","button_edit":"편집","button_logout":"로그아웃","button_ok":"OK","button_reset":"재설정","button_send_request":"요청보내기","button_sign_in":"로그인","button_sign_up":"가입","button_subscribe":"구독","button_update":"업데이트","cannot_initiate_file_upload":"파일업로드를시작할수없습니다.","channel":"채널","channel_prompt":"이 채널입니다","chat_invitation":"새로운대화를시작하도록초대되었습니다.무엇을하시겠습니까?","chat_invitation_accept":"수락","chat_invitation_block":"차단","chat_invitation_ignore":"무시","clear_messages_warning":"모든메시지를지우시겠습니까?실행취소할수없습니다.","code_doesnot_match":"코드가일치하지않습니다","contacts_not_found":"채팅이없습니다
¯∖_(ツ)_/¯","contacts_not_found_short":"\'{문의}\'와일치하는연락처가없습니다.","credential_email_prompt":"등록이메일","delete_account":"계정삭제","delete_account_warning":"계정을삭제하시겠습니까?실행취소할수없습니다.","delete_messages_warning":"모든사람의모든메시지를삭제하시겠습니까?실행취소할수없습니다.","download_action":"다운로드","drafty_attachment":"부착","drafty_form":"형태:","drafty_image":"이미지","email_dative":"이메일","email_prompt":"이메일(예:hong@example.com)","enable_peers_messaging":"활성화","enter_confirmation_code_prompt":"{방법}으로보낸확인코드를입력하십시오:","error_invalid_id":"잘못된ID","file_attachment_too_large":"파일크기{크기}이(가){제한}제한을초과합니다.","forgot_password_link":"비밀번호를잊으셨습니까?","full_name_prompt":"전체이름(예:홍길동)","granted_permissions":"승낙하다","group_has_no_members":"회원없음","group_user_id_prompt":"그룹또는사용자ID","image_caption_prompt":"이미지설명","invalid_content":"잘못된내용","invalid_security_token":"유효하지않은보안토큰","label_client":"클라이언트: ","label_content_type":"컨텐츠유형: ","label_default_access_mode":"기본액세스모드: ","label_file_name":"파일이름: ","label_group_members":"그룹회원: ","label_incognito_mode":"시크릿모드: ","label_message_sound":"메시지소리: ","label_muting_topic":"음소거: ","label_other_user":"기타","label_password":"비밀번호","label_permissions":"권한: ","label_private":"개인코멘트","label_push_notifications":"통지경보: ","label_push_notifications_disabled":"통지경보(HTTPS필요): ","label_reset_password":"비밀번호재설정이메일보내기: ","label_sdk":"SDK:","label_server":"서버: ","label_server_address":"서버주소: ","label_server_to_use":"사용할서버:","label_size":"크기: ","label_topic_name":"이름","label_user_contacts":"연락처","label_user_id":"ID:","label_wire_transport":"와이어수송:","label_you":"당신: ","label_your_name":"이름","label_your_permissions":"권한: ","last_seen_timestamp":"마지막으로본","leave_chat_warning":"이대화를나가시겠습니까?","link_contact_us":"문의처","link_privacy_policy":"개인정보보호정책","link_terms_of_service":"서비스약관","login_prompt":"로그인","menu_item_archive_topic":"보관","menu_item_block":"차단","menu_item_clear_messages":"메시지지우기","menu_item_clear_messages_for_all":"모두지우기","menu_item_delete":"삭제","menu_item_delete_for_all":"모두삭제","menu_item_delete_topic":"삭제","menu_item_edit_permissions":"편집권한","menu_item_info":"정보","menu_item_member_delete":"제거","menu_item_mute":"음소거","menu_item_restore_topic":"복원","menu_item_send_retry":"다시시도","menu_item_unblock":"차단해제","menu_item_unmute":"음소거해제","message_sending":"보내기...","message_sending_failed":"실패","messages_not_readable":"메시지에 액세스 할 수 없습니다","messaging_disabled_prompt":"메시지비활성화","more_online_members":"+{넘침}더보기","new_message_prompt":"새메시지","new_password_placeholder":"새비밀번호입력","no_connection":"연결없음","no_contacts":"연락처가없습니다 (._.)","numeric_confirmation_code_prompt":"숫자만","online_now":"현재접속중","password_prompt":"비밀번호","password_unchanged_prompt":"변경되지않음","peers_messaging_disabled":"동료의메시지가비활성화되었습니다.","permission_admin":"승인({val})","permission_delete":"삭제({val})","permission_join":"참여({val})","permission_owner":"소유자({val})","permission_pres":"알림받기({val})","permission_read":"읽기({val})","permission_share":"공유({val})","permission_write":"쓰기({val})","phone_dative":"전화","private_editing_placeholder":"나만볼수있습니다","push_init_failed":"푸시알림을초기화하지못했습니다","reconnect_countdown":"연결이끊어졌습니다.다시연결하는중{초}…","reconnect_now":"지금시도","reload_update":"재로드","report_chat_warning":"이대화를차단하고기록하시겠습니까?","requested_permissions":"요청","save_attachment":"저장","search_for_contacts":"검색을사용하여연락처찾기","search_no_results":"검색결과가없습니다","search_placeholder":"email:alice@example.com,tel:17025550003...와같은목록","sidepanel_title_acc_notifications":"알림","sidepanel_title_acc_support":"지원","sidepanel_title_account_settings":"계정설정","sidepanel_title_archive":"보관된채팅","sidepanel_title_blocked":"차단된채팅","sidepanel_title_cred":"자격증명확인","sidepanel_title_login":"로그인","sidepanel_title_newtpk":"새채팅시작","sidepanel_title_register":"계정만들기","sidepanel_title_reset":"비밀번호재설정","sidepanel_title_settings":"설정","stay_logged_in":"로그인상태유지","tabtitle_find_user":"찾기","tabtitle_group_by_id":"id로","tabtitle_new_group":"새그룹","tags_editor_no_tags":"일부태그추가","tags_not_found":"태그가정의되지않았습니다.일부를추가하십시오.","title_all_contacts":"모든연락처","title_group_members":"그룹구성원","title_manage_tags":"관리","title_not_found":"찾을수없음","title_permissions":"권한","title_tag_manager":"태그(사용자검색)","topic_block_warning":"이대화를차단하시겠습니까?","topic_delete_warning":"이대화를삭제하시겠습니까?","topic_name_editing_placeholder":"그룹의자유형이름","unnamed_topic":"이름없는","update_available":"업데이트가능.","upload_finishing":"마무리...","user_not_found":"찾을수없음","description_editing_placeholder":"설명(선택 사항)","label_description":"설명","button_security":"보안","panel_title_crop":"드래그하여 조정","panel_title_general":"일반","panel_title_members":"구성원","panel_title_security":"보안","panel_title_info":"정보","permissions_anonymous":"익명","permissions_authenticated":"인증됨","topic_delete":"채팅 삭제","permissions_user":"사용자 권한","password_reset_email_sent":"보안 코드가 포함된 이메일이 전송되었습니다.","label_unarchive_topic":"보관됨:","menu_item_reply":"회신하다","menu_item_forward":"리디렉션","forward_to":"메시지를 리디렉션","forward_to_search_placeholder":"연락처 검색","label_new_password":"새 비밀번호","drafty_unknown":"지원되지 않음","calls_incoming":"수신 전화","calls_outgoing":"발신 전화","calls_you_label":"너","menu_item_video_call":"영상 통화","already_in_call":"당신은 이미 말하고 있습니다!","call_cancelled":"취소 된","call_missed":"부재중","call_declined":"통화 거부","call_disconnected":"연결 끊김","label_use_secure_connection":"보안 연결 사용","cred_confirmed_successfully":"성공적으로 확인됨","menu_item_edit":"편집","editing_message":"교정하다","message_edited_marker":" 수정됨","icon_title_add_image":"이미지 추가","icon_title_attach_file":"파일을 첨부","icon_title_delete":"녹음 삭제","icon_title_pause":"재생 일시 중지","icon_title_play":"녹음 재생","icon_title_record_voice":"음성 메시지 녹음","icon_title_resume":"재생 재개","icon_title_send":"문자 보내","drag_file":"여기로 파일 드래그","drafty_video":"녹화","call_in_progress":"통화 중","menu_item_audio_call":"전화","unrecognized_video_format":"이 동영상의 형식을 인식할 수 없습니다.","loading_note":"로드 중...","password_i_have_code":"코드가 있습니다","label_reset_password_tel":"비밀번호 재설정을 위해 SMS 보내기","mobile_phone_number":"휴대전화 번호","password_reset_sms_sent":"보안 코드가 포함된 문자 메시지가 전송되었습니다.","mobile_number_required":"휴대전화 번호 필요","current_email":"현재 이메일","current_phone":"현재 전화번호","new_email":"새 이메일 주소","new_phone_number":"새 전화번호","change_email":"이메일 변경","change_phone":"전화번호 변경","call_busy":"바쁘다","failed_to_init_audio":"오디오 녹음 초기화 실패","password_reset_success":"비밀번호 재설정 성공"}')}}]);
\ No newline at end of file
diff --git a/umd/92.prod.js b/umd/92.prod.js
index 0d117fee..74b6e9d1 100644
--- a/umd/92.prod.js
+++ b/umd/92.prod.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[92],{6092:e=>{e.exports=JSON.parse('{"action_block_contact":"Kontakt blockieren","action_cancel":"Abbrechen","action_clear_messages":"Nachrichten leeren","action_delete_messages":"Nachrichten für alle löschen","action_leave_chat":"Unterhaltung verlassen","action_report_chat":"Unterhaltung melden","archived_contacts":"Archivierte Kontakte ({count})","badge_danger":"Verdächtig","badge_owner":"Besitzer","badge_staff":"Verwaltung","badge_verified":"Verifiziert","badge_you":"Sie","block_contact_warning":"Möchten Sie diesen Kontakt wirklich blockieren?","blocked_contacts_link":"Blockierte Kontakte ({count})","button_add_members":"Mitglieder hinzufügen","button_cancel":"Abbrechen","button_confirm":"Bestätigen","button_create":"Erstellen","button_delete_account":"Konto löschen","button_edit":"Bearbeiten","button_logout":"Abmelden","button_ok":"OK","button_reset":"Zurücksetzen","button_send_request":"Anfrage senden","button_sign_in":"Anmelden","button_sign_up":"Anmelden","button_subscribe":"Abbonieren","button_update":"Aktualisieren","cannot_initiate_file_upload":"Datei kann nicht hochgeladen werden.","channel":"Sender","channel_prompt":"Dies ist ein Sender","chat_invitation":"Sie sind eingeladen, an einem neuen Chat teilzunehmen. Was möchten Sie tun?","chat_invitation_accept":"Akzeptieren","chat_invitation_block":"Blockieren","chat_invitation_ignore":"Ignorieren","clear_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle leeren wollen? Das kann nicht rückgängig gemacht werden.","code_doesnot_match":"Code stimmt nicht überein","contacts_not_found":"Sie haben keine Unterhaltungen
¯∖_(ツ)_/¯","contacts_not_found_short":"Keine Kontakte für \'\'{query}\'\'","credential_email_prompt":"E-Mail Adresse für Registrierung","delete_account":"Konto löschen","delete_account_warning":"Möchten Sie das Konto wirklich löschen? Das kann nicht rückgängig gemacht werden","delete_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle löschen wollen? Das kann nicht rückgängig gemacht werden.","download_action":"herunterladen","drafty_attachment":"Dateianhang","drafty_form":"Formular:","drafty_image":"Bild","email_dative":"E-Mail","email_prompt":"E-Mail, z.B. lisam@beispiel.de","enable_peers_messaging":"Aktivieren","enter_confirmation_code_prompt":"Geben Sie den Bestätigungscode ein, der per {method} geschickt wurde:","error_invalid_id":"ungültige ID","file_attachment_too_large":"Die Dateigröße {size} überschreitet das Limit von {limit}.","forgot_password_link":"Passwort vergessen?","full_name_prompt":"Vollständiger Name, z.B. Lisa Musterfrau","granted_permissions":"Erteilt","group_has_no_members":"Keine Mitglieder","group_user_id_prompt":"Gruppe oder Benutzer ID","image_caption_prompt":"Bildunterschrift","invalid_content":"ungültiger Inhalt","invalid_security_token":"Ungültiger Sicherheitsschlüssel","label_client":"Client:","label_content_type":"Inhaltsart:","label_default_access_mode":"Standard Zugriffsmodus:","label_file_name":"Dateiname:","label_group_members":"Gruppenmitglieder:","label_incognito_mode":"inkognito-Modus:","label_message_sound":"Benachrichtigungston:","label_muting_topic":"Stumm geschaltet:","label_other_user":"Andere","label_password":"Passwort","label_permissions":"Berechtigungen:","label_private":"Privater Kommentar","label_push_notifications":"Benachrichtigungsmeldungen:","label_push_notifications_disabled":"Benachrichtigungsmeldungen (erfordert HTTPS):","label_reset_password":"Passwort per E-Mail wiederherstellen:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server Adresse:","label_server_to_use":"Server verwenden:","label_size":"Größe:","label_topic_name":"Name","label_user_contacts":"Kontakte","label_user_id":"ID:","label_wire_transport":"Übertragung per Kabel:","label_you":"Sie:","label_your_name":"Ihr Name","label_your_permissions":"Ihre Berechtigungen:","last_seen_timestamp":"Zuletzt gesehen","leave_chat_warning":"Möchten Sie diese Unterhaltung wirklich verlassen?","link_contact_us":"Kontakt","link_privacy_policy":"Datenschutzerklärung","link_terms_of_service":"Nutzungsbedingungen","login_prompt":"Anmelden","menu_item_archive_topic":"Archivieren","menu_item_block":"Blockieren","menu_item_clear_messages":"Nachrichten leeren","menu_item_clear_messages_for_all":"Für alle leeren","menu_item_delete":"Löschen","menu_item_delete_for_all":"Für alle löschen","menu_item_delete_topic":"Entfernen","menu_item_edit_permissions":"Berechtigungen ändern","menu_item_info":"Info","menu_item_member_delete":"Entfernen","menu_item_mute":"Unterhaltung stumm schalten","menu_item_restore_topic":"Wiederherstellen","menu_item_send_retry":"Wiederholen","menu_item_unblock":"Blockierung aufheben","menu_item_unmute":"Stumm schalten beenden","message_sending":"wird gesendet...","message_sending_failed":"fehlgeschlagen","messages_not_readable":"Neue Nachrichten können nicht gelesen werden","messaging_disabled_prompt":"Nachrichtenübermittlung deaktiviert","more_online_members":"+{overflow} mehr","new_message_prompt":"Neue Nachricht","new_password_placeholder":"Geben Sie ein neues Passwort ein","no_connection":"Keine Verbindung","no_contacts":"Sie haben keine Kontakte :-(","numeric_confirmation_code_prompt":"Nur zahlen","online_now":"jetzt online","password_prompt":"Passwort","password_unchanged_prompt":"unverändert","peers_messaging_disabled":"Gruppennachrichten sind deaktiviert","permission_admin":"Bestätigen ({val})","permission_delete":"Entfernen ({val})","permission_join":"Beitreten ({val})","permission_owner":"Besitzer ({val})","permission_pres":"Benachrichtigt werden ({val})","permission_read":"Lesen ({val})","permission_share":"Teilen ({val})","permission_write":"Schreiben ({val})","phone_dative":"Telefon","private_editing_placeholder":"Nur für Sie sichtbar","push_init_failed":"Initialisierung von Push-Benachrichtigungen fehlgeschlagen","reconnect_countdown":"Getrennt. Wiederverbinden in {seconds}…","reconnect_now":"Jetzt probieren","reload_update":"Neu laden","report_chat_warning":"Möchten Sie diese Unterhaltung wirklich blockieren und melden?","requested_permissions":"Angefordert","save_attachment":"Speichern","search_for_contacts":"Nutzen Sie die Suche um Kontakte zu finden","search_no_results":"Die Suche hatte keine Ergebnisse","search_placeholder":"Liste: email:lisa@beispiel.de, tel:17025550003...","sidepanel_title_acc_notifications":"Benachrichtigungen","sidepanel_title_acc_support":"Unterstützung","sidepanel_title_account_settings":"Konto-Einstellungen","sidepanel_title_archive":"Archivierte Unterhaltungen","sidepanel_title_blocked":"Blockierte Unterhaltungen","sidepanel_title_cred":"Anmeldeinformationen bestätigen","sidepanel_title_login":"Anmelden","sidepanel_title_newtpk":"Neue Unterhaltung starten","sidepanel_title_register":"Konto erstellen","sidepanel_title_reset":"Passwort zurücksetzen","sidepanel_title_settings":"Einstellungen","stay_logged_in":"Angemeldet bleiben","tabtitle_find_user":"Suchen","tabtitle_group_by_id":"nach ID","tabtitle_new_group":"Neue Gruppe","tags_editor_no_tags":"Schlagworte hinzufügen","tags_not_found":"Keine Schlagworte definiert. Erstellen Sie welche.","title_all_contacts":"Alle Kontakte","title_group_members":"Gruppenmitglieder","panel_title_info":"Info","title_manage_tags":"Verwalten","title_not_found":"Nicht gefunden","title_permissions":"Berechtigungen","title_tag_manager":"Schlagworte (Nutzer entdecken)","topic_block_warning":"Möchten Sie diese Unterhaltung wirklich blockieren?","topic_delete_warning":"Möchten Sie diese Unterhaltung wirklich löschen?","topic_name_editing_placeholder":"Freiform Name der Gruppe","unnamed_topic":"Unbenannt","update_available":"Aktualisierung verfügbar.","upload_finishing":"wird abgeschlossen...","user_not_found":"Nicht gefunden","description_editing_placeholder":"Beschreibung (optional)","label_description":"Beschreibung","button_security":"Sicherheit","panel_title_general":"Allgemein","panel_title_security":"Sicherheit","panel_title_crop":"Zum Anpassen ziehen","panel_title_members":"Mitglieder","permissions_anonymous":"Anonym","permissions_authenticated":"Authentifiziert","topic_delete":"Chat löschen","permissions_user":"Benutzerberechtigungen","password_reset_email_sent":"Eine E-Mail mit Sicherheitscode wurde gesendet.","label_unarchive_topic":"Archiviert:","menu_item_reply":"Antwort","menu_item_forward":"Nach vorne","forward_to":"Weiterleiten","forward_to_search_placeholder":"Kontakte durchsuchen","label_new_password":"Neues Kennwort","drafty_unknown":"Nicht unterstützt","calls_incoming":"Eingehender Anruf","calls_outgoing":"Ausgehender Anruf","calls_you_label":"Du","menu_item_video_call":"Videoanruf","already_in_call":"Du redest schon!","call_cancelled":"abgebrochen","call_missed":"verpasster","call_declined":"abgelehnt","call_disconnected":"getrennt","label_use_secure_connection":"Verwenden Sie eine sichere Verbindung","cred_confirmed_successfully":"Erfolgreich bestätigt","menu_item_edit":"Bearbeiten","editing_message":"Bearbeitung","message_edited_marker":", bearbeitet","icon_title_add_image":"Bild hinzufügen","icon_title_attach_file":"Datei anhängen","icon_title_delete":"Aufnahme löschen","icon_title_pause":"Wiedergabe pausieren","icon_title_play":"Aufnahme abspielen","icon_title_record_voice":"Sprachnachricht aufnehmen","icon_title_resume":"Wiedergabe fortsetzen","icon_title_send":"Nachricht senden","drag_file":"Datei hierher ziehen","drafty_video":"Videoaufnahme","call_in_progress":"in Arbeit","menu_item_audio_call":"Anruf","unrecognized_video_format":"Das Format dieses Videos wird nicht erkannt","loading_note":"Laden...","password_i_have_code":"Ich habe Code","label_reset_password_tel":"SMS zum Zurücksetzen des Passworts senden","mobile_phone_number":"Mobiltelefonnummer","password_reset_sms_sent":"Eine SMS mit einem Sicherheitscode wurde gesendet.","mobile_number_required":"Handynummer erforderlich","current_email":"Aktuelle E-Mail","current_phone":"Aktuelle Telefonnummer","new_email":"Neue E-Mail","new_phone_number":"Neue Telefonnummer","change_email":"E-Mail ändern","change_phone":"Telefonnummer ändern","call_busy":"besetzt","failed_to_init_audio":"Audioaufnahme konnte nicht initialisiert werden"}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[92],{6092:e=>{e.exports=JSON.parse('{"action_block_contact":"Kontakt blockieren","action_cancel":"Abbrechen","action_clear_messages":"Nachrichten leeren","action_delete_messages":"Nachrichten für alle löschen","action_leave_chat":"Unterhaltung verlassen","action_report_chat":"Unterhaltung melden","archived_contacts":"Archivierte Kontakte ({count})","badge_danger":"Verdächtig","badge_owner":"Besitzer","badge_staff":"Verwaltung","badge_verified":"Verifiziert","badge_you":"Sie","block_contact_warning":"Möchten Sie diesen Kontakt wirklich blockieren?","blocked_contacts_link":"Blockierte Kontakte ({count})","button_add_members":"Mitglieder hinzufügen","button_cancel":"Abbrechen","button_confirm":"Bestätigen","button_create":"Erstellen","button_delete_account":"Konto löschen","button_edit":"Bearbeiten","button_logout":"Abmelden","button_ok":"OK","button_reset":"Zurücksetzen","button_send_request":"Anfrage senden","button_sign_in":"Anmelden","button_sign_up":"Anmelden","button_subscribe":"Abbonieren","button_update":"Aktualisieren","cannot_initiate_file_upload":"Datei kann nicht hochgeladen werden.","channel":"Sender","channel_prompt":"Dies ist ein Sender","chat_invitation":"Sie sind eingeladen, an einem neuen Chat teilzunehmen. Was möchten Sie tun?","chat_invitation_accept":"Akzeptieren","chat_invitation_block":"Blockieren","chat_invitation_ignore":"Ignorieren","clear_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle leeren wollen? Das kann nicht rückgängig gemacht werden.","code_doesnot_match":"Code stimmt nicht überein","contacts_not_found":"Sie haben keine Unterhaltungen
¯∖_(ツ)_/¯","contacts_not_found_short":"Keine Kontakte für \'\'{query}\'\'","credential_email_prompt":"E-Mail Adresse für Registrierung","delete_account":"Konto löschen","delete_account_warning":"Möchten Sie das Konto wirklich löschen? Das kann nicht rückgängig gemacht werden","delete_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle löschen wollen? Das kann nicht rückgängig gemacht werden.","download_action":"herunterladen","drafty_attachment":"Dateianhang","drafty_form":"Formular:","drafty_image":"Bild","email_dative":"E-Mail","email_prompt":"E-Mail, z.B. lisam@beispiel.de","enable_peers_messaging":"Aktivieren","enter_confirmation_code_prompt":"Geben Sie den Bestätigungscode ein, der per {method} geschickt wurde:","error_invalid_id":"ungültige ID","file_attachment_too_large":"Die Dateigröße {size} überschreitet das Limit von {limit}.","forgot_password_link":"Passwort vergessen?","full_name_prompt":"Vollständiger Name, z.B. Lisa Musterfrau","granted_permissions":"Erteilt","group_has_no_members":"Keine Mitglieder","group_user_id_prompt":"Gruppe oder Benutzer ID","image_caption_prompt":"Bildunterschrift","invalid_content":"ungültiger Inhalt","invalid_security_token":"Ungültiger Sicherheitsschlüssel","label_client":"Client:","label_content_type":"Inhaltsart:","label_default_access_mode":"Standard Zugriffsmodus:","label_file_name":"Dateiname:","label_group_members":"Gruppenmitglieder:","label_incognito_mode":"inkognito-Modus:","label_message_sound":"Benachrichtigungston:","label_muting_topic":"Stumm geschaltet:","label_other_user":"Andere","label_password":"Passwort","label_permissions":"Berechtigungen:","label_private":"Privater Kommentar","label_push_notifications":"Benachrichtigungsmeldungen:","label_push_notifications_disabled":"Benachrichtigungsmeldungen (erfordert HTTPS):","label_reset_password":"Passwort per E-Mail wiederherstellen:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server Adresse:","label_server_to_use":"Server verwenden:","label_size":"Größe:","label_topic_name":"Name","label_user_contacts":"Kontakte","label_user_id":"ID:","label_wire_transport":"Übertragung per Kabel:","label_you":"Sie:","label_your_name":"Ihr Name","label_your_permissions":"Ihre Berechtigungen:","last_seen_timestamp":"Zuletzt gesehen","leave_chat_warning":"Möchten Sie diese Unterhaltung wirklich verlassen?","link_contact_us":"Kontakt","link_privacy_policy":"Datenschutzerklärung","link_terms_of_service":"Nutzungsbedingungen","login_prompt":"Anmelden","menu_item_archive_topic":"Archivieren","menu_item_block":"Blockieren","menu_item_clear_messages":"Nachrichten leeren","menu_item_clear_messages_for_all":"Für alle leeren","menu_item_delete":"Löschen","menu_item_delete_for_all":"Für alle löschen","menu_item_delete_topic":"Entfernen","menu_item_edit_permissions":"Berechtigungen ändern","menu_item_info":"Info","menu_item_member_delete":"Entfernen","menu_item_mute":"Unterhaltung stumm schalten","menu_item_restore_topic":"Wiederherstellen","menu_item_send_retry":"Wiederholen","menu_item_unblock":"Blockierung aufheben","menu_item_unmute":"Stumm schalten beenden","message_sending":"wird gesendet...","message_sending_failed":"fehlgeschlagen","messages_not_readable":"Neue Nachrichten können nicht gelesen werden","messaging_disabled_prompt":"Nachrichtenübermittlung deaktiviert","more_online_members":"+{overflow} mehr","new_message_prompt":"Neue Nachricht","new_password_placeholder":"Geben Sie ein neues Passwort ein","no_connection":"Keine Verbindung","no_contacts":"Sie haben keine Kontakte :-(","numeric_confirmation_code_prompt":"Nur zahlen","online_now":"jetzt online","password_prompt":"Passwort","password_unchanged_prompt":"unverändert","peers_messaging_disabled":"Gruppennachrichten sind deaktiviert","permission_admin":"Bestätigen ({val})","permission_delete":"Entfernen ({val})","permission_join":"Beitreten ({val})","permission_owner":"Besitzer ({val})","permission_pres":"Benachrichtigt werden ({val})","permission_read":"Lesen ({val})","permission_share":"Teilen ({val})","permission_write":"Schreiben ({val})","phone_dative":"Telefon","private_editing_placeholder":"Nur für Sie sichtbar","push_init_failed":"Initialisierung von Push-Benachrichtigungen fehlgeschlagen","reconnect_countdown":"Getrennt. Wiederverbinden in {seconds}…","reconnect_now":"Jetzt probieren","reload_update":"Neu laden","report_chat_warning":"Möchten Sie diese Unterhaltung wirklich blockieren und melden?","requested_permissions":"Angefordert","save_attachment":"Speichern","search_for_contacts":"Nutzen Sie die Suche um Kontakte zu finden","search_no_results":"Die Suche hatte keine Ergebnisse","search_placeholder":"Liste: email:lisa@beispiel.de, tel:17025550003...","sidepanel_title_acc_notifications":"Benachrichtigungen","sidepanel_title_acc_support":"Unterstützung","sidepanel_title_account_settings":"Konto-Einstellungen","sidepanel_title_archive":"Archivierte Unterhaltungen","sidepanel_title_blocked":"Blockierte Unterhaltungen","sidepanel_title_cred":"Anmeldeinformationen bestätigen","sidepanel_title_login":"Anmelden","sidepanel_title_newtpk":"Neue Unterhaltung starten","sidepanel_title_register":"Konto erstellen","sidepanel_title_reset":"Passwort zurücksetzen","sidepanel_title_settings":"Einstellungen","stay_logged_in":"Angemeldet bleiben","tabtitle_find_user":"Suchen","tabtitle_group_by_id":"nach ID","tabtitle_new_group":"Neue Gruppe","tags_editor_no_tags":"Schlagworte hinzufügen","tags_not_found":"Keine Schlagworte definiert. Erstellen Sie welche.","title_all_contacts":"Alle Kontakte","title_group_members":"Gruppenmitglieder","panel_title_info":"Info","title_manage_tags":"Verwalten","title_not_found":"Nicht gefunden","title_permissions":"Berechtigungen","title_tag_manager":"Schlagworte (Nutzer entdecken)","topic_block_warning":"Möchten Sie diese Unterhaltung wirklich blockieren?","topic_delete_warning":"Möchten Sie diese Unterhaltung wirklich löschen?","topic_name_editing_placeholder":"Freiform Name der Gruppe","unnamed_topic":"Unbenannt","update_available":"Aktualisierung verfügbar.","upload_finishing":"wird abgeschlossen...","user_not_found":"Nicht gefunden","description_editing_placeholder":"Beschreibung (optional)","label_description":"Beschreibung","button_security":"Sicherheit","panel_title_general":"Allgemein","panel_title_security":"Sicherheit","panel_title_crop":"Zum Anpassen ziehen","panel_title_members":"Mitglieder","permissions_anonymous":"Anonym","permissions_authenticated":"Authentifiziert","topic_delete":"Chat löschen","permissions_user":"Benutzerberechtigungen","password_reset_email_sent":"Eine E-Mail mit Sicherheitscode wurde gesendet.","label_unarchive_topic":"Archiviert:","menu_item_reply":"Antwort","menu_item_forward":"Nach vorne","forward_to":"Weiterleiten","forward_to_search_placeholder":"Kontakte durchsuchen","label_new_password":"Neues Kennwort","drafty_unknown":"Nicht unterstützt","calls_incoming":"Eingehender Anruf","calls_outgoing":"Ausgehender Anruf","calls_you_label":"Du","menu_item_video_call":"Videoanruf","already_in_call":"Du redest schon!","call_cancelled":"abgebrochen","call_missed":"verpasster","call_declined":"abgelehnt","call_disconnected":"getrennt","label_use_secure_connection":"Verwenden Sie eine sichere Verbindung","cred_confirmed_successfully":"Erfolgreich bestätigt","menu_item_edit":"Bearbeiten","editing_message":"Bearbeitung","message_edited_marker":", bearbeitet","icon_title_add_image":"Bild hinzufügen","icon_title_attach_file":"Datei anhängen","icon_title_delete":"Aufnahme löschen","icon_title_pause":"Wiedergabe pausieren","icon_title_play":"Aufnahme abspielen","icon_title_record_voice":"Sprachnachricht aufnehmen","icon_title_resume":"Wiedergabe fortsetzen","icon_title_send":"Nachricht senden","drag_file":"Datei hierher ziehen","drafty_video":"Videoaufnahme","call_in_progress":"in Arbeit","menu_item_audio_call":"Anruf","unrecognized_video_format":"Das Format dieses Videos wird nicht erkannt","loading_note":"Laden...","password_i_have_code":"Ich habe Code","label_reset_password_tel":"SMS zum Zurücksetzen des Passworts senden","mobile_phone_number":"Mobiltelefonnummer","password_reset_sms_sent":"Eine SMS mit einem Sicherheitscode wurde gesendet.","mobile_number_required":"Handynummer erforderlich","current_email":"Aktuelle E-Mail","current_phone":"Aktuelle Telefonnummer","new_email":"Neue E-Mail","new_phone_number":"Neue Telefonnummer","change_email":"E-Mail ändern","change_phone":"Telefonnummer ändern","call_busy":"besetzt","failed_to_init_audio":"Audioaufnahme konnte nicht initialisiert werden","password_reset_success":"Passwort erfolgreich zurückgesetzt"}')}}]);
\ No newline at end of file
diff --git a/umd/932.prod.js b/umd/932.prod.js
index cafb0934..5d94aeef 100644
--- a/umd/932.prod.js
+++ b/umd/932.prod.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[932],{9932:e=>{e.exports=JSON.parse('{"action_block_contact":"Bloquear contacto","action_cancel":"cancelar","action_clear_messages":"Borrar mensajes","action_delete_messages":"Borrar mensajes para todos","action_leave_chat":"Dejar conversación","action_report_chat":"Reportar conversación","archived_contacts":"Contactos archivados ({count})","badge_danger":"Suspicaz","badge_owner":"propietario","badge_staff":"Administración","badge_verified":"Verificado","badge_you":"tú","block_contact_warning":"¿Estás seguro de que quieres bloquear a este contacto?","blocked_contacts_link":"Contactos bloqueados ({count})","button_add_members":"Añadir miembros","button_cancel":"Cancelar","button_confirm":"Confirmar","button_create":"Crear","button_delete_account":"Eliminar cuenta","button_edit":"Editar","button_logout":"Cerrar sesión","button_ok":"OK","button_reset":"Restablecer","button_send_request":"Enviar petición","button_sign_in":"Entrar","button_sign_up":"Regístrate","button_subscribe":"Suscribirse","button_update":"Actualizar","cannot_initiate_file_upload":"No se pudo iniciar la carga del archivo.","channel":"canal","channel_prompt":"Este es un canal","chat_invitation":"Estás invitado a participar en un nuevo chat. ¿Qué te gustaría hacer?","chat_invitation_accept":"Aceptar","chat_invitation_block":"Bloquear","chat_invitation_ignore":"Ignorar","clear_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes? Esta acción es irreversible.","code_doesnot_match":"El código no coincide","contacts_not_found":"No tienes chats
¯∖_(ツ)_/¯","contacts_not_found_short":"Ningún contacto coincide con \'\'{query}\'\'","credential_email_prompt":"Tu correo electrónico de registro","delete_account":"Eliminar cuenta","delete_account_warning":"¿Estás seguro de que deseas eliminar permanentemente tu cuenta? Esta acción es irreversible.","delete_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes para todos? Esta acción es irreversible.","download_action":"descargar","drafty_attachment":"Archivo","drafty_form":"Formulario:","drafty_image":"Imagen","email_dative":"correo electrónico","email_prompt":"Correo electrónico, p.ej. juan@example.com","enable_peers_messaging":"Habilitar","enter_confirmation_code_prompt":"Introduzca el código de confirmación enviado a tu {method}:","error_invalid_id":"ID inválido","file_attachment_too_large":"El tamaño del archivo {size} excede el límite de {limit}.","forgot_password_link":"¿Olvidaste tu contraseña?","full_name_prompt":"Nombre completo, p.ej. Juan González Hernández","granted_permissions":"Otorgados","group_has_no_members":"No hay miembros","group_user_id_prompt":"ID del grupo o usuario","image_caption_prompt":"Añade un comentario","invalid_content":"contenido inválido","invalid_security_token":"Token de seguridad inválido","label_client":"Cliente:","label_content_type":"Tipo de contenido:","label_default_access_mode":"Modo de acceso predeterminado:","label_file_name":"Nombre del archivo:","label_group_members":"Miembros del grupo:","label_incognito_mode":"Modo incógnito:","label_message_sound":"Sonido de mensaje:","label_muting_topic":"Silenciado:","label_other_user":"Otros","label_password":"Contraseña","label_permissions":"Permisos:","label_private":"Comentario privado","label_push_notifications":"Alertas de notificaciones:","label_push_notifications_disabled":"Alertas de notificaciones (requiere HTTPS):","label_reset_password":"Enviar un correo electrónico de restablecimiento de contraseña:","label_sdk":"SDK:","label_server":"Servidor:","label_server_address":"Dirección del servidor:","label_server_to_use":"Servidor para usar:","label_size":"Tamaño:","label_topic_name":"Nombre del tema","label_user_contacts":"Contactos","label_user_id":"ID:","label_wire_transport":"Transporte de alambre:","label_you":"Tú:","label_your_name":"Tu nombre","label_your_permissions":"Tus permisos:","last_seen_timestamp":"Últ. vez","leave_chat_warning":"¿Estás seguro de que quieres dejar esta conversación?","link_contact_us":"Contáctanos","link_privacy_policy":"Política de privacidad","link_terms_of_service":"Términos de uso","login_prompt":"Nombre de usuario","menu_item_archive_topic":"Archivar","menu_item_block":"Bloquear","menu_item_clear_messages":"Borrar mensajes","menu_item_clear_messages_for_all":"Borrar para todos","menu_item_delete":"Eliminar","menu_item_delete_for_all":"Eliminar para todos","menu_item_delete_topic":"Eliminar","menu_item_edit_permissions":"Editar permisos","menu_item_info":"Información","menu_item_member_delete":"Eliminar","menu_item_mute":"Silenciar","menu_item_restore_topic":"Restaurar","menu_item_send_retry":"Inténtalo de nuevo","menu_item_unblock":"Desbloquear","menu_item_unmute":"Anular el silencio","message_sending":"enviando...","message_sending_failed":"no se pudo enviar el mensaje","messages_not_readable":"sin acceso a mensajes","messaging_disabled_prompt":"El envío de mensajes está deshabilitado","more_online_members":"+{overflow} más","new_message_prompt":"Nuevo mensaje","new_password_placeholder":"Introduzca una nueva contraseña","no_connection":"Sin conexión","no_contacts":"No tienes contactos :-(","numeric_confirmation_code_prompt":"Sólo números","online_now":"en línea","password_prompt":"Contraseña","password_unchanged_prompt":"Sin cambios","peers_messaging_disabled":"La mensajería Peer está deshabilitada.","permission_admin":"Approbar ({val})","permission_delete":"Eliminar ({val})","permission_join":"Unirse ({val})","permission_owner":"Propietario ({val})","permission_pres":"Ser notificado ({val})","permission_read":"Leer ({val})","permission_share":"Compartir ({val})","permission_write":"Escribir ({val})","phone_dative":"teléfono","private_editing_placeholder":"Sólo visible para tí","push_init_failed":"Error al inicializar las notificaciones push","reconnect_countdown":"Desconectado. Reconectando en {seconds}…","reconnect_now":"Reintentar","reload_update":"Recargar","report_chat_warning":"¿Estás seguro de que quieres bloquear y reportar a esta conversación?","requested_permissions":"Solicitados","save_attachment":"guardar","search_for_contacts":"Usa la búsqueda para encontrar contactos","search_no_results":"La búsqueda no arrojó resultados","search_placeholder":"Ej. email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notificaciones","sidepanel_title_acc_support":"Soporte","sidepanel_title_account_settings":"Ajustes de la cuenta","sidepanel_title_archive":"Chats archivados","sidepanel_title_blocked":"Chats bloqueados","sidepanel_title_cred":"Confirmar credenciales","sidepanel_title_login":"Iniciar sesión","sidepanel_title_newtpk":"Iniciar un nuevo chat","sidepanel_title_register":"Crear cuenta","sidepanel_title_reset":"Restablecer contraseña","sidepanel_title_settings":"Ajustes","stay_logged_in":"Permanecer conectado","tabtitle_find_user":"encontrar","tabtitle_group_by_id":"por ID","tabtitle_new_group":"nuevo grupo","tags_editor_no_tags":"Añadir etiquetas","tags_not_found":"No hay etiquetas definidas. Añade unas.","title_all_contacts":"Todos los contactos","title_group_members":"Miembros del grupo","title_manage_tags":"Gestionar","title_not_found":"No encontrado","title_permissions":"Permisos","title_tag_manager":"Etiquetas (descubrimiento de usuarios)","topic_block_warning":"¿Estás seguro de que quieres bloquear esta conversación","topic_delete_warning":"¿Estás seguro de que quieres eliminar esta conversación?","topic_name_editing_placeholder":"Nombre del grupo","unnamed_topic":"Sin nombre","update_available":"Actualización disponible.","upload_finishing":"terminando...","user_not_found":"Usuario no encontrado","description_editing_placeholder":"Descripción (opcional)","label_description":"Descripción","button_security":"Seguridad","panel_title_crop":"Arrastra para ajustar","panel_title_general":"General","panel_title_members":"Miembros","panel_title_security":"Seguridad","panel_title_info":"Información","permissions_anonymous":"Anónimo","permissions_authenticated":"Autenticado","topic_delete":"Eliminar chat","permissions_user":"Permisos del usuario","password_reset_email_sent":"Se ha enviado un correo electrónico con el código de seguridad.","label_unarchive_topic":"Archivado:","menu_item_reply":"Respuesta","menu_item_forward":"Reenviar","forward_to":"Reenviar a","forward_to_search_placeholder":"Buscar contactos","label_new_password":"Nueva contraseña","drafty_unknown":"No soportado","calls_incoming":"Llamada entrante","calls_outgoing":"Llamada saliente","calls_you_label":"Tú","menu_item_video_call":"Videollamada","already_in_call":"¡Ya estás hablando!","call_cancelled":"cancelada","call_missed":"perdida","call_declined":"rechazada","call_disconnected":"desconectada","label_use_secure_connection":"Usar conexión segura","cred_confirmed_successfully":"Confirmado con éxito","menu_item_edit":"Editar","editing_message":"Edición","message_edited_marker":", editado","icon_title_add_image":"Añadir imagen","icon_title_attach_file":"Adjuntar archivo","icon_title_delete":"Eliminar grabación","icon_title_pause":"Pausar reproducción","icon_title_play":"Reproducir grabación","icon_title_record_voice":"Grabar mensaje de voz","icon_title_resume":"Reanudar la reproducción","icon_title_send":"Enviar mensaje","drag_file":"Arrastra el archivo aquí","drafty_video":"Grabación de vídeo","call_in_progress":"en progreso","menu_item_audio_call":"Llamada","unrecognized_video_format":"No se reconoce el formato de este video","loading_note":"Cargando...","password_i_have_code":"Tengo código","label_reset_password_tel":"Enviar SMS para restablecer la contraseña","mobile_phone_number":"Número de teléfono móvil","password_reset_sms_sent":"Se ha enviado un mensaje de texto con un código de seguridad.","mobile_number_required":"Número de teléfono móvil requerido","current_email":"Correo electrónico actual","current_phone":"Número de teléfono actual","new_email":"Nuevo correo electrónico","new_phone_number":"Nuevo número de teléfono","change_email":"Cambiar correo electrónico","change_phone":"Cambiar número de teléfono","call_busy":"ocupado","failed_to_init_audio":"Error al inicializar la grabación de audio"}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunktinode_webapp=globalThis.webpackChunktinode_webapp||[]).push([[932],{9932:e=>{e.exports=JSON.parse('{"action_block_contact":"Bloquear contacto","action_cancel":"cancelar","action_clear_messages":"Borrar mensajes","action_delete_messages":"Borrar mensajes para todos","action_leave_chat":"Dejar conversación","action_report_chat":"Reportar conversación","archived_contacts":"Contactos archivados ({count})","badge_danger":"Suspicaz","badge_owner":"propietario","badge_staff":"Administración","badge_verified":"Verificado","badge_you":"tú","block_contact_warning":"¿Estás seguro de que quieres bloquear a este contacto?","blocked_contacts_link":"Contactos bloqueados ({count})","button_add_members":"Añadir miembros","button_cancel":"Cancelar","button_confirm":"Confirmar","button_create":"Crear","button_delete_account":"Eliminar cuenta","button_edit":"Editar","button_logout":"Cerrar sesión","button_ok":"OK","button_reset":"Restablecer","button_send_request":"Enviar petición","button_sign_in":"Entrar","button_sign_up":"Regístrate","button_subscribe":"Suscribirse","button_update":"Actualizar","cannot_initiate_file_upload":"No se pudo iniciar la carga del archivo.","channel":"canal","channel_prompt":"Este es un canal","chat_invitation":"Estás invitado a participar en un nuevo chat. ¿Qué te gustaría hacer?","chat_invitation_accept":"Aceptar","chat_invitation_block":"Bloquear","chat_invitation_ignore":"Ignorar","clear_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes? Esta acción es irreversible.","code_doesnot_match":"El código no coincide","contacts_not_found":"No tienes chats
¯∖_(ツ)_/¯","contacts_not_found_short":"Ningún contacto coincide con \'\'{query}\'\'","credential_email_prompt":"Tu correo electrónico de registro","delete_account":"Eliminar cuenta","delete_account_warning":"¿Estás seguro de que deseas eliminar permanentemente tu cuenta? Esta acción es irreversible.","delete_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes para todos? Esta acción es irreversible.","download_action":"descargar","drafty_attachment":"Archivo","drafty_form":"Formulario:","drafty_image":"Imagen","email_dative":"correo electrónico","email_prompt":"Correo electrónico, p.ej. juan@example.com","enable_peers_messaging":"Habilitar","enter_confirmation_code_prompt":"Introduzca el código de confirmación enviado a tu {method}:","error_invalid_id":"ID inválido","file_attachment_too_large":"El tamaño del archivo {size} excede el límite de {limit}.","forgot_password_link":"¿Olvidaste tu contraseña?","full_name_prompt":"Nombre completo, p.ej. Juan González Hernández","granted_permissions":"Otorgados","group_has_no_members":"No hay miembros","group_user_id_prompt":"ID del grupo o usuario","image_caption_prompt":"Añade un comentario","invalid_content":"contenido inválido","invalid_security_token":"Token de seguridad inválido","label_client":"Cliente:","label_content_type":"Tipo de contenido:","label_default_access_mode":"Modo de acceso predeterminado:","label_file_name":"Nombre del archivo:","label_group_members":"Miembros del grupo:","label_incognito_mode":"Modo incógnito:","label_message_sound":"Sonido de mensaje:","label_muting_topic":"Silenciado:","label_other_user":"Otros","label_password":"Contraseña","label_permissions":"Permisos:","label_private":"Comentario privado","label_push_notifications":"Alertas de notificaciones:","label_push_notifications_disabled":"Alertas de notificaciones (requiere HTTPS):","label_reset_password":"Enviar un correo electrónico de restablecimiento de contraseña:","label_sdk":"SDK:","label_server":"Servidor:","label_server_address":"Dirección del servidor:","label_server_to_use":"Servidor para usar:","label_size":"Tamaño:","label_topic_name":"Nombre del tema","label_user_contacts":"Contactos","label_user_id":"ID:","label_wire_transport":"Transporte de alambre:","label_you":"Tú:","label_your_name":"Tu nombre","label_your_permissions":"Tus permisos:","last_seen_timestamp":"Últ. vez","leave_chat_warning":"¿Estás seguro de que quieres dejar esta conversación?","link_contact_us":"Contáctanos","link_privacy_policy":"Política de privacidad","link_terms_of_service":"Términos de uso","login_prompt":"Nombre de usuario","menu_item_archive_topic":"Archivar","menu_item_block":"Bloquear","menu_item_clear_messages":"Borrar mensajes","menu_item_clear_messages_for_all":"Borrar para todos","menu_item_delete":"Eliminar","menu_item_delete_for_all":"Eliminar para todos","menu_item_delete_topic":"Eliminar","menu_item_edit_permissions":"Editar permisos","menu_item_info":"Información","menu_item_member_delete":"Eliminar","menu_item_mute":"Silenciar","menu_item_restore_topic":"Restaurar","menu_item_send_retry":"Inténtalo de nuevo","menu_item_unblock":"Desbloquear","menu_item_unmute":"Anular el silencio","message_sending":"enviando...","message_sending_failed":"no se pudo enviar el mensaje","messages_not_readable":"sin acceso a mensajes","messaging_disabled_prompt":"El envío de mensajes está deshabilitado","more_online_members":"+{overflow} más","new_message_prompt":"Nuevo mensaje","new_password_placeholder":"Introduzca una nueva contraseña","no_connection":"Sin conexión","no_contacts":"No tienes contactos :-(","numeric_confirmation_code_prompt":"Sólo números","online_now":"en línea","password_prompt":"Contraseña","password_unchanged_prompt":"Sin cambios","peers_messaging_disabled":"La mensajería Peer está deshabilitada.","permission_admin":"Approbar ({val})","permission_delete":"Eliminar ({val})","permission_join":"Unirse ({val})","permission_owner":"Propietario ({val})","permission_pres":"Ser notificado ({val})","permission_read":"Leer ({val})","permission_share":"Compartir ({val})","permission_write":"Escribir ({val})","phone_dative":"teléfono","private_editing_placeholder":"Sólo visible para tí","push_init_failed":"Error al inicializar las notificaciones push","reconnect_countdown":"Desconectado. Reconectando en {seconds}…","reconnect_now":"Reintentar","reload_update":"Recargar","report_chat_warning":"¿Estás seguro de que quieres bloquear y reportar a esta conversación?","requested_permissions":"Solicitados","save_attachment":"guardar","search_for_contacts":"Usa la búsqueda para encontrar contactos","search_no_results":"La búsqueda no arrojó resultados","search_placeholder":"Ej. email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notificaciones","sidepanel_title_acc_support":"Soporte","sidepanel_title_account_settings":"Ajustes de la cuenta","sidepanel_title_archive":"Chats archivados","sidepanel_title_blocked":"Chats bloqueados","sidepanel_title_cred":"Confirmar credenciales","sidepanel_title_login":"Iniciar sesión","sidepanel_title_newtpk":"Iniciar un nuevo chat","sidepanel_title_register":"Crear cuenta","sidepanel_title_reset":"Restablecer contraseña","sidepanel_title_settings":"Ajustes","stay_logged_in":"Permanecer conectado","tabtitle_find_user":"encontrar","tabtitle_group_by_id":"por ID","tabtitle_new_group":"nuevo grupo","tags_editor_no_tags":"Añadir etiquetas","tags_not_found":"No hay etiquetas definidas. Añade unas.","title_all_contacts":"Todos los contactos","title_group_members":"Miembros del grupo","title_manage_tags":"Gestionar","title_not_found":"No encontrado","title_permissions":"Permisos","title_tag_manager":"Etiquetas (descubrimiento de usuarios)","topic_block_warning":"¿Estás seguro de que quieres bloquear esta conversación","topic_delete_warning":"¿Estás seguro de que quieres eliminar esta conversación?","topic_name_editing_placeholder":"Nombre del grupo","unnamed_topic":"Sin nombre","update_available":"Actualización disponible.","upload_finishing":"terminando...","user_not_found":"Usuario no encontrado","description_editing_placeholder":"Descripción (opcional)","label_description":"Descripción","button_security":"Seguridad","panel_title_crop":"Arrastra para ajustar","panel_title_general":"General","panel_title_members":"Miembros","panel_title_security":"Seguridad","panel_title_info":"Información","permissions_anonymous":"Anónimo","permissions_authenticated":"Autenticado","topic_delete":"Eliminar chat","permissions_user":"Permisos del usuario","password_reset_email_sent":"Se ha enviado un correo electrónico con el código de seguridad.","label_unarchive_topic":"Archivado:","menu_item_reply":"Respuesta","menu_item_forward":"Reenviar","forward_to":"Reenviar a","forward_to_search_placeholder":"Buscar contactos","label_new_password":"Nueva contraseña","drafty_unknown":"No soportado","calls_incoming":"Llamada entrante","calls_outgoing":"Llamada saliente","calls_you_label":"Tú","menu_item_video_call":"Videollamada","already_in_call":"¡Ya estás hablando!","call_cancelled":"cancelada","call_missed":"perdida","call_declined":"rechazada","call_disconnected":"desconectada","label_use_secure_connection":"Usar conexión segura","cred_confirmed_successfully":"Confirmado con éxito","menu_item_edit":"Editar","editing_message":"Edición","message_edited_marker":", editado","icon_title_add_image":"Añadir imagen","icon_title_attach_file":"Adjuntar archivo","icon_title_delete":"Eliminar grabación","icon_title_pause":"Pausar reproducción","icon_title_play":"Reproducir grabación","icon_title_record_voice":"Grabar mensaje de voz","icon_title_resume":"Reanudar la reproducción","icon_title_send":"Enviar mensaje","drag_file":"Arrastra el archivo aquí","drafty_video":"Grabación de vídeo","call_in_progress":"en progreso","menu_item_audio_call":"Llamada","unrecognized_video_format":"No se reconoce el formato de este video","loading_note":"Cargando...","password_i_have_code":"Tengo código","label_reset_password_tel":"Enviar SMS para restablecer la contraseña","mobile_phone_number":"Número de teléfono móvil","password_reset_sms_sent":"Se ha enviado un mensaje de texto con un código de seguridad.","mobile_number_required":"Número de teléfono móvil requerido","current_email":"Correo electrónico actual","current_phone":"Número de teléfono actual","new_email":"Nuevo correo electrónico","new_phone_number":"Nuevo número de teléfono","change_email":"Cambiar correo electrónico","change_phone":"Cambiar número de teléfono","call_busy":"ocupado","failed_to_init_audio":"Error al inicializar la grabación de audio","password_reset_success":"Restablecimiento de contraseña con éxito"}')}}]);
\ No newline at end of file
diff --git a/umd/index.dev.js b/umd/index.dev.js
index 428c5a4c..3e984299 100644
--- a/umd/index.dev.js
+++ b/umd/index.dev.js
@@ -10,72 +10,72 @@
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "CONSTANTS": () => (/* binding */ CONSTANTS),
-/* harmony export */ "DecodeBase64StringError": () => (/* binding */ DecodeBase64StringError),
-/* harmony export */ "Deferred": () => (/* binding */ Deferred),
-/* harmony export */ "ErrorFactory": () => (/* binding */ ErrorFactory),
-/* harmony export */ "FirebaseError": () => (/* binding */ FirebaseError),
-/* harmony export */ "MAX_VALUE_MILLIS": () => (/* binding */ MAX_VALUE_MILLIS),
-/* harmony export */ "RANDOM_FACTOR": () => (/* binding */ RANDOM_FACTOR),
-/* harmony export */ "Sha1": () => (/* binding */ Sha1),
-/* harmony export */ "areCookiesEnabled": () => (/* binding */ areCookiesEnabled),
-/* harmony export */ "assert": () => (/* binding */ assert),
-/* harmony export */ "assertionError": () => (/* binding */ assertionError),
-/* harmony export */ "async": () => (/* binding */ async),
-/* harmony export */ "base64": () => (/* binding */ base64),
-/* harmony export */ "base64Decode": () => (/* binding */ base64Decode),
-/* harmony export */ "base64Encode": () => (/* binding */ base64Encode),
-/* harmony export */ "base64urlEncodeWithoutPadding": () => (/* binding */ base64urlEncodeWithoutPadding),
-/* harmony export */ "calculateBackoffMillis": () => (/* binding */ calculateBackoffMillis),
-/* harmony export */ "contains": () => (/* binding */ contains),
-/* harmony export */ "createMockUserToken": () => (/* binding */ createMockUserToken),
-/* harmony export */ "createSubscribe": () => (/* binding */ createSubscribe),
-/* harmony export */ "decode": () => (/* binding */ decode),
-/* harmony export */ "deepCopy": () => (/* binding */ deepCopy),
-/* harmony export */ "deepEqual": () => (/* binding */ deepEqual),
-/* harmony export */ "deepExtend": () => (/* binding */ deepExtend),
-/* harmony export */ "errorPrefix": () => (/* binding */ errorPrefix),
-/* harmony export */ "extractQuerystring": () => (/* binding */ extractQuerystring),
-/* harmony export */ "getDefaultAppConfig": () => (/* binding */ getDefaultAppConfig),
-/* harmony export */ "getDefaultEmulatorHost": () => (/* binding */ getDefaultEmulatorHost),
-/* harmony export */ "getDefaultEmulatorHostnameAndPort": () => (/* binding */ getDefaultEmulatorHostnameAndPort),
-/* harmony export */ "getDefaults": () => (/* binding */ getDefaults),
-/* harmony export */ "getExperimentalSetting": () => (/* binding */ getExperimentalSetting),
-/* harmony export */ "getGlobal": () => (/* binding */ getGlobal),
-/* harmony export */ "getModularInstance": () => (/* binding */ getModularInstance),
-/* harmony export */ "getUA": () => (/* binding */ getUA),
-/* harmony export */ "isAdmin": () => (/* binding */ isAdmin),
-/* harmony export */ "isBrowser": () => (/* binding */ isBrowser),
-/* harmony export */ "isBrowserExtension": () => (/* binding */ isBrowserExtension),
-/* harmony export */ "isElectron": () => (/* binding */ isElectron),
-/* harmony export */ "isEmpty": () => (/* binding */ isEmpty),
-/* harmony export */ "isIE": () => (/* binding */ isIE),
-/* harmony export */ "isIndexedDBAvailable": () => (/* binding */ isIndexedDBAvailable),
-/* harmony export */ "isMobileCordova": () => (/* binding */ isMobileCordova),
-/* harmony export */ "isNode": () => (/* binding */ isNode),
-/* harmony export */ "isNodeSdk": () => (/* binding */ isNodeSdk),
-/* harmony export */ "isReactNative": () => (/* binding */ isReactNative),
-/* harmony export */ "isSafari": () => (/* binding */ isSafari),
-/* harmony export */ "isUWP": () => (/* binding */ isUWP),
-/* harmony export */ "isValidFormat": () => (/* binding */ isValidFormat),
-/* harmony export */ "isValidTimestamp": () => (/* binding */ isValidTimestamp),
-/* harmony export */ "issuedAtTime": () => (/* binding */ issuedAtTime),
-/* harmony export */ "jsonEval": () => (/* binding */ jsonEval),
-/* harmony export */ "map": () => (/* binding */ map),
-/* harmony export */ "ordinal": () => (/* binding */ ordinal),
-/* harmony export */ "promiseWithTimeout": () => (/* binding */ promiseWithTimeout),
-/* harmony export */ "querystring": () => (/* binding */ querystring),
-/* harmony export */ "querystringDecode": () => (/* binding */ querystringDecode),
-/* harmony export */ "safeGet": () => (/* binding */ safeGet),
-/* harmony export */ "stringLength": () => (/* binding */ stringLength),
-/* harmony export */ "stringToByteArray": () => (/* binding */ stringToByteArray),
-/* harmony export */ "stringify": () => (/* binding */ stringify),
-/* harmony export */ "uuidv4": () => (/* binding */ uuidv4),
-/* harmony export */ "validateArgCount": () => (/* binding */ validateArgCount),
-/* harmony export */ "validateCallback": () => (/* binding */ validateCallback),
-/* harmony export */ "validateContextObject": () => (/* binding */ validateContextObject),
-/* harmony export */ "validateIndexedDBOpenable": () => (/* binding */ validateIndexedDBOpenable),
-/* harmony export */ "validateNamespace": () => (/* binding */ validateNamespace)
+/* harmony export */ CONSTANTS: () => (/* binding */ CONSTANTS),
+/* harmony export */ DecodeBase64StringError: () => (/* binding */ DecodeBase64StringError),
+/* harmony export */ Deferred: () => (/* binding */ Deferred),
+/* harmony export */ ErrorFactory: () => (/* binding */ ErrorFactory),
+/* harmony export */ FirebaseError: () => (/* binding */ FirebaseError),
+/* harmony export */ MAX_VALUE_MILLIS: () => (/* binding */ MAX_VALUE_MILLIS),
+/* harmony export */ RANDOM_FACTOR: () => (/* binding */ RANDOM_FACTOR),
+/* harmony export */ Sha1: () => (/* binding */ Sha1),
+/* harmony export */ areCookiesEnabled: () => (/* binding */ areCookiesEnabled),
+/* harmony export */ assert: () => (/* binding */ assert),
+/* harmony export */ assertionError: () => (/* binding */ assertionError),
+/* harmony export */ async: () => (/* binding */ async),
+/* harmony export */ base64: () => (/* binding */ base64),
+/* harmony export */ base64Decode: () => (/* binding */ base64Decode),
+/* harmony export */ base64Encode: () => (/* binding */ base64Encode),
+/* harmony export */ base64urlEncodeWithoutPadding: () => (/* binding */ base64urlEncodeWithoutPadding),
+/* harmony export */ calculateBackoffMillis: () => (/* binding */ calculateBackoffMillis),
+/* harmony export */ contains: () => (/* binding */ contains),
+/* harmony export */ createMockUserToken: () => (/* binding */ createMockUserToken),
+/* harmony export */ createSubscribe: () => (/* binding */ createSubscribe),
+/* harmony export */ decode: () => (/* binding */ decode),
+/* harmony export */ deepCopy: () => (/* binding */ deepCopy),
+/* harmony export */ deepEqual: () => (/* binding */ deepEqual),
+/* harmony export */ deepExtend: () => (/* binding */ deepExtend),
+/* harmony export */ errorPrefix: () => (/* binding */ errorPrefix),
+/* harmony export */ extractQuerystring: () => (/* binding */ extractQuerystring),
+/* harmony export */ getDefaultAppConfig: () => (/* binding */ getDefaultAppConfig),
+/* harmony export */ getDefaultEmulatorHost: () => (/* binding */ getDefaultEmulatorHost),
+/* harmony export */ getDefaultEmulatorHostnameAndPort: () => (/* binding */ getDefaultEmulatorHostnameAndPort),
+/* harmony export */ getDefaults: () => (/* binding */ getDefaults),
+/* harmony export */ getExperimentalSetting: () => (/* binding */ getExperimentalSetting),
+/* harmony export */ getGlobal: () => (/* binding */ getGlobal),
+/* harmony export */ getModularInstance: () => (/* binding */ getModularInstance),
+/* harmony export */ getUA: () => (/* binding */ getUA),
+/* harmony export */ isAdmin: () => (/* binding */ isAdmin),
+/* harmony export */ isBrowser: () => (/* binding */ isBrowser),
+/* harmony export */ isBrowserExtension: () => (/* binding */ isBrowserExtension),
+/* harmony export */ isElectron: () => (/* binding */ isElectron),
+/* harmony export */ isEmpty: () => (/* binding */ isEmpty),
+/* harmony export */ isIE: () => (/* binding */ isIE),
+/* harmony export */ isIndexedDBAvailable: () => (/* binding */ isIndexedDBAvailable),
+/* harmony export */ isMobileCordova: () => (/* binding */ isMobileCordova),
+/* harmony export */ isNode: () => (/* binding */ isNode),
+/* harmony export */ isNodeSdk: () => (/* binding */ isNodeSdk),
+/* harmony export */ isReactNative: () => (/* binding */ isReactNative),
+/* harmony export */ isSafari: () => (/* binding */ isSafari),
+/* harmony export */ isUWP: () => (/* binding */ isUWP),
+/* harmony export */ isValidFormat: () => (/* binding */ isValidFormat),
+/* harmony export */ isValidTimestamp: () => (/* binding */ isValidTimestamp),
+/* harmony export */ issuedAtTime: () => (/* binding */ issuedAtTime),
+/* harmony export */ jsonEval: () => (/* binding */ jsonEval),
+/* harmony export */ map: () => (/* binding */ map),
+/* harmony export */ ordinal: () => (/* binding */ ordinal),
+/* harmony export */ promiseWithTimeout: () => (/* binding */ promiseWithTimeout),
+/* harmony export */ querystring: () => (/* binding */ querystring),
+/* harmony export */ querystringDecode: () => (/* binding */ querystringDecode),
+/* harmony export */ safeGet: () => (/* binding */ safeGet),
+/* harmony export */ stringLength: () => (/* binding */ stringLength),
+/* harmony export */ stringToByteArray: () => (/* binding */ stringToByteArray),
+/* harmony export */ stringify: () => (/* binding */ stringify),
+/* harmony export */ uuidv4: () => (/* binding */ uuidv4),
+/* harmony export */ validateArgCount: () => (/* binding */ validateArgCount),
+/* harmony export */ validateCallback: () => (/* binding */ validateCallback),
+/* harmony export */ validateContextObject: () => (/* binding */ validateContextObject),
+/* harmony export */ validateIndexedDBOpenable: () => (/* binding */ validateIndexedDBOpenable),
+/* harmony export */ validateNamespace: () => (/* binding */ validateNamespace)
/* harmony export */ });
/**
* @license
@@ -2201,48 +2201,48 @@ function getModularInstance(service) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "API_KEY": () => (/* binding */ API_KEY),
-/* harmony export */ "APP_NAME": () => (/* binding */ APP_NAME),
-/* harmony export */ "AVATAR_SIZE": () => (/* binding */ AVATAR_SIZE),
-/* harmony export */ "BROKEN_IMAGE_SIZE": () => (/* binding */ BROKEN_IMAGE_SIZE),
-/* harmony export */ "CHANNEL_ACCESS_MODE": () => (/* binding */ CHANNEL_ACCESS_MODE),
-/* harmony export */ "DEFAULT_HOST": () => (/* binding */ DEFAULT_HOST),
-/* harmony export */ "DEFAULT_P2P_ACCESS_MODE": () => (/* binding */ DEFAULT_P2P_ACCESS_MODE),
-/* harmony export */ "EDIT_PREVIEW_LENGTH": () => (/* binding */ EDIT_PREVIEW_LENGTH),
-/* harmony export */ "FORWARDED_PREVIEW_LENGTH": () => (/* binding */ FORWARDED_PREVIEW_LENGTH),
-/* harmony export */ "IMAGE_PREVIEW_DIM": () => (/* binding */ IMAGE_PREVIEW_DIM),
-/* harmony export */ "IMAGE_THUMBNAIL_DIM": () => (/* binding */ IMAGE_THUMBNAIL_DIM),
-/* harmony export */ "IMMEDIATE_P2P_SUBSCRIPTION": () => (/* binding */ IMMEDIATE_P2P_SUBSCRIPTION),
-/* harmony export */ "KEYPRESS_DELAY": () => (/* binding */ KEYPRESS_DELAY),
-/* harmony export */ "KNOWN_HOSTS": () => (/* binding */ KNOWN_HOSTS),
-/* harmony export */ "LINK_CONTACT_US": () => (/* binding */ LINK_CONTACT_US),
-/* harmony export */ "LINK_PRIVACY_POLICY": () => (/* binding */ LINK_PRIVACY_POLICY),
-/* harmony export */ "LINK_TERMS_OF_SERVICE": () => (/* binding */ LINK_TERMS_OF_SERVICE),
-/* harmony export */ "LOGGING_ENABLED": () => (/* binding */ LOGGING_ENABLED),
-/* harmony export */ "MAX_AVATAR_BYTES": () => (/* binding */ MAX_AVATAR_BYTES),
-/* harmony export */ "MAX_DURATION": () => (/* binding */ MAX_DURATION),
-/* harmony export */ "MAX_EXTERN_ATTACHMENT_SIZE": () => (/* binding */ MAX_EXTERN_ATTACHMENT_SIZE),
-/* harmony export */ "MAX_IMAGE_DIM": () => (/* binding */ MAX_IMAGE_DIM),
-/* harmony export */ "MAX_INBAND_ATTACHMENT_SIZE": () => (/* binding */ MAX_INBAND_ATTACHMENT_SIZE),
-/* harmony export */ "MAX_ONLINE_IN_TOPIC": () => (/* binding */ MAX_ONLINE_IN_TOPIC),
-/* harmony export */ "MAX_PEER_TITLE_LENGTH": () => (/* binding */ MAX_PEER_TITLE_LENGTH),
-/* harmony export */ "MAX_TAG_COUNT": () => (/* binding */ MAX_TAG_COUNT),
-/* harmony export */ "MAX_TAG_LENGTH": () => (/* binding */ MAX_TAG_LENGTH),
-/* harmony export */ "MAX_TITLE_LENGTH": () => (/* binding */ MAX_TITLE_LENGTH),
-/* harmony export */ "MAX_TOPIC_DESCRIPTION_LENGTH": () => (/* binding */ MAX_TOPIC_DESCRIPTION_LENGTH),
-/* harmony export */ "MEDIA_BREAKPOINT": () => (/* binding */ MEDIA_BREAKPOINT),
-/* harmony export */ "MESSAGES_PAGE": () => (/* binding */ MESSAGES_PAGE),
-/* harmony export */ "MESSAGE_PREVIEW_LENGTH": () => (/* binding */ MESSAGE_PREVIEW_LENGTH),
-/* harmony export */ "MIN_DURATION": () => (/* binding */ MIN_DURATION),
-/* harmony export */ "MIN_TAG_LENGTH": () => (/* binding */ MIN_TAG_LENGTH),
-/* harmony export */ "NEW_GRP_ACCESS_MODE": () => (/* binding */ NEW_GRP_ACCESS_MODE),
-/* harmony export */ "NO_ACCESS_MODE": () => (/* binding */ NO_ACCESS_MODE),
-/* harmony export */ "NO_DIMENSIONS_VIDEO": () => (/* binding */ NO_DIMENSIONS_VIDEO),
-/* harmony export */ "QUOTED_REPLY_LENGTH": () => (/* binding */ QUOTED_REPLY_LENGTH),
-/* harmony export */ "READ_DELAY": () => (/* binding */ READ_DELAY),
-/* harmony export */ "REM_SIZE": () => (/* binding */ REM_SIZE),
-/* harmony export */ "VIDEO_PREVIEW_DIM": () => (/* binding */ VIDEO_PREVIEW_DIM),
-/* harmony export */ "VIDEO_THUMBNAIL_WIDTH": () => (/* binding */ VIDEO_THUMBNAIL_WIDTH)
+/* harmony export */ API_KEY: () => (/* binding */ API_KEY),
+/* harmony export */ APP_NAME: () => (/* binding */ APP_NAME),
+/* harmony export */ AVATAR_SIZE: () => (/* binding */ AVATAR_SIZE),
+/* harmony export */ BROKEN_IMAGE_SIZE: () => (/* binding */ BROKEN_IMAGE_SIZE),
+/* harmony export */ CHANNEL_ACCESS_MODE: () => (/* binding */ CHANNEL_ACCESS_MODE),
+/* harmony export */ DEFAULT_HOST: () => (/* binding */ DEFAULT_HOST),
+/* harmony export */ DEFAULT_P2P_ACCESS_MODE: () => (/* binding */ DEFAULT_P2P_ACCESS_MODE),
+/* harmony export */ EDIT_PREVIEW_LENGTH: () => (/* binding */ EDIT_PREVIEW_LENGTH),
+/* harmony export */ FORWARDED_PREVIEW_LENGTH: () => (/* binding */ FORWARDED_PREVIEW_LENGTH),
+/* harmony export */ IMAGE_PREVIEW_DIM: () => (/* binding */ IMAGE_PREVIEW_DIM),
+/* harmony export */ IMAGE_THUMBNAIL_DIM: () => (/* binding */ IMAGE_THUMBNAIL_DIM),
+/* harmony export */ IMMEDIATE_P2P_SUBSCRIPTION: () => (/* binding */ IMMEDIATE_P2P_SUBSCRIPTION),
+/* harmony export */ KEYPRESS_DELAY: () => (/* binding */ KEYPRESS_DELAY),
+/* harmony export */ KNOWN_HOSTS: () => (/* binding */ KNOWN_HOSTS),
+/* harmony export */ LINK_CONTACT_US: () => (/* binding */ LINK_CONTACT_US),
+/* harmony export */ LINK_PRIVACY_POLICY: () => (/* binding */ LINK_PRIVACY_POLICY),
+/* harmony export */ LINK_TERMS_OF_SERVICE: () => (/* binding */ LINK_TERMS_OF_SERVICE),
+/* harmony export */ LOGGING_ENABLED: () => (/* binding */ LOGGING_ENABLED),
+/* harmony export */ MAX_AVATAR_BYTES: () => (/* binding */ MAX_AVATAR_BYTES),
+/* harmony export */ MAX_DURATION: () => (/* binding */ MAX_DURATION),
+/* harmony export */ MAX_EXTERN_ATTACHMENT_SIZE: () => (/* binding */ MAX_EXTERN_ATTACHMENT_SIZE),
+/* harmony export */ MAX_IMAGE_DIM: () => (/* binding */ MAX_IMAGE_DIM),
+/* harmony export */ MAX_INBAND_ATTACHMENT_SIZE: () => (/* binding */ MAX_INBAND_ATTACHMENT_SIZE),
+/* harmony export */ MAX_ONLINE_IN_TOPIC: () => (/* binding */ MAX_ONLINE_IN_TOPIC),
+/* harmony export */ MAX_PEER_TITLE_LENGTH: () => (/* binding */ MAX_PEER_TITLE_LENGTH),
+/* harmony export */ MAX_TAG_COUNT: () => (/* binding */ MAX_TAG_COUNT),
+/* harmony export */ MAX_TAG_LENGTH: () => (/* binding */ MAX_TAG_LENGTH),
+/* harmony export */ MAX_TITLE_LENGTH: () => (/* binding */ MAX_TITLE_LENGTH),
+/* harmony export */ MAX_TOPIC_DESCRIPTION_LENGTH: () => (/* binding */ MAX_TOPIC_DESCRIPTION_LENGTH),
+/* harmony export */ MEDIA_BREAKPOINT: () => (/* binding */ MEDIA_BREAKPOINT),
+/* harmony export */ MESSAGES_PAGE: () => (/* binding */ MESSAGES_PAGE),
+/* harmony export */ MESSAGE_PREVIEW_LENGTH: () => (/* binding */ MESSAGE_PREVIEW_LENGTH),
+/* harmony export */ MIN_DURATION: () => (/* binding */ MIN_DURATION),
+/* harmony export */ MIN_TAG_LENGTH: () => (/* binding */ MIN_TAG_LENGTH),
+/* harmony export */ NEW_GRP_ACCESS_MODE: () => (/* binding */ NEW_GRP_ACCESS_MODE),
+/* harmony export */ NO_ACCESS_MODE: () => (/* binding */ NO_ACCESS_MODE),
+/* harmony export */ NO_DIMENSIONS_VIDEO: () => (/* binding */ NO_DIMENSIONS_VIDEO),
+/* harmony export */ QUOTED_REPLY_LENGTH: () => (/* binding */ QUOTED_REPLY_LENGTH),
+/* harmony export */ READ_DELAY: () => (/* binding */ READ_DELAY),
+/* harmony export */ REM_SIZE: () => (/* binding */ REM_SIZE),
+/* harmony export */ VIDEO_PREVIEW_DIM: () => (/* binding */ VIDEO_PREVIEW_DIM),
+/* harmony export */ VIDEO_THUMBNAIL_WIDTH: () => (/* binding */ VIDEO_THUMBNAIL_WIDTH)
/* harmony export */ });
/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version.js */ "./src/version.js");
@@ -2302,12 +2302,12 @@ const IMMEDIATE_P2P_SUBSCRIPTION = false;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "CALL_HEAD_STARTED": () => (/* binding */ CALL_HEAD_STARTED),
-/* harmony export */ "CALL_STATE_INCOMING_RECEIVED": () => (/* binding */ CALL_STATE_INCOMING_RECEIVED),
-/* harmony export */ "CALL_STATE_IN_PROGRESS": () => (/* binding */ CALL_STATE_IN_PROGRESS),
-/* harmony export */ "CALL_STATE_NONE": () => (/* binding */ CALL_STATE_NONE),
-/* harmony export */ "CALL_STATE_OUTGOING_INITATED": () => (/* binding */ CALL_STATE_OUTGOING_INITATED),
-/* harmony export */ "VC_CAROUSEL_ITEM_GAP": () => (/* binding */ VC_CAROUSEL_ITEM_GAP)
+/* harmony export */ CALL_HEAD_STARTED: () => (/* binding */ CALL_HEAD_STARTED),
+/* harmony export */ CALL_STATE_INCOMING_RECEIVED: () => (/* binding */ CALL_STATE_INCOMING_RECEIVED),
+/* harmony export */ CALL_STATE_IN_PROGRESS: () => (/* binding */ CALL_STATE_IN_PROGRESS),
+/* harmony export */ CALL_STATE_NONE: () => (/* binding */ CALL_STATE_NONE),
+/* harmony export */ CALL_STATE_OUTGOING_INITATED: () => (/* binding */ CALL_STATE_OUTGOING_INITATED),
+/* harmony export */ VC_CAROUSEL_ITEM_GAP: () => (/* binding */ VC_CAROUSEL_ITEM_GAP)
/* harmony export */ });
const CALL_STATE_NONE = 0;
const CALL_STATE_OUTGOING_INITATED = 1;
@@ -2326,23 +2326,23 @@ const VC_CAROUSEL_ITEM_GAP = 16;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "MIME_EXTENSIONS": () => (/* binding */ MIME_EXTENSIONS),
-/* harmony export */ "SUPPORTED_IMAGE_FORMATS": () => (/* binding */ SUPPORTED_IMAGE_FORMATS),
-/* harmony export */ "base64DecodedLen": () => (/* binding */ base64DecodedLen),
-/* harmony export */ "base64EncodedLen": () => (/* binding */ base64EncodedLen),
-/* harmony export */ "base64ReEncode": () => (/* binding */ base64ReEncode),
-/* harmony export */ "base64ToBlob": () => (/* binding */ base64ToBlob),
-/* harmony export */ "base64ToIntArray": () => (/* binding */ base64ToIntArray),
-/* harmony export */ "blobToBase64": () => (/* binding */ blobToBase64),
-/* harmony export */ "fileNameForMime": () => (/* binding */ fileNameForMime),
-/* harmony export */ "filePasted": () => (/* binding */ filePasted),
-/* harmony export */ "fileToBase64": () => (/* binding */ fileToBase64),
-/* harmony export */ "fitImageSize": () => (/* binding */ fitImageSize),
-/* harmony export */ "getMimeType": () => (/* binding */ getMimeType),
-/* harmony export */ "imageCrop": () => (/* binding */ imageCrop),
-/* harmony export */ "imageScaled": () => (/* binding */ imageScaled),
-/* harmony export */ "intArrayToBase64": () => (/* binding */ intArrayToBase64),
-/* harmony export */ "makeImageUrl": () => (/* binding */ makeImageUrl)
+/* harmony export */ MIME_EXTENSIONS: () => (/* binding */ MIME_EXTENSIONS),
+/* harmony export */ SUPPORTED_IMAGE_FORMATS: () => (/* binding */ SUPPORTED_IMAGE_FORMATS),
+/* harmony export */ base64DecodedLen: () => (/* binding */ base64DecodedLen),
+/* harmony export */ base64EncodedLen: () => (/* binding */ base64EncodedLen),
+/* harmony export */ base64ReEncode: () => (/* binding */ base64ReEncode),
+/* harmony export */ base64ToBlob: () => (/* binding */ base64ToBlob),
+/* harmony export */ base64ToIntArray: () => (/* binding */ base64ToIntArray),
+/* harmony export */ blobToBase64: () => (/* binding */ blobToBase64),
+/* harmony export */ fileNameForMime: () => (/* binding */ fileNameForMime),
+/* harmony export */ filePasted: () => (/* binding */ filePasted),
+/* harmony export */ fileToBase64: () => (/* binding */ fileToBase64),
+/* harmony export */ fitImageSize: () => (/* binding */ fitImageSize),
+/* harmony export */ getMimeType: () => (/* binding */ getMimeType),
+/* harmony export */ imageCrop: () => (/* binding */ imageCrop),
+/* harmony export */ imageScaled: () => (/* binding */ imageScaled),
+/* harmony export */ intArrayToBase64: () => (/* binding */ intArrayToBase64),
+/* harmony export */ makeImageUrl: () => (/* binding */ makeImageUrl)
/* harmony export */ });
const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];
const MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];
@@ -2609,9 +2609,9 @@ function base64ToIntArray(b64) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "fullFormatter": () => (/* binding */ fullFormatter),
-/* harmony export */ "previewFormatter": () => (/* binding */ previewFormatter),
-/* harmony export */ "replyFormatter": () => (/* binding */ replyFormatter)
+/* harmony export */ fullFormatter: () => (/* binding */ fullFormatter),
+/* harmony export */ previewFormatter: () => (/* binding */ previewFormatter),
+/* harmony export */ replyFormatter: () => (/* binding */ replyFormatter)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -3145,9 +3145,9 @@ function replyFormatter(style, data, values, key, stack) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "detectServerAddress": () => (/* binding */ detectServerAddress),
-/* harmony export */ "isLocalHost": () => (/* binding */ isLocalHost),
-/* harmony export */ "isSecureConnection": () => (/* binding */ isSecureConnection)
+/* harmony export */ detectServerAddress: () => (/* binding */ detectServerAddress),
+/* harmony export */ isLocalHost: () => (/* binding */ isLocalHost),
+/* harmony export */ isSecureConnection: () => (/* binding */ isSecureConnection)
/* harmony export */ });
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
@@ -3245,7 +3245,9 @@ class HashNavigation {
const args = [];
for (const key in params) {
if (params.hasOwnProperty(key)) {
- args.push(key + '=' + encodeURIComponent(params[key]));
+ if (params[key] !== undefined) {
+ args.push(key + '=' + encodeURIComponent(params[key]));
+ }
}
}
if (args.length > 0) {
@@ -3295,14 +3297,14 @@ class HashNavigation {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "bytesToHumanSize": () => (/* binding */ bytesToHumanSize),
-/* harmony export */ "flagEmoji": () => (/* binding */ flagEmoji),
-/* harmony export */ "idToColorClass": () => (/* binding */ idToColorClass),
-/* harmony export */ "letterTileColorId": () => (/* binding */ letterTileColorId),
-/* harmony export */ "relativeDateFormat": () => (/* binding */ relativeDateFormat),
-/* harmony export */ "secondsToTime": () => (/* binding */ secondsToTime),
-/* harmony export */ "shortDateFormat": () => (/* binding */ shortDateFormat),
-/* harmony export */ "shortenFileName": () => (/* binding */ shortenFileName)
+/* harmony export */ bytesToHumanSize: () => (/* binding */ bytesToHumanSize),
+/* harmony export */ flagEmoji: () => (/* binding */ flagEmoji),
+/* harmony export */ idToColorClass: () => (/* binding */ idToColorClass),
+/* harmony export */ letterTileColorId: () => (/* binding */ letterTileColorId),
+/* harmony export */ relativeDateFormat: () => (/* binding */ relativeDateFormat),
+/* harmony export */ secondsToTime: () => (/* binding */ secondsToTime),
+/* harmony export */ shortDateFormat: () => (/* binding */ shortDateFormat),
+/* harmony export */ shortenFileName: () => (/* binding */ shortenFileName)
/* harmony export */ });
function shortDateFormat(then, locale) {
locale = locale || window.navigator.userLanguage || window.navigator.language;
@@ -3404,17 +3406,17 @@ function flagEmoji(countryCode) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "arrayEqual": () => (/* binding */ arrayEqual),
-/* harmony export */ "asEmail": () => (/* binding */ asEmail),
-/* harmony export */ "asPhone": () => (/* binding */ asPhone),
-/* harmony export */ "cancelablePromise": () => (/* binding */ cancelablePromise),
-/* harmony export */ "clipStr": () => (/* binding */ clipStr),
-/* harmony export */ "deliveryMarker": () => (/* binding */ deliveryMarker),
-/* harmony export */ "isUrlRelative": () => (/* binding */ isUrlRelative),
-/* harmony export */ "sanitizeUrl": () => (/* binding */ sanitizeUrl),
-/* harmony export */ "sanitizeUrlForMime": () => (/* binding */ sanitizeUrlForMime),
-/* harmony export */ "theCard": () => (/* binding */ theCard),
-/* harmony export */ "updateFavicon": () => (/* binding */ updateFavicon)
+/* harmony export */ arrayEqual: () => (/* binding */ arrayEqual),
+/* harmony export */ asEmail: () => (/* binding */ asEmail),
+/* harmony export */ asPhone: () => (/* binding */ asPhone),
+/* harmony export */ cancelablePromise: () => (/* binding */ cancelablePromise),
+/* harmony export */ clipStr: () => (/* binding */ clipStr),
+/* harmony export */ deliveryMarker: () => (/* binding */ deliveryMarker),
+/* harmony export */ isUrlRelative: () => (/* binding */ isUrlRelative),
+/* harmony export */ sanitizeUrl: () => (/* binding */ sanitizeUrl),
+/* harmony export */ sanitizeUrlForMime: () => (/* binding */ sanitizeUrlForMime),
+/* harmony export */ theCard: () => (/* binding */ theCard),
+/* harmony export */ updateFavicon: () => (/* binding */ updateFavicon)
/* harmony export */ });
/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_0__);
@@ -3593,9 +3595,9 @@ function clipStr(str, length) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "PACKAGE_VERSION": () => (/* binding */ PACKAGE_VERSION)
+/* harmony export */ PACKAGE_VERSION: () => (/* binding */ PACKAGE_VERSION)
/* harmony export */ });
-const PACKAGE_VERSION = "0.23.0-rc1";
+const PACKAGE_VERSION = "0.23.0-rc2";
/***/ }),
@@ -5254,7 +5256,8 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
getVisibleMessageRange(holderRect) {
let min = Number.MAX_SAFE_INTEGER,
max = -1;
- this.chatMessageRefs.forEach((ref, seq) => {
+ let visibilityStatus = false;
+ this.chatMessageRefs.every((ref, seq) => {
if (ref.current) {
const {
top,
@@ -5263,10 +5266,14 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
} = ref.current.getBoundingClientRect();
const visible = top <= holderRect.top ? holderRect.top - top <= height : bottom - holderRect.bottom <= height;
if (visible) {
+ visibilityStatus = true;
min = Math.min(min, seq);
max = Math.max(max, seq);
+ } else if (visibilityStatus) {
+ return false;
}
}
+ return true;
});
return max >= min ? {
min: min,
@@ -5329,11 +5336,11 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
}
}
if (topic) {
- if (this.state.topic != prevState.topic || !prevProps.ready) {
+ if (this.state.topic != prevState.topic || this.props.myUserId && !prevProps.myUserId) {
const newTopic = this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic;
if (topic.isP2PType() && newTopic && !_config_js__WEBPACK_IMPORTED_MODULE_19__.IMMEDIATE_P2P_SUBSCRIPTION) {
topic.getMeta(topic.startMetaQuery().withDesc().build());
- } else {
+ } else if (this.props.myUserId) {
this.subscribe(topic);
}
} else if (topic.isSubscribed() && this.state.isReader && !prevState.isReader) {
@@ -5372,7 +5379,8 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
showGoToLastButton: false,
dragging: false,
pins: [],
- selectedPin: 0
+ selectedPin: 0,
+ subsVersion: 0
};
} else if (nextProps.topic != prevState.topic) {
const topic = nextProps.tinode.getTopic(nextProps.topic);
@@ -5529,6 +5537,11 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
topic: ctrl.topic
});
}
+ if (this.state.deleted) {
+ this.setState({
+ deleted: false
+ });
+ }
this.props.onNewTopicCreated(this.props.topic, ctrl.topic);
let discard = [];
topic.queuedMessages(pub => {
@@ -5587,12 +5600,13 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
scrollPosition: pos,
showGoToLastButton: pos > SHOW_GO_TO_LAST_DIST && pos < this.state.scrollPosition
});
- if (this.state.fetchingMessages) {
+ if (this.state.fetchingMessages || this.processingScrollEvent) {
return;
}
if (event.target.scrollTop <= FETCH_PAGE_TRIGGER) {
const topic = this.props.tinode.getTopic(this.state.topic);
if (topic && topic.isSubscribed()) {
+ this.processingScrollEvent = true;
const {
min,
max
@@ -5609,6 +5623,7 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
}
}
}
+ this.processingScrollEvent = false;
}
mountDnDEvents(dnd) {
if (dnd) {
@@ -5708,7 +5723,8 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
}
});
const newState = {
- onlineSubs: subs
+ onlineSubs: subs,
+ subsVersion: this.state.subsVersion + 1
};
const peer = topic.p2pPeerDesc();
if (peer) {
@@ -7216,6 +7232,7 @@ class SidepanelView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCo
tinode: this.props.tinode,
myUserId: this.props.myUserId,
trustedBadges: this.props.trustedBadges,
+ reqCredMethod: this.props.reqCredMethod,
onShowCountrySelector: this.props.onShowCountrySelector,
onNavigate: this.props.onNavigate,
onCredAdd: this.props.onCredAdd,
@@ -7432,6 +7449,13 @@ const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
"type": 0,
"value": "Confirmed successfully"
}]
+ },
+ password_reset_success: {
+ id: "password_reset_success",
+ defaultMessage: [{
+ "type": 0,
+ "value": "Password reset successfully"
+ }]
}
});
class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
@@ -8031,6 +8055,7 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
parsed.path[0] = 'cred';
parsed.params['method'] = params.cred[0];
parsed.params['token'] = params.token;
+ parsed.params['code'] = params.code;
_lib_navigation_js__WEBPACK_IMPORTED_MODULE_18__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_18__["default"].composeUrlHash(parsed.path, parsed.params));
}
handleLoginSuccessful() {
@@ -8104,7 +8129,7 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
}
} else if (what == 'read') {
this.resetContactList();
- } else if (what == 'msg') {
+ } else if (what == 'msg' && cont) {
const topic = this.tinode.getTopic(cont.topic);
const archived = topic && topic.isArchived();
if (cont.unread > 0 && this.state.messageSounds && !archived) {
@@ -8125,7 +8150,7 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
});
}
} else if (what == 'del') {} else if (what == 'upd' || what == 'call') {} else {
- console.info("Unsupported (yet) presence update:", what, "in", cont.topic);
+ console.info("Unsupported (yet) presence update:", what, "in", (cont || {}).topic);
}
}
tnMeSubsUpdated(unused) {
@@ -8227,6 +8252,7 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
}
} else {
this.setState({
+ topicSelected: null,
errorText: '',
errorLevel: null,
mobilePanel: 'sidepanel',
@@ -8474,7 +8500,8 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
}
handleCredConfirm(method, response) {
TinodeWeb.navigateToCredentialsView({
- cred: [method]
+ cred: [method],
+ code: response
});
}
handleSidepanelCancel() {
@@ -8851,7 +8878,7 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
meth: cred,
resp: code
}
- }).catch(err => this.handleError(err.message, 'err'));
+ }).then(_ => _lib_navigation_js__WEBPACK_IMPORTED_MODULE_18__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_18__["default"].setUrlSidePanel(window.location.hash, 'contacts'))).catch(err => this.handleError(err.message, 'err'));
} else {
this.setState({
credMethod: cred,
@@ -8877,7 +8904,10 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
this.tinode.connect().then(_ => this.tinode.updateAccountBasic(null, null, newPassword, {
scheme: tempAuth.scheme,
secret: secret
- })).then(_ => _lib_navigation_js__WEBPACK_IMPORTED_MODULE_18__["default"].navigateTo('')).catch(err => {
+ })).then(_ => {
+ this.handleError(this.props.intl.formatMessage(messages.password_reset_success), 'info');
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_18__["default"].navigateTo('');
+ }).catch(err => {
this.handleError(err.message, 'err');
});
}
@@ -9468,7 +9498,7 @@ class ValidationView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureC
placeholder: numbers_only,
value: this.state.code,
onChange: this.handleCodeChange,
- onKeyPress: this.handleKeyPress,
+ onKeyDown: this.handleKeyPress,
required: true
}))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
className: "dialog-buttons"
@@ -12994,7 +13024,7 @@ class ErrorPanel extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCompo
className: "icon"
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
className: "material-icons"
- }, level)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, this.props.text, this.props.action ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
+ }, level)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, this.props.text, this.props.action ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "\xA0 ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
href: "#",
style: {
whiteSpace: 'nowrap'
@@ -16473,7 +16503,7 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var livekit_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! livekit-client */ "../../../go/src/github.com/livekit/client-sdk-js/dist/livekit-client.esm.mjs");
+/* harmony import */ var livekit_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! livekit-client */ "./node_modules/livekit-client/dist/livekit-client.esm.mjs");
/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
@@ -16564,7 +16594,7 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var livekit_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! livekit-client */ "../../../go/src/github.com/livekit/client-sdk-js/dist/livekit-client.esm.mjs");
+/* harmony import */ var livekit_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! livekit-client */ "./node_modules/livekit-client/dist/livekit-client.esm.mjs");
/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
/* harmony import */ var _vc_carousel_item_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vc-carousel-item.jsx */ "./src/widgets/vc-carousel-item.jsx");
/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants.js */ "./src/constants.js");
@@ -16681,7 +16711,7 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var livekit_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! livekit-client */ "../../../go/src/github.com/livekit/client-sdk-js/dist/livekit-client.esm.mjs");
+/* harmony import */ var livekit_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! livekit-client */ "./node_modules/livekit-client/dist/livekit-client.esm.mjs");
/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
/* harmony import */ var _vc_carousel_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./vc-carousel.jsx */ "./src/widgets/vc-carousel.jsx");
/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
@@ -17192,7 +17222,7 @@ class VisiblePassword extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pure
super(props);
this.inputRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
this.state = {
- value: this.props.value,
+ value: this.props.value || '',
visible: false
};
this.handleVisibility = this.handleVisibility.bind(this);
@@ -17222,7 +17252,7 @@ class VisiblePassword extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pure
handleKeyDown(e) {
if (e.keyCode == 27) {
this.setState({
- value: this.props.value,
+ value: this.props.value || '',
visible: false
});
if (this.props.onFinished) {
@@ -17253,7 +17283,7 @@ class VisiblePassword extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pure
onBlur: this.handleEditingFinished
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
className: "with-visibility",
- type: this.state.visible ? "text" : "password",
+ type: this.state.visible ? 'text' : 'password',
value: this.state.value,
placeholder: this.props.placeholder,
required: this.props.required ? 'required' : '',
@@ -17342,22743 +17372,6 @@ module.exports = ReactIntl;
module.exports = tinode;
-/***/ }),
-
-/***/ "../../../go/src/github.com/livekit/client-sdk-js/dist/livekit-client.esm.mjs":
-/*!************************************************************************************!*\
- !*** ../../../go/src/github.com/livekit/client-sdk-js/dist/livekit-client.esm.mjs ***!
- \************************************************************************************/
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "AudioPresets": () => (/* binding */ AudioPresets),
-/* harmony export */ "ConnectionCheck": () => (/* binding */ ConnectionCheck),
-/* harmony export */ "ConnectionError": () => (/* binding */ ConnectionError),
-/* harmony export */ "ConnectionQuality": () => (/* binding */ ConnectionQuality),
-/* harmony export */ "ConnectionState": () => (/* binding */ ConnectionState),
-/* harmony export */ "CriticalTimers": () => (/* binding */ CriticalTimers),
-/* harmony export */ "DataPacket_Kind": () => (/* binding */ DataPacket_Kind),
-/* harmony export */ "DefaultReconnectPolicy": () => (/* binding */ DefaultReconnectPolicy),
-/* harmony export */ "DeviceUnsupportedError": () => (/* binding */ DeviceUnsupportedError),
-/* harmony export */ "DisconnectReason": () => (/* binding */ DisconnectReason),
-/* harmony export */ "EngineEvent": () => (/* binding */ EngineEvent),
-/* harmony export */ "LivekitError": () => (/* binding */ LivekitError),
-/* harmony export */ "LocalAudioTrack": () => (/* binding */ LocalAudioTrack),
-/* harmony export */ "LocalParticipant": () => (/* binding */ LocalParticipant),
-/* harmony export */ "LocalTrack": () => (/* binding */ LocalTrack),
-/* harmony export */ "LocalTrackPublication": () => (/* binding */ LocalTrackPublication),
-/* harmony export */ "LocalVideoTrack": () => (/* binding */ LocalVideoTrack),
-/* harmony export */ "LogLevel": () => (/* binding */ LogLevel),
-/* harmony export */ "MediaDeviceFailure": () => (/* binding */ MediaDeviceFailure),
-/* harmony export */ "NegotiationError": () => (/* binding */ NegotiationError),
-/* harmony export */ "Participant": () => (/* binding */ Participant),
-/* harmony export */ "ParticipantEvent": () => (/* binding */ ParticipantEvent),
-/* harmony export */ "PublishDataError": () => (/* binding */ PublishDataError),
-/* harmony export */ "RemoteAudioTrack": () => (/* binding */ RemoteAudioTrack),
-/* harmony export */ "RemoteParticipant": () => (/* binding */ RemoteParticipant),
-/* harmony export */ "RemoteTrack": () => (/* binding */ RemoteTrack),
-/* harmony export */ "RemoteTrackPublication": () => (/* binding */ RemoteTrackPublication),
-/* harmony export */ "RemoteVideoTrack": () => (/* binding */ RemoteVideoTrack),
-/* harmony export */ "Room": () => (/* binding */ Room),
-/* harmony export */ "RoomEvent": () => (/* binding */ RoomEvent),
-/* harmony export */ "RoomState": () => (/* binding */ RoomState),
-/* harmony export */ "ScreenSharePresets": () => (/* binding */ ScreenSharePresets),
-/* harmony export */ "Track": () => (/* binding */ Track),
-/* harmony export */ "TrackEvent": () => (/* binding */ TrackEvent),
-/* harmony export */ "TrackInvalidError": () => (/* binding */ TrackInvalidError),
-/* harmony export */ "TrackPublication": () => (/* binding */ TrackPublication),
-/* harmony export */ "UnexpectedConnectionState": () => (/* binding */ UnexpectedConnectionState),
-/* harmony export */ "UnsupportedServer": () => (/* binding */ UnsupportedServer),
-/* harmony export */ "VideoPreset": () => (/* binding */ VideoPreset),
-/* harmony export */ "VideoPresets": () => (/* binding */ VideoPresets),
-/* harmony export */ "VideoPresets43": () => (/* binding */ VideoPresets43),
-/* harmony export */ "VideoQuality": () => (/* binding */ VideoQuality),
-/* harmony export */ "attachToElement": () => (/* binding */ attachToElement),
-/* harmony export */ "createAudioAnalyser": () => (/* binding */ createAudioAnalyser),
-/* harmony export */ "createLocalAudioTrack": () => (/* binding */ createLocalAudioTrack),
-/* harmony export */ "createLocalScreenTracks": () => (/* binding */ createLocalScreenTracks),
-/* harmony export */ "createLocalTracks": () => (/* binding */ createLocalTracks),
-/* harmony export */ "createLocalVideoTrack": () => (/* binding */ createLocalVideoTrack),
-/* harmony export */ "detachTrack": () => (/* binding */ detachTrack),
-/* harmony export */ "getEmptyAudioStreamTrack": () => (/* binding */ getEmptyAudioStreamTrack),
-/* harmony export */ "getEmptyVideoStreamTrack": () => (/* binding */ getEmptyVideoStreamTrack),
-/* harmony export */ "isBackupCodec": () => (/* binding */ isBackupCodec),
-/* harmony export */ "isBrowserSupported": () => (/* binding */ isBrowserSupported),
-/* harmony export */ "protocolVersion": () => (/* binding */ protocolVersion),
-/* harmony export */ "setLogExtension": () => (/* binding */ setLogExtension),
-/* harmony export */ "setLogLevel": () => (/* binding */ setLogLevel),
-/* harmony export */ "supportsAV1": () => (/* binding */ supportsAV1),
-/* harmony export */ "supportsAdaptiveStream": () => (/* binding */ supportsAdaptiveStream),
-/* harmony export */ "supportsDynacast": () => (/* binding */ supportsDynacast),
-/* harmony export */ "version": () => (/* binding */ version)
-/* harmony export */ });
-function _mergeNamespaces(n, m) {
- m.forEach(function (e) {
- e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {
- if (k !== 'default' && !(k in n)) {
- var d = Object.getOwnPropertyDescriptor(e, k);
- Object.defineProperty(n, k, d.get ? d : {
- enumerable: true,
- get: function () { return e[k]; }
- });
- }
- });
- });
- return Object.freeze(n);
-}
-
-var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
-
-function getDefaultExportFromCjs (x) {
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
-}
-
-var loglevelExports = {};
-var loglevel = {
- get exports(){ return loglevelExports; },
- set exports(v){ loglevelExports = v; },
-};
-
-/*
-* loglevel - https://github.com/pimterry/loglevel
-*
-* Copyright (c) 2013 Tim Perry
-* Licensed under the MIT license.
-*/
-(function (module) {
- (function (root, definition) {
-
- if (module.exports) {
- module.exports = definition();
- } else {
- root.log = definition();
- }
- })(commonjsGlobal, function () {
-
- // Slightly dubious tricks to cut down minimized file size
- var noop = function () {};
- var undefinedType = "undefined";
- var isIE = typeof window !== undefinedType && typeof window.navigator !== undefinedType && /Trident\/|MSIE /.test(window.navigator.userAgent);
- var logMethods = ["trace", "debug", "info", "warn", "error"];
-
- // Cross-browser bind equivalent that works at least back to IE6
- function bindMethod(obj, methodName) {
- var method = obj[methodName];
- if (typeof method.bind === 'function') {
- return method.bind(obj);
- } else {
- try {
- return Function.prototype.bind.call(method, obj);
- } catch (e) {
- // Missing bind shim or IE8 + Modernizr, fallback to wrapping
- return function () {
- return Function.prototype.apply.apply(method, [obj, arguments]);
- };
- }
- }
- }
-
- // Trace() doesn't print the message in IE, so for that case we need to wrap it
- function traceForIE() {
- if (console.log) {
- if (console.log.apply) {
- console.log.apply(console, arguments);
- } else {
- // In old IE, native console methods themselves don't have apply().
- Function.prototype.apply.apply(console.log, [console, arguments]);
- }
- }
- if (console.trace) console.trace();
- }
-
- // Build the best logging method possible for this env
- // Wherever possible we want to bind, not wrap, to preserve stack traces
- function realMethod(methodName) {
- if (methodName === 'debug') {
- methodName = 'log';
- }
- if (typeof console === undefinedType) {
- return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives
- } else if (methodName === 'trace' && isIE) {
- return traceForIE;
- } else if (console[methodName] !== undefined) {
- return bindMethod(console, methodName);
- } else if (console.log !== undefined) {
- return bindMethod(console, 'log');
- } else {
- return noop;
- }
- }
-
- // These private functions always need `this` to be set properly
-
- function replaceLoggingMethods(level, loggerName) {
- /*jshint validthis:true */
- for (var i = 0; i < logMethods.length; i++) {
- var methodName = logMethods[i];
- this[methodName] = i < level ? noop : this.methodFactory(methodName, level, loggerName);
- }
-
- // Define log.log as an alias for log.debug
- this.log = this.debug;
- }
-
- // In old IE versions, the console isn't present until you first open it.
- // We build realMethod() replacements here that regenerate logging methods
- function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {
- return function () {
- if (typeof console !== undefinedType) {
- replaceLoggingMethods.call(this, level, loggerName);
- this[methodName].apply(this, arguments);
- }
- };
- }
-
- // By default, we use closely bound real methods wherever possible, and
- // otherwise we wait for a console to appear, and then try again.
- function defaultMethodFactory(methodName, level, loggerName) {
- /*jshint validthis:true */
- return realMethod(methodName) || enableLoggingWhenConsoleArrives.apply(this, arguments);
- }
- function Logger(name, defaultLevel, factory) {
- var self = this;
- var currentLevel;
- defaultLevel = defaultLevel == null ? "WARN" : defaultLevel;
- var storageKey = "loglevel";
- if (typeof name === "string") {
- storageKey += ":" + name;
- } else if (typeof name === "symbol") {
- storageKey = undefined;
- }
- function persistLevelIfPossible(levelNum) {
- var levelName = (logMethods[levelNum] || 'silent').toUpperCase();
- if (typeof window === undefinedType || !storageKey) return;
-
- // Use localStorage if available
- try {
- window.localStorage[storageKey] = levelName;
- return;
- } catch (ignore) {}
-
- // Use session cookie as fallback
- try {
- window.document.cookie = encodeURIComponent(storageKey) + "=" + levelName + ";";
- } catch (ignore) {}
- }
- function getPersistedLevel() {
- var storedLevel;
- if (typeof window === undefinedType || !storageKey) return;
- try {
- storedLevel = window.localStorage[storageKey];
- } catch (ignore) {}
-
- // Fallback to cookies if local storage gives us nothing
- if (typeof storedLevel === undefinedType) {
- try {
- var cookie = window.document.cookie;
- var location = cookie.indexOf(encodeURIComponent(storageKey) + "=");
- if (location !== -1) {
- storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];
- }
- } catch (ignore) {}
- }
-
- // If the stored level is not valid, treat it as if nothing was stored.
- if (self.levels[storedLevel] === undefined) {
- storedLevel = undefined;
- }
- return storedLevel;
- }
- function clearPersistedLevel() {
- if (typeof window === undefinedType || !storageKey) return;
-
- // Use localStorage if available
- try {
- window.localStorage.removeItem(storageKey);
- return;
- } catch (ignore) {}
-
- // Use session cookie as fallback
- try {
- window.document.cookie = encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
- } catch (ignore) {}
- }
-
- /*
- *
- * Public logger API - see https://github.com/pimterry/loglevel for details
- *
- */
-
- self.name = name;
- self.levels = {
- "TRACE": 0,
- "DEBUG": 1,
- "INFO": 2,
- "WARN": 3,
- "ERROR": 4,
- "SILENT": 5
- };
- self.methodFactory = factory || defaultMethodFactory;
- self.getLevel = function () {
- return currentLevel;
- };
- self.setLevel = function (level, persist) {
- if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) {
- level = self.levels[level.toUpperCase()];
- }
- if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) {
- currentLevel = level;
- if (persist !== false) {
- // defaults to true
- persistLevelIfPossible(level);
- }
- replaceLoggingMethods.call(self, level, name);
- if (typeof console === undefinedType && level < self.levels.SILENT) {
- return "No console available for logging";
- }
- } else {
- throw "log.setLevel() called with invalid level: " + level;
- }
- };
- self.setDefaultLevel = function (level) {
- defaultLevel = level;
- if (!getPersistedLevel()) {
- self.setLevel(level, false);
- }
- };
- self.resetLevel = function () {
- self.setLevel(defaultLevel, false);
- clearPersistedLevel();
- };
- self.enableAll = function (persist) {
- self.setLevel(self.levels.TRACE, persist);
- };
- self.disableAll = function (persist) {
- self.setLevel(self.levels.SILENT, persist);
- };
-
- // Initialize with the right level
- var initialLevel = getPersistedLevel();
- if (initialLevel == null) {
- initialLevel = defaultLevel;
- }
- self.setLevel(initialLevel, false);
- }
-
- /*
- *
- * Top-level API
- *
- */
-
- var defaultLogger = new Logger();
- var _loggersByName = {};
- defaultLogger.getLogger = function getLogger(name) {
- if (typeof name !== "symbol" && typeof name !== "string" || name === "") {
- throw new TypeError("You must supply a name when creating a logger.");
- }
- var logger = _loggersByName[name];
- if (!logger) {
- logger = _loggersByName[name] = new Logger(name, defaultLogger.getLevel(), defaultLogger.methodFactory);
- }
- return logger;
- };
-
- // Grab the current global log variable in case of overwrite
- var _log = typeof window !== undefinedType ? window.log : undefined;
- defaultLogger.noConflict = function () {
- if (typeof window !== undefinedType && window.log === defaultLogger) {
- window.log = _log;
- }
- return defaultLogger;
- };
- defaultLogger.getLoggers = function getLoggers() {
- return _loggersByName;
- };
-
- // ES6 default export, for compatibility
- defaultLogger['default'] = defaultLogger;
- return defaultLogger;
- });
-})(loglevel);
-
-var LogLevel;
-(function (LogLevel) {
- LogLevel[LogLevel["trace"] = 0] = "trace";
- LogLevel[LogLevel["debug"] = 1] = "debug";
- LogLevel[LogLevel["info"] = 2] = "info";
- LogLevel[LogLevel["warn"] = 3] = "warn";
- LogLevel[LogLevel["error"] = 4] = "error";
- LogLevel[LogLevel["silent"] = 5] = "silent";
-})(LogLevel || (LogLevel = {}));
-const livekitLogger = loglevelExports.getLogger('livekit');
-livekitLogger.setLevel(LogLevel.info);
-function setLogLevel(level) {
- livekitLogger.setLevel(level);
-}
-/**
- * use this to hook into the logging function to allow sending internal livekit logs to third party services
- * if set, the browser logs will lose their stacktrace information (see https://github.com/pimterry/loglevel#writing-plugins)
- */
-function setLogExtension(extension) {
- const originalFactory = livekitLogger.methodFactory;
- livekitLogger.methodFactory = (methodName, logLevel, loggerName) => {
- const rawMethod = originalFactory(methodName, logLevel, loggerName);
- const configLevel = livekitLogger.getLevel();
- const needLog = logLevel >= configLevel && logLevel < LogLevel.silent;
- return (msg, context) => {
- if (context) rawMethod(msg, context);else rawMethod(msg);
- if (needLog) {
- extension(logLevel, msg, context);
- }
- };
- };
- livekitLogger.setLevel(livekitLogger.getLevel()); // Be sure to call setLevel method in order to apply plugin
-}
-
-/**
- * @license
- * Copyright 2009 The Closure Library Authors
- * Copyright 2020 Daniel Wirtz / The long.js Authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-// WebAssembly optimizations to do native i64 multiplication and divide
-var wasm = null;
-try {
- wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11])), {}).exports;
-} catch (e) {
- // no wasm support :(
-}
-
-/**
- * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.
- * See the from* functions below for more convenient ways of constructing Longs.
- * @exports Long
- * @class A Long class for representing a 64 bit two's-complement integer value.
- * @param {number} low The low (signed) 32 bits of the long
- * @param {number} high The high (signed) 32 bits of the long
- * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
- * @constructor
- */
-function Long(low, high, unsigned) {
- /**
- * The low 32 bits as a signed value.
- * @type {number}
- */
- this.low = low | 0;
-
- /**
- * The high 32 bits as a signed value.
- * @type {number}
- */
- this.high = high | 0;
-
- /**
- * Whether unsigned or not.
- * @type {boolean}
- */
- this.unsigned = !!unsigned;
-}
-
-// The internal representation of a long is the two given signed, 32-bit values.
-// We use 32-bit pieces because these are the size of integers on which
-// Javascript performs bit-operations. For operations like addition and
-// multiplication, we split each number into 16 bit pieces, which can easily be
-// multiplied within Javascript's floating-point representation without overflow
-// or change in sign.
-//
-// In the algorithms below, we frequently reduce the negative case to the
-// positive case by negating the input(s) and then post-processing the result.
-// Note that we must ALWAYS check specially whether those values are MIN_VALUE
-// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as
-// a positive number, it overflows back into a negative). Not handling this
-// case would often result in infinite recursion.
-//
-// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*
-// methods on which they depend.
-
-/**
- * An indicator used to reliably determine if an object is a Long or not.
- * @type {boolean}
- * @const
- * @private
- */
-Long.prototype.__isLong__;
-Object.defineProperty(Long.prototype, "__isLong__", {
- value: true
-});
-
-/**
- * @function
- * @param {*} obj Object
- * @returns {boolean}
- * @inner
- */
-function isLong(obj) {
- return (obj && obj["__isLong__"]) === true;
-}
-
-/**
- * @function
- * @param {*} value number
- * @returns {number}
- * @inner
- */
-function ctz32(value) {
- var c = Math.clz32(value & -value);
- return value ? 31 - c : c;
-}
-
-/**
- * Tests if the specified object is a Long.
- * @function
- * @param {*} obj Object
- * @returns {boolean}
- */
-Long.isLong = isLong;
-
-/**
- * A cache of the Long representations of small integer values.
- * @type {!Object}
- * @inner
- */
-var INT_CACHE = {};
-
-/**
- * A cache of the Long representations of small unsigned integer values.
- * @type {!Object}
- * @inner
- */
-var UINT_CACHE = {};
-
-/**
- * @param {number} value
- * @param {boolean=} unsigned
- * @returns {!Long}
- * @inner
- */
-function fromInt(value, unsigned) {
- var obj, cachedObj, cache;
- if (unsigned) {
- value >>>= 0;
- if (cache = 0 <= value && value < 256) {
- cachedObj = UINT_CACHE[value];
- if (cachedObj) return cachedObj;
- }
- obj = fromBits(value, 0, true);
- if (cache) UINT_CACHE[value] = obj;
- return obj;
- } else {
- value |= 0;
- if (cache = -128 <= value && value < 128) {
- cachedObj = INT_CACHE[value];
- if (cachedObj) return cachedObj;
- }
- obj = fromBits(value, value < 0 ? -1 : 0, false);
- if (cache) INT_CACHE[value] = obj;
- return obj;
- }
-}
-
-/**
- * Returns a Long representing the given 32 bit integer value.
- * @function
- * @param {number} value The 32 bit integer in question
- * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
- * @returns {!Long} The corresponding Long value
- */
-Long.fromInt = fromInt;
-
-/**
- * @param {number} value
- * @param {boolean=} unsigned
- * @returns {!Long}
- * @inner
- */
-function fromNumber(value, unsigned) {
- if (isNaN(value)) return unsigned ? UZERO : ZERO;
- if (unsigned) {
- if (value < 0) return UZERO;
- if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;
- } else {
- if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;
- if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;
- }
- if (value < 0) return fromNumber(-value, unsigned).neg();
- return fromBits(value % TWO_PWR_32_DBL | 0, value / TWO_PWR_32_DBL | 0, unsigned);
-}
-
-/**
- * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.
- * @function
- * @param {number} value The number in question
- * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
- * @returns {!Long} The corresponding Long value
- */
-Long.fromNumber = fromNumber;
-
-/**
- * @param {number} lowBits
- * @param {number} highBits
- * @param {boolean=} unsigned
- * @returns {!Long}
- * @inner
- */
-function fromBits(lowBits, highBits, unsigned) {
- return new Long(lowBits, highBits, unsigned);
-}
-
-/**
- * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is
- * assumed to use 32 bits.
- * @function
- * @param {number} lowBits The low 32 bits
- * @param {number} highBits The high 32 bits
- * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
- * @returns {!Long} The corresponding Long value
- */
-Long.fromBits = fromBits;
-
-/**
- * @function
- * @param {number} base
- * @param {number} exponent
- * @returns {number}
- * @inner
- */
-var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)
-
-/**
- * @param {string} str
- * @param {(boolean|number)=} unsigned
- * @param {number=} radix
- * @returns {!Long}
- * @inner
- */
-function fromString(str, unsigned, radix) {
- if (str.length === 0) throw Error('empty string');
- if (typeof unsigned === 'number') {
- // For goog.math.long compatibility
- radix = unsigned;
- unsigned = false;
- } else {
- unsigned = !!unsigned;
- }
- if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity") return unsigned ? UZERO : ZERO;
- radix = radix || 10;
- if (radix < 2 || 36 < radix) throw RangeError('radix');
- var p;
- if ((p = str.indexOf('-')) > 0) throw Error('interior hyphen');else if (p === 0) {
- return fromString(str.substring(1), unsigned, radix).neg();
- }
-
- // Do several (8) digits each time through the loop, so as to
- // minimize the calls to the very expensive emulated div.
- var radixToPower = fromNumber(pow_dbl(radix, 8));
- var result = ZERO;
- for (var i = 0; i < str.length; i += 8) {
- var size = Math.min(8, str.length - i),
- value = parseInt(str.substring(i, i + size), radix);
- if (size < 8) {
- var power = fromNumber(pow_dbl(radix, size));
- result = result.mul(power).add(fromNumber(value));
- } else {
- result = result.mul(radixToPower);
- result = result.add(fromNumber(value));
- }
- }
- result.unsigned = unsigned;
- return result;
-}
-
-/**
- * Returns a Long representation of the given string, written using the specified radix.
- * @function
- * @param {string} str The textual representation of the Long
- * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed
- * @param {number=} radix The radix in which the text is written (2-36), defaults to 10
- * @returns {!Long} The corresponding Long value
- */
-Long.fromString = fromString;
-
-/**
- * @function
- * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val
- * @param {boolean=} unsigned
- * @returns {!Long}
- * @inner
- */
-function fromValue(val, unsigned) {
- if (typeof val === 'number') return fromNumber(val, unsigned);
- if (typeof val === 'string') return fromString(val, unsigned);
- // Throws for non-objects, converts non-instanceof Long:
- return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);
-}
-
-/**
- * Converts the specified value to a Long using the appropriate from* function for its type.
- * @function
- * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value
- * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
- * @returns {!Long}
- */
-Long.fromValue = fromValue;
-
-// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be
-// no runtime penalty for these.
-
-/**
- * @type {number}
- * @const
- * @inner
- */
-var TWO_PWR_16_DBL = 1 << 16;
-
-/**
- * @type {number}
- * @const
- * @inner
- */
-var TWO_PWR_24_DBL = 1 << 24;
-
-/**
- * @type {number}
- * @const
- * @inner
- */
-var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;
-
-/**
- * @type {number}
- * @const
- * @inner
- */
-var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;
-
-/**
- * @type {number}
- * @const
- * @inner
- */
-var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;
-
-/**
- * @type {!Long}
- * @const
- * @inner
- */
-var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);
-
-/**
- * @type {!Long}
- * @inner
- */
-var ZERO = fromInt(0);
-
-/**
- * Signed zero.
- * @type {!Long}
- */
-Long.ZERO = ZERO;
-
-/**
- * @type {!Long}
- * @inner
- */
-var UZERO = fromInt(0, true);
-
-/**
- * Unsigned zero.
- * @type {!Long}
- */
-Long.UZERO = UZERO;
-
-/**
- * @type {!Long}
- * @inner
- */
-var ONE = fromInt(1);
-
-/**
- * Signed one.
- * @type {!Long}
- */
-Long.ONE = ONE;
-
-/**
- * @type {!Long}
- * @inner
- */
-var UONE = fromInt(1, true);
-
-/**
- * Unsigned one.
- * @type {!Long}
- */
-Long.UONE = UONE;
-
-/**
- * @type {!Long}
- * @inner
- */
-var NEG_ONE = fromInt(-1);
-
-/**
- * Signed negative one.
- * @type {!Long}
- */
-Long.NEG_ONE = NEG_ONE;
-
-/**
- * @type {!Long}
- * @inner
- */
-var MAX_VALUE = fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0, false);
-
-/**
- * Maximum signed value.
- * @type {!Long}
- */
-Long.MAX_VALUE = MAX_VALUE;
-
-/**
- * @type {!Long}
- * @inner
- */
-var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF | 0, 0xFFFFFFFF | 0, true);
-
-/**
- * Maximum unsigned value.
- * @type {!Long}
- */
-Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;
-
-/**
- * @type {!Long}
- * @inner
- */
-var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);
-
-/**
- * Minimum signed value.
- * @type {!Long}
- */
-Long.MIN_VALUE = MIN_VALUE;
-
-/**
- * @alias Long.prototype
- * @inner
- */
-var LongPrototype = Long.prototype;
-
-/**
- * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.
- * @this {!Long}
- * @returns {number}
- */
-LongPrototype.toInt = function toInt() {
- return this.unsigned ? this.low >>> 0 : this.low;
-};
-
-/**
- * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).
- * @this {!Long}
- * @returns {number}
- */
-LongPrototype.toNumber = function toNumber() {
- if (this.unsigned) return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);
- return this.high * TWO_PWR_32_DBL + (this.low >>> 0);
-};
-
-/**
- * Converts the Long to a string written in the specified radix.
- * @this {!Long}
- * @param {number=} radix Radix (2-36), defaults to 10
- * @returns {string}
- * @override
- * @throws {RangeError} If `radix` is out of range
- */
-LongPrototype.toString = function toString(radix) {
- radix = radix || 10;
- if (radix < 2 || 36 < radix) throw RangeError('radix');
- if (this.isZero()) return '0';
- if (this.isNegative()) {
- // Unsigned Longs are never negative
- if (this.eq(MIN_VALUE)) {
- // We need to change the Long value before it can be negated, so we remove
- // the bottom-most digit in this base and then recurse to do the rest.
- var radixLong = fromNumber(radix),
- div = this.div(radixLong),
- rem1 = div.mul(radixLong).sub(this);
- return div.toString(radix) + rem1.toInt().toString(radix);
- } else return '-' + this.neg().toString(radix);
- }
-
- // Do several (6) digits each time through the loop, so as to
- // minimize the calls to the very expensive emulated div.
- var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),
- rem = this;
- var result = '';
- while (true) {
- var remDiv = rem.div(radixToPower),
- intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,
- digits = intval.toString(radix);
- rem = remDiv;
- if (rem.isZero()) return digits + result;else {
- while (digits.length < 6) digits = '0' + digits;
- result = '' + digits + result;
- }
- }
-};
-
-/**
- * Gets the high 32 bits as a signed integer.
- * @this {!Long}
- * @returns {number} Signed high bits
- */
-LongPrototype.getHighBits = function getHighBits() {
- return this.high;
-};
-
-/**
- * Gets the high 32 bits as an unsigned integer.
- * @this {!Long}
- * @returns {number} Unsigned high bits
- */
-LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {
- return this.high >>> 0;
-};
-
-/**
- * Gets the low 32 bits as a signed integer.
- * @this {!Long}
- * @returns {number} Signed low bits
- */
-LongPrototype.getLowBits = function getLowBits() {
- return this.low;
-};
-
-/**
- * Gets the low 32 bits as an unsigned integer.
- * @this {!Long}
- * @returns {number} Unsigned low bits
- */
-LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {
- return this.low >>> 0;
-};
-
-/**
- * Gets the number of bits needed to represent the absolute value of this Long.
- * @this {!Long}
- * @returns {number}
- */
-LongPrototype.getNumBitsAbs = function getNumBitsAbs() {
- if (this.isNegative())
- // Unsigned Longs are never negative
- return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();
- var val = this.high != 0 ? this.high : this.low;
- for (var bit = 31; bit > 0; bit--) if ((val & 1 << bit) != 0) break;
- return this.high != 0 ? bit + 33 : bit + 1;
-};
-
-/**
- * Tests if this Long's value equals zero.
- * @this {!Long}
- * @returns {boolean}
- */
-LongPrototype.isZero = function isZero() {
- return this.high === 0 && this.low === 0;
-};
-
-/**
- * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.
- * @returns {boolean}
- */
-LongPrototype.eqz = LongPrototype.isZero;
-
-/**
- * Tests if this Long's value is negative.
- * @this {!Long}
- * @returns {boolean}
- */
-LongPrototype.isNegative = function isNegative() {
- return !this.unsigned && this.high < 0;
-};
-
-/**
- * Tests if this Long's value is positive or zero.
- * @this {!Long}
- * @returns {boolean}
- */
-LongPrototype.isPositive = function isPositive() {
- return this.unsigned || this.high >= 0;
-};
-
-/**
- * Tests if this Long's value is odd.
- * @this {!Long}
- * @returns {boolean}
- */
-LongPrototype.isOdd = function isOdd() {
- return (this.low & 1) === 1;
-};
-
-/**
- * Tests if this Long's value is even.
- * @this {!Long}
- * @returns {boolean}
- */
-LongPrototype.isEven = function isEven() {
- return (this.low & 1) === 0;
-};
-
-/**
- * Tests if this Long's value equals the specified's.
- * @this {!Long}
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.equals = function equals(other) {
- if (!isLong(other)) other = fromValue(other);
- if (this.unsigned !== other.unsigned && this.high >>> 31 === 1 && other.high >>> 31 === 1) return false;
- return this.high === other.high && this.low === other.low;
-};
-
-/**
- * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.
- * @function
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.eq = LongPrototype.equals;
-
-/**
- * Tests if this Long's value differs from the specified's.
- * @this {!Long}
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.notEquals = function notEquals(other) {
- return !this.eq( /* validates */other);
-};
-
-/**
- * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.
- * @function
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.neq = LongPrototype.notEquals;
-
-/**
- * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.
- * @function
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.ne = LongPrototype.notEquals;
-
-/**
- * Tests if this Long's value is less than the specified's.
- * @this {!Long}
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.lessThan = function lessThan(other) {
- return this.comp( /* validates */other) < 0;
-};
-
-/**
- * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.
- * @function
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.lt = LongPrototype.lessThan;
-
-/**
- * Tests if this Long's value is less than or equal the specified's.
- * @this {!Long}
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {
- return this.comp( /* validates */other) <= 0;
-};
-
-/**
- * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.
- * @function
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.lte = LongPrototype.lessThanOrEqual;
-
-/**
- * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.
- * @function
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.le = LongPrototype.lessThanOrEqual;
-
-/**
- * Tests if this Long's value is greater than the specified's.
- * @this {!Long}
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.greaterThan = function greaterThan(other) {
- return this.comp( /* validates */other) > 0;
-};
-
-/**
- * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.
- * @function
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.gt = LongPrototype.greaterThan;
-
-/**
- * Tests if this Long's value is greater than or equal the specified's.
- * @this {!Long}
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
- return this.comp( /* validates */other) >= 0;
-};
-
-/**
- * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.
- * @function
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.gte = LongPrototype.greaterThanOrEqual;
-
-/**
- * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.
- * @function
- * @param {!Long|number|string} other Other value
- * @returns {boolean}
- */
-LongPrototype.ge = LongPrototype.greaterThanOrEqual;
-
-/**
- * Compares this Long's value with the specified's.
- * @this {!Long}
- * @param {!Long|number|string} other Other value
- * @returns {number} 0 if they are the same, 1 if the this is greater and -1
- * if the given one is greater
- */
-LongPrototype.compare = function compare(other) {
- if (!isLong(other)) other = fromValue(other);
- if (this.eq(other)) return 0;
- var thisNeg = this.isNegative(),
- otherNeg = other.isNegative();
- if (thisNeg && !otherNeg) return -1;
- if (!thisNeg && otherNeg) return 1;
- // At this point the sign bits are the same
- if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;
- // Both are positive if at least one is unsigned
- return other.high >>> 0 > this.high >>> 0 || other.high === this.high && other.low >>> 0 > this.low >>> 0 ? -1 : 1;
-};
-
-/**
- * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.
- * @function
- * @param {!Long|number|string} other Other value
- * @returns {number} 0 if they are the same, 1 if the this is greater and -1
- * if the given one is greater
- */
-LongPrototype.comp = LongPrototype.compare;
-
-/**
- * Negates this Long's value.
- * @this {!Long}
- * @returns {!Long} Negated Long
- */
-LongPrototype.negate = function negate() {
- if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;
- return this.not().add(ONE);
-};
-
-/**
- * Negates this Long's value. This is an alias of {@link Long#negate}.
- * @function
- * @returns {!Long} Negated Long
- */
-LongPrototype.neg = LongPrototype.negate;
-
-/**
- * Returns the sum of this and the specified Long.
- * @this {!Long}
- * @param {!Long|number|string} addend Addend
- * @returns {!Long} Sum
- */
-LongPrototype.add = function add(addend) {
- if (!isLong(addend)) addend = fromValue(addend);
-
- // Divide each number into 4 chunks of 16 bits, and then sum the chunks.
-
- var a48 = this.high >>> 16;
- var a32 = this.high & 0xFFFF;
- var a16 = this.low >>> 16;
- var a00 = this.low & 0xFFFF;
- var b48 = addend.high >>> 16;
- var b32 = addend.high & 0xFFFF;
- var b16 = addend.low >>> 16;
- var b00 = addend.low & 0xFFFF;
- var c48 = 0,
- c32 = 0,
- c16 = 0,
- c00 = 0;
- c00 += a00 + b00;
- c16 += c00 >>> 16;
- c00 &= 0xFFFF;
- c16 += a16 + b16;
- c32 += c16 >>> 16;
- c16 &= 0xFFFF;
- c32 += a32 + b32;
- c48 += c32 >>> 16;
- c32 &= 0xFFFF;
- c48 += a48 + b48;
- c48 &= 0xFFFF;
- return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
-};
-
-/**
- * Returns the difference of this and the specified Long.
- * @this {!Long}
- * @param {!Long|number|string} subtrahend Subtrahend
- * @returns {!Long} Difference
- */
-LongPrototype.subtract = function subtract(subtrahend) {
- if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend);
- return this.add(subtrahend.neg());
-};
-
-/**
- * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.
- * @function
- * @param {!Long|number|string} subtrahend Subtrahend
- * @returns {!Long} Difference
- */
-LongPrototype.sub = LongPrototype.subtract;
-
-/**
- * Returns the product of this and the specified Long.
- * @this {!Long}
- * @param {!Long|number|string} multiplier Multiplier
- * @returns {!Long} Product
- */
-LongPrototype.multiply = function multiply(multiplier) {
- if (this.isZero()) return this;
- if (!isLong(multiplier)) multiplier = fromValue(multiplier);
-
- // use wasm support if present
- if (wasm) {
- var low = wasm["mul"](this.low, this.high, multiplier.low, multiplier.high);
- return fromBits(low, wasm["get_high"](), this.unsigned);
- }
- if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;
- if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;
- if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;
- if (this.isNegative()) {
- if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());else return this.neg().mul(multiplier).neg();
- } else if (multiplier.isNegative()) return this.mul(multiplier.neg()).neg();
-
- // If both longs are small, use float multiplication
- if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24)) return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);
-
- // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.
- // We can skip products that would overflow.
-
- var a48 = this.high >>> 16;
- var a32 = this.high & 0xFFFF;
- var a16 = this.low >>> 16;
- var a00 = this.low & 0xFFFF;
- var b48 = multiplier.high >>> 16;
- var b32 = multiplier.high & 0xFFFF;
- var b16 = multiplier.low >>> 16;
- var b00 = multiplier.low & 0xFFFF;
- var c48 = 0,
- c32 = 0,
- c16 = 0,
- c00 = 0;
- c00 += a00 * b00;
- c16 += c00 >>> 16;
- c00 &= 0xFFFF;
- c16 += a16 * b00;
- c32 += c16 >>> 16;
- c16 &= 0xFFFF;
- c16 += a00 * b16;
- c32 += c16 >>> 16;
- c16 &= 0xFFFF;
- c32 += a32 * b00;
- c48 += c32 >>> 16;
- c32 &= 0xFFFF;
- c32 += a16 * b16;
- c48 += c32 >>> 16;
- c32 &= 0xFFFF;
- c32 += a00 * b32;
- c48 += c32 >>> 16;
- c32 &= 0xFFFF;
- c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
- c48 &= 0xFFFF;
- return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
-};
-
-/**
- * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.
- * @function
- * @param {!Long|number|string} multiplier Multiplier
- * @returns {!Long} Product
- */
-LongPrototype.mul = LongPrototype.multiply;
-
-/**
- * Returns this Long divided by the specified. The result is signed if this Long is signed or
- * unsigned if this Long is unsigned.
- * @this {!Long}
- * @param {!Long|number|string} divisor Divisor
- * @returns {!Long} Quotient
- */
-LongPrototype.divide = function divide(divisor) {
- if (!isLong(divisor)) divisor = fromValue(divisor);
- if (divisor.isZero()) throw Error('division by zero');
-
- // use wasm support if present
- if (wasm) {
- // guard against signed division overflow: the largest
- // negative number / -1 would be 1 larger than the largest
- // positive number, due to two's complement.
- if (!this.unsigned && this.high === -0x80000000 && divisor.low === -1 && divisor.high === -1) {
- // be consistent with non-wasm code path
- return this;
- }
- var low = (this.unsigned ? wasm["div_u"] : wasm["div_s"])(this.low, this.high, divisor.low, divisor.high);
- return fromBits(low, wasm["get_high"](), this.unsigned);
- }
- if (this.isZero()) return this.unsigned ? UZERO : ZERO;
- var approx, rem, res;
- if (!this.unsigned) {
- // This section is only relevant for signed longs and is derived from the
- // closure library as a whole.
- if (this.eq(MIN_VALUE)) {
- if (divisor.eq(ONE) || divisor.eq(NEG_ONE)) return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE
- else if (divisor.eq(MIN_VALUE)) return ONE;else {
- // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.
- var halfThis = this.shr(1);
- approx = halfThis.div(divisor).shl(1);
- if (approx.eq(ZERO)) {
- return divisor.isNegative() ? ONE : NEG_ONE;
- } else {
- rem = this.sub(divisor.mul(approx));
- res = approx.add(rem.div(divisor));
- return res;
- }
- }
- } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;
- if (this.isNegative()) {
- if (divisor.isNegative()) return this.neg().div(divisor.neg());
- return this.neg().div(divisor).neg();
- } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();
- res = ZERO;
- } else {
- // The algorithm below has not been made for unsigned longs. It's therefore
- // required to take special care of the MSB prior to running it.
- if (!divisor.unsigned) divisor = divisor.toUnsigned();
- if (divisor.gt(this)) return UZERO;
- if (divisor.gt(this.shru(1)))
- // 15 >>> 1 = 7 ; with divisor = 8 ; true
- return UONE;
- res = UZERO;
- }
-
- // Repeat the following until the remainder is less than other: find a
- // floating-point that approximates remainder / other *from below*, add this
- // into the result, and subtract it from the remainder. It is critical that
- // the approximate value is less than or equal to the real value so that the
- // remainder never becomes negative.
- rem = this;
- while (rem.gte(divisor)) {
- // Approximate the result of division. This may be a little greater or
- // smaller than the actual value.
- approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));
-
- // We will tweak the approximate result by changing it in the 48-th digit or
- // the smallest non-fractional digit, whichever is larger.
- var log2 = Math.ceil(Math.log(approx) / Math.LN2),
- delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48),
- // Decrease the approximation until it is smaller than the remainder. Note
- // that if it is too large, the product overflows and is negative.
- approxRes = fromNumber(approx),
- approxRem = approxRes.mul(divisor);
- while (approxRem.isNegative() || approxRem.gt(rem)) {
- approx -= delta;
- approxRes = fromNumber(approx, this.unsigned);
- approxRem = approxRes.mul(divisor);
- }
-
- // We know the answer can't be zero... and actually, zero would cause
- // infinite recursion since we would make no progress.
- if (approxRes.isZero()) approxRes = ONE;
- res = res.add(approxRes);
- rem = rem.sub(approxRem);
- }
- return res;
-};
-
-/**
- * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.
- * @function
- * @param {!Long|number|string} divisor Divisor
- * @returns {!Long} Quotient
- */
-LongPrototype.div = LongPrototype.divide;
-
-/**
- * Returns this Long modulo the specified.
- * @this {!Long}
- * @param {!Long|number|string} divisor Divisor
- * @returns {!Long} Remainder
- */
-LongPrototype.modulo = function modulo(divisor) {
- if (!isLong(divisor)) divisor = fromValue(divisor);
-
- // use wasm support if present
- if (wasm) {
- var low = (this.unsigned ? wasm["rem_u"] : wasm["rem_s"])(this.low, this.high, divisor.low, divisor.high);
- return fromBits(low, wasm["get_high"](), this.unsigned);
- }
- return this.sub(this.div(divisor).mul(divisor));
-};
-
-/**
- * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.
- * @function
- * @param {!Long|number|string} divisor Divisor
- * @returns {!Long} Remainder
- */
-LongPrototype.mod = LongPrototype.modulo;
-
-/**
- * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.
- * @function
- * @param {!Long|number|string} divisor Divisor
- * @returns {!Long} Remainder
- */
-LongPrototype.rem = LongPrototype.modulo;
-
-/**
- * Returns the bitwise NOT of this Long.
- * @this {!Long}
- * @returns {!Long}
- */
-LongPrototype.not = function not() {
- return fromBits(~this.low, ~this.high, this.unsigned);
-};
-
-/**
- * Returns count leading zeros of this Long.
- * @this {!Long}
- * @returns {!number}
- */
-LongPrototype.countLeadingZeros = function countLeadingZeros() {
- return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;
-};
-
-/**
- * Returns count leading zeros. This is an alias of {@link Long#countLeadingZeros}.
- * @function
- * @param {!Long}
- * @returns {!number}
- */
-LongPrototype.clz = LongPrototype.countLeadingZeros;
-
-/**
- * Returns count trailing zeros of this Long.
- * @this {!Long}
- * @returns {!number}
- */
-LongPrototype.countTrailingZeros = function countTrailingZeros() {
- return this.low ? ctz32(this.low) : ctz32(this.high) + 32;
-};
-
-/**
- * Returns count trailing zeros. This is an alias of {@link Long#countTrailingZeros}.
- * @function
- * @param {!Long}
- * @returns {!number}
- */
-LongPrototype.ctz = LongPrototype.countTrailingZeros;
-
-/**
- * Returns the bitwise AND of this Long and the specified.
- * @this {!Long}
- * @param {!Long|number|string} other Other Long
- * @returns {!Long}
- */
-LongPrototype.and = function and(other) {
- if (!isLong(other)) other = fromValue(other);
- return fromBits(this.low & other.low, this.high & other.high, this.unsigned);
-};
-
-/**
- * Returns the bitwise OR of this Long and the specified.
- * @this {!Long}
- * @param {!Long|number|string} other Other Long
- * @returns {!Long}
- */
-LongPrototype.or = function or(other) {
- if (!isLong(other)) other = fromValue(other);
- return fromBits(this.low | other.low, this.high | other.high, this.unsigned);
-};
-
-/**
- * Returns the bitwise XOR of this Long and the given one.
- * @this {!Long}
- * @param {!Long|number|string} other Other Long
- * @returns {!Long}
- */
-LongPrototype.xor = function xor(other) {
- if (!isLong(other)) other = fromValue(other);
- return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);
-};
-
-/**
- * Returns this Long with bits shifted to the left by the given amount.
- * @this {!Long}
- * @param {number|!Long} numBits Number of bits
- * @returns {!Long} Shifted Long
- */
-LongPrototype.shiftLeft = function shiftLeft(numBits) {
- if (isLong(numBits)) numBits = numBits.toInt();
- if ((numBits &= 63) === 0) return this;else if (numBits < 32) return fromBits(this.low << numBits, this.high << numBits | this.low >>> 32 - numBits, this.unsigned);else return fromBits(0, this.low << numBits - 32, this.unsigned);
-};
-
-/**
- * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.
- * @function
- * @param {number|!Long} numBits Number of bits
- * @returns {!Long} Shifted Long
- */
-LongPrototype.shl = LongPrototype.shiftLeft;
-
-/**
- * Returns this Long with bits arithmetically shifted to the right by the given amount.
- * @this {!Long}
- * @param {number|!Long} numBits Number of bits
- * @returns {!Long} Shifted Long
- */
-LongPrototype.shiftRight = function shiftRight(numBits) {
- if (isLong(numBits)) numBits = numBits.toInt();
- if ((numBits &= 63) === 0) return this;else if (numBits < 32) return fromBits(this.low >>> numBits | this.high << 32 - numBits, this.high >> numBits, this.unsigned);else return fromBits(this.high >> numBits - 32, this.high >= 0 ? 0 : -1, this.unsigned);
-};
-
-/**
- * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.
- * @function
- * @param {number|!Long} numBits Number of bits
- * @returns {!Long} Shifted Long
- */
-LongPrototype.shr = LongPrototype.shiftRight;
-
-/**
- * Returns this Long with bits logically shifted to the right by the given amount.
- * @this {!Long}
- * @param {number|!Long} numBits Number of bits
- * @returns {!Long} Shifted Long
- */
-LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
- if (isLong(numBits)) numBits = numBits.toInt();
- if ((numBits &= 63) === 0) return this;
- if (numBits < 32) return fromBits(this.low >>> numBits | this.high << 32 - numBits, this.high >>> numBits, this.unsigned);
- if (numBits === 32) return fromBits(this.high, 0, this.unsigned);
- return fromBits(this.high >>> numBits - 32, 0, this.unsigned);
-};
-
-/**
- * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.
- * @function
- * @param {number|!Long} numBits Number of bits
- * @returns {!Long} Shifted Long
- */
-LongPrototype.shru = LongPrototype.shiftRightUnsigned;
-
-/**
- * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.
- * @function
- * @param {number|!Long} numBits Number of bits
- * @returns {!Long} Shifted Long
- */
-LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;
-
-/**
- * Returns this Long with bits rotated to the left by the given amount.
- * @this {!Long}
- * @param {number|!Long} numBits Number of bits
- * @returns {!Long} Rotated Long
- */
-LongPrototype.rotateLeft = function rotateLeft(numBits) {
- var b;
- if (isLong(numBits)) numBits = numBits.toInt();
- if ((numBits &= 63) === 0) return this;
- if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
- if (numBits < 32) {
- b = 32 - numBits;
- return fromBits(this.low << numBits | this.high >>> b, this.high << numBits | this.low >>> b, this.unsigned);
- }
- numBits -= 32;
- b = 32 - numBits;
- return fromBits(this.high << numBits | this.low >>> b, this.low << numBits | this.high >>> b, this.unsigned);
-};
-/**
- * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}.
- * @function
- * @param {number|!Long} numBits Number of bits
- * @returns {!Long} Rotated Long
- */
-LongPrototype.rotl = LongPrototype.rotateLeft;
-
-/**
- * Returns this Long with bits rotated to the right by the given amount.
- * @this {!Long}
- * @param {number|!Long} numBits Number of bits
- * @returns {!Long} Rotated Long
- */
-LongPrototype.rotateRight = function rotateRight(numBits) {
- var b;
- if (isLong(numBits)) numBits = numBits.toInt();
- if ((numBits &= 63) === 0) return this;
- if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
- if (numBits < 32) {
- b = 32 - numBits;
- return fromBits(this.high << b | this.low >>> numBits, this.low << b | this.high >>> numBits, this.unsigned);
- }
- numBits -= 32;
- b = 32 - numBits;
- return fromBits(this.low << b | this.high >>> numBits, this.high << b | this.low >>> numBits, this.unsigned);
-};
-/**
- * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}.
- * @function
- * @param {number|!Long} numBits Number of bits
- * @returns {!Long} Rotated Long
- */
-LongPrototype.rotr = LongPrototype.rotateRight;
-
-/**
- * Converts this Long to signed.
- * @this {!Long}
- * @returns {!Long} Signed long
- */
-LongPrototype.toSigned = function toSigned() {
- if (!this.unsigned) return this;
- return fromBits(this.low, this.high, false);
-};
-
-/**
- * Converts this Long to unsigned.
- * @this {!Long}
- * @returns {!Long} Unsigned long
- */
-LongPrototype.toUnsigned = function toUnsigned() {
- if (this.unsigned) return this;
- return fromBits(this.low, this.high, true);
-};
-
-/**
- * Converts this Long to its byte representation.
- * @param {boolean=} le Whether little or big endian, defaults to big endian
- * @this {!Long}
- * @returns {!Array.} Byte representation
- */
-LongPrototype.toBytes = function toBytes(le) {
- return le ? this.toBytesLE() : this.toBytesBE();
-};
-
-/**
- * Converts this Long to its little endian byte representation.
- * @this {!Long}
- * @returns {!Array.} Little endian byte representation
- */
-LongPrototype.toBytesLE = function toBytesLE() {
- var hi = this.high,
- lo = this.low;
- return [lo & 0xff, lo >>> 8 & 0xff, lo >>> 16 & 0xff, lo >>> 24, hi & 0xff, hi >>> 8 & 0xff, hi >>> 16 & 0xff, hi >>> 24];
-};
-
-/**
- * Converts this Long to its big endian byte representation.
- * @this {!Long}
- * @returns {!Array.} Big endian byte representation
- */
-LongPrototype.toBytesBE = function toBytesBE() {
- var hi = this.high,
- lo = this.low;
- return [hi >>> 24, hi >>> 16 & 0xff, hi >>> 8 & 0xff, hi & 0xff, lo >>> 24, lo >>> 16 & 0xff, lo >>> 8 & 0xff, lo & 0xff];
-};
-
-/**
- * Creates a Long from its byte representation.
- * @param {!Array.} bytes Byte representation
- * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
- * @param {boolean=} le Whether little or big endian, defaults to big endian
- * @returns {Long} The corresponding Long value
- */
-Long.fromBytes = function fromBytes(bytes, unsigned, le) {
- return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);
-};
-
-/**
- * Creates a Long from its little endian byte representation.
- * @param {!Array.} bytes Little endian byte representation
- * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
- * @returns {Long} The corresponding Long value
- */
-Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {
- return new Long(bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24, bytes[4] | bytes[5] << 8 | bytes[6] << 16 | bytes[7] << 24, unsigned);
-};
-
-/**
- * Creates a Long from its big endian byte representation.
- * @param {!Array.} bytes Big endian byte representation
- * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
- * @returns {Long} The corresponding Long value
- */
-Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {
- return new Long(bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7], bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], unsigned);
-};
-
-var minimalExports = {};
-var minimal$1 = {
- get exports(){ return minimalExports; },
- set exports(v){ minimalExports = v; },
-};
-
-var indexMinimal = {};
-
-var minimal = {};
-
-var aspromise = asPromise;
-
-/**
- * Callback as used by {@link util.asPromise}.
- * @typedef asPromiseCallback
- * @type {function}
- * @param {Error|null} error Error, if any
- * @param {...*} params Additional arguments
- * @returns {undefined}
- */
-
-/**
- * Returns a promise from a node-style callback function.
- * @memberof util
- * @param {asPromiseCallback} fn Function to call
- * @param {*} ctx Function context
- * @param {...*} params Function arguments
- * @returns {Promise<*>} Promisified function
- */
-function asPromise(fn, ctx /*, varargs */) {
- var params = new Array(arguments.length - 1),
- offset = 0,
- index = 2,
- pending = true;
- while (index < arguments.length) params[offset++] = arguments[index++];
- return new Promise(function executor(resolve, reject) {
- params[offset] = function callback(err /*, varargs */) {
- if (pending) {
- pending = false;
- if (err) reject(err);else {
- var params = new Array(arguments.length - 1),
- offset = 0;
- while (offset < params.length) params[offset++] = arguments[offset];
- resolve.apply(null, params);
- }
- }
- };
- try {
- fn.apply(ctx || null, params);
- } catch (err) {
- if (pending) {
- pending = false;
- reject(err);
- }
- }
- });
-}
-
-var base64$1 = {};
-
-(function (exports) {
-
- /**
- * A minimal base64 implementation for number arrays.
- * @memberof util
- * @namespace
- */
- var base64 = exports;
-
- /**
- * Calculates the byte length of a base64 encoded string.
- * @param {string} string Base64 encoded string
- * @returns {number} Byte length
- */
- base64.length = function length(string) {
- var p = string.length;
- if (!p) return 0;
- var n = 0;
- while (--p % 4 > 1 && string.charAt(p) === "=") ++n;
- return Math.ceil(string.length * 3) / 4 - n;
- };
-
- // Base64 encoding table
- var b64 = new Array(64);
-
- // Base64 decoding table
- var s64 = new Array(123);
-
- // 65..90, 97..122, 48..57, 43, 47
- for (var i = 0; i < 64;) s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;
-
- /**
- * Encodes a buffer to a base64 encoded string.
- * @param {Uint8Array} buffer Source buffer
- * @param {number} start Source start
- * @param {number} end Source end
- * @returns {string} Base64 encoded string
- */
- base64.encode = function encode(buffer, start, end) {
- var parts = null,
- chunk = [];
- var i = 0,
- // output index
- j = 0,
- // goto index
- t; // temporary
- while (start < end) {
- var b = buffer[start++];
- switch (j) {
- case 0:
- chunk[i++] = b64[b >> 2];
- t = (b & 3) << 4;
- j = 1;
- break;
- case 1:
- chunk[i++] = b64[t | b >> 4];
- t = (b & 15) << 2;
- j = 2;
- break;
- case 2:
- chunk[i++] = b64[t | b >> 6];
- chunk[i++] = b64[b & 63];
- j = 0;
- break;
- }
- if (i > 8191) {
- (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));
- i = 0;
- }
- }
- if (j) {
- chunk[i++] = b64[t];
- chunk[i++] = 61;
- if (j === 1) chunk[i++] = 61;
- }
- if (parts) {
- if (i) parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));
- return parts.join("");
- }
- return String.fromCharCode.apply(String, chunk.slice(0, i));
- };
- var invalidEncoding = "invalid encoding";
-
- /**
- * Decodes a base64 encoded string to a buffer.
- * @param {string} string Source string
- * @param {Uint8Array} buffer Destination buffer
- * @param {number} offset Destination offset
- * @returns {number} Number of bytes written
- * @throws {Error} If encoding is invalid
- */
- base64.decode = function decode(string, buffer, offset) {
- var start = offset;
- var j = 0,
- // goto index
- t; // temporary
- for (var i = 0; i < string.length;) {
- var c = string.charCodeAt(i++);
- if (c === 61 && j > 1) break;
- if ((c = s64[c]) === undefined) throw Error(invalidEncoding);
- switch (j) {
- case 0:
- t = c;
- j = 1;
- break;
- case 1:
- buffer[offset++] = t << 2 | (c & 48) >> 4;
- t = c;
- j = 2;
- break;
- case 2:
- buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;
- t = c;
- j = 3;
- break;
- case 3:
- buffer[offset++] = (t & 3) << 6 | c;
- j = 0;
- break;
- }
- }
- if (j === 1) throw Error(invalidEncoding);
- return offset - start;
- };
-
- /**
- * Tests if the specified string appears to be base64 encoded.
- * @param {string} string String to test
- * @returns {boolean} `true` if probably base64 encoded, otherwise false
- */
- base64.test = function test(string) {
- return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);
- };
-})(base64$1);
-
-var eventemitter = EventEmitter$1;
-
-/**
- * Constructs a new event emitter instance.
- * @classdesc A minimal event emitter.
- * @memberof util
- * @constructor
- */
-function EventEmitter$1() {
- /**
- * Registered listeners.
- * @type {Object.}
- * @private
- */
- this._listeners = {};
-}
-
-/**
- * Registers an event listener.
- * @param {string} evt Event name
- * @param {function} fn Listener
- * @param {*} [ctx] Listener context
- * @returns {util.EventEmitter} `this`
- */
-EventEmitter$1.prototype.on = function on(evt, fn, ctx) {
- (this._listeners[evt] || (this._listeners[evt] = [])).push({
- fn: fn,
- ctx: ctx || this
- });
- return this;
-};
-
-/**
- * Removes an event listener or any matching listeners if arguments are omitted.
- * @param {string} [evt] Event name. Removes all listeners if omitted.
- * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.
- * @returns {util.EventEmitter} `this`
- */
-EventEmitter$1.prototype.off = function off(evt, fn) {
- if (evt === undefined) this._listeners = {};else {
- if (fn === undefined) this._listeners[evt] = [];else {
- var listeners = this._listeners[evt];
- for (var i = 0; i < listeners.length;) if (listeners[i].fn === fn) listeners.splice(i, 1);else ++i;
- }
- }
- return this;
-};
-
-/**
- * Emits an event by calling its listeners with the specified arguments.
- * @param {string} evt Event name
- * @param {...*} args Arguments
- * @returns {util.EventEmitter} `this`
- */
-EventEmitter$1.prototype.emit = function emit(evt) {
- var listeners = this._listeners[evt];
- if (listeners) {
- var args = [],
- i = 1;
- for (; i < arguments.length;) args.push(arguments[i++]);
- for (i = 0; i < listeners.length;) listeners[i].fn.apply(listeners[i++].ctx, args);
- }
- return this;
-};
-
-var float = factory(factory);
-
-/**
- * Reads / writes floats / doubles from / to buffers.
- * @name util.float
- * @namespace
- */
-
-/**
- * Writes a 32 bit float to a buffer using little endian byte order.
- * @name util.float.writeFloatLE
- * @function
- * @param {number} val Value to write
- * @param {Uint8Array} buf Target buffer
- * @param {number} pos Target buffer offset
- * @returns {undefined}
- */
-
-/**
- * Writes a 32 bit float to a buffer using big endian byte order.
- * @name util.float.writeFloatBE
- * @function
- * @param {number} val Value to write
- * @param {Uint8Array} buf Target buffer
- * @param {number} pos Target buffer offset
- * @returns {undefined}
- */
-
-/**
- * Reads a 32 bit float from a buffer using little endian byte order.
- * @name util.float.readFloatLE
- * @function
- * @param {Uint8Array} buf Source buffer
- * @param {number} pos Source buffer offset
- * @returns {number} Value read
- */
-
-/**
- * Reads a 32 bit float from a buffer using big endian byte order.
- * @name util.float.readFloatBE
- * @function
- * @param {Uint8Array} buf Source buffer
- * @param {number} pos Source buffer offset
- * @returns {number} Value read
- */
-
-/**
- * Writes a 64 bit double to a buffer using little endian byte order.
- * @name util.float.writeDoubleLE
- * @function
- * @param {number} val Value to write
- * @param {Uint8Array} buf Target buffer
- * @param {number} pos Target buffer offset
- * @returns {undefined}
- */
-
-/**
- * Writes a 64 bit double to a buffer using big endian byte order.
- * @name util.float.writeDoubleBE
- * @function
- * @param {number} val Value to write
- * @param {Uint8Array} buf Target buffer
- * @param {number} pos Target buffer offset
- * @returns {undefined}
- */
-
-/**
- * Reads a 64 bit double from a buffer using little endian byte order.
- * @name util.float.readDoubleLE
- * @function
- * @param {Uint8Array} buf Source buffer
- * @param {number} pos Source buffer offset
- * @returns {number} Value read
- */
-
-/**
- * Reads a 64 bit double from a buffer using big endian byte order.
- * @name util.float.readDoubleBE
- * @function
- * @param {Uint8Array} buf Source buffer
- * @param {number} pos Source buffer offset
- * @returns {number} Value read
- */
-
-// Factory function for the purpose of node-based testing in modified global environments
-function factory(exports) {
- // float: typed array
- if (typeof Float32Array !== "undefined") (function () {
- var f32 = new Float32Array([-0]),
- f8b = new Uint8Array(f32.buffer),
- le = f8b[3] === 128;
- function writeFloat_f32_cpy(val, buf, pos) {
- f32[0] = val;
- buf[pos] = f8b[0];
- buf[pos + 1] = f8b[1];
- buf[pos + 2] = f8b[2];
- buf[pos + 3] = f8b[3];
- }
- function writeFloat_f32_rev(val, buf, pos) {
- f32[0] = val;
- buf[pos] = f8b[3];
- buf[pos + 1] = f8b[2];
- buf[pos + 2] = f8b[1];
- buf[pos + 3] = f8b[0];
- }
-
- /* istanbul ignore next */
- exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;
- /* istanbul ignore next */
- exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;
- function readFloat_f32_cpy(buf, pos) {
- f8b[0] = buf[pos];
- f8b[1] = buf[pos + 1];
- f8b[2] = buf[pos + 2];
- f8b[3] = buf[pos + 3];
- return f32[0];
- }
- function readFloat_f32_rev(buf, pos) {
- f8b[3] = buf[pos];
- f8b[2] = buf[pos + 1];
- f8b[1] = buf[pos + 2];
- f8b[0] = buf[pos + 3];
- return f32[0];
- }
-
- /* istanbul ignore next */
- exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;
- /* istanbul ignore next */
- exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;
-
- // float: ieee754
- })();else (function () {
- function writeFloat_ieee754(writeUint, val, buf, pos) {
- var sign = val < 0 ? 1 : 0;
- if (sign) val = -val;
- if (val === 0) writeUint(1 / val > 0 ? /* positive */0 : /* negative 0 */2147483648, buf, pos);else if (isNaN(val)) writeUint(2143289344, buf, pos);else if (val > 3.4028234663852886e+38)
- // +-Infinity
- writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);else if (val < 1.1754943508222875e-38)
- // denormal
- writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);else {
- var exponent = Math.floor(Math.log(val) / Math.LN2),
- mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;
- writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);
- }
- }
- exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);
- exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);
- function readFloat_ieee754(readUint, buf, pos) {
- var uint = readUint(buf, pos),
- sign = (uint >> 31) * 2 + 1,
- exponent = uint >>> 23 & 255,
- mantissa = uint & 8388607;
- return exponent === 255 ? mantissa ? NaN : sign * Infinity : exponent === 0 // denormal
- ? sign * 1.401298464324817e-45 * mantissa : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);
- }
- exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);
- exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);
- })();
-
- // double: typed array
- if (typeof Float64Array !== "undefined") (function () {
- var f64 = new Float64Array([-0]),
- f8b = new Uint8Array(f64.buffer),
- le = f8b[7] === 128;
- function writeDouble_f64_cpy(val, buf, pos) {
- f64[0] = val;
- buf[pos] = f8b[0];
- buf[pos + 1] = f8b[1];
- buf[pos + 2] = f8b[2];
- buf[pos + 3] = f8b[3];
- buf[pos + 4] = f8b[4];
- buf[pos + 5] = f8b[5];
- buf[pos + 6] = f8b[6];
- buf[pos + 7] = f8b[7];
- }
- function writeDouble_f64_rev(val, buf, pos) {
- f64[0] = val;
- buf[pos] = f8b[7];
- buf[pos + 1] = f8b[6];
- buf[pos + 2] = f8b[5];
- buf[pos + 3] = f8b[4];
- buf[pos + 4] = f8b[3];
- buf[pos + 5] = f8b[2];
- buf[pos + 6] = f8b[1];
- buf[pos + 7] = f8b[0];
- }
-
- /* istanbul ignore next */
- exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;
- /* istanbul ignore next */
- exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;
- function readDouble_f64_cpy(buf, pos) {
- f8b[0] = buf[pos];
- f8b[1] = buf[pos + 1];
- f8b[2] = buf[pos + 2];
- f8b[3] = buf[pos + 3];
- f8b[4] = buf[pos + 4];
- f8b[5] = buf[pos + 5];
- f8b[6] = buf[pos + 6];
- f8b[7] = buf[pos + 7];
- return f64[0];
- }
- function readDouble_f64_rev(buf, pos) {
- f8b[7] = buf[pos];
- f8b[6] = buf[pos + 1];
- f8b[5] = buf[pos + 2];
- f8b[4] = buf[pos + 3];
- f8b[3] = buf[pos + 4];
- f8b[2] = buf[pos + 5];
- f8b[1] = buf[pos + 6];
- f8b[0] = buf[pos + 7];
- return f64[0];
- }
-
- /* istanbul ignore next */
- exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;
- /* istanbul ignore next */
- exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;
-
- // double: ieee754
- })();else (function () {
- function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {
- var sign = val < 0 ? 1 : 0;
- if (sign) val = -val;
- if (val === 0) {
- writeUint(0, buf, pos + off0);
- writeUint(1 / val > 0 ? /* positive */0 : /* negative 0 */2147483648, buf, pos + off1);
- } else if (isNaN(val)) {
- writeUint(0, buf, pos + off0);
- writeUint(2146959360, buf, pos + off1);
- } else if (val > 1.7976931348623157e+308) {
- // +-Infinity
- writeUint(0, buf, pos + off0);
- writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);
- } else {
- var mantissa;
- if (val < 2.2250738585072014e-308) {
- // denormal
- mantissa = val / 5e-324;
- writeUint(mantissa >>> 0, buf, pos + off0);
- writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);
- } else {
- var exponent = Math.floor(Math.log(val) / Math.LN2);
- if (exponent === 1024) exponent = 1023;
- mantissa = val * Math.pow(2, -exponent);
- writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);
- writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);
- }
- }
- }
- exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);
- exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);
- function readDouble_ieee754(readUint, off0, off1, buf, pos) {
- var lo = readUint(buf, pos + off0),
- hi = readUint(buf, pos + off1);
- var sign = (hi >> 31) * 2 + 1,
- exponent = hi >>> 20 & 2047,
- mantissa = 4294967296 * (hi & 1048575) + lo;
- return exponent === 2047 ? mantissa ? NaN : sign * Infinity : exponent === 0 // denormal
- ? sign * 5e-324 * mantissa : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);
- }
- exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);
- exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);
- })();
- return exports;
-}
-
-// uint helpers
-
-function writeUintLE(val, buf, pos) {
- buf[pos] = val & 255;
- buf[pos + 1] = val >>> 8 & 255;
- buf[pos + 2] = val >>> 16 & 255;
- buf[pos + 3] = val >>> 24;
-}
-function writeUintBE(val, buf, pos) {
- buf[pos] = val >>> 24;
- buf[pos + 1] = val >>> 16 & 255;
- buf[pos + 2] = val >>> 8 & 255;
- buf[pos + 3] = val & 255;
-}
-function readUintLE(buf, pos) {
- return (buf[pos] | buf[pos + 1] << 8 | buf[pos + 2] << 16 | buf[pos + 3] << 24) >>> 0;
-}
-function readUintBE(buf, pos) {
- return (buf[pos] << 24 | buf[pos + 1] << 16 | buf[pos + 2] << 8 | buf[pos + 3]) >>> 0;
-}
-
-var inquire_1 = inquire;
-
-/**
- * Requires a module only if available.
- * @memberof util
- * @param {string} moduleName Module to require
- * @returns {?Object} Required module if available and not empty, otherwise `null`
- */
-function inquire(moduleName) {
- try {
- var mod = undefined; // eslint-disable-line no-eval
- if (mod && (mod.length || Object.keys(mod).length)) return mod;
- } catch (e) {} // eslint-disable-line no-empty
- return null;
-}
-
-var utf8$2 = {};
-
-(function (exports) {
-
- /**
- * A minimal UTF8 implementation for number arrays.
- * @memberof util
- * @namespace
- */
- var utf8 = exports;
-
- /**
- * Calculates the UTF8 byte length of a string.
- * @param {string} string String
- * @returns {number} Byte length
- */
- utf8.length = function utf8_length(string) {
- var len = 0,
- c = 0;
- for (var i = 0; i < string.length; ++i) {
- c = string.charCodeAt(i);
- if (c < 128) len += 1;else if (c < 2048) len += 2;else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {
- ++i;
- len += 4;
- } else len += 3;
- }
- return len;
- };
-
- /**
- * Reads UTF8 bytes as a string.
- * @param {Uint8Array} buffer Source buffer
- * @param {number} start Source start
- * @param {number} end Source end
- * @returns {string} String read
- */
- utf8.read = function utf8_read(buffer, start, end) {
- var len = end - start;
- if (len < 1) return "";
- var parts = null,
- chunk = [],
- i = 0,
- // char offset
- t; // temporary
- while (start < end) {
- t = buffer[start++];
- if (t < 128) chunk[i++] = t;else if (t > 191 && t < 224) chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;else if (t > 239 && t < 365) {
- t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;
- chunk[i++] = 0xD800 + (t >> 10);
- chunk[i++] = 0xDC00 + (t & 1023);
- } else chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;
- if (i > 8191) {
- (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));
- i = 0;
- }
- }
- if (parts) {
- if (i) parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));
- return parts.join("");
- }
- return String.fromCharCode.apply(String, chunk.slice(0, i));
- };
-
- /**
- * Writes a string as UTF8 bytes.
- * @param {string} string Source string
- * @param {Uint8Array} buffer Destination buffer
- * @param {number} offset Destination offset
- * @returns {number} Bytes written
- */
- utf8.write = function utf8_write(string, buffer, offset) {
- var start = offset,
- c1,
- // character 1
- c2; // character 2
- for (var i = 0; i < string.length; ++i) {
- c1 = string.charCodeAt(i);
- if (c1 < 128) {
- buffer[offset++] = c1;
- } else if (c1 < 2048) {
- buffer[offset++] = c1 >> 6 | 192;
- buffer[offset++] = c1 & 63 | 128;
- } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {
- c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);
- ++i;
- buffer[offset++] = c1 >> 18 | 240;
- buffer[offset++] = c1 >> 12 & 63 | 128;
- buffer[offset++] = c1 >> 6 & 63 | 128;
- buffer[offset++] = c1 & 63 | 128;
- } else {
- buffer[offset++] = c1 >> 12 | 224;
- buffer[offset++] = c1 >> 6 & 63 | 128;
- buffer[offset++] = c1 & 63 | 128;
- }
- }
- return offset - start;
- };
-})(utf8$2);
-
-var pool_1 = pool;
-
-/**
- * An allocator as used by {@link util.pool}.
- * @typedef PoolAllocator
- * @type {function}
- * @param {number} size Buffer size
- * @returns {Uint8Array} Buffer
- */
-
-/**
- * A slicer as used by {@link util.pool}.
- * @typedef PoolSlicer
- * @type {function}
- * @param {number} start Start offset
- * @param {number} end End offset
- * @returns {Uint8Array} Buffer slice
- * @this {Uint8Array}
- */
-
-/**
- * A general purpose buffer pool.
- * @memberof util
- * @function
- * @param {PoolAllocator} alloc Allocator
- * @param {PoolSlicer} slice Slicer
- * @param {number} [size=8192] Slab size
- * @returns {PoolAllocator} Pooled allocator
- */
-function pool(alloc, slice, size) {
- var SIZE = size || 8192;
- var MAX = SIZE >>> 1;
- var slab = null;
- var offset = SIZE;
- return function pool_alloc(size) {
- if (size < 1 || size > MAX) return alloc(size);
- if (offset + size > SIZE) {
- slab = alloc(SIZE);
- offset = 0;
- }
- var buf = slice.call(slab, offset, offset += size);
- if (offset & 7)
- // align to 32 bit
- offset = (offset | 7) + 1;
- return buf;
- };
-}
-
-var longbits;
-var hasRequiredLongbits;
-function requireLongbits() {
- if (hasRequiredLongbits) return longbits;
- hasRequiredLongbits = 1;
- longbits = LongBits;
- var util = requireMinimal();
-
- /**
- * Constructs new long bits.
- * @classdesc Helper class for working with the low and high bits of a 64 bit value.
- * @memberof util
- * @constructor
- * @param {number} lo Low 32 bits, unsigned
- * @param {number} hi High 32 bits, unsigned
- */
- function LongBits(lo, hi) {
- // note that the casts below are theoretically unnecessary as of today, but older statically
- // generated converter code might still call the ctor with signed 32bits. kept for compat.
-
- /**
- * Low bits.
- * @type {number}
- */
- this.lo = lo >>> 0;
-
- /**
- * High bits.
- * @type {number}
- */
- this.hi = hi >>> 0;
- }
-
- /**
- * Zero bits.
- * @memberof util.LongBits
- * @type {util.LongBits}
- */
- var zero = LongBits.zero = new LongBits(0, 0);
- zero.toNumber = function () {
- return 0;
- };
- zero.zzEncode = zero.zzDecode = function () {
- return this;
- };
- zero.length = function () {
- return 1;
- };
-
- /**
- * Zero hash.
- * @memberof util.LongBits
- * @type {string}
- */
- var zeroHash = LongBits.zeroHash = "\0\0\0\0\0\0\0\0";
-
- /**
- * Constructs new long bits from the specified number.
- * @param {number} value Value
- * @returns {util.LongBits} Instance
- */
- LongBits.fromNumber = function fromNumber(value) {
- if (value === 0) return zero;
- var sign = value < 0;
- if (sign) value = -value;
- var lo = value >>> 0,
- hi = (value - lo) / 4294967296 >>> 0;
- if (sign) {
- hi = ~hi >>> 0;
- lo = ~lo >>> 0;
- if (++lo > 4294967295) {
- lo = 0;
- if (++hi > 4294967295) hi = 0;
- }
- }
- return new LongBits(lo, hi);
- };
-
- /**
- * Constructs new long bits from a number, long or string.
- * @param {Long|number|string} value Value
- * @returns {util.LongBits} Instance
- */
- LongBits.from = function from(value) {
- if (typeof value === "number") return LongBits.fromNumber(value);
- if (util.isString(value)) {
- /* istanbul ignore else */
- if (util.Long) value = util.Long.fromString(value);else return LongBits.fromNumber(parseInt(value, 10));
- }
- return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;
- };
-
- /**
- * Converts this long bits to a possibly unsafe JavaScript number.
- * @param {boolean} [unsigned=false] Whether unsigned or not
- * @returns {number} Possibly unsafe number
- */
- LongBits.prototype.toNumber = function toNumber(unsigned) {
- if (!unsigned && this.hi >>> 31) {
- var lo = ~this.lo + 1 >>> 0,
- hi = ~this.hi >>> 0;
- if (!lo) hi = hi + 1 >>> 0;
- return -(lo + hi * 4294967296);
- }
- return this.lo + this.hi * 4294967296;
- };
-
- /**
- * Converts this long bits to a long.
- * @param {boolean} [unsigned=false] Whether unsigned or not
- * @returns {Long} Long
- */
- LongBits.prototype.toLong = function toLong(unsigned) {
- return util.Long ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))
- /* istanbul ignore next */ : {
- low: this.lo | 0,
- high: this.hi | 0,
- unsigned: Boolean(unsigned)
- };
- };
- var charCodeAt = String.prototype.charCodeAt;
-
- /**
- * Constructs new long bits from the specified 8 characters long hash.
- * @param {string} hash Hash
- * @returns {util.LongBits} Bits
- */
- LongBits.fromHash = function fromHash(hash) {
- if (hash === zeroHash) return zero;
- return new LongBits((charCodeAt.call(hash, 0) | charCodeAt.call(hash, 1) << 8 | charCodeAt.call(hash, 2) << 16 | charCodeAt.call(hash, 3) << 24) >>> 0, (charCodeAt.call(hash, 4) | charCodeAt.call(hash, 5) << 8 | charCodeAt.call(hash, 6) << 16 | charCodeAt.call(hash, 7) << 24) >>> 0);
- };
-
- /**
- * Converts this long bits to a 8 characters long hash.
- * @returns {string} Hash
- */
- LongBits.prototype.toHash = function toHash() {
- return String.fromCharCode(this.lo & 255, this.lo >>> 8 & 255, this.lo >>> 16 & 255, this.lo >>> 24, this.hi & 255, this.hi >>> 8 & 255, this.hi >>> 16 & 255, this.hi >>> 24);
- };
-
- /**
- * Zig-zag encodes this long bits.
- * @returns {util.LongBits} `this`
- */
- LongBits.prototype.zzEncode = function zzEncode() {
- var mask = this.hi >> 31;
- this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;
- this.lo = (this.lo << 1 ^ mask) >>> 0;
- return this;
- };
-
- /**
- * Zig-zag decodes this long bits.
- * @returns {util.LongBits} `this`
- */
- LongBits.prototype.zzDecode = function zzDecode() {
- var mask = -(this.lo & 1);
- this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;
- this.hi = (this.hi >>> 1 ^ mask) >>> 0;
- return this;
- };
-
- /**
- * Calculates the length of this longbits when encoded as a varint.
- * @returns {number} Length
- */
- LongBits.prototype.length = function length() {
- var part0 = this.lo,
- part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,
- part2 = this.hi >>> 24;
- return part2 === 0 ? part1 === 0 ? part0 < 16384 ? part0 < 128 ? 1 : 2 : part0 < 2097152 ? 3 : 4 : part1 < 16384 ? part1 < 128 ? 5 : 6 : part1 < 2097152 ? 7 : 8 : part2 < 128 ? 9 : 10;
- };
- return longbits;
-}
-
-var hasRequiredMinimal;
-function requireMinimal() {
- if (hasRequiredMinimal) return minimal;
- hasRequiredMinimal = 1;
- (function (exports) {
-
- var util = exports;
-
- // used to return a Promise where callback is omitted
- util.asPromise = aspromise;
-
- // converts to / from base64 encoded strings
- util.base64 = base64$1;
-
- // base class of rpc.Service
- util.EventEmitter = eventemitter;
-
- // float handling accross browsers
- util.float = float;
-
- // requires modules optionally and hides the call from bundlers
- util.inquire = inquire_1;
-
- // converts to / from utf8 encoded strings
- util.utf8 = utf8$2;
-
- // provides a node-like buffer pool in the browser
- util.pool = pool_1;
-
- // utility to work with the low and high bits of a 64 bit value
- util.LongBits = requireLongbits();
-
- /**
- * Whether running within node or not.
- * @memberof util
- * @type {boolean}
- */
- util.isNode = Boolean(typeof commonjsGlobal !== "undefined" && commonjsGlobal && commonjsGlobal.process && commonjsGlobal.process.versions && commonjsGlobal.process.versions.node);
-
- /**
- * Global object reference.
- * @memberof util
- * @type {Object}
- */
- util.global = util.isNode && commonjsGlobal || typeof window !== "undefined" && window || typeof self !== "undefined" && self || commonjsGlobal; // eslint-disable-line no-invalid-this
-
- /**
- * An immuable empty array.
- * @memberof util
- * @type {Array.<*>}
- * @const
- */
- util.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */[]; // used on prototypes
-
- /**
- * An immutable empty object.
- * @type {Object}
- * @const
- */
- util.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */{}; // used on prototypes
-
- /**
- * Tests if the specified value is an integer.
- * @function
- * @param {*} value Value to test
- * @returns {boolean} `true` if the value is an integer
- */
- util.isInteger = Number.isInteger || /* istanbul ignore next */function isInteger(value) {
- return typeof value === "number" && isFinite(value) && Math.floor(value) === value;
- };
-
- /**
- * Tests if the specified value is a string.
- * @param {*} value Value to test
- * @returns {boolean} `true` if the value is a string
- */
- util.isString = function isString(value) {
- return typeof value === "string" || value instanceof String;
- };
-
- /**
- * Tests if the specified value is a non-null object.
- * @param {*} value Value to test
- * @returns {boolean} `true` if the value is a non-null object
- */
- util.isObject = function isObject(value) {
- return value && typeof value === "object";
- };
-
- /**
- * Checks if a property on a message is considered to be present.
- * This is an alias of {@link util.isSet}.
- * @function
- * @param {Object} obj Plain object or message instance
- * @param {string} prop Property name
- * @returns {boolean} `true` if considered to be present, otherwise `false`
- */
- util.isset =
- /**
- * Checks if a property on a message is considered to be present.
- * @param {Object} obj Plain object or message instance
- * @param {string} prop Property name
- * @returns {boolean} `true` if considered to be present, otherwise `false`
- */
- util.isSet = function isSet(obj, prop) {
- var value = obj[prop];
- if (value != null && obj.hasOwnProperty(prop))
- // eslint-disable-line eqeqeq, no-prototype-builtins
- return typeof value !== "object" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;
- return false;
- };
-
- /**
- * Any compatible Buffer instance.
- * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.
- * @interface Buffer
- * @extends Uint8Array
- */
-
- /**
- * Node's Buffer class if available.
- * @type {Constructor}
- */
- util.Buffer = function () {
- try {
- var Buffer = util.inquire("buffer").Buffer;
- // refuse to use non-node buffers if not explicitly assigned (perf reasons):
- return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */null;
- } catch (e) {
- /* istanbul ignore next */
- return null;
- }
- }();
-
- // Internal alias of or polyfull for Buffer.from.
- util._Buffer_from = null;
-
- // Internal alias of or polyfill for Buffer.allocUnsafe.
- util._Buffer_allocUnsafe = null;
-
- /**
- * Creates a new buffer of whatever type supported by the environment.
- * @param {number|number[]} [sizeOrArray=0] Buffer size or number array
- * @returns {Uint8Array|Buffer} Buffer
- */
- util.newBuffer = function newBuffer(sizeOrArray) {
- /* istanbul ignore next */
- return typeof sizeOrArray === "number" ? util.Buffer ? util._Buffer_allocUnsafe(sizeOrArray) : new util.Array(sizeOrArray) : util.Buffer ? util._Buffer_from(sizeOrArray) : typeof Uint8Array === "undefined" ? sizeOrArray : new Uint8Array(sizeOrArray);
- };
-
- /**
- * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.
- * @type {Constructor}
- */
- util.Array = typeof Uint8Array !== "undefined" ? Uint8Array /* istanbul ignore next */ : Array;
-
- /**
- * Any compatible Long instance.
- * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.
- * @interface Long
- * @property {number} low Low bits
- * @property {number} high High bits
- * @property {boolean} unsigned Whether unsigned or not
- */
-
- /**
- * Long.js's Long class if available.
- * @type {Constructor}
- */
- util.Long = /* istanbul ignore next */util.global.dcodeIO && /* istanbul ignore next */util.global.dcodeIO.Long || /* istanbul ignore next */util.global.Long || util.inquire("long");
-
- /**
- * Regular expression used to verify 2 bit (`bool`) map keys.
- * @type {RegExp}
- * @const
- */
- util.key2Re = /^true|false|0|1$/;
-
- /**
- * Regular expression used to verify 32 bit (`int32` etc.) map keys.
- * @type {RegExp}
- * @const
- */
- util.key32Re = /^-?(?:0|[1-9][0-9]*)$/;
-
- /**
- * Regular expression used to verify 64 bit (`int64` etc.) map keys.
- * @type {RegExp}
- * @const
- */
- util.key64Re = /^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;
-
- /**
- * Converts a number or long to an 8 characters long hash string.
- * @param {Long|number} value Value to convert
- * @returns {string} Hash
- */
- util.longToHash = function longToHash(value) {
- return value ? util.LongBits.from(value).toHash() : util.LongBits.zeroHash;
- };
-
- /**
- * Converts an 8 characters long hash string to a long or number.
- * @param {string} hash Hash
- * @param {boolean} [unsigned=false] Whether unsigned or not
- * @returns {Long|number} Original value
- */
- util.longFromHash = function longFromHash(hash, unsigned) {
- var bits = util.LongBits.fromHash(hash);
- if (util.Long) return util.Long.fromBits(bits.lo, bits.hi, unsigned);
- return bits.toNumber(Boolean(unsigned));
- };
-
- /**
- * Merges the properties of the source object into the destination object.
- * @memberof util
- * @param {Object.} dst Destination object
- * @param {Object.} src Source object
- * @param {boolean} [ifNotSet=false] Merges only if the key is not already set
- * @returns {Object.} Destination object
- */
- function merge(dst, src, ifNotSet) {
- // used by converters
- for (var keys = Object.keys(src), i = 0; i < keys.length; ++i) if (dst[keys[i]] === undefined || !ifNotSet) dst[keys[i]] = src[keys[i]];
- return dst;
- }
- util.merge = merge;
-
- /**
- * Converts the first character of a string to lower case.
- * @param {string} str String to convert
- * @returns {string} Converted string
- */
- util.lcFirst = function lcFirst(str) {
- return str.charAt(0).toLowerCase() + str.substring(1);
- };
-
- /**
- * Creates a custom error constructor.
- * @memberof util
- * @param {string} name Error name
- * @returns {Constructor} Custom error constructor
- */
- function newError(name) {
- function CustomError(message, properties) {
- if (!(this instanceof CustomError)) return new CustomError(message, properties);
-
- // Error.call(this, message);
- // ^ just returns a new error instance because the ctor can be called as a function
-
- Object.defineProperty(this, "message", {
- get: function () {
- return message;
- }
- });
-
- /* istanbul ignore next */
- if (Error.captureStackTrace)
- // node
- Error.captureStackTrace(this, CustomError);else Object.defineProperty(this, "stack", {
- value: new Error().stack || ""
- });
- if (properties) merge(this, properties);
- }
- CustomError.prototype = Object.create(Error.prototype, {
- constructor: {
- value: CustomError,
- writable: true,
- enumerable: false,
- configurable: true
- },
- name: {
- get() {
- return name;
- },
- set: undefined,
- enumerable: false,
- // configurable: false would accurately preserve the behavior of
- // the original, but I'm guessing that was not intentional.
- // For an actual error subclass, this property would
- // be configurable.
- configurable: true
- },
- toString: {
- value() {
- return this.name + ": " + this.message;
- },
- writable: true,
- enumerable: false,
- configurable: true
- }
- });
- return CustomError;
- }
- util.newError = newError;
-
- /**
- * Constructs a new protocol error.
- * @classdesc Error subclass indicating a protocol specifc error.
- * @memberof util
- * @extends Error
- * @template T extends Message
- * @constructor
- * @param {string} message Error message
- * @param {Object.} [properties] Additional properties
- * @example
- * try {
- * MyMessage.decode(someBuffer); // throws if required fields are missing
- * } catch (e) {
- * if (e instanceof ProtocolError && e.instance)
- * console.log("decoded so far: " + JSON.stringify(e.instance));
- * }
- */
- util.ProtocolError = newError("ProtocolError");
-
- /**
- * So far decoded message instance.
- * @name util.ProtocolError#instance
- * @type {Message}
- */
-
- /**
- * A OneOf getter as returned by {@link util.oneOfGetter}.
- * @typedef OneOfGetter
- * @type {function}
- * @returns {string|undefined} Set field name, if any
- */
-
- /**
- * Builds a getter for a oneof's present field name.
- * @param {string[]} fieldNames Field names
- * @returns {OneOfGetter} Unbound getter
- */
- util.oneOfGetter = function getOneOf(fieldNames) {
- var fieldMap = {};
- for (var i = 0; i < fieldNames.length; ++i) fieldMap[fieldNames[i]] = 1;
-
- /**
- * @returns {string|undefined} Set field name, if any
- * @this Object
- * @ignore
- */
- return function () {
- // eslint-disable-line consistent-return
- for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i) if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null) return keys[i];
- };
- };
-
- /**
- * A OneOf setter as returned by {@link util.oneOfSetter}.
- * @typedef OneOfSetter
- * @type {function}
- * @param {string|undefined} value Field name
- * @returns {undefined}
- */
-
- /**
- * Builds a setter for a oneof's present field name.
- * @param {string[]} fieldNames Field names
- * @returns {OneOfSetter} Unbound setter
- */
- util.oneOfSetter = function setOneOf(fieldNames) {
- /**
- * @param {string} name Field name
- * @returns {undefined}
- * @this Object
- * @ignore
- */
- return function (name) {
- for (var i = 0; i < fieldNames.length; ++i) if (fieldNames[i] !== name) delete this[fieldNames[i]];
- };
- };
-
- /**
- * Default conversion options used for {@link Message#toJSON} implementations.
- *
- * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:
- *
- * - Longs become strings
- * - Enums become string keys
- * - Bytes become base64 encoded strings
- * - (Sub-)Messages become plain objects
- * - Maps become plain objects with all string keys
- * - Repeated fields become arrays
- * - NaN and Infinity for float and double fields become strings
- *
- * @type {IConversionOptions}
- * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json
- */
- util.toJSONOptions = {
- longs: String,
- enums: String,
- bytes: String,
- json: true
- };
-
- // Sets up buffer utility according to the environment (called in index-minimal)
- util._configure = function () {
- var Buffer = util.Buffer;
- /* istanbul ignore if */
- if (!Buffer) {
- util._Buffer_from = util._Buffer_allocUnsafe = null;
- return;
- }
- // because node 4.x buffers are incompatible & immutable
- // see: https://github.com/dcodeIO/protobuf.js/pull/665
- util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from || /* istanbul ignore next */
- function Buffer_from(value, encoding) {
- return new Buffer(value, encoding);
- };
- util._Buffer_allocUnsafe = Buffer.allocUnsafe || /* istanbul ignore next */
- function Buffer_allocUnsafe(size) {
- return new Buffer(size);
- };
- };
- })(minimal);
- return minimal;
-}
-
-var writer$2 = Writer$1;
-var util$4 = requireMinimal();
-var BufferWriter$1; // cyclic
-
-var LongBits$1 = util$4.LongBits,
- base64 = util$4.base64,
- utf8$1 = util$4.utf8;
-
-/**
- * Constructs a new writer operation instance.
- * @classdesc Scheduled writer operation.
- * @constructor
- * @param {function(*, Uint8Array, number)} fn Function to call
- * @param {number} len Value byte length
- * @param {*} val Value to write
- * @ignore
- */
-function Op(fn, len, val) {
- /**
- * Function to call.
- * @type {function(Uint8Array, number, *)}
- */
- this.fn = fn;
-
- /**
- * Value byte length.
- * @type {number}
- */
- this.len = len;
-
- /**
- * Next operation.
- * @type {Writer.Op|undefined}
- */
- this.next = undefined;
-
- /**
- * Value to write.
- * @type {*}
- */
- this.val = val; // type varies
-}
-
-/* istanbul ignore next */
-function noop() {} // eslint-disable-line no-empty-function
-
-/**
- * Constructs a new writer state instance.
- * @classdesc Copied writer state.
- * @memberof Writer
- * @constructor
- * @param {Writer} writer Writer to copy state from
- * @ignore
- */
-function State(writer) {
- /**
- * Current head.
- * @type {Writer.Op}
- */
- this.head = writer.head;
-
- /**
- * Current tail.
- * @type {Writer.Op}
- */
- this.tail = writer.tail;
-
- /**
- * Current buffer length.
- * @type {number}
- */
- this.len = writer.len;
-
- /**
- * Next state.
- * @type {State|null}
- */
- this.next = writer.states;
-}
-
-/**
- * Constructs a new writer instance.
- * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.
- * @constructor
- */
-function Writer$1() {
- /**
- * Current length.
- * @type {number}
- */
- this.len = 0;
-
- /**
- * Operations head.
- * @type {Object}
- */
- this.head = new Op(noop, 0, 0);
-
- /**
- * Operations tail
- * @type {Object}
- */
- this.tail = this.head;
-
- /**
- * Linked forked states.
- * @type {Object|null}
- */
- this.states = null;
-
- // When a value is written, the writer calculates its byte length and puts it into a linked
- // list of operations to perform when finish() is called. This both allows us to allocate
- // buffers of the exact required size and reduces the amount of work we have to do compared
- // to first calculating over objects and then encoding over objects. In our case, the encoding
- // part is just a linked list walk calling operations with already prepared values.
-}
-
-var create$1 = function create() {
- return util$4.Buffer ? function create_buffer_setup() {
- return (Writer$1.create = function create_buffer() {
- return new BufferWriter$1();
- })();
- }
- /* istanbul ignore next */ : function create_array() {
- return new Writer$1();
- };
-};
-
-/**
- * Creates a new writer.
- * @function
- * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}
- */
-Writer$1.create = create$1();
-
-/**
- * Allocates a buffer of the specified size.
- * @param {number} size Buffer size
- * @returns {Uint8Array} Buffer
- */
-Writer$1.alloc = function alloc(size) {
- return new util$4.Array(size);
-};
-
-// Use Uint8Array buffer pool in the browser, just like node does with buffers
-/* istanbul ignore else */
-if (util$4.Array !== Array) Writer$1.alloc = util$4.pool(Writer$1.alloc, util$4.Array.prototype.subarray);
-
-/**
- * Pushes a new operation to the queue.
- * @param {function(Uint8Array, number, *)} fn Function to call
- * @param {number} len Value byte length
- * @param {number} val Value to write
- * @returns {Writer} `this`
- * @private
- */
-Writer$1.prototype._push = function push(fn, len, val) {
- this.tail = this.tail.next = new Op(fn, len, val);
- this.len += len;
- return this;
-};
-function writeByte(val, buf, pos) {
- buf[pos] = val & 255;
-}
-function writeVarint32(val, buf, pos) {
- while (val > 127) {
- buf[pos++] = val & 127 | 128;
- val >>>= 7;
- }
- buf[pos] = val;
-}
-
-/**
- * Constructs a new varint writer operation instance.
- * @classdesc Scheduled varint writer operation.
- * @extends Op
- * @constructor
- * @param {number} len Value byte length
- * @param {number} val Value to write
- * @ignore
- */
-function VarintOp(len, val) {
- this.len = len;
- this.next = undefined;
- this.val = val;
-}
-VarintOp.prototype = Object.create(Op.prototype);
-VarintOp.prototype.fn = writeVarint32;
-
-/**
- * Writes an unsigned 32 bit value as a varint.
- * @param {number} value Value to write
- * @returns {Writer} `this`
- */
-Writer$1.prototype.uint32 = function write_uint32(value) {
- // here, the call to this.push has been inlined and a varint specific Op subclass is used.
- // uint32 is by far the most frequently used operation and benefits significantly from this.
- this.len += (this.tail = this.tail.next = new VarintOp((value = value >>> 0) < 128 ? 1 : value < 16384 ? 2 : value < 2097152 ? 3 : value < 268435456 ? 4 : 5, value)).len;
- return this;
-};
-
-/**
- * Writes a signed 32 bit value as a varint.
- * @function
- * @param {number} value Value to write
- * @returns {Writer} `this`
- */
-Writer$1.prototype.int32 = function write_int32(value) {
- return value < 0 ? this._push(writeVarint64, 10, LongBits$1.fromNumber(value)) // 10 bytes per spec
- : this.uint32(value);
-};
-
-/**
- * Writes a 32 bit value as a varint, zig-zag encoded.
- * @param {number} value Value to write
- * @returns {Writer} `this`
- */
-Writer$1.prototype.sint32 = function write_sint32(value) {
- return this.uint32((value << 1 ^ value >> 31) >>> 0);
-};
-function writeVarint64(val, buf, pos) {
- while (val.hi) {
- buf[pos++] = val.lo & 127 | 128;
- val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;
- val.hi >>>= 7;
- }
- while (val.lo > 127) {
- buf[pos++] = val.lo & 127 | 128;
- val.lo = val.lo >>> 7;
- }
- buf[pos++] = val.lo;
-}
-
-/**
- * Writes an unsigned 64 bit value as a varint.
- * @param {Long|number|string} value Value to write
- * @returns {Writer} `this`
- * @throws {TypeError} If `value` is a string and no long library is present.
- */
-Writer$1.prototype.uint64 = function write_uint64(value) {
- var bits = LongBits$1.from(value);
- return this._push(writeVarint64, bits.length(), bits);
-};
-
-/**
- * Writes a signed 64 bit value as a varint.
- * @function
- * @param {Long|number|string} value Value to write
- * @returns {Writer} `this`
- * @throws {TypeError} If `value` is a string and no long library is present.
- */
-Writer$1.prototype.int64 = Writer$1.prototype.uint64;
-
-/**
- * Writes a signed 64 bit value as a varint, zig-zag encoded.
- * @param {Long|number|string} value Value to write
- * @returns {Writer} `this`
- * @throws {TypeError} If `value` is a string and no long library is present.
- */
-Writer$1.prototype.sint64 = function write_sint64(value) {
- var bits = LongBits$1.from(value).zzEncode();
- return this._push(writeVarint64, bits.length(), bits);
-};
-
-/**
- * Writes a boolish value as a varint.
- * @param {boolean} value Value to write
- * @returns {Writer} `this`
- */
-Writer$1.prototype.bool = function write_bool(value) {
- return this._push(writeByte, 1, value ? 1 : 0);
-};
-function writeFixed32(val, buf, pos) {
- buf[pos] = val & 255;
- buf[pos + 1] = val >>> 8 & 255;
- buf[pos + 2] = val >>> 16 & 255;
- buf[pos + 3] = val >>> 24;
-}
-
-/**
- * Writes an unsigned 32 bit value as fixed 32 bits.
- * @param {number} value Value to write
- * @returns {Writer} `this`
- */
-Writer$1.prototype.fixed32 = function write_fixed32(value) {
- return this._push(writeFixed32, 4, value >>> 0);
-};
-
-/**
- * Writes a signed 32 bit value as fixed 32 bits.
- * @function
- * @param {number} value Value to write
- * @returns {Writer} `this`
- */
-Writer$1.prototype.sfixed32 = Writer$1.prototype.fixed32;
-
-/**
- * Writes an unsigned 64 bit value as fixed 64 bits.
- * @param {Long|number|string} value Value to write
- * @returns {Writer} `this`
- * @throws {TypeError} If `value` is a string and no long library is present.
- */
-Writer$1.prototype.fixed64 = function write_fixed64(value) {
- var bits = LongBits$1.from(value);
- return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);
-};
-
-/**
- * Writes a signed 64 bit value as fixed 64 bits.
- * @function
- * @param {Long|number|string} value Value to write
- * @returns {Writer} `this`
- * @throws {TypeError} If `value` is a string and no long library is present.
- */
-Writer$1.prototype.sfixed64 = Writer$1.prototype.fixed64;
-
-/**
- * Writes a float (32 bit).
- * @function
- * @param {number} value Value to write
- * @returns {Writer} `this`
- */
-Writer$1.prototype.float = function write_float(value) {
- return this._push(util$4.float.writeFloatLE, 4, value);
-};
-
-/**
- * Writes a double (64 bit float).
- * @function
- * @param {number} value Value to write
- * @returns {Writer} `this`
- */
-Writer$1.prototype.double = function write_double(value) {
- return this._push(util$4.float.writeDoubleLE, 8, value);
-};
-var writeBytes = util$4.Array.prototype.set ? function writeBytes_set(val, buf, pos) {
- buf.set(val, pos); // also works for plain array values
-}
-/* istanbul ignore next */ : function writeBytes_for(val, buf, pos) {
- for (var i = 0; i < val.length; ++i) buf[pos + i] = val[i];
-};
-
-/**
- * Writes a sequence of bytes.
- * @param {Uint8Array|string} value Buffer or base64 encoded string to write
- * @returns {Writer} `this`
- */
-Writer$1.prototype.bytes = function write_bytes(value) {
- var len = value.length >>> 0;
- if (!len) return this._push(writeByte, 1, 0);
- if (util$4.isString(value)) {
- var buf = Writer$1.alloc(len = base64.length(value));
- base64.decode(value, buf, 0);
- value = buf;
- }
- return this.uint32(len)._push(writeBytes, len, value);
-};
-
-/**
- * Writes a string.
- * @param {string} value Value to write
- * @returns {Writer} `this`
- */
-Writer$1.prototype.string = function write_string(value) {
- var len = utf8$1.length(value);
- return len ? this.uint32(len)._push(utf8$1.write, len, value) : this._push(writeByte, 1, 0);
-};
-
-/**
- * Forks this writer's state by pushing it to a stack.
- * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.
- * @returns {Writer} `this`
- */
-Writer$1.prototype.fork = function fork() {
- this.states = new State(this);
- this.head = this.tail = new Op(noop, 0, 0);
- this.len = 0;
- return this;
-};
-
-/**
- * Resets this instance to the last state.
- * @returns {Writer} `this`
- */
-Writer$1.prototype.reset = function reset() {
- if (this.states) {
- this.head = this.states.head;
- this.tail = this.states.tail;
- this.len = this.states.len;
- this.states = this.states.next;
- } else {
- this.head = this.tail = new Op(noop, 0, 0);
- this.len = 0;
- }
- return this;
-};
-
-/**
- * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.
- * @returns {Writer} `this`
- */
-Writer$1.prototype.ldelim = function ldelim() {
- var head = this.head,
- tail = this.tail,
- len = this.len;
- this.reset().uint32(len);
- if (len) {
- this.tail.next = head.next; // skip noop
- this.tail = tail;
- this.len += len;
- }
- return this;
-};
-
-/**
- * Finishes the write operation.
- * @returns {Uint8Array} Finished buffer
- */
-Writer$1.prototype.finish = function finish() {
- var head = this.head.next,
- // skip noop
- buf = this.constructor.alloc(this.len),
- pos = 0;
- while (head) {
- head.fn(head.val, buf, pos);
- pos += head.len;
- head = head.next;
- }
- // this.head = this.tail = null;
- return buf;
-};
-Writer$1._configure = function (BufferWriter_) {
- BufferWriter$1 = BufferWriter_;
- Writer$1.create = create$1();
- BufferWriter$1._configure();
-};
-
-var writer_buffer = BufferWriter;
-
-// extends Writer
-var Writer = writer$2;
-(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;
-var util$3 = requireMinimal();
-
-/**
- * Constructs a new buffer writer instance.
- * @classdesc Wire format writer using node buffers.
- * @extends Writer
- * @constructor
- */
-function BufferWriter() {
- Writer.call(this);
-}
-BufferWriter._configure = function () {
- /**
- * Allocates a buffer of the specified size.
- * @function
- * @param {number} size Buffer size
- * @returns {Buffer} Buffer
- */
- BufferWriter.alloc = util$3._Buffer_allocUnsafe;
- BufferWriter.writeBytesBuffer = util$3.Buffer && util$3.Buffer.prototype instanceof Uint8Array && util$3.Buffer.prototype.set.name === "set" ? function writeBytesBuffer_set(val, buf, pos) {
- buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)
- // also works for plain array values
- }
- /* istanbul ignore next */ : function writeBytesBuffer_copy(val, buf, pos) {
- if (val.copy)
- // Buffer values
- val.copy(buf, pos, 0, val.length);else for (var i = 0; i < val.length;)
- // plain array values
- buf[pos++] = val[i++];
- };
-};
-
-/**
- * @override
- */
-BufferWriter.prototype.bytes = function write_bytes_buffer(value) {
- if (util$3.isString(value)) value = util$3._Buffer_from(value, "base64");
- var len = value.length >>> 0;
- this.uint32(len);
- if (len) this._push(BufferWriter.writeBytesBuffer, len, value);
- return this;
-};
-function writeStringBuffer(val, buf, pos) {
- if (val.length < 40)
- // plain js is faster for short strings (probably due to redundant assertions)
- util$3.utf8.write(val, buf, pos);else if (buf.utf8Write) buf.utf8Write(val, pos);else buf.write(val, pos);
-}
-
-/**
- * @override
- */
-BufferWriter.prototype.string = function write_string_buffer(value) {
- var len = util$3.Buffer.byteLength(value);
- this.uint32(len);
- if (len) this._push(writeStringBuffer, len, value);
- return this;
-};
-
-/**
- * Finishes the write operation.
- * @name BufferWriter#finish
- * @function
- * @returns {Buffer} Finished buffer
- */
-
-BufferWriter._configure();
-
-var reader = Reader$1;
-var util$2 = requireMinimal();
-var BufferReader$1; // cyclic
-
-var LongBits = util$2.LongBits,
- utf8 = util$2.utf8;
-
-/* istanbul ignore next */
-function indexOutOfRange(reader, writeLength) {
- return RangeError("index out of range: " + reader.pos + " + " + (writeLength || 1) + " > " + reader.len);
-}
-
-/**
- * Constructs a new reader instance using the specified buffer.
- * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.
- * @constructor
- * @param {Uint8Array} buffer Buffer to read from
- */
-function Reader$1(buffer) {
- /**
- * Read buffer.
- * @type {Uint8Array}
- */
- this.buf = buffer;
-
- /**
- * Read buffer position.
- * @type {number}
- */
- this.pos = 0;
-
- /**
- * Read buffer length.
- * @type {number}
- */
- this.len = buffer.length;
-}
-var create_array = typeof Uint8Array !== "undefined" ? function create_typed_array(buffer) {
- if (buffer instanceof Uint8Array || Array.isArray(buffer)) return new Reader$1(buffer);
- throw Error("illegal buffer");
-}
-/* istanbul ignore next */ : function create_array(buffer) {
- if (Array.isArray(buffer)) return new Reader$1(buffer);
- throw Error("illegal buffer");
-};
-var create = function create() {
- return util$2.Buffer ? function create_buffer_setup(buffer) {
- return (Reader$1.create = function create_buffer(buffer) {
- return util$2.Buffer.isBuffer(buffer) ? new BufferReader$1(buffer)
- /* istanbul ignore next */ : create_array(buffer);
- })(buffer);
- }
- /* istanbul ignore next */ : create_array;
-};
-
-/**
- * Creates a new reader using the specified buffer.
- * @function
- * @param {Uint8Array|Buffer} buffer Buffer to read from
- * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}
- * @throws {Error} If `buffer` is not a valid buffer
- */
-Reader$1.create = create();
-Reader$1.prototype._slice = util$2.Array.prototype.subarray || /* istanbul ignore next */util$2.Array.prototype.slice;
-
-/**
- * Reads a varint as an unsigned 32 bit value.
- * @function
- * @returns {number} Value read
- */
-Reader$1.prototype.uint32 = function read_uint32_setup() {
- var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)
- return function read_uint32() {
- value = (this.buf[this.pos] & 127) >>> 0;
- if (this.buf[this.pos++] < 128) return value;
- value = (value | (this.buf[this.pos] & 127) << 7) >>> 0;
- if (this.buf[this.pos++] < 128) return value;
- value = (value | (this.buf[this.pos] & 127) << 14) >>> 0;
- if (this.buf[this.pos++] < 128) return value;
- value = (value | (this.buf[this.pos] & 127) << 21) >>> 0;
- if (this.buf[this.pos++] < 128) return value;
- value = (value | (this.buf[this.pos] & 15) << 28) >>> 0;
- if (this.buf[this.pos++] < 128) return value;
-
- /* istanbul ignore if */
- if ((this.pos += 5) > this.len) {
- this.pos = this.len;
- throw indexOutOfRange(this, 10);
- }
- return value;
- };
-}();
-
-/**
- * Reads a varint as a signed 32 bit value.
- * @returns {number} Value read
- */
-Reader$1.prototype.int32 = function read_int32() {
- return this.uint32() | 0;
-};
-
-/**
- * Reads a zig-zag encoded varint as a signed 32 bit value.
- * @returns {number} Value read
- */
-Reader$1.prototype.sint32 = function read_sint32() {
- var value = this.uint32();
- return value >>> 1 ^ -(value & 1) | 0;
-};
-
-/* eslint-disable no-invalid-this */
-
-function readLongVarint() {
- // tends to deopt with local vars for octet etc.
- var bits = new LongBits(0, 0);
- var i = 0;
- if (this.len - this.pos > 4) {
- // fast route (lo)
- for (; i < 4; ++i) {
- // 1st..4th
- bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
- if (this.buf[this.pos++] < 128) return bits;
- }
- // 5th
- bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;
- bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;
- if (this.buf[this.pos++] < 128) return bits;
- i = 0;
- } else {
- for (; i < 3; ++i) {
- /* istanbul ignore if */
- if (this.pos >= this.len) throw indexOutOfRange(this);
- // 1st..3th
- bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
- if (this.buf[this.pos++] < 128) return bits;
- }
- // 4th
- bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;
- return bits;
- }
- if (this.len - this.pos > 4) {
- // fast route (hi)
- for (; i < 5; ++i) {
- // 6th..10th
- bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
- if (this.buf[this.pos++] < 128) return bits;
- }
- } else {
- for (; i < 5; ++i) {
- /* istanbul ignore if */
- if (this.pos >= this.len) throw indexOutOfRange(this);
- // 6th..10th
- bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
- if (this.buf[this.pos++] < 128) return bits;
- }
- }
- /* istanbul ignore next */
- throw Error("invalid varint encoding");
-}
-
-/* eslint-enable no-invalid-this */
-
-/**
- * Reads a varint as a signed 64 bit value.
- * @name Reader#int64
- * @function
- * @returns {Long} Value read
- */
-
-/**
- * Reads a varint as an unsigned 64 bit value.
- * @name Reader#uint64
- * @function
- * @returns {Long} Value read
- */
-
-/**
- * Reads a zig-zag encoded varint as a signed 64 bit value.
- * @name Reader#sint64
- * @function
- * @returns {Long} Value read
- */
-
-/**
- * Reads a varint as a boolean.
- * @returns {boolean} Value read
- */
-Reader$1.prototype.bool = function read_bool() {
- return this.uint32() !== 0;
-};
-function readFixed32_end(buf, end) {
- // note that this uses `end`, not `pos`
- return (buf[end - 4] | buf[end - 3] << 8 | buf[end - 2] << 16 | buf[end - 1] << 24) >>> 0;
-}
-
-/**
- * Reads fixed 32 bits as an unsigned 32 bit integer.
- * @returns {number} Value read
- */
-Reader$1.prototype.fixed32 = function read_fixed32() {
- /* istanbul ignore if */
- if (this.pos + 4 > this.len) throw indexOutOfRange(this, 4);
- return readFixed32_end(this.buf, this.pos += 4);
-};
-
-/**
- * Reads fixed 32 bits as a signed 32 bit integer.
- * @returns {number} Value read
- */
-Reader$1.prototype.sfixed32 = function read_sfixed32() {
- /* istanbul ignore if */
- if (this.pos + 4 > this.len) throw indexOutOfRange(this, 4);
- return readFixed32_end(this.buf, this.pos += 4) | 0;
-};
-
-/* eslint-disable no-invalid-this */
-
-function readFixed64( /* this: Reader */
-) {
- /* istanbul ignore if */
- if (this.pos + 8 > this.len) throw indexOutOfRange(this, 8);
- return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));
-}
-
-/* eslint-enable no-invalid-this */
-
-/**
- * Reads fixed 64 bits.
- * @name Reader#fixed64
- * @function
- * @returns {Long} Value read
- */
-
-/**
- * Reads zig-zag encoded fixed 64 bits.
- * @name Reader#sfixed64
- * @function
- * @returns {Long} Value read
- */
-
-/**
- * Reads a float (32 bit) as a number.
- * @function
- * @returns {number} Value read
- */
-Reader$1.prototype.float = function read_float() {
- /* istanbul ignore if */
- if (this.pos + 4 > this.len) throw indexOutOfRange(this, 4);
- var value = util$2.float.readFloatLE(this.buf, this.pos);
- this.pos += 4;
- return value;
-};
-
-/**
- * Reads a double (64 bit float) as a number.
- * @function
- * @returns {number} Value read
- */
-Reader$1.prototype.double = function read_double() {
- /* istanbul ignore if */
- if (this.pos + 8 > this.len) throw indexOutOfRange(this, 4);
- var value = util$2.float.readDoubleLE(this.buf, this.pos);
- this.pos += 8;
- return value;
-};
-
-/**
- * Reads a sequence of bytes preceeded by its length as a varint.
- * @returns {Uint8Array} Value read
- */
-Reader$1.prototype.bytes = function read_bytes() {
- var length = this.uint32(),
- start = this.pos,
- end = this.pos + length;
-
- /* istanbul ignore if */
- if (end > this.len) throw indexOutOfRange(this, length);
- this.pos += length;
- if (Array.isArray(this.buf))
- // plain array
- return this.buf.slice(start, end);
- return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1
- ? new this.buf.constructor(0) : this._slice.call(this.buf, start, end);
-};
-
-/**
- * Reads a string preceeded by its byte length as a varint.
- * @returns {string} Value read
- */
-Reader$1.prototype.string = function read_string() {
- var bytes = this.bytes();
- return utf8.read(bytes, 0, bytes.length);
-};
-
-/**
- * Skips the specified number of bytes if specified, otherwise skips a varint.
- * @param {number} [length] Length if known, otherwise a varint is assumed
- * @returns {Reader} `this`
- */
-Reader$1.prototype.skip = function skip(length) {
- if (typeof length === "number") {
- /* istanbul ignore if */
- if (this.pos + length > this.len) throw indexOutOfRange(this, length);
- this.pos += length;
- } else {
- do {
- /* istanbul ignore if */
- if (this.pos >= this.len) throw indexOutOfRange(this);
- } while (this.buf[this.pos++] & 128);
- }
- return this;
-};
-
-/**
- * Skips the next element of the specified wire type.
- * @param {number} wireType Wire type received
- * @returns {Reader} `this`
- */
-Reader$1.prototype.skipType = function (wireType) {
- switch (wireType) {
- case 0:
- this.skip();
- break;
- case 1:
- this.skip(8);
- break;
- case 2:
- this.skip(this.uint32());
- break;
- case 3:
- while ((wireType = this.uint32() & 7) !== 4) {
- this.skipType(wireType);
- }
- break;
- case 5:
- this.skip(4);
- break;
-
- /* istanbul ignore next */
- default:
- throw Error("invalid wire type " + wireType + " at offset " + this.pos);
- }
- return this;
-};
-Reader$1._configure = function (BufferReader_) {
- BufferReader$1 = BufferReader_;
- Reader$1.create = create();
- BufferReader$1._configure();
- var fn = util$2.Long ? "toLong" : /* istanbul ignore next */"toNumber";
- util$2.merge(Reader$1.prototype, {
- int64: function read_int64() {
- return readLongVarint.call(this)[fn](false);
- },
- uint64: function read_uint64() {
- return readLongVarint.call(this)[fn](true);
- },
- sint64: function read_sint64() {
- return readLongVarint.call(this).zzDecode()[fn](false);
- },
- fixed64: function read_fixed64() {
- return readFixed64.call(this)[fn](true);
- },
- sfixed64: function read_sfixed64() {
- return readFixed64.call(this)[fn](false);
- }
- });
-};
-
-var reader_buffer = BufferReader;
-
-// extends Reader
-var Reader = reader;
-(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;
-var util$1 = requireMinimal();
-
-/**
- * Constructs a new buffer reader instance.
- * @classdesc Wire format reader using node buffers.
- * @extends Reader
- * @constructor
- * @param {Buffer} buffer Buffer to read from
- */
-function BufferReader(buffer) {
- Reader.call(this, buffer);
-
- /**
- * Read buffer.
- * @name BufferReader#buf
- * @type {Buffer}
- */
-}
-
-BufferReader._configure = function () {
- /* istanbul ignore else */
- if (util$1.Buffer) BufferReader.prototype._slice = util$1.Buffer.prototype.slice;
-};
-
-/**
- * @override
- */
-BufferReader.prototype.string = function read_string_buffer() {
- var len = this.uint32(); // modifies pos
- return this.buf.utf8Slice ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len)) : this.buf.toString("utf-8", this.pos, this.pos = Math.min(this.pos + len, this.len));
-};
-
-/**
- * Reads a sequence of bytes preceeded by its length as a varint.
- * @name BufferReader#bytes
- * @function
- * @returns {Buffer} Value read
- */
-
-BufferReader._configure();
-
-var rpc = {};
-
-var service = Service;
-var util = requireMinimal();
-
-// Extends EventEmitter
-(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;
-
-/**
- * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.
- *
- * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.
- * @typedef rpc.ServiceMethodCallback
- * @template TRes extends Message
- * @type {function}
- * @param {Error|null} error Error, if any
- * @param {TRes} [response] Response message
- * @returns {undefined}
- */
-
-/**
- * A service method part of a {@link rpc.Service} as created by {@link Service.create}.
- * @typedef rpc.ServiceMethod
- * @template TReq extends Message
- * @template TRes extends Message
- * @type {function}
- * @param {TReq|Properties} request Request message or plain object
- * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message
- * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`
- */
-
-/**
- * Constructs a new RPC service instance.
- * @classdesc An RPC service as returned by {@link Service#create}.
- * @exports rpc.Service
- * @extends util.EventEmitter
- * @constructor
- * @param {RPCImpl} rpcImpl RPC implementation
- * @param {boolean} [requestDelimited=false] Whether requests are length-delimited
- * @param {boolean} [responseDelimited=false] Whether responses are length-delimited
- */
-function Service(rpcImpl, requestDelimited, responseDelimited) {
- if (typeof rpcImpl !== "function") throw TypeError("rpcImpl must be a function");
- util.EventEmitter.call(this);
-
- /**
- * RPC implementation. Becomes `null` once the service is ended.
- * @type {RPCImpl|null}
- */
- this.rpcImpl = rpcImpl;
-
- /**
- * Whether requests are length-delimited.
- * @type {boolean}
- */
- this.requestDelimited = Boolean(requestDelimited);
-
- /**
- * Whether responses are length-delimited.
- * @type {boolean}
- */
- this.responseDelimited = Boolean(responseDelimited);
-}
-
-/**
- * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.
- * @param {Method|rpc.ServiceMethod} method Reflected or static method
- * @param {Constructor} requestCtor Request constructor
- * @param {Constructor} responseCtor Response constructor
- * @param {TReq|Properties} request Request message or plain object
- * @param {rpc.ServiceMethodCallback} callback Service callback
- * @returns {undefined}
- * @template TReq extends Message
- * @template TRes extends Message
- */
-Service.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {
- if (!request) throw TypeError("request must be specified");
- var self = this;
- if (!callback) return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);
- if (!self.rpcImpl) {
- setTimeout(function () {
- callback(Error("already ended"));
- }, 0);
- return undefined;
- }
- try {
- return self.rpcImpl(method, requestCtor[self.requestDelimited ? "encodeDelimited" : "encode"](request).finish(), function rpcCallback(err, response) {
- if (err) {
- self.emit("error", err, method);
- return callback(err);
- }
- if (response === null) {
- self.end( /* endedByRPC */true);
- return undefined;
- }
- if (!(response instanceof responseCtor)) {
- try {
- response = responseCtor[self.responseDelimited ? "decodeDelimited" : "decode"](response);
- } catch (err) {
- self.emit("error", err, method);
- return callback(err);
- }
- }
- self.emit("data", response, method);
- return callback(null, response);
- });
- } catch (err) {
- self.emit("error", err, method);
- setTimeout(function () {
- callback(err);
- }, 0);
- return undefined;
- }
-};
-
-/**
- * Ends this service and emits the `end` event.
- * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.
- * @returns {rpc.Service} `this`
- */
-Service.prototype.end = function end(endedByRPC) {
- if (this.rpcImpl) {
- if (!endedByRPC)
- // signal end to rpcImpl
- this.rpcImpl(null, null, null);
- this.rpcImpl = null;
- this.emit("end").off();
- }
- return this;
-};
-
-(function (exports) {
-
- /**
- * Streaming RPC helpers.
- * @namespace
- */
- var rpc = exports;
-
- /**
- * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.
- * @typedef RPCImpl
- * @type {function}
- * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called
- * @param {Uint8Array} requestData Request data
- * @param {RPCImplCallback} callback Callback function
- * @returns {undefined}
- * @example
- * function rpcImpl(method, requestData, callback) {
- * if (protobuf.util.lcFirst(method.name) !== "myMethod") // compatible with static code
- * throw Error("no such method");
- * asynchronouslyObtainAResponse(requestData, function(err, responseData) {
- * callback(err, responseData);
- * });
- * }
- */
-
- /**
- * Node-style callback as used by {@link RPCImpl}.
- * @typedef RPCImplCallback
- * @type {function}
- * @param {Error|null} error Error, if any, otherwise `null`
- * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error
- * @returns {undefined}
- */
-
- rpc.Service = service;
-})(rpc);
-
-var roots = {};
-
-(function (exports) {
-
- var protobuf = exports;
-
- /**
- * Build type, one of `"full"`, `"light"` or `"minimal"`.
- * @name build
- * @type {string}
- * @const
- */
- protobuf.build = "minimal";
-
- // Serialization
- protobuf.Writer = writer$2;
- protobuf.BufferWriter = writer_buffer;
- protobuf.Reader = reader;
- protobuf.BufferReader = reader_buffer;
-
- // Utility
- protobuf.util = requireMinimal();
- protobuf.rpc = rpc;
- protobuf.roots = roots;
- protobuf.configure = configure;
-
- /* istanbul ignore next */
- /**
- * Reconfigures the library according to the environment.
- * @returns {undefined}
- */
- function configure() {
- protobuf.util._configure();
- protobuf.Writer._configure(protobuf.BufferWriter);
- protobuf.Reader._configure(protobuf.BufferReader);
- }
-
- // Set up buffer utility according to the environment
- configure();
-})(indexMinimal);
-
-(function (module) {
-
- module.exports = indexMinimal;
-})(minimal$1);
-var _m0 = /*@__PURE__*/getDefaultExportFromCjs(minimalExports);
-
-/* eslint-disable */
-(() => {
- if (typeof globalThis !== "undefined") {
- return globalThis;
- }
- if (typeof self !== "undefined") {
- return self;
- }
- if (typeof window !== "undefined") {
- return window;
- }
- if (typeof global !== "undefined") {
- return global;
- }
- throw "Unable to locate global object";
-})();
-if (_m0.util.Long !== Long) {
- _m0.util.Long = Long;
- _m0.configure();
-}
-
-/* eslint-disable */
-var TrackType;
-(function (TrackType) {
- TrackType[TrackType["AUDIO"] = 0] = "AUDIO";
- TrackType[TrackType["VIDEO"] = 1] = "VIDEO";
- TrackType[TrackType["DATA"] = 2] = "DATA";
- TrackType[TrackType["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(TrackType || (TrackType = {}));
-function trackTypeFromJSON(object) {
- switch (object) {
- case 0:
- case "AUDIO":
- return TrackType.AUDIO;
- case 1:
- case "VIDEO":
- return TrackType.VIDEO;
- case 2:
- case "DATA":
- return TrackType.DATA;
- case -1:
- case "UNRECOGNIZED":
- default:
- return TrackType.UNRECOGNIZED;
- }
-}
-function trackTypeToJSON(object) {
- switch (object) {
- case TrackType.AUDIO:
- return "AUDIO";
- case TrackType.VIDEO:
- return "VIDEO";
- case TrackType.DATA:
- return "DATA";
- case TrackType.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var TrackSource;
-(function (TrackSource) {
- TrackSource[TrackSource["UNKNOWN"] = 0] = "UNKNOWN";
- TrackSource[TrackSource["CAMERA"] = 1] = "CAMERA";
- TrackSource[TrackSource["MICROPHONE"] = 2] = "MICROPHONE";
- TrackSource[TrackSource["SCREEN_SHARE"] = 3] = "SCREEN_SHARE";
- TrackSource[TrackSource["SCREEN_SHARE_AUDIO"] = 4] = "SCREEN_SHARE_AUDIO";
- TrackSource[TrackSource["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(TrackSource || (TrackSource = {}));
-function trackSourceFromJSON(object) {
- switch (object) {
- case 0:
- case "UNKNOWN":
- return TrackSource.UNKNOWN;
- case 1:
- case "CAMERA":
- return TrackSource.CAMERA;
- case 2:
- case "MICROPHONE":
- return TrackSource.MICROPHONE;
- case 3:
- case "SCREEN_SHARE":
- return TrackSource.SCREEN_SHARE;
- case 4:
- case "SCREEN_SHARE_AUDIO":
- return TrackSource.SCREEN_SHARE_AUDIO;
- case -1:
- case "UNRECOGNIZED":
- default:
- return TrackSource.UNRECOGNIZED;
- }
-}
-function trackSourceToJSON(object) {
- switch (object) {
- case TrackSource.UNKNOWN:
- return "UNKNOWN";
- case TrackSource.CAMERA:
- return "CAMERA";
- case TrackSource.MICROPHONE:
- return "MICROPHONE";
- case TrackSource.SCREEN_SHARE:
- return "SCREEN_SHARE";
- case TrackSource.SCREEN_SHARE_AUDIO:
- return "SCREEN_SHARE_AUDIO";
- case TrackSource.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var VideoQuality;
-(function (VideoQuality) {
- VideoQuality[VideoQuality["LOW"] = 0] = "LOW";
- VideoQuality[VideoQuality["MEDIUM"] = 1] = "MEDIUM";
- VideoQuality[VideoQuality["HIGH"] = 2] = "HIGH";
- VideoQuality[VideoQuality["OFF"] = 3] = "OFF";
- VideoQuality[VideoQuality["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(VideoQuality || (VideoQuality = {}));
-function videoQualityFromJSON(object) {
- switch (object) {
- case 0:
- case "LOW":
- return VideoQuality.LOW;
- case 1:
- case "MEDIUM":
- return VideoQuality.MEDIUM;
- case 2:
- case "HIGH":
- return VideoQuality.HIGH;
- case 3:
- case "OFF":
- return VideoQuality.OFF;
- case -1:
- case "UNRECOGNIZED":
- default:
- return VideoQuality.UNRECOGNIZED;
- }
-}
-function videoQualityToJSON(object) {
- switch (object) {
- case VideoQuality.LOW:
- return "LOW";
- case VideoQuality.MEDIUM:
- return "MEDIUM";
- case VideoQuality.HIGH:
- return "HIGH";
- case VideoQuality.OFF:
- return "OFF";
- case VideoQuality.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var ConnectionQuality$1;
-(function (ConnectionQuality) {
- ConnectionQuality[ConnectionQuality["POOR"] = 0] = "POOR";
- ConnectionQuality[ConnectionQuality["GOOD"] = 1] = "GOOD";
- ConnectionQuality[ConnectionQuality["EXCELLENT"] = 2] = "EXCELLENT";
- ConnectionQuality[ConnectionQuality["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(ConnectionQuality$1 || (ConnectionQuality$1 = {}));
-function connectionQualityFromJSON(object) {
- switch (object) {
- case 0:
- case "POOR":
- return ConnectionQuality$1.POOR;
- case 1:
- case "GOOD":
- return ConnectionQuality$1.GOOD;
- case 2:
- case "EXCELLENT":
- return ConnectionQuality$1.EXCELLENT;
- case -1:
- case "UNRECOGNIZED":
- default:
- return ConnectionQuality$1.UNRECOGNIZED;
- }
-}
-function connectionQualityToJSON(object) {
- switch (object) {
- case ConnectionQuality$1.POOR:
- return "POOR";
- case ConnectionQuality$1.GOOD:
- return "GOOD";
- case ConnectionQuality$1.EXCELLENT:
- return "EXCELLENT";
- case ConnectionQuality$1.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var ClientConfigSetting;
-(function (ClientConfigSetting) {
- ClientConfigSetting[ClientConfigSetting["UNSET"] = 0] = "UNSET";
- ClientConfigSetting[ClientConfigSetting["DISABLED"] = 1] = "DISABLED";
- ClientConfigSetting[ClientConfigSetting["ENABLED"] = 2] = "ENABLED";
- ClientConfigSetting[ClientConfigSetting["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(ClientConfigSetting || (ClientConfigSetting = {}));
-function clientConfigSettingFromJSON(object) {
- switch (object) {
- case 0:
- case "UNSET":
- return ClientConfigSetting.UNSET;
- case 1:
- case "DISABLED":
- return ClientConfigSetting.DISABLED;
- case 2:
- case "ENABLED":
- return ClientConfigSetting.ENABLED;
- case -1:
- case "UNRECOGNIZED":
- default:
- return ClientConfigSetting.UNRECOGNIZED;
- }
-}
-function clientConfigSettingToJSON(object) {
- switch (object) {
- case ClientConfigSetting.UNSET:
- return "UNSET";
- case ClientConfigSetting.DISABLED:
- return "DISABLED";
- case ClientConfigSetting.ENABLED:
- return "ENABLED";
- case ClientConfigSetting.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var DisconnectReason;
-(function (DisconnectReason) {
- DisconnectReason[DisconnectReason["UNKNOWN_REASON"] = 0] = "UNKNOWN_REASON";
- DisconnectReason[DisconnectReason["CLIENT_INITIATED"] = 1] = "CLIENT_INITIATED";
- DisconnectReason[DisconnectReason["DUPLICATE_IDENTITY"] = 2] = "DUPLICATE_IDENTITY";
- DisconnectReason[DisconnectReason["SERVER_SHUTDOWN"] = 3] = "SERVER_SHUTDOWN";
- DisconnectReason[DisconnectReason["PARTICIPANT_REMOVED"] = 4] = "PARTICIPANT_REMOVED";
- DisconnectReason[DisconnectReason["ROOM_DELETED"] = 5] = "ROOM_DELETED";
- DisconnectReason[DisconnectReason["STATE_MISMATCH"] = 6] = "STATE_MISMATCH";
- DisconnectReason[DisconnectReason["JOIN_FAILURE"] = 7] = "JOIN_FAILURE";
- DisconnectReason[DisconnectReason["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(DisconnectReason || (DisconnectReason = {}));
-function disconnectReasonFromJSON(object) {
- switch (object) {
- case 0:
- case "UNKNOWN_REASON":
- return DisconnectReason.UNKNOWN_REASON;
- case 1:
- case "CLIENT_INITIATED":
- return DisconnectReason.CLIENT_INITIATED;
- case 2:
- case "DUPLICATE_IDENTITY":
- return DisconnectReason.DUPLICATE_IDENTITY;
- case 3:
- case "SERVER_SHUTDOWN":
- return DisconnectReason.SERVER_SHUTDOWN;
- case 4:
- case "PARTICIPANT_REMOVED":
- return DisconnectReason.PARTICIPANT_REMOVED;
- case 5:
- case "ROOM_DELETED":
- return DisconnectReason.ROOM_DELETED;
- case 6:
- case "STATE_MISMATCH":
- return DisconnectReason.STATE_MISMATCH;
- case 7:
- case "JOIN_FAILURE":
- return DisconnectReason.JOIN_FAILURE;
- case -1:
- case "UNRECOGNIZED":
- default:
- return DisconnectReason.UNRECOGNIZED;
- }
-}
-function disconnectReasonToJSON(object) {
- switch (object) {
- case DisconnectReason.UNKNOWN_REASON:
- return "UNKNOWN_REASON";
- case DisconnectReason.CLIENT_INITIATED:
- return "CLIENT_INITIATED";
- case DisconnectReason.DUPLICATE_IDENTITY:
- return "DUPLICATE_IDENTITY";
- case DisconnectReason.SERVER_SHUTDOWN:
- return "SERVER_SHUTDOWN";
- case DisconnectReason.PARTICIPANT_REMOVED:
- return "PARTICIPANT_REMOVED";
- case DisconnectReason.ROOM_DELETED:
- return "ROOM_DELETED";
- case DisconnectReason.STATE_MISMATCH:
- return "STATE_MISMATCH";
- case DisconnectReason.JOIN_FAILURE:
- return "JOIN_FAILURE";
- case DisconnectReason.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var ReconnectReason;
-(function (ReconnectReason) {
- ReconnectReason[ReconnectReason["RR_UNKOWN"] = 0] = "RR_UNKOWN";
- ReconnectReason[ReconnectReason["RR_SIGNAL_DISCONNECTED"] = 1] = "RR_SIGNAL_DISCONNECTED";
- ReconnectReason[ReconnectReason["RR_PUBLISHER_FAILED"] = 2] = "RR_PUBLISHER_FAILED";
- ReconnectReason[ReconnectReason["RR_SUBSCRIBER_FAILED"] = 3] = "RR_SUBSCRIBER_FAILED";
- ReconnectReason[ReconnectReason["RR_SWITCH_CANDIDATE"] = 4] = "RR_SWITCH_CANDIDATE";
- ReconnectReason[ReconnectReason["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(ReconnectReason || (ReconnectReason = {}));
-var ParticipantInfo_State;
-(function (ParticipantInfo_State) {
- /** JOINING - websocket' connected, but not offered yet */
- ParticipantInfo_State[ParticipantInfo_State["JOINING"] = 0] = "JOINING";
- /** JOINED - server received client offer */
- ParticipantInfo_State[ParticipantInfo_State["JOINED"] = 1] = "JOINED";
- /** ACTIVE - ICE connectivity established */
- ParticipantInfo_State[ParticipantInfo_State["ACTIVE"] = 2] = "ACTIVE";
- /** DISCONNECTED - WS disconnected */
- ParticipantInfo_State[ParticipantInfo_State["DISCONNECTED"] = 3] = "DISCONNECTED";
- ParticipantInfo_State[ParticipantInfo_State["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(ParticipantInfo_State || (ParticipantInfo_State = {}));
-function participantInfo_StateFromJSON(object) {
- switch (object) {
- case 0:
- case "JOINING":
- return ParticipantInfo_State.JOINING;
- case 1:
- case "JOINED":
- return ParticipantInfo_State.JOINED;
- case 2:
- case "ACTIVE":
- return ParticipantInfo_State.ACTIVE;
- case 3:
- case "DISCONNECTED":
- return ParticipantInfo_State.DISCONNECTED;
- case -1:
- case "UNRECOGNIZED":
- default:
- return ParticipantInfo_State.UNRECOGNIZED;
- }
-}
-function participantInfo_StateToJSON(object) {
- switch (object) {
- case ParticipantInfo_State.JOINING:
- return "JOINING";
- case ParticipantInfo_State.JOINED:
- return "JOINED";
- case ParticipantInfo_State.ACTIVE:
- return "ACTIVE";
- case ParticipantInfo_State.DISCONNECTED:
- return "DISCONNECTED";
- case ParticipantInfo_State.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var Encryption_Type;
-(function (Encryption_Type) {
- Encryption_Type[Encryption_Type["NONE"] = 0] = "NONE";
- Encryption_Type[Encryption_Type["GCM"] = 1] = "GCM";
- Encryption_Type[Encryption_Type["CUSTOM"] = 2] = "CUSTOM";
- Encryption_Type[Encryption_Type["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(Encryption_Type || (Encryption_Type = {}));
-function encryption_TypeFromJSON(object) {
- switch (object) {
- case 0:
- case "NONE":
- return Encryption_Type.NONE;
- case 1:
- case "GCM":
- return Encryption_Type.GCM;
- case 2:
- case "CUSTOM":
- return Encryption_Type.CUSTOM;
- case -1:
- case "UNRECOGNIZED":
- default:
- return Encryption_Type.UNRECOGNIZED;
- }
-}
-function encryption_TypeToJSON(object) {
- switch (object) {
- case Encryption_Type.NONE:
- return "NONE";
- case Encryption_Type.GCM:
- return "GCM";
- case Encryption_Type.CUSTOM:
- return "CUSTOM";
- case Encryption_Type.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var DataPacket_Kind;
-(function (DataPacket_Kind) {
- DataPacket_Kind[DataPacket_Kind["RELIABLE"] = 0] = "RELIABLE";
- DataPacket_Kind[DataPacket_Kind["LOSSY"] = 1] = "LOSSY";
- DataPacket_Kind[DataPacket_Kind["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(DataPacket_Kind || (DataPacket_Kind = {}));
-function dataPacket_KindFromJSON(object) {
- switch (object) {
- case 0:
- case "RELIABLE":
- return DataPacket_Kind.RELIABLE;
- case 1:
- case "LOSSY":
- return DataPacket_Kind.LOSSY;
- case -1:
- case "UNRECOGNIZED":
- default:
- return DataPacket_Kind.UNRECOGNIZED;
- }
-}
-function dataPacket_KindToJSON(object) {
- switch (object) {
- case DataPacket_Kind.RELIABLE:
- return "RELIABLE";
- case DataPacket_Kind.LOSSY:
- return "LOSSY";
- case DataPacket_Kind.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var ServerInfo_Edition;
-(function (ServerInfo_Edition) {
- ServerInfo_Edition[ServerInfo_Edition["Standard"] = 0] = "Standard";
- ServerInfo_Edition[ServerInfo_Edition["Cloud"] = 1] = "Cloud";
- ServerInfo_Edition[ServerInfo_Edition["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(ServerInfo_Edition || (ServerInfo_Edition = {}));
-function serverInfo_EditionFromJSON(object) {
- switch (object) {
- case 0:
- case "Standard":
- return ServerInfo_Edition.Standard;
- case 1:
- case "Cloud":
- return ServerInfo_Edition.Cloud;
- case -1:
- case "UNRECOGNIZED":
- default:
- return ServerInfo_Edition.UNRECOGNIZED;
- }
-}
-function serverInfo_EditionToJSON(object) {
- switch (object) {
- case ServerInfo_Edition.Standard:
- return "Standard";
- case ServerInfo_Edition.Cloud:
- return "Cloud";
- case ServerInfo_Edition.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var ClientInfo_SDK;
-(function (ClientInfo_SDK) {
- ClientInfo_SDK[ClientInfo_SDK["UNKNOWN"] = 0] = "UNKNOWN";
- ClientInfo_SDK[ClientInfo_SDK["JS"] = 1] = "JS";
- ClientInfo_SDK[ClientInfo_SDK["SWIFT"] = 2] = "SWIFT";
- ClientInfo_SDK[ClientInfo_SDK["ANDROID"] = 3] = "ANDROID";
- ClientInfo_SDK[ClientInfo_SDK["FLUTTER"] = 4] = "FLUTTER";
- ClientInfo_SDK[ClientInfo_SDK["GO"] = 5] = "GO";
- ClientInfo_SDK[ClientInfo_SDK["UNITY"] = 6] = "UNITY";
- ClientInfo_SDK[ClientInfo_SDK["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(ClientInfo_SDK || (ClientInfo_SDK = {}));
-function clientInfo_SDKFromJSON(object) {
- switch (object) {
- case 0:
- case "UNKNOWN":
- return ClientInfo_SDK.UNKNOWN;
- case 1:
- case "JS":
- return ClientInfo_SDK.JS;
- case 2:
- case "SWIFT":
- return ClientInfo_SDK.SWIFT;
- case 3:
- case "ANDROID":
- return ClientInfo_SDK.ANDROID;
- case 4:
- case "FLUTTER":
- return ClientInfo_SDK.FLUTTER;
- case 5:
- case "GO":
- return ClientInfo_SDK.GO;
- case 6:
- case "UNITY":
- return ClientInfo_SDK.UNITY;
- case -1:
- case "UNRECOGNIZED":
- default:
- return ClientInfo_SDK.UNRECOGNIZED;
- }
-}
-function clientInfo_SDKToJSON(object) {
- switch (object) {
- case ClientInfo_SDK.UNKNOWN:
- return "UNKNOWN";
- case ClientInfo_SDK.JS:
- return "JS";
- case ClientInfo_SDK.SWIFT:
- return "SWIFT";
- case ClientInfo_SDK.ANDROID:
- return "ANDROID";
- case ClientInfo_SDK.FLUTTER:
- return "FLUTTER";
- case ClientInfo_SDK.GO:
- return "GO";
- case ClientInfo_SDK.UNITY:
- return "UNITY";
- case ClientInfo_SDK.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-function createBaseRoom() {
- return {
- sid: "",
- name: "",
- emptyTimeout: 0,
- maxParticipants: 0,
- creationTime: 0,
- turnPassword: "",
- enabledCodecs: [],
- metadata: "",
- numParticipants: 0,
- activeRecording: false
- };
-}
-const Room$1 = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.sid !== "") {
- writer.uint32(10).string(message.sid);
- }
- if (message.name !== "") {
- writer.uint32(18).string(message.name);
- }
- if (message.emptyTimeout !== 0) {
- writer.uint32(24).uint32(message.emptyTimeout);
- }
- if (message.maxParticipants !== 0) {
- writer.uint32(32).uint32(message.maxParticipants);
- }
- if (message.creationTime !== 0) {
- writer.uint32(40).int64(message.creationTime);
- }
- if (message.turnPassword !== "") {
- writer.uint32(50).string(message.turnPassword);
- }
- for (const v of message.enabledCodecs) {
- Codec.encode(v, writer.uint32(58).fork()).ldelim();
- }
- if (message.metadata !== "") {
- writer.uint32(66).string(message.metadata);
- }
- if (message.numParticipants !== 0) {
- writer.uint32(72).uint32(message.numParticipants);
- }
- if (message.activeRecording === true) {
- writer.uint32(80).bool(message.activeRecording);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseRoom();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.sid = reader.string();
- break;
- case 2:
- message.name = reader.string();
- break;
- case 3:
- message.emptyTimeout = reader.uint32();
- break;
- case 4:
- message.maxParticipants = reader.uint32();
- break;
- case 5:
- message.creationTime = longToNumber$1(reader.int64());
- break;
- case 6:
- message.turnPassword = reader.string();
- break;
- case 7:
- message.enabledCodecs.push(Codec.decode(reader, reader.uint32()));
- break;
- case 8:
- message.metadata = reader.string();
- break;
- case 9:
- message.numParticipants = reader.uint32();
- break;
- case 10:
- message.activeRecording = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- sid: isSet$1(object.sid) ? String(object.sid) : "",
- name: isSet$1(object.name) ? String(object.name) : "",
- emptyTimeout: isSet$1(object.emptyTimeout) ? Number(object.emptyTimeout) : 0,
- maxParticipants: isSet$1(object.maxParticipants) ? Number(object.maxParticipants) : 0,
- creationTime: isSet$1(object.creationTime) ? Number(object.creationTime) : 0,
- turnPassword: isSet$1(object.turnPassword) ? String(object.turnPassword) : "",
- enabledCodecs: Array.isArray(object === null || object === void 0 ? void 0 : object.enabledCodecs) ? object.enabledCodecs.map(e => Codec.fromJSON(e)) : [],
- metadata: isSet$1(object.metadata) ? String(object.metadata) : "",
- numParticipants: isSet$1(object.numParticipants) ? Number(object.numParticipants) : 0,
- activeRecording: isSet$1(object.activeRecording) ? Boolean(object.activeRecording) : false
- };
- },
- toJSON(message) {
- const obj = {};
- message.sid !== undefined && (obj.sid = message.sid);
- message.name !== undefined && (obj.name = message.name);
- message.emptyTimeout !== undefined && (obj.emptyTimeout = Math.round(message.emptyTimeout));
- message.maxParticipants !== undefined && (obj.maxParticipants = Math.round(message.maxParticipants));
- message.creationTime !== undefined && (obj.creationTime = Math.round(message.creationTime));
- message.turnPassword !== undefined && (obj.turnPassword = message.turnPassword);
- if (message.enabledCodecs) {
- obj.enabledCodecs = message.enabledCodecs.map(e => e ? Codec.toJSON(e) : undefined);
- } else {
- obj.enabledCodecs = [];
- }
- message.metadata !== undefined && (obj.metadata = message.metadata);
- message.numParticipants !== undefined && (obj.numParticipants = Math.round(message.numParticipants));
- message.activeRecording !== undefined && (obj.activeRecording = message.activeRecording);
- return obj;
- },
- create(base) {
- return Room$1.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
- const message = createBaseRoom();
- message.sid = (_a = object.sid) !== null && _a !== void 0 ? _a : "";
- message.name = (_b = object.name) !== null && _b !== void 0 ? _b : "";
- message.emptyTimeout = (_c = object.emptyTimeout) !== null && _c !== void 0 ? _c : 0;
- message.maxParticipants = (_d = object.maxParticipants) !== null && _d !== void 0 ? _d : 0;
- message.creationTime = (_e = object.creationTime) !== null && _e !== void 0 ? _e : 0;
- message.turnPassword = (_f = object.turnPassword) !== null && _f !== void 0 ? _f : "";
- message.enabledCodecs = ((_g = object.enabledCodecs) === null || _g === void 0 ? void 0 : _g.map(e => Codec.fromPartial(e))) || [];
- message.metadata = (_h = object.metadata) !== null && _h !== void 0 ? _h : "";
- message.numParticipants = (_j = object.numParticipants) !== null && _j !== void 0 ? _j : 0;
- message.activeRecording = (_k = object.activeRecording) !== null && _k !== void 0 ? _k : false;
- return message;
- }
-};
-function createBaseCodec() {
- return {
- mime: "",
- fmtpLine: ""
- };
-}
-const Codec = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.mime !== "") {
- writer.uint32(10).string(message.mime);
- }
- if (message.fmtpLine !== "") {
- writer.uint32(18).string(message.fmtpLine);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseCodec();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.mime = reader.string();
- break;
- case 2:
- message.fmtpLine = reader.string();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- mime: isSet$1(object.mime) ? String(object.mime) : "",
- fmtpLine: isSet$1(object.fmtpLine) ? String(object.fmtpLine) : ""
- };
- },
- toJSON(message) {
- const obj = {};
- message.mime !== undefined && (obj.mime = message.mime);
- message.fmtpLine !== undefined && (obj.fmtpLine = message.fmtpLine);
- return obj;
- },
- create(base) {
- return Codec.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseCodec();
- message.mime = (_a = object.mime) !== null && _a !== void 0 ? _a : "";
- message.fmtpLine = (_b = object.fmtpLine) !== null && _b !== void 0 ? _b : "";
- return message;
- }
-};
-function createBaseParticipantPermission() {
- return {
- canSubscribe: false,
- canPublish: false,
- canPublishData: false,
- canPublishSources: [],
- hidden: false,
- recorder: false
- };
-}
-const ParticipantPermission = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.canSubscribe === true) {
- writer.uint32(8).bool(message.canSubscribe);
- }
- if (message.canPublish === true) {
- writer.uint32(16).bool(message.canPublish);
- }
- if (message.canPublishData === true) {
- writer.uint32(24).bool(message.canPublishData);
- }
- writer.uint32(74).fork();
- for (const v of message.canPublishSources) {
- writer.int32(v);
- }
- writer.ldelim();
- if (message.hidden === true) {
- writer.uint32(56).bool(message.hidden);
- }
- if (message.recorder === true) {
- writer.uint32(64).bool(message.recorder);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseParticipantPermission();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.canSubscribe = reader.bool();
- break;
- case 2:
- message.canPublish = reader.bool();
- break;
- case 3:
- message.canPublishData = reader.bool();
- break;
- case 9:
- if ((tag & 7) === 2) {
- const end2 = reader.uint32() + reader.pos;
- while (reader.pos < end2) {
- message.canPublishSources.push(reader.int32());
- }
- } else {
- message.canPublishSources.push(reader.int32());
- }
- break;
- case 7:
- message.hidden = reader.bool();
- break;
- case 8:
- message.recorder = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- canSubscribe: isSet$1(object.canSubscribe) ? Boolean(object.canSubscribe) : false,
- canPublish: isSet$1(object.canPublish) ? Boolean(object.canPublish) : false,
- canPublishData: isSet$1(object.canPublishData) ? Boolean(object.canPublishData) : false,
- canPublishSources: Array.isArray(object === null || object === void 0 ? void 0 : object.canPublishSources) ? object.canPublishSources.map(e => trackSourceFromJSON(e)) : [],
- hidden: isSet$1(object.hidden) ? Boolean(object.hidden) : false,
- recorder: isSet$1(object.recorder) ? Boolean(object.recorder) : false
- };
- },
- toJSON(message) {
- const obj = {};
- message.canSubscribe !== undefined && (obj.canSubscribe = message.canSubscribe);
- message.canPublish !== undefined && (obj.canPublish = message.canPublish);
- message.canPublishData !== undefined && (obj.canPublishData = message.canPublishData);
- if (message.canPublishSources) {
- obj.canPublishSources = message.canPublishSources.map(e => trackSourceToJSON(e));
- } else {
- obj.canPublishSources = [];
- }
- message.hidden !== undefined && (obj.hidden = message.hidden);
- message.recorder !== undefined && (obj.recorder = message.recorder);
- return obj;
- },
- create(base) {
- return ParticipantPermission.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f;
- const message = createBaseParticipantPermission();
- message.canSubscribe = (_a = object.canSubscribe) !== null && _a !== void 0 ? _a : false;
- message.canPublish = (_b = object.canPublish) !== null && _b !== void 0 ? _b : false;
- message.canPublishData = (_c = object.canPublishData) !== null && _c !== void 0 ? _c : false;
- message.canPublishSources = ((_d = object.canPublishSources) === null || _d === void 0 ? void 0 : _d.map(e => e)) || [];
- message.hidden = (_e = object.hidden) !== null && _e !== void 0 ? _e : false;
- message.recorder = (_f = object.recorder) !== null && _f !== void 0 ? _f : false;
- return message;
- }
-};
-function createBaseParticipantInfo() {
- return {
- sid: "",
- identity: "",
- state: 0,
- tracks: [],
- metadata: "",
- joinedAt: 0,
- name: "",
- version: 0,
- permission: undefined,
- region: "",
- isPublisher: false
- };
-}
-const ParticipantInfo = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.sid !== "") {
- writer.uint32(10).string(message.sid);
- }
- if (message.identity !== "") {
- writer.uint32(18).string(message.identity);
- }
- if (message.state !== 0) {
- writer.uint32(24).int32(message.state);
- }
- for (const v of message.tracks) {
- TrackInfo.encode(v, writer.uint32(34).fork()).ldelim();
- }
- if (message.metadata !== "") {
- writer.uint32(42).string(message.metadata);
- }
- if (message.joinedAt !== 0) {
- writer.uint32(48).int64(message.joinedAt);
- }
- if (message.name !== "") {
- writer.uint32(74).string(message.name);
- }
- if (message.version !== 0) {
- writer.uint32(80).uint32(message.version);
- }
- if (message.permission !== undefined) {
- ParticipantPermission.encode(message.permission, writer.uint32(90).fork()).ldelim();
- }
- if (message.region !== "") {
- writer.uint32(98).string(message.region);
- }
- if (message.isPublisher === true) {
- writer.uint32(104).bool(message.isPublisher);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseParticipantInfo();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.sid = reader.string();
- break;
- case 2:
- message.identity = reader.string();
- break;
- case 3:
- message.state = reader.int32();
- break;
- case 4:
- message.tracks.push(TrackInfo.decode(reader, reader.uint32()));
- break;
- case 5:
- message.metadata = reader.string();
- break;
- case 6:
- message.joinedAt = longToNumber$1(reader.int64());
- break;
- case 9:
- message.name = reader.string();
- break;
- case 10:
- message.version = reader.uint32();
- break;
- case 11:
- message.permission = ParticipantPermission.decode(reader, reader.uint32());
- break;
- case 12:
- message.region = reader.string();
- break;
- case 13:
- message.isPublisher = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- sid: isSet$1(object.sid) ? String(object.sid) : "",
- identity: isSet$1(object.identity) ? String(object.identity) : "",
- state: isSet$1(object.state) ? participantInfo_StateFromJSON(object.state) : 0,
- tracks: Array.isArray(object === null || object === void 0 ? void 0 : object.tracks) ? object.tracks.map(e => TrackInfo.fromJSON(e)) : [],
- metadata: isSet$1(object.metadata) ? String(object.metadata) : "",
- joinedAt: isSet$1(object.joinedAt) ? Number(object.joinedAt) : 0,
- name: isSet$1(object.name) ? String(object.name) : "",
- version: isSet$1(object.version) ? Number(object.version) : 0,
- permission: isSet$1(object.permission) ? ParticipantPermission.fromJSON(object.permission) : undefined,
- region: isSet$1(object.region) ? String(object.region) : "",
- isPublisher: isSet$1(object.isPublisher) ? Boolean(object.isPublisher) : false
- };
- },
- toJSON(message) {
- const obj = {};
- message.sid !== undefined && (obj.sid = message.sid);
- message.identity !== undefined && (obj.identity = message.identity);
- message.state !== undefined && (obj.state = participantInfo_StateToJSON(message.state));
- if (message.tracks) {
- obj.tracks = message.tracks.map(e => e ? TrackInfo.toJSON(e) : undefined);
- } else {
- obj.tracks = [];
- }
- message.metadata !== undefined && (obj.metadata = message.metadata);
- message.joinedAt !== undefined && (obj.joinedAt = Math.round(message.joinedAt));
- message.name !== undefined && (obj.name = message.name);
- message.version !== undefined && (obj.version = Math.round(message.version));
- message.permission !== undefined && (obj.permission = message.permission ? ParticipantPermission.toJSON(message.permission) : undefined);
- message.region !== undefined && (obj.region = message.region);
- message.isPublisher !== undefined && (obj.isPublisher = message.isPublisher);
- return obj;
- },
- create(base) {
- return ParticipantInfo.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
- const message = createBaseParticipantInfo();
- message.sid = (_a = object.sid) !== null && _a !== void 0 ? _a : "";
- message.identity = (_b = object.identity) !== null && _b !== void 0 ? _b : "";
- message.state = (_c = object.state) !== null && _c !== void 0 ? _c : 0;
- message.tracks = ((_d = object.tracks) === null || _d === void 0 ? void 0 : _d.map(e => TrackInfo.fromPartial(e))) || [];
- message.metadata = (_e = object.metadata) !== null && _e !== void 0 ? _e : "";
- message.joinedAt = (_f = object.joinedAt) !== null && _f !== void 0 ? _f : 0;
- message.name = (_g = object.name) !== null && _g !== void 0 ? _g : "";
- message.version = (_h = object.version) !== null && _h !== void 0 ? _h : 0;
- message.permission = object.permission !== undefined && object.permission !== null ? ParticipantPermission.fromPartial(object.permission) : undefined;
- message.region = (_j = object.region) !== null && _j !== void 0 ? _j : "";
- message.isPublisher = (_k = object.isPublisher) !== null && _k !== void 0 ? _k : false;
- return message;
- }
-};
-function createBaseSimulcastCodecInfo() {
- return {
- mimeType: "",
- mid: "",
- cid: "",
- layers: []
- };
-}
-const SimulcastCodecInfo = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.mimeType !== "") {
- writer.uint32(10).string(message.mimeType);
- }
- if (message.mid !== "") {
- writer.uint32(18).string(message.mid);
- }
- if (message.cid !== "") {
- writer.uint32(26).string(message.cid);
- }
- for (const v of message.layers) {
- VideoLayer.encode(v, writer.uint32(34).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSimulcastCodecInfo();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.mimeType = reader.string();
- break;
- case 2:
- message.mid = reader.string();
- break;
- case 3:
- message.cid = reader.string();
- break;
- case 4:
- message.layers.push(VideoLayer.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- mimeType: isSet$1(object.mimeType) ? String(object.mimeType) : "",
- mid: isSet$1(object.mid) ? String(object.mid) : "",
- cid: isSet$1(object.cid) ? String(object.cid) : "",
- layers: Array.isArray(object === null || object === void 0 ? void 0 : object.layers) ? object.layers.map(e => VideoLayer.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- message.mimeType !== undefined && (obj.mimeType = message.mimeType);
- message.mid !== undefined && (obj.mid = message.mid);
- message.cid !== undefined && (obj.cid = message.cid);
- if (message.layers) {
- obj.layers = message.layers.map(e => e ? VideoLayer.toJSON(e) : undefined);
- } else {
- obj.layers = [];
- }
- return obj;
- },
- create(base) {
- return SimulcastCodecInfo.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d;
- const message = createBaseSimulcastCodecInfo();
- message.mimeType = (_a = object.mimeType) !== null && _a !== void 0 ? _a : "";
- message.mid = (_b = object.mid) !== null && _b !== void 0 ? _b : "";
- message.cid = (_c = object.cid) !== null && _c !== void 0 ? _c : "";
- message.layers = ((_d = object.layers) === null || _d === void 0 ? void 0 : _d.map(e => VideoLayer.fromPartial(e))) || [];
- return message;
- }
-};
-function createBaseTrackInfo() {
- return {
- sid: "",
- type: 0,
- name: "",
- muted: false,
- width: 0,
- height: 0,
- simulcast: false,
- disableDtx: false,
- source: 0,
- layers: [],
- mimeType: "",
- mid: "",
- codecs: [],
- stereo: false,
- disableRed: false,
- encryption: 0
- };
-}
-const TrackInfo = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.sid !== "") {
- writer.uint32(10).string(message.sid);
- }
- if (message.type !== 0) {
- writer.uint32(16).int32(message.type);
- }
- if (message.name !== "") {
- writer.uint32(26).string(message.name);
- }
- if (message.muted === true) {
- writer.uint32(32).bool(message.muted);
- }
- if (message.width !== 0) {
- writer.uint32(40).uint32(message.width);
- }
- if (message.height !== 0) {
- writer.uint32(48).uint32(message.height);
- }
- if (message.simulcast === true) {
- writer.uint32(56).bool(message.simulcast);
- }
- if (message.disableDtx === true) {
- writer.uint32(64).bool(message.disableDtx);
- }
- if (message.source !== 0) {
- writer.uint32(72).int32(message.source);
- }
- for (const v of message.layers) {
- VideoLayer.encode(v, writer.uint32(82).fork()).ldelim();
- }
- if (message.mimeType !== "") {
- writer.uint32(90).string(message.mimeType);
- }
- if (message.mid !== "") {
- writer.uint32(98).string(message.mid);
- }
- for (const v of message.codecs) {
- SimulcastCodecInfo.encode(v, writer.uint32(106).fork()).ldelim();
- }
- if (message.stereo === true) {
- writer.uint32(112).bool(message.stereo);
- }
- if (message.disableRed === true) {
- writer.uint32(120).bool(message.disableRed);
- }
- if (message.encryption !== 0) {
- writer.uint32(128).int32(message.encryption);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseTrackInfo();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.sid = reader.string();
- break;
- case 2:
- message.type = reader.int32();
- break;
- case 3:
- message.name = reader.string();
- break;
- case 4:
- message.muted = reader.bool();
- break;
- case 5:
- message.width = reader.uint32();
- break;
- case 6:
- message.height = reader.uint32();
- break;
- case 7:
- message.simulcast = reader.bool();
- break;
- case 8:
- message.disableDtx = reader.bool();
- break;
- case 9:
- message.source = reader.int32();
- break;
- case 10:
- message.layers.push(VideoLayer.decode(reader, reader.uint32()));
- break;
- case 11:
- message.mimeType = reader.string();
- break;
- case 12:
- message.mid = reader.string();
- break;
- case 13:
- message.codecs.push(SimulcastCodecInfo.decode(reader, reader.uint32()));
- break;
- case 14:
- message.stereo = reader.bool();
- break;
- case 15:
- message.disableRed = reader.bool();
- break;
- case 16:
- message.encryption = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- sid: isSet$1(object.sid) ? String(object.sid) : "",
- type: isSet$1(object.type) ? trackTypeFromJSON(object.type) : 0,
- name: isSet$1(object.name) ? String(object.name) : "",
- muted: isSet$1(object.muted) ? Boolean(object.muted) : false,
- width: isSet$1(object.width) ? Number(object.width) : 0,
- height: isSet$1(object.height) ? Number(object.height) : 0,
- simulcast: isSet$1(object.simulcast) ? Boolean(object.simulcast) : false,
- disableDtx: isSet$1(object.disableDtx) ? Boolean(object.disableDtx) : false,
- source: isSet$1(object.source) ? trackSourceFromJSON(object.source) : 0,
- layers: Array.isArray(object === null || object === void 0 ? void 0 : object.layers) ? object.layers.map(e => VideoLayer.fromJSON(e)) : [],
- mimeType: isSet$1(object.mimeType) ? String(object.mimeType) : "",
- mid: isSet$1(object.mid) ? String(object.mid) : "",
- codecs: Array.isArray(object === null || object === void 0 ? void 0 : object.codecs) ? object.codecs.map(e => SimulcastCodecInfo.fromJSON(e)) : [],
- stereo: isSet$1(object.stereo) ? Boolean(object.stereo) : false,
- disableRed: isSet$1(object.disableRed) ? Boolean(object.disableRed) : false,
- encryption: isSet$1(object.encryption) ? encryption_TypeFromJSON(object.encryption) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.sid !== undefined && (obj.sid = message.sid);
- message.type !== undefined && (obj.type = trackTypeToJSON(message.type));
- message.name !== undefined && (obj.name = message.name);
- message.muted !== undefined && (obj.muted = message.muted);
- message.width !== undefined && (obj.width = Math.round(message.width));
- message.height !== undefined && (obj.height = Math.round(message.height));
- message.simulcast !== undefined && (obj.simulcast = message.simulcast);
- message.disableDtx !== undefined && (obj.disableDtx = message.disableDtx);
- message.source !== undefined && (obj.source = trackSourceToJSON(message.source));
- if (message.layers) {
- obj.layers = message.layers.map(e => e ? VideoLayer.toJSON(e) : undefined);
- } else {
- obj.layers = [];
- }
- message.mimeType !== undefined && (obj.mimeType = message.mimeType);
- message.mid !== undefined && (obj.mid = message.mid);
- if (message.codecs) {
- obj.codecs = message.codecs.map(e => e ? SimulcastCodecInfo.toJSON(e) : undefined);
- } else {
- obj.codecs = [];
- }
- message.stereo !== undefined && (obj.stereo = message.stereo);
- message.disableRed !== undefined && (obj.disableRed = message.disableRed);
- message.encryption !== undefined && (obj.encryption = encryption_TypeToJSON(message.encryption));
- return obj;
- },
- create(base) {
- return TrackInfo.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
- const message = createBaseTrackInfo();
- message.sid = (_a = object.sid) !== null && _a !== void 0 ? _a : "";
- message.type = (_b = object.type) !== null && _b !== void 0 ? _b : 0;
- message.name = (_c = object.name) !== null && _c !== void 0 ? _c : "";
- message.muted = (_d = object.muted) !== null && _d !== void 0 ? _d : false;
- message.width = (_e = object.width) !== null && _e !== void 0 ? _e : 0;
- message.height = (_f = object.height) !== null && _f !== void 0 ? _f : 0;
- message.simulcast = (_g = object.simulcast) !== null && _g !== void 0 ? _g : false;
- message.disableDtx = (_h = object.disableDtx) !== null && _h !== void 0 ? _h : false;
- message.source = (_j = object.source) !== null && _j !== void 0 ? _j : 0;
- message.layers = ((_k = object.layers) === null || _k === void 0 ? void 0 : _k.map(e => VideoLayer.fromPartial(e))) || [];
- message.mimeType = (_l = object.mimeType) !== null && _l !== void 0 ? _l : "";
- message.mid = (_m = object.mid) !== null && _m !== void 0 ? _m : "";
- message.codecs = ((_o = object.codecs) === null || _o === void 0 ? void 0 : _o.map(e => SimulcastCodecInfo.fromPartial(e))) || [];
- message.stereo = (_p = object.stereo) !== null && _p !== void 0 ? _p : false;
- message.disableRed = (_q = object.disableRed) !== null && _q !== void 0 ? _q : false;
- message.encryption = (_r = object.encryption) !== null && _r !== void 0 ? _r : 0;
- return message;
- }
-};
-function createBaseVideoLayer() {
- return {
- quality: 0,
- width: 0,
- height: 0,
- bitrate: 0,
- ssrc: 0
- };
-}
-const VideoLayer = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.quality !== 0) {
- writer.uint32(8).int32(message.quality);
- }
- if (message.width !== 0) {
- writer.uint32(16).uint32(message.width);
- }
- if (message.height !== 0) {
- writer.uint32(24).uint32(message.height);
- }
- if (message.bitrate !== 0) {
- writer.uint32(32).uint32(message.bitrate);
- }
- if (message.ssrc !== 0) {
- writer.uint32(40).uint32(message.ssrc);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseVideoLayer();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.quality = reader.int32();
- break;
- case 2:
- message.width = reader.uint32();
- break;
- case 3:
- message.height = reader.uint32();
- break;
- case 4:
- message.bitrate = reader.uint32();
- break;
- case 5:
- message.ssrc = reader.uint32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- quality: isSet$1(object.quality) ? videoQualityFromJSON(object.quality) : 0,
- width: isSet$1(object.width) ? Number(object.width) : 0,
- height: isSet$1(object.height) ? Number(object.height) : 0,
- bitrate: isSet$1(object.bitrate) ? Number(object.bitrate) : 0,
- ssrc: isSet$1(object.ssrc) ? Number(object.ssrc) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.quality !== undefined && (obj.quality = videoQualityToJSON(message.quality));
- message.width !== undefined && (obj.width = Math.round(message.width));
- message.height !== undefined && (obj.height = Math.round(message.height));
- message.bitrate !== undefined && (obj.bitrate = Math.round(message.bitrate));
- message.ssrc !== undefined && (obj.ssrc = Math.round(message.ssrc));
- return obj;
- },
- create(base) {
- return VideoLayer.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e;
- const message = createBaseVideoLayer();
- message.quality = (_a = object.quality) !== null && _a !== void 0 ? _a : 0;
- message.width = (_b = object.width) !== null && _b !== void 0 ? _b : 0;
- message.height = (_c = object.height) !== null && _c !== void 0 ? _c : 0;
- message.bitrate = (_d = object.bitrate) !== null && _d !== void 0 ? _d : 0;
- message.ssrc = (_e = object.ssrc) !== null && _e !== void 0 ? _e : 0;
- return message;
- }
-};
-function createBaseDataPacket() {
- return {
- kind: 0,
- value: undefined
- };
-}
-const DataPacket = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- var _a;
- if (message.kind !== 0) {
- writer.uint32(8).int32(message.kind);
- }
- switch ((_a = message.value) === null || _a === void 0 ? void 0 : _a.$case) {
- case "user":
- UserPacket.encode(message.value.user, writer.uint32(18).fork()).ldelim();
- break;
- case "speaker":
- ActiveSpeakerUpdate.encode(message.value.speaker, writer.uint32(26).fork()).ldelim();
- break;
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseDataPacket();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.kind = reader.int32();
- break;
- case 2:
- message.value = {
- $case: "user",
- user: UserPacket.decode(reader, reader.uint32())
- };
- break;
- case 3:
- message.value = {
- $case: "speaker",
- speaker: ActiveSpeakerUpdate.decode(reader, reader.uint32())
- };
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- kind: isSet$1(object.kind) ? dataPacket_KindFromJSON(object.kind) : 0,
- value: isSet$1(object.user) ? {
- $case: "user",
- user: UserPacket.fromJSON(object.user)
- } : isSet$1(object.speaker) ? {
- $case: "speaker",
- speaker: ActiveSpeakerUpdate.fromJSON(object.speaker)
- } : undefined
- };
- },
- toJSON(message) {
- var _a, _b, _c, _d, _e, _f;
- const obj = {};
- message.kind !== undefined && (obj.kind = dataPacket_KindToJSON(message.kind));
- ((_a = message.value) === null || _a === void 0 ? void 0 : _a.$case) === "user" && (obj.user = ((_b = message.value) === null || _b === void 0 ? void 0 : _b.user) ? UserPacket.toJSON((_c = message.value) === null || _c === void 0 ? void 0 : _c.user) : undefined);
- ((_d = message.value) === null || _d === void 0 ? void 0 : _d.$case) === "speaker" && (obj.speaker = ((_e = message.value) === null || _e === void 0 ? void 0 : _e.speaker) ? ActiveSpeakerUpdate.toJSON((_f = message.value) === null || _f === void 0 ? void 0 : _f.speaker) : undefined);
- return obj;
- },
- create(base) {
- return DataPacket.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f, _g;
- const message = createBaseDataPacket();
- message.kind = (_a = object.kind) !== null && _a !== void 0 ? _a : 0;
- if (((_b = object.value) === null || _b === void 0 ? void 0 : _b.$case) === "user" && ((_c = object.value) === null || _c === void 0 ? void 0 : _c.user) !== undefined && ((_d = object.value) === null || _d === void 0 ? void 0 : _d.user) !== null) {
- message.value = {
- $case: "user",
- user: UserPacket.fromPartial(object.value.user)
- };
- }
- if (((_e = object.value) === null || _e === void 0 ? void 0 : _e.$case) === "speaker" && ((_f = object.value) === null || _f === void 0 ? void 0 : _f.speaker) !== undefined && ((_g = object.value) === null || _g === void 0 ? void 0 : _g.speaker) !== null) {
- message.value = {
- $case: "speaker",
- speaker: ActiveSpeakerUpdate.fromPartial(object.value.speaker)
- };
- }
- return message;
- }
-};
-function createBaseActiveSpeakerUpdate() {
- return {
- speakers: []
- };
-}
-const ActiveSpeakerUpdate = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- for (const v of message.speakers) {
- SpeakerInfo.encode(v, writer.uint32(10).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseActiveSpeakerUpdate();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.speakers.push(SpeakerInfo.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- speakers: Array.isArray(object === null || object === void 0 ? void 0 : object.speakers) ? object.speakers.map(e => SpeakerInfo.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- if (message.speakers) {
- obj.speakers = message.speakers.map(e => e ? SpeakerInfo.toJSON(e) : undefined);
- } else {
- obj.speakers = [];
- }
- return obj;
- },
- create(base) {
- return ActiveSpeakerUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a;
- const message = createBaseActiveSpeakerUpdate();
- message.speakers = ((_a = object.speakers) === null || _a === void 0 ? void 0 : _a.map(e => SpeakerInfo.fromPartial(e))) || [];
- return message;
- }
-};
-function createBaseSpeakerInfo() {
- return {
- sid: "",
- level: 0,
- active: false
- };
-}
-const SpeakerInfo = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.sid !== "") {
- writer.uint32(10).string(message.sid);
- }
- if (message.level !== 0) {
- writer.uint32(21).float(message.level);
- }
- if (message.active === true) {
- writer.uint32(24).bool(message.active);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSpeakerInfo();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.sid = reader.string();
- break;
- case 2:
- message.level = reader.float();
- break;
- case 3:
- message.active = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- sid: isSet$1(object.sid) ? String(object.sid) : "",
- level: isSet$1(object.level) ? Number(object.level) : 0,
- active: isSet$1(object.active) ? Boolean(object.active) : false
- };
- },
- toJSON(message) {
- const obj = {};
- message.sid !== undefined && (obj.sid = message.sid);
- message.level !== undefined && (obj.level = message.level);
- message.active !== undefined && (obj.active = message.active);
- return obj;
- },
- create(base) {
- return SpeakerInfo.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c;
- const message = createBaseSpeakerInfo();
- message.sid = (_a = object.sid) !== null && _a !== void 0 ? _a : "";
- message.level = (_b = object.level) !== null && _b !== void 0 ? _b : 0;
- message.active = (_c = object.active) !== null && _c !== void 0 ? _c : false;
- return message;
- }
-};
-function createBaseUserPacket() {
- return {
- participantSid: "",
- payload: new Uint8Array(),
- destinationSids: [],
- topic: undefined
- };
-}
-const UserPacket = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.participantSid !== "") {
- writer.uint32(10).string(message.participantSid);
- }
- if (message.payload.length !== 0) {
- writer.uint32(18).bytes(message.payload);
- }
- for (const v of message.destinationSids) {
- writer.uint32(26).string(v);
- }
- if (message.topic !== undefined) {
- writer.uint32(34).string(message.topic);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseUserPacket();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.participantSid = reader.string();
- break;
- case 2:
- message.payload = reader.bytes();
- break;
- case 3:
- message.destinationSids.push(reader.string());
- break;
- case 4:
- message.topic = reader.string();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- participantSid: isSet$1(object.participantSid) ? String(object.participantSid) : "",
- payload: isSet$1(object.payload) ? bytesFromBase64(object.payload) : new Uint8Array(),
- destinationSids: Array.isArray(object === null || object === void 0 ? void 0 : object.destinationSids) ? object.destinationSids.map(e => String(e)) : [],
- topic: isSet$1(object.topic) ? String(object.topic) : undefined
- };
- },
- toJSON(message) {
- const obj = {};
- message.participantSid !== undefined && (obj.participantSid = message.participantSid);
- message.payload !== undefined && (obj.payload = base64FromBytes(message.payload !== undefined ? message.payload : new Uint8Array()));
- if (message.destinationSids) {
- obj.destinationSids = message.destinationSids.map(e => e);
- } else {
- obj.destinationSids = [];
- }
- message.topic !== undefined && (obj.topic = message.topic);
- return obj;
- },
- create(base) {
- return UserPacket.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d;
- const message = createBaseUserPacket();
- message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
- message.payload = (_b = object.payload) !== null && _b !== void 0 ? _b : new Uint8Array();
- message.destinationSids = ((_c = object.destinationSids) === null || _c === void 0 ? void 0 : _c.map(e => e)) || [];
- message.topic = (_d = object.topic) !== null && _d !== void 0 ? _d : undefined;
- return message;
- }
-};
-function createBaseParticipantTracks() {
- return {
- participantSid: "",
- trackSids: []
- };
-}
-const ParticipantTracks = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.participantSid !== "") {
- writer.uint32(10).string(message.participantSid);
- }
- for (const v of message.trackSids) {
- writer.uint32(18).string(v);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseParticipantTracks();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.participantSid = reader.string();
- break;
- case 2:
- message.trackSids.push(reader.string());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- participantSid: isSet$1(object.participantSid) ? String(object.participantSid) : "",
- trackSids: Array.isArray(object === null || object === void 0 ? void 0 : object.trackSids) ? object.trackSids.map(e => String(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- message.participantSid !== undefined && (obj.participantSid = message.participantSid);
- if (message.trackSids) {
- obj.trackSids = message.trackSids.map(e => e);
- } else {
- obj.trackSids = [];
- }
- return obj;
- },
- create(base) {
- return ParticipantTracks.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseParticipantTracks();
- message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
- message.trackSids = ((_b = object.trackSids) === null || _b === void 0 ? void 0 : _b.map(e => e)) || [];
- return message;
- }
-};
-function createBaseServerInfo() {
- return {
- edition: 0,
- version: "",
- protocol: 0,
- region: "",
- nodeId: "",
- debugInfo: ""
- };
-}
-const ServerInfo = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.edition !== 0) {
- writer.uint32(8).int32(message.edition);
- }
- if (message.version !== "") {
- writer.uint32(18).string(message.version);
- }
- if (message.protocol !== 0) {
- writer.uint32(24).int32(message.protocol);
- }
- if (message.region !== "") {
- writer.uint32(34).string(message.region);
- }
- if (message.nodeId !== "") {
- writer.uint32(42).string(message.nodeId);
- }
- if (message.debugInfo !== "") {
- writer.uint32(50).string(message.debugInfo);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseServerInfo();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.edition = reader.int32();
- break;
- case 2:
- message.version = reader.string();
- break;
- case 3:
- message.protocol = reader.int32();
- break;
- case 4:
- message.region = reader.string();
- break;
- case 5:
- message.nodeId = reader.string();
- break;
- case 6:
- message.debugInfo = reader.string();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- edition: isSet$1(object.edition) ? serverInfo_EditionFromJSON(object.edition) : 0,
- version: isSet$1(object.version) ? String(object.version) : "",
- protocol: isSet$1(object.protocol) ? Number(object.protocol) : 0,
- region: isSet$1(object.region) ? String(object.region) : "",
- nodeId: isSet$1(object.nodeId) ? String(object.nodeId) : "",
- debugInfo: isSet$1(object.debugInfo) ? String(object.debugInfo) : ""
- };
- },
- toJSON(message) {
- const obj = {};
- message.edition !== undefined && (obj.edition = serverInfo_EditionToJSON(message.edition));
- message.version !== undefined && (obj.version = message.version);
- message.protocol !== undefined && (obj.protocol = Math.round(message.protocol));
- message.region !== undefined && (obj.region = message.region);
- message.nodeId !== undefined && (obj.nodeId = message.nodeId);
- message.debugInfo !== undefined && (obj.debugInfo = message.debugInfo);
- return obj;
- },
- create(base) {
- return ServerInfo.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f;
- const message = createBaseServerInfo();
- message.edition = (_a = object.edition) !== null && _a !== void 0 ? _a : 0;
- message.version = (_b = object.version) !== null && _b !== void 0 ? _b : "";
- message.protocol = (_c = object.protocol) !== null && _c !== void 0 ? _c : 0;
- message.region = (_d = object.region) !== null && _d !== void 0 ? _d : "";
- message.nodeId = (_e = object.nodeId) !== null && _e !== void 0 ? _e : "";
- message.debugInfo = (_f = object.debugInfo) !== null && _f !== void 0 ? _f : "";
- return message;
- }
-};
-function createBaseClientInfo() {
- return {
- sdk: 0,
- version: "",
- protocol: 0,
- os: "",
- osVersion: "",
- deviceModel: "",
- browser: "",
- browserVersion: "",
- address: "",
- network: ""
- };
-}
-const ClientInfo = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.sdk !== 0) {
- writer.uint32(8).int32(message.sdk);
- }
- if (message.version !== "") {
- writer.uint32(18).string(message.version);
- }
- if (message.protocol !== 0) {
- writer.uint32(24).int32(message.protocol);
- }
- if (message.os !== "") {
- writer.uint32(34).string(message.os);
- }
- if (message.osVersion !== "") {
- writer.uint32(42).string(message.osVersion);
- }
- if (message.deviceModel !== "") {
- writer.uint32(50).string(message.deviceModel);
- }
- if (message.browser !== "") {
- writer.uint32(58).string(message.browser);
- }
- if (message.browserVersion !== "") {
- writer.uint32(66).string(message.browserVersion);
- }
- if (message.address !== "") {
- writer.uint32(74).string(message.address);
- }
- if (message.network !== "") {
- writer.uint32(82).string(message.network);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseClientInfo();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.sdk = reader.int32();
- break;
- case 2:
- message.version = reader.string();
- break;
- case 3:
- message.protocol = reader.int32();
- break;
- case 4:
- message.os = reader.string();
- break;
- case 5:
- message.osVersion = reader.string();
- break;
- case 6:
- message.deviceModel = reader.string();
- break;
- case 7:
- message.browser = reader.string();
- break;
- case 8:
- message.browserVersion = reader.string();
- break;
- case 9:
- message.address = reader.string();
- break;
- case 10:
- message.network = reader.string();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- sdk: isSet$1(object.sdk) ? clientInfo_SDKFromJSON(object.sdk) : 0,
- version: isSet$1(object.version) ? String(object.version) : "",
- protocol: isSet$1(object.protocol) ? Number(object.protocol) : 0,
- os: isSet$1(object.os) ? String(object.os) : "",
- osVersion: isSet$1(object.osVersion) ? String(object.osVersion) : "",
- deviceModel: isSet$1(object.deviceModel) ? String(object.deviceModel) : "",
- browser: isSet$1(object.browser) ? String(object.browser) : "",
- browserVersion: isSet$1(object.browserVersion) ? String(object.browserVersion) : "",
- address: isSet$1(object.address) ? String(object.address) : "",
- network: isSet$1(object.network) ? String(object.network) : ""
- };
- },
- toJSON(message) {
- const obj = {};
- message.sdk !== undefined && (obj.sdk = clientInfo_SDKToJSON(message.sdk));
- message.version !== undefined && (obj.version = message.version);
- message.protocol !== undefined && (obj.protocol = Math.round(message.protocol));
- message.os !== undefined && (obj.os = message.os);
- message.osVersion !== undefined && (obj.osVersion = message.osVersion);
- message.deviceModel !== undefined && (obj.deviceModel = message.deviceModel);
- message.browser !== undefined && (obj.browser = message.browser);
- message.browserVersion !== undefined && (obj.browserVersion = message.browserVersion);
- message.address !== undefined && (obj.address = message.address);
- message.network !== undefined && (obj.network = message.network);
- return obj;
- },
- create(base) {
- return ClientInfo.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
- const message = createBaseClientInfo();
- message.sdk = (_a = object.sdk) !== null && _a !== void 0 ? _a : 0;
- message.version = (_b = object.version) !== null && _b !== void 0 ? _b : "";
- message.protocol = (_c = object.protocol) !== null && _c !== void 0 ? _c : 0;
- message.os = (_d = object.os) !== null && _d !== void 0 ? _d : "";
- message.osVersion = (_e = object.osVersion) !== null && _e !== void 0 ? _e : "";
- message.deviceModel = (_f = object.deviceModel) !== null && _f !== void 0 ? _f : "";
- message.browser = (_g = object.browser) !== null && _g !== void 0 ? _g : "";
- message.browserVersion = (_h = object.browserVersion) !== null && _h !== void 0 ? _h : "";
- message.address = (_j = object.address) !== null && _j !== void 0 ? _j : "";
- message.network = (_k = object.network) !== null && _k !== void 0 ? _k : "";
- return message;
- }
-};
-function createBaseClientConfiguration() {
- return {
- video: undefined,
- screen: undefined,
- resumeConnection: 0,
- disabledCodecs: undefined,
- forceRelay: 0
- };
-}
-const ClientConfiguration = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.video !== undefined) {
- VideoConfiguration.encode(message.video, writer.uint32(10).fork()).ldelim();
- }
- if (message.screen !== undefined) {
- VideoConfiguration.encode(message.screen, writer.uint32(18).fork()).ldelim();
- }
- if (message.resumeConnection !== 0) {
- writer.uint32(24).int32(message.resumeConnection);
- }
- if (message.disabledCodecs !== undefined) {
- DisabledCodecs.encode(message.disabledCodecs, writer.uint32(34).fork()).ldelim();
- }
- if (message.forceRelay !== 0) {
- writer.uint32(40).int32(message.forceRelay);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseClientConfiguration();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.video = VideoConfiguration.decode(reader, reader.uint32());
- break;
- case 2:
- message.screen = VideoConfiguration.decode(reader, reader.uint32());
- break;
- case 3:
- message.resumeConnection = reader.int32();
- break;
- case 4:
- message.disabledCodecs = DisabledCodecs.decode(reader, reader.uint32());
- break;
- case 5:
- message.forceRelay = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- video: isSet$1(object.video) ? VideoConfiguration.fromJSON(object.video) : undefined,
- screen: isSet$1(object.screen) ? VideoConfiguration.fromJSON(object.screen) : undefined,
- resumeConnection: isSet$1(object.resumeConnection) ? clientConfigSettingFromJSON(object.resumeConnection) : 0,
- disabledCodecs: isSet$1(object.disabledCodecs) ? DisabledCodecs.fromJSON(object.disabledCodecs) : undefined,
- forceRelay: isSet$1(object.forceRelay) ? clientConfigSettingFromJSON(object.forceRelay) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.video !== undefined && (obj.video = message.video ? VideoConfiguration.toJSON(message.video) : undefined);
- message.screen !== undefined && (obj.screen = message.screen ? VideoConfiguration.toJSON(message.screen) : undefined);
- message.resumeConnection !== undefined && (obj.resumeConnection = clientConfigSettingToJSON(message.resumeConnection));
- message.disabledCodecs !== undefined && (obj.disabledCodecs = message.disabledCodecs ? DisabledCodecs.toJSON(message.disabledCodecs) : undefined);
- message.forceRelay !== undefined && (obj.forceRelay = clientConfigSettingToJSON(message.forceRelay));
- return obj;
- },
- create(base) {
- return ClientConfiguration.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseClientConfiguration();
- message.video = object.video !== undefined && object.video !== null ? VideoConfiguration.fromPartial(object.video) : undefined;
- message.screen = object.screen !== undefined && object.screen !== null ? VideoConfiguration.fromPartial(object.screen) : undefined;
- message.resumeConnection = (_a = object.resumeConnection) !== null && _a !== void 0 ? _a : 0;
- message.disabledCodecs = object.disabledCodecs !== undefined && object.disabledCodecs !== null ? DisabledCodecs.fromPartial(object.disabledCodecs) : undefined;
- message.forceRelay = (_b = object.forceRelay) !== null && _b !== void 0 ? _b : 0;
- return message;
- }
-};
-function createBaseVideoConfiguration() {
- return {
- hardwareEncoder: 0
- };
-}
-const VideoConfiguration = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.hardwareEncoder !== 0) {
- writer.uint32(8).int32(message.hardwareEncoder);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseVideoConfiguration();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.hardwareEncoder = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- hardwareEncoder: isSet$1(object.hardwareEncoder) ? clientConfigSettingFromJSON(object.hardwareEncoder) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.hardwareEncoder !== undefined && (obj.hardwareEncoder = clientConfigSettingToJSON(message.hardwareEncoder));
- return obj;
- },
- create(base) {
- return VideoConfiguration.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a;
- const message = createBaseVideoConfiguration();
- message.hardwareEncoder = (_a = object.hardwareEncoder) !== null && _a !== void 0 ? _a : 0;
- return message;
- }
-};
-function createBaseDisabledCodecs() {
- return {
- codecs: []
- };
-}
-const DisabledCodecs = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- for (const v of message.codecs) {
- Codec.encode(v, writer.uint32(10).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseDisabledCodecs();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.codecs.push(Codec.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- codecs: Array.isArray(object === null || object === void 0 ? void 0 : object.codecs) ? object.codecs.map(e => Codec.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- if (message.codecs) {
- obj.codecs = message.codecs.map(e => e ? Codec.toJSON(e) : undefined);
- } else {
- obj.codecs = [];
- }
- return obj;
- },
- create(base) {
- return DisabledCodecs.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a;
- const message = createBaseDisabledCodecs();
- message.codecs = ((_a = object.codecs) === null || _a === void 0 ? void 0 : _a.map(e => Codec.fromPartial(e))) || [];
- return message;
- }
-};
-var tsProtoGlobalThis$1 = (() => {
- if (typeof globalThis !== "undefined") {
- return globalThis;
- }
- if (typeof self !== "undefined") {
- return self;
- }
- if (typeof window !== "undefined") {
- return window;
- }
- if (typeof global !== "undefined") {
- return global;
- }
- throw "Unable to locate global object";
-})();
-function bytesFromBase64(b64) {
- if (tsProtoGlobalThis$1.Buffer) {
- return Uint8Array.from(tsProtoGlobalThis$1.Buffer.from(b64, "base64"));
- } else {
- const bin = tsProtoGlobalThis$1.atob(b64);
- const arr = new Uint8Array(bin.length);
- for (let i = 0; i < bin.length; ++i) {
- arr[i] = bin.charCodeAt(i);
- }
- return arr;
- }
-}
-function base64FromBytes(arr) {
- if (tsProtoGlobalThis$1.Buffer) {
- return tsProtoGlobalThis$1.Buffer.from(arr).toString("base64");
- } else {
- const bin = [];
- arr.forEach(byte => {
- bin.push(String.fromCharCode(byte));
- });
- return tsProtoGlobalThis$1.btoa(bin.join(""));
- }
-}
-function longToNumber$1(long) {
- if (long.gt(Number.MAX_SAFE_INTEGER)) {
- throw new tsProtoGlobalThis$1.Error("Value is larger than Number.MAX_SAFE_INTEGER");
- }
- return long.toNumber();
-}
-if (_m0.util.Long !== Long) {
- _m0.util.Long = Long;
- _m0.configure();
-}
-function isSet$1(value) {
- return value !== null && value !== undefined;
-}
-
-const maxRetryDelay = 7000;
-const DEFAULT_RETRY_DELAYS_IN_MS = [0, 300, 2 * 2 * 300, 3 * 3 * 300, 4 * 4 * 300, maxRetryDelay, maxRetryDelay, maxRetryDelay, maxRetryDelay, maxRetryDelay];
-class DefaultReconnectPolicy {
- constructor(retryDelays) {
- this._retryDelays = retryDelays !== undefined ? [...retryDelays] : DEFAULT_RETRY_DELAYS_IN_MS;
- }
- nextRetryDelayInMs(context) {
- if (context.retryCount >= this._retryDelays.length) return null;
- const retryDelay = this._retryDelays[context.retryCount];
- if (context.retryCount <= 1) return retryDelay;
- return retryDelay + Math.random() * 1000;
- }
-}
-
-function _asyncIterator(iterable) {
- var method,
- async,
- sync,
- retry = 2;
- for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) {
- if (async && null != (method = iterable[async])) return method.call(iterable);
- if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable));
- async = "@@asyncIterator", sync = "@@iterator";
- }
- throw new TypeError("Object is not async iterable");
-}
-function AsyncFromSyncIterator(s) {
- function AsyncFromSyncIteratorContinuation(r) {
- if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object."));
- var done = r.done;
- return Promise.resolve(r.value).then(function (value) {
- return {
- value: value,
- done: done
- };
- });
- }
- return AsyncFromSyncIterator = function (s) {
- this.s = s, this.n = s.next;
- }, AsyncFromSyncIterator.prototype = {
- s: null,
- n: null,
- next: function () {
- return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
- },
- return: function (value) {
- var ret = this.s.return;
- return void 0 === ret ? Promise.resolve({
- value: value,
- done: !0
- }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments));
- },
- throw: function (value) {
- var thr = this.s.return;
- return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments));
- }
- }, new AsyncFromSyncIterator(s);
-}
-function ownKeys(object, enumerableOnly) {
- var keys = Object.keys(object);
- if (Object.getOwnPropertySymbols) {
- var symbols = Object.getOwnPropertySymbols(object);
- enumerableOnly && (symbols = symbols.filter(function (sym) {
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
- })), keys.push.apply(keys, symbols);
- }
- return keys;
-}
-function _objectSpread2(target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = null != arguments[i] ? arguments[i] : {};
- i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
- _defineProperty(target, key, source[key]);
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
- });
- }
- return target;
-}
-function _defineProperty(obj, key, value) {
- key = _toPropertyKey(key);
- if (key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
- }
- return obj;
-}
-function _toPrimitive(input, hint) {
- if (typeof input !== "object" || input === null) return input;
- var prim = input[Symbol.toPrimitive];
- if (prim !== undefined) {
- var res = prim.call(input, hint || "default");
- if (typeof res !== "object") return res;
- throw new TypeError("@@toPrimitive must return a primitive value.");
- }
- return (hint === "string" ? String : Number)(input);
-}
-function _toPropertyKey(arg) {
- var key = _toPrimitive(arg, "string");
- return typeof key === "symbol" ? key : String(key);
-}
-
-/*
- * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
-
-let logDisabled_ = true;
-let deprecationWarnings_ = true;
-
-/**
- * Extract browser version out of the provided user agent string.
- *
- * @param {!string} uastring userAgent string.
- * @param {!string} expr Regular expression used as match criteria.
- * @param {!number} pos position in the version string to be returned.
- * @return {!number} browser version.
- */
-function extractVersion(uastring, expr, pos) {
- const match = uastring.match(expr);
- return match && match.length >= pos && parseInt(match[pos], 10);
-}
-
-// Wraps the peerconnection event eventNameToWrap in a function
-// which returns the modified event object (or false to prevent
-// the event).
-function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {
- if (!window.RTCPeerConnection) {
- return;
- }
- const proto = window.RTCPeerConnection.prototype;
- const nativeAddEventListener = proto.addEventListener;
- proto.addEventListener = function (nativeEventName, cb) {
- if (nativeEventName !== eventNameToWrap) {
- return nativeAddEventListener.apply(this, arguments);
- }
- const wrappedCallback = e => {
- const modifiedEvent = wrapper(e);
- if (modifiedEvent) {
- if (cb.handleEvent) {
- cb.handleEvent(modifiedEvent);
- } else {
- cb(modifiedEvent);
- }
- }
- };
- this._eventMap = this._eventMap || {};
- if (!this._eventMap[eventNameToWrap]) {
- this._eventMap[eventNameToWrap] = new Map();
- }
- this._eventMap[eventNameToWrap].set(cb, wrappedCallback);
- return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]);
- };
- const nativeRemoveEventListener = proto.removeEventListener;
- proto.removeEventListener = function (nativeEventName, cb) {
- if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) {
- return nativeRemoveEventListener.apply(this, arguments);
- }
- if (!this._eventMap[eventNameToWrap].has(cb)) {
- return nativeRemoveEventListener.apply(this, arguments);
- }
- const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);
- this._eventMap[eventNameToWrap].delete(cb);
- if (this._eventMap[eventNameToWrap].size === 0) {
- delete this._eventMap[eventNameToWrap];
- }
- if (Object.keys(this._eventMap).length === 0) {
- delete this._eventMap;
- }
- return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]);
- };
- Object.defineProperty(proto, 'on' + eventNameToWrap, {
- get() {
- return this['_on' + eventNameToWrap];
- },
- set(cb) {
- if (this['_on' + eventNameToWrap]) {
- this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]);
- delete this['_on' + eventNameToWrap];
- }
- if (cb) {
- this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb);
- }
- },
- enumerable: true,
- configurable: true
- });
-}
-function disableLog(bool) {
- if (typeof bool !== 'boolean') {
- return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');
- }
- logDisabled_ = bool;
- return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled';
-}
-
-/**
- * Disable or enable deprecation warnings
- * @param {!boolean} bool set to true to disable warnings.
- */
-function disableWarnings(bool) {
- if (typeof bool !== 'boolean') {
- return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');
- }
- deprecationWarnings_ = !bool;
- return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');
-}
-function log() {
- if (typeof window === 'object') {
- if (logDisabled_) {
- return;
- }
- if (typeof console !== 'undefined' && typeof console.log === 'function') {
- console.log.apply(console, arguments);
- }
- }
-}
-
-/**
- * Shows a deprecation warning suggesting the modern and spec-compatible API.
- */
-function deprecated(oldMethod, newMethod) {
- if (!deprecationWarnings_) {
- return;
- }
- console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.');
-}
-
-/**
- * Browser detector.
- *
- * @return {object} result containing browser and version
- * properties.
- */
-function detectBrowser(window) {
- // Returned result object.
- const result = {
- browser: null,
- version: null
- };
-
- // Fail early if it's not a browser
- if (typeof window === 'undefined' || !window.navigator) {
- result.browser = 'Not a browser.';
- return result;
- }
- const {
- navigator
- } = window;
- if (navigator.mozGetUserMedia) {
- // Firefox.
- result.browser = 'firefox';
- result.version = extractVersion(navigator.userAgent, /Firefox\/(\d+)\./, 1);
- } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection && !window.RTCIceGatherer) {
- // Chrome, Chromium, Webview, Opera.
- // Version matches Chrome/WebRTC version.
- // Chrome 74 removed webkitGetUserMedia on http as well so we need the
- // more complicated fallback to webkitRTCPeerConnection.
- result.browser = 'chrome';
- result.version = extractVersion(navigator.userAgent, /Chrom(e|ium)\/(\d+)\./, 2);
- } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) {
- // Safari.
- result.browser = 'safari';
- result.version = extractVersion(navigator.userAgent, /AppleWebKit\/(\d+)\./, 1);
- result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype;
- } else {
- // Default fallthrough: not supported.
- result.browser = 'Not a supported browser.';
- return result;
- }
- return result;
-}
-
-/**
- * Checks if something is an object.
- *
- * @param {*} val The something you want to check.
- * @return true if val is an object, false otherwise.
- */
-function isObject(val) {
- return Object.prototype.toString.call(val) === '[object Object]';
-}
-
-/**
- * Remove all empty objects and undefined values
- * from a nested object -- an enhanced and vanilla version
- * of Lodash's `compact`.
- */
-function compactObject(data) {
- if (!isObject(data)) {
- return data;
- }
- return Object.keys(data).reduce(function (accumulator, key) {
- const isObj = isObject(data[key]);
- const value = isObj ? compactObject(data[key]) : data[key];
- const isEmptyObject = isObj && !Object.keys(value).length;
- if (value === undefined || isEmptyObject) {
- return accumulator;
- }
- return Object.assign(accumulator, {
- [key]: value
- });
- }, {});
-}
-
-/* iterates the stats graph recursively. */
-function walkStats(stats, base, resultSet) {
- if (!base || resultSet.has(base.id)) {
- return;
- }
- resultSet.set(base.id, base);
- Object.keys(base).forEach(name => {
- if (name.endsWith('Id')) {
- walkStats(stats, stats.get(base[name]), resultSet);
- } else if (name.endsWith('Ids')) {
- base[name].forEach(id => {
- walkStats(stats, stats.get(id), resultSet);
- });
- }
- });
-}
-
-/* filter getStats for a sender/receiver track. */
-function filterStats(result, track, outbound) {
- const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';
- const filteredResult = new Map();
- if (track === null) {
- return filteredResult;
- }
- const trackStats = [];
- result.forEach(value => {
- if (value.type === 'track' && value.trackIdentifier === track.id) {
- trackStats.push(value);
- }
- });
- trackStats.forEach(trackStat => {
- result.forEach(stats => {
- if (stats.type === streamStatsType && stats.trackId === trackStat.id) {
- walkStats(result, stats, filteredResult);
- }
- });
- });
- return filteredResult;
-}
-
-/*
- * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
-const logging = log;
-function shimGetUserMedia$2(window, browserDetails) {
- const navigator = window && window.navigator;
- if (!navigator.mediaDevices) {
- return;
- }
- const constraintsToChrome_ = function (c) {
- if (typeof c !== 'object' || c.mandatory || c.optional) {
- return c;
- }
- const cc = {};
- Object.keys(c).forEach(key => {
- if (key === 'require' || key === 'advanced' || key === 'mediaSource') {
- return;
- }
- const r = typeof c[key] === 'object' ? c[key] : {
- ideal: c[key]
- };
- if (r.exact !== undefined && typeof r.exact === 'number') {
- r.min = r.max = r.exact;
- }
- const oldname_ = function (prefix, name) {
- if (prefix) {
- return prefix + name.charAt(0).toUpperCase() + name.slice(1);
- }
- return name === 'deviceId' ? 'sourceId' : name;
- };
- if (r.ideal !== undefined) {
- cc.optional = cc.optional || [];
- let oc = {};
- if (typeof r.ideal === 'number') {
- oc[oldname_('min', key)] = r.ideal;
- cc.optional.push(oc);
- oc = {};
- oc[oldname_('max', key)] = r.ideal;
- cc.optional.push(oc);
- } else {
- oc[oldname_('', key)] = r.ideal;
- cc.optional.push(oc);
- }
- }
- if (r.exact !== undefined && typeof r.exact !== 'number') {
- cc.mandatory = cc.mandatory || {};
- cc.mandatory[oldname_('', key)] = r.exact;
- } else {
- ['min', 'max'].forEach(mix => {
- if (r[mix] !== undefined) {
- cc.mandatory = cc.mandatory || {};
- cc.mandatory[oldname_(mix, key)] = r[mix];
- }
- });
- }
- });
- if (c.advanced) {
- cc.optional = (cc.optional || []).concat(c.advanced);
- }
- return cc;
- };
- const shimConstraints_ = function (constraints, func) {
- if (browserDetails.version >= 61) {
- return func(constraints);
- }
- constraints = JSON.parse(JSON.stringify(constraints));
- if (constraints && typeof constraints.audio === 'object') {
- const remap = function (obj, a, b) {
- if (a in obj && !(b in obj)) {
- obj[b] = obj[a];
- delete obj[a];
- }
- };
- constraints = JSON.parse(JSON.stringify(constraints));
- remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');
- remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');
- constraints.audio = constraintsToChrome_(constraints.audio);
- }
- if (constraints && typeof constraints.video === 'object') {
- // Shim facingMode for mobile & surface pro.
- let face = constraints.video.facingMode;
- face = face && (typeof face === 'object' ? face : {
- ideal: face
- });
- const getSupportedFacingModeLies = browserDetails.version < 66;
- if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {
- delete constraints.video.facingMode;
- let matches;
- if (face.exact === 'environment' || face.ideal === 'environment') {
- matches = ['back', 'rear'];
- } else if (face.exact === 'user' || face.ideal === 'user') {
- matches = ['front'];
- }
- if (matches) {
- // Look for matches in label, or use last cam for back (typical).
- return navigator.mediaDevices.enumerateDevices().then(devices => {
- devices = devices.filter(d => d.kind === 'videoinput');
- let dev = devices.find(d => matches.some(match => d.label.toLowerCase().includes(match)));
- if (!dev && devices.length && matches.includes('back')) {
- dev = devices[devices.length - 1]; // more likely the back cam
- }
-
- if (dev) {
- constraints.video.deviceId = face.exact ? {
- exact: dev.deviceId
- } : {
- ideal: dev.deviceId
- };
- }
- constraints.video = constraintsToChrome_(constraints.video);
- logging('chrome: ' + JSON.stringify(constraints));
- return func(constraints);
- });
- }
- }
- constraints.video = constraintsToChrome_(constraints.video);
- }
- logging('chrome: ' + JSON.stringify(constraints));
- return func(constraints);
- };
- const shimError_ = function (e) {
- if (browserDetails.version >= 64) {
- return e;
- }
- return {
- name: {
- PermissionDeniedError: 'NotAllowedError',
- PermissionDismissedError: 'NotAllowedError',
- InvalidStateError: 'NotAllowedError',
- DevicesNotFoundError: 'NotFoundError',
- ConstraintNotSatisfiedError: 'OverconstrainedError',
- TrackStartError: 'NotReadableError',
- MediaDeviceFailedDueToShutdown: 'NotAllowedError',
- MediaDeviceKillSwitchOn: 'NotAllowedError',
- TabCaptureError: 'AbortError',
- ScreenCaptureError: 'AbortError',
- DeviceCaptureError: 'AbortError'
- }[e.name] || e.name,
- message: e.message,
- constraint: e.constraint || e.constraintName,
- toString() {
- return this.name + (this.message && ': ') + this.message;
- }
- };
- };
- const getUserMedia_ = function (constraints, onSuccess, onError) {
- shimConstraints_(constraints, c => {
- navigator.webkitGetUserMedia(c, onSuccess, e => {
- if (onError) {
- onError(shimError_(e));
- }
- });
- });
- };
- navigator.getUserMedia = getUserMedia_.bind(navigator);
-
- // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia
- // function which returns a Promise, it does not accept spec-style
- // constraints.
- if (navigator.mediaDevices.getUserMedia) {
- const origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
- navigator.mediaDevices.getUserMedia = function (cs) {
- return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {
- if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {
- stream.getTracks().forEach(track => {
- track.stop();
- });
- throw new DOMException('', 'NotFoundError');
- }
- return stream;
- }, e => Promise.reject(shimError_(e))));
- };
- }
-}
-
-/*
- * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
-
-function shimGetDisplayMedia$1(window, getSourceId) {
- if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {
- return;
- }
- if (!window.navigator.mediaDevices) {
- return;
- }
- // getSourceId is a function that returns a promise resolving with
- // the sourceId of the screen/window/tab to be shared.
- if (typeof getSourceId !== 'function') {
- console.error('shimGetDisplayMedia: getSourceId argument is not ' + 'a function');
- return;
- }
- window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {
- return getSourceId(constraints).then(sourceId => {
- const widthSpecified = constraints.video && constraints.video.width;
- const heightSpecified = constraints.video && constraints.video.height;
- const frameRateSpecified = constraints.video && constraints.video.frameRate;
- constraints.video = {
- mandatory: {
- chromeMediaSource: 'desktop',
- chromeMediaSourceId: sourceId,
- maxFrameRate: frameRateSpecified || 3
- }
- };
- if (widthSpecified) {
- constraints.video.mandatory.maxWidth = widthSpecified;
- }
- if (heightSpecified) {
- constraints.video.mandatory.maxHeight = heightSpecified;
- }
- return window.navigator.mediaDevices.getUserMedia(constraints);
- });
- };
-}
-
-/*
- * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
-function shimMediaStream(window) {
- window.MediaStream = window.MediaStream || window.webkitMediaStream;
-}
-function shimOnTrack$1(window) {
- if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) {
- Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {
- get() {
- return this._ontrack;
- },
- set(f) {
- if (this._ontrack) {
- this.removeEventListener('track', this._ontrack);
- }
- this.addEventListener('track', this._ontrack = f);
- },
- enumerable: true,
- configurable: true
- });
- const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;
- window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {
- if (!this._ontrackpoly) {
- this._ontrackpoly = e => {
- // onaddstream does not fire when a track is added to an existing
- // stream. But stream.onaddtrack is implemented so we use that.
- e.stream.addEventListener('addtrack', te => {
- let receiver;
- if (window.RTCPeerConnection.prototype.getReceivers) {
- receiver = this.getReceivers().find(r => r.track && r.track.id === te.track.id);
- } else {
- receiver = {
- track: te.track
- };
- }
- const event = new Event('track');
- event.track = te.track;
- event.receiver = receiver;
- event.transceiver = {
- receiver
- };
- event.streams = [e.stream];
- this.dispatchEvent(event);
- });
- e.stream.getTracks().forEach(track => {
- let receiver;
- if (window.RTCPeerConnection.prototype.getReceivers) {
- receiver = this.getReceivers().find(r => r.track && r.track.id === track.id);
- } else {
- receiver = {
- track
- };
- }
- const event = new Event('track');
- event.track = track;
- event.receiver = receiver;
- event.transceiver = {
- receiver
- };
- event.streams = [e.stream];
- this.dispatchEvent(event);
- });
- };
- this.addEventListener('addstream', this._ontrackpoly);
- }
- return origSetRemoteDescription.apply(this, arguments);
- };
- } else {
- // even if RTCRtpTransceiver is in window, it is only used and
- // emitted in unified-plan. Unfortunately this means we need
- // to unconditionally wrap the event.
- wrapPeerConnectionEvent(window, 'track', e => {
- if (!e.transceiver) {
- Object.defineProperty(e, 'transceiver', {
- value: {
- receiver: e.receiver
- }
- });
- }
- return e;
- });
- }
-}
-function shimGetSendersWithDtmf(window) {
- // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.
- if (typeof window === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) {
- const shimSenderWithDtmf = function (pc, track) {
- return {
- track,
- get dtmf() {
- if (this._dtmf === undefined) {
- if (track.kind === 'audio') {
- this._dtmf = pc.createDTMFSender(track);
- } else {
- this._dtmf = null;
- }
- }
- return this._dtmf;
- },
- _pc: pc
- };
- };
-
- // augment addTrack when getSenders is not available.
- if (!window.RTCPeerConnection.prototype.getSenders) {
- window.RTCPeerConnection.prototype.getSenders = function getSenders() {
- this._senders = this._senders || [];
- return this._senders.slice(); // return a copy of the internal state.
- };
-
- const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
- window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {
- let sender = origAddTrack.apply(this, arguments);
- if (!sender) {
- sender = shimSenderWithDtmf(this, track);
- this._senders.push(sender);
- }
- return sender;
- };
- const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;
- window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {
- origRemoveTrack.apply(this, arguments);
- const idx = this._senders.indexOf(sender);
- if (idx !== -1) {
- this._senders.splice(idx, 1);
- }
- };
- }
- const origAddStream = window.RTCPeerConnection.prototype.addStream;
- window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
- this._senders = this._senders || [];
- origAddStream.apply(this, [stream]);
- stream.getTracks().forEach(track => {
- this._senders.push(shimSenderWithDtmf(this, track));
- });
- };
- const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;
- window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {
- this._senders = this._senders || [];
- origRemoveStream.apply(this, [stream]);
- stream.getTracks().forEach(track => {
- const sender = this._senders.find(s => s.track === track);
- if (sender) {
- // remove sender
- this._senders.splice(this._senders.indexOf(sender), 1);
- }
- });
- };
- } else if (typeof window === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {
- const origGetSenders = window.RTCPeerConnection.prototype.getSenders;
- window.RTCPeerConnection.prototype.getSenders = function getSenders() {
- const senders = origGetSenders.apply(this, []);
- senders.forEach(sender => sender._pc = this);
- return senders;
- };
- Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {
- get() {
- if (this._dtmf === undefined) {
- if (this.track.kind === 'audio') {
- this._dtmf = this._pc.createDTMFSender(this.track);
- } else {
- this._dtmf = null;
- }
- }
- return this._dtmf;
- }
- });
- }
-}
-function shimGetStats(window) {
- if (!window.RTCPeerConnection) {
- return;
- }
- const origGetStats = window.RTCPeerConnection.prototype.getStats;
- window.RTCPeerConnection.prototype.getStats = function getStats() {
- const [selector, onSucc, onErr] = arguments;
-
- // If selector is a function then we are in the old style stats so just
- // pass back the original getStats format to avoid breaking old users.
- if (arguments.length > 0 && typeof selector === 'function') {
- return origGetStats.apply(this, arguments);
- }
-
- // When spec-style getStats is supported, return those when called with
- // either no arguments or the selector argument is null.
- if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== 'function')) {
- return origGetStats.apply(this, []);
- }
- const fixChromeStats_ = function (response) {
- const standardReport = {};
- const reports = response.result();
- reports.forEach(report => {
- const standardStats = {
- id: report.id,
- timestamp: report.timestamp,
- type: {
- localcandidate: 'local-candidate',
- remotecandidate: 'remote-candidate'
- }[report.type] || report.type
- };
- report.names().forEach(name => {
- standardStats[name] = report.stat(name);
- });
- standardReport[standardStats.id] = standardStats;
- });
- return standardReport;
- };
-
- // shim getStats with maplike support
- const makeMapStats = function (stats) {
- return new Map(Object.keys(stats).map(key => [key, stats[key]]));
- };
- if (arguments.length >= 2) {
- const successCallbackWrapper_ = function (response) {
- onSucc(makeMapStats(fixChromeStats_(response)));
- };
- return origGetStats.apply(this, [successCallbackWrapper_, selector]);
- }
-
- // promise-support
- return new Promise((resolve, reject) => {
- origGetStats.apply(this, [function (response) {
- resolve(makeMapStats(fixChromeStats_(response)));
- }, reject]);
- }).then(onSucc, onErr);
- };
-}
-function shimSenderReceiverGetStats(window) {
- if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) {
- return;
- }
-
- // shim sender stats.
- if (!('getStats' in window.RTCRtpSender.prototype)) {
- const origGetSenders = window.RTCPeerConnection.prototype.getSenders;
- if (origGetSenders) {
- window.RTCPeerConnection.prototype.getSenders = function getSenders() {
- const senders = origGetSenders.apply(this, []);
- senders.forEach(sender => sender._pc = this);
- return senders;
- };
- }
- const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
- if (origAddTrack) {
- window.RTCPeerConnection.prototype.addTrack = function addTrack() {
- const sender = origAddTrack.apply(this, arguments);
- sender._pc = this;
- return sender;
- };
- }
- window.RTCRtpSender.prototype.getStats = function getStats() {
- const sender = this;
- return this._pc.getStats().then(result =>
- /* Note: this will include stats of all senders that
- * send a track with the same id as sender.track as
- * it is not possible to identify the RTCRtpSender.
- */
- filterStats(result, sender.track, true));
- };
- }
-
- // shim receiver stats.
- if (!('getStats' in window.RTCRtpReceiver.prototype)) {
- const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;
- if (origGetReceivers) {
- window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {
- const receivers = origGetReceivers.apply(this, []);
- receivers.forEach(receiver => receiver._pc = this);
- return receivers;
- };
- }
- wrapPeerConnectionEvent(window, 'track', e => {
- e.receiver._pc = e.srcElement;
- return e;
- });
- window.RTCRtpReceiver.prototype.getStats = function getStats() {
- const receiver = this;
- return this._pc.getStats().then(result => filterStats(result, receiver.track, false));
- };
- }
- if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) {
- return;
- }
-
- // shim RTCPeerConnection.getStats(track).
- const origGetStats = window.RTCPeerConnection.prototype.getStats;
- window.RTCPeerConnection.prototype.getStats = function getStats() {
- if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {
- const track = arguments[0];
- let sender;
- let receiver;
- let err;
- this.getSenders().forEach(s => {
- if (s.track === track) {
- if (sender) {
- err = true;
- } else {
- sender = s;
- }
- }
- });
- this.getReceivers().forEach(r => {
- if (r.track === track) {
- if (receiver) {
- err = true;
- } else {
- receiver = r;
- }
- }
- return r.track === track;
- });
- if (err || sender && receiver) {
- return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError'));
- } else if (sender) {
- return sender.getStats();
- } else if (receiver) {
- return receiver.getStats();
- }
- return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError'));
- }
- return origGetStats.apply(this, arguments);
- };
-}
-function shimAddTrackRemoveTrackWithNative(window) {
- // shim addTrack/removeTrack with native variants in order to make
- // the interactions with legacy getLocalStreams behave as in other browsers.
- // Keeps a mapping stream.id => [stream, rtpsenders...]
- window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {
- this._shimmedLocalStreams = this._shimmedLocalStreams || {};
- return Object.keys(this._shimmedLocalStreams).map(streamId => this._shimmedLocalStreams[streamId][0]);
- };
- const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
- window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {
- if (!stream) {
- return origAddTrack.apply(this, arguments);
- }
- this._shimmedLocalStreams = this._shimmedLocalStreams || {};
- const sender = origAddTrack.apply(this, arguments);
- if (!this._shimmedLocalStreams[stream.id]) {
- this._shimmedLocalStreams[stream.id] = [stream, sender];
- } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {
- this._shimmedLocalStreams[stream.id].push(sender);
- }
- return sender;
- };
- const origAddStream = window.RTCPeerConnection.prototype.addStream;
- window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
- this._shimmedLocalStreams = this._shimmedLocalStreams || {};
- stream.getTracks().forEach(track => {
- const alreadyExists = this.getSenders().find(s => s.track === track);
- if (alreadyExists) {
- throw new DOMException('Track already exists.', 'InvalidAccessError');
- }
- });
- const existingSenders = this.getSenders();
- origAddStream.apply(this, arguments);
- const newSenders = this.getSenders().filter(newSender => existingSenders.indexOf(newSender) === -1);
- this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);
- };
- const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;
- window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {
- this._shimmedLocalStreams = this._shimmedLocalStreams || {};
- delete this._shimmedLocalStreams[stream.id];
- return origRemoveStream.apply(this, arguments);
- };
- const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;
- window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {
- this._shimmedLocalStreams = this._shimmedLocalStreams || {};
- if (sender) {
- Object.keys(this._shimmedLocalStreams).forEach(streamId => {
- const idx = this._shimmedLocalStreams[streamId].indexOf(sender);
- if (idx !== -1) {
- this._shimmedLocalStreams[streamId].splice(idx, 1);
- }
- if (this._shimmedLocalStreams[streamId].length === 1) {
- delete this._shimmedLocalStreams[streamId];
- }
- });
- }
- return origRemoveTrack.apply(this, arguments);
- };
-}
-function shimAddTrackRemoveTrack(window, browserDetails) {
- if (!window.RTCPeerConnection) {
- return;
- }
- // shim addTrack and removeTrack.
- if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) {
- return shimAddTrackRemoveTrackWithNative(window);
- }
-
- // also shim pc.getLocalStreams when addTrack is shimmed
- // to return the original streams.
- const origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;
- window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {
- const nativeStreams = origGetLocalStreams.apply(this);
- this._reverseStreams = this._reverseStreams || {};
- return nativeStreams.map(stream => this._reverseStreams[stream.id]);
- };
- const origAddStream = window.RTCPeerConnection.prototype.addStream;
- window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
- this._streams = this._streams || {};
- this._reverseStreams = this._reverseStreams || {};
- stream.getTracks().forEach(track => {
- const alreadyExists = this.getSenders().find(s => s.track === track);
- if (alreadyExists) {
- throw new DOMException('Track already exists.', 'InvalidAccessError');
- }
- });
- // Add identity mapping for consistency with addTrack.
- // Unless this is being used with a stream from addTrack.
- if (!this._reverseStreams[stream.id]) {
- const newStream = new window.MediaStream(stream.getTracks());
- this._streams[stream.id] = newStream;
- this._reverseStreams[newStream.id] = stream;
- stream = newStream;
- }
- origAddStream.apply(this, [stream]);
- };
- const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;
- window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {
- this._streams = this._streams || {};
- this._reverseStreams = this._reverseStreams || {};
- origRemoveStream.apply(this, [this._streams[stream.id] || stream]);
- delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];
- delete this._streams[stream.id];
- };
- window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {
- if (this.signalingState === 'closed') {
- throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError');
- }
- const streams = [].slice.call(arguments, 1);
- if (streams.length !== 1 || !streams[0].getTracks().find(t => t === track)) {
- // this is not fully correct but all we can manage without
- // [[associated MediaStreams]] internal slot.
- throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError');
- }
- const alreadyExists = this.getSenders().find(s => s.track === track);
- if (alreadyExists) {
- throw new DOMException('Track already exists.', 'InvalidAccessError');
- }
- this._streams = this._streams || {};
- this._reverseStreams = this._reverseStreams || {};
- const oldStream = this._streams[stream.id];
- if (oldStream) {
- // this is using odd Chrome behaviour, use with caution:
- // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815
- // Note: we rely on the high-level addTrack/dtmf shim to
- // create the sender with a dtmf sender.
- oldStream.addTrack(track);
-
- // Trigger ONN async.
- Promise.resolve().then(() => {
- this.dispatchEvent(new Event('negotiationneeded'));
- });
- } else {
- const newStream = new window.MediaStream([track]);
- this._streams[stream.id] = newStream;
- this._reverseStreams[newStream.id] = stream;
- this.addStream(newStream);
- }
- return this.getSenders().find(s => s.track === track);
- };
-
- // replace the internal stream id with the external one and
- // vice versa.
- function replaceInternalStreamId(pc, description) {
- let sdp = description.sdp;
- Object.keys(pc._reverseStreams || []).forEach(internalId => {
- const externalStream = pc._reverseStreams[internalId];
- const internalStream = pc._streams[externalStream.id];
- sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id);
- });
- return new RTCSessionDescription({
- type: description.type,
- sdp
- });
- }
- function replaceExternalStreamId(pc, description) {
- let sdp = description.sdp;
- Object.keys(pc._reverseStreams || []).forEach(internalId => {
- const externalStream = pc._reverseStreams[internalId];
- const internalStream = pc._streams[externalStream.id];
- sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id);
- });
- return new RTCSessionDescription({
- type: description.type,
- sdp
- });
- }
- ['createOffer', 'createAnswer'].forEach(function (method) {
- const nativeMethod = window.RTCPeerConnection.prototype[method];
- const methodObj = {
- [method]() {
- const args = arguments;
- const isLegacyCall = arguments.length && typeof arguments[0] === 'function';
- if (isLegacyCall) {
- return nativeMethod.apply(this, [description => {
- const desc = replaceInternalStreamId(this, description);
- args[0].apply(null, [desc]);
- }, err => {
- if (args[1]) {
- args[1].apply(null, err);
- }
- }, arguments[2]]);
- }
- return nativeMethod.apply(this, arguments).then(description => replaceInternalStreamId(this, description));
- }
- };
- window.RTCPeerConnection.prototype[method] = methodObj[method];
- });
- const origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;
- window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {
- if (!arguments.length || !arguments[0].type) {
- return origSetLocalDescription.apply(this, arguments);
- }
- arguments[0] = replaceExternalStreamId(this, arguments[0]);
- return origSetLocalDescription.apply(this, arguments);
- };
-
- // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier
-
- const origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription');
- Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', {
- get() {
- const description = origLocalDescription.get.apply(this);
- if (description.type === '') {
- return description;
- }
- return replaceInternalStreamId(this, description);
- }
- });
- window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {
- if (this.signalingState === 'closed') {
- throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError');
- }
- // We can not yet check for sender instanceof RTCRtpSender
- // since we shim RTPSender. So we check if sender._pc is set.
- if (!sender._pc) {
- throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError');
- }
- const isLocal = sender._pc === this;
- if (!isLocal) {
- throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError');
- }
-
- // Search for the native stream the senders track belongs to.
- this._streams = this._streams || {};
- let stream;
- Object.keys(this._streams).forEach(streamid => {
- const hasTrack = this._streams[streamid].getTracks().find(track => sender.track === track);
- if (hasTrack) {
- stream = this._streams[streamid];
- }
- });
- if (stream) {
- if (stream.getTracks().length === 1) {
- // if this is the last track of the stream, remove the stream. This
- // takes care of any shimmed _senders.
- this.removeStream(this._reverseStreams[stream.id]);
- } else {
- // relying on the same odd chrome behaviour as above.
- stream.removeTrack(sender.track);
- }
- this.dispatchEvent(new Event('negotiationneeded'));
- }
- };
-}
-function shimPeerConnection$1(window, browserDetails) {
- if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {
- // very basic support for old versions.
- window.RTCPeerConnection = window.webkitRTCPeerConnection;
- }
- if (!window.RTCPeerConnection) {
- return;
- }
-
- // shim implicit creation of RTCSessionDescription/RTCIceCandidate
- if (browserDetails.version < 53) {
- ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {
- const nativeMethod = window.RTCPeerConnection.prototype[method];
- const methodObj = {
- [method]() {
- arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);
- return nativeMethod.apply(this, arguments);
- }
- };
- window.RTCPeerConnection.prototype[method] = methodObj[method];
- });
- }
-}
-
-// Attempt to fix ONN in plan-b mode.
-function fixNegotiationNeeded(window, browserDetails) {
- wrapPeerConnectionEvent(window, 'negotiationneeded', e => {
- const pc = e.target;
- if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') {
- if (pc.signalingState !== 'stable') {
- return;
- }
- }
- return e;
- });
-}
-
-var chromeShim = /*#__PURE__*/Object.freeze({
- __proto__: null,
- fixNegotiationNeeded: fixNegotiationNeeded,
- shimAddTrackRemoveTrack: shimAddTrackRemoveTrack,
- shimAddTrackRemoveTrackWithNative: shimAddTrackRemoveTrackWithNative,
- shimGetDisplayMedia: shimGetDisplayMedia$1,
- shimGetSendersWithDtmf: shimGetSendersWithDtmf,
- shimGetStats: shimGetStats,
- shimGetUserMedia: shimGetUserMedia$2,
- shimMediaStream: shimMediaStream,
- shimOnTrack: shimOnTrack$1,
- shimPeerConnection: shimPeerConnection$1,
- shimSenderReceiverGetStats: shimSenderReceiverGetStats
-});
-
-/*
- * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
-function shimGetUserMedia$1(window, browserDetails) {
- const navigator = window && window.navigator;
- const MediaStreamTrack = window && window.MediaStreamTrack;
- navigator.getUserMedia = function (constraints, onSuccess, onError) {
- // Replace Firefox 44+'s deprecation warning with unprefixed version.
- deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia');
- navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);
- };
- if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {
- const remap = function (obj, a, b) {
- if (a in obj && !(b in obj)) {
- obj[b] = obj[a];
- delete obj[a];
- }
- };
- const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
- navigator.mediaDevices.getUserMedia = function (c) {
- if (typeof c === 'object' && typeof c.audio === 'object') {
- c = JSON.parse(JSON.stringify(c));
- remap(c.audio, 'autoGainControl', 'mozAutoGainControl');
- remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');
- }
- return nativeGetUserMedia(c);
- };
- if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {
- const nativeGetSettings = MediaStreamTrack.prototype.getSettings;
- MediaStreamTrack.prototype.getSettings = function () {
- const obj = nativeGetSettings.apply(this, arguments);
- remap(obj, 'mozAutoGainControl', 'autoGainControl');
- remap(obj, 'mozNoiseSuppression', 'noiseSuppression');
- return obj;
- };
- }
- if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {
- const nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;
- MediaStreamTrack.prototype.applyConstraints = function (c) {
- if (this.kind === 'audio' && typeof c === 'object') {
- c = JSON.parse(JSON.stringify(c));
- remap(c, 'autoGainControl', 'mozAutoGainControl');
- remap(c, 'noiseSuppression', 'mozNoiseSuppression');
- }
- return nativeApplyConstraints.apply(this, [c]);
- };
- }
- }
-}
-
-/*
- * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
-
-function shimGetDisplayMedia(window, preferredMediaSource) {
- if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {
- return;
- }
- if (!window.navigator.mediaDevices) {
- return;
- }
- window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {
- if (!(constraints && constraints.video)) {
- const err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined');
- err.name = 'NotFoundError';
- // from https://heycam.github.io/webidl/#idl-DOMException-error-names
- err.code = 8;
- return Promise.reject(err);
- }
- if (constraints.video === true) {
- constraints.video = {
- mediaSource: preferredMediaSource
- };
- } else {
- constraints.video.mediaSource = preferredMediaSource;
- }
- return window.navigator.mediaDevices.getUserMedia(constraints);
- };
-}
-
-/*
- * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
-function shimOnTrack(window) {
- if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {
- Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {
- get() {
- return {
- receiver: this.receiver
- };
- }
- });
- }
-}
-function shimPeerConnection(window, browserDetails) {
- if (typeof window !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {
- return; // probably media.peerconnection.enabled=false in about:config
- }
-
- if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {
- // very basic support for old versions.
- window.RTCPeerConnection = window.mozRTCPeerConnection;
- }
- if (browserDetails.version < 53) {
- // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.
- ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {
- const nativeMethod = window.RTCPeerConnection.prototype[method];
- const methodObj = {
- [method]() {
- arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);
- return nativeMethod.apply(this, arguments);
- }
- };
- window.RTCPeerConnection.prototype[method] = methodObj[method];
- });
- }
- const modernStatsTypes = {
- inboundrtp: 'inbound-rtp',
- outboundrtp: 'outbound-rtp',
- candidatepair: 'candidate-pair',
- localcandidate: 'local-candidate',
- remotecandidate: 'remote-candidate'
- };
- const nativeGetStats = window.RTCPeerConnection.prototype.getStats;
- window.RTCPeerConnection.prototype.getStats = function getStats() {
- const [selector, onSucc, onErr] = arguments;
- return nativeGetStats.apply(this, [selector || null]).then(stats => {
- if (browserDetails.version < 53 && !onSucc) {
- // Shim only promise getStats with spec-hyphens in type names
- // Leave callback version alone; misc old uses of forEach before Map
- try {
- stats.forEach(stat => {
- stat.type = modernStatsTypes[stat.type] || stat.type;
- });
- } catch (e) {
- if (e.name !== 'TypeError') {
- throw e;
- }
- // Avoid TypeError: "type" is read-only, in old versions. 34-43ish
- stats.forEach((stat, i) => {
- stats.set(i, Object.assign({}, stat, {
- type: modernStatsTypes[stat.type] || stat.type
- }));
- });
- }
- }
- return stats;
- }).then(onSucc, onErr);
- };
-}
-function shimSenderGetStats(window) {
- if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {
- return;
- }
- if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {
- return;
- }
- const origGetSenders = window.RTCPeerConnection.prototype.getSenders;
- if (origGetSenders) {
- window.RTCPeerConnection.prototype.getSenders = function getSenders() {
- const senders = origGetSenders.apply(this, []);
- senders.forEach(sender => sender._pc = this);
- return senders;
- };
- }
- const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
- if (origAddTrack) {
- window.RTCPeerConnection.prototype.addTrack = function addTrack() {
- const sender = origAddTrack.apply(this, arguments);
- sender._pc = this;
- return sender;
- };
- }
- window.RTCRtpSender.prototype.getStats = function getStats() {
- return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());
- };
-}
-function shimReceiverGetStats(window) {
- if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {
- return;
- }
- if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {
- return;
- }
- const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;
- if (origGetReceivers) {
- window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {
- const receivers = origGetReceivers.apply(this, []);
- receivers.forEach(receiver => receiver._pc = this);
- return receivers;
- };
- }
- wrapPeerConnectionEvent(window, 'track', e => {
- e.receiver._pc = e.srcElement;
- return e;
- });
- window.RTCRtpReceiver.prototype.getStats = function getStats() {
- return this._pc.getStats(this.track);
- };
-}
-function shimRemoveStream(window) {
- if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) {
- return;
- }
- window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {
- deprecated('removeStream', 'removeTrack');
- this.getSenders().forEach(sender => {
- if (sender.track && stream.getTracks().includes(sender.track)) {
- this.removeTrack(sender);
- }
- });
- };
-}
-function shimRTCDataChannel(window) {
- // rename DataChannel to RTCDataChannel (native fix in FF60):
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851
- if (window.DataChannel && !window.RTCDataChannel) {
- window.RTCDataChannel = window.DataChannel;
- }
-}
-function shimAddTransceiver(window) {
- // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647
- // Firefox ignores the init sendEncodings options passed to addTransceiver
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918
- if (!(typeof window === 'object' && window.RTCPeerConnection)) {
- return;
- }
- const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;
- if (origAddTransceiver) {
- window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {
- this.setParametersPromises = [];
- const initParameters = arguments[1];
- const shouldPerformCheck = initParameters && 'sendEncodings' in initParameters;
- if (shouldPerformCheck) {
- // If sendEncodings params are provided, validate grammar
- initParameters.sendEncodings.forEach(encodingParam => {
- if ('rid' in encodingParam) {
- const ridRegex = /^[a-z0-9]{0,16}$/i;
- if (!ridRegex.test(encodingParam.rid)) {
- throw new TypeError('Invalid RID value provided.');
- }
- }
- if ('scaleResolutionDownBy' in encodingParam) {
- if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {
- throw new RangeError('scale_resolution_down_by must be >= 1.0');
- }
- }
- if ('maxFramerate' in encodingParam) {
- if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {
- throw new RangeError('max_framerate must be >= 0.0');
- }
- }
- });
- }
- const transceiver = origAddTransceiver.apply(this, arguments);
- if (shouldPerformCheck) {
- // Check if the init options were applied. If not we do this in an
- // asynchronous way and save the promise reference in a global object.
- // This is an ugly hack, but at the same time is way more robust than
- // checking the sender parameters before and after the createOffer
- // Also note that after the createoffer we are not 100% sure that
- // the params were asynchronously applied so we might miss the
- // opportunity to recreate offer.
- const {
- sender
- } = transceiver;
- const params = sender.getParameters();
- if (!('encodings' in params) ||
- // Avoid being fooled by patched getParameters() below.
- params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {
- params.encodings = initParameters.sendEncodings;
- sender.sendEncodings = initParameters.sendEncodings;
- this.setParametersPromises.push(sender.setParameters(params).then(() => {
- delete sender.sendEncodings;
- }).catch(() => {
- delete sender.sendEncodings;
- }));
- }
- }
- return transceiver;
- };
- }
-}
-function shimGetParameters(window) {
- if (!(typeof window === 'object' && window.RTCRtpSender)) {
- return;
- }
- const origGetParameters = window.RTCRtpSender.prototype.getParameters;
- if (origGetParameters) {
- window.RTCRtpSender.prototype.getParameters = function getParameters() {
- const params = origGetParameters.apply(this, arguments);
- if (!('encodings' in params)) {
- params.encodings = [].concat(this.sendEncodings || [{}]);
- }
- return params;
- };
- }
-}
-function shimCreateOffer(window) {
- // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647
- // Firefox ignores the init sendEncodings options passed to addTransceiver
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918
- if (!(typeof window === 'object' && window.RTCPeerConnection)) {
- return;
- }
- const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;
- window.RTCPeerConnection.prototype.createOffer = function createOffer() {
- if (this.setParametersPromises && this.setParametersPromises.length) {
- return Promise.all(this.setParametersPromises).then(() => {
- return origCreateOffer.apply(this, arguments);
- }).finally(() => {
- this.setParametersPromises = [];
- });
- }
- return origCreateOffer.apply(this, arguments);
- };
-}
-function shimCreateAnswer(window) {
- // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647
- // Firefox ignores the init sendEncodings options passed to addTransceiver
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918
- if (!(typeof window === 'object' && window.RTCPeerConnection)) {
- return;
- }
- const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;
- window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {
- if (this.setParametersPromises && this.setParametersPromises.length) {
- return Promise.all(this.setParametersPromises).then(() => {
- return origCreateAnswer.apply(this, arguments);
- }).finally(() => {
- this.setParametersPromises = [];
- });
- }
- return origCreateAnswer.apply(this, arguments);
- };
-}
-
-var firefoxShim = /*#__PURE__*/Object.freeze({
- __proto__: null,
- shimAddTransceiver: shimAddTransceiver,
- shimCreateAnswer: shimCreateAnswer,
- shimCreateOffer: shimCreateOffer,
- shimGetDisplayMedia: shimGetDisplayMedia,
- shimGetParameters: shimGetParameters,
- shimGetUserMedia: shimGetUserMedia$1,
- shimOnTrack: shimOnTrack,
- shimPeerConnection: shimPeerConnection,
- shimRTCDataChannel: shimRTCDataChannel,
- shimReceiverGetStats: shimReceiverGetStats,
- shimRemoveStream: shimRemoveStream,
- shimSenderGetStats: shimSenderGetStats
-});
-
-/*
- * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
-function shimLocalStreamsAPI(window) {
- if (typeof window !== 'object' || !window.RTCPeerConnection) {
- return;
- }
- if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {
- window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {
- if (!this._localStreams) {
- this._localStreams = [];
- }
- return this._localStreams;
- };
- }
- if (!('addStream' in window.RTCPeerConnection.prototype)) {
- const _addTrack = window.RTCPeerConnection.prototype.addTrack;
- window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
- if (!this._localStreams) {
- this._localStreams = [];
- }
- if (!this._localStreams.includes(stream)) {
- this._localStreams.push(stream);
- }
- // Try to emulate Chrome's behaviour of adding in audio-video order.
- // Safari orders by track id.
- stream.getAudioTracks().forEach(track => _addTrack.call(this, track, stream));
- stream.getVideoTracks().forEach(track => _addTrack.call(this, track, stream));
- };
- window.RTCPeerConnection.prototype.addTrack = function addTrack(track) {
- for (var _len = arguments.length, streams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- streams[_key - 1] = arguments[_key];
- }
- if (streams) {
- streams.forEach(stream => {
- if (!this._localStreams) {
- this._localStreams = [stream];
- } else if (!this._localStreams.includes(stream)) {
- this._localStreams.push(stream);
- }
- });
- }
- return _addTrack.apply(this, arguments);
- };
- }
- if (!('removeStream' in window.RTCPeerConnection.prototype)) {
- window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {
- if (!this._localStreams) {
- this._localStreams = [];
- }
- const index = this._localStreams.indexOf(stream);
- if (index === -1) {
- return;
- }
- this._localStreams.splice(index, 1);
- const tracks = stream.getTracks();
- this.getSenders().forEach(sender => {
- if (tracks.includes(sender.track)) {
- this.removeTrack(sender);
- }
- });
- };
- }
-}
-function shimRemoteStreamsAPI(window) {
- if (typeof window !== 'object' || !window.RTCPeerConnection) {
- return;
- }
- if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {
- window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {
- return this._remoteStreams ? this._remoteStreams : [];
- };
- }
- if (!('onaddstream' in window.RTCPeerConnection.prototype)) {
- Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {
- get() {
- return this._onaddstream;
- },
- set(f) {
- if (this._onaddstream) {
- this.removeEventListener('addstream', this._onaddstream);
- this.removeEventListener('track', this._onaddstreampoly);
- }
- this.addEventListener('addstream', this._onaddstream = f);
- this.addEventListener('track', this._onaddstreampoly = e => {
- e.streams.forEach(stream => {
- if (!this._remoteStreams) {
- this._remoteStreams = [];
- }
- if (this._remoteStreams.includes(stream)) {
- return;
- }
- this._remoteStreams.push(stream);
- const event = new Event('addstream');
- event.stream = stream;
- this.dispatchEvent(event);
- });
- });
- }
- });
- const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;
- window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {
- const pc = this;
- if (!this._onaddstreampoly) {
- this.addEventListener('track', this._onaddstreampoly = function (e) {
- e.streams.forEach(stream => {
- if (!pc._remoteStreams) {
- pc._remoteStreams = [];
- }
- if (pc._remoteStreams.indexOf(stream) >= 0) {
- return;
- }
- pc._remoteStreams.push(stream);
- const event = new Event('addstream');
- event.stream = stream;
- pc.dispatchEvent(event);
- });
- });
- }
- return origSetRemoteDescription.apply(pc, arguments);
- };
- }
-}
-function shimCallbacksAPI(window) {
- if (typeof window !== 'object' || !window.RTCPeerConnection) {
- return;
- }
- const prototype = window.RTCPeerConnection.prototype;
- const origCreateOffer = prototype.createOffer;
- const origCreateAnswer = prototype.createAnswer;
- const setLocalDescription = prototype.setLocalDescription;
- const setRemoteDescription = prototype.setRemoteDescription;
- const addIceCandidate = prototype.addIceCandidate;
- prototype.createOffer = function createOffer(successCallback, failureCallback) {
- const options = arguments.length >= 2 ? arguments[2] : arguments[0];
- const promise = origCreateOffer.apply(this, [options]);
- if (!failureCallback) {
- return promise;
- }
- promise.then(successCallback, failureCallback);
- return Promise.resolve();
- };
- prototype.createAnswer = function createAnswer(successCallback, failureCallback) {
- const options = arguments.length >= 2 ? arguments[2] : arguments[0];
- const promise = origCreateAnswer.apply(this, [options]);
- if (!failureCallback) {
- return promise;
- }
- promise.then(successCallback, failureCallback);
- return Promise.resolve();
- };
- let withCallback = function (description, successCallback, failureCallback) {
- const promise = setLocalDescription.apply(this, [description]);
- if (!failureCallback) {
- return promise;
- }
- promise.then(successCallback, failureCallback);
- return Promise.resolve();
- };
- prototype.setLocalDescription = withCallback;
- withCallback = function (description, successCallback, failureCallback) {
- const promise = setRemoteDescription.apply(this, [description]);
- if (!failureCallback) {
- return promise;
- }
- promise.then(successCallback, failureCallback);
- return Promise.resolve();
- };
- prototype.setRemoteDescription = withCallback;
- withCallback = function (candidate, successCallback, failureCallback) {
- const promise = addIceCandidate.apply(this, [candidate]);
- if (!failureCallback) {
- return promise;
- }
- promise.then(successCallback, failureCallback);
- return Promise.resolve();
- };
- prototype.addIceCandidate = withCallback;
-}
-function shimGetUserMedia(window) {
- const navigator = window && window.navigator;
- if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
- // shim not needed in Safari 12.1
- const mediaDevices = navigator.mediaDevices;
- const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);
- navigator.mediaDevices.getUserMedia = constraints => {
- return _getUserMedia(shimConstraints(constraints));
- };
- }
- if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
- navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {
- navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);
- }.bind(navigator);
- }
-}
-function shimConstraints(constraints) {
- if (constraints && constraints.video !== undefined) {
- return Object.assign({}, constraints, {
- video: compactObject(constraints.video)
- });
- }
- return constraints;
-}
-function shimRTCIceServerUrls(window) {
- if (!window.RTCPeerConnection) {
- return;
- }
- // migrate from non-spec RTCIceServer.url to RTCIceServer.urls
- const OrigPeerConnection = window.RTCPeerConnection;
- window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {
- if (pcConfig && pcConfig.iceServers) {
- const newIceServers = [];
- for (let i = 0; i < pcConfig.iceServers.length; i++) {
- let server = pcConfig.iceServers[i];
- if (!server.hasOwnProperty('urls') && server.hasOwnProperty('url')) {
- deprecated('RTCIceServer.url', 'RTCIceServer.urls');
- server = JSON.parse(JSON.stringify(server));
- server.urls = server.url;
- delete server.url;
- newIceServers.push(server);
- } else {
- newIceServers.push(pcConfig.iceServers[i]);
- }
- }
- pcConfig.iceServers = newIceServers;
- }
- return new OrigPeerConnection(pcConfig, pcConstraints);
- };
- window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;
- // wrap static methods. Currently just generateCertificate.
- if ('generateCertificate' in OrigPeerConnection) {
- Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {
- get() {
- return OrigPeerConnection.generateCertificate;
- }
- });
- }
-}
-function shimTrackEventTransceiver(window) {
- // Add event.transceiver member over deprecated event.receiver
- if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {
- Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {
- get() {
- return {
- receiver: this.receiver
- };
- }
- });
- }
-}
-function shimCreateOfferLegacy(window) {
- const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;
- window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {
- if (offerOptions) {
- if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {
- // support bit values
- offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;
- }
- const audioTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'audio');
- if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {
- if (audioTransceiver.direction === 'sendrecv') {
- if (audioTransceiver.setDirection) {
- audioTransceiver.setDirection('sendonly');
- } else {
- audioTransceiver.direction = 'sendonly';
- }
- } else if (audioTransceiver.direction === 'recvonly') {
- if (audioTransceiver.setDirection) {
- audioTransceiver.setDirection('inactive');
- } else {
- audioTransceiver.direction = 'inactive';
- }
- }
- } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) {
- this.addTransceiver('audio', {
- direction: 'recvonly'
- });
- }
- if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {
- // support bit values
- offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;
- }
- const videoTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'video');
- if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {
- if (videoTransceiver.direction === 'sendrecv') {
- if (videoTransceiver.setDirection) {
- videoTransceiver.setDirection('sendonly');
- } else {
- videoTransceiver.direction = 'sendonly';
- }
- } else if (videoTransceiver.direction === 'recvonly') {
- if (videoTransceiver.setDirection) {
- videoTransceiver.setDirection('inactive');
- } else {
- videoTransceiver.direction = 'inactive';
- }
- }
- } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) {
- this.addTransceiver('video', {
- direction: 'recvonly'
- });
- }
- }
- return origCreateOffer.apply(this, arguments);
- };
-}
-function shimAudioContext(window) {
- if (typeof window !== 'object' || window.AudioContext) {
- return;
- }
- window.AudioContext = window.webkitAudioContext;
-}
-
-var safariShim = /*#__PURE__*/Object.freeze({
- __proto__: null,
- shimAudioContext: shimAudioContext,
- shimCallbacksAPI: shimCallbacksAPI,
- shimConstraints: shimConstraints,
- shimCreateOfferLegacy: shimCreateOfferLegacy,
- shimGetUserMedia: shimGetUserMedia,
- shimLocalStreamsAPI: shimLocalStreamsAPI,
- shimRTCIceServerUrls: shimRTCIceServerUrls,
- shimRemoteStreamsAPI: shimRemoteStreamsAPI,
- shimTrackEventTransceiver: shimTrackEventTransceiver
-});
-
-var sdpExports = {};
-var sdp$1 = {
- get exports(){ return sdpExports; },
- set exports(v){ sdpExports = v; },
-};
-
-/* eslint-env node */
-(function (module) {
-
- // SDP helpers.
- const SDPUtils = {};
-
- // Generate an alphanumeric identifier for cname or mids.
- // TODO: use UUIDs instead? https://gist.github.com/jed/982883
- SDPUtils.generateIdentifier = function () {
- return Math.random().toString(36).substr(2, 10);
- };
-
- // The RTCP CNAME used by all peerconnections from the same JS.
- SDPUtils.localCName = SDPUtils.generateIdentifier();
-
- // Splits SDP into lines, dealing with both CRLF and LF.
- SDPUtils.splitLines = function (blob) {
- return blob.trim().split('\n').map(line => line.trim());
- };
- // Splits SDP into sessionpart and mediasections. Ensures CRLF.
- SDPUtils.splitSections = function (blob) {
- const parts = blob.split('\nm=');
- return parts.map((part, index) => (index > 0 ? 'm=' + part : part).trim() + '\r\n');
- };
-
- // Returns the session description.
- SDPUtils.getDescription = function (blob) {
- const sections = SDPUtils.splitSections(blob);
- return sections && sections[0];
- };
-
- // Returns the individual media sections.
- SDPUtils.getMediaSections = function (blob) {
- const sections = SDPUtils.splitSections(blob);
- sections.shift();
- return sections;
- };
-
- // Returns lines that start with a certain prefix.
- SDPUtils.matchPrefix = function (blob, prefix) {
- return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);
- };
-
- // Parses an ICE candidate line. Sample input:
- // candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8
- // rport 55996"
- // Input can be prefixed with a=.
- SDPUtils.parseCandidate = function (line) {
- let parts;
- // Parse both variants.
- if (line.indexOf('a=candidate:') === 0) {
- parts = line.substring(12).split(' ');
- } else {
- parts = line.substring(10).split(' ');
- }
- const candidate = {
- foundation: parts[0],
- component: {
- 1: 'rtp',
- 2: 'rtcp'
- }[parts[1]] || parts[1],
- protocol: parts[2].toLowerCase(),
- priority: parseInt(parts[3], 10),
- ip: parts[4],
- address: parts[4],
- // address is an alias for ip.
- port: parseInt(parts[5], 10),
- // skip parts[6] == 'typ'
- type: parts[7]
- };
- for (let i = 8; i < parts.length; i += 2) {
- switch (parts[i]) {
- case 'raddr':
- candidate.relatedAddress = parts[i + 1];
- break;
- case 'rport':
- candidate.relatedPort = parseInt(parts[i + 1], 10);
- break;
- case 'tcptype':
- candidate.tcpType = parts[i + 1];
- break;
- case 'ufrag':
- candidate.ufrag = parts[i + 1]; // for backward compatibility.
- candidate.usernameFragment = parts[i + 1];
- break;
- default:
- // extension handling, in particular ufrag. Don't overwrite.
- if (candidate[parts[i]] === undefined) {
- candidate[parts[i]] = parts[i + 1];
- }
- break;
- }
- }
- return candidate;
- };
-
- // Translates a candidate object into SDP candidate attribute.
- // This does not include the a= prefix!
- SDPUtils.writeCandidate = function (candidate) {
- const sdp = [];
- sdp.push(candidate.foundation);
- const component = candidate.component;
- if (component === 'rtp') {
- sdp.push(1);
- } else if (component === 'rtcp') {
- sdp.push(2);
- } else {
- sdp.push(component);
- }
- sdp.push(candidate.protocol.toUpperCase());
- sdp.push(candidate.priority);
- sdp.push(candidate.address || candidate.ip);
- sdp.push(candidate.port);
- const type = candidate.type;
- sdp.push('typ');
- sdp.push(type);
- if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort) {
- sdp.push('raddr');
- sdp.push(candidate.relatedAddress);
- sdp.push('rport');
- sdp.push(candidate.relatedPort);
- }
- if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {
- sdp.push('tcptype');
- sdp.push(candidate.tcpType);
- }
- if (candidate.usernameFragment || candidate.ufrag) {
- sdp.push('ufrag');
- sdp.push(candidate.usernameFragment || candidate.ufrag);
- }
- return 'candidate:' + sdp.join(' ');
- };
-
- // Parses an ice-options line, returns an array of option tags.
- // Sample input:
- // a=ice-options:foo bar
- SDPUtils.parseIceOptions = function (line) {
- return line.substr(14).split(' ');
- };
-
- // Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:
- // a=rtpmap:111 opus/48000/2
- SDPUtils.parseRtpMap = function (line) {
- let parts = line.substr(9).split(' ');
- const parsed = {
- payloadType: parseInt(parts.shift(), 10) // was: id
- };
-
- parts = parts[0].split('/');
- parsed.name = parts[0];
- parsed.clockRate = parseInt(parts[1], 10); // was: clockrate
- parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;
- // legacy alias, got renamed back to channels in ORTC.
- parsed.numChannels = parsed.channels;
- return parsed;
- };
-
- // Generates a rtpmap line from RTCRtpCodecCapability or
- // RTCRtpCodecParameters.
- SDPUtils.writeRtpMap = function (codec) {
- let pt = codec.payloadType;
- if (codec.preferredPayloadType !== undefined) {
- pt = codec.preferredPayloadType;
- }
- const channels = codec.channels || codec.numChannels || 1;
- return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\r\n';
- };
-
- // Parses a extmap line (headerextension from RFC 5285). Sample input:
- // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
- // a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset
- SDPUtils.parseExtmap = function (line) {
- const parts = line.substr(9).split(' ');
- return {
- id: parseInt(parts[0], 10),
- direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',
- uri: parts[1]
- };
- };
-
- // Generates an extmap line from RTCRtpHeaderExtensionParameters or
- // RTCRtpHeaderExtension.
- SDPUtils.writeExtmap = function (headerExtension) {
- return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + '\r\n';
- };
-
- // Parses a fmtp line, returns dictionary. Sample input:
- // a=fmtp:96 vbr=on;cng=on
- // Also deals with vbr=on; cng=on
- SDPUtils.parseFmtp = function (line) {
- const parsed = {};
- let kv;
- const parts = line.substr(line.indexOf(' ') + 1).split(';');
- for (let j = 0; j < parts.length; j++) {
- kv = parts[j].trim().split('=');
- parsed[kv[0].trim()] = kv[1];
- }
- return parsed;
- };
-
- // Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.
- SDPUtils.writeFmtp = function (codec) {
- let line = '';
- let pt = codec.payloadType;
- if (codec.preferredPayloadType !== undefined) {
- pt = codec.preferredPayloadType;
- }
- if (codec.parameters && Object.keys(codec.parameters).length) {
- const params = [];
- Object.keys(codec.parameters).forEach(param => {
- if (codec.parameters[param] !== undefined) {
- params.push(param + '=' + codec.parameters[param]);
- } else {
- params.push(param);
- }
- });
- line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n';
- }
- return line;
- };
-
- // Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:
- // a=rtcp-fb:98 nack rpsi
- SDPUtils.parseRtcpFb = function (line) {
- const parts = line.substr(line.indexOf(' ') + 1).split(' ');
- return {
- type: parts.shift(),
- parameter: parts.join(' ')
- };
- };
-
- // Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.
- SDPUtils.writeRtcpFb = function (codec) {
- let lines = '';
- let pt = codec.payloadType;
- if (codec.preferredPayloadType !== undefined) {
- pt = codec.preferredPayloadType;
- }
- if (codec.rtcpFeedback && codec.rtcpFeedback.length) {
- // FIXME: special handling for trr-int?
- codec.rtcpFeedback.forEach(fb => {
- lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\r\n';
- });
- }
- return lines;
- };
-
- // Parses a RFC 5576 ssrc media attribute. Sample input:
- // a=ssrc:3735928559 cname:something
- SDPUtils.parseSsrcMedia = function (line) {
- const sp = line.indexOf(' ');
- const parts = {
- ssrc: parseInt(line.substr(7, sp - 7), 10)
- };
- const colon = line.indexOf(':', sp);
- if (colon > -1) {
- parts.attribute = line.substr(sp + 1, colon - sp - 1);
- parts.value = line.substr(colon + 1);
- } else {
- parts.attribute = line.substr(sp + 1);
- }
- return parts;
- };
-
- // Parse a ssrc-group line (see RFC 5576). Sample input:
- // a=ssrc-group:semantics 12 34
- SDPUtils.parseSsrcGroup = function (line) {
- const parts = line.substr(13).split(' ');
- return {
- semantics: parts.shift(),
- ssrcs: parts.map(ssrc => parseInt(ssrc, 10))
- };
- };
-
- // Extracts the MID (RFC 5888) from a media section.
- // Returns the MID or undefined if no mid line was found.
- SDPUtils.getMid = function (mediaSection) {
- const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];
- if (mid) {
- return mid.substr(6);
- }
- };
-
- // Parses a fingerprint line for DTLS-SRTP.
- SDPUtils.parseFingerprint = function (line) {
- const parts = line.substr(14).split(' ');
- return {
- algorithm: parts[0].toLowerCase(),
- // algorithm is case-sensitive in Edge.
- value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572.
- };
- };
-
- // Extracts DTLS parameters from SDP media section or sessionpart.
- // FIXME: for consistency with other functions this should only
- // get the fingerprint line as input. See also getIceParameters.
- SDPUtils.getDtlsParameters = function (mediaSection, sessionpart) {
- const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');
- // Note: a=setup line is ignored since we use the 'auto' role in Edge.
- return {
- role: 'auto',
- fingerprints: lines.map(SDPUtils.parseFingerprint)
- };
- };
-
- // Serializes DTLS parameters to SDP.
- SDPUtils.writeDtlsParameters = function (params, setupType) {
- let sdp = 'a=setup:' + setupType + '\r\n';
- params.fingerprints.forEach(fp => {
- sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n';
- });
- return sdp;
- };
-
- // Parses a=crypto lines into
- // https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members
- SDPUtils.parseCryptoLine = function (line) {
- const parts = line.substr(9).split(' ');
- return {
- tag: parseInt(parts[0], 10),
- cryptoSuite: parts[1],
- keyParams: parts[2],
- sessionParams: parts.slice(3)
- };
- };
- SDPUtils.writeCryptoLine = function (parameters) {
- return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (typeof parameters.keyParams === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\r\n';
- };
-
- // Parses the crypto key parameters into
- // https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*
- SDPUtils.parseCryptoKeyParams = function (keyParams) {
- if (keyParams.indexOf('inline:') !== 0) {
- return null;
- }
- const parts = keyParams.substr(7).split('|');
- return {
- keyMethod: 'inline',
- keySalt: parts[0],
- lifeTime: parts[1],
- mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,
- mkiLength: parts[2] ? parts[2].split(':')[1] : undefined
- };
- };
- SDPUtils.writeCryptoKeyParams = function (keyParams) {
- return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : '');
- };
-
- // Extracts all SDES parameters.
- SDPUtils.getCryptoParameters = function (mediaSection, sessionpart) {
- const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:');
- return lines.map(SDPUtils.parseCryptoLine);
- };
-
- // Parses ICE information from SDP media section or sessionpart.
- // FIXME: for consistency with other functions this should only
- // get the ice-ufrag and ice-pwd lines as input.
- SDPUtils.getIceParameters = function (mediaSection, sessionpart) {
- const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0];
- const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0];
- if (!(ufrag && pwd)) {
- return null;
- }
- return {
- usernameFragment: ufrag.substr(12),
- password: pwd.substr(10)
- };
- };
-
- // Serializes ICE parameters to SDP.
- SDPUtils.writeIceParameters = function (params) {
- let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + 'a=ice-pwd:' + params.password + '\r\n';
- if (params.iceLite) {
- sdp += 'a=ice-lite\r\n';
- }
- return sdp;
- };
-
- // Parses the SDP media section and returns RTCRtpParameters.
- SDPUtils.parseRtpParameters = function (mediaSection) {
- const description = {
- codecs: [],
- headerExtensions: [],
- fecMechanisms: [],
- rtcp: []
- };
- const lines = SDPUtils.splitLines(mediaSection);
- const mline = lines[0].split(' ');
- for (let i = 3; i < mline.length; i++) {
- // find all codecs from mline[3..]
- const pt = mline[i];
- const rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0];
- if (rtpmapline) {
- const codec = SDPUtils.parseRtpMap(rtpmapline);
- const fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' ');
- // Only the first a=fmtp: is considered.
- codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};
- codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb);
- description.codecs.push(codec);
- // parse FEC mechanisms from rtpmap lines.
- switch (codec.name.toUpperCase()) {
- case 'RED':
- case 'ULPFEC':
- description.fecMechanisms.push(codec.name.toUpperCase());
- break;
- }
- }
- }
- SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {
- description.headerExtensions.push(SDPUtils.parseExtmap(line));
- });
- // FIXME: parse rtcp.
- return description;
- };
-
- // Generates parts of the SDP media section describing the capabilities /
- // parameters.
- SDPUtils.writeRtpDescription = function (kind, caps) {
- let sdp = '';
-
- // Build the mline.
- sdp += 'm=' + kind + ' ';
- sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.
- sdp += ' UDP/TLS/RTP/SAVPF ';
- sdp += caps.codecs.map(codec => {
- if (codec.preferredPayloadType !== undefined) {
- return codec.preferredPayloadType;
- }
- return codec.payloadType;
- }).join(' ') + '\r\n';
- sdp += 'c=IN IP4 0.0.0.0\r\n';
- sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n';
-
- // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.
- caps.codecs.forEach(codec => {
- sdp += SDPUtils.writeRtpMap(codec);
- sdp += SDPUtils.writeFmtp(codec);
- sdp += SDPUtils.writeRtcpFb(codec);
- });
- let maxptime = 0;
- caps.codecs.forEach(codec => {
- if (codec.maxptime > maxptime) {
- maxptime = codec.maxptime;
- }
- });
- if (maxptime > 0) {
- sdp += 'a=maxptime:' + maxptime + '\r\n';
- }
- if (caps.headerExtensions) {
- caps.headerExtensions.forEach(extension => {
- sdp += SDPUtils.writeExtmap(extension);
- });
- }
- // FIXME: write fecMechanisms.
- return sdp;
- };
-
- // Parses the SDP media section and returns an array of
- // RTCRtpEncodingParameters.
- SDPUtils.parseRtpEncodingParameters = function (mediaSection) {
- const encodingParameters = [];
- const description = SDPUtils.parseRtpParameters(mediaSection);
- const hasRed = description.fecMechanisms.indexOf('RED') !== -1;
- const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;
-
- // filter a=ssrc:... cname:, ignore PlanB-msid
- const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(parts => parts.attribute === 'cname');
- const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;
- let secondarySsrc;
- const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(line => {
- const parts = line.substr(17).split(' ');
- return parts.map(part => parseInt(part, 10));
- });
- if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {
- secondarySsrc = flows[0][1];
- }
- description.codecs.forEach(codec => {
- if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {
- let encParam = {
- ssrc: primarySsrc,
- codecPayloadType: parseInt(codec.parameters.apt, 10)
- };
- if (primarySsrc && secondarySsrc) {
- encParam.rtx = {
- ssrc: secondarySsrc
- };
- }
- encodingParameters.push(encParam);
- if (hasRed) {
- encParam = JSON.parse(JSON.stringify(encParam));
- encParam.fec = {
- ssrc: primarySsrc,
- mechanism: hasUlpfec ? 'red+ulpfec' : 'red'
- };
- encodingParameters.push(encParam);
- }
- }
- });
- if (encodingParameters.length === 0 && primarySsrc) {
- encodingParameters.push({
- ssrc: primarySsrc
- });
- }
-
- // we support both b=AS and b=TIAS but interpret AS as TIAS.
- let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');
- if (bandwidth.length) {
- if (bandwidth[0].indexOf('b=TIAS:') === 0) {
- bandwidth = parseInt(bandwidth[0].substr(7), 10);
- } else if (bandwidth[0].indexOf('b=AS:') === 0) {
- // use formula from JSEP to convert b=AS to TIAS value.
- bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95 - 50 * 40 * 8;
- } else {
- bandwidth = undefined;
- }
- encodingParameters.forEach(params => {
- params.maxBitrate = bandwidth;
- });
- }
- return encodingParameters;
- };
-
- // parses http://draft.ortc.org/#rtcrtcpparameters*
- SDPUtils.parseRtcpParameters = function (mediaSection) {
- const rtcpParameters = {};
-
- // Gets the first SSRC. Note that with RTX there might be multiple
- // SSRCs.
- const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(obj => obj.attribute === 'cname')[0];
- if (remoteSsrc) {
- rtcpParameters.cname = remoteSsrc.value;
- rtcpParameters.ssrc = remoteSsrc.ssrc;
- }
-
- // Edge uses the compound attribute instead of reducedSize
- // compound is !reducedSize
- const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');
- rtcpParameters.reducedSize = rsize.length > 0;
- rtcpParameters.compound = rsize.length === 0;
-
- // parses the rtcp-mux attrіbute.
- // Note that Edge does not support unmuxed RTCP.
- const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');
- rtcpParameters.mux = mux.length > 0;
- return rtcpParameters;
- };
- SDPUtils.writeRtcpParameters = function (rtcpParameters) {
- let sdp = '';
- if (rtcpParameters.reducedSize) {
- sdp += 'a=rtcp-rsize\r\n';
- }
- if (rtcpParameters.mux) {
- sdp += 'a=rtcp-mux\r\n';
- }
- if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {
- sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\r\n';
- }
- return sdp;
- };
-
- // parses either a=msid: or a=ssrc:... msid lines and returns
- // the id of the MediaStream and MediaStreamTrack.
- SDPUtils.parseMsid = function (mediaSection) {
- let parts;
- const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');
- if (spec.length === 1) {
- parts = spec[0].substr(7).split(' ');
- return {
- stream: parts[0],
- track: parts[1]
- };
- }
- const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(msidParts => msidParts.attribute === 'msid');
- if (planB.length > 0) {
- parts = planB[0].value.split(' ');
- return {
- stream: parts[0],
- track: parts[1]
- };
- }
- };
-
- // SCTP
- // parses draft-ietf-mmusic-sctp-sdp-26 first and falls back
- // to draft-ietf-mmusic-sctp-sdp-05
- SDPUtils.parseSctpDescription = function (mediaSection) {
- const mline = SDPUtils.parseMLine(mediaSection);
- const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');
- let maxMessageSize;
- if (maxSizeLine.length > 0) {
- maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);
- }
- if (isNaN(maxMessageSize)) {
- maxMessageSize = 65536;
- }
- const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');
- if (sctpPort.length > 0) {
- return {
- port: parseInt(sctpPort[0].substr(12), 10),
- protocol: mline.fmt,
- maxMessageSize
- };
- }
- const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');
- if (sctpMapLines.length > 0) {
- const parts = sctpMapLines[0].substr(10).split(' ');
- return {
- port: parseInt(parts[0], 10),
- protocol: parts[1],
- maxMessageSize
- };
- }
- };
-
- // SCTP
- // outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers
- // support by now receiving in this format, unless we originally parsed
- // as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line
- // protocol of DTLS/SCTP -- without UDP/ or TCP/)
- SDPUtils.writeSctpDescription = function (media, sctp) {
- let output = [];
- if (media.protocol !== 'DTLS/SCTP') {
- output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctp-port:' + sctp.port + '\r\n'];
- } else {
- output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\r\n'];
- }
- if (sctp.maxMessageSize !== undefined) {
- output.push('a=max-message-size:' + sctp.maxMessageSize + '\r\n');
- }
- return output.join('');
- };
-
- // Generate a session ID for SDP.
- // https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1
- // recommends using a cryptographically random +ve 64-bit value
- // but right now this should be acceptable and within the right range
- SDPUtils.generateSessionId = function () {
- return Math.random().toString().substr(2, 21);
- };
-
- // Write boiler plate for start of SDP
- // sessId argument is optional - if not supplied it will
- // be generated randomly
- // sessVersion is optional and defaults to 2
- // sessUser is optional and defaults to 'thisisadapterortc'
- SDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) {
- let sessionId;
- const version = sessVer !== undefined ? sessVer : 2;
- if (sessId) {
- sessionId = sessId;
- } else {
- sessionId = SDPUtils.generateSessionId();
- }
- const user = sessUser || 'thisisadapterortc';
- // FIXME: sess-id should be an NTP timestamp.
- return 'v=0\r\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\r\n' + 's=-\r\n' + 't=0 0\r\n';
- };
-
- // Gets the direction from the mediaSection or the sessionpart.
- SDPUtils.getDirection = function (mediaSection, sessionpart) {
- // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.
- const lines = SDPUtils.splitLines(mediaSection);
- for (let i = 0; i < lines.length; i++) {
- switch (lines[i]) {
- case 'a=sendrecv':
- case 'a=sendonly':
- case 'a=recvonly':
- case 'a=inactive':
- return lines[i].substr(2);
- // FIXME: What should happen here?
- }
- }
-
- if (sessionpart) {
- return SDPUtils.getDirection(sessionpart);
- }
- return 'sendrecv';
- };
- SDPUtils.getKind = function (mediaSection) {
- const lines = SDPUtils.splitLines(mediaSection);
- const mline = lines[0].split(' ');
- return mline[0].substr(2);
- };
- SDPUtils.isRejected = function (mediaSection) {
- return mediaSection.split(' ', 2)[1] === '0';
- };
- SDPUtils.parseMLine = function (mediaSection) {
- const lines = SDPUtils.splitLines(mediaSection);
- const parts = lines[0].substr(2).split(' ');
- return {
- kind: parts[0],
- port: parseInt(parts[1], 10),
- protocol: parts[2],
- fmt: parts.slice(3).join(' ')
- };
- };
- SDPUtils.parseOLine = function (mediaSection) {
- const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];
- const parts = line.substr(2).split(' ');
- return {
- username: parts[0],
- sessionId: parts[1],
- sessionVersion: parseInt(parts[2], 10),
- netType: parts[3],
- addressType: parts[4],
- address: parts[5]
- };
- };
-
- // a very naive interpretation of a valid SDP.
- SDPUtils.isValidSDP = function (blob) {
- if (typeof blob !== 'string' || blob.length === 0) {
- return false;
- }
- const lines = SDPUtils.splitLines(blob);
- for (let i = 0; i < lines.length; i++) {
- if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {
- return false;
- }
- // TODO: check the modifier a bit more.
- }
-
- return true;
- };
-
- // Expose public methods.
- {
- module.exports = SDPUtils;
- }
-})(sdp$1);
-var SDPUtils = sdpExports;
-
-var sdp = /*#__PURE__*/_mergeNamespaces({
- __proto__: null,
- default: SDPUtils
-}, [sdpExports]);
-
-/*
- * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
-function shimRTCIceCandidate(window) {
- // foundation is arbitrarily chosen as an indicator for full support for
- // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface
- if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) {
- return;
- }
- const NativeRTCIceCandidate = window.RTCIceCandidate;
- window.RTCIceCandidate = function RTCIceCandidate(args) {
- // Remove the a= which shouldn't be part of the candidate string.
- if (typeof args === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) {
- args = JSON.parse(JSON.stringify(args));
- args.candidate = args.candidate.substr(2);
- }
- if (args.candidate && args.candidate.length) {
- // Augment the native candidate with the parsed fields.
- const nativeCandidate = new NativeRTCIceCandidate(args);
- const parsedCandidate = SDPUtils.parseCandidate(args.candidate);
- const augmentedCandidate = Object.assign(nativeCandidate, parsedCandidate);
-
- // Add a serializer that does not serialize the extra attributes.
- augmentedCandidate.toJSON = function toJSON() {
- return {
- candidate: augmentedCandidate.candidate,
- sdpMid: augmentedCandidate.sdpMid,
- sdpMLineIndex: augmentedCandidate.sdpMLineIndex,
- usernameFragment: augmentedCandidate.usernameFragment
- };
- };
- return augmentedCandidate;
- }
- return new NativeRTCIceCandidate(args);
- };
- window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;
-
- // Hook up the augmented candidate in onicecandidate and
- // addEventListener('icecandidate', ...)
- wrapPeerConnectionEvent(window, 'icecandidate', e => {
- if (e.candidate) {
- Object.defineProperty(e, 'candidate', {
- value: new window.RTCIceCandidate(e.candidate),
- writable: 'false'
- });
- }
- return e;
- });
-}
-function shimMaxMessageSize(window, browserDetails) {
- if (!window.RTCPeerConnection) {
- return;
- }
- if (!('sctp' in window.RTCPeerConnection.prototype)) {
- Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {
- get() {
- return typeof this._sctp === 'undefined' ? null : this._sctp;
- }
- });
- }
- const sctpInDescription = function (description) {
- if (!description || !description.sdp) {
- return false;
- }
- const sections = SDPUtils.splitSections(description.sdp);
- sections.shift();
- return sections.some(mediaSection => {
- const mLine = SDPUtils.parseMLine(mediaSection);
- return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1;
- });
- };
- const getRemoteFirefoxVersion = function (description) {
- // TODO: Is there a better solution for detecting Firefox?
- const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);
- if (match === null || match.length < 2) {
- return -1;
- }
- const version = parseInt(match[1], 10);
- // Test for NaN (yes, this is ugly)
- return version !== version ? -1 : version;
- };
- const getCanSendMaxMessageSize = function (remoteIsFirefox) {
- // Every implementation we know can send at least 64 KiB.
- // Note: Although Chrome is technically able to send up to 256 KiB, the
- // data does not reach the other peer reliably.
- // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419
- let canSendMaxMessageSize = 65536;
- if (browserDetails.browser === 'firefox') {
- if (browserDetails.version < 57) {
- if (remoteIsFirefox === -1) {
- // FF < 57 will send in 16 KiB chunks using the deprecated PPID
- // fragmentation.
- canSendMaxMessageSize = 16384;
- } else {
- // However, other FF (and RAWRTC) can reassemble PPID-fragmented
- // messages. Thus, supporting ~2 GiB when sending.
- canSendMaxMessageSize = 2147483637;
- }
- } else if (browserDetails.version < 60) {
- // Currently, all FF >= 57 will reset the remote maximum message size
- // to the default value when a data channel is created at a later
- // stage. :(
- // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831
- canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;
- } else {
- // FF >= 60 supports sending ~2 GiB
- canSendMaxMessageSize = 2147483637;
- }
- }
- return canSendMaxMessageSize;
- };
- const getMaxMessageSize = function (description, remoteIsFirefox) {
- // Note: 65536 bytes is the default value from the SDP spec. Also,
- // every implementation we know supports receiving 65536 bytes.
- let maxMessageSize = 65536;
-
- // FF 57 has a slightly incorrect default remote max message size, so
- // we need to adjust it here to avoid a failure when sending.
- // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697
- if (browserDetails.browser === 'firefox' && browserDetails.version === 57) {
- maxMessageSize = 65535;
- }
- const match = SDPUtils.matchPrefix(description.sdp, 'a=max-message-size:');
- if (match.length > 0) {
- maxMessageSize = parseInt(match[0].substr(19), 10);
- } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) {
- // If the maximum message size is not present in the remote SDP and
- // both local and remote are Firefox, the remote peer can receive
- // ~2 GiB.
- maxMessageSize = 2147483637;
- }
- return maxMessageSize;
- };
- const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;
- window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {
- this._sctp = null;
- // Chrome decided to not expose .sctp in plan-b mode.
- // As usual, adapter.js has to do an 'ugly worakaround'
- // to cover up the mess.
- if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {
- const {
- sdpSemantics
- } = this.getConfiguration();
- if (sdpSemantics === 'plan-b') {
- Object.defineProperty(this, 'sctp', {
- get() {
- return typeof this._sctp === 'undefined' ? null : this._sctp;
- },
- enumerable: true,
- configurable: true
- });
- }
- }
- if (sctpInDescription(arguments[0])) {
- // Check if the remote is FF.
- const isFirefox = getRemoteFirefoxVersion(arguments[0]);
-
- // Get the maximum message size the local peer is capable of sending
- const canSendMMS = getCanSendMaxMessageSize(isFirefox);
-
- // Get the maximum message size of the remote peer.
- const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);
-
- // Determine final maximum message size
- let maxMessageSize;
- if (canSendMMS === 0 && remoteMMS === 0) {
- maxMessageSize = Number.POSITIVE_INFINITY;
- } else if (canSendMMS === 0 || remoteMMS === 0) {
- maxMessageSize = Math.max(canSendMMS, remoteMMS);
- } else {
- maxMessageSize = Math.min(canSendMMS, remoteMMS);
- }
-
- // Create a dummy RTCSctpTransport object and the 'maxMessageSize'
- // attribute.
- const sctp = {};
- Object.defineProperty(sctp, 'maxMessageSize', {
- get() {
- return maxMessageSize;
- }
- });
- this._sctp = sctp;
- }
- return origSetRemoteDescription.apply(this, arguments);
- };
-}
-function shimSendThrowTypeError(window) {
- if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) {
- return;
- }
-
- // Note: Although Firefox >= 57 has a native implementation, the maximum
- // message size can be reset for all data channels at a later stage.
- // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831
-
- function wrapDcSend(dc, pc) {
- const origDataChannelSend = dc.send;
- dc.send = function send() {
- const data = arguments[0];
- const length = data.length || data.size || data.byteLength;
- if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) {
- throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)');
- }
- return origDataChannelSend.apply(dc, arguments);
- };
- }
- const origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;
- window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {
- const dataChannel = origCreateDataChannel.apply(this, arguments);
- wrapDcSend(dataChannel, this);
- return dataChannel;
- };
- wrapPeerConnectionEvent(window, 'datachannel', e => {
- wrapDcSend(e.channel, e.target);
- return e;
- });
-}
-
-/* shims RTCConnectionState by pretending it is the same as iceConnectionState.
- * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12
- * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect
- * since DTLS failures would be hidden. See
- * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827
- * for the Firefox tracking bug.
- */
-function shimConnectionState(window) {
- if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) {
- return;
- }
- const proto = window.RTCPeerConnection.prototype;
- Object.defineProperty(proto, 'connectionState', {
- get() {
- return {
- completed: 'connected',
- checking: 'connecting'
- }[this.iceConnectionState] || this.iceConnectionState;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(proto, 'onconnectionstatechange', {
- get() {
- return this._onconnectionstatechange || null;
- },
- set(cb) {
- if (this._onconnectionstatechange) {
- this.removeEventListener('connectionstatechange', this._onconnectionstatechange);
- delete this._onconnectionstatechange;
- }
- if (cb) {
- this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb);
- }
- },
- enumerable: true,
- configurable: true
- });
- ['setLocalDescription', 'setRemoteDescription'].forEach(method => {
- const origMethod = proto[method];
- proto[method] = function () {
- if (!this._connectionstatechangepoly) {
- this._connectionstatechangepoly = e => {
- const pc = e.target;
- if (pc._lastConnectionState !== pc.connectionState) {
- pc._lastConnectionState = pc.connectionState;
- const newEvent = new Event('connectionstatechange', e);
- pc.dispatchEvent(newEvent);
- }
- return e;
- };
- this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly);
- }
- return origMethod.apply(this, arguments);
- };
- });
-}
-function removeExtmapAllowMixed(window, browserDetails) {
- /* remove a=extmap-allow-mixed for webrtc.org < M71 */
- if (!window.RTCPeerConnection) {
- return;
- }
- if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {
- return;
- }
- if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {
- return;
- }
- const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;
- window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {
- if (desc && desc.sdp && desc.sdp.indexOf('\na=extmap-allow-mixed') !== -1) {
- const sdp = desc.sdp.split('\n').filter(line => {
- return line.trim() !== 'a=extmap-allow-mixed';
- }).join('\n');
- // Safari enforces read-only-ness of RTCSessionDescription fields.
- if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) {
- arguments[0] = new window.RTCSessionDescription({
- type: desc.type,
- sdp
- });
- } else {
- desc.sdp = sdp;
- }
- }
- return nativeSRD.apply(this, arguments);
- };
-}
-function shimAddIceCandidateNullOrEmpty(window, browserDetails) {
- // Support for addIceCandidate(null or undefined)
- // as well as addIceCandidate({candidate: "", ...})
- // https://bugs.chromium.org/p/chromium/issues/detail?id=978582
- // Note: must be called before other polyfills which change the signature.
- if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {
- return;
- }
- const nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;
- if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {
- return;
- }
- window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {
- if (!arguments[0]) {
- if (arguments[1]) {
- arguments[1].apply(null);
- }
- return Promise.resolve();
- }
- // Firefox 68+ emits and processes {candidate: "", ...}, ignore
- // in older versions.
- // Native support for ignoring exists for Chrome M77+.
- // Safari ignores as well, exact version unknown but works in the same
- // version that also ignores addIceCandidate(null).
- if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') {
- return Promise.resolve();
- }
- return nativeAddIceCandidate.apply(this, arguments);
- };
-}
-
-// Note: Make sure to call this ahead of APIs that modify
-// setLocalDescription.length
-function shimParameterlessSetLocalDescription(window, browserDetails) {
- if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {
- return;
- }
- const nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;
- if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {
- return;
- }
- window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {
- let desc = arguments[0] || {};
- if (typeof desc !== 'object' || desc.type && desc.sdp) {
- return nativeSetLocalDescription.apply(this, arguments);
- }
- // The remaining steps should technically happen when SLD comes off the
- // RTCPeerConnection's operations chain (not ahead of going on it), but
- // this is too difficult to shim. Instead, this shim only covers the
- // common case where the operations chain is empty. This is imperfect, but
- // should cover many cases. Rationale: Even if we can't reduce the glare
- // window to zero on imperfect implementations, there's value in tapping
- // into the perfect negotiation pattern that several browsers support.
- desc = {
- type: desc.type,
- sdp: desc.sdp
- };
- if (!desc.type) {
- switch (this.signalingState) {
- case 'stable':
- case 'have-local-offer':
- case 'have-remote-pranswer':
- desc.type = 'offer';
- break;
- default:
- desc.type = 'answer';
- break;
- }
- }
- if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') {
- return nativeSetLocalDescription.apply(this, [desc]);
- }
- const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;
- return func.apply(this).then(d => nativeSetLocalDescription.apply(this, [d]));
- };
-}
-
-var commonShim = /*#__PURE__*/Object.freeze({
- __proto__: null,
- removeExtmapAllowMixed: removeExtmapAllowMixed,
- shimAddIceCandidateNullOrEmpty: shimAddIceCandidateNullOrEmpty,
- shimConnectionState: shimConnectionState,
- shimMaxMessageSize: shimMaxMessageSize,
- shimParameterlessSetLocalDescription: shimParameterlessSetLocalDescription,
- shimRTCIceCandidate: shimRTCIceCandidate,
- shimSendThrowTypeError: shimSendThrowTypeError
-});
-
-/*
- * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
-
-// Shimming starts here.
-function adapterFactory() {
- let {
- window
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
- shimChrome: true,
- shimFirefox: true,
- shimSafari: true
- };
- // Utils.
- const logging = log;
- const browserDetails = detectBrowser(window);
- const adapter = {
- browserDetails,
- commonShim,
- extractVersion: extractVersion,
- disableLog: disableLog,
- disableWarnings: disableWarnings,
- // Expose sdp as a convenience. For production apps include directly.
- sdp
- };
-
- // Shim browser if found.
- switch (browserDetails.browser) {
- case 'chrome':
- if (!chromeShim || !shimPeerConnection$1 || !options.shimChrome) {
- logging('Chrome shim is not included in this adapter release.');
- return adapter;
- }
- if (browserDetails.version === null) {
- logging('Chrome shim can not determine version, not shimming.');
- return adapter;
- }
- logging('adapter.js shimming chrome.');
- // Export to the adapter global object visible in the browser.
- adapter.browserShim = chromeShim;
-
- // Must be called before shimPeerConnection.
- shimAddIceCandidateNullOrEmpty(window, browserDetails);
- shimParameterlessSetLocalDescription(window);
- shimGetUserMedia$2(window, browserDetails);
- shimMediaStream(window);
- shimPeerConnection$1(window, browserDetails);
- shimOnTrack$1(window);
- shimAddTrackRemoveTrack(window, browserDetails);
- shimGetSendersWithDtmf(window);
- shimGetStats(window);
- shimSenderReceiverGetStats(window);
- fixNegotiationNeeded(window, browserDetails);
- shimRTCIceCandidate(window);
- shimConnectionState(window);
- shimMaxMessageSize(window, browserDetails);
- shimSendThrowTypeError(window);
- removeExtmapAllowMixed(window, browserDetails);
- break;
- case 'firefox':
- if (!firefoxShim || !shimPeerConnection || !options.shimFirefox) {
- logging('Firefox shim is not included in this adapter release.');
- return adapter;
- }
- logging('adapter.js shimming firefox.');
- // Export to the adapter global object visible in the browser.
- adapter.browserShim = firefoxShim;
-
- // Must be called before shimPeerConnection.
- shimAddIceCandidateNullOrEmpty(window, browserDetails);
- shimParameterlessSetLocalDescription(window);
- shimGetUserMedia$1(window, browserDetails);
- shimPeerConnection(window, browserDetails);
- shimOnTrack(window);
- shimRemoveStream(window);
- shimSenderGetStats(window);
- shimReceiverGetStats(window);
- shimRTCDataChannel(window);
- shimAddTransceiver(window);
- shimGetParameters(window);
- shimCreateOffer(window);
- shimCreateAnswer(window);
- shimRTCIceCandidate(window);
- shimConnectionState(window);
- shimMaxMessageSize(window, browserDetails);
- shimSendThrowTypeError(window);
- break;
- case 'safari':
- if (!safariShim || !options.shimSafari) {
- logging('Safari shim is not included in this adapter release.');
- return adapter;
- }
- logging('adapter.js shimming safari.');
- // Export to the adapter global object visible in the browser.
- adapter.browserShim = safariShim;
-
- // Must be called before shimCallbackAPI.
- shimAddIceCandidateNullOrEmpty(window, browserDetails);
- shimParameterlessSetLocalDescription(window);
- shimRTCIceServerUrls(window);
- shimCreateOfferLegacy(window);
- shimCallbacksAPI(window);
- shimLocalStreamsAPI(window);
- shimRemoteStreamsAPI(window);
- shimTrackEventTransceiver(window);
- shimGetUserMedia(window);
- shimAudioContext(window);
- shimRTCIceCandidate(window);
- shimMaxMessageSize(window, browserDetails);
- shimSendThrowTypeError(window);
- removeExtmapAllowMixed(window, browserDetails);
- break;
- default:
- logging('Unsupported browser!');
- break;
- }
- return adapter;
-}
-
-/*
- * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree.
- */
-adapterFactory({
- window: typeof window === 'undefined' ? undefined : window
-});
-
-/* eslint-disable */
-var SignalTarget;
-(function (SignalTarget) {
- SignalTarget[SignalTarget["PUBLISHER"] = 0] = "PUBLISHER";
- SignalTarget[SignalTarget["SUBSCRIBER"] = 1] = "SUBSCRIBER";
- SignalTarget[SignalTarget["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(SignalTarget || (SignalTarget = {}));
-function signalTargetFromJSON(object) {
- switch (object) {
- case 0:
- case "PUBLISHER":
- return SignalTarget.PUBLISHER;
- case 1:
- case "SUBSCRIBER":
- return SignalTarget.SUBSCRIBER;
- case -1:
- case "UNRECOGNIZED":
- default:
- return SignalTarget.UNRECOGNIZED;
- }
-}
-function signalTargetToJSON(object) {
- switch (object) {
- case SignalTarget.PUBLISHER:
- return "PUBLISHER";
- case SignalTarget.SUBSCRIBER:
- return "SUBSCRIBER";
- case SignalTarget.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var StreamState;
-(function (StreamState) {
- StreamState[StreamState["ACTIVE"] = 0] = "ACTIVE";
- StreamState[StreamState["PAUSED"] = 1] = "PAUSED";
- StreamState[StreamState["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(StreamState || (StreamState = {}));
-function streamStateFromJSON(object) {
- switch (object) {
- case 0:
- case "ACTIVE":
- return StreamState.ACTIVE;
- case 1:
- case "PAUSED":
- return StreamState.PAUSED;
- case -1:
- case "UNRECOGNIZED":
- default:
- return StreamState.UNRECOGNIZED;
- }
-}
-function streamStateToJSON(object) {
- switch (object) {
- case StreamState.ACTIVE:
- return "ACTIVE";
- case StreamState.PAUSED:
- return "PAUSED";
- case StreamState.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-var CandidateProtocol;
-(function (CandidateProtocol) {
- CandidateProtocol[CandidateProtocol["UDP"] = 0] = "UDP";
- CandidateProtocol[CandidateProtocol["TCP"] = 1] = "TCP";
- CandidateProtocol[CandidateProtocol["TLS"] = 2] = "TLS";
- CandidateProtocol[CandidateProtocol["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
-})(CandidateProtocol || (CandidateProtocol = {}));
-function candidateProtocolFromJSON(object) {
- switch (object) {
- case 0:
- case "UDP":
- return CandidateProtocol.UDP;
- case 1:
- case "TCP":
- return CandidateProtocol.TCP;
- case 2:
- case "TLS":
- return CandidateProtocol.TLS;
- case -1:
- case "UNRECOGNIZED":
- default:
- return CandidateProtocol.UNRECOGNIZED;
- }
-}
-function candidateProtocolToJSON(object) {
- switch (object) {
- case CandidateProtocol.UDP:
- return "UDP";
- case CandidateProtocol.TCP:
- return "TCP";
- case CandidateProtocol.TLS:
- return "TLS";
- case CandidateProtocol.UNRECOGNIZED:
- default:
- return "UNRECOGNIZED";
- }
-}
-function createBaseSignalRequest() {
- return {
- message: undefined
- };
-}
-const SignalRequest = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- var _a;
- switch ((_a = message.message) === null || _a === void 0 ? void 0 : _a.$case) {
- case "offer":
- SessionDescription.encode(message.message.offer, writer.uint32(10).fork()).ldelim();
- break;
- case "answer":
- SessionDescription.encode(message.message.answer, writer.uint32(18).fork()).ldelim();
- break;
- case "trickle":
- TrickleRequest.encode(message.message.trickle, writer.uint32(26).fork()).ldelim();
- break;
- case "addTrack":
- AddTrackRequest.encode(message.message.addTrack, writer.uint32(34).fork()).ldelim();
- break;
- case "mute":
- MuteTrackRequest.encode(message.message.mute, writer.uint32(42).fork()).ldelim();
- break;
- case "subscription":
- UpdateSubscription.encode(message.message.subscription, writer.uint32(50).fork()).ldelim();
- break;
- case "trackSetting":
- UpdateTrackSettings.encode(message.message.trackSetting, writer.uint32(58).fork()).ldelim();
- break;
- case "leave":
- LeaveRequest.encode(message.message.leave, writer.uint32(66).fork()).ldelim();
- break;
- case "updateLayers":
- UpdateVideoLayers.encode(message.message.updateLayers, writer.uint32(82).fork()).ldelim();
- break;
- case "subscriptionPermission":
- SubscriptionPermission.encode(message.message.subscriptionPermission, writer.uint32(90).fork()).ldelim();
- break;
- case "syncState":
- SyncState.encode(message.message.syncState, writer.uint32(98).fork()).ldelim();
- break;
- case "simulate":
- SimulateScenario.encode(message.message.simulate, writer.uint32(106).fork()).ldelim();
- break;
- case "ping":
- writer.uint32(112).int64(message.message.ping);
- break;
- case "updateMetadata":
- UpdateParticipantMetadata.encode(message.message.updateMetadata, writer.uint32(122).fork()).ldelim();
- break;
- case "pingReq":
- Ping.encode(message.message.pingReq, writer.uint32(130).fork()).ldelim();
- break;
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSignalRequest();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.message = {
- $case: "offer",
- offer: SessionDescription.decode(reader, reader.uint32())
- };
- break;
- case 2:
- message.message = {
- $case: "answer",
- answer: SessionDescription.decode(reader, reader.uint32())
- };
- break;
- case 3:
- message.message = {
- $case: "trickle",
- trickle: TrickleRequest.decode(reader, reader.uint32())
- };
- break;
- case 4:
- message.message = {
- $case: "addTrack",
- addTrack: AddTrackRequest.decode(reader, reader.uint32())
- };
- break;
- case 5:
- message.message = {
- $case: "mute",
- mute: MuteTrackRequest.decode(reader, reader.uint32())
- };
- break;
- case 6:
- message.message = {
- $case: "subscription",
- subscription: UpdateSubscription.decode(reader, reader.uint32())
- };
- break;
- case 7:
- message.message = {
- $case: "trackSetting",
- trackSetting: UpdateTrackSettings.decode(reader, reader.uint32())
- };
- break;
- case 8:
- message.message = {
- $case: "leave",
- leave: LeaveRequest.decode(reader, reader.uint32())
- };
- break;
- case 10:
- message.message = {
- $case: "updateLayers",
- updateLayers: UpdateVideoLayers.decode(reader, reader.uint32())
- };
- break;
- case 11:
- message.message = {
- $case: "subscriptionPermission",
- subscriptionPermission: SubscriptionPermission.decode(reader, reader.uint32())
- };
- break;
- case 12:
- message.message = {
- $case: "syncState",
- syncState: SyncState.decode(reader, reader.uint32())
- };
- break;
- case 13:
- message.message = {
- $case: "simulate",
- simulate: SimulateScenario.decode(reader, reader.uint32())
- };
- break;
- case 14:
- message.message = {
- $case: "ping",
- ping: longToNumber(reader.int64())
- };
- break;
- case 15:
- message.message = {
- $case: "updateMetadata",
- updateMetadata: UpdateParticipantMetadata.decode(reader, reader.uint32())
- };
- break;
- case 16:
- message.message = {
- $case: "pingReq",
- pingReq: Ping.decode(reader, reader.uint32())
- };
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- message: isSet(object.offer) ? {
- $case: "offer",
- offer: SessionDescription.fromJSON(object.offer)
- } : isSet(object.answer) ? {
- $case: "answer",
- answer: SessionDescription.fromJSON(object.answer)
- } : isSet(object.trickle) ? {
- $case: "trickle",
- trickle: TrickleRequest.fromJSON(object.trickle)
- } : isSet(object.addTrack) ? {
- $case: "addTrack",
- addTrack: AddTrackRequest.fromJSON(object.addTrack)
- } : isSet(object.mute) ? {
- $case: "mute",
- mute: MuteTrackRequest.fromJSON(object.mute)
- } : isSet(object.subscription) ? {
- $case: "subscription",
- subscription: UpdateSubscription.fromJSON(object.subscription)
- } : isSet(object.trackSetting) ? {
- $case: "trackSetting",
- trackSetting: UpdateTrackSettings.fromJSON(object.trackSetting)
- } : isSet(object.leave) ? {
- $case: "leave",
- leave: LeaveRequest.fromJSON(object.leave)
- } : isSet(object.updateLayers) ? {
- $case: "updateLayers",
- updateLayers: UpdateVideoLayers.fromJSON(object.updateLayers)
- } : isSet(object.subscriptionPermission) ? {
- $case: "subscriptionPermission",
- subscriptionPermission: SubscriptionPermission.fromJSON(object.subscriptionPermission)
- } : isSet(object.syncState) ? {
- $case: "syncState",
- syncState: SyncState.fromJSON(object.syncState)
- } : isSet(object.simulate) ? {
- $case: "simulate",
- simulate: SimulateScenario.fromJSON(object.simulate)
- } : isSet(object.ping) ? {
- $case: "ping",
- ping: Number(object.ping)
- } : isSet(object.updateMetadata) ? {
- $case: "updateMetadata",
- updateMetadata: UpdateParticipantMetadata.fromJSON(object.updateMetadata)
- } : isSet(object.pingReq) ? {
- $case: "pingReq",
- pingReq: Ping.fromJSON(object.pingReq)
- } : undefined
- };
- },
- toJSON(message) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19;
- const obj = {};
- ((_a = message.message) === null || _a === void 0 ? void 0 : _a.$case) === "offer" && (obj.offer = ((_b = message.message) === null || _b === void 0 ? void 0 : _b.offer) ? SessionDescription.toJSON((_c = message.message) === null || _c === void 0 ? void 0 : _c.offer) : undefined);
- ((_d = message.message) === null || _d === void 0 ? void 0 : _d.$case) === "answer" && (obj.answer = ((_e = message.message) === null || _e === void 0 ? void 0 : _e.answer) ? SessionDescription.toJSON((_f = message.message) === null || _f === void 0 ? void 0 : _f.answer) : undefined);
- ((_g = message.message) === null || _g === void 0 ? void 0 : _g.$case) === "trickle" && (obj.trickle = ((_h = message.message) === null || _h === void 0 ? void 0 : _h.trickle) ? TrickleRequest.toJSON((_j = message.message) === null || _j === void 0 ? void 0 : _j.trickle) : undefined);
- ((_k = message.message) === null || _k === void 0 ? void 0 : _k.$case) === "addTrack" && (obj.addTrack = ((_l = message.message) === null || _l === void 0 ? void 0 : _l.addTrack) ? AddTrackRequest.toJSON((_m = message.message) === null || _m === void 0 ? void 0 : _m.addTrack) : undefined);
- ((_o = message.message) === null || _o === void 0 ? void 0 : _o.$case) === "mute" && (obj.mute = ((_p = message.message) === null || _p === void 0 ? void 0 : _p.mute) ? MuteTrackRequest.toJSON((_q = message.message) === null || _q === void 0 ? void 0 : _q.mute) : undefined);
- ((_r = message.message) === null || _r === void 0 ? void 0 : _r.$case) === "subscription" && (obj.subscription = ((_s = message.message) === null || _s === void 0 ? void 0 : _s.subscription) ? UpdateSubscription.toJSON((_t = message.message) === null || _t === void 0 ? void 0 : _t.subscription) : undefined);
- ((_u = message.message) === null || _u === void 0 ? void 0 : _u.$case) === "trackSetting" && (obj.trackSetting = ((_v = message.message) === null || _v === void 0 ? void 0 : _v.trackSetting) ? UpdateTrackSettings.toJSON((_w = message.message) === null || _w === void 0 ? void 0 : _w.trackSetting) : undefined);
- ((_x = message.message) === null || _x === void 0 ? void 0 : _x.$case) === "leave" && (obj.leave = ((_y = message.message) === null || _y === void 0 ? void 0 : _y.leave) ? LeaveRequest.toJSON((_z = message.message) === null || _z === void 0 ? void 0 : _z.leave) : undefined);
- ((_0 = message.message) === null || _0 === void 0 ? void 0 : _0.$case) === "updateLayers" && (obj.updateLayers = ((_1 = message.message) === null || _1 === void 0 ? void 0 : _1.updateLayers) ? UpdateVideoLayers.toJSON((_2 = message.message) === null || _2 === void 0 ? void 0 : _2.updateLayers) : undefined);
- ((_3 = message.message) === null || _3 === void 0 ? void 0 : _3.$case) === "subscriptionPermission" && (obj.subscriptionPermission = ((_4 = message.message) === null || _4 === void 0 ? void 0 : _4.subscriptionPermission) ? SubscriptionPermission.toJSON((_5 = message.message) === null || _5 === void 0 ? void 0 : _5.subscriptionPermission) : undefined);
- ((_6 = message.message) === null || _6 === void 0 ? void 0 : _6.$case) === "syncState" && (obj.syncState = ((_7 = message.message) === null || _7 === void 0 ? void 0 : _7.syncState) ? SyncState.toJSON((_8 = message.message) === null || _8 === void 0 ? void 0 : _8.syncState) : undefined);
- ((_9 = message.message) === null || _9 === void 0 ? void 0 : _9.$case) === "simulate" && (obj.simulate = ((_10 = message.message) === null || _10 === void 0 ? void 0 : _10.simulate) ? SimulateScenario.toJSON((_11 = message.message) === null || _11 === void 0 ? void 0 : _11.simulate) : undefined);
- ((_12 = message.message) === null || _12 === void 0 ? void 0 : _12.$case) === "ping" && (obj.ping = Math.round((_13 = message.message) === null || _13 === void 0 ? void 0 : _13.ping));
- ((_14 = message.message) === null || _14 === void 0 ? void 0 : _14.$case) === "updateMetadata" && (obj.updateMetadata = ((_15 = message.message) === null || _15 === void 0 ? void 0 : _15.updateMetadata) ? UpdateParticipantMetadata.toJSON((_16 = message.message) === null || _16 === void 0 ? void 0 : _16.updateMetadata) : undefined);
- ((_17 = message.message) === null || _17 === void 0 ? void 0 : _17.$case) === "pingReq" && (obj.pingReq = ((_18 = message.message) === null || _18 === void 0 ? void 0 : _18.pingReq) ? Ping.toJSON((_19 = message.message) === null || _19 === void 0 ? void 0 : _19.pingReq) : undefined);
- return obj;
- },
- create(base) {
- return SignalRequest.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20;
- const message = createBaseSignalRequest();
- if (((_a = object.message) === null || _a === void 0 ? void 0 : _a.$case) === "offer" && ((_b = object.message) === null || _b === void 0 ? void 0 : _b.offer) !== undefined && ((_c = object.message) === null || _c === void 0 ? void 0 : _c.offer) !== null) {
- message.message = {
- $case: "offer",
- offer: SessionDescription.fromPartial(object.message.offer)
- };
- }
- if (((_d = object.message) === null || _d === void 0 ? void 0 : _d.$case) === "answer" && ((_e = object.message) === null || _e === void 0 ? void 0 : _e.answer) !== undefined && ((_f = object.message) === null || _f === void 0 ? void 0 : _f.answer) !== null) {
- message.message = {
- $case: "answer",
- answer: SessionDescription.fromPartial(object.message.answer)
- };
- }
- if (((_g = object.message) === null || _g === void 0 ? void 0 : _g.$case) === "trickle" && ((_h = object.message) === null || _h === void 0 ? void 0 : _h.trickle) !== undefined && ((_j = object.message) === null || _j === void 0 ? void 0 : _j.trickle) !== null) {
- message.message = {
- $case: "trickle",
- trickle: TrickleRequest.fromPartial(object.message.trickle)
- };
- }
- if (((_k = object.message) === null || _k === void 0 ? void 0 : _k.$case) === "addTrack" && ((_l = object.message) === null || _l === void 0 ? void 0 : _l.addTrack) !== undefined && ((_m = object.message) === null || _m === void 0 ? void 0 : _m.addTrack) !== null) {
- message.message = {
- $case: "addTrack",
- addTrack: AddTrackRequest.fromPartial(object.message.addTrack)
- };
- }
- if (((_o = object.message) === null || _o === void 0 ? void 0 : _o.$case) === "mute" && ((_p = object.message) === null || _p === void 0 ? void 0 : _p.mute) !== undefined && ((_q = object.message) === null || _q === void 0 ? void 0 : _q.mute) !== null) {
- message.message = {
- $case: "mute",
- mute: MuteTrackRequest.fromPartial(object.message.mute)
- };
- }
- if (((_r = object.message) === null || _r === void 0 ? void 0 : _r.$case) === "subscription" && ((_s = object.message) === null || _s === void 0 ? void 0 : _s.subscription) !== undefined && ((_t = object.message) === null || _t === void 0 ? void 0 : _t.subscription) !== null) {
- message.message = {
- $case: "subscription",
- subscription: UpdateSubscription.fromPartial(object.message.subscription)
- };
- }
- if (((_u = object.message) === null || _u === void 0 ? void 0 : _u.$case) === "trackSetting" && ((_v = object.message) === null || _v === void 0 ? void 0 : _v.trackSetting) !== undefined && ((_w = object.message) === null || _w === void 0 ? void 0 : _w.trackSetting) !== null) {
- message.message = {
- $case: "trackSetting",
- trackSetting: UpdateTrackSettings.fromPartial(object.message.trackSetting)
- };
- }
- if (((_x = object.message) === null || _x === void 0 ? void 0 : _x.$case) === "leave" && ((_y = object.message) === null || _y === void 0 ? void 0 : _y.leave) !== undefined && ((_z = object.message) === null || _z === void 0 ? void 0 : _z.leave) !== null) {
- message.message = {
- $case: "leave",
- leave: LeaveRequest.fromPartial(object.message.leave)
- };
- }
- if (((_0 = object.message) === null || _0 === void 0 ? void 0 : _0.$case) === "updateLayers" && ((_1 = object.message) === null || _1 === void 0 ? void 0 : _1.updateLayers) !== undefined && ((_2 = object.message) === null || _2 === void 0 ? void 0 : _2.updateLayers) !== null) {
- message.message = {
- $case: "updateLayers",
- updateLayers: UpdateVideoLayers.fromPartial(object.message.updateLayers)
- };
- }
- if (((_3 = object.message) === null || _3 === void 0 ? void 0 : _3.$case) === "subscriptionPermission" && ((_4 = object.message) === null || _4 === void 0 ? void 0 : _4.subscriptionPermission) !== undefined && ((_5 = object.message) === null || _5 === void 0 ? void 0 : _5.subscriptionPermission) !== null) {
- message.message = {
- $case: "subscriptionPermission",
- subscriptionPermission: SubscriptionPermission.fromPartial(object.message.subscriptionPermission)
- };
- }
- if (((_6 = object.message) === null || _6 === void 0 ? void 0 : _6.$case) === "syncState" && ((_7 = object.message) === null || _7 === void 0 ? void 0 : _7.syncState) !== undefined && ((_8 = object.message) === null || _8 === void 0 ? void 0 : _8.syncState) !== null) {
- message.message = {
- $case: "syncState",
- syncState: SyncState.fromPartial(object.message.syncState)
- };
- }
- if (((_9 = object.message) === null || _9 === void 0 ? void 0 : _9.$case) === "simulate" && ((_10 = object.message) === null || _10 === void 0 ? void 0 : _10.simulate) !== undefined && ((_11 = object.message) === null || _11 === void 0 ? void 0 : _11.simulate) !== null) {
- message.message = {
- $case: "simulate",
- simulate: SimulateScenario.fromPartial(object.message.simulate)
- };
- }
- if (((_12 = object.message) === null || _12 === void 0 ? void 0 : _12.$case) === "ping" && ((_13 = object.message) === null || _13 === void 0 ? void 0 : _13.ping) !== undefined && ((_14 = object.message) === null || _14 === void 0 ? void 0 : _14.ping) !== null) {
- message.message = {
- $case: "ping",
- ping: object.message.ping
- };
- }
- if (((_15 = object.message) === null || _15 === void 0 ? void 0 : _15.$case) === "updateMetadata" && ((_16 = object.message) === null || _16 === void 0 ? void 0 : _16.updateMetadata) !== undefined && ((_17 = object.message) === null || _17 === void 0 ? void 0 : _17.updateMetadata) !== null) {
- message.message = {
- $case: "updateMetadata",
- updateMetadata: UpdateParticipantMetadata.fromPartial(object.message.updateMetadata)
- };
- }
- if (((_18 = object.message) === null || _18 === void 0 ? void 0 : _18.$case) === "pingReq" && ((_19 = object.message) === null || _19 === void 0 ? void 0 : _19.pingReq) !== undefined && ((_20 = object.message) === null || _20 === void 0 ? void 0 : _20.pingReq) !== null) {
- message.message = {
- $case: "pingReq",
- pingReq: Ping.fromPartial(object.message.pingReq)
- };
- }
- return message;
- }
-};
-function createBaseSignalResponse() {
- return {
- message: undefined
- };
-}
-const SignalResponse = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- var _a;
- switch ((_a = message.message) === null || _a === void 0 ? void 0 : _a.$case) {
- case "join":
- JoinResponse.encode(message.message.join, writer.uint32(10).fork()).ldelim();
- break;
- case "answer":
- SessionDescription.encode(message.message.answer, writer.uint32(18).fork()).ldelim();
- break;
- case "offer":
- SessionDescription.encode(message.message.offer, writer.uint32(26).fork()).ldelim();
- break;
- case "trickle":
- TrickleRequest.encode(message.message.trickle, writer.uint32(34).fork()).ldelim();
- break;
- case "update":
- ParticipantUpdate.encode(message.message.update, writer.uint32(42).fork()).ldelim();
- break;
- case "trackPublished":
- TrackPublishedResponse.encode(message.message.trackPublished, writer.uint32(50).fork()).ldelim();
- break;
- case "leave":
- LeaveRequest.encode(message.message.leave, writer.uint32(66).fork()).ldelim();
- break;
- case "mute":
- MuteTrackRequest.encode(message.message.mute, writer.uint32(74).fork()).ldelim();
- break;
- case "speakersChanged":
- SpeakersChanged.encode(message.message.speakersChanged, writer.uint32(82).fork()).ldelim();
- break;
- case "roomUpdate":
- RoomUpdate.encode(message.message.roomUpdate, writer.uint32(90).fork()).ldelim();
- break;
- case "connectionQuality":
- ConnectionQualityUpdate.encode(message.message.connectionQuality, writer.uint32(98).fork()).ldelim();
- break;
- case "streamStateUpdate":
- StreamStateUpdate.encode(message.message.streamStateUpdate, writer.uint32(106).fork()).ldelim();
- break;
- case "subscribedQualityUpdate":
- SubscribedQualityUpdate.encode(message.message.subscribedQualityUpdate, writer.uint32(114).fork()).ldelim();
- break;
- case "subscriptionPermissionUpdate":
- SubscriptionPermissionUpdate.encode(message.message.subscriptionPermissionUpdate, writer.uint32(122).fork()).ldelim();
- break;
- case "refreshToken":
- writer.uint32(130).string(message.message.refreshToken);
- break;
- case "trackUnpublished":
- TrackUnpublishedResponse.encode(message.message.trackUnpublished, writer.uint32(138).fork()).ldelim();
- break;
- case "pong":
- writer.uint32(144).int64(message.message.pong);
- break;
- case "reconnect":
- ReconnectResponse.encode(message.message.reconnect, writer.uint32(154).fork()).ldelim();
- break;
- case "pongResp":
- Pong.encode(message.message.pongResp, writer.uint32(162).fork()).ldelim();
- break;
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSignalResponse();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.message = {
- $case: "join",
- join: JoinResponse.decode(reader, reader.uint32())
- };
- break;
- case 2:
- message.message = {
- $case: "answer",
- answer: SessionDescription.decode(reader, reader.uint32())
- };
- break;
- case 3:
- message.message = {
- $case: "offer",
- offer: SessionDescription.decode(reader, reader.uint32())
- };
- break;
- case 4:
- message.message = {
- $case: "trickle",
- trickle: TrickleRequest.decode(reader, reader.uint32())
- };
- break;
- case 5:
- message.message = {
- $case: "update",
- update: ParticipantUpdate.decode(reader, reader.uint32())
- };
- break;
- case 6:
- message.message = {
- $case: "trackPublished",
- trackPublished: TrackPublishedResponse.decode(reader, reader.uint32())
- };
- break;
- case 8:
- message.message = {
- $case: "leave",
- leave: LeaveRequest.decode(reader, reader.uint32())
- };
- break;
- case 9:
- message.message = {
- $case: "mute",
- mute: MuteTrackRequest.decode(reader, reader.uint32())
- };
- break;
- case 10:
- message.message = {
- $case: "speakersChanged",
- speakersChanged: SpeakersChanged.decode(reader, reader.uint32())
- };
- break;
- case 11:
- message.message = {
- $case: "roomUpdate",
- roomUpdate: RoomUpdate.decode(reader, reader.uint32())
- };
- break;
- case 12:
- message.message = {
- $case: "connectionQuality",
- connectionQuality: ConnectionQualityUpdate.decode(reader, reader.uint32())
- };
- break;
- case 13:
- message.message = {
- $case: "streamStateUpdate",
- streamStateUpdate: StreamStateUpdate.decode(reader, reader.uint32())
- };
- break;
- case 14:
- message.message = {
- $case: "subscribedQualityUpdate",
- subscribedQualityUpdate: SubscribedQualityUpdate.decode(reader, reader.uint32())
- };
- break;
- case 15:
- message.message = {
- $case: "subscriptionPermissionUpdate",
- subscriptionPermissionUpdate: SubscriptionPermissionUpdate.decode(reader, reader.uint32())
- };
- break;
- case 16:
- message.message = {
- $case: "refreshToken",
- refreshToken: reader.string()
- };
- break;
- case 17:
- message.message = {
- $case: "trackUnpublished",
- trackUnpublished: TrackUnpublishedResponse.decode(reader, reader.uint32())
- };
- break;
- case 18:
- message.message = {
- $case: "pong",
- pong: longToNumber(reader.int64())
- };
- break;
- case 19:
- message.message = {
- $case: "reconnect",
- reconnect: ReconnectResponse.decode(reader, reader.uint32())
- };
- break;
- case 20:
- message.message = {
- $case: "pongResp",
- pongResp: Pong.decode(reader, reader.uint32())
- };
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- message: isSet(object.join) ? {
- $case: "join",
- join: JoinResponse.fromJSON(object.join)
- } : isSet(object.answer) ? {
- $case: "answer",
- answer: SessionDescription.fromJSON(object.answer)
- } : isSet(object.offer) ? {
- $case: "offer",
- offer: SessionDescription.fromJSON(object.offer)
- } : isSet(object.trickle) ? {
- $case: "trickle",
- trickle: TrickleRequest.fromJSON(object.trickle)
- } : isSet(object.update) ? {
- $case: "update",
- update: ParticipantUpdate.fromJSON(object.update)
- } : isSet(object.trackPublished) ? {
- $case: "trackPublished",
- trackPublished: TrackPublishedResponse.fromJSON(object.trackPublished)
- } : isSet(object.leave) ? {
- $case: "leave",
- leave: LeaveRequest.fromJSON(object.leave)
- } : isSet(object.mute) ? {
- $case: "mute",
- mute: MuteTrackRequest.fromJSON(object.mute)
- } : isSet(object.speakersChanged) ? {
- $case: "speakersChanged",
- speakersChanged: SpeakersChanged.fromJSON(object.speakersChanged)
- } : isSet(object.roomUpdate) ? {
- $case: "roomUpdate",
- roomUpdate: RoomUpdate.fromJSON(object.roomUpdate)
- } : isSet(object.connectionQuality) ? {
- $case: "connectionQuality",
- connectionQuality: ConnectionQualityUpdate.fromJSON(object.connectionQuality)
- } : isSet(object.streamStateUpdate) ? {
- $case: "streamStateUpdate",
- streamStateUpdate: StreamStateUpdate.fromJSON(object.streamStateUpdate)
- } : isSet(object.subscribedQualityUpdate) ? {
- $case: "subscribedQualityUpdate",
- subscribedQualityUpdate: SubscribedQualityUpdate.fromJSON(object.subscribedQualityUpdate)
- } : isSet(object.subscriptionPermissionUpdate) ? {
- $case: "subscriptionPermissionUpdate",
- subscriptionPermissionUpdate: SubscriptionPermissionUpdate.fromJSON(object.subscriptionPermissionUpdate)
- } : isSet(object.refreshToken) ? {
- $case: "refreshToken",
- refreshToken: String(object.refreshToken)
- } : isSet(object.trackUnpublished) ? {
- $case: "trackUnpublished",
- trackUnpublished: TrackUnpublishedResponse.fromJSON(object.trackUnpublished)
- } : isSet(object.pong) ? {
- $case: "pong",
- pong: Number(object.pong)
- } : isSet(object.reconnect) ? {
- $case: "reconnect",
- reconnect: ReconnectResponse.fromJSON(object.reconnect)
- } : isSet(object.pongResp) ? {
- $case: "pongResp",
- pongResp: Pong.fromJSON(object.pongResp)
- } : undefined
- };
- },
- toJSON(message) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30;
- const obj = {};
- ((_a = message.message) === null || _a === void 0 ? void 0 : _a.$case) === "join" && (obj.join = ((_b = message.message) === null || _b === void 0 ? void 0 : _b.join) ? JoinResponse.toJSON((_c = message.message) === null || _c === void 0 ? void 0 : _c.join) : undefined);
- ((_d = message.message) === null || _d === void 0 ? void 0 : _d.$case) === "answer" && (obj.answer = ((_e = message.message) === null || _e === void 0 ? void 0 : _e.answer) ? SessionDescription.toJSON((_f = message.message) === null || _f === void 0 ? void 0 : _f.answer) : undefined);
- ((_g = message.message) === null || _g === void 0 ? void 0 : _g.$case) === "offer" && (obj.offer = ((_h = message.message) === null || _h === void 0 ? void 0 : _h.offer) ? SessionDescription.toJSON((_j = message.message) === null || _j === void 0 ? void 0 : _j.offer) : undefined);
- ((_k = message.message) === null || _k === void 0 ? void 0 : _k.$case) === "trickle" && (obj.trickle = ((_l = message.message) === null || _l === void 0 ? void 0 : _l.trickle) ? TrickleRequest.toJSON((_m = message.message) === null || _m === void 0 ? void 0 : _m.trickle) : undefined);
- ((_o = message.message) === null || _o === void 0 ? void 0 : _o.$case) === "update" && (obj.update = ((_p = message.message) === null || _p === void 0 ? void 0 : _p.update) ? ParticipantUpdate.toJSON((_q = message.message) === null || _q === void 0 ? void 0 : _q.update) : undefined);
- ((_r = message.message) === null || _r === void 0 ? void 0 : _r.$case) === "trackPublished" && (obj.trackPublished = ((_s = message.message) === null || _s === void 0 ? void 0 : _s.trackPublished) ? TrackPublishedResponse.toJSON((_t = message.message) === null || _t === void 0 ? void 0 : _t.trackPublished) : undefined);
- ((_u = message.message) === null || _u === void 0 ? void 0 : _u.$case) === "leave" && (obj.leave = ((_v = message.message) === null || _v === void 0 ? void 0 : _v.leave) ? LeaveRequest.toJSON((_w = message.message) === null || _w === void 0 ? void 0 : _w.leave) : undefined);
- ((_x = message.message) === null || _x === void 0 ? void 0 : _x.$case) === "mute" && (obj.mute = ((_y = message.message) === null || _y === void 0 ? void 0 : _y.mute) ? MuteTrackRequest.toJSON((_z = message.message) === null || _z === void 0 ? void 0 : _z.mute) : undefined);
- ((_0 = message.message) === null || _0 === void 0 ? void 0 : _0.$case) === "speakersChanged" && (obj.speakersChanged = ((_1 = message.message) === null || _1 === void 0 ? void 0 : _1.speakersChanged) ? SpeakersChanged.toJSON((_2 = message.message) === null || _2 === void 0 ? void 0 : _2.speakersChanged) : undefined);
- ((_3 = message.message) === null || _3 === void 0 ? void 0 : _3.$case) === "roomUpdate" && (obj.roomUpdate = ((_4 = message.message) === null || _4 === void 0 ? void 0 : _4.roomUpdate) ? RoomUpdate.toJSON((_5 = message.message) === null || _5 === void 0 ? void 0 : _5.roomUpdate) : undefined);
- ((_6 = message.message) === null || _6 === void 0 ? void 0 : _6.$case) === "connectionQuality" && (obj.connectionQuality = ((_7 = message.message) === null || _7 === void 0 ? void 0 : _7.connectionQuality) ? ConnectionQualityUpdate.toJSON((_8 = message.message) === null || _8 === void 0 ? void 0 : _8.connectionQuality) : undefined);
- ((_9 = message.message) === null || _9 === void 0 ? void 0 : _9.$case) === "streamStateUpdate" && (obj.streamStateUpdate = ((_10 = message.message) === null || _10 === void 0 ? void 0 : _10.streamStateUpdate) ? StreamStateUpdate.toJSON((_11 = message.message) === null || _11 === void 0 ? void 0 : _11.streamStateUpdate) : undefined);
- ((_12 = message.message) === null || _12 === void 0 ? void 0 : _12.$case) === "subscribedQualityUpdate" && (obj.subscribedQualityUpdate = ((_13 = message.message) === null || _13 === void 0 ? void 0 : _13.subscribedQualityUpdate) ? SubscribedQualityUpdate.toJSON((_14 = message.message) === null || _14 === void 0 ? void 0 : _14.subscribedQualityUpdate) : undefined);
- ((_15 = message.message) === null || _15 === void 0 ? void 0 : _15.$case) === "subscriptionPermissionUpdate" && (obj.subscriptionPermissionUpdate = ((_16 = message.message) === null || _16 === void 0 ? void 0 : _16.subscriptionPermissionUpdate) ? SubscriptionPermissionUpdate.toJSON((_17 = message.message) === null || _17 === void 0 ? void 0 : _17.subscriptionPermissionUpdate) : undefined);
- ((_18 = message.message) === null || _18 === void 0 ? void 0 : _18.$case) === "refreshToken" && (obj.refreshToken = (_19 = message.message) === null || _19 === void 0 ? void 0 : _19.refreshToken);
- ((_20 = message.message) === null || _20 === void 0 ? void 0 : _20.$case) === "trackUnpublished" && (obj.trackUnpublished = ((_21 = message.message) === null || _21 === void 0 ? void 0 : _21.trackUnpublished) ? TrackUnpublishedResponse.toJSON((_22 = message.message) === null || _22 === void 0 ? void 0 : _22.trackUnpublished) : undefined);
- ((_23 = message.message) === null || _23 === void 0 ? void 0 : _23.$case) === "pong" && (obj.pong = Math.round((_24 = message.message) === null || _24 === void 0 ? void 0 : _24.pong));
- ((_25 = message.message) === null || _25 === void 0 ? void 0 : _25.$case) === "reconnect" && (obj.reconnect = ((_26 = message.message) === null || _26 === void 0 ? void 0 : _26.reconnect) ? ReconnectResponse.toJSON((_27 = message.message) === null || _27 === void 0 ? void 0 : _27.reconnect) : undefined);
- ((_28 = message.message) === null || _28 === void 0 ? void 0 : _28.$case) === "pongResp" && (obj.pongResp = ((_29 = message.message) === null || _29 === void 0 ? void 0 : _29.pongResp) ? Pong.toJSON((_30 = message.message) === null || _30 === void 0 ? void 0 : _30.pongResp) : undefined);
- return obj;
- },
- create(base) {
- return SignalResponse.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32;
- const message = createBaseSignalResponse();
- if (((_a = object.message) === null || _a === void 0 ? void 0 : _a.$case) === "join" && ((_b = object.message) === null || _b === void 0 ? void 0 : _b.join) !== undefined && ((_c = object.message) === null || _c === void 0 ? void 0 : _c.join) !== null) {
- message.message = {
- $case: "join",
- join: JoinResponse.fromPartial(object.message.join)
- };
- }
- if (((_d = object.message) === null || _d === void 0 ? void 0 : _d.$case) === "answer" && ((_e = object.message) === null || _e === void 0 ? void 0 : _e.answer) !== undefined && ((_f = object.message) === null || _f === void 0 ? void 0 : _f.answer) !== null) {
- message.message = {
- $case: "answer",
- answer: SessionDescription.fromPartial(object.message.answer)
- };
- }
- if (((_g = object.message) === null || _g === void 0 ? void 0 : _g.$case) === "offer" && ((_h = object.message) === null || _h === void 0 ? void 0 : _h.offer) !== undefined && ((_j = object.message) === null || _j === void 0 ? void 0 : _j.offer) !== null) {
- message.message = {
- $case: "offer",
- offer: SessionDescription.fromPartial(object.message.offer)
- };
- }
- if (((_k = object.message) === null || _k === void 0 ? void 0 : _k.$case) === "trickle" && ((_l = object.message) === null || _l === void 0 ? void 0 : _l.trickle) !== undefined && ((_m = object.message) === null || _m === void 0 ? void 0 : _m.trickle) !== null) {
- message.message = {
- $case: "trickle",
- trickle: TrickleRequest.fromPartial(object.message.trickle)
- };
- }
- if (((_o = object.message) === null || _o === void 0 ? void 0 : _o.$case) === "update" && ((_p = object.message) === null || _p === void 0 ? void 0 : _p.update) !== undefined && ((_q = object.message) === null || _q === void 0 ? void 0 : _q.update) !== null) {
- message.message = {
- $case: "update",
- update: ParticipantUpdate.fromPartial(object.message.update)
- };
- }
- if (((_r = object.message) === null || _r === void 0 ? void 0 : _r.$case) === "trackPublished" && ((_s = object.message) === null || _s === void 0 ? void 0 : _s.trackPublished) !== undefined && ((_t = object.message) === null || _t === void 0 ? void 0 : _t.trackPublished) !== null) {
- message.message = {
- $case: "trackPublished",
- trackPublished: TrackPublishedResponse.fromPartial(object.message.trackPublished)
- };
- }
- if (((_u = object.message) === null || _u === void 0 ? void 0 : _u.$case) === "leave" && ((_v = object.message) === null || _v === void 0 ? void 0 : _v.leave) !== undefined && ((_w = object.message) === null || _w === void 0 ? void 0 : _w.leave) !== null) {
- message.message = {
- $case: "leave",
- leave: LeaveRequest.fromPartial(object.message.leave)
- };
- }
- if (((_x = object.message) === null || _x === void 0 ? void 0 : _x.$case) === "mute" && ((_y = object.message) === null || _y === void 0 ? void 0 : _y.mute) !== undefined && ((_z = object.message) === null || _z === void 0 ? void 0 : _z.mute) !== null) {
- message.message = {
- $case: "mute",
- mute: MuteTrackRequest.fromPartial(object.message.mute)
- };
- }
- if (((_0 = object.message) === null || _0 === void 0 ? void 0 : _0.$case) === "speakersChanged" && ((_1 = object.message) === null || _1 === void 0 ? void 0 : _1.speakersChanged) !== undefined && ((_2 = object.message) === null || _2 === void 0 ? void 0 : _2.speakersChanged) !== null) {
- message.message = {
- $case: "speakersChanged",
- speakersChanged: SpeakersChanged.fromPartial(object.message.speakersChanged)
- };
- }
- if (((_3 = object.message) === null || _3 === void 0 ? void 0 : _3.$case) === "roomUpdate" && ((_4 = object.message) === null || _4 === void 0 ? void 0 : _4.roomUpdate) !== undefined && ((_5 = object.message) === null || _5 === void 0 ? void 0 : _5.roomUpdate) !== null) {
- message.message = {
- $case: "roomUpdate",
- roomUpdate: RoomUpdate.fromPartial(object.message.roomUpdate)
- };
- }
- if (((_6 = object.message) === null || _6 === void 0 ? void 0 : _6.$case) === "connectionQuality" && ((_7 = object.message) === null || _7 === void 0 ? void 0 : _7.connectionQuality) !== undefined && ((_8 = object.message) === null || _8 === void 0 ? void 0 : _8.connectionQuality) !== null) {
- message.message = {
- $case: "connectionQuality",
- connectionQuality: ConnectionQualityUpdate.fromPartial(object.message.connectionQuality)
- };
- }
- if (((_9 = object.message) === null || _9 === void 0 ? void 0 : _9.$case) === "streamStateUpdate" && ((_10 = object.message) === null || _10 === void 0 ? void 0 : _10.streamStateUpdate) !== undefined && ((_11 = object.message) === null || _11 === void 0 ? void 0 : _11.streamStateUpdate) !== null) {
- message.message = {
- $case: "streamStateUpdate",
- streamStateUpdate: StreamStateUpdate.fromPartial(object.message.streamStateUpdate)
- };
- }
- if (((_12 = object.message) === null || _12 === void 0 ? void 0 : _12.$case) === "subscribedQualityUpdate" && ((_13 = object.message) === null || _13 === void 0 ? void 0 : _13.subscribedQualityUpdate) !== undefined && ((_14 = object.message) === null || _14 === void 0 ? void 0 : _14.subscribedQualityUpdate) !== null) {
- message.message = {
- $case: "subscribedQualityUpdate",
- subscribedQualityUpdate: SubscribedQualityUpdate.fromPartial(object.message.subscribedQualityUpdate)
- };
- }
- if (((_15 = object.message) === null || _15 === void 0 ? void 0 : _15.$case) === "subscriptionPermissionUpdate" && ((_16 = object.message) === null || _16 === void 0 ? void 0 : _16.subscriptionPermissionUpdate) !== undefined && ((_17 = object.message) === null || _17 === void 0 ? void 0 : _17.subscriptionPermissionUpdate) !== null) {
- message.message = {
- $case: "subscriptionPermissionUpdate",
- subscriptionPermissionUpdate: SubscriptionPermissionUpdate.fromPartial(object.message.subscriptionPermissionUpdate)
- };
- }
- if (((_18 = object.message) === null || _18 === void 0 ? void 0 : _18.$case) === "refreshToken" && ((_19 = object.message) === null || _19 === void 0 ? void 0 : _19.refreshToken) !== undefined && ((_20 = object.message) === null || _20 === void 0 ? void 0 : _20.refreshToken) !== null) {
- message.message = {
- $case: "refreshToken",
- refreshToken: object.message.refreshToken
- };
- }
- if (((_21 = object.message) === null || _21 === void 0 ? void 0 : _21.$case) === "trackUnpublished" && ((_22 = object.message) === null || _22 === void 0 ? void 0 : _22.trackUnpublished) !== undefined && ((_23 = object.message) === null || _23 === void 0 ? void 0 : _23.trackUnpublished) !== null) {
- message.message = {
- $case: "trackUnpublished",
- trackUnpublished: TrackUnpublishedResponse.fromPartial(object.message.trackUnpublished)
- };
- }
- if (((_24 = object.message) === null || _24 === void 0 ? void 0 : _24.$case) === "pong" && ((_25 = object.message) === null || _25 === void 0 ? void 0 : _25.pong) !== undefined && ((_26 = object.message) === null || _26 === void 0 ? void 0 : _26.pong) !== null) {
- message.message = {
- $case: "pong",
- pong: object.message.pong
- };
- }
- if (((_27 = object.message) === null || _27 === void 0 ? void 0 : _27.$case) === "reconnect" && ((_28 = object.message) === null || _28 === void 0 ? void 0 : _28.reconnect) !== undefined && ((_29 = object.message) === null || _29 === void 0 ? void 0 : _29.reconnect) !== null) {
- message.message = {
- $case: "reconnect",
- reconnect: ReconnectResponse.fromPartial(object.message.reconnect)
- };
- }
- if (((_30 = object.message) === null || _30 === void 0 ? void 0 : _30.$case) === "pongResp" && ((_31 = object.message) === null || _31 === void 0 ? void 0 : _31.pongResp) !== undefined && ((_32 = object.message) === null || _32 === void 0 ? void 0 : _32.pongResp) !== null) {
- message.message = {
- $case: "pongResp",
- pongResp: Pong.fromPartial(object.message.pongResp)
- };
- }
- return message;
- }
-};
-function createBaseSimulcastCodec() {
- return {
- codec: "",
- cid: "",
- enableSimulcastLayers: false
- };
-}
-const SimulcastCodec = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.codec !== "") {
- writer.uint32(10).string(message.codec);
- }
- if (message.cid !== "") {
- writer.uint32(18).string(message.cid);
- }
- if (message.enableSimulcastLayers === true) {
- writer.uint32(24).bool(message.enableSimulcastLayers);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSimulcastCodec();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.codec = reader.string();
- break;
- case 2:
- message.cid = reader.string();
- break;
- case 3:
- message.enableSimulcastLayers = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- codec: isSet(object.codec) ? String(object.codec) : "",
- cid: isSet(object.cid) ? String(object.cid) : "",
- enableSimulcastLayers: isSet(object.enableSimulcastLayers) ? Boolean(object.enableSimulcastLayers) : false
- };
- },
- toJSON(message) {
- const obj = {};
- message.codec !== undefined && (obj.codec = message.codec);
- message.cid !== undefined && (obj.cid = message.cid);
- message.enableSimulcastLayers !== undefined && (obj.enableSimulcastLayers = message.enableSimulcastLayers);
- return obj;
- },
- create(base) {
- return SimulcastCodec.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c;
- const message = createBaseSimulcastCodec();
- message.codec = (_a = object.codec) !== null && _a !== void 0 ? _a : "";
- message.cid = (_b = object.cid) !== null && _b !== void 0 ? _b : "";
- message.enableSimulcastLayers = (_c = object.enableSimulcastLayers) !== null && _c !== void 0 ? _c : false;
- return message;
- }
-};
-function createBaseAddTrackRequest() {
- return {
- cid: "",
- name: "",
- type: 0,
- width: 0,
- height: 0,
- muted: false,
- disableDtx: false,
- source: 0,
- layers: [],
- simulcastCodecs: [],
- sid: "",
- stereo: false,
- disableRed: false,
- encryption: 0
- };
-}
-const AddTrackRequest = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.cid !== "") {
- writer.uint32(10).string(message.cid);
- }
- if (message.name !== "") {
- writer.uint32(18).string(message.name);
- }
- if (message.type !== 0) {
- writer.uint32(24).int32(message.type);
- }
- if (message.width !== 0) {
- writer.uint32(32).uint32(message.width);
- }
- if (message.height !== 0) {
- writer.uint32(40).uint32(message.height);
- }
- if (message.muted === true) {
- writer.uint32(48).bool(message.muted);
- }
- if (message.disableDtx === true) {
- writer.uint32(56).bool(message.disableDtx);
- }
- if (message.source !== 0) {
- writer.uint32(64).int32(message.source);
- }
- for (const v of message.layers) {
- VideoLayer.encode(v, writer.uint32(74).fork()).ldelim();
- }
- for (const v of message.simulcastCodecs) {
- SimulcastCodec.encode(v, writer.uint32(82).fork()).ldelim();
- }
- if (message.sid !== "") {
- writer.uint32(90).string(message.sid);
- }
- if (message.stereo === true) {
- writer.uint32(96).bool(message.stereo);
- }
- if (message.disableRed === true) {
- writer.uint32(104).bool(message.disableRed);
- }
- if (message.encryption !== 0) {
- writer.uint32(112).int32(message.encryption);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseAddTrackRequest();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.cid = reader.string();
- break;
- case 2:
- message.name = reader.string();
- break;
- case 3:
- message.type = reader.int32();
- break;
- case 4:
- message.width = reader.uint32();
- break;
- case 5:
- message.height = reader.uint32();
- break;
- case 6:
- message.muted = reader.bool();
- break;
- case 7:
- message.disableDtx = reader.bool();
- break;
- case 8:
- message.source = reader.int32();
- break;
- case 9:
- message.layers.push(VideoLayer.decode(reader, reader.uint32()));
- break;
- case 10:
- message.simulcastCodecs.push(SimulcastCodec.decode(reader, reader.uint32()));
- break;
- case 11:
- message.sid = reader.string();
- break;
- case 12:
- message.stereo = reader.bool();
- break;
- case 13:
- message.disableRed = reader.bool();
- break;
- case 14:
- message.encryption = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- cid: isSet(object.cid) ? String(object.cid) : "",
- name: isSet(object.name) ? String(object.name) : "",
- type: isSet(object.type) ? trackTypeFromJSON(object.type) : 0,
- width: isSet(object.width) ? Number(object.width) : 0,
- height: isSet(object.height) ? Number(object.height) : 0,
- muted: isSet(object.muted) ? Boolean(object.muted) : false,
- disableDtx: isSet(object.disableDtx) ? Boolean(object.disableDtx) : false,
- source: isSet(object.source) ? trackSourceFromJSON(object.source) : 0,
- layers: Array.isArray(object === null || object === void 0 ? void 0 : object.layers) ? object.layers.map(e => VideoLayer.fromJSON(e)) : [],
- simulcastCodecs: Array.isArray(object === null || object === void 0 ? void 0 : object.simulcastCodecs) ? object.simulcastCodecs.map(e => SimulcastCodec.fromJSON(e)) : [],
- sid: isSet(object.sid) ? String(object.sid) : "",
- stereo: isSet(object.stereo) ? Boolean(object.stereo) : false,
- disableRed: isSet(object.disableRed) ? Boolean(object.disableRed) : false,
- encryption: isSet(object.encryption) ? encryption_TypeFromJSON(object.encryption) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.cid !== undefined && (obj.cid = message.cid);
- message.name !== undefined && (obj.name = message.name);
- message.type !== undefined && (obj.type = trackTypeToJSON(message.type));
- message.width !== undefined && (obj.width = Math.round(message.width));
- message.height !== undefined && (obj.height = Math.round(message.height));
- message.muted !== undefined && (obj.muted = message.muted);
- message.disableDtx !== undefined && (obj.disableDtx = message.disableDtx);
- message.source !== undefined && (obj.source = trackSourceToJSON(message.source));
- if (message.layers) {
- obj.layers = message.layers.map(e => e ? VideoLayer.toJSON(e) : undefined);
- } else {
- obj.layers = [];
- }
- if (message.simulcastCodecs) {
- obj.simulcastCodecs = message.simulcastCodecs.map(e => e ? SimulcastCodec.toJSON(e) : undefined);
- } else {
- obj.simulcastCodecs = [];
- }
- message.sid !== undefined && (obj.sid = message.sid);
- message.stereo !== undefined && (obj.stereo = message.stereo);
- message.disableRed !== undefined && (obj.disableRed = message.disableRed);
- message.encryption !== undefined && (obj.encryption = encryption_TypeToJSON(message.encryption));
- return obj;
- },
- create(base) {
- return AddTrackRequest.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
- const message = createBaseAddTrackRequest();
- message.cid = (_a = object.cid) !== null && _a !== void 0 ? _a : "";
- message.name = (_b = object.name) !== null && _b !== void 0 ? _b : "";
- message.type = (_c = object.type) !== null && _c !== void 0 ? _c : 0;
- message.width = (_d = object.width) !== null && _d !== void 0 ? _d : 0;
- message.height = (_e = object.height) !== null && _e !== void 0 ? _e : 0;
- message.muted = (_f = object.muted) !== null && _f !== void 0 ? _f : false;
- message.disableDtx = (_g = object.disableDtx) !== null && _g !== void 0 ? _g : false;
- message.source = (_h = object.source) !== null && _h !== void 0 ? _h : 0;
- message.layers = ((_j = object.layers) === null || _j === void 0 ? void 0 : _j.map(e => VideoLayer.fromPartial(e))) || [];
- message.simulcastCodecs = ((_k = object.simulcastCodecs) === null || _k === void 0 ? void 0 : _k.map(e => SimulcastCodec.fromPartial(e))) || [];
- message.sid = (_l = object.sid) !== null && _l !== void 0 ? _l : "";
- message.stereo = (_m = object.stereo) !== null && _m !== void 0 ? _m : false;
- message.disableRed = (_o = object.disableRed) !== null && _o !== void 0 ? _o : false;
- message.encryption = (_p = object.encryption) !== null && _p !== void 0 ? _p : 0;
- return message;
- }
-};
-function createBaseTrickleRequest() {
- return {
- candidateInit: "",
- target: 0
- };
-}
-const TrickleRequest = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.candidateInit !== "") {
- writer.uint32(10).string(message.candidateInit);
- }
- if (message.target !== 0) {
- writer.uint32(16).int32(message.target);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseTrickleRequest();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.candidateInit = reader.string();
- break;
- case 2:
- message.target = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- candidateInit: isSet(object.candidateInit) ? String(object.candidateInit) : "",
- target: isSet(object.target) ? signalTargetFromJSON(object.target) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.candidateInit !== undefined && (obj.candidateInit = message.candidateInit);
- message.target !== undefined && (obj.target = signalTargetToJSON(message.target));
- return obj;
- },
- create(base) {
- return TrickleRequest.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseTrickleRequest();
- message.candidateInit = (_a = object.candidateInit) !== null && _a !== void 0 ? _a : "";
- message.target = (_b = object.target) !== null && _b !== void 0 ? _b : 0;
- return message;
- }
-};
-function createBaseMuteTrackRequest() {
- return {
- sid: "",
- muted: false
- };
-}
-const MuteTrackRequest = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.sid !== "") {
- writer.uint32(10).string(message.sid);
- }
- if (message.muted === true) {
- writer.uint32(16).bool(message.muted);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseMuteTrackRequest();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.sid = reader.string();
- break;
- case 2:
- message.muted = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- sid: isSet(object.sid) ? String(object.sid) : "",
- muted: isSet(object.muted) ? Boolean(object.muted) : false
- };
- },
- toJSON(message) {
- const obj = {};
- message.sid !== undefined && (obj.sid = message.sid);
- message.muted !== undefined && (obj.muted = message.muted);
- return obj;
- },
- create(base) {
- return MuteTrackRequest.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseMuteTrackRequest();
- message.sid = (_a = object.sid) !== null && _a !== void 0 ? _a : "";
- message.muted = (_b = object.muted) !== null && _b !== void 0 ? _b : false;
- return message;
- }
-};
-function createBaseJoinResponse() {
- return {
- room: undefined,
- participant: undefined,
- otherParticipants: [],
- serverVersion: "",
- iceServers: [],
- subscriberPrimary: false,
- alternativeUrl: "",
- clientConfiguration: undefined,
- serverRegion: "",
- pingTimeout: 0,
- pingInterval: 0,
- serverInfo: undefined
- };
-}
-const JoinResponse = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.room !== undefined) {
- Room$1.encode(message.room, writer.uint32(10).fork()).ldelim();
- }
- if (message.participant !== undefined) {
- ParticipantInfo.encode(message.participant, writer.uint32(18).fork()).ldelim();
- }
- for (const v of message.otherParticipants) {
- ParticipantInfo.encode(v, writer.uint32(26).fork()).ldelim();
- }
- if (message.serverVersion !== "") {
- writer.uint32(34).string(message.serverVersion);
- }
- for (const v of message.iceServers) {
- ICEServer.encode(v, writer.uint32(42).fork()).ldelim();
- }
- if (message.subscriberPrimary === true) {
- writer.uint32(48).bool(message.subscriberPrimary);
- }
- if (message.alternativeUrl !== "") {
- writer.uint32(58).string(message.alternativeUrl);
- }
- if (message.clientConfiguration !== undefined) {
- ClientConfiguration.encode(message.clientConfiguration, writer.uint32(66).fork()).ldelim();
- }
- if (message.serverRegion !== "") {
- writer.uint32(74).string(message.serverRegion);
- }
- if (message.pingTimeout !== 0) {
- writer.uint32(80).int32(message.pingTimeout);
- }
- if (message.pingInterval !== 0) {
- writer.uint32(88).int32(message.pingInterval);
- }
- if (message.serverInfo !== undefined) {
- ServerInfo.encode(message.serverInfo, writer.uint32(98).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseJoinResponse();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.room = Room$1.decode(reader, reader.uint32());
- break;
- case 2:
- message.participant = ParticipantInfo.decode(reader, reader.uint32());
- break;
- case 3:
- message.otherParticipants.push(ParticipantInfo.decode(reader, reader.uint32()));
- break;
- case 4:
- message.serverVersion = reader.string();
- break;
- case 5:
- message.iceServers.push(ICEServer.decode(reader, reader.uint32()));
- break;
- case 6:
- message.subscriberPrimary = reader.bool();
- break;
- case 7:
- message.alternativeUrl = reader.string();
- break;
- case 8:
- message.clientConfiguration = ClientConfiguration.decode(reader, reader.uint32());
- break;
- case 9:
- message.serverRegion = reader.string();
- break;
- case 10:
- message.pingTimeout = reader.int32();
- break;
- case 11:
- message.pingInterval = reader.int32();
- break;
- case 12:
- message.serverInfo = ServerInfo.decode(reader, reader.uint32());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- room: isSet(object.room) ? Room$1.fromJSON(object.room) : undefined,
- participant: isSet(object.participant) ? ParticipantInfo.fromJSON(object.participant) : undefined,
- otherParticipants: Array.isArray(object === null || object === void 0 ? void 0 : object.otherParticipants) ? object.otherParticipants.map(e => ParticipantInfo.fromJSON(e)) : [],
- serverVersion: isSet(object.serverVersion) ? String(object.serverVersion) : "",
- iceServers: Array.isArray(object === null || object === void 0 ? void 0 : object.iceServers) ? object.iceServers.map(e => ICEServer.fromJSON(e)) : [],
- subscriberPrimary: isSet(object.subscriberPrimary) ? Boolean(object.subscriberPrimary) : false,
- alternativeUrl: isSet(object.alternativeUrl) ? String(object.alternativeUrl) : "",
- clientConfiguration: isSet(object.clientConfiguration) ? ClientConfiguration.fromJSON(object.clientConfiguration) : undefined,
- serverRegion: isSet(object.serverRegion) ? String(object.serverRegion) : "",
- pingTimeout: isSet(object.pingTimeout) ? Number(object.pingTimeout) : 0,
- pingInterval: isSet(object.pingInterval) ? Number(object.pingInterval) : 0,
- serverInfo: isSet(object.serverInfo) ? ServerInfo.fromJSON(object.serverInfo) : undefined
- };
- },
- toJSON(message) {
- const obj = {};
- message.room !== undefined && (obj.room = message.room ? Room$1.toJSON(message.room) : undefined);
- message.participant !== undefined && (obj.participant = message.participant ? ParticipantInfo.toJSON(message.participant) : undefined);
- if (message.otherParticipants) {
- obj.otherParticipants = message.otherParticipants.map(e => e ? ParticipantInfo.toJSON(e) : undefined);
- } else {
- obj.otherParticipants = [];
- }
- message.serverVersion !== undefined && (obj.serverVersion = message.serverVersion);
- if (message.iceServers) {
- obj.iceServers = message.iceServers.map(e => e ? ICEServer.toJSON(e) : undefined);
- } else {
- obj.iceServers = [];
- }
- message.subscriberPrimary !== undefined && (obj.subscriberPrimary = message.subscriberPrimary);
- message.alternativeUrl !== undefined && (obj.alternativeUrl = message.alternativeUrl);
- message.clientConfiguration !== undefined && (obj.clientConfiguration = message.clientConfiguration ? ClientConfiguration.toJSON(message.clientConfiguration) : undefined);
- message.serverRegion !== undefined && (obj.serverRegion = message.serverRegion);
- message.pingTimeout !== undefined && (obj.pingTimeout = Math.round(message.pingTimeout));
- message.pingInterval !== undefined && (obj.pingInterval = Math.round(message.pingInterval));
- message.serverInfo !== undefined && (obj.serverInfo = message.serverInfo ? ServerInfo.toJSON(message.serverInfo) : undefined);
- return obj;
- },
- create(base) {
- return JoinResponse.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f, _g, _h;
- const message = createBaseJoinResponse();
- message.room = object.room !== undefined && object.room !== null ? Room$1.fromPartial(object.room) : undefined;
- message.participant = object.participant !== undefined && object.participant !== null ? ParticipantInfo.fromPartial(object.participant) : undefined;
- message.otherParticipants = ((_a = object.otherParticipants) === null || _a === void 0 ? void 0 : _a.map(e => ParticipantInfo.fromPartial(e))) || [];
- message.serverVersion = (_b = object.serverVersion) !== null && _b !== void 0 ? _b : "";
- message.iceServers = ((_c = object.iceServers) === null || _c === void 0 ? void 0 : _c.map(e => ICEServer.fromPartial(e))) || [];
- message.subscriberPrimary = (_d = object.subscriberPrimary) !== null && _d !== void 0 ? _d : false;
- message.alternativeUrl = (_e = object.alternativeUrl) !== null && _e !== void 0 ? _e : "";
- message.clientConfiguration = object.clientConfiguration !== undefined && object.clientConfiguration !== null ? ClientConfiguration.fromPartial(object.clientConfiguration) : undefined;
- message.serverRegion = (_f = object.serverRegion) !== null && _f !== void 0 ? _f : "";
- message.pingTimeout = (_g = object.pingTimeout) !== null && _g !== void 0 ? _g : 0;
- message.pingInterval = (_h = object.pingInterval) !== null && _h !== void 0 ? _h : 0;
- message.serverInfo = object.serverInfo !== undefined && object.serverInfo !== null ? ServerInfo.fromPartial(object.serverInfo) : undefined;
- return message;
- }
-};
-function createBaseReconnectResponse() {
- return {
- iceServers: [],
- clientConfiguration: undefined
- };
-}
-const ReconnectResponse = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- for (const v of message.iceServers) {
- ICEServer.encode(v, writer.uint32(10).fork()).ldelim();
- }
- if (message.clientConfiguration !== undefined) {
- ClientConfiguration.encode(message.clientConfiguration, writer.uint32(18).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseReconnectResponse();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.iceServers.push(ICEServer.decode(reader, reader.uint32()));
- break;
- case 2:
- message.clientConfiguration = ClientConfiguration.decode(reader, reader.uint32());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- iceServers: Array.isArray(object === null || object === void 0 ? void 0 : object.iceServers) ? object.iceServers.map(e => ICEServer.fromJSON(e)) : [],
- clientConfiguration: isSet(object.clientConfiguration) ? ClientConfiguration.fromJSON(object.clientConfiguration) : undefined
- };
- },
- toJSON(message) {
- const obj = {};
- if (message.iceServers) {
- obj.iceServers = message.iceServers.map(e => e ? ICEServer.toJSON(e) : undefined);
- } else {
- obj.iceServers = [];
- }
- message.clientConfiguration !== undefined && (obj.clientConfiguration = message.clientConfiguration ? ClientConfiguration.toJSON(message.clientConfiguration) : undefined);
- return obj;
- },
- create(base) {
- return ReconnectResponse.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a;
- const message = createBaseReconnectResponse();
- message.iceServers = ((_a = object.iceServers) === null || _a === void 0 ? void 0 : _a.map(e => ICEServer.fromPartial(e))) || [];
- message.clientConfiguration = object.clientConfiguration !== undefined && object.clientConfiguration !== null ? ClientConfiguration.fromPartial(object.clientConfiguration) : undefined;
- return message;
- }
-};
-function createBaseTrackPublishedResponse() {
- return {
- cid: "",
- track: undefined
- };
-}
-const TrackPublishedResponse = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.cid !== "") {
- writer.uint32(10).string(message.cid);
- }
- if (message.track !== undefined) {
- TrackInfo.encode(message.track, writer.uint32(18).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseTrackPublishedResponse();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.cid = reader.string();
- break;
- case 2:
- message.track = TrackInfo.decode(reader, reader.uint32());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- cid: isSet(object.cid) ? String(object.cid) : "",
- track: isSet(object.track) ? TrackInfo.fromJSON(object.track) : undefined
- };
- },
- toJSON(message) {
- const obj = {};
- message.cid !== undefined && (obj.cid = message.cid);
- message.track !== undefined && (obj.track = message.track ? TrackInfo.toJSON(message.track) : undefined);
- return obj;
- },
- create(base) {
- return TrackPublishedResponse.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a;
- const message = createBaseTrackPublishedResponse();
- message.cid = (_a = object.cid) !== null && _a !== void 0 ? _a : "";
- message.track = object.track !== undefined && object.track !== null ? TrackInfo.fromPartial(object.track) : undefined;
- return message;
- }
-};
-function createBaseTrackUnpublishedResponse() {
- return {
- trackSid: ""
- };
-}
-const TrackUnpublishedResponse = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.trackSid !== "") {
- writer.uint32(10).string(message.trackSid);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseTrackUnpublishedResponse();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.trackSid = reader.string();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- trackSid: isSet(object.trackSid) ? String(object.trackSid) : ""
- };
- },
- toJSON(message) {
- const obj = {};
- message.trackSid !== undefined && (obj.trackSid = message.trackSid);
- return obj;
- },
- create(base) {
- return TrackUnpublishedResponse.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a;
- const message = createBaseTrackUnpublishedResponse();
- message.trackSid = (_a = object.trackSid) !== null && _a !== void 0 ? _a : "";
- return message;
- }
-};
-function createBaseSessionDescription() {
- return {
- type: "",
- sdp: ""
- };
-}
-const SessionDescription = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.type !== "") {
- writer.uint32(10).string(message.type);
- }
- if (message.sdp !== "") {
- writer.uint32(18).string(message.sdp);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSessionDescription();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.type = reader.string();
- break;
- case 2:
- message.sdp = reader.string();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- type: isSet(object.type) ? String(object.type) : "",
- sdp: isSet(object.sdp) ? String(object.sdp) : ""
- };
- },
- toJSON(message) {
- const obj = {};
- message.type !== undefined && (obj.type = message.type);
- message.sdp !== undefined && (obj.sdp = message.sdp);
- return obj;
- },
- create(base) {
- return SessionDescription.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseSessionDescription();
- message.type = (_a = object.type) !== null && _a !== void 0 ? _a : "";
- message.sdp = (_b = object.sdp) !== null && _b !== void 0 ? _b : "";
- return message;
- }
-};
-function createBaseParticipantUpdate() {
- return {
- participants: []
- };
-}
-const ParticipantUpdate = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- for (const v of message.participants) {
- ParticipantInfo.encode(v, writer.uint32(10).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseParticipantUpdate();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.participants.push(ParticipantInfo.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- participants: Array.isArray(object === null || object === void 0 ? void 0 : object.participants) ? object.participants.map(e => ParticipantInfo.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- if (message.participants) {
- obj.participants = message.participants.map(e => e ? ParticipantInfo.toJSON(e) : undefined);
- } else {
- obj.participants = [];
- }
- return obj;
- },
- create(base) {
- return ParticipantUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a;
- const message = createBaseParticipantUpdate();
- message.participants = ((_a = object.participants) === null || _a === void 0 ? void 0 : _a.map(e => ParticipantInfo.fromPartial(e))) || [];
- return message;
- }
-};
-function createBaseUpdateSubscription() {
- return {
- trackSids: [],
- subscribe: false,
- participantTracks: []
- };
-}
-const UpdateSubscription = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- for (const v of message.trackSids) {
- writer.uint32(10).string(v);
- }
- if (message.subscribe === true) {
- writer.uint32(16).bool(message.subscribe);
- }
- for (const v of message.participantTracks) {
- ParticipantTracks.encode(v, writer.uint32(26).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseUpdateSubscription();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.trackSids.push(reader.string());
- break;
- case 2:
- message.subscribe = reader.bool();
- break;
- case 3:
- message.participantTracks.push(ParticipantTracks.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- trackSids: Array.isArray(object === null || object === void 0 ? void 0 : object.trackSids) ? object.trackSids.map(e => String(e)) : [],
- subscribe: isSet(object.subscribe) ? Boolean(object.subscribe) : false,
- participantTracks: Array.isArray(object === null || object === void 0 ? void 0 : object.participantTracks) ? object.participantTracks.map(e => ParticipantTracks.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- if (message.trackSids) {
- obj.trackSids = message.trackSids.map(e => e);
- } else {
- obj.trackSids = [];
- }
- message.subscribe !== undefined && (obj.subscribe = message.subscribe);
- if (message.participantTracks) {
- obj.participantTracks = message.participantTracks.map(e => e ? ParticipantTracks.toJSON(e) : undefined);
- } else {
- obj.participantTracks = [];
- }
- return obj;
- },
- create(base) {
- return UpdateSubscription.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c;
- const message = createBaseUpdateSubscription();
- message.trackSids = ((_a = object.trackSids) === null || _a === void 0 ? void 0 : _a.map(e => e)) || [];
- message.subscribe = (_b = object.subscribe) !== null && _b !== void 0 ? _b : false;
- message.participantTracks = ((_c = object.participantTracks) === null || _c === void 0 ? void 0 : _c.map(e => ParticipantTracks.fromPartial(e))) || [];
- return message;
- }
-};
-function createBaseUpdateTrackSettings() {
- return {
- trackSids: [],
- disabled: false,
- quality: 0,
- width: 0,
- height: 0,
- fps: 0,
- priority: 0
- };
-}
-const UpdateTrackSettings = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- for (const v of message.trackSids) {
- writer.uint32(10).string(v);
- }
- if (message.disabled === true) {
- writer.uint32(24).bool(message.disabled);
- }
- if (message.quality !== 0) {
- writer.uint32(32).int32(message.quality);
- }
- if (message.width !== 0) {
- writer.uint32(40).uint32(message.width);
- }
- if (message.height !== 0) {
- writer.uint32(48).uint32(message.height);
- }
- if (message.fps !== 0) {
- writer.uint32(56).uint32(message.fps);
- }
- if (message.priority !== 0) {
- writer.uint32(64).uint32(message.priority);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseUpdateTrackSettings();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.trackSids.push(reader.string());
- break;
- case 3:
- message.disabled = reader.bool();
- break;
- case 4:
- message.quality = reader.int32();
- break;
- case 5:
- message.width = reader.uint32();
- break;
- case 6:
- message.height = reader.uint32();
- break;
- case 7:
- message.fps = reader.uint32();
- break;
- case 8:
- message.priority = reader.uint32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- trackSids: Array.isArray(object === null || object === void 0 ? void 0 : object.trackSids) ? object.trackSids.map(e => String(e)) : [],
- disabled: isSet(object.disabled) ? Boolean(object.disabled) : false,
- quality: isSet(object.quality) ? videoQualityFromJSON(object.quality) : 0,
- width: isSet(object.width) ? Number(object.width) : 0,
- height: isSet(object.height) ? Number(object.height) : 0,
- fps: isSet(object.fps) ? Number(object.fps) : 0,
- priority: isSet(object.priority) ? Number(object.priority) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- if (message.trackSids) {
- obj.trackSids = message.trackSids.map(e => e);
- } else {
- obj.trackSids = [];
- }
- message.disabled !== undefined && (obj.disabled = message.disabled);
- message.quality !== undefined && (obj.quality = videoQualityToJSON(message.quality));
- message.width !== undefined && (obj.width = Math.round(message.width));
- message.height !== undefined && (obj.height = Math.round(message.height));
- message.fps !== undefined && (obj.fps = Math.round(message.fps));
- message.priority !== undefined && (obj.priority = Math.round(message.priority));
- return obj;
- },
- create(base) {
- return UpdateTrackSettings.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f, _g;
- const message = createBaseUpdateTrackSettings();
- message.trackSids = ((_a = object.trackSids) === null || _a === void 0 ? void 0 : _a.map(e => e)) || [];
- message.disabled = (_b = object.disabled) !== null && _b !== void 0 ? _b : false;
- message.quality = (_c = object.quality) !== null && _c !== void 0 ? _c : 0;
- message.width = (_d = object.width) !== null && _d !== void 0 ? _d : 0;
- message.height = (_e = object.height) !== null && _e !== void 0 ? _e : 0;
- message.fps = (_f = object.fps) !== null && _f !== void 0 ? _f : 0;
- message.priority = (_g = object.priority) !== null && _g !== void 0 ? _g : 0;
- return message;
- }
-};
-function createBaseLeaveRequest() {
- return {
- canReconnect: false,
- reason: 0
- };
-}
-const LeaveRequest = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.canReconnect === true) {
- writer.uint32(8).bool(message.canReconnect);
- }
- if (message.reason !== 0) {
- writer.uint32(16).int32(message.reason);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseLeaveRequest();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.canReconnect = reader.bool();
- break;
- case 2:
- message.reason = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- canReconnect: isSet(object.canReconnect) ? Boolean(object.canReconnect) : false,
- reason: isSet(object.reason) ? disconnectReasonFromJSON(object.reason) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.canReconnect !== undefined && (obj.canReconnect = message.canReconnect);
- message.reason !== undefined && (obj.reason = disconnectReasonToJSON(message.reason));
- return obj;
- },
- create(base) {
- return LeaveRequest.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseLeaveRequest();
- message.canReconnect = (_a = object.canReconnect) !== null && _a !== void 0 ? _a : false;
- message.reason = (_b = object.reason) !== null && _b !== void 0 ? _b : 0;
- return message;
- }
-};
-function createBaseUpdateVideoLayers() {
- return {
- trackSid: "",
- layers: []
- };
-}
-const UpdateVideoLayers = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.trackSid !== "") {
- writer.uint32(10).string(message.trackSid);
- }
- for (const v of message.layers) {
- VideoLayer.encode(v, writer.uint32(18).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseUpdateVideoLayers();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.trackSid = reader.string();
- break;
- case 2:
- message.layers.push(VideoLayer.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- trackSid: isSet(object.trackSid) ? String(object.trackSid) : "",
- layers: Array.isArray(object === null || object === void 0 ? void 0 : object.layers) ? object.layers.map(e => VideoLayer.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- message.trackSid !== undefined && (obj.trackSid = message.trackSid);
- if (message.layers) {
- obj.layers = message.layers.map(e => e ? VideoLayer.toJSON(e) : undefined);
- } else {
- obj.layers = [];
- }
- return obj;
- },
- create(base) {
- return UpdateVideoLayers.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseUpdateVideoLayers();
- message.trackSid = (_a = object.trackSid) !== null && _a !== void 0 ? _a : "";
- message.layers = ((_b = object.layers) === null || _b === void 0 ? void 0 : _b.map(e => VideoLayer.fromPartial(e))) || [];
- return message;
- }
-};
-function createBaseUpdateParticipantMetadata() {
- return {
- metadata: ""
- };
-}
-const UpdateParticipantMetadata = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.metadata !== "") {
- writer.uint32(10).string(message.metadata);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseUpdateParticipantMetadata();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.metadata = reader.string();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- metadata: isSet(object.metadata) ? String(object.metadata) : ""
- };
- },
- toJSON(message) {
- const obj = {};
- message.metadata !== undefined && (obj.metadata = message.metadata);
- return obj;
- },
- create(base) {
- return UpdateParticipantMetadata.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a;
- const message = createBaseUpdateParticipantMetadata();
- message.metadata = (_a = object.metadata) !== null && _a !== void 0 ? _a : "";
- return message;
- }
-};
-function createBaseICEServer() {
- return {
- urls: [],
- username: "",
- credential: ""
- };
-}
-const ICEServer = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- for (const v of message.urls) {
- writer.uint32(10).string(v);
- }
- if (message.username !== "") {
- writer.uint32(18).string(message.username);
- }
- if (message.credential !== "") {
- writer.uint32(26).string(message.credential);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseICEServer();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.urls.push(reader.string());
- break;
- case 2:
- message.username = reader.string();
- break;
- case 3:
- message.credential = reader.string();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- urls: Array.isArray(object === null || object === void 0 ? void 0 : object.urls) ? object.urls.map(e => String(e)) : [],
- username: isSet(object.username) ? String(object.username) : "",
- credential: isSet(object.credential) ? String(object.credential) : ""
- };
- },
- toJSON(message) {
- const obj = {};
- if (message.urls) {
- obj.urls = message.urls.map(e => e);
- } else {
- obj.urls = [];
- }
- message.username !== undefined && (obj.username = message.username);
- message.credential !== undefined && (obj.credential = message.credential);
- return obj;
- },
- create(base) {
- return ICEServer.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c;
- const message = createBaseICEServer();
- message.urls = ((_a = object.urls) === null || _a === void 0 ? void 0 : _a.map(e => e)) || [];
- message.username = (_b = object.username) !== null && _b !== void 0 ? _b : "";
- message.credential = (_c = object.credential) !== null && _c !== void 0 ? _c : "";
- return message;
- }
-};
-function createBaseSpeakersChanged() {
- return {
- speakers: []
- };
-}
-const SpeakersChanged = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- for (const v of message.speakers) {
- SpeakerInfo.encode(v, writer.uint32(10).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSpeakersChanged();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.speakers.push(SpeakerInfo.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- speakers: Array.isArray(object === null || object === void 0 ? void 0 : object.speakers) ? object.speakers.map(e => SpeakerInfo.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- if (message.speakers) {
- obj.speakers = message.speakers.map(e => e ? SpeakerInfo.toJSON(e) : undefined);
- } else {
- obj.speakers = [];
- }
- return obj;
- },
- create(base) {
- return SpeakersChanged.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a;
- const message = createBaseSpeakersChanged();
- message.speakers = ((_a = object.speakers) === null || _a === void 0 ? void 0 : _a.map(e => SpeakerInfo.fromPartial(e))) || [];
- return message;
- }
-};
-function createBaseRoomUpdate() {
- return {
- room: undefined
- };
-}
-const RoomUpdate = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.room !== undefined) {
- Room$1.encode(message.room, writer.uint32(10).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseRoomUpdate();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.room = Room$1.decode(reader, reader.uint32());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- room: isSet(object.room) ? Room$1.fromJSON(object.room) : undefined
- };
- },
- toJSON(message) {
- const obj = {};
- message.room !== undefined && (obj.room = message.room ? Room$1.toJSON(message.room) : undefined);
- return obj;
- },
- create(base) {
- return RoomUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- const message = createBaseRoomUpdate();
- message.room = object.room !== undefined && object.room !== null ? Room$1.fromPartial(object.room) : undefined;
- return message;
- }
-};
-function createBaseConnectionQualityInfo() {
- return {
- participantSid: "",
- quality: 0,
- score: 0
- };
-}
-const ConnectionQualityInfo = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.participantSid !== "") {
- writer.uint32(10).string(message.participantSid);
- }
- if (message.quality !== 0) {
- writer.uint32(16).int32(message.quality);
- }
- if (message.score !== 0) {
- writer.uint32(29).float(message.score);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseConnectionQualityInfo();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.participantSid = reader.string();
- break;
- case 2:
- message.quality = reader.int32();
- break;
- case 3:
- message.score = reader.float();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- participantSid: isSet(object.participantSid) ? String(object.participantSid) : "",
- quality: isSet(object.quality) ? connectionQualityFromJSON(object.quality) : 0,
- score: isSet(object.score) ? Number(object.score) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.participantSid !== undefined && (obj.participantSid = message.participantSid);
- message.quality !== undefined && (obj.quality = connectionQualityToJSON(message.quality));
- message.score !== undefined && (obj.score = message.score);
- return obj;
- },
- create(base) {
- return ConnectionQualityInfo.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c;
- const message = createBaseConnectionQualityInfo();
- message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
- message.quality = (_b = object.quality) !== null && _b !== void 0 ? _b : 0;
- message.score = (_c = object.score) !== null && _c !== void 0 ? _c : 0;
- return message;
- }
-};
-function createBaseConnectionQualityUpdate() {
- return {
- updates: []
- };
-}
-const ConnectionQualityUpdate = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- for (const v of message.updates) {
- ConnectionQualityInfo.encode(v, writer.uint32(10).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseConnectionQualityUpdate();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.updates.push(ConnectionQualityInfo.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- updates: Array.isArray(object === null || object === void 0 ? void 0 : object.updates) ? object.updates.map(e => ConnectionQualityInfo.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- if (message.updates) {
- obj.updates = message.updates.map(e => e ? ConnectionQualityInfo.toJSON(e) : undefined);
- } else {
- obj.updates = [];
- }
- return obj;
- },
- create(base) {
- return ConnectionQualityUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a;
- const message = createBaseConnectionQualityUpdate();
- message.updates = ((_a = object.updates) === null || _a === void 0 ? void 0 : _a.map(e => ConnectionQualityInfo.fromPartial(e))) || [];
- return message;
- }
-};
-function createBaseStreamStateInfo() {
- return {
- participantSid: "",
- trackSid: "",
- state: 0
- };
-}
-const StreamStateInfo = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.participantSid !== "") {
- writer.uint32(10).string(message.participantSid);
- }
- if (message.trackSid !== "") {
- writer.uint32(18).string(message.trackSid);
- }
- if (message.state !== 0) {
- writer.uint32(24).int32(message.state);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseStreamStateInfo();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.participantSid = reader.string();
- break;
- case 2:
- message.trackSid = reader.string();
- break;
- case 3:
- message.state = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- participantSid: isSet(object.participantSid) ? String(object.participantSid) : "",
- trackSid: isSet(object.trackSid) ? String(object.trackSid) : "",
- state: isSet(object.state) ? streamStateFromJSON(object.state) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.participantSid !== undefined && (obj.participantSid = message.participantSid);
- message.trackSid !== undefined && (obj.trackSid = message.trackSid);
- message.state !== undefined && (obj.state = streamStateToJSON(message.state));
- return obj;
- },
- create(base) {
- return StreamStateInfo.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c;
- const message = createBaseStreamStateInfo();
- message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
- message.trackSid = (_b = object.trackSid) !== null && _b !== void 0 ? _b : "";
- message.state = (_c = object.state) !== null && _c !== void 0 ? _c : 0;
- return message;
- }
-};
-function createBaseStreamStateUpdate() {
- return {
- streamStates: []
- };
-}
-const StreamStateUpdate = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- for (const v of message.streamStates) {
- StreamStateInfo.encode(v, writer.uint32(10).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseStreamStateUpdate();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.streamStates.push(StreamStateInfo.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- streamStates: Array.isArray(object === null || object === void 0 ? void 0 : object.streamStates) ? object.streamStates.map(e => StreamStateInfo.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- if (message.streamStates) {
- obj.streamStates = message.streamStates.map(e => e ? StreamStateInfo.toJSON(e) : undefined);
- } else {
- obj.streamStates = [];
- }
- return obj;
- },
- create(base) {
- return StreamStateUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a;
- const message = createBaseStreamStateUpdate();
- message.streamStates = ((_a = object.streamStates) === null || _a === void 0 ? void 0 : _a.map(e => StreamStateInfo.fromPartial(e))) || [];
- return message;
- }
-};
-function createBaseSubscribedQuality() {
- return {
- quality: 0,
- enabled: false
- };
-}
-const SubscribedQuality = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.quality !== 0) {
- writer.uint32(8).int32(message.quality);
- }
- if (message.enabled === true) {
- writer.uint32(16).bool(message.enabled);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSubscribedQuality();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.quality = reader.int32();
- break;
- case 2:
- message.enabled = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- quality: isSet(object.quality) ? videoQualityFromJSON(object.quality) : 0,
- enabled: isSet(object.enabled) ? Boolean(object.enabled) : false
- };
- },
- toJSON(message) {
- const obj = {};
- message.quality !== undefined && (obj.quality = videoQualityToJSON(message.quality));
- message.enabled !== undefined && (obj.enabled = message.enabled);
- return obj;
- },
- create(base) {
- return SubscribedQuality.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseSubscribedQuality();
- message.quality = (_a = object.quality) !== null && _a !== void 0 ? _a : 0;
- message.enabled = (_b = object.enabled) !== null && _b !== void 0 ? _b : false;
- return message;
- }
-};
-function createBaseSubscribedCodec() {
- return {
- codec: "",
- qualities: []
- };
-}
-const SubscribedCodec = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.codec !== "") {
- writer.uint32(10).string(message.codec);
- }
- for (const v of message.qualities) {
- SubscribedQuality.encode(v, writer.uint32(18).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSubscribedCodec();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.codec = reader.string();
- break;
- case 2:
- message.qualities.push(SubscribedQuality.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- codec: isSet(object.codec) ? String(object.codec) : "",
- qualities: Array.isArray(object === null || object === void 0 ? void 0 : object.qualities) ? object.qualities.map(e => SubscribedQuality.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- message.codec !== undefined && (obj.codec = message.codec);
- if (message.qualities) {
- obj.qualities = message.qualities.map(e => e ? SubscribedQuality.toJSON(e) : undefined);
- } else {
- obj.qualities = [];
- }
- return obj;
- },
- create(base) {
- return SubscribedCodec.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseSubscribedCodec();
- message.codec = (_a = object.codec) !== null && _a !== void 0 ? _a : "";
- message.qualities = ((_b = object.qualities) === null || _b === void 0 ? void 0 : _b.map(e => SubscribedQuality.fromPartial(e))) || [];
- return message;
- }
-};
-function createBaseSubscribedQualityUpdate() {
- return {
- trackSid: "",
- subscribedQualities: [],
- subscribedCodecs: []
- };
-}
-const SubscribedQualityUpdate = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.trackSid !== "") {
- writer.uint32(10).string(message.trackSid);
- }
- for (const v of message.subscribedQualities) {
- SubscribedQuality.encode(v, writer.uint32(18).fork()).ldelim();
- }
- for (const v of message.subscribedCodecs) {
- SubscribedCodec.encode(v, writer.uint32(26).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSubscribedQualityUpdate();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.trackSid = reader.string();
- break;
- case 2:
- message.subscribedQualities.push(SubscribedQuality.decode(reader, reader.uint32()));
- break;
- case 3:
- message.subscribedCodecs.push(SubscribedCodec.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- trackSid: isSet(object.trackSid) ? String(object.trackSid) : "",
- subscribedQualities: Array.isArray(object === null || object === void 0 ? void 0 : object.subscribedQualities) ? object.subscribedQualities.map(e => SubscribedQuality.fromJSON(e)) : [],
- subscribedCodecs: Array.isArray(object === null || object === void 0 ? void 0 : object.subscribedCodecs) ? object.subscribedCodecs.map(e => SubscribedCodec.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- message.trackSid !== undefined && (obj.trackSid = message.trackSid);
- if (message.subscribedQualities) {
- obj.subscribedQualities = message.subscribedQualities.map(e => e ? SubscribedQuality.toJSON(e) : undefined);
- } else {
- obj.subscribedQualities = [];
- }
- if (message.subscribedCodecs) {
- obj.subscribedCodecs = message.subscribedCodecs.map(e => e ? SubscribedCodec.toJSON(e) : undefined);
- } else {
- obj.subscribedCodecs = [];
- }
- return obj;
- },
- create(base) {
- return SubscribedQualityUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c;
- const message = createBaseSubscribedQualityUpdate();
- message.trackSid = (_a = object.trackSid) !== null && _a !== void 0 ? _a : "";
- message.subscribedQualities = ((_b = object.subscribedQualities) === null || _b === void 0 ? void 0 : _b.map(e => SubscribedQuality.fromPartial(e))) || [];
- message.subscribedCodecs = ((_c = object.subscribedCodecs) === null || _c === void 0 ? void 0 : _c.map(e => SubscribedCodec.fromPartial(e))) || [];
- return message;
- }
-};
-function createBaseTrackPermission() {
- return {
- participantSid: "",
- allTracks: false,
- trackSids: [],
- participantIdentity: ""
- };
-}
-const TrackPermission = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.participantSid !== "") {
- writer.uint32(10).string(message.participantSid);
- }
- if (message.allTracks === true) {
- writer.uint32(16).bool(message.allTracks);
- }
- for (const v of message.trackSids) {
- writer.uint32(26).string(v);
- }
- if (message.participantIdentity !== "") {
- writer.uint32(34).string(message.participantIdentity);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseTrackPermission();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.participantSid = reader.string();
- break;
- case 2:
- message.allTracks = reader.bool();
- break;
- case 3:
- message.trackSids.push(reader.string());
- break;
- case 4:
- message.participantIdentity = reader.string();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- participantSid: isSet(object.participantSid) ? String(object.participantSid) : "",
- allTracks: isSet(object.allTracks) ? Boolean(object.allTracks) : false,
- trackSids: Array.isArray(object === null || object === void 0 ? void 0 : object.trackSids) ? object.trackSids.map(e => String(e)) : [],
- participantIdentity: isSet(object.participantIdentity) ? String(object.participantIdentity) : ""
- };
- },
- toJSON(message) {
- const obj = {};
- message.participantSid !== undefined && (obj.participantSid = message.participantSid);
- message.allTracks !== undefined && (obj.allTracks = message.allTracks);
- if (message.trackSids) {
- obj.trackSids = message.trackSids.map(e => e);
- } else {
- obj.trackSids = [];
- }
- message.participantIdentity !== undefined && (obj.participantIdentity = message.participantIdentity);
- return obj;
- },
- create(base) {
- return TrackPermission.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d;
- const message = createBaseTrackPermission();
- message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
- message.allTracks = (_b = object.allTracks) !== null && _b !== void 0 ? _b : false;
- message.trackSids = ((_c = object.trackSids) === null || _c === void 0 ? void 0 : _c.map(e => e)) || [];
- message.participantIdentity = (_d = object.participantIdentity) !== null && _d !== void 0 ? _d : "";
- return message;
- }
-};
-function createBaseSubscriptionPermission() {
- return {
- allParticipants: false,
- trackPermissions: []
- };
-}
-const SubscriptionPermission = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.allParticipants === true) {
- writer.uint32(8).bool(message.allParticipants);
- }
- for (const v of message.trackPermissions) {
- TrackPermission.encode(v, writer.uint32(18).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSubscriptionPermission();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.allParticipants = reader.bool();
- break;
- case 2:
- message.trackPermissions.push(TrackPermission.decode(reader, reader.uint32()));
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- allParticipants: isSet(object.allParticipants) ? Boolean(object.allParticipants) : false,
- trackPermissions: Array.isArray(object === null || object === void 0 ? void 0 : object.trackPermissions) ? object.trackPermissions.map(e => TrackPermission.fromJSON(e)) : []
- };
- },
- toJSON(message) {
- const obj = {};
- message.allParticipants !== undefined && (obj.allParticipants = message.allParticipants);
- if (message.trackPermissions) {
- obj.trackPermissions = message.trackPermissions.map(e => e ? TrackPermission.toJSON(e) : undefined);
- } else {
- obj.trackPermissions = [];
- }
- return obj;
- },
- create(base) {
- return SubscriptionPermission.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseSubscriptionPermission();
- message.allParticipants = (_a = object.allParticipants) !== null && _a !== void 0 ? _a : false;
- message.trackPermissions = ((_b = object.trackPermissions) === null || _b === void 0 ? void 0 : _b.map(e => TrackPermission.fromPartial(e))) || [];
- return message;
- }
-};
-function createBaseSubscriptionPermissionUpdate() {
- return {
- participantSid: "",
- trackSid: "",
- allowed: false
- };
-}
-const SubscriptionPermissionUpdate = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.participantSid !== "") {
- writer.uint32(10).string(message.participantSid);
- }
- if (message.trackSid !== "") {
- writer.uint32(18).string(message.trackSid);
- }
- if (message.allowed === true) {
- writer.uint32(24).bool(message.allowed);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSubscriptionPermissionUpdate();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.participantSid = reader.string();
- break;
- case 2:
- message.trackSid = reader.string();
- break;
- case 3:
- message.allowed = reader.bool();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- participantSid: isSet(object.participantSid) ? String(object.participantSid) : "",
- trackSid: isSet(object.trackSid) ? String(object.trackSid) : "",
- allowed: isSet(object.allowed) ? Boolean(object.allowed) : false
- };
- },
- toJSON(message) {
- const obj = {};
- message.participantSid !== undefined && (obj.participantSid = message.participantSid);
- message.trackSid !== undefined && (obj.trackSid = message.trackSid);
- message.allowed !== undefined && (obj.allowed = message.allowed);
- return obj;
- },
- create(base) {
- return SubscriptionPermissionUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c;
- const message = createBaseSubscriptionPermissionUpdate();
- message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
- message.trackSid = (_b = object.trackSid) !== null && _b !== void 0 ? _b : "";
- message.allowed = (_c = object.allowed) !== null && _c !== void 0 ? _c : false;
- return message;
- }
-};
-function createBaseSyncState() {
- return {
- answer: undefined,
- subscription: undefined,
- publishTracks: [],
- dataChannels: [],
- offer: undefined
- };
-}
-const SyncState = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.answer !== undefined) {
- SessionDescription.encode(message.answer, writer.uint32(10).fork()).ldelim();
- }
- if (message.subscription !== undefined) {
- UpdateSubscription.encode(message.subscription, writer.uint32(18).fork()).ldelim();
- }
- for (const v of message.publishTracks) {
- TrackPublishedResponse.encode(v, writer.uint32(26).fork()).ldelim();
- }
- for (const v of message.dataChannels) {
- DataChannelInfo.encode(v, writer.uint32(34).fork()).ldelim();
- }
- if (message.offer !== undefined) {
- SessionDescription.encode(message.offer, writer.uint32(42).fork()).ldelim();
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSyncState();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.answer = SessionDescription.decode(reader, reader.uint32());
- break;
- case 2:
- message.subscription = UpdateSubscription.decode(reader, reader.uint32());
- break;
- case 3:
- message.publishTracks.push(TrackPublishedResponse.decode(reader, reader.uint32()));
- break;
- case 4:
- message.dataChannels.push(DataChannelInfo.decode(reader, reader.uint32()));
- break;
- case 5:
- message.offer = SessionDescription.decode(reader, reader.uint32());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- answer: isSet(object.answer) ? SessionDescription.fromJSON(object.answer) : undefined,
- subscription: isSet(object.subscription) ? UpdateSubscription.fromJSON(object.subscription) : undefined,
- publishTracks: Array.isArray(object === null || object === void 0 ? void 0 : object.publishTracks) ? object.publishTracks.map(e => TrackPublishedResponse.fromJSON(e)) : [],
- dataChannels: Array.isArray(object === null || object === void 0 ? void 0 : object.dataChannels) ? object.dataChannels.map(e => DataChannelInfo.fromJSON(e)) : [],
- offer: isSet(object.offer) ? SessionDescription.fromJSON(object.offer) : undefined
- };
- },
- toJSON(message) {
- const obj = {};
- message.answer !== undefined && (obj.answer = message.answer ? SessionDescription.toJSON(message.answer) : undefined);
- message.subscription !== undefined && (obj.subscription = message.subscription ? UpdateSubscription.toJSON(message.subscription) : undefined);
- if (message.publishTracks) {
- obj.publishTracks = message.publishTracks.map(e => e ? TrackPublishedResponse.toJSON(e) : undefined);
- } else {
- obj.publishTracks = [];
- }
- if (message.dataChannels) {
- obj.dataChannels = message.dataChannels.map(e => e ? DataChannelInfo.toJSON(e) : undefined);
- } else {
- obj.dataChannels = [];
- }
- message.offer !== undefined && (obj.offer = message.offer ? SessionDescription.toJSON(message.offer) : undefined);
- return obj;
- },
- create(base) {
- return SyncState.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBaseSyncState();
- message.answer = object.answer !== undefined && object.answer !== null ? SessionDescription.fromPartial(object.answer) : undefined;
- message.subscription = object.subscription !== undefined && object.subscription !== null ? UpdateSubscription.fromPartial(object.subscription) : undefined;
- message.publishTracks = ((_a = object.publishTracks) === null || _a === void 0 ? void 0 : _a.map(e => TrackPublishedResponse.fromPartial(e))) || [];
- message.dataChannels = ((_b = object.dataChannels) === null || _b === void 0 ? void 0 : _b.map(e => DataChannelInfo.fromPartial(e))) || [];
- message.offer = object.offer !== undefined && object.offer !== null ? SessionDescription.fromPartial(object.offer) : undefined;
- return message;
- }
-};
-function createBaseDataChannelInfo() {
- return {
- label: "",
- id: 0,
- target: 0
- };
-}
-const DataChannelInfo = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.label !== "") {
- writer.uint32(10).string(message.label);
- }
- if (message.id !== 0) {
- writer.uint32(16).uint32(message.id);
- }
- if (message.target !== 0) {
- writer.uint32(24).int32(message.target);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseDataChannelInfo();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.label = reader.string();
- break;
- case 2:
- message.id = reader.uint32();
- break;
- case 3:
- message.target = reader.int32();
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- label: isSet(object.label) ? String(object.label) : "",
- id: isSet(object.id) ? Number(object.id) : 0,
- target: isSet(object.target) ? signalTargetFromJSON(object.target) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.label !== undefined && (obj.label = message.label);
- message.id !== undefined && (obj.id = Math.round(message.id));
- message.target !== undefined && (obj.target = signalTargetToJSON(message.target));
- return obj;
- },
- create(base) {
- return DataChannelInfo.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c;
- const message = createBaseDataChannelInfo();
- message.label = (_a = object.label) !== null && _a !== void 0 ? _a : "";
- message.id = (_b = object.id) !== null && _b !== void 0 ? _b : 0;
- message.target = (_c = object.target) !== null && _c !== void 0 ? _c : 0;
- return message;
- }
-};
-function createBaseSimulateScenario() {
- return {
- scenario: undefined
- };
-}
-const SimulateScenario = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- var _a;
- switch ((_a = message.scenario) === null || _a === void 0 ? void 0 : _a.$case) {
- case "speakerUpdate":
- writer.uint32(8).int32(message.scenario.speakerUpdate);
- break;
- case "nodeFailure":
- writer.uint32(16).bool(message.scenario.nodeFailure);
- break;
- case "migration":
- writer.uint32(24).bool(message.scenario.migration);
- break;
- case "serverLeave":
- writer.uint32(32).bool(message.scenario.serverLeave);
- break;
- case "switchCandidateProtocol":
- writer.uint32(40).int32(message.scenario.switchCandidateProtocol);
- break;
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBaseSimulateScenario();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.scenario = {
- $case: "speakerUpdate",
- speakerUpdate: reader.int32()
- };
- break;
- case 2:
- message.scenario = {
- $case: "nodeFailure",
- nodeFailure: reader.bool()
- };
- break;
- case 3:
- message.scenario = {
- $case: "migration",
- migration: reader.bool()
- };
- break;
- case 4:
- message.scenario = {
- $case: "serverLeave",
- serverLeave: reader.bool()
- };
- break;
- case 5:
- message.scenario = {
- $case: "switchCandidateProtocol",
- switchCandidateProtocol: reader.int32()
- };
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- scenario: isSet(object.speakerUpdate) ? {
- $case: "speakerUpdate",
- speakerUpdate: Number(object.speakerUpdate)
- } : isSet(object.nodeFailure) ? {
- $case: "nodeFailure",
- nodeFailure: Boolean(object.nodeFailure)
- } : isSet(object.migration) ? {
- $case: "migration",
- migration: Boolean(object.migration)
- } : isSet(object.serverLeave) ? {
- $case: "serverLeave",
- serverLeave: Boolean(object.serverLeave)
- } : isSet(object.switchCandidateProtocol) ? {
- $case: "switchCandidateProtocol",
- switchCandidateProtocol: candidateProtocolFromJSON(object.switchCandidateProtocol)
- } : undefined
- };
- },
- toJSON(message) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
- const obj = {};
- ((_a = message.scenario) === null || _a === void 0 ? void 0 : _a.$case) === "speakerUpdate" && (obj.speakerUpdate = Math.round((_b = message.scenario) === null || _b === void 0 ? void 0 : _b.speakerUpdate));
- ((_c = message.scenario) === null || _c === void 0 ? void 0 : _c.$case) === "nodeFailure" && (obj.nodeFailure = (_d = message.scenario) === null || _d === void 0 ? void 0 : _d.nodeFailure);
- ((_e = message.scenario) === null || _e === void 0 ? void 0 : _e.$case) === "migration" && (obj.migration = (_f = message.scenario) === null || _f === void 0 ? void 0 : _f.migration);
- ((_g = message.scenario) === null || _g === void 0 ? void 0 : _g.$case) === "serverLeave" && (obj.serverLeave = (_h = message.scenario) === null || _h === void 0 ? void 0 : _h.serverLeave);
- ((_j = message.scenario) === null || _j === void 0 ? void 0 : _j.$case) === "switchCandidateProtocol" && (obj.switchCandidateProtocol = ((_k = message.scenario) === null || _k === void 0 ? void 0 : _k.switchCandidateProtocol) !== undefined ? candidateProtocolToJSON((_l = message.scenario) === null || _l === void 0 ? void 0 : _l.switchCandidateProtocol) : undefined);
- return obj;
- },
- create(base) {
- return SimulateScenario.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
- const message = createBaseSimulateScenario();
- if (((_a = object.scenario) === null || _a === void 0 ? void 0 : _a.$case) === "speakerUpdate" && ((_b = object.scenario) === null || _b === void 0 ? void 0 : _b.speakerUpdate) !== undefined && ((_c = object.scenario) === null || _c === void 0 ? void 0 : _c.speakerUpdate) !== null) {
- message.scenario = {
- $case: "speakerUpdate",
- speakerUpdate: object.scenario.speakerUpdate
- };
- }
- if (((_d = object.scenario) === null || _d === void 0 ? void 0 : _d.$case) === "nodeFailure" && ((_e = object.scenario) === null || _e === void 0 ? void 0 : _e.nodeFailure) !== undefined && ((_f = object.scenario) === null || _f === void 0 ? void 0 : _f.nodeFailure) !== null) {
- message.scenario = {
- $case: "nodeFailure",
- nodeFailure: object.scenario.nodeFailure
- };
- }
- if (((_g = object.scenario) === null || _g === void 0 ? void 0 : _g.$case) === "migration" && ((_h = object.scenario) === null || _h === void 0 ? void 0 : _h.migration) !== undefined && ((_j = object.scenario) === null || _j === void 0 ? void 0 : _j.migration) !== null) {
- message.scenario = {
- $case: "migration",
- migration: object.scenario.migration
- };
- }
- if (((_k = object.scenario) === null || _k === void 0 ? void 0 : _k.$case) === "serverLeave" && ((_l = object.scenario) === null || _l === void 0 ? void 0 : _l.serverLeave) !== undefined && ((_m = object.scenario) === null || _m === void 0 ? void 0 : _m.serverLeave) !== null) {
- message.scenario = {
- $case: "serverLeave",
- serverLeave: object.scenario.serverLeave
- };
- }
- if (((_o = object.scenario) === null || _o === void 0 ? void 0 : _o.$case) === "switchCandidateProtocol" && ((_p = object.scenario) === null || _p === void 0 ? void 0 : _p.switchCandidateProtocol) !== undefined && ((_q = object.scenario) === null || _q === void 0 ? void 0 : _q.switchCandidateProtocol) !== null) {
- message.scenario = {
- $case: "switchCandidateProtocol",
- switchCandidateProtocol: object.scenario.switchCandidateProtocol
- };
- }
- return message;
- }
-};
-function createBasePing() {
- return {
- timestamp: 0,
- rtt: 0
- };
-}
-const Ping = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.timestamp !== 0) {
- writer.uint32(8).int64(message.timestamp);
- }
- if (message.rtt !== 0) {
- writer.uint32(16).int64(message.rtt);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBasePing();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.timestamp = longToNumber(reader.int64());
- break;
- case 2:
- message.rtt = longToNumber(reader.int64());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- timestamp: isSet(object.timestamp) ? Number(object.timestamp) : 0,
- rtt: isSet(object.rtt) ? Number(object.rtt) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.timestamp !== undefined && (obj.timestamp = Math.round(message.timestamp));
- message.rtt !== undefined && (obj.rtt = Math.round(message.rtt));
- return obj;
- },
- create(base) {
- return Ping.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBasePing();
- message.timestamp = (_a = object.timestamp) !== null && _a !== void 0 ? _a : 0;
- message.rtt = (_b = object.rtt) !== null && _b !== void 0 ? _b : 0;
- return message;
- }
-};
-function createBasePong() {
- return {
- lastPingTimestamp: 0,
- timestamp: 0
- };
-}
-const Pong = {
- encode(message) {
- let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
- if (message.lastPingTimestamp !== 0) {
- writer.uint32(8).int64(message.lastPingTimestamp);
- }
- if (message.timestamp !== 0) {
- writer.uint32(16).int64(message.timestamp);
- }
- return writer;
- },
- decode(input, length) {
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
- let end = length === undefined ? reader.len : reader.pos + length;
- const message = createBasePong();
- while (reader.pos < end) {
- const tag = reader.uint32();
- switch (tag >>> 3) {
- case 1:
- message.lastPingTimestamp = longToNumber(reader.int64());
- break;
- case 2:
- message.timestamp = longToNumber(reader.int64());
- break;
- default:
- reader.skipType(tag & 7);
- break;
- }
- }
- return message;
- },
- fromJSON(object) {
- return {
- lastPingTimestamp: isSet(object.lastPingTimestamp) ? Number(object.lastPingTimestamp) : 0,
- timestamp: isSet(object.timestamp) ? Number(object.timestamp) : 0
- };
- },
- toJSON(message) {
- const obj = {};
- message.lastPingTimestamp !== undefined && (obj.lastPingTimestamp = Math.round(message.lastPingTimestamp));
- message.timestamp !== undefined && (obj.timestamp = Math.round(message.timestamp));
- return obj;
- },
- create(base) {
- return Pong.fromPartial(base !== null && base !== void 0 ? base : {});
- },
- fromPartial(object) {
- var _a, _b;
- const message = createBasePong();
- message.lastPingTimestamp = (_a = object.lastPingTimestamp) !== null && _a !== void 0 ? _a : 0;
- message.timestamp = (_b = object.timestamp) !== null && _b !== void 0 ? _b : 0;
- return message;
- }
-};
-var tsProtoGlobalThis = (() => {
- if (typeof globalThis !== "undefined") {
- return globalThis;
- }
- if (typeof self !== "undefined") {
- return self;
- }
- if (typeof window !== "undefined") {
- return window;
- }
- if (typeof global !== "undefined") {
- return global;
- }
- throw "Unable to locate global object";
-})();
-function longToNumber(long) {
- if (long.gt(Number.MAX_SAFE_INTEGER)) {
- throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
- }
- return long.toNumber();
-}
-if (_m0.util.Long !== Long) {
- _m0.util.Long = Long;
- _m0.configure();
-}
-function isSet(value) {
- return value !== null && value !== undefined;
-}
-
-class LivekitError extends Error {
- constructor(code, message) {
- super(message || 'an error has occured');
- this.code = code;
- }
-}
-class ConnectionError extends LivekitError {
- constructor(message, reason, status) {
- super(1, message);
- this.status = status;
- this.reason = reason;
- }
-}
-class DeviceUnsupportedError extends LivekitError {
- constructor(message) {
- super(21, message !== null && message !== void 0 ? message : 'device is unsupported');
- }
-}
-class TrackInvalidError extends LivekitError {
- constructor(message) {
- super(20, message !== null && message !== void 0 ? message : 'track is invalid');
- }
-}
-class UnsupportedServer extends LivekitError {
- constructor(message) {
- super(10, message !== null && message !== void 0 ? message : 'unsupported server');
- }
-}
-class UnexpectedConnectionState extends LivekitError {
- constructor(message) {
- super(12, message !== null && message !== void 0 ? message : 'unexpected connection state');
- }
-}
-class NegotiationError extends LivekitError {
- constructor(message) {
- super(13, message !== null && message !== void 0 ? message : 'unable to negotiate');
- }
-}
-class PublishDataError extends LivekitError {
- constructor(message) {
- super(13, message !== null && message !== void 0 ? message : 'unable to publish data');
- }
-}
-var MediaDeviceFailure;
-(function (MediaDeviceFailure) {
- // user rejected permissions
- MediaDeviceFailure["PermissionDenied"] = "PermissionDenied";
- // device is not available
- MediaDeviceFailure["NotFound"] = "NotFound";
- // device is in use. On Windows, only a single tab may get access to a device at a time.
- MediaDeviceFailure["DeviceInUse"] = "DeviceInUse";
- MediaDeviceFailure["Other"] = "Other";
-})(MediaDeviceFailure || (MediaDeviceFailure = {}));
-(function (MediaDeviceFailure) {
- function getFailure(error) {
- if (error && 'name' in error) {
- if (error.name === 'NotFoundError' || error.name === 'DevicesNotFoundError') {
- return MediaDeviceFailure.NotFound;
- }
- if (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError') {
- return MediaDeviceFailure.PermissionDenied;
- }
- if (error.name === 'NotReadableError' || error.name === 'TrackStartError') {
- return MediaDeviceFailure.DeviceInUse;
- }
- return MediaDeviceFailure.Other;
- }
- }
- MediaDeviceFailure.getFailure = getFailure;
-})(MediaDeviceFailure || (MediaDeviceFailure = {}));
-
-/**
- * Events are the primary way LiveKit notifies your application of changes.
- *
- * The following are events emitted by [[Room]], listen to room events like
- *
- * ```typescript
- * room.on(RoomEvent.TrackPublished, (track, publication, participant) => {})
- * ```
- */
-var RoomEvent;
-(function (RoomEvent) {
- /**
- * When the connection to the server has been established
- */
- RoomEvent["Connected"] = "connected";
- /**
- * When the connection to the server has been interrupted and it's attempting
- * to reconnect.
- */
- RoomEvent["Reconnecting"] = "reconnecting";
- /**
- * Fires when a reconnection has been successful.
- */
- RoomEvent["Reconnected"] = "reconnected";
- /**
- * When disconnected from room. This fires when room.disconnect() is called or
- * when an unrecoverable connection issue had occured
- */
- RoomEvent["Disconnected"] = "disconnected";
- /**
- * Whenever the connection state of the room changes
- *
- * args: ([[ConnectionState]])
- */
- RoomEvent["ConnectionStateChanged"] = "connectionStateChanged";
- /**
- * @deprecated StateChanged has been renamed to ConnectionStateChanged
- */
- RoomEvent["StateChanged"] = "connectionStateChanged";
- /**
- * When input or output devices on the machine have changed.
- */
- RoomEvent["MediaDevicesChanged"] = "mediaDevicesChanged";
- /**
- * When a [[RemoteParticipant]] joins *after* the local
- * participant. It will not emit events for participants that are already
- * in the room
- *
- * args: ([[RemoteParticipant]])
- */
- RoomEvent["ParticipantConnected"] = "participantConnected";
- /**
- * When a [[RemoteParticipant]] leaves *after* the local
- * participant has joined.
- *
- * args: ([[RemoteParticipant]])
- */
- RoomEvent["ParticipantDisconnected"] = "participantDisconnected";
- /**
- * When a new track is published to room *after* the local
- * participant has joined. It will not fire for tracks that are already published.
- *
- * A track published doesn't mean the participant has subscribed to it. It's
- * simply reflecting the state of the room.
- *
- * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])
- */
- RoomEvent["TrackPublished"] = "trackPublished";
- /**
- * The [[LocalParticipant]] has subscribed to a new track. This event will **always**
- * fire as long as new tracks are ready for use.
- *
- * args: ([[RemoteTrack]], [[RemoteTrackPublication]], [[RemoteParticipant]])
- */
- RoomEvent["TrackSubscribed"] = "trackSubscribed";
- /**
- * Could not subscribe to a track
- *
- * args: (track sid, [[RemoteParticipant]])
- */
- RoomEvent["TrackSubscriptionFailed"] = "trackSubscriptionFailed";
- /**
- * A [[RemoteParticipant]] has unpublished a track
- *
- * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])
- */
- RoomEvent["TrackUnpublished"] = "trackUnpublished";
- /**
- * A subscribed track is no longer available. Clients should listen to this
- * event and ensure they detach tracks.
- *
- * args: ([[Track]], [[RemoteTrackPublication]], [[RemoteParticipant]])
- */
- RoomEvent["TrackUnsubscribed"] = "trackUnsubscribed";
- /**
- * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]
- *
- * args: ([[TrackPublication]], [[Participant]])
- */
- RoomEvent["TrackMuted"] = "trackMuted";
- /**
- * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]
- *
- * args: ([[TrackPublication]], [[Participant]])
- */
- RoomEvent["TrackUnmuted"] = "trackUnmuted";
- /**
- * A local track was published successfully. This event is helpful to know
- * when to update your local UI with the newly published track.
- *
- * args: ([[LocalTrackPublication]], [[LocalParticipant]])
- */
- RoomEvent["LocalTrackPublished"] = "localTrackPublished";
- /**
- * A local track was unpublished. This event is helpful to know when to remove
- * the local track from your UI.
- *
- * When a user stops sharing their screen by pressing "End" on the browser UI,
- * this event will also fire.
- *
- * args: ([[LocalTrackPublication]], [[LocalParticipant]])
- */
- RoomEvent["LocalTrackUnpublished"] = "localTrackUnpublished";
- /**
- * When a local audio track is published the SDK checks whether there is complete silence
- * on that track and emits the LocalAudioSilenceDetected event in that case.
- * This allows for applications to show UI informing users that they might have to
- * reset their audio hardware or check for proper device connectivity.
- */
- RoomEvent["LocalAudioSilenceDetected"] = "localAudioSilenceDetected";
- /**
- * Active speakers changed. List of speakers are ordered by their audio level.
- * loudest speakers first. This will include the LocalParticipant too.
- *
- * Speaker updates are sent only to the publishing participant and their subscribers.
- *
- * args: (Array<[[Participant]]>)
- */
- RoomEvent["ActiveSpeakersChanged"] = "activeSpeakersChanged";
- /**
- * Participant metadata is a simple way for app-specific state to be pushed to
- * all users.
- * When RoomService.UpdateParticipantMetadata is called to change a participant's
- * state, *all* participants in the room will fire this event.
- *
- * args: (prevMetadata: string, [[Participant]])
- *
- */
- RoomEvent["ParticipantMetadataChanged"] = "participantMetadataChanged";
- /**
- * Room metadata is a simple way for app-specific state to be pushed to
- * all users.
- * When RoomService.UpdateRoomMetadata is called to change a room's state,
- * *all* participants in the room will fire this event.
- *
- * args: (string)
- */
- RoomEvent["RoomMetadataChanged"] = "roomMetadataChanged";
- /**
- * Data received from another participant.
- * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.
- * All participants in the room will receive the messages sent to the room.
- *
- * args: (payload: Uint8Array, participant: [[Participant]], kind: [[DataPacket_Kind]], topic?: string)
- */
- RoomEvent["DataReceived"] = "dataReceived";
- /**
- * Connection quality was changed for a Participant. It'll receive updates
- * from the local participant, as well as any [[RemoteParticipant]]s that we are
- * subscribed to.
- *
- * args: (connectionQuality: [[ConnectionQuality]], participant: [[Participant]])
- */
- RoomEvent["ConnectionQualityChanged"] = "connectionQualityChanged";
- /**
- * StreamState indicates if a subscribed (remote) track has been paused by the SFU
- * (typically this happens because of subscriber's bandwidth constraints)
- *
- * When bandwidth conditions allow, the track will be resumed automatically.
- * TrackStreamStateChanged will also be emitted when that happens.
- *
- * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]],
- * participant: [[RemoteParticipant]])
- */
- RoomEvent["TrackStreamStateChanged"] = "trackStreamStateChanged";
- /**
- * One of subscribed tracks have changed its permissions for the current
- * participant. If permission was revoked, then the track will no longer
- * be subscribed. If permission was granted, a TrackSubscribed event will
- * be emitted.
- *
- * args: (pub: [[RemoteTrackPublication]],
- * status: [[TrackPublication.SubscriptionStatus]],
- * participant: [[RemoteParticipant]])
- */
- RoomEvent["TrackSubscriptionPermissionChanged"] = "trackSubscriptionPermissionChanged";
- /**
- * One of subscribed tracks have changed its status for the current
- * participant.
- *
- * args: (pub: [[RemoteTrackPublication]],
- * status: [[TrackPublication.SubscriptionStatus]],
- * participant: [[RemoteParticipant]])
- */
- RoomEvent["TrackSubscriptionStatusChanged"] = "trackSubscriptionStatusChanged";
- /**
- * LiveKit will attempt to autoplay all audio tracks when you attach them to
- * audio elements. However, if that fails, we'll notify you via AudioPlaybackStatusChanged.
- * `Room.canPlayAudio` will indicate if audio playback is permitted.
- */
- RoomEvent["AudioPlaybackStatusChanged"] = "audioPlaybackChanged";
- /**
- * When we have encountered an error while attempting to create a track.
- * The errors take place in getUserMedia().
- * Use MediaDeviceFailure.getFailure(error) to get the reason of failure.
- * [[LocalParticipant.lastCameraError]] and [[LocalParticipant.lastMicrophoneError]]
- * will indicate if it had an error while creating the audio or video track respectively.
- *
- * args: (error: Error)
- */
- RoomEvent["MediaDevicesError"] = "mediaDevicesError";
- /**
- * A participant's permission has changed. Currently only fired on LocalParticipant.
- * args: (prevPermissions: [[ParticipantPermission]], participant: [[Participant]])
- */
- RoomEvent["ParticipantPermissionsChanged"] = "participantPermissionsChanged";
- /**
- * Signal connected, can publish tracks.
- */
- RoomEvent["SignalConnected"] = "signalConnected";
- /**
- * Recording of a room has started/stopped. Room.isRecording will be updated too.
- * args: (isRecording: boolean)
- */
- RoomEvent["RecordingStatusChanged"] = "recordingStatusChanged";
-})(RoomEvent || (RoomEvent = {}));
-var ParticipantEvent;
-(function (ParticipantEvent) {
- /**
- * When a new track is published to room *after* the local
- * participant has joined. It will not fire for tracks that are already published.
- *
- * A track published doesn't mean the participant has subscribed to it. It's
- * simply reflecting the state of the room.
- *
- * args: ([[RemoteTrackPublication]])
- */
- ParticipantEvent["TrackPublished"] = "trackPublished";
- /**
- * Successfully subscribed to the [[RemoteParticipant]]'s track.
- * This event will **always** fire as long as new tracks are ready for use.
- *
- * args: ([[RemoteTrack]], [[RemoteTrackPublication]])
- */
- ParticipantEvent["TrackSubscribed"] = "trackSubscribed";
- /**
- * Could not subscribe to a track
- *
- * args: (track sid)
- */
- ParticipantEvent["TrackSubscriptionFailed"] = "trackSubscriptionFailed";
- /**
- * A [[RemoteParticipant]] has unpublished a track
- *
- * args: ([[RemoteTrackPublication]])
- */
- ParticipantEvent["TrackUnpublished"] = "trackUnpublished";
- /**
- * A subscribed track is no longer available. Clients should listen to this
- * event and ensure they detach tracks.
- *
- * args: ([[RemoteTrack]], [[RemoteTrackPublication]])
- */
- ParticipantEvent["TrackUnsubscribed"] = "trackUnsubscribed";
- /**
- * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]
- *
- * args: ([[TrackPublication]])
- */
- ParticipantEvent["TrackMuted"] = "trackMuted";
- /**
- * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]
- *
- * args: ([[TrackPublication]])
- */
- ParticipantEvent["TrackUnmuted"] = "trackUnmuted";
- /**
- * A local track was published successfully. This event is helpful to know
- * when to update your local UI with the newly published track.
- *
- * args: ([[LocalTrackPublication]])
- */
- ParticipantEvent["LocalTrackPublished"] = "localTrackPublished";
- /**
- * A local track was unpublished. This event is helpful to know when to remove
- * the local track from your UI.
- *
- * When a user stops sharing their screen by pressing "End" on the browser UI,
- * this event will also fire.
- *
- * args: ([[LocalTrackPublication]])
- */
- ParticipantEvent["LocalTrackUnpublished"] = "localTrackUnpublished";
- /**
- * Participant metadata is a simple way for app-specific state to be pushed to
- * all users.
- * When RoomService.UpdateParticipantMetadata is called to change a participant's
- * state, *all* participants in the room will fire this event.
- * To access the current metadata, see [[Participant.metadata]].
- *
- * args: (prevMetadata: string)
- *
- */
- ParticipantEvent["ParticipantMetadataChanged"] = "participantMetadataChanged";
- /**
- * Data received from this participant as sender.
- * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.
- * All participants in the room will receive the messages sent to the room.
- *
- * args: (payload: Uint8Array, kind: [[DataPacket_Kind]])
- */
- ParticipantEvent["DataReceived"] = "dataReceived";
- /**
- * Has speaking status changed for the current participant
- *
- * args: (speaking: boolean)
- */
- ParticipantEvent["IsSpeakingChanged"] = "isSpeakingChanged";
- /**
- * Connection quality was changed for a Participant. It'll receive updates
- * from the local participant, as well as any [[RemoteParticipant]]s that we are
- * subscribed to.
- *
- * args: (connectionQuality: [[ConnectionQuality]])
- */
- ParticipantEvent["ConnectionQualityChanged"] = "connectionQualityChanged";
- /**
- * StreamState indicates if a subscribed track has been paused by the SFU
- * (typically this happens because of subscriber's bandwidth constraints)
- *
- * When bandwidth conditions allow, the track will be resumed automatically.
- * TrackStreamStateChanged will also be emitted when that happens.
- *
- * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]])
- */
- ParticipantEvent["TrackStreamStateChanged"] = "trackStreamStateChanged";
- /**
- * One of subscribed tracks have changed its permissions for the current
- * participant. If permission was revoked, then the track will no longer
- * be subscribed. If permission was granted, a TrackSubscribed event will
- * be emitted.
- *
- * args: (pub: [[RemoteTrackPublication]],
- * status: [[TrackPublication.SubscriptionStatus]])
- */
- ParticipantEvent["TrackSubscriptionPermissionChanged"] = "trackSubscriptionPermissionChanged";
- /**
- * One of the remote participants publications has changed its subscription status.
- *
- */
- ParticipantEvent["TrackSubscriptionStatusChanged"] = "trackSubscriptionStatusChanged";
- // fired only on LocalParticipant
- /** @internal */
- ParticipantEvent["MediaDevicesError"] = "mediaDevicesError";
- /**
- * A participant's permission has changed. Currently only fired on LocalParticipant.
- * args: (prevPermissions: [[ParticipantPermission]])
- */
- ParticipantEvent["ParticipantPermissionsChanged"] = "participantPermissionsChanged";
-})(ParticipantEvent || (ParticipantEvent = {}));
-/** @internal */
-var EngineEvent;
-(function (EngineEvent) {
- EngineEvent["TransportsCreated"] = "transportsCreated";
- EngineEvent["Connected"] = "connected";
- EngineEvent["Disconnected"] = "disconnected";
- EngineEvent["Resuming"] = "resuming";
- EngineEvent["Resumed"] = "resumed";
- EngineEvent["Restarting"] = "restarting";
- EngineEvent["Restarted"] = "restarted";
- EngineEvent["SignalResumed"] = "signalResumed";
- EngineEvent["Closing"] = "closing";
- EngineEvent["MediaTrackAdded"] = "mediaTrackAdded";
- EngineEvent["ActiveSpeakersUpdate"] = "activeSpeakersUpdate";
- EngineEvent["DataPacketReceived"] = "dataPacketReceived";
-})(EngineEvent || (EngineEvent = {}));
-var TrackEvent;
-(function (TrackEvent) {
- TrackEvent["Message"] = "message";
- TrackEvent["Muted"] = "muted";
- TrackEvent["Unmuted"] = "unmuted";
- /**
- * Only fires on LocalTracks
- */
- TrackEvent["Restarted"] = "restarted";
- TrackEvent["Ended"] = "ended";
- TrackEvent["Subscribed"] = "subscribed";
- TrackEvent["Unsubscribed"] = "unsubscribed";
- /** @internal */
- TrackEvent["UpdateSettings"] = "updateSettings";
- /** @internal */
- TrackEvent["UpdateSubscription"] = "updateSubscription";
- /** @internal */
- TrackEvent["AudioPlaybackStarted"] = "audioPlaybackStarted";
- /** @internal */
- TrackEvent["AudioPlaybackFailed"] = "audioPlaybackFailed";
- /**
- * @internal
- * Only fires on LocalAudioTrack instances
- */
- TrackEvent["AudioSilenceDetected"] = "audioSilenceDetected";
- /** @internal */
- TrackEvent["VisibilityChanged"] = "visibilityChanged";
- /** @internal */
- TrackEvent["VideoDimensionsChanged"] = "videoDimensionsChanged";
- /** @internal */
- TrackEvent["ElementAttached"] = "elementAttached";
- /** @internal */
- TrackEvent["ElementDetached"] = "elementDetached";
- /**
- * @internal
- * Only fires on LocalTracks
- */
- TrackEvent["UpstreamPaused"] = "upstreamPaused";
- /**
- * @internal
- * Only fires on LocalTracks
- */
- TrackEvent["UpstreamResumed"] = "upstreamResumed";
- /**
- * @internal
- * Fires on RemoteTrackPublication
- */
- TrackEvent["SubscriptionPermissionChanged"] = "subscriptionPermissionChanged";
- /**
- * Fires on RemoteTrackPublication
- */
- TrackEvent["SubscriptionStatusChanged"] = "subscriptionStatusChanged";
-})(TrackEvent || (TrackEvent = {}));
-
-const monitorFrequency = 2000;
-function computeBitrate(currentStats, prevStats) {
- if (!prevStats) {
- return 0;
- }
- let bytesNow;
- let bytesPrev;
- if ('bytesReceived' in currentStats) {
- bytesNow = currentStats.bytesReceived;
- bytesPrev = prevStats.bytesReceived;
- } else if ('bytesSent' in currentStats) {
- bytesNow = currentStats.bytesSent;
- bytesPrev = prevStats.bytesSent;
- }
- if (bytesNow === undefined || bytesPrev === undefined || currentStats.timestamp === undefined || prevStats.timestamp === undefined) {
- return 0;
- }
- return (bytesNow - bytesPrev) * 8 * 1000 / (currentStats.timestamp - prevStats.timestamp);
-}
-
-var uaParserExports = {};
-var uaParser = {
- get exports(){ return uaParserExports; },
- set exports(v){ uaParserExports = v; },
-};
-
-(function (module, exports) {
- /////////////////////////////////////////////////////////////////////////////////
- /* UAParser.js v1.0.33
- Copyright © 2012-2021 Faisal Salman
- MIT License */ /*
- Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
- Supports browser & node.js environment.
- Demo : https://faisalman.github.io/ua-parser-js
- Source : https://github.com/faisalman/ua-parser-js */
- /////////////////////////////////////////////////////////////////////////////////
-
- (function (window, undefined$1) {
-
- //////////////
- // Constants
- /////////////
- var LIBVERSION = '1.0.33',
- EMPTY = '',
- UNKNOWN = '?',
- FUNC_TYPE = 'function',
- UNDEF_TYPE = 'undefined',
- OBJ_TYPE = 'object',
- STR_TYPE = 'string',
- MAJOR = 'major',
- MODEL = 'model',
- NAME = 'name',
- TYPE = 'type',
- VENDOR = 'vendor',
- VERSION = 'version',
- ARCHITECTURE = 'architecture',
- CONSOLE = 'console',
- MOBILE = 'mobile',
- TABLET = 'tablet',
- SMARTTV = 'smarttv',
- WEARABLE = 'wearable',
- EMBEDDED = 'embedded',
- UA_MAX_LENGTH = 350;
- var AMAZON = 'Amazon',
- APPLE = 'Apple',
- ASUS = 'ASUS',
- BLACKBERRY = 'BlackBerry',
- BROWSER = 'Browser',
- CHROME = 'Chrome',
- EDGE = 'Edge',
- FIREFOX = 'Firefox',
- GOOGLE = 'Google',
- HUAWEI = 'Huawei',
- LG = 'LG',
- MICROSOFT = 'Microsoft',
- MOTOROLA = 'Motorola',
- OPERA = 'Opera',
- SAMSUNG = 'Samsung',
- SHARP = 'Sharp',
- SONY = 'Sony',
- XIAOMI = 'Xiaomi',
- ZEBRA = 'Zebra',
- FACEBOOK = 'Facebook';
-
- ///////////
- // Helper
- //////////
-
- var extend = function (regexes, extensions) {
- var mergedRegexes = {};
- for (var i in regexes) {
- if (extensions[i] && extensions[i].length % 2 === 0) {
- mergedRegexes[i] = extensions[i].concat(regexes[i]);
- } else {
- mergedRegexes[i] = regexes[i];
- }
- }
- return mergedRegexes;
- },
- enumerize = function (arr) {
- var enums = {};
- for (var i = 0; i < arr.length; i++) {
- enums[arr[i].toUpperCase()] = arr[i];
- }
- return enums;
- },
- has = function (str1, str2) {
- return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;
- },
- lowerize = function (str) {
- return str.toLowerCase();
- },
- majorize = function (version) {
- return typeof version === STR_TYPE ? version.replace(/[^\d\.]/g, EMPTY).split('.')[0] : undefined$1;
- },
- trim = function (str, len) {
- if (typeof str === STR_TYPE) {
- str = str.replace(/^\s\s*/, EMPTY);
- return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
- }
- };
-
- ///////////////
- // Map helper
- //////////////
-
- var rgxMapper = function (ua, arrays) {
- var i = 0,
- j,
- k,
- p,
- q,
- matches,
- match;
-
- // loop through all regexes maps
- while (i < arrays.length && !matches) {
- var regex = arrays[i],
- // even sequence (0,2,4,..)
- props = arrays[i + 1]; // odd sequence (1,3,5,..)
- j = k = 0;
-
- // try matching uastring with regexes
- while (j < regex.length && !matches) {
- matches = regex[j++].exec(ua);
- if (!!matches) {
- for (p = 0; p < props.length; p++) {
- match = matches[++k];
- q = props[p];
- // check if given property is actually array
- if (typeof q === OBJ_TYPE && q.length > 0) {
- if (q.length === 2) {
- if (typeof q[1] == FUNC_TYPE) {
- // assign modified match
- this[q[0]] = q[1].call(this, match);
- } else {
- // assign given value, ignore regex match
- this[q[0]] = q[1];
- }
- } else if (q.length === 3) {
- // check whether function or regex
- if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {
- // call function (usually string mapper)
- this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined$1;
- } else {
- // sanitize match using given regex
- this[q[0]] = match ? match.replace(q[1], q[2]) : undefined$1;
- }
- } else if (q.length === 4) {
- this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined$1;
- }
- } else {
- this[q] = match ? match : undefined$1;
- }
- }
- }
- }
- i += 2;
- }
- },
- strMapper = function (str, map) {
- for (var i in map) {
- // check if current value is array
- if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {
- for (var j = 0; j < map[i].length; j++) {
- if (has(map[i][j], str)) {
- return i === UNKNOWN ? undefined$1 : i;
- }
- }
- } else if (has(map[i], str)) {
- return i === UNKNOWN ? undefined$1 : i;
- }
- }
- return str;
- };
-
- ///////////////
- // String map
- //////////////
-
- // Safari < 3.0
- var oldSafariMap = {
- '1.0': '/8',
- '1.2': '/1',
- '1.3': '/3',
- '2.0': '/412',
- '2.0.2': '/416',
- '2.0.3': '/417',
- '2.0.4': '/419',
- '?': '/'
- },
- windowsVersionMap = {
- 'ME': '4.90',
- 'NT 3.11': 'NT3.51',
- 'NT 4.0': 'NT4.0',
- '2000': 'NT 5.0',
- 'XP': ['NT 5.1', 'NT 5.2'],
- 'Vista': 'NT 6.0',
- '7': 'NT 6.1',
- '8': 'NT 6.2',
- '8.1': 'NT 6.3',
- '10': ['NT 6.4', 'NT 10.0'],
- 'RT': 'ARM'
- };
-
- //////////////
- // Regex map
- /////////////
-
- var regexes = {
- browser: [[/\b(?:crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
- ], [VERSION, [NAME, 'Chrome']], [/edg(?:e|ios|a)?\/([\w\.]+)/i // Microsoft Edge
- ], [VERSION, [NAME, 'Edge']], [
- // Presto based
- /(opera mini)\/([-\w\.]+)/i,
- // Opera Mini
- /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
- // Opera Mobi/Tablet
- /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i // Opera
- ], [NAME, VERSION], [/opios[\/ ]+([\w\.]+)/i // Opera mini on iphone >= 8.0
- ], [VERSION, [NAME, OPERA + ' Mini']], [/\bopr\/([\w\.]+)/i // Opera Webkit
- ], [VERSION, [NAME, OPERA]], [
- // Mixed
- /(kindle)\/([\w\.]+)/i,
- // Kindle
- /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,
- // Lunascape/Maxthon/Netfront/Jasmine/Blazer
- // Trident based
- /(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,
- // Avant/IEMobile/SlimBrowser
- /(ba?idubrowser)[\/ ]?([\w\.]+)/i,
- // Baidu Browser
- /(?:ms|\()(ie) ([\w\.]+)/i,
- // Internet Explorer
-
- // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
- /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,
- // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
- /(weibo)__([\d\.]+)/i // Weibo
- ], [NAME, VERSION], [/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i // UCBrowser
- ], [VERSION, [NAME, 'UC' + BROWSER]], [/microm.+\bqbcore\/([\w\.]+)/i,
- // WeChat Desktop for Windows Built-in Browser
- /\bqbcore\/([\w\.]+).+microm/i], [VERSION, [NAME, 'WeChat(Win) Desktop']], [/micromessenger\/([\w\.]+)/i // WeChat
- ], [VERSION, [NAME, 'WeChat']], [/konqueror\/([\w\.]+)/i // Konqueror
- ], [VERSION, [NAME, 'Konqueror']], [/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i // IE11
- ], [VERSION, [NAME, 'IE']], [/yabrowser\/([\w\.]+)/i // Yandex
- ], [VERSION, [NAME, 'Yandex']], [/(avast|avg)\/([\w\.]+)/i // Avast/AVG Secure Browser
- ], [[NAME, /(.+)/, '$1 Secure ' + BROWSER], VERSION], [/\bfocus\/([\w\.]+)/i // Firefox Focus
- ], [VERSION, [NAME, FIREFOX + ' Focus']], [/\bopt\/([\w\.]+)/i // Opera Touch
- ], [VERSION, [NAME, OPERA + ' Touch']], [/coc_coc\w+\/([\w\.]+)/i // Coc Coc Browser
- ], [VERSION, [NAME, 'Coc Coc']], [/dolfin\/([\w\.]+)/i // Dolphin
- ], [VERSION, [NAME, 'Dolphin']], [/coast\/([\w\.]+)/i // Opera Coast
- ], [VERSION, [NAME, OPERA + ' Coast']], [/miuibrowser\/([\w\.]+)/i // MIUI Browser
- ], [VERSION, [NAME, 'MIUI ' + BROWSER]], [/fxios\/([-\w\.]+)/i // Firefox for iOS
- ], [VERSION, [NAME, FIREFOX]], [/\bqihu|(qi?ho?o?|360)browser/i // 360
- ], [[NAME, '360 ' + BROWSER]], [/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i], [[NAME, /(.+)/, '$1 ' + BROWSER], VERSION], [
- // Oculus/Samsung/Sailfish/Huawei Browser
- /(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
- ], [[NAME, /_/g, ' '], VERSION], [/(electron)\/([\w\.]+) safari/i,
- // Electron-based App
- /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
- // Tesla
- /m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i // QQBrowser/Baidu App/2345 Browser
- ], [NAME, VERSION], [/(metasr)[\/ ]?([\w\.]+)/i,
- // SouGouBrowser
- /(lbbrowser)/i,
- // LieBao Browser
- /\[(linkedin)app\]/i // LinkedIn App for iOS & Android
- ], [NAME], [
- // WebView
- /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i // Facebook App for iOS & Android
- ], [[NAME, FACEBOOK], VERSION], [/safari (line)\/([\w\.]+)/i,
- // Line App for iOS
- /\b(line)\/([\w\.]+)\/iab/i,
- // Line App for Android
- /(chromium|instagram)[\/ ]([-\w\.]+)/i // Chromium/Instagram
- ], [NAME, VERSION], [/\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS
- ], [VERSION, [NAME, 'GSA']], [/headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless
- ], [VERSION, [NAME, CHROME + ' Headless']], [/ wv\).+(chrome)\/([\w\.]+)/i // Chrome WebView
- ], [[NAME, CHROME + ' WebView'], VERSION], [/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i // Android Browser
- ], [VERSION, [NAME, 'Android ' + BROWSER]], [/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia
- ], [NAME, VERSION], [/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i // Mobile Safari
- ], [VERSION, [NAME, 'Mobile Safari']], [/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile
- ], [VERSION, NAME], [/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
- ], [NAME, [VERSION, strMapper, oldSafariMap]], [/(webkit|khtml)\/([\w\.]+)/i], [NAME, VERSION], [
- // Gecko based
- /(navigator|netscape\d?)\/([-\w\.]+)/i // Netscape
- ], [[NAME, 'Netscape'], VERSION], [/mobile vr; rv:([\w\.]+)\).+firefox/i // Firefox Reality
- ], [VERSION, [NAME, FIREFOX + ' Reality']], [/ekiohf.+(flow)\/([\w\.]+)/i,
- // Flow
- /(swiftfox)/i,
- // Swiftfox
- /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,
- // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar
- /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,
- // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
- /(firefox)\/([\w\.]+)/i,
- // Other Firefox-based
- /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,
- // Mozilla
-
- // Other
- /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
- // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser
- /(links) \(([\w\.]+)/i // Links
- ], [NAME, VERSION], [/(cobalt)\/([\w\.]+)/i // Cobalt
- ], [NAME, [VERSION, /master.|lts./, ""]]],
- cpu: [[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i // AMD64 (x64)
- ], [[ARCHITECTURE, 'amd64']], [/(ia32(?=;))/i // IA32 (quicktime)
- ], [[ARCHITECTURE, lowerize]], [/((?:i[346]|x)86)[;\)]/i // IA32 (x86)
- ], [[ARCHITECTURE, 'ia32']], [/\b(aarch64|arm(v?8e?l?|_?64))\b/i // ARM64
- ], [[ARCHITECTURE, 'arm64']], [/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i // ARMHF
- ], [[ARCHITECTURE, 'armhf']], [
- // PocketPC mistakenly identified as PowerPC
- /windows (ce|mobile); ppc;/i], [[ARCHITECTURE, 'arm']], [/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i // PowerPC
- ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [/(sun4\w)[;\)]/i // SPARC
- ], [[ARCHITECTURE, 'sparc']], [/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
- // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
- ], [[ARCHITECTURE, lowerize]]],
- device: [[
- //////////////////////////
- // MOBILES & TABLETS
- // Ordered by popularity
- /////////////////////////
-
- // Samsung
- /\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i, /samsung[- ]([-\w]+)/i, /sec-(sgh\w+)/i], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [
- // Apple
- /\((ip(?:hone|od)[\w ]*);/i // iPod/iPhone
- ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [/\((ipad);[-\w\),; ]+apple/i,
- // iPad
- /applecoremedia\/[\w\.]+ \((ipad)/i, /\b(ipad)\d\d?,\d\d?[;\]].+ios/i], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [/(macintosh);/i], [MODEL, [VENDOR, APPLE]], [
- // Huawei
- /\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [/(?:huawei|honor)([-\w ]+)[;\)]/i, /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
- // Xiaomi
- /\b(poco[\w ]+)(?: bui|\))/i,
- // Xiaomi POCO
- /\b; (\w+) build\/hm\1/i,
- // Xiaomi Hongmi 'numeric' models
- /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
- // Xiaomi Hongmi
- /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,
- // Xiaomi Redmi
- /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i // Xiaomi Mi
- ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i // Mi Pad tablets
- ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
- // OPPO
- /; (\w+) bui.+ oppo/i, /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [
- // Vivo
- /vivo (\w+)(?: bui|\))/i, /\b(v[12]\d{3}\w?[at])(?: bui|;)/i], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
- // Realme
- /\b(rmx[12]\d{3})(?: bui|;|\))/i], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [
- // Motorola
- /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i, /\bmot(?:orola)?[- ](\w*)/i, /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [/\b(mz60\d|xoom[2 ]{0,2}) build\//i], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [
- // LG
- /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i, /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i, /\blg-?([\d\w]+) bui/i], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [
- // Lenovo
- /(ideatab[-\w ]+)/i, /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
- // Nokia
- /(?:maemo|nokia).*(n900|lumia \d+)/i, /nokia[-_ ]?([-\w\.]*)/i], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [
- // Google
- /(pixel c)\b/i // Google Pixel C
- ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i // Google Pixel
- ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [
- // Sony
- /droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [/sony tablet [ps]/i, /\b(?:sony)?sgp\w+(?: bui|\))/i], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [
- // OnePlus
- / (kb2005|in20[12]5|be20[12][59])\b/i, /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
- // Amazon
- /(alexa)webm/i, /(kf[a-z]{2}wi)( bui|\))/i,
- // Kindle Fire without Silk
- /(kf[a-z]+)( bui|\)).+silk\//i // Kindle Fire HD
- ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i // Fire Phone
- ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [
- // BlackBerry
- /(playbook);[-\w\),; ]+(rim)/i // BlackBerry PlayBook
- ], [MODEL, VENDOR, [TYPE, TABLET]], [/\b((?:bb[a-f]|st[hv])100-\d)/i, /\(bb10; (\w+)/i // BlackBerry 10
- ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [
- // Asus
- /(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [
- // HTC
- /(nexus 9)/i // HTC Nexus 9
- ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
- // HTC
-
- // ZTE
- /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i, /(alcatel|geeksphone|nexian|panasonic|sony(?!-bra))[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
- ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
- // Acer
- /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
- // Meizu
- /droid.+; (m[1-5] note) bui/i, /\bmz-([-\w]{2,})/i], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
- // Sharp
- /\b(sh-?[altvz]?\d\d[a-ekm]?)/i], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
- // MIXED
- /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,
- // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
- /(hp) ([\w ]+\w)/i,
- // HP iPAQ
- /(asus)-?(\w+)/i,
- // Asus
- /(microsoft); (lumia[\w ]+)/i,
- // Microsoft Lumia
- /(lenovo)[-_ ]?([-\w]+)/i,
- // Lenovo
- /(jolla)/i,
- // Jolla
- /(oppo) ?([\w ]+) bui/i // OPPO
- ], [VENDOR, MODEL, [TYPE, MOBILE]], [/(archos) (gamepad2?)/i,
- // Archos
- /(hp).+(touchpad(?!.+tablet)|tablet)/i,
- // HP TouchPad
- /(kindle)\/([\w\.]+)/i,
- // Kindle
- /(nook)[\w ]+build\/(\w+)/i,
- // Nook
- /(dell) (strea[kpr\d ]*[\dko])/i,
- // Dell Streak
- /(le[- ]+pan)[- ]+(\w{1,9}) bui/i,
- // Le Pan Tablets
- /(trinity)[- ]*(t\d{3}) bui/i,
- // Trinity Tablets
- /(gigaset)[- ]+(q\w{1,9}) bui/i,
- // Gigaset Tablets
- /(vodafone) ([\w ]+)(?:\)| bui)/i // Vodafone
- ], [VENDOR, MODEL, [TYPE, TABLET]], [/(surface duo)/i // Surface Duo
- ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [/droid [\d\.]+; (fp\du?)(?: b|\))/i // Fairphone
- ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [/(u304aa)/i // AT&T
- ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [/\bsie-(\w*)/i // Siemens
- ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [/\b(rct\w+) b/i // RCA Tablets
- ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [/\b(venue[\d ]{2,7}) b/i // Dell Venue Tablets
- ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [/\b(q(?:mv|ta)\w+) b/i // Verizon Tablet
- ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i // Barnes & Noble Tablet
- ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [/\b(tm\d{3}\w+) b/i], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [/\b(k88) b/i // ZTE K Series Tablet
- ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [/\b(nx\d{3}j) b/i // ZTE Nubia
- ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [/\b(gen\d{3}) b.+49h/i // Swiss GEN Mobile
- ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [/\b(zur\d{3}) b/i // Swiss ZUR Tablet
- ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [/\b((zeki)?tb.*\b) b/i // Zeki Tablets
- ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [/\b([yr]\d{2}) b/i, /\b(dragon[- ]+touch |dt)(\w{5}) b/i // Dragon Touch Tablet
- ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [/\b(ns-?\w{0,9}) b/i // Insignia Tablets
- ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [/\b((nxa|next)-?\w{0,9}) b/i // NextBook Tablets
- ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones
- ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [/\b(lvtel\-)?(v1[12]) b/i // LvTel Phones
- ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [/\b(ph-1) /i // Essential PH-1
- ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [/\b(v(100md|700na|7011|917g).*\b) b/i // Envizen Tablets
- ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [/\b(trio[-\w\. ]+) b/i // MachSpeed Tablets
- ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [/\btu_(1491) b/i // Rotor Tablets
- ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [/(shield[\w ]+) b/i // Nvidia Shield Tablets
- ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [/(sprint) (\w+)/i // Sprint Phones
- ], [VENDOR, MODEL, [TYPE, MOBILE]], [/(kin\.[onetw]{3})/i // Microsoft Kin
- ], [[MODEL, /\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i // Zebra
- ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [
- ///////////////////
- // CONSOLES
- ///////////////////
-
- /(ouya)/i,
- // Ouya
- /(nintendo) ([wids3utch]+)/i // Nintendo
- ], [VENDOR, MODEL, [TYPE, CONSOLE]], [/droid.+; (shield) bui/i // Nvidia
- ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [/(playstation [345portablevi]+)/i // Playstation
- ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
- ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [
- ///////////////////
- // SMARTTVS
- ///////////////////
-
- /smart-tv.+(samsung)/i // Samsung
- ], [VENDOR, [TYPE, SMARTTV]], [/hbbtv.+maple;(\d+)/i], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i // LG SmartTV
- ], [[VENDOR, LG], [TYPE, SMARTTV]], [/(apple) ?tv/i // Apple TV
- ], [VENDOR, [MODEL, APPLE + ' TV'], [TYPE, SMARTTV]], [/crkey/i // Google Chromecast
- ], [[MODEL, CHROME + 'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [/droid.+aft(\w)( bui|\))/i // Fire TV
- ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [/\(dtv[\);].+(aquos)/i, /(aquos-tv[\w ]+)\)/i // Sharp
- ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]], [/(bravia[\w ]+)( bui|\))/i // Sony
- ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [/(mitv-\w{5}) bui/i // Xiaomi
- ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
- // Roku
- /hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i // HbbTV devices
- ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors
- ], [[TYPE, SMARTTV]], [
- ///////////////////
- // WEARABLES
- ///////////////////
-
- /((pebble))app/i // Pebble
- ], [VENDOR, MODEL, [TYPE, WEARABLE]], [/droid.+; (glass) \d/i // Google Glass
- ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [/droid.+; (wt63?0{2,3})\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [/(quest( 2)?)/i // Oculus Quest
- ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [
- ///////////////////
- // EMBEDDED
- ///////////////////
-
- /(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i // Tesla
- ], [VENDOR, [TYPE, EMBEDDED]], [
- ////////////////////
- // MIXED (GENERIC)
- ///////////////////
-
- /droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors
- ], [MODEL, [TYPE, MOBILE]], [/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors
- ], [MODEL, [TYPE, TABLET]], [/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i // Unidentifiable Tablet
- ], [[TYPE, TABLET]], [/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile
- ], [[TYPE, MOBILE]], [/(android[-\w\. ]{0,9});.+buil/i // Generic Android Device
- ], [MODEL, [VENDOR, 'Generic']]],
- engine: [[/windows.+ edge\/([\w\.]+)/i // EdgeHTML
- ], [VERSION, [NAME, EDGE + 'HTML']], [/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i // Blink
- ], [VERSION, [NAME, 'Blink']], [/(presto)\/([\w\.]+)/i,
- // Presto
- /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
- // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
- /ekioh(flow)\/([\w\.]+)/i,
- // Flow
- /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,
- // KHTML/Tasman/Links
- /(icab)[\/ ]([23]\.[\d\.]+)/i // iCab
- ], [NAME, VERSION], [/rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
- ], [VERSION, NAME]],
- os: [[
- // Windows
- /microsoft (windows) (vista|xp)/i // Windows (iTunes)
- ], [NAME, VERSION], [/(windows) nt 6\.2; (arm)/i,
- // Windows RT
- /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,
- // Windows Phone
- /(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i], [NAME, [VERSION, strMapper, windowsVersionMap]], [/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [
- // iOS/macOS
- /ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,
- // iOS
- /cfnetwork\/.+darwin/i], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [/(mac os x) ?([\w\. ]*)/i, /(macintosh|mac_powerpc\b)(?!.+haiku)/i // Mac OS
- ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
- // Mobile OSes
- /droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS
- ], [VERSION, NAME], [
- // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS
- /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i, /(blackberry)\w*\/([\w\.]*)/i,
- // Blackberry
- /(tizen|kaios)[\/ ]([\w\.]+)/i,
- // Tizen/KaiOS
- /\((series40);/i // Series 40
- ], [NAME, VERSION], [/\(bb(10);/i // BlackBerry 10
- ], [VERSION, [NAME, BLACKBERRY]], [/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i // Symbian
- ], [VERSION, [NAME, 'Symbian']], [/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i // Firefox OS
- ], [VERSION, [NAME, FIREFOX + ' OS']], [/web0s;.+rt(tv)/i, /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i // WebOS
- ], [VERSION, [NAME, 'webOS']], [
- // Google Chromecast
- /crkey\/([\d\.]+)/i // Google Chromecast
- ], [VERSION, [NAME, CHROME + 'cast']], [/(cros) [\w]+ ([\w\.]+\w)/i // Chromium OS
- ], [[NAME, 'Chromium OS'], VERSION], [
- // Console
- /(nintendo|playstation) ([wids345portablevuch]+)/i,
- // Nintendo/Playstation
- /(xbox); +xbox ([^\);]+)/i,
- // Microsoft Xbox (360, One, X, S, Series X, Series S)
-
- // Other
- /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,
- // Joli/Palm
- /(mint)[\/\(\) ]?(\w*)/i,
- // Mint
- /(mageia|vectorlinux)[; ]/i,
- // Mageia/VectorLinux
- /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
- // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire
- /(hurd|linux) ?([\w\.]*)/i,
- // Hurd/Linux
- /(gnu) ?([\w\.]*)/i,
- // GNU
- /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
- // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
- /(haiku) (\w+)/i // Haiku
- ], [NAME, VERSION], [/(sunos) ?([\w\.\d]*)/i // Solaris
- ], [[NAME, 'Solaris'], VERSION], [/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
- // Solaris
- /(aix) ((\d)(?=\.|\)| )[\w\.])*/i,
- // AIX
- /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i,
- // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX
- /(unix) ?([\w\.]*)/i // UNIX
- ], [NAME, VERSION]]
- };
-
- /////////////////
- // Constructor
- ////////////////
-
- var UAParser = function (ua, extensions) {
- if (typeof ua === OBJ_TYPE) {
- extensions = ua;
- ua = undefined$1;
- }
- if (!(this instanceof UAParser)) {
- return new UAParser(ua, extensions).getResult();
- }
- var _ua = ua || (typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent ? window.navigator.userAgent : EMPTY);
- var _rgxmap = extensions ? extend(regexes, extensions) : regexes;
- this.getBrowser = function () {
- var _browser = {};
- _browser[NAME] = undefined$1;
- _browser[VERSION] = undefined$1;
- rgxMapper.call(_browser, _ua, _rgxmap.browser);
- _browser.major = majorize(_browser.version);
- return _browser;
- };
- this.getCPU = function () {
- var _cpu = {};
- _cpu[ARCHITECTURE] = undefined$1;
- rgxMapper.call(_cpu, _ua, _rgxmap.cpu);
- return _cpu;
- };
- this.getDevice = function () {
- var _device = {};
- _device[VENDOR] = undefined$1;
- _device[MODEL] = undefined$1;
- _device[TYPE] = undefined$1;
- rgxMapper.call(_device, _ua, _rgxmap.device);
- return _device;
- };
- this.getEngine = function () {
- var _engine = {};
- _engine[NAME] = undefined$1;
- _engine[VERSION] = undefined$1;
- rgxMapper.call(_engine, _ua, _rgxmap.engine);
- return _engine;
- };
- this.getOS = function () {
- var _os = {};
- _os[NAME] = undefined$1;
- _os[VERSION] = undefined$1;
- rgxMapper.call(_os, _ua, _rgxmap.os);
- return _os;
- };
- this.getResult = function () {
- return {
- ua: this.getUA(),
- browser: this.getBrowser(),
- engine: this.getEngine(),
- os: this.getOS(),
- device: this.getDevice(),
- cpu: this.getCPU()
- };
- };
- this.getUA = function () {
- return _ua;
- };
- this.setUA = function (ua) {
- _ua = typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua;
- return this;
- };
- this.setUA(_ua);
- return this;
- };
- UAParser.VERSION = LIBVERSION;
- UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);
- UAParser.CPU = enumerize([ARCHITECTURE]);
- UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);
- UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);
-
- ///////////
- // Export
- //////////
-
- // check js environment
- {
- // nodejs env
- if (module.exports) {
- exports = module.exports = UAParser;
- }
- exports.UAParser = UAParser;
- }
-
- // jQuery/Zepto specific (optional)
- // Note:
- // In AMD env the global scope should be kept clean, but jQuery is an exception.
- // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
- // and we should catch that.
- var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);
- if ($ && !$.ua) {
- var parser = new UAParser();
- $.ua = parser.getResult();
- $.ua.get = function () {
- return parser.getUA();
- };
- $.ua.set = function (ua) {
- parser.setUA(ua);
- var result = parser.getResult();
- for (var prop in result) {
- $.ua[prop] = result[prop];
- }
- };
- }
- })(typeof window === 'object' ? window : commonjsGlobal);
-})(uaParser, uaParserExports);
-var UAParser = uaParserExports;
-
-var version$1 = "1.7.1";
-
-const version = version$1;
-const protocolVersion = 9;
-
-function mergeDefaultOptions(options, audioDefaults, videoDefaults) {
- const opts = _objectSpread2({}, options);
- if (opts.audio === true) opts.audio = {};
- if (opts.video === true) opts.video = {};
- // use defaults
- if (opts.audio) {
- mergeObjectWithoutOverwriting(opts.audio, audioDefaults);
- }
- if (opts.video) {
- mergeObjectWithoutOverwriting(opts.video, videoDefaults);
- }
- return opts;
-}
-function mergeObjectWithoutOverwriting(mainObject, objectToMerge) {
- Object.keys(objectToMerge).forEach(key => {
- if (mainObject[key] === undefined) mainObject[key] = objectToMerge[key];
- });
- return mainObject;
-}
-function constraintsForOptions(options) {
- const constraints = {};
- if (options.video) {
- // default video options
- if (typeof options.video === 'object') {
- const videoOptions = {};
- const target = videoOptions;
- const source = options.video;
- Object.keys(source).forEach(key => {
- switch (key) {
- case 'resolution':
- // flatten VideoResolution fields
- mergeObjectWithoutOverwriting(target, source.resolution);
- break;
- default:
- target[key] = source[key];
- }
- });
- constraints.video = videoOptions;
- } else {
- constraints.video = options.video;
- }
- } else {
- constraints.video = false;
- }
- if (options.audio) {
- if (typeof options.audio === 'object') {
- constraints.audio = options.audio;
- } else {
- constraints.audio = true;
- }
- } else {
- constraints.audio = false;
- }
- return constraints;
-}
-/**
- * This function detects silence on a given [[Track]] instance.
- * Returns true if the track seems to be entirely silent.
- */
-async function detectSilence(track) {
- let timeOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;
- const ctx = getNewAudioContext();
- if (ctx) {
- const analyser = ctx.createAnalyser();
- analyser.fftSize = 2048;
- const bufferLength = analyser.frequencyBinCount;
- const dataArray = new Uint8Array(bufferLength);
- const source = ctx.createMediaStreamSource(new MediaStream([track.mediaStreamTrack]));
- source.connect(analyser);
- await sleep(timeOffset);
- analyser.getByteTimeDomainData(dataArray);
- const someNoise = dataArray.some(sample => sample !== 128 && sample !== 0);
- ctx.close();
- return !someNoise;
- }
- return false;
-}
-/**
- * @internal
- */
-function getNewAudioContext() {
- const AudioContext =
- // @ts-ignore
- typeof window !== 'undefined' && (window.AudioContext || window.webkitAudioContext);
- if (AudioContext) {
- return new AudioContext({
- latencyHint: 'interactive'
- });
- }
-}
-
-const separator = '|';
-function unpackStreamId(packed) {
- const parts = packed.split(separator);
- if (parts.length > 1) {
- return [parts[0], packed.substr(parts[0].length + 1)];
- }
- return [packed, ''];
-}
-async function sleep(duration) {
- return new Promise(resolve => setTimeout(resolve, duration));
-}
-/** @internal */
-function supportsTransceiver() {
- return 'addTransceiver' in RTCPeerConnection.prototype;
-}
-/** @internal */
-function supportsAddTrack() {
- return 'addTrack' in RTCPeerConnection.prototype;
-}
-function supportsAdaptiveStream() {
- return typeof ResizeObserver !== undefined && typeof IntersectionObserver !== undefined;
-}
-function supportsDynacast() {
- return supportsTransceiver();
-}
-function supportsAV1() {
- const capabilities = RTCRtpReceiver.getCapabilities('video');
- let hasAV1 = false;
- let hasDDExt = false;
- if (capabilities) {
- for (const codec of capabilities.codecs) {
- if (codec.mimeType === 'video/AV1') {
- hasAV1 = true;
- break;
- }
- }
- for (const ext of capabilities.headerExtensions) {
- if (ext.uri === 'https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension') {
- hasDDExt = true;
- break;
- }
- }
- }
- return hasAV1 && hasDDExt;
-}
-function supportsSetSinkId(elm) {
- if (!document) {
- return false;
- }
- if (!elm) {
- elm = document.createElement('audio');
- }
- return 'setSinkId' in elm;
-}
-const setCodecPreferencesVersions = {
- Chrome: '100',
- Chromium: '100',
- Safari: '15',
- Firefox: '100',
- Edge: '100',
- Brave: '1.40'
-};
-function supportsSetCodecPreferences(transceiver) {
- if (!isWeb()) {
- return false;
- }
- if (!('setCodecPreferences' in transceiver)) {
- return false;
- }
- const uap = UAParser();
- if (!uap.browser.name || !uap.browser.version) {
- // version is required
- return false;
- }
- const v = setCodecPreferencesVersions[uap.browser.name];
- if (v) {
- return compareVersions(uap.browser.version, v) >= 0;
- }
- return false;
-}
-function isBrowserSupported() {
- return supportsTransceiver() || supportsAddTrack();
-}
-function isFireFox() {
- if (!isWeb()) return false;
- return navigator.userAgent.indexOf('Firefox') !== -1;
-}
-function isSafari() {
- if (!isWeb()) return false;
- return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
-}
-function isMobile() {
- if (!isWeb()) return false;
- return /Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent);
-}
-function isWeb() {
- return typeof document !== 'undefined';
-}
-function isReactNative() {
- // navigator.product is deprecated on browsers, but will be set appropriately for react-native.
- return navigator.product == 'ReactNative';
-}
-function getReactNativeOs() {
- if (!isReactNative()) {
- return undefined;
- }
- // global defined only for ReactNative.
- // @ts-ignore
- if (global && global.LiveKitReactNativeGlobal) {
- // @ts-ignore
- return global.LiveKitReactNativeGlobal.platform;
- }
- return undefined;
-}
-function compareVersions(v1, v2) {
- const parts1 = v1.split('.');
- const parts2 = v2.split('.');
- const k = Math.min(v1.length, v2.length);
- for (let i = 0; i < k; ++i) {
- const p1 = parseInt(parts1[i], 10);
- const p2 = parseInt(parts2[i], 10);
- if (p1 > p2) return 1;
- if (p1 < p2) return -1;
- }
- return parts1.length == parts2.length ? 0 : parts1.length < parts2.length ? -1 : 1;
-}
-function roDispatchCallback(entries) {
- for (const entry of entries) {
- entry.target.handleResize(entry);
- }
-}
-function ioDispatchCallback(entries) {
- for (const entry of entries) {
- entry.target.handleVisibilityChanged(entry);
- }
-}
-let resizeObserver = null;
-const getResizeObserver = () => {
- if (!resizeObserver) resizeObserver = new ResizeObserver(roDispatchCallback);
- return resizeObserver;
-};
-let intersectionObserver = null;
-const getIntersectionObserver = () => {
- if (!intersectionObserver) intersectionObserver = new IntersectionObserver(ioDispatchCallback, {
- root: document,
- rootMargin: '0px'
- });
- return intersectionObserver;
-};
-function getClientInfo() {
- var _a;
- const info = ClientInfo.fromPartial({
- sdk: ClientInfo_SDK.JS,
- protocol: protocolVersion,
- version
- });
- if (isReactNative()) {
- info.os = (_a = getReactNativeOs()) !== null && _a !== void 0 ? _a : '';
- }
- return info;
-}
-let emptyVideoStreamTrack;
-function getEmptyVideoStreamTrack() {
- if (!emptyVideoStreamTrack) {
- emptyVideoStreamTrack = createDummyVideoStreamTrack();
- }
- return emptyVideoStreamTrack;
-}
-function createDummyVideoStreamTrack() {
- let width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 16;
- let height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;
- let enabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- let paintContent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
- const canvas = document.createElement('canvas');
- // the canvas size is set to 16 by default, because electron apps seem to fail with smaller values
- canvas.width = width;
- canvas.height = height;
- const ctx = canvas.getContext('2d');
- ctx === null || ctx === void 0 ? void 0 : ctx.fillRect(0, 0, canvas.width, canvas.height);
- if (paintContent && ctx) {
- ctx.beginPath();
- ctx.arc(width / 2, height / 2, 50, 0, Math.PI * 2, true);
- ctx.closePath();
- ctx.fillStyle = 'grey';
- ctx.fill();
- }
- // @ts-ignore
- const dummyStream = canvas.captureStream();
- const [dummyTrack] = dummyStream.getTracks();
- if (!dummyTrack) {
- throw Error('Could not get empty media stream video track');
- }
- dummyTrack.enabled = enabled;
- return dummyTrack;
-}
-let emptyAudioStreamTrack;
-function getEmptyAudioStreamTrack() {
- if (!emptyAudioStreamTrack) {
- // implementation adapted from https://blog.mozilla.org/webrtc/warm-up-with-replacetrack/
- const ctx = new AudioContext();
- const oscillator = ctx.createOscillator();
- const dst = ctx.createMediaStreamDestination();
- oscillator.connect(dst);
- oscillator.start();
- [emptyAudioStreamTrack] = dst.stream.getAudioTracks();
- if (!emptyAudioStreamTrack) {
- throw Error('Could not get empty media stream audio track');
- }
- emptyAudioStreamTrack.enabled = false;
- }
- return emptyAudioStreamTrack;
-}
-class Future {
- constructor(futureBase, onFinally) {
- this.onFinally = onFinally;
- this.promise = new Promise(async (resolve, reject) => {
- this.resolve = resolve;
- this.reject = reject;
- if (futureBase) {
- await futureBase(resolve, reject);
- }
- }).finally(() => {
- var _a;
- return (_a = this.onFinally) === null || _a === void 0 ? void 0 : _a.call(this);
- });
- }
-}
-/**
- * Creates and returns an analyser web audio node that is attached to the provided track.
- * Additionally returns a convenience method `calculateVolume` to perform instant volume readings on that track.
- * Call the returned `cleanup` function to close the audioContext that has been created for the instance of this helper
- */
-function createAudioAnalyser(track, options) {
- const opts = _objectSpread2({
- cloneTrack: false,
- fftSize: 2048,
- smoothingTimeConstant: 0.8,
- minDecibels: -100,
- maxDecibels: -80
- }, options);
- const audioContext = getNewAudioContext();
- if (!audioContext) {
- throw new Error('Audio Context not supported on this browser');
- }
- const streamTrack = opts.cloneTrack ? track.mediaStreamTrack.clone() : track.mediaStreamTrack;
- const mediaStreamSource = audioContext.createMediaStreamSource(new MediaStream([streamTrack]));
- const analyser = audioContext.createAnalyser();
- analyser.minDecibels = opts.minDecibels;
- analyser.maxDecibels = opts.maxDecibels;
- analyser.fftSize = opts.fftSize;
- analyser.smoothingTimeConstant = opts.smoothingTimeConstant;
- mediaStreamSource.connect(analyser);
- const dataArray = new Uint8Array(analyser.frequencyBinCount);
- /**
- * Calculates the current volume of the track in the range from 0 to 1
- */
- const calculateVolume = () => {
- analyser.getByteFrequencyData(dataArray);
- let sum = 0;
- for (const amplitude of dataArray) {
- sum += Math.pow(amplitude / 255, 2);
- }
- const volume = Math.sqrt(sum / dataArray.length);
- return volume;
- };
- const cleanup = () => {
- audioContext.close();
- if (opts.cloneTrack) {
- streamTrack.stop();
- }
- };
- return {
- calculateVolume,
- analyser,
- cleanup
- };
-}
-class Mutex {
- constructor() {
- this._locking = Promise.resolve();
- this._locks = 0;
- }
- isLocked() {
- return this._locks > 0;
- }
- lock() {
- this._locks += 1;
- let unlockNext;
- const willLock = new Promise(resolve => unlockNext = () => {
- this._locks -= 1;
- resolve();
- });
- const willUnlock = this._locking.then(() => unlockNext);
- this._locking = this._locking.then(() => willLock);
- return willUnlock;
- }
-}
-
-class Queue {
- /**
- * @class Queue
- *
- * Priority queue with rate limiting
- * See the medium article:
- * https://mmomtchev.medium.com/parallelizing-download-loops-in-js-with-async-await-queue-670420880cd6
- *
- * @param {number} [_maxConcurrent=1] Number of tasks allowed to run simultaneously
- * @param {number} [_minCycle=0] Minimum number of milliseconds between two consecutive tasks
- */
- constructor(_maxConcurrent, _minCycle) {
- this.maxConcurrent = _maxConcurrent || 1;
- this.minCycle = _minCycle || 0;
- this.queueRunning = [];
- this.queueWaiting = {};
- this.lastRun = 0;
- }
-
- /** @private */
- dequeue(hash) {
- const q = this.queueRunning;
- const idx = q.findIndex(x => x.hash === hash);
- if (idx == -1) throw 'queue desync';
- const o = q[idx];
- q.splice(idx, 1);
- return o;
- }
-
- /** @private */
- getFirstWaiting() {
- for (let p of Object.keys(this.queueWaiting).sort((a, b) => a - b)) if (this.queueWaiting[p] !== undefined && this.queueWaiting[p].length > 0) return this.queueWaiting[p];
- return undefined;
- }
-
- /**
- * Signal that the task `hash` has finished.
- * Frees its slot in the queue
- *
- * @method end
- * @param {any} hash Unique hash identifying the task, Symbol() works very well
- */
- end(hash) {
- const me = this.dequeue(hash);
- me.resolve();
- /* Choose the next task to run and unblock its promise */
- const q = this.getFirstWaiting();
- if (q !== undefined) {
- const next = q.shift();
- next.resolve();
- }
- }
-
- /**
- * Wait for a slot in the queue
- *
- * @method wait
- * @param {any} hash Unique hash identifying the task
- * @param {number} [priority=0] Optional priority, -1 is higher priority than 1
- * @return {Promise} Resolved when the task is ready to run
- */
- async wait(hash, _priority) {
- const priority = _priority === undefined ? 0 : _priority;
- /* Us on the queue */
- let me = {
- hash,
- priority
- };
- /* Create priorities on the fly */
- if (this.queueWaiting[priority] == undefined) this.queueWaiting[priority] = [];
-
- /* Are we allowed to run? */
- if (this.queueRunning.length >= this.maxConcurrent) {
- /* This promise will be unlocked from the outside */
- /* and it cannot reject */
- me.promise = new Promise(resolve => {
- me.resolve = resolve;
- });
- /* Get in the line */
- this.queueWaiting[priority].push(me);
- await me.promise;
- }
- this.queueRunning.push(me);
- me.promise = new Promise(resolve => {
- me.resolve = resolve;
- });
- /* Wait if it is too soon */
- while (Date.now() - this.lastRun < this.minCycle) {
- await new Promise(resolve => setTimeout(resolve, this.minCycle - Date.now() + this.lastRun));
- }
- this.lastRun = Date.now();
- }
-
- /**
- * Run a job (equivalent to calling Queue.wait(), fn() and then Queue.end())
- * fn can be both synchronous or asynchronous function
- *
- * @method run
- * @param {Function} fn The job
- * @param {number} [priority=0] Optional priority, -1 is higher priority than 1
- * @return {Promise} Resolved when the task has finished with the return value of fn
- */
- run(job, _priority) {
- const priority = _priority === undefined ? 0 : _priority;
- const id = Symbol();
- return this.wait(id, priority).then(() => job()).finally(() => {
- this.end(id);
- });
- }
-
- /**
- * @interface QueueStats {running: number, waiting: number, last: number}
- */
-
- /**
- * Return the number of running and waiting jobs
- *
- * @method stat
- * @return {QueueStats} running, waiting, last
- */
- stat() {
- return {
- running: this.queueRunning.length,
- waiting: Object.keys(this.queueWaiting).reduce((t, x) => t += this.queueWaiting[x].length, 0),
- last: this.lastRun
- };
- }
-
- /**
- * Returns a promise that resolves when the queue is empty
- *
- * @method flush
- * @return {Promise}
- */
- async flush() {
- /* Aways wait on the lowest priority in the queue */
- while (this.stat().waiting > 0) {
- for (let p of Object.keys(this.queueWaiting).sort((a, b) => b - a)) {
- const qp = this.queueWaiting[p];
- if (qp !== undefined && qp.length > 0) {
- await qp[qp.length - 1].promise;
- }
- }
- }
- /* And then finish on the running queue */
- while (this.queueRunning.length > 0) {
- await Promise.allSettled(this.queueRunning.map(x => x.promise));
- }
- }
-}
-
-const defaultId = 'default';
-class DeviceManager {
- static getInstance() {
- if (this.instance === undefined) {
- this.instance = new DeviceManager();
- }
- return this.instance;
- }
- async getDevices(kind) {
- let requestPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
- var _a;
- if (((_a = DeviceManager.userMediaPromiseMap) === null || _a === void 0 ? void 0 : _a.size) > 0) {
- livekitLogger.debug('awaiting getUserMedia promise');
- try {
- if (kind) {
- await DeviceManager.userMediaPromiseMap.get(kind);
- } else {
- await Promise.all(DeviceManager.userMediaPromiseMap.values());
- }
- } catch (e) {
- livekitLogger.warn('error waiting for media permissons');
- }
- }
- let devices = await navigator.mediaDevices.enumerateDevices();
- if (requestPermissions && kind && (
- // for safari we need to skip this check, as otherwise it will re-acquire user media and fail on iOS https://bugs.webkit.org/show_bug.cgi?id=179363
- !DeviceManager.userMediaPromiseMap.get(kind) || !isSafari())) {
- const isDummyDeviceOrEmpty = devices.length === 0 || devices.some(device => {
- const noLabel = device.label === '';
- const isRelevant = kind ? device.kind === kind : true;
- return noLabel && isRelevant;
- });
- if (isDummyDeviceOrEmpty) {
- const permissionsToAcquire = {
- video: kind !== 'audioinput' && kind !== 'audiooutput',
- audio: kind !== 'videoinput'
- };
- const stream = await navigator.mediaDevices.getUserMedia(permissionsToAcquire);
- devices = await navigator.mediaDevices.enumerateDevices();
- stream.getTracks().forEach(track => {
- track.stop();
- });
- }
- }
- if (kind) {
- devices = devices.filter(device => device.kind === kind);
- }
- return devices;
- }
- async normalizeDeviceId(kind, deviceId, groupId) {
- if (deviceId !== defaultId) {
- return deviceId;
- }
- // resolve actual device id if it's 'default': Chrome returns it when no
- // device has been chosen
- const devices = await this.getDevices(kind);
- const device = devices.find(d => d.groupId === groupId && d.deviceId !== defaultId);
- return device === null || device === void 0 ? void 0 : device.deviceId;
- }
-}
-DeviceManager.mediaDeviceKinds = ['audioinput', 'audiooutput', 'videoinput'];
-DeviceManager.userMediaPromiseMap = new Map();
-
-var eventsExports = {};
-var events = {
- get exports(){ return eventsExports; },
- set exports(v){ eventsExports = v; },
-};
-
-var R = typeof Reflect === 'object' ? Reflect : null;
-var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {
- return Function.prototype.apply.call(target, receiver, args);
-};
-var ReflectOwnKeys;
-if (R && typeof R.ownKeys === 'function') {
- ReflectOwnKeys = R.ownKeys;
-} else if (Object.getOwnPropertySymbols) {
- ReflectOwnKeys = function ReflectOwnKeys(target) {
- return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));
- };
-} else {
- ReflectOwnKeys = function ReflectOwnKeys(target) {
- return Object.getOwnPropertyNames(target);
- };
-}
-function ProcessEmitWarning(warning) {
- if (console && console.warn) console.warn(warning);
-}
-var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
- return value !== value;
-};
-function EventEmitter() {
- EventEmitter.init.call(this);
-}
-events.exports = EventEmitter;
-eventsExports.once = once;
-
-// Backwards-compat with node 0.10.x
-EventEmitter.EventEmitter = EventEmitter;
-EventEmitter.prototype._events = undefined;
-EventEmitter.prototype._eventsCount = 0;
-EventEmitter.prototype._maxListeners = undefined;
-
-// By default EventEmitters will print a warning if more than 10 listeners are
-// added to it. This is a useful default which helps finding memory leaks.
-var defaultMaxListeners = 10;
-function checkListener(listener) {
- if (typeof listener !== 'function') {
- throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
- }
-}
-Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
- enumerable: true,
- get: function () {
- return defaultMaxListeners;
- },
- set: function (arg) {
- if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
- throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
- }
- defaultMaxListeners = arg;
- }
-});
-EventEmitter.init = function () {
- if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {
- this._events = Object.create(null);
- this._eventsCount = 0;
- }
- this._maxListeners = this._maxListeners || undefined;
-};
-
-// Obviously not all Emitters should be limited to 10. This function allows
-// that to be increased. Set to zero for unlimited.
-EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
- if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
- throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
- }
- this._maxListeners = n;
- return this;
-};
-function _getMaxListeners(that) {
- if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;
- return that._maxListeners;
-}
-EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
- return _getMaxListeners(this);
-};
-EventEmitter.prototype.emit = function emit(type) {
- var args = [];
- for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);
- var doError = type === 'error';
- var events = this._events;
- if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false;
-
- // If there is no 'error' event listener then throw.
- if (doError) {
- var er;
- if (args.length > 0) er = args[0];
- if (er instanceof Error) {
- // Note: The comments on the `throw` lines are intentional, they show
- // up in Node's output if this results in an unhandled exception.
- throw er; // Unhandled 'error' event
- }
- // At least give some kind of context to the user
- var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
- err.context = er;
- throw err; // Unhandled 'error' event
- }
-
- var handler = events[type];
- if (handler === undefined) return false;
- if (typeof handler === 'function') {
- ReflectApply(handler, this, args);
- } else {
- var len = handler.length;
- var listeners = arrayClone(handler, len);
- for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args);
- }
- return true;
-};
-function _addListener(target, type, listener, prepend) {
- var m;
- var events;
- var existing;
- checkListener(listener);
- events = target._events;
- if (events === undefined) {
- events = target._events = Object.create(null);
- target._eventsCount = 0;
- } else {
- // To avoid recursion in the case that type === "newListener"! Before
- // adding it to the listeners, first emit "newListener".
- if (events.newListener !== undefined) {
- target.emit('newListener', type, listener.listener ? listener.listener : listener);
-
- // Re-assign `events` because a newListener handler could have caused the
- // this._events to be assigned to a new object
- events = target._events;
- }
- existing = events[type];
- }
- if (existing === undefined) {
- // Optimize the case of one listener. Don't need the extra array object.
- existing = events[type] = listener;
- ++target._eventsCount;
- } else {
- if (typeof existing === 'function') {
- // Adding the second element, need to change to array.
- existing = events[type] = prepend ? [listener, existing] : [existing, listener];
- // If we've already got an array, just append.
- } else if (prepend) {
- existing.unshift(listener);
- } else {
- existing.push(listener);
- }
-
- // Check for listener leak
- m = _getMaxListeners(target);
- if (m > 0 && existing.length > m && !existing.warned) {
- existing.warned = true;
- // No error code for this since it is a Warning
- // eslint-disable-next-line no-restricted-syntax
- var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');
- w.name = 'MaxListenersExceededWarning';
- w.emitter = target;
- w.type = type;
- w.count = existing.length;
- ProcessEmitWarning(w);
- }
- }
- return target;
-}
-EventEmitter.prototype.addListener = function addListener(type, listener) {
- return _addListener(this, type, listener, false);
-};
-EventEmitter.prototype.on = EventEmitter.prototype.addListener;
-EventEmitter.prototype.prependListener = function prependListener(type, listener) {
- return _addListener(this, type, listener, true);
-};
-function onceWrapper() {
- if (!this.fired) {
- this.target.removeListener(this.type, this.wrapFn);
- this.fired = true;
- if (arguments.length === 0) return this.listener.call(this.target);
- return this.listener.apply(this.target, arguments);
- }
-}
-function _onceWrap(target, type, listener) {
- var state = {
- fired: false,
- wrapFn: undefined,
- target: target,
- type: type,
- listener: listener
- };
- var wrapped = onceWrapper.bind(state);
- wrapped.listener = listener;
- state.wrapFn = wrapped;
- return wrapped;
-}
-EventEmitter.prototype.once = function once(type, listener) {
- checkListener(listener);
- this.on(type, _onceWrap(this, type, listener));
- return this;
-};
-EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
- checkListener(listener);
- this.prependListener(type, _onceWrap(this, type, listener));
- return this;
-};
-
-// Emits a 'removeListener' event if and only if the listener was removed.
-EventEmitter.prototype.removeListener = function removeListener(type, listener) {
- var list, events, position, i, originalListener;
- checkListener(listener);
- events = this._events;
- if (events === undefined) return this;
- list = events[type];
- if (list === undefined) return this;
- if (list === listener || list.listener === listener) {
- if (--this._eventsCount === 0) this._events = Object.create(null);else {
- delete events[type];
- if (events.removeListener) this.emit('removeListener', type, list.listener || listener);
- }
- } else if (typeof list !== 'function') {
- position = -1;
- for (i = list.length - 1; i >= 0; i--) {
- if (list[i] === listener || list[i].listener === listener) {
- originalListener = list[i].listener;
- position = i;
- break;
- }
- }
- if (position < 0) return this;
- if (position === 0) list.shift();else {
- spliceOne(list, position);
- }
- if (list.length === 1) events[type] = list[0];
- if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);
- }
- return this;
-};
-EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
-EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
- var listeners, events, i;
- events = this._events;
- if (events === undefined) return this;
-
- // not listening for removeListener, no need to emit
- if (events.removeListener === undefined) {
- if (arguments.length === 0) {
- this._events = Object.create(null);
- this._eventsCount = 0;
- } else if (events[type] !== undefined) {
- if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];
- }
- return this;
- }
-
- // emit removeListener for all listeners on all events
- if (arguments.length === 0) {
- var keys = Object.keys(events);
- var key;
- for (i = 0; i < keys.length; ++i) {
- key = keys[i];
- if (key === 'removeListener') continue;
- this.removeAllListeners(key);
- }
- this.removeAllListeners('removeListener');
- this._events = Object.create(null);
- this._eventsCount = 0;
- return this;
- }
- listeners = events[type];
- if (typeof listeners === 'function') {
- this.removeListener(type, listeners);
- } else if (listeners !== undefined) {
- // LIFO order
- for (i = listeners.length - 1; i >= 0; i--) {
- this.removeListener(type, listeners[i]);
- }
- }
- return this;
-};
-function _listeners(target, type, unwrap) {
- var events = target._events;
- if (events === undefined) return [];
- var evlistener = events[type];
- if (evlistener === undefined) return [];
- if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];
- return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
-}
-EventEmitter.prototype.listeners = function listeners(type) {
- return _listeners(this, type, true);
-};
-EventEmitter.prototype.rawListeners = function rawListeners(type) {
- return _listeners(this, type, false);
-};
-EventEmitter.listenerCount = function (emitter, type) {
- if (typeof emitter.listenerCount === 'function') {
- return emitter.listenerCount(type);
- } else {
- return listenerCount.call(emitter, type);
- }
-};
-EventEmitter.prototype.listenerCount = listenerCount;
-function listenerCount(type) {
- var events = this._events;
- if (events !== undefined) {
- var evlistener = events[type];
- if (typeof evlistener === 'function') {
- return 1;
- } else if (evlistener !== undefined) {
- return evlistener.length;
- }
- }
- return 0;
-}
-EventEmitter.prototype.eventNames = function eventNames() {
- return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
-};
-function arrayClone(arr, n) {
- var copy = new Array(n);
- for (var i = 0; i < n; ++i) copy[i] = arr[i];
- return copy;
-}
-function spliceOne(list, index) {
- for (; index + 1 < list.length; index++) list[index] = list[index + 1];
- list.pop();
-}
-function unwrapListeners(arr) {
- var ret = new Array(arr.length);
- for (var i = 0; i < ret.length; ++i) {
- ret[i] = arr[i].listener || arr[i];
- }
- return ret;
-}
-function once(emitter, name) {
- return new Promise(function (resolve, reject) {
- function errorListener(err) {
- emitter.removeListener(name, resolver);
- reject(err);
- }
- function resolver() {
- if (typeof emitter.removeListener === 'function') {
- emitter.removeListener('error', errorListener);
- }
- resolve([].slice.call(arguments));
- }
- eventTargetAgnosticAddListener(emitter, name, resolver, {
- once: true
- });
- if (name !== 'error') {
- addErrorHandlerIfEventEmitter(emitter, errorListener, {
- once: true
- });
- }
- });
-}
-function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
- if (typeof emitter.on === 'function') {
- eventTargetAgnosticAddListener(emitter, 'error', handler, flags);
- }
-}
-function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
- if (typeof emitter.on === 'function') {
- if (flags.once) {
- emitter.once(name, listener);
- } else {
- emitter.on(name, listener);
- }
- } else if (typeof emitter.addEventListener === 'function') {
- // EventTarget does not have `error` event semantics like Node
- // EventEmitters, we do not listen for `error` events here.
- emitter.addEventListener(name, function wrapListener(arg) {
- // IE does not have builtin `{ once: true }` support so we
- // have to do it manually.
- if (flags.once) {
- emitter.removeEventListener(name, wrapListener);
- }
- listener(arg);
- });
- } else {
- throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
- }
-}
-
-const BACKGROUND_REACTION_DELAY = 5000;
-// keep old audio elements when detached, we would re-use them since on iOS
-// Safari tracks which audio elements have been "blessed" by the user.
-const recycledElements = [];
-class Track extends eventsExports.EventEmitter {
- constructor(mediaTrack, kind) {
- super();
- this.attachedElements = [];
- this.isMuted = false;
- /**
- * indicates current state of stream, it'll indicate `paused` if the track
- * has been paused by congestion controller
- */
- this.streamState = Track.StreamState.Active;
- this._currentBitrate = 0;
- this.appVisibilityChangedListener = () => {
- if (this.backgroundTimeout) {
- clearTimeout(this.backgroundTimeout);
- }
- // delay app visibility update if it goes to hidden
- // update immediately if it comes back to focus
- if (document.visibilityState === 'hidden') {
- this.backgroundTimeout = setTimeout(() => this.handleAppVisibilityChanged(), BACKGROUND_REACTION_DELAY);
- } else {
- this.handleAppVisibilityChanged();
- }
- };
- this.setMaxListeners(100);
- this.kind = kind;
- this._mediaStreamTrack = mediaTrack;
- this._mediaStreamID = mediaTrack.id;
- this.source = Track.Source.Unknown;
- if (isWeb()) {
- this.isInBackground = document.visibilityState === 'hidden';
- document.addEventListener('visibilitychange', this.appVisibilityChangedListener);
- } else {
- this.isInBackground = false;
- }
- }
- /** current receive bits per second */
- get currentBitrate() {
- return this._currentBitrate;
- }
- get mediaStreamTrack() {
- return this._mediaStreamTrack;
- }
- /**
- * @internal
- * used for keep mediaStream's first id, since it's id might change
- * if we disable/enable a track
- */
- get mediaStreamID() {
- return this._mediaStreamID;
- }
- attach(element) {
- let elementType = 'audio';
- if (this.kind === Track.Kind.Video) {
- elementType = 'video';
- }
- if (!element) {
- if (elementType === 'audio') {
- recycledElements.forEach(e => {
- if (e.parentElement === null && !element) {
- element = e;
- }
- });
- if (element) {
- // remove it from pool
- recycledElements.splice(recycledElements.indexOf(element), 1);
- }
- }
- if (!element) {
- element = document.createElement(elementType);
- }
- }
- if (!this.attachedElements.includes(element)) {
- this.attachedElements.push(element);
- }
- // even if we believe it's already attached to the element, it's possible
- // the element's srcObject was set to something else out of band.
- // we'll want to re-attach it in that case
- attachToElement(this._mediaStreamTrack, element);
- // handle auto playback failures
- const allMediaStreamTracks = element.srcObject.getTracks();
- if (allMediaStreamTracks.some(tr => tr.kind === 'audio')) {
- // manually play audio to detect audio playback status
- element.play().then(() => {
- this.emit(TrackEvent.AudioPlaybackStarted);
- }).catch(e => {
- if (e.name === 'NotAllowedError') {
- this.emit(TrackEvent.AudioPlaybackFailed, e);
- } else {
- livekitLogger.warn('could not playback audio', e);
- }
- // If audio playback isn't allowed make sure we still play back the video
- if (element && allMediaStreamTracks.some(tr => tr.kind === 'video') && e.name === 'NotAllowedError') {
- element.muted = true;
- element.play().catch(() => {
- // catch for Safari, exceeded options at this point to automatically play the media element
- });
- }
- });
- }
- this.emit(TrackEvent.ElementAttached, element);
- return element;
- }
- detach(element) {
- // detach from a single element
- if (element) {
- detachTrack(this._mediaStreamTrack, element);
- const idx = this.attachedElements.indexOf(element);
- if (idx >= 0) {
- this.attachedElements.splice(idx, 1);
- this.recycleElement(element);
- this.emit(TrackEvent.ElementDetached, element);
- }
- return element;
- }
- const detached = [];
- this.attachedElements.forEach(elm => {
- detachTrack(this._mediaStreamTrack, elm);
- detached.push(elm);
- this.recycleElement(elm);
- this.emit(TrackEvent.ElementDetached, elm);
- });
- // remove all tracks
- this.attachedElements = [];
- return detached;
- }
- stop() {
- this.stopMonitor();
- this._mediaStreamTrack.stop();
- if (isWeb()) {
- document.removeEventListener('visibilitychange', this.appVisibilityChangedListener);
- }
- }
- enable() {
- this._mediaStreamTrack.enabled = true;
- }
- disable() {
- this._mediaStreamTrack.enabled = false;
- }
- /* @internal */
- stopMonitor() {
- if (this.monitorInterval) {
- clearInterval(this.monitorInterval);
- }
- }
- recycleElement(element) {
- if (element instanceof HTMLAudioElement) {
- // we only need to re-use a single element
- let shouldCache = true;
- element.pause();
- recycledElements.forEach(e => {
- if (!e.parentElement) {
- shouldCache = false;
- }
- });
- if (shouldCache) {
- recycledElements.push(element);
- }
- }
- }
- async handleAppVisibilityChanged() {
- this.isInBackground = document.visibilityState === 'hidden';
- }
-}
-/** @internal */
-function attachToElement(track, element) {
- let mediaStream;
- if (element.srcObject instanceof MediaStream) {
- mediaStream = element.srcObject;
- } else {
- mediaStream = new MediaStream();
- }
- // check if track matches existing track
- let existingTracks;
- if (track.kind === 'audio') {
- existingTracks = mediaStream.getAudioTracks();
- } else {
- existingTracks = mediaStream.getVideoTracks();
- }
- if (!existingTracks.includes(track)) {
- existingTracks.forEach(et => {
- mediaStream.removeTrack(et);
- });
- mediaStream.addTrack(track);
- }
- element.autoplay = true;
- // In case there are no audio tracks present on the mediastream, we set the element as muted to ensure autoplay works
- element.muted = mediaStream.getAudioTracks().length === 0;
- if (element instanceof HTMLVideoElement) {
- element.playsInline = true;
- }
- // avoid flicker
- if (element.srcObject !== mediaStream) {
- element.srcObject = mediaStream;
- if ((isSafari() || isFireFox()) && element instanceof HTMLVideoElement) {
- // Firefox also has a timing issue where video doesn't actually get attached unless
- // performed out-of-band
- // Safari 15 has a bug where in certain layouts, video element renders
- // black until the page is resized or other changes take place.
- // Resetting the src triggers it to render.
- // https://developer.apple.com/forums/thread/690523
- setTimeout(() => {
- element.srcObject = mediaStream;
- // Safari 15 sometimes fails to start a video
- // when the window is backgrounded before the first frame is drawn
- // manually calling play here seems to fix that
- element.play().catch(() => {
- /* do nothing */
- });
- }, 0);
- }
- }
-}
-/** @internal */
-function detachTrack(track, element) {
- if (element.srcObject instanceof MediaStream) {
- const mediaStream = element.srcObject;
- mediaStream.removeTrack(track);
- if (mediaStream.getTracks().length > 0) {
- element.srcObject = mediaStream;
- } else {
- element.srcObject = null;
- }
- }
-}
-(function (Track) {
- let Kind;
- (function (Kind) {
- Kind["Audio"] = "audio";
- Kind["Video"] = "video";
- Kind["Unknown"] = "unknown";
- })(Kind = Track.Kind || (Track.Kind = {}));
- let Source;
- (function (Source) {
- Source["Camera"] = "camera";
- Source["Microphone"] = "microphone";
- Source["ScreenShare"] = "screen_share";
- Source["ScreenShareAudio"] = "screen_share_audio";
- Source["Unknown"] = "unknown";
- })(Source = Track.Source || (Track.Source = {}));
- let StreamState$1;
- (function (StreamState) {
- StreamState["Active"] = "active";
- StreamState["Paused"] = "paused";
- StreamState["Unknown"] = "unknown";
- })(StreamState$1 = Track.StreamState || (Track.StreamState = {}));
- /** @internal */
- function kindToProto(k) {
- switch (k) {
- case Kind.Audio:
- return TrackType.AUDIO;
- case Kind.Video:
- return TrackType.VIDEO;
- default:
- return TrackType.UNRECOGNIZED;
- }
- }
- Track.kindToProto = kindToProto;
- /** @internal */
- function kindFromProto(t) {
- switch (t) {
- case TrackType.AUDIO:
- return Kind.Audio;
- case TrackType.VIDEO:
- return Kind.Video;
- default:
- return Kind.Unknown;
- }
- }
- Track.kindFromProto = kindFromProto;
- /** @internal */
- function sourceToProto(s) {
- switch (s) {
- case Source.Camera:
- return TrackSource.CAMERA;
- case Source.Microphone:
- return TrackSource.MICROPHONE;
- case Source.ScreenShare:
- return TrackSource.SCREEN_SHARE;
- case Source.ScreenShareAudio:
- return TrackSource.SCREEN_SHARE_AUDIO;
- default:
- return TrackSource.UNRECOGNIZED;
- }
- }
- Track.sourceToProto = sourceToProto;
- /** @internal */
- function sourceFromProto(s) {
- switch (s) {
- case TrackSource.CAMERA:
- return Source.Camera;
- case TrackSource.MICROPHONE:
- return Source.Microphone;
- case TrackSource.SCREEN_SHARE:
- return Source.ScreenShare;
- case TrackSource.SCREEN_SHARE_AUDIO:
- return Source.ScreenShareAudio;
- default:
- return Source.Unknown;
- }
- }
- Track.sourceFromProto = sourceFromProto;
- /** @internal */
- function streamStateFromProto(s) {
- switch (s) {
- case StreamState.ACTIVE:
- return StreamState$1.Active;
- case StreamState.PAUSED:
- return StreamState$1.Paused;
- default:
- return StreamState$1.Unknown;
- }
- }
- Track.streamStateFromProto = streamStateFromProto;
-})(Track || (Track = {}));
-
-const defaultDimensionsTimeout = 2 * 1000;
-class LocalTrack extends Track {
- /**
- *
- * @param mediaTrack
- * @param kind
- * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks
- * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK
- */
- constructor(mediaTrack, kind, constraints) {
- let userProvidedTrack = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
- super(mediaTrack, kind);
- this._isUpstreamPaused = false;
- this.handleEnded = () => {
- if (this.isInBackground) {
- this.reacquireTrack = true;
- }
- this.emit(TrackEvent.Ended, this);
- };
- this._mediaStreamTrack.addEventListener('ended', this.handleEnded);
- this.constraints = constraints !== null && constraints !== void 0 ? constraints : mediaTrack.getConstraints();
- this.reacquireTrack = false;
- this.providedByUser = userProvidedTrack;
- this.muteQueue = new Queue();
- }
- get id() {
- return this._mediaStreamTrack.id;
- }
- get dimensions() {
- if (this.kind !== Track.Kind.Video) {
- return undefined;
- }
- const {
- width,
- height
- } = this._mediaStreamTrack.getSettings();
- if (width && height) {
- return {
- width,
- height
- };
- }
- return undefined;
- }
- get isUpstreamPaused() {
- return this._isUpstreamPaused;
- }
- get isUserProvided() {
- return this.providedByUser;
- }
- async waitForDimensions() {
- let timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultDimensionsTimeout;
- if (this.kind === Track.Kind.Audio) {
- throw new Error('cannot get dimensions for audio tracks');
- }
- const started = Date.now();
- while (Date.now() - started < timeout) {
- const dims = this.dimensions;
- if (dims) {
- return dims;
- }
- await sleep(50);
- }
- throw new TrackInvalidError('unable to get track dimensions after timeout');
- }
- /**
- * @returns DeviceID of the device that is currently being used for this track
- */
- async getDeviceId() {
- // screen share doesn't have a usable device id
- if (this.source === Track.Source.ScreenShare) {
- return;
- }
- const {
- deviceId,
- groupId
- } = this._mediaStreamTrack.getSettings();
- const kind = this.kind === Track.Kind.Audio ? 'audioinput' : 'videoinput';
- return DeviceManager.getInstance().normalizeDeviceId(kind, deviceId, groupId);
- }
- async mute() {
- this.setTrackMuted(true);
- return this;
- }
- async unmute() {
- this.setTrackMuted(false);
- return this;
- }
- async replaceTrack(track) {
- let userProvidedTrack = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
- if (!this.sender) {
- throw new TrackInvalidError('unable to replace an unpublished track');
- }
- // detach
- this.attachedElements.forEach(el => {
- detachTrack(this._mediaStreamTrack, el);
- });
- this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);
- // on Safari, the old audio track must be stopped before attempting to acquire
- // the new track, otherwise the new track will stop with
- // 'A MediaStreamTrack ended due to a capture failure`
- if (!this.providedByUser) {
- this._mediaStreamTrack.stop();
- }
- track.addEventListener('ended', this.handleEnded);
- livekitLogger.debug('replace MediaStreamTrack');
- if (this.sender) {
- await this.sender.replaceTrack(track);
- }
- this._mediaStreamTrack = track;
- // sync muted state with the enabled state of the newly provided track
- this._mediaStreamTrack.enabled = !this.isMuted;
- await this.resumeUpstream();
- this.attachedElements.forEach(el => {
- attachToElement(track, el);
- });
- this.mediaStream = new MediaStream([track]);
- this.providedByUser = userProvidedTrack;
- return this;
- }
- async restart(constraints) {
- if (!constraints) {
- constraints = this.constraints;
- }
- livekitLogger.debug('restarting track with constraints', constraints);
- const streamConstraints = {
- audio: false,
- video: false
- };
- if (this.kind === Track.Kind.Video) {
- streamConstraints.video = constraints;
- } else {
- streamConstraints.audio = constraints;
- }
- // detach
- this.attachedElements.forEach(el => {
- detachTrack(this._mediaStreamTrack, el);
- });
- this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);
- // on Safari, the old audio track must be stopped before attempting to acquire
- // the new track, otherwise the new track will stop with
- // 'A MediaStreamTrack ended due to a capture failure`
- this._mediaStreamTrack.stop();
- // create new track and attach
- const mediaStream = await navigator.mediaDevices.getUserMedia(streamConstraints);
- const newTrack = mediaStream.getTracks()[0];
- newTrack.addEventListener('ended', this.handleEnded);
- livekitLogger.debug('re-acquired MediaStreamTrack');
- if (this.sender) {
- // Track can be restarted after it's unpublished
- await this.sender.replaceTrack(newTrack);
- }
- this._mediaStreamTrack = newTrack;
- await this.resumeUpstream();
- this.attachedElements.forEach(el => {
- attachToElement(newTrack, el);
- });
- this.mediaStream = mediaStream;
- this.constraints = constraints;
- this.emit(TrackEvent.Restarted, this);
- return this;
- }
- setTrackMuted(muted) {
- livekitLogger.debug("setting ".concat(this.kind, " track ").concat(muted ? 'muted' : 'unmuted'));
- if (this.isMuted === muted && this._mediaStreamTrack.enabled !== muted) {
- return;
- }
- this.isMuted = muted;
- this._mediaStreamTrack.enabled = !muted;
- this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);
- }
- get needsReAcquisition() {
- return this._mediaStreamTrack.readyState !== 'live' || this._mediaStreamTrack.muted || !this._mediaStreamTrack.enabled || this.reacquireTrack;
- }
- async handleAppVisibilityChanged() {
- await super.handleAppVisibilityChanged();
- if (!isMobile()) return;
- livekitLogger.debug("visibility changed, is in Background: ".concat(this.isInBackground));
- if (!this.isInBackground && this.needsReAcquisition && !this.isUserProvided && !this.isMuted) {
- livekitLogger.debug("track needs to be reaquired, restarting ".concat(this.source));
- await this.restart();
- this.reacquireTrack = false;
- }
- }
- async pauseUpstream() {
- this.muteQueue.run(async () => {
- if (this._isUpstreamPaused === true) {
- return;
- }
- if (!this.sender) {
- livekitLogger.warn('unable to pause upstream for an unpublished track');
- return;
- }
- this._isUpstreamPaused = true;
- this.emit(TrackEvent.UpstreamPaused, this);
- const emptyTrack = this.kind === Track.Kind.Audio ? getEmptyAudioStreamTrack() : getEmptyVideoStreamTrack();
- await this.sender.replaceTrack(emptyTrack);
- });
- }
- async resumeUpstream() {
- this.muteQueue.run(async () => {
- if (this._isUpstreamPaused === false) {
- return;
- }
- if (!this.sender) {
- livekitLogger.warn('unable to resume upstream for an unpublished track');
- return;
- }
- this._isUpstreamPaused = false;
- this.emit(TrackEvent.UpstreamResumed, this);
- await this.sender.replaceTrack(this._mediaStreamTrack);
- });
- }
-}
-
-class LocalAudioTrack extends LocalTrack {
- /**
- *
- * @param mediaTrack
- * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks
- * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK
- */
- constructor(mediaTrack, constraints) {
- let userProvidedTrack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
- super(mediaTrack, Track.Kind.Audio, constraints, userProvidedTrack);
- /** @internal */
- this.stopOnMute = false;
- this.monitorSender = async () => {
- if (!this.sender) {
- this._currentBitrate = 0;
- return;
- }
- let stats;
- try {
- stats = await this.getSenderStats();
- } catch (e) {
- livekitLogger.error('could not get audio sender stats', {
- error: e
- });
- return;
- }
- if (stats && this.prevStats) {
- this._currentBitrate = computeBitrate(stats, this.prevStats);
- }
- this.prevStats = stats;
- };
- this.checkForSilence();
- }
- async setDeviceId(deviceId) {
- if (this.constraints.deviceId === deviceId) {
- return;
- }
- this.constraints.deviceId = deviceId;
- if (!this.isMuted) {
- await this.restartTrack();
- }
- }
- async mute() {
- await this.muteQueue.run(async () => {
- // disabled special handling as it will cause BT headsets to switch communication modes
- if (this.source === Track.Source.Microphone && this.stopOnMute && !this.isUserProvided) {
- livekitLogger.debug('stopping mic track');
- // also stop the track, so that microphone indicator is turned off
- this._mediaStreamTrack.stop();
- }
- await super.mute();
- });
- return this;
- }
- async unmute() {
- await this.muteQueue.run(async () => {
- if (this.source === Track.Source.Microphone && (this.stopOnMute || this._mediaStreamTrack.readyState === 'ended') && !this.isUserProvided) {
- livekitLogger.debug('reacquiring mic track');
- await this.restartTrack();
- }
- await super.unmute();
- });
- return this;
- }
- async restartTrack(options) {
- let constraints;
- if (options) {
- const streamConstraints = constraintsForOptions({
- audio: options
- });
- if (typeof streamConstraints.audio !== 'boolean') {
- constraints = streamConstraints.audio;
- }
- }
- await this.restart(constraints);
- }
- async restart(constraints) {
- const track = await super.restart(constraints);
- this.checkForSilence();
- return track;
- }
- /* @internal */
- startMonitor() {
- if (!isWeb()) {
- return;
- }
- if (this.monitorInterval) {
- return;
- }
- this.monitorInterval = setInterval(() => {
- this.monitorSender();
- }, monitorFrequency);
- }
- async getSenderStats() {
- var _a;
- if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {
- return undefined;
- }
- const stats = await this.sender.getStats();
- let audioStats;
- stats.forEach(v => {
- if (v.type === 'outbound-rtp') {
- audioStats = {
- type: 'audio',
- streamId: v.id,
- packetsSent: v.packetsSent,
- packetsLost: v.packetsLost,
- bytesSent: v.bytesSent,
- timestamp: v.timestamp,
- roundTripTime: v.roundTripTime,
- jitter: v.jitter
- };
- }
- });
- return audioStats;
- }
- async checkForSilence() {
- const trackIsSilent = await detectSilence(this);
- if (trackIsSilent) {
- if (!this.isMuted) {
- livekitLogger.warn('silence detected on local audio track');
- }
- this.emit(TrackEvent.AudioSilenceDetected);
- }
- return trackIsSilent;
- }
-}
-
-const refreshSubscribedCodecAfterNewCodec = 5000;
-class LocalVideoTrack extends LocalTrack {
- /**
- *
- * @param mediaTrack
- * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks
- * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK
- */
- constructor(mediaTrack, constraints) {
- let userProvidedTrack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
- super(mediaTrack, Track.Kind.Video, constraints, userProvidedTrack);
- /* @internal */
- this.simulcastCodecs = new Map();
- this.monitorSender = async () => {
- if (!this.sender) {
- this._currentBitrate = 0;
- return;
- }
- let stats;
- try {
- stats = await this.getSenderStats();
- } catch (e) {
- livekitLogger.error('could not get audio sender stats', {
- error: e
- });
- return;
- }
- const statsMap = new Map(stats.map(s => [s.rid, s]));
- if (this.prevStats) {
- let totalBitrate = 0;
- statsMap.forEach((s, key) => {
- var _a;
- const prev = (_a = this.prevStats) === null || _a === void 0 ? void 0 : _a.get(key);
- totalBitrate += computeBitrate(s, prev);
- });
- this._currentBitrate = totalBitrate;
- }
- this.prevStats = statsMap;
- };
- this.senderLock = new Mutex();
- }
- get isSimulcast() {
- if (this.sender && this.sender.getParameters().encodings.length > 1) {
- return true;
- }
- return false;
- }
- /* @internal */
- startMonitor(signalClient) {
- var _a;
- this.signalClient = signalClient;
- if (!isWeb()) {
- return;
- }
- // save original encodings
- // TODO : merge simulcast tracks stats
- const params = (_a = this.sender) === null || _a === void 0 ? void 0 : _a.getParameters();
- if (params) {
- this.encodings = params.encodings;
- }
- if (this.monitorInterval) {
- return;
- }
- this.monitorInterval = setInterval(() => {
- this.monitorSender();
- }, monitorFrequency);
- }
- stop() {
- this._mediaStreamTrack.getConstraints();
- this.simulcastCodecs.forEach(trackInfo => {
- trackInfo.mediaStreamTrack.stop();
- });
- super.stop();
- }
- async mute() {
- await this.muteQueue.run(async () => {
- if (this.source === Track.Source.Camera && !this.isUserProvided) {
- livekitLogger.debug('stopping camera track');
- // also stop the track, so that camera indicator is turned off
- this._mediaStreamTrack.stop();
- }
- await super.mute();
- });
- return this;
- }
- async unmute() {
- await this.muteQueue.run(async () => {
- if (this.source === Track.Source.Camera && !this.isUserProvided) {
- livekitLogger.debug('reacquiring camera track');
- await this.restartTrack();
- }
- await super.unmute();
- });
- return this;
- }
- async getSenderStats() {
- var _a;
- if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {
- return [];
- }
- const items = [];
- const stats = await this.sender.getStats();
- stats.forEach(v => {
- var _a;
- if (v.type === 'outbound-rtp') {
- const vs = {
- type: 'video',
- streamId: v.id,
- frameHeight: v.frameHeight,
- frameWidth: v.frameWidth,
- firCount: v.firCount,
- pliCount: v.pliCount,
- nackCount: v.nackCount,
- packetsSent: v.packetsSent,
- bytesSent: v.bytesSent,
- framesSent: v.framesSent,
- timestamp: v.timestamp,
- rid: (_a = v.rid) !== null && _a !== void 0 ? _a : v.id,
- retransmittedPacketsSent: v.retransmittedPacketsSent,
- qualityLimitationReason: v.qualityLimitationReason,
- qualityLimitationResolutionChanges: v.qualityLimitationResolutionChanges
- };
- // locate the appropriate remote-inbound-rtp item
- const r = stats.get(v.remoteId);
- if (r) {
- vs.jitter = r.jitter;
- vs.packetsLost = r.packetsLost;
- vs.roundTripTime = r.roundTripTime;
- }
- items.push(vs);
- }
- });
- return items;
- }
- setPublishingQuality(maxQuality) {
- const qualities = [];
- for (let q = VideoQuality.LOW; q <= VideoQuality.HIGH; q += 1) {
- qualities.push({
- quality: q,
- enabled: q <= maxQuality
- });
- }
- livekitLogger.debug("setting publishing quality. max quality ".concat(maxQuality));
- this.setPublishingLayers(qualities);
- }
- async setDeviceId(deviceId) {
- if (this.constraints.deviceId === deviceId) {
- return;
- }
- this.constraints.deviceId = deviceId;
- // when video is muted, underlying media stream track is stopped and
- // will be restarted later
- if (!this.isMuted) {
- await this.restartTrack();
- }
- }
- async restartTrack(options) {
- let constraints;
- if (options) {
- const streamConstraints = constraintsForOptions({
- video: options
- });
- if (typeof streamConstraints.video !== 'boolean') {
- constraints = streamConstraints.video;
- }
- }
- await this.restart(constraints);
- }
- addSimulcastTrack(codec, encodings) {
- if (this.simulcastCodecs.has(codec)) {
- throw new Error("".concat(codec, " already added"));
- }
- const simulcastCodecInfo = {
- codec,
- mediaStreamTrack: this.mediaStreamTrack.clone(),
- sender: undefined,
- encodings
- };
- this.simulcastCodecs.set(codec, simulcastCodecInfo);
- return simulcastCodecInfo;
- }
- setSimulcastTrackSender(codec, sender) {
- const simulcastCodecInfo = this.simulcastCodecs.get(codec);
- if (!simulcastCodecInfo) {
- return;
- }
- simulcastCodecInfo.sender = sender;
- // browser will reenable disabled codec/layers after new codec has been published,
- // so refresh subscribedCodecs after publish a new codec
- setTimeout(() => {
- if (this.subscribedCodecs) {
- this.setPublishingCodecs(this.subscribedCodecs);
- }
- }, refreshSubscribedCodecAfterNewCodec);
- }
- /**
- * @internal
- * Sets codecs that should be publishing
- */
- async setPublishingCodecs(codecs) {
- livekitLogger.debug('setting publishing codecs', {
- codecs,
- currentCodec: this.codec
- });
- // only enable simulcast codec for preference codec setted
- if (!this.codec && codecs.length > 0) {
- await this.setPublishingLayers(codecs[0].qualities);
- return [];
- }
- this.subscribedCodecs = codecs;
- const newCodecs = [];
- var _iteratorAbruptCompletion = false;
- var _didIteratorError = false;
- var _iteratorError;
- try {
- for (var _iterator = _asyncIterator(codecs), _step; _iteratorAbruptCompletion = !(_step = await _iterator.next()).done; _iteratorAbruptCompletion = false) {
- const codec = _step.value;
- {
- if (!this.codec || this.codec === codec.codec) {
- await this.setPublishingLayers(codec.qualities);
- } else {
- const simulcastCodecInfo = this.simulcastCodecs.get(codec.codec);
- livekitLogger.debug("try setPublishingCodec for ".concat(codec.codec), simulcastCodecInfo);
- if (!simulcastCodecInfo || !simulcastCodecInfo.sender) {
- for (const q of codec.qualities) {
- if (q.enabled) {
- newCodecs.push(codec.codec);
- break;
- }
- }
- } else if (simulcastCodecInfo.encodings) {
- livekitLogger.debug("try setPublishingLayersForSender ".concat(codec.codec));
- await setPublishingLayersForSender(simulcastCodecInfo.sender, simulcastCodecInfo.encodings, codec.qualities, this.senderLock);
- }
- }
- }
- }
- } catch (err) {
- _didIteratorError = true;
- _iteratorError = err;
- } finally {
- try {
- if (_iteratorAbruptCompletion && _iterator.return != null) {
- await _iterator.return();
- }
- } finally {
- if (_didIteratorError) {
- throw _iteratorError;
- }
- }
- }
- return newCodecs;
- }
- /**
- * @internal
- * Sets layers that should be publishing
- */
- async setPublishingLayers(qualities) {
- livekitLogger.debug('setting publishing layers', qualities);
- if (!this.sender || !this.encodings) {
- return;
- }
- await setPublishingLayersForSender(this.sender, this.encodings, qualities, this.senderLock);
- }
- async handleAppVisibilityChanged() {
- await super.handleAppVisibilityChanged();
- if (!isMobile()) return;
- if (this.isInBackground && this.source === Track.Source.Camera) {
- this._mediaStreamTrack.enabled = false;
- }
- }
-}
-async function setPublishingLayersForSender(sender, senderEncodings, qualities, senderLock) {
- const unlock = await senderLock.lock();
- livekitLogger.debug('setPublishingLayersForSender', {
- sender,
- qualities,
- senderEncodings
- });
- try {
- const params = sender.getParameters();
- const {
- encodings
- } = params;
- if (!encodings) {
- return;
- }
- if (encodings.length !== senderEncodings.length) {
- livekitLogger.warn('cannot set publishing layers, encodings mismatch');
- return;
- }
- let hasChanged = false;
- encodings.forEach((encoding, idx) => {
- var _a;
- let rid = (_a = encoding.rid) !== null && _a !== void 0 ? _a : '';
- if (rid === '') {
- rid = 'q';
- }
- const quality = videoQualityForRid(rid);
- const subscribedQuality = qualities.find(q => q.quality === quality);
- if (!subscribedQuality) {
- return;
- }
- if (encoding.active !== subscribedQuality.enabled) {
- hasChanged = true;
- encoding.active = subscribedQuality.enabled;
- livekitLogger.debug("setting layer ".concat(subscribedQuality.quality, " to ").concat(encoding.active ? 'enabled' : 'disabled'));
- // FireFox does not support setting encoding.active to false, so we
- // have a workaround of lowering its bitrate and resolution to the min.
- if (isFireFox()) {
- if (subscribedQuality.enabled) {
- encoding.scaleResolutionDownBy = senderEncodings[idx].scaleResolutionDownBy;
- encoding.maxBitrate = senderEncodings[idx].maxBitrate;
- /* @ts-ignore */
- encoding.maxFrameRate = senderEncodings[idx].maxFrameRate;
- } else {
- encoding.scaleResolutionDownBy = 4;
- encoding.maxBitrate = 10;
- /* @ts-ignore */
- encoding.maxFrameRate = 2;
- }
- }
- }
- });
- if (hasChanged) {
- params.encodings = encodings;
- await sender.setParameters(params);
- }
- } finally {
- unlock();
- }
-}
-function videoQualityForRid(rid) {
- switch (rid) {
- case 'f':
- return VideoQuality.HIGH;
- case 'h':
- return VideoQuality.MEDIUM;
- case 'q':
- return VideoQuality.LOW;
- default:
- return VideoQuality.UNRECOGNIZED;
- }
-}
-function videoLayersFromEncodings(width, height, encodings) {
- // default to a single layer, HQ
- if (!encodings) {
- return [{
- quality: VideoQuality.HIGH,
- width,
- height,
- bitrate: 0,
- ssrc: 0
- }];
- }
- return encodings.map(encoding => {
- var _a, _b, _c;
- const scale = (_a = encoding.scaleResolutionDownBy) !== null && _a !== void 0 ? _a : 1;
- let quality = videoQualityForRid((_b = encoding.rid) !== null && _b !== void 0 ? _b : '');
- if (quality === VideoQuality.UNRECOGNIZED && encodings.length === 1) {
- quality = VideoQuality.HIGH;
- }
- return {
- quality,
- width: width / scale,
- height: height / scale,
- bitrate: (_c = encoding.maxBitrate) !== null && _c !== void 0 ? _c : 0,
- ssrc: 0
- };
- });
-}
-
-class RemoteTrack extends Track {
- constructor(mediaTrack, sid, kind, receiver) {
- super(mediaTrack, kind);
- this.sid = sid;
- this.receiver = receiver;
- }
- /** @internal */
- setMuted(muted) {
- if (this.isMuted !== muted) {
- this.isMuted = muted;
- this._mediaStreamTrack.enabled = !muted;
- this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);
- }
- }
- /** @internal */
- setMediaStream(stream) {
- // this is needed to determine when the track is finished
- // we send each track down in its own MediaStream, so we can assume the
- // current track is the only one that can be removed.
- this.mediaStream = stream;
- stream.onremovetrack = () => {
- this.receiver = undefined;
- this._currentBitrate = 0;
- this.emit(TrackEvent.Ended, this);
- };
- }
- start() {
- this.startMonitor();
- // use `enabled` of track to enable re-use of transceiver
- super.enable();
- }
- stop() {
- this.stopMonitor();
- // use `enabled` of track to enable re-use of transceiver
- super.disable();
- }
- /* @internal */
- startMonitor() {
- if (!this.monitorInterval) {
- this.monitorInterval = setInterval(() => this.monitorReceiver(), monitorFrequency);
- }
- }
-}
-
-class RemoteAudioTrack extends RemoteTrack {
- constructor(mediaTrack, sid, receiver, audioContext, audioOutput) {
- super(mediaTrack, sid, Track.Kind.Audio, receiver);
- this.monitorReceiver = async () => {
- if (!this.receiver) {
- this._currentBitrate = 0;
- return;
- }
- const stats = await this.getReceiverStats();
- if (stats && this.prevStats && this.receiver) {
- this._currentBitrate = computeBitrate(stats, this.prevStats);
- }
- this.prevStats = stats;
- };
- this.audioContext = audioContext;
- this.webAudioPluginNodes = [];
- if (audioOutput) {
- this.sinkId = audioOutput.deviceId;
- }
- }
- /**
- * sets the volume for all attached audio elements
- */
- setVolume(volume) {
- var _a;
- for (const el of this.attachedElements) {
- if (this.audioContext) {
- (_a = this.gainNode) === null || _a === void 0 ? void 0 : _a.gain.setTargetAtTime(volume, 0, 0.1);
- } else {
- el.volume = volume;
- }
- }
- this.elementVolume = volume;
- }
- /**
- * gets the volume of attached audio elements (loudest)
- */
- getVolume() {
- if (this.elementVolume) {
- return this.elementVolume;
- }
- let highestVolume = 0;
- this.attachedElements.forEach(element => {
- if (element.volume > highestVolume) {
- highestVolume = element.volume;
- }
- });
- return highestVolume;
- }
- /**
- * calls setSinkId on all attached elements, if supported
- * @param deviceId audio output device
- */
- async setSinkId(deviceId) {
- this.sinkId = deviceId;
- await Promise.all(this.attachedElements.map(elm => {
- if (!supportsSetSinkId(elm)) {
- return;
- }
- /* @ts-ignore */
- return elm.setSinkId(deviceId);
- }));
- }
- attach(element) {
- const needsNewWebAudioConnection = this.attachedElements.length === 0;
- if (!element) {
- element = super.attach();
- } else {
- super.attach(element);
- }
- if (this.elementVolume) {
- element.volume = this.elementVolume;
- }
- if (this.sinkId && supportsSetSinkId(element)) {
- /* @ts-ignore */
- element.setSinkId(this.sinkId);
- }
- if (this.audioContext && needsNewWebAudioConnection) {
- livekitLogger.debug('using audio context mapping');
- this.connectWebAudio(this.audioContext, element);
- element.volume = 0;
- element.muted = true;
- }
- return element;
- }
- detach(element) {
- let detached;
- if (!element) {
- detached = super.detach();
- this.disconnectWebAudio();
- } else {
- detached = super.detach(element);
- // if there are still any attached elements after detaching, connect webaudio to the first element that's left
- // disconnect webaudio otherwise
- if (this.audioContext) {
- if (this.attachedElements.length > 0) {
- this.connectWebAudio(this.audioContext, this.attachedElements[0]);
- } else {
- this.disconnectWebAudio();
- }
- }
- }
- return detached;
- }
- /**
- * @internal
- * @experimental
- */
- setAudioContext(audioContext) {
- this.audioContext = audioContext;
- if (audioContext && this.attachedElements.length > 0) {
- this.connectWebAudio(audioContext, this.attachedElements[0]);
- } else if (!audioContext) {
- this.disconnectWebAudio();
- }
- }
- /**
- * @internal
- * @experimental
- * @param {AudioNode[]} nodes - An array of WebAudio nodes. These nodes should not be connected to each other when passed, as the sdk will take care of connecting them in the order of the array.
- */
- setWebAudioPlugins(nodes) {
- this.webAudioPluginNodes = nodes;
- if (this.attachedElements.length > 0 && this.audioContext) {
- this.connectWebAudio(this.audioContext, this.attachedElements[0]);
- }
- }
- connectWebAudio(context, element) {
- this.disconnectWebAudio();
- // @ts-ignore attached elements always have a srcObject set
- this.sourceNode = context.createMediaStreamSource(element.srcObject);
- let lastNode = this.sourceNode;
- this.webAudioPluginNodes.forEach(node => {
- lastNode.connect(node);
- lastNode = node;
- });
- this.gainNode = context.createGain();
- lastNode.connect(this.gainNode);
- this.gainNode.connect(context.destination);
- if (this.elementVolume) {
- this.gainNode.gain.setTargetAtTime(this.elementVolume, 0, 0.1);
- }
- // try to resume the context if it isn't running already
- if (context.state !== 'running') {
- context.resume().then(() => {
- if (context.state !== 'running') {
- this.emit(TrackEvent.AudioPlaybackFailed, new Error("Audio Context couldn't be started automatically"));
- }
- }).catch(e => {
- this.emit(TrackEvent.AudioPlaybackFailed, e);
- });
- }
- }
- disconnectWebAudio() {
- var _a, _b;
- (_a = this.gainNode) === null || _a === void 0 ? void 0 : _a.disconnect();
- (_b = this.sourceNode) === null || _b === void 0 ? void 0 : _b.disconnect();
- this.gainNode = undefined;
- this.sourceNode = undefined;
- }
- async getReceiverStats() {
- if (!this.receiver || !this.receiver.getStats) {
- return;
- }
- const stats = await this.receiver.getStats();
- let receiverStats;
- stats.forEach(v => {
- if (v.type === 'inbound-rtp') {
- receiverStats = {
- type: 'audio',
- timestamp: v.timestamp,
- jitter: v.jitter,
- bytesReceived: v.bytesReceived,
- concealedSamples: v.concealedSamples,
- concealmentEvents: v.concealmentEvents,
- silentConcealedSamples: v.silentConcealedSamples,
- silentConcealmentEvents: v.silentConcealmentEvents,
- totalAudioEnergy: v.totalAudioEnergy,
- totalSamplesDuration: v.totalSamplesDuration
- };
- }
- });
- return receiverStats;
- }
-}
-
-function r(r, e, n) {
- var i, t, o;
- void 0 === e && (e = 50), void 0 === n && (n = {});
- var a = null != (i = n.isImmediate) && i,
- u = null != (t = n.callback) && t,
- c = n.maxWait,
- v = Date.now(),
- l = [];
- function f() {
- if (void 0 !== c) {
- var r = Date.now() - v;
- if (r + e >= c) return c - r;
- }
- return e;
- }
- var d = function () {
- var e = [].slice.call(arguments),
- n = this;
- return new Promise(function (i, t) {
- var c = a && void 0 === o;
- if (void 0 !== o && clearTimeout(o), o = setTimeout(function () {
- if (o = void 0, v = Date.now(), !a) {
- var i = r.apply(n, e);
- u && u(i), l.forEach(function (r) {
- return (0, r.resolve)(i);
- }), l = [];
- }
- }, f()), c) {
- var d = r.apply(n, e);
- return u && u(d), i(d);
- }
- l.push({
- resolve: i,
- reject: t
- });
- });
- };
- return d.cancel = function (r) {
- void 0 !== o && clearTimeout(o), l.forEach(function (e) {
- return (0, e.reject)(r);
- }), l = [];
- }, d;
-}
-
-/**
- * Timers that can be overridden with platform specific implementations
- * that ensure that they are fired. These should be used when it is critical
- * that the timer fires on time.
- */
-class CriticalTimers {}
-// eslint-disable-next-line @typescript-eslint/no-implied-eval
-CriticalTimers.setTimeout = function () {
- return setTimeout(...arguments);
-};
-// eslint-disable-next-line @typescript-eslint/no-implied-eval
-CriticalTimers.setInterval = function () {
- return setInterval(...arguments);
-};
-CriticalTimers.clearTimeout = function () {
- return clearTimeout(...arguments);
-};
-CriticalTimers.clearInterval = function () {
- return clearInterval(...arguments);
-};
-
-const REACTION_DELAY = 100;
-class RemoteVideoTrack extends RemoteTrack {
- constructor(mediaTrack, sid, receiver, adaptiveStreamSettings) {
- super(mediaTrack, sid, Track.Kind.Video, receiver);
- this.elementInfos = [];
- this.hasUsedAttach = false;
- this.monitorReceiver = async () => {
- if (!this.receiver) {
- this._currentBitrate = 0;
- return;
- }
- const stats = await this.getReceiverStats();
- if (stats && this.prevStats && this.receiver) {
- this._currentBitrate = computeBitrate(stats, this.prevStats);
- }
- this.prevStats = stats;
- };
- this.debouncedHandleResize = r(() => {
- this.updateDimensions();
- }, REACTION_DELAY);
- this.adaptiveStreamSettings = adaptiveStreamSettings;
- }
- get isAdaptiveStream() {
- return this.adaptiveStreamSettings !== undefined;
- }
- get mediaStreamTrack() {
- if (this.isAdaptiveStream && !this.hasUsedAttach) {
- livekitLogger.warn('When using adaptiveStream, you need to use remoteVideoTrack.attach() to add the track to a HTMLVideoElement, otherwise your video tracks might never start');
- }
- return this._mediaStreamTrack;
- }
- /** @internal */
- setMuted(muted) {
- super.setMuted(muted);
- this.attachedElements.forEach(element => {
- // detach or attach
- if (muted) {
- detachTrack(this._mediaStreamTrack, element);
- } else {
- attachToElement(this._mediaStreamTrack, element);
- }
- });
- }
- attach(element) {
- if (!element) {
- element = super.attach();
- } else {
- super.attach(element);
- }
- // It's possible attach is called multiple times on an element. When that's
- // the case, we'd want to avoid adding duplicate elementInfos
- if (this.adaptiveStreamSettings && this.elementInfos.find(info => info.element === element) === undefined) {
- const elementInfo = new HTMLElementInfo(element);
- this.observeElementInfo(elementInfo);
- }
- this.hasUsedAttach = true;
- return element;
- }
- /**
- * Observe an ElementInfo for changes when adaptive streaming.
- * @param elementInfo
- * @internal
- */
- observeElementInfo(elementInfo) {
- if (this.adaptiveStreamSettings && this.elementInfos.find(info => info === elementInfo) === undefined) {
- elementInfo.handleResize = () => {
- this.debouncedHandleResize();
- };
- elementInfo.handleVisibilityChanged = () => {
- this.updateVisibility();
- };
- this.elementInfos.push(elementInfo);
- elementInfo.observe();
- // trigger the first resize update cycle
- // if the tab is backgrounded, the initial resize event does not fire until
- // the tab comes into focus for the first time.
- this.debouncedHandleResize();
- this.updateVisibility();
- } else {
- livekitLogger.warn('visibility resize observer not triggered');
- }
- }
- /**
- * Stop observing an ElementInfo for changes.
- * @param elementInfo
- * @internal
- */
- stopObservingElementInfo(elementInfo) {
- if (!this.isAdaptiveStream) {
- livekitLogger.warn('stopObservingElementInfo ignored');
- return;
- }
- const stopElementInfos = this.elementInfos.filter(info => info === elementInfo);
- for (const info of stopElementInfos) {
- info.stopObserving();
- }
- this.elementInfos = this.elementInfos.filter(info => info !== elementInfo);
- this.updateVisibility();
- }
- detach(element) {
- let detachedElements = [];
- if (element) {
- this.stopObservingElement(element);
- return super.detach(element);
- }
- detachedElements = super.detach();
- for (const e of detachedElements) {
- this.stopObservingElement(e);
- }
- return detachedElements;
- }
- /** @internal */
- getDecoderImplementation() {
- var _a;
- return (_a = this.prevStats) === null || _a === void 0 ? void 0 : _a.decoderImplementation;
- }
- async getReceiverStats() {
- if (!this.receiver || !this.receiver.getStats) {
- return;
- }
- const stats = await this.receiver.getStats();
- let receiverStats;
- stats.forEach(v => {
- if (v.type === 'inbound-rtp') {
- receiverStats = {
- type: 'video',
- framesDecoded: v.framesDecoded,
- framesDropped: v.framesDropped,
- framesReceived: v.framesReceived,
- packetsReceived: v.packetsReceived,
- packetsLost: v.packetsLost,
- frameWidth: v.frameWidth,
- frameHeight: v.frameHeight,
- pliCount: v.pliCount,
- firCount: v.firCount,
- nackCount: v.nackCount,
- jitter: v.jitter,
- timestamp: v.timestamp,
- bytesReceived: v.bytesReceived,
- decoderImplementation: v.decoderImplementation
- };
- }
- });
- return receiverStats;
- }
- stopObservingElement(element) {
- const stopElementInfos = this.elementInfos.filter(info => info.element === element);
- for (const info of stopElementInfos) {
- info.stopObserving();
- }
- this.elementInfos = this.elementInfos.filter(info => info.element !== element);
- }
- async handleAppVisibilityChanged() {
- await super.handleAppVisibilityChanged();
- if (!this.isAdaptiveStream) return;
- this.updateVisibility();
- }
- updateVisibility() {
- var _a, _b;
- const lastVisibilityChange = this.elementInfos.reduce((prev, info) => Math.max(prev, info.visibilityChangedAt || 0), 0);
- const backgroundPause = ((_b = (_a = this.adaptiveStreamSettings) === null || _a === void 0 ? void 0 : _a.pauseVideoInBackground) !== null && _b !== void 0 ? _b : true // default to true
- ) ? this.isInBackground : false;
- const isPiPMode = this.elementInfos.some(info => info.pictureInPicture);
- const isVisible = this.elementInfos.some(info => info.visible) && !backgroundPause || isPiPMode;
- if (this.lastVisible === isVisible) {
- return;
- }
- if (!isVisible && Date.now() - lastVisibilityChange < REACTION_DELAY) {
- // delay hidden events
- CriticalTimers.setTimeout(() => {
- this.updateVisibility();
- }, REACTION_DELAY);
- return;
- }
- this.lastVisible = isVisible;
- this.emit(TrackEvent.VisibilityChanged, isVisible, this);
- }
- updateDimensions() {
- var _a, _b, _c, _d;
- let maxWidth = 0;
- let maxHeight = 0;
- for (const info of this.elementInfos) {
- const pixelDensity = (_b = (_a = this.adaptiveStreamSettings) === null || _a === void 0 ? void 0 : _a.pixelDensity) !== null && _b !== void 0 ? _b : 1;
- const pixelDensityValue = pixelDensity === 'screen' ? window.devicePixelRatio : pixelDensity;
- const currentElementWidth = info.width() * pixelDensityValue;
- const currentElementHeight = info.height() * pixelDensityValue;
- if (currentElementWidth + currentElementHeight > maxWidth + maxHeight) {
- maxWidth = currentElementWidth;
- maxHeight = currentElementHeight;
- }
- }
- if (((_c = this.lastDimensions) === null || _c === void 0 ? void 0 : _c.width) === maxWidth && ((_d = this.lastDimensions) === null || _d === void 0 ? void 0 : _d.height) === maxHeight) {
- return;
- }
- this.lastDimensions = {
- width: maxWidth,
- height: maxHeight
- };
- this.emit(TrackEvent.VideoDimensionsChanged, this.lastDimensions, this);
- }
-}
-class HTMLElementInfo {
- get visible() {
- return this.isPiP || this.isIntersecting;
- }
- get pictureInPicture() {
- return this.isPiP;
- }
- constructor(element, visible) {
- this.onVisibilityChanged = entry => {
- var _a;
- const {
- target,
- isIntersecting
- } = entry;
- if (target === this.element) {
- this.isIntersecting = isIntersecting;
- this.visibilityChangedAt = Date.now();
- (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);
- }
- };
- this.onEnterPiP = () => {
- var _a;
- this.isPiP = true;
- (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);
- };
- this.onLeavePiP = () => {
- var _a;
- this.isPiP = false;
- (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);
- };
- this.element = element;
- this.isIntersecting = visible !== null && visible !== void 0 ? visible : isElementInViewport(element);
- this.isPiP = isWeb() && document.pictureInPictureElement === element;
- this.visibilityChangedAt = 0;
- }
- width() {
- return this.element.clientWidth;
- }
- height() {
- return this.element.clientHeight;
- }
- observe() {
- // make sure we update the current visible state once we start to observe
- this.isIntersecting = isElementInViewport(this.element);
- this.isPiP = document.pictureInPictureElement === this.element;
- this.element.handleResize = () => {
- var _a;
- (_a = this.handleResize) === null || _a === void 0 ? void 0 : _a.call(this);
- };
- this.element.handleVisibilityChanged = this.onVisibilityChanged;
- getIntersectionObserver().observe(this.element);
- getResizeObserver().observe(this.element);
- this.element.addEventListener('enterpictureinpicture', this.onEnterPiP);
- this.element.addEventListener('leavepictureinpicture', this.onLeavePiP);
- }
- stopObserving() {
- var _a, _b;
- (_a = getIntersectionObserver()) === null || _a === void 0 ? void 0 : _a.unobserve(this.element);
- (_b = getResizeObserver()) === null || _b === void 0 ? void 0 : _b.unobserve(this.element);
- this.element.removeEventListener('enterpictureinpicture', this.onEnterPiP);
- this.element.removeEventListener('leavepictureinpicture', this.onLeavePiP);
- }
-}
-// does not account for occlusion by other elements
-function isElementInViewport(el) {
- let top = el.offsetTop;
- let left = el.offsetLeft;
- const width = el.offsetWidth;
- const height = el.offsetHeight;
- const {
- hidden
- } = el;
- const {
- opacity,
- display
- } = getComputedStyle(el);
- while (el.offsetParent) {
- el = el.offsetParent;
- top += el.offsetTop;
- left += el.offsetLeft;
- }
- return top < window.pageYOffset + window.innerHeight && left < window.pageXOffset + window.innerWidth && top + height > window.pageYOffset && left + width > window.pageXOffset && !hidden && (opacity !== '' ? parseFloat(opacity) > 0 : true) && display !== 'none';
-}
-
-class TrackPublication extends eventsExports.EventEmitter {
- constructor(kind, id, name) {
- super();
- this.metadataMuted = false;
- this.handleMuted = () => {
- this.emit(TrackEvent.Muted);
- };
- this.handleUnmuted = () => {
- this.emit(TrackEvent.Unmuted);
- };
- this.setMaxListeners(100);
- this.kind = kind;
- this.trackSid = id;
- this.trackName = name;
- this.source = Track.Source.Unknown;
- }
- /** @internal */
- setTrack(track) {
- if (this.track) {
- this.track.off(TrackEvent.Muted, this.handleMuted);
- this.track.off(TrackEvent.Unmuted, this.handleUnmuted);
- }
- this.track = track;
- if (track) {
- // forward events
- track.on(TrackEvent.Muted, this.handleMuted);
- track.on(TrackEvent.Unmuted, this.handleUnmuted);
- }
- }
- get isMuted() {
- return this.metadataMuted;
- }
- get isEnabled() {
- return true;
- }
- get isSubscribed() {
- return this.track !== undefined;
- }
- /**
- * an [AudioTrack] if this publication holds an audio track
- */
- get audioTrack() {
- if (this.track instanceof LocalAudioTrack || this.track instanceof RemoteAudioTrack) {
- return this.track;
- }
- }
- /**
- * an [VideoTrack] if this publication holds a video track
- */
- get videoTrack() {
- if (this.track instanceof LocalVideoTrack || this.track instanceof RemoteVideoTrack) {
- return this.track;
- }
- }
- /** @internal */
- updateInfo(info) {
- this.trackSid = info.sid;
- this.trackName = info.name;
- this.source = Track.sourceFromProto(info.source);
- this.mimeType = info.mimeType;
- if (this.kind === Track.Kind.Video && info.width > 0) {
- this.dimensions = {
- width: info.width,
- height: info.height
- };
- this.simulcasted = info.simulcast;
- }
- this.trackInfo = info;
- livekitLogger.trace('update publication info', {
- info
- });
- }
-}
-(function (TrackPublication) {
- (function (SubscriptionStatus) {
- SubscriptionStatus["Desired"] = "desired";
- SubscriptionStatus["Subscribed"] = "subscribed";
- SubscriptionStatus["Unsubscribed"] = "unsubscribed";
- })(TrackPublication.SubscriptionStatus || (TrackPublication.SubscriptionStatus = {}));
- (function (PermissionStatus) {
- PermissionStatus["Allowed"] = "allowed";
- PermissionStatus["NotAllowed"] = "not_allowed";
- })(TrackPublication.PermissionStatus || (TrackPublication.PermissionStatus = {}));
-})(TrackPublication || (TrackPublication = {}));
-
-class LocalTrackPublication extends TrackPublication {
- get isUpstreamPaused() {
- var _a;
- return (_a = this.track) === null || _a === void 0 ? void 0 : _a.isUpstreamPaused;
- }
- constructor(kind, ti, track) {
- super(kind, ti.sid, ti.name);
- this.track = undefined;
- this.handleTrackEnded = () => {
- this.emit(TrackEvent.Ended);
- };
- this.updateInfo(ti);
- this.setTrack(track);
- }
- setTrack(track) {
- if (this.track) {
- this.track.off(TrackEvent.Ended, this.handleTrackEnded);
- }
- super.setTrack(track);
- if (track) {
- track.on(TrackEvent.Ended, this.handleTrackEnded);
- }
- }
- get isMuted() {
- if (this.track) {
- return this.track.isMuted;
- }
- return super.isMuted;
- }
- get audioTrack() {
- return super.audioTrack;
- }
- get videoTrack() {
- return super.videoTrack;
- }
- /**
- * Mute the track associated with this publication
- */
- async mute() {
- var _a;
- return (_a = this.track) === null || _a === void 0 ? void 0 : _a.mute();
- }
- /**
- * Unmute track associated with this publication
- */
- async unmute() {
- var _a;
- return (_a = this.track) === null || _a === void 0 ? void 0 : _a.unmute();
- }
- /**
- * Pauses the media stream track associated with this publication from being sent to the server
- * and signals "muted" event to other participants
- * Useful if you want to pause the stream without pausing the local media stream track
- */
- async pauseUpstream() {
- var _a;
- await ((_a = this.track) === null || _a === void 0 ? void 0 : _a.pauseUpstream());
- }
- /**
- * Resumes sending the media stream track associated with this publication to the server after a call to [[pauseUpstream()]]
- * and signals "unmuted" event to other participants (unless the track is explicitly muted)
- */
- async resumeUpstream() {
- var _a;
- await ((_a = this.track) === null || _a === void 0 ? void 0 : _a.resumeUpstream());
- }
-}
-
-class VideoPreset {
- constructor(width, height, maxBitrate, maxFramerate) {
- this.width = width;
- this.height = height;
- this.encoding = {
- maxBitrate,
- maxFramerate
- };
- }
- get resolution() {
- return {
- width: this.width,
- height: this.height,
- frameRate: this.encoding.maxFramerate,
- aspectRatio: this.width / this.height
- };
- }
-}
-const backupCodecs = ['vp8', 'h264'];
-function isBackupCodec(codec) {
- return !!backupCodecs.find(backup => backup === codec);
-}
-var AudioPresets;
-(function (AudioPresets) {
- AudioPresets.telephone = {
- maxBitrate: 12000
- };
- AudioPresets.speech = {
- maxBitrate: 20000
- };
- AudioPresets.music = {
- maxBitrate: 32000
- };
- AudioPresets.musicStereo = {
- maxBitrate: 48000
- };
- AudioPresets.musicHighQuality = {
- maxBitrate: 64000
- };
- AudioPresets.musicHighQualityStereo = {
- maxBitrate: 96000
- };
-})(AudioPresets || (AudioPresets = {}));
-/**
- * Sane presets for video resolution/encoding
- */
-const VideoPresets = {
- h90: new VideoPreset(160, 90, 60000, 15),
- h180: new VideoPreset(320, 180, 120000, 15),
- h216: new VideoPreset(384, 216, 180000, 15),
- h360: new VideoPreset(640, 360, 300000, 20),
- h540: new VideoPreset(960, 540, 600000, 25),
- h720: new VideoPreset(1280, 720, 1700000, 30),
- h1080: new VideoPreset(1920, 1080, 3000000, 30),
- h1440: new VideoPreset(2560, 1440, 5000000, 30),
- h2160: new VideoPreset(3840, 2160, 8000000, 30)
-};
-/**
- * Four by three presets
- */
-const VideoPresets43 = {
- h120: new VideoPreset(160, 120, 80000, 15),
- h180: new VideoPreset(240, 180, 100000, 15),
- h240: new VideoPreset(320, 240, 150000, 15),
- h360: new VideoPreset(480, 360, 225000, 20),
- h480: new VideoPreset(640, 480, 300000, 20),
- h540: new VideoPreset(720, 540, 450000, 25),
- h720: new VideoPreset(960, 720, 1500000, 30),
- h1080: new VideoPreset(1440, 1080, 2500000, 30),
- h1440: new VideoPreset(1920, 1440, 3500000, 30)
-};
-const ScreenSharePresets = {
- h360fps3: new VideoPreset(640, 360, 200000, 3),
- h720fps5: new VideoPreset(1280, 720, 400000, 5),
- h720fps15: new VideoPreset(1280, 720, 1000000, 15),
- h1080fps15: new VideoPreset(1920, 1080, 1500000, 15),
- h1080fps30: new VideoPreset(1920, 1080, 3000000, 30)
-};
-
-var ConnectionQuality;
-(function (ConnectionQuality) {
- ConnectionQuality["Excellent"] = "excellent";
- ConnectionQuality["Good"] = "good";
- ConnectionQuality["Poor"] = "poor";
- ConnectionQuality["Unknown"] = "unknown";
-})(ConnectionQuality || (ConnectionQuality = {}));
-function qualityFromProto(q) {
- switch (q) {
- case ConnectionQuality$1.EXCELLENT:
- return ConnectionQuality.Excellent;
- case ConnectionQuality$1.GOOD:
- return ConnectionQuality.Good;
- case ConnectionQuality$1.POOR:
- return ConnectionQuality.Poor;
- default:
- return ConnectionQuality.Unknown;
- }
-}
-class Participant extends eventsExports.EventEmitter {
- /** @internal */
- constructor(sid, identity, name, metadata) {
- super();
- /** audio level between 0-1.0, 1 being loudest, 0 being softest */
- this.audioLevel = 0;
- /** if participant is currently speaking */
- this.isSpeaking = false;
- this._connectionQuality = ConnectionQuality.Unknown;
- this.setMaxListeners(100);
- this.sid = sid;
- this.identity = identity;
- this.name = name;
- this.metadata = metadata;
- this.audioTracks = new Map();
- this.videoTracks = new Map();
- this.tracks = new Map();
- }
- getTracks() {
- return Array.from(this.tracks.values());
- }
- /**
- * Finds the first track that matches the source filter, for example, getting
- * the user's camera track with getTrackBySource(Track.Source.Camera).
- * @param source
- * @returns
- */
- getTrack(source) {
- for (const [, pub] of this.tracks) {
- if (pub.source === source) {
- return pub;
- }
- }
- }
- /**
- * Finds the first track that matches the track's name.
- * @param name
- * @returns
- */
- getTrackByName(name) {
- for (const [, pub] of this.tracks) {
- if (pub.trackName === name) {
- return pub;
- }
- }
- }
- get connectionQuality() {
- return this._connectionQuality;
- }
- get isCameraEnabled() {
- var _a;
- const track = this.getTrack(Track.Source.Camera);
- return !((_a = track === null || track === void 0 ? void 0 : track.isMuted) !== null && _a !== void 0 ? _a : true);
- }
- get isMicrophoneEnabled() {
- var _a;
- const track = this.getTrack(Track.Source.Microphone);
- return !((_a = track === null || track === void 0 ? void 0 : track.isMuted) !== null && _a !== void 0 ? _a : true);
- }
- get isScreenShareEnabled() {
- const track = this.getTrack(Track.Source.ScreenShare);
- return !!track;
- }
- get isLocal() {
- return false;
- }
- /** when participant joined the room */
- get joinedAt() {
- if (this.participantInfo) {
- return new Date(this.participantInfo.joinedAt * 1000);
- }
- return new Date();
- }
- /** @internal */
- updateInfo(info) {
- this.identity = info.identity;
- this.sid = info.sid;
- this.name = info.name;
- this.setMetadata(info.metadata);
- if (info.permission) {
- this.setPermissions(info.permission);
- }
- // set this last so setMetadata can detect changes
- this.participantInfo = info;
- livekitLogger.trace('update participant info', {
- info
- });
- }
- /** @internal */
- setMetadata(md) {
- const changed = this.metadata !== md;
- const prevMetadata = this.metadata;
- this.metadata = md;
- if (changed) {
- this.emit(ParticipantEvent.ParticipantMetadataChanged, prevMetadata);
- }
- }
- /** @internal */
- setPermissions(permissions) {
- var _a, _b, _c, _d, _e;
- const prevPermissions = this.permissions;
- const changed = permissions.canPublish !== ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.canPublish) || permissions.canSubscribe !== ((_b = this.permissions) === null || _b === void 0 ? void 0 : _b.canSubscribe) || permissions.canPublishData !== ((_c = this.permissions) === null || _c === void 0 ? void 0 : _c.canPublishData) || permissions.hidden !== ((_d = this.permissions) === null || _d === void 0 ? void 0 : _d.hidden) || permissions.recorder !== ((_e = this.permissions) === null || _e === void 0 ? void 0 : _e.recorder) || permissions.canPublishSources.length !== this.permissions.canPublishSources.length || permissions.canPublishSources.some((value, index) => {
- var _a;
- return value !== ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.canPublishSources[index]);
- });
- this.permissions = permissions;
- if (changed) {
- this.emit(ParticipantEvent.ParticipantPermissionsChanged, prevPermissions);
- }
- return changed;
- }
- /** @internal */
- setIsSpeaking(speaking) {
- if (speaking === this.isSpeaking) {
- return;
- }
- this.isSpeaking = speaking;
- if (speaking) {
- this.lastSpokeAt = new Date();
- }
- this.emit(ParticipantEvent.IsSpeakingChanged, speaking);
- }
- /** @internal */
- setConnectionQuality(q) {
- const prevQuality = this._connectionQuality;
- this._connectionQuality = qualityFromProto(q);
- if (prevQuality !== this._connectionQuality) {
- this.emit(ParticipantEvent.ConnectionQualityChanged, this._connectionQuality);
- }
- }
- addTrackPublication(publication) {
- // forward publication driven events
- publication.on(TrackEvent.Muted, () => {
- this.emit(ParticipantEvent.TrackMuted, publication);
- });
- publication.on(TrackEvent.Unmuted, () => {
- this.emit(ParticipantEvent.TrackUnmuted, publication);
- });
- const pub = publication;
- if (pub.track) {
- pub.track.sid = publication.trackSid;
- }
- this.tracks.set(publication.trackSid, publication);
- switch (publication.kind) {
- case Track.Kind.Audio:
- this.audioTracks.set(publication.trackSid, publication);
- break;
- case Track.Kind.Video:
- this.videoTracks.set(publication.trackSid, publication);
- break;
- }
- }
-}
-
-function trackPermissionToProto(perms) {
- var _a, _b, _c;
- if (!perms.participantSid && !perms.participantIdentity) {
- throw new Error('Invalid track permission, must provide at least one of participantIdentity and participantSid');
- }
- return {
- participantIdentity: (_a = perms.participantIdentity) !== null && _a !== void 0 ? _a : '',
- participantSid: (_b = perms.participantSid) !== null && _b !== void 0 ? _b : '',
- allTracks: (_c = perms.allowAll) !== null && _c !== void 0 ? _c : false,
- trackSids: perms.allowedTrackSids || []
- };
-}
-
-/** @internal */
-function mediaTrackToLocalTrack(mediaStreamTrack, constraints) {
- switch (mediaStreamTrack.kind) {
- case 'audio':
- return new LocalAudioTrack(mediaStreamTrack, constraints, false);
- case 'video':
- return new LocalVideoTrack(mediaStreamTrack, constraints, false);
- default:
- throw new TrackInvalidError("unsupported track type: ".concat(mediaStreamTrack.kind));
- }
-}
-/* @internal */
-const presets169 = Object.values(VideoPresets);
-/* @internal */
-const presets43 = Object.values(VideoPresets43);
-/* @internal */
-const presetsScreenShare = Object.values(ScreenSharePresets);
-/* @internal */
-const defaultSimulcastPresets169 = [VideoPresets.h180, VideoPresets.h360];
-/* @internal */
-const defaultSimulcastPresets43 = [VideoPresets43.h180, VideoPresets43.h360];
-/* @internal */
-const computeDefaultScreenShareSimulcastPresets = fromPreset => {
- const layers = [{
- scaleResolutionDownBy: 2,
- fps: 3
- }];
- return layers.map(t => {
- var _a;
- return new VideoPreset(Math.floor(fromPreset.width / t.scaleResolutionDownBy), Math.floor(fromPreset.height / t.scaleResolutionDownBy), Math.max(150000, Math.floor(fromPreset.encoding.maxBitrate / (t.scaleResolutionDownBy ** 2 * (((_a = fromPreset.encoding.maxFramerate) !== null && _a !== void 0 ? _a : 30) / t.fps)))), t.fps);
- });
-};
-// /**
-// *
-// * @internal
-// * @experimental
-// */
-// const computeDefaultMultiCodecSimulcastEncodings = (width: number, height: number) => {
-// // use vp8 as a default
-// const vp8 = determineAppropriateEncoding(false, width, height);
-// const vp9 = { ...vp8, maxBitrate: vp8.maxBitrate * 0.9 };
-// const h264 = { ...vp8, maxBitrate: vp8.maxBitrate * 1.1 };
-// const av1 = { ...vp8, maxBitrate: vp8.maxBitrate * 0.7 };
-// return {
-// vp8,
-// vp9,
-// h264,
-// av1,
-// };
-// };
-const videoRids = ['q', 'h', 'f'];
-/* @internal */
-function computeVideoEncodings(isScreenShare, width, height, options) {
- var _a, _b;
- let videoEncoding = options === null || options === void 0 ? void 0 : options.videoEncoding;
- if (isScreenShare) {
- videoEncoding = options === null || options === void 0 ? void 0 : options.screenShareEncoding;
- }
- const useSimulcast = options === null || options === void 0 ? void 0 : options.simulcast;
- const scalabilityMode = options === null || options === void 0 ? void 0 : options.scalabilityMode;
- const videoCodec = options === null || options === void 0 ? void 0 : options.videoCodec;
- if (!videoEncoding && !useSimulcast && !scalabilityMode || !width || !height) {
- // when we aren't simulcasting or svc, will need to return a single encoding without
- // capping bandwidth. we always require a encoding for dynacast
- return [{}];
- }
- if (!videoEncoding) {
- // find the right encoding based on width/height
- videoEncoding = determineAppropriateEncoding(isScreenShare, width, height, videoCodec);
- livekitLogger.debug('using video encoding', videoEncoding);
- }
- const original = new VideoPreset(width, height, videoEncoding.maxBitrate, videoEncoding.maxFramerate);
- if (scalabilityMode && videoCodec === 'av1') {
- livekitLogger.debug("using svc with scalabilityMode ".concat(scalabilityMode));
- const encodings = [];
- // svc use first encoding as the original, so we sort encoding from high to low
- switch (scalabilityMode) {
- case 'L3T3':
- for (let i = 0; i < 3; i += 1) {
- encodings.push({
- rid: videoRids[2 - i],
- scaleResolutionDownBy: 2 ** i,
- maxBitrate: videoEncoding.maxBitrate / 3 ** i,
- /* @ts-ignore */
- maxFramerate: original.encoding.maxFramerate,
- /* @ts-ignore */
- scalabilityMode: 'L3T3'
- });
- }
- livekitLogger.debug('encodings', encodings);
- return encodings;
- default:
- // TODO : support other scalability modes
- throw new Error("unsupported scalabilityMode: ".concat(scalabilityMode));
- }
- }
- if (!useSimulcast) {
- return [videoEncoding];
- }
- let presets = [];
- if (isScreenShare) {
- presets = (_a = sortPresets(options === null || options === void 0 ? void 0 : options.screenShareSimulcastLayers)) !== null && _a !== void 0 ? _a : defaultSimulcastLayers(isScreenShare, original);
- } else {
- presets = (_b = sortPresets(options === null || options === void 0 ? void 0 : options.videoSimulcastLayers)) !== null && _b !== void 0 ? _b : defaultSimulcastLayers(isScreenShare, original);
- }
- let midPreset;
- if (presets.length > 0) {
- const lowPreset = presets[0];
- if (presets.length > 1) {
- [, midPreset] = presets;
- }
- // NOTE:
- // 1. Ordering of these encodings is important. Chrome seems
- // to use the index into encodings to decide which layer
- // to disable when CPU constrained.
- // So encodings should be ordered in increasing spatial
- // resolution order.
- // 2. ion-sfu translates rids into layers. So, all encodings
- // should have the base layer `q` and then more added
- // based on other conditions.
- const size = Math.max(width, height);
- if (size >= 960 && midPreset) {
- return encodingsFromPresets(width, height, [lowPreset, midPreset, original]);
- }
- if (size >= 480) {
- return encodingsFromPresets(width, height, [lowPreset, original]);
- }
- }
- return encodingsFromPresets(width, height, [original]);
-}
-function computeTrackBackupEncodings(track, videoCodec, opts) {
- var _a, _b, _c, _d;
- if (!opts.backupCodec || opts.backupCodec.codec === opts.videoCodec) {
- // backup codec publishing is disabled
- return;
- }
- if (videoCodec !== opts.backupCodec.codec) {
- livekitLogger.warn('requested a different codec than specified as backup', {
- serverRequested: videoCodec,
- backup: opts.backupCodec.codec
- });
- }
- opts.videoCodec = videoCodec;
- // use backup encoding setting as videoEncoding for backup codec publishing
- opts.videoEncoding = opts.backupCodec.encoding;
- const settings = track.mediaStreamTrack.getSettings();
- const width = (_a = settings.width) !== null && _a !== void 0 ? _a : (_b = track.dimensions) === null || _b === void 0 ? void 0 : _b.width;
- const height = (_c = settings.height) !== null && _c !== void 0 ? _c : (_d = track.dimensions) === null || _d === void 0 ? void 0 : _d.height;
- const encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, width, height, opts);
- return encodings;
-}
-/* @internal */
-function determineAppropriateEncoding(isScreenShare, width, height, codec) {
- const presets = presetsForResolution(isScreenShare, width, height);
- let {
- encoding
- } = presets[0];
- // handle portrait by swapping dimensions
- const size = Math.max(width, height);
- for (let i = 0; i < presets.length; i += 1) {
- const preset = presets[i];
- encoding = preset.encoding;
- if (preset.width >= size) {
- break;
- }
- }
- // presets are based on the assumption of vp8 as a codec
- // for other codecs we adjust the maxBitrate if no specific videoEncoding has been provided
- // TODO make the bitrate multipliers configurable per codec
- if (codec) {
- switch (codec) {
- case 'av1':
- encoding.maxBitrate = encoding.maxBitrate * 0.7;
- break;
- }
- }
- return encoding;
-}
-/* @internal */
-function presetsForResolution(isScreenShare, width, height) {
- if (isScreenShare) {
- return presetsScreenShare;
- }
- const aspect = width > height ? width / height : height / width;
- if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {
- return presets169;
- }
- return presets43;
-}
-/* @internal */
-function defaultSimulcastLayers(isScreenShare, original) {
- if (isScreenShare) {
- return computeDefaultScreenShareSimulcastPresets(original);
- }
- const {
- width,
- height
- } = original;
- const aspect = width > height ? width / height : height / width;
- if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {
- return defaultSimulcastPresets169;
- }
- return defaultSimulcastPresets43;
-}
-// presets should be ordered by low, medium, high
-function encodingsFromPresets(width, height, presets) {
- const encodings = [];
- presets.forEach((preset, idx) => {
- if (idx >= videoRids.length) {
- return;
- }
- const size = Math.min(width, height);
- const rid = videoRids[idx];
- encodings.push({
- rid,
- scaleResolutionDownBy: Math.max(1, size / Math.min(preset.width, preset.height)),
- maxBitrate: preset.encoding.maxBitrate,
- /* @ts-ignore */
- maxFramerate: preset.encoding.maxFramerate
- });
- });
- return encodings;
-}
-/** @internal */
-function sortPresets(presets) {
- if (!presets) return;
- return presets.sort((a, b) => {
- const {
- encoding: aEnc
- } = a;
- const {
- encoding: bEnc
- } = b;
- if (aEnc.maxBitrate > bEnc.maxBitrate) {
- return 1;
- }
- if (aEnc.maxBitrate < bEnc.maxBitrate) return -1;
- if (aEnc.maxBitrate === bEnc.maxBitrate && aEnc.maxFramerate && bEnc.maxFramerate) {
- return aEnc.maxFramerate > bEnc.maxFramerate ? 1 : -1;
- }
- return 0;
- });
-}
-
-class RemoteTrackPublication extends TrackPublication {
- constructor(kind, ti, autoSubscribe) {
- super(kind, ti.sid, ti.name);
- this.track = undefined;
- /** @internal */
- this.allowed = true;
- this.disabled = false;
- this.currentVideoQuality = VideoQuality.HIGH;
- this.handleEnded = track => {
- this.setTrack(undefined);
- this.emit(TrackEvent.Ended, track);
- };
- this.handleVisibilityChange = visible => {
- livekitLogger.debug("adaptivestream video visibility ".concat(this.trackSid, ", visible=").concat(visible), {
- trackSid: this.trackSid
- });
- this.disabled = !visible;
- this.emitTrackUpdate();
- };
- this.handleVideoDimensionsChange = dimensions => {
- livekitLogger.debug("adaptivestream video dimensions ".concat(dimensions.width, "x").concat(dimensions.height), {
- trackSid: this.trackSid
- });
- this.videoDimensions = dimensions;
- this.emitTrackUpdate();
- };
- this.subscribed = autoSubscribe;
- this.updateInfo(ti);
- }
- /**
- * Subscribe or unsubscribe to this remote track
- * @param subscribed true to subscribe to a track, false to unsubscribe
- */
- setSubscribed(subscribed) {
- const prevStatus = this.subscriptionStatus;
- const prevPermission = this.permissionStatus;
- this.subscribed = subscribed;
- // reset allowed status when desired subscription state changes
- // server will notify client via signal message if it's not allowed
- if (subscribed) {
- this.allowed = true;
- }
- const sub = {
- trackSids: [this.trackSid],
- subscribe: this.subscribed,
- participantTracks: [{
- // sending an empty participant id since TrackPublication doesn't keep it
- // this is filled in by the participant that receives this message
- participantSid: '',
- trackSids: [this.trackSid]
- }]
- };
- this.emit(TrackEvent.UpdateSubscription, sub);
- this.emitSubscriptionUpdateIfChanged(prevStatus);
- this.emitPermissionUpdateIfChanged(prevPermission);
- }
- get subscriptionStatus() {
- if (this.subscribed === false) {
- return TrackPublication.SubscriptionStatus.Unsubscribed;
- }
- if (!super.isSubscribed) {
- return TrackPublication.SubscriptionStatus.Desired;
- }
- return TrackPublication.SubscriptionStatus.Subscribed;
- }
- get permissionStatus() {
- return this.allowed ? TrackPublication.PermissionStatus.Allowed : TrackPublication.PermissionStatus.NotAllowed;
- }
- /**
- * Returns true if track is subscribed, and ready for playback
- */
- get isSubscribed() {
- if (this.subscribed === false) {
- return false;
- }
- return super.isSubscribed;
- }
- // returns client's desire to subscribe to a track, also true if autoSubscribe is enabled
- get isDesired() {
- return this.subscribed !== false;
- }
- get isEnabled() {
- return !this.disabled;
- }
- /**
- * disable server from sending down data for this track. this is useful when
- * the participant is off screen, you may disable streaming down their video
- * to reduce bandwidth requirements
- * @param enabled
- */
- setEnabled(enabled) {
- if (!this.isManualOperationAllowed() || this.disabled === !enabled) {
- return;
- }
- this.disabled = !enabled;
- this.emitTrackUpdate();
- }
- /**
- * for tracks that support simulcasting, adjust subscribed quality
- *
- * This indicates the highest quality the client can accept. if network
- * bandwidth does not allow, server will automatically reduce quality to
- * optimize for uninterrupted video
- */
- setVideoQuality(quality) {
- if (!this.isManualOperationAllowed() || this.currentVideoQuality === quality) {
- return;
- }
- this.currentVideoQuality = quality;
- this.videoDimensions = undefined;
- this.emitTrackUpdate();
- }
- setVideoDimensions(dimensions) {
- var _a, _b;
- if (!this.isManualOperationAllowed()) {
- return;
- }
- if (((_a = this.videoDimensions) === null || _a === void 0 ? void 0 : _a.width) === dimensions.width && ((_b = this.videoDimensions) === null || _b === void 0 ? void 0 : _b.height) === dimensions.height) {
- return;
- }
- if (this.track instanceof RemoteVideoTrack) {
- this.videoDimensions = dimensions;
- }
- this.currentVideoQuality = undefined;
- this.emitTrackUpdate();
- }
- setVideoFPS(fps) {
- if (!this.isManualOperationAllowed()) {
- return;
- }
- if (!(this.track instanceof RemoteVideoTrack)) {
- return;
- }
- if (this.fps === fps) {
- return;
- }
- this.fps = fps;
- this.emitTrackUpdate();
- }
- get videoQuality() {
- return this.currentVideoQuality;
- }
- /** @internal */
- setTrack(track) {
- const prevStatus = this.subscriptionStatus;
- const prevPermission = this.permissionStatus;
- const prevTrack = this.track;
- if (prevTrack === track) {
- return;
- }
- if (prevTrack) {
- // unregister listener
- prevTrack.off(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);
- prevTrack.off(TrackEvent.VisibilityChanged, this.handleVisibilityChange);
- prevTrack.off(TrackEvent.Ended, this.handleEnded);
- prevTrack.detach();
- this.emit(TrackEvent.Unsubscribed, prevTrack);
- }
- super.setTrack(track);
- if (track) {
- track.sid = this.trackSid;
- track.on(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);
- track.on(TrackEvent.VisibilityChanged, this.handleVisibilityChange);
- track.on(TrackEvent.Ended, this.handleEnded);
- this.emit(TrackEvent.Subscribed, track);
- }
- this.emitPermissionUpdateIfChanged(prevPermission);
- this.emitSubscriptionUpdateIfChanged(prevStatus);
- }
- /** @internal */
- setAllowed(allowed) {
- const prevStatus = this.subscriptionStatus;
- const prevPermission = this.permissionStatus;
- this.allowed = allowed;
- this.emitPermissionUpdateIfChanged(prevPermission);
- this.emitSubscriptionUpdateIfChanged(prevStatus);
- }
- /** @internal */
- updateInfo(info) {
- super.updateInfo(info);
- const prevMetadataMuted = this.metadataMuted;
- this.metadataMuted = info.muted;
- if (this.track) {
- this.track.setMuted(info.muted);
- } else if (prevMetadataMuted !== info.muted) {
- this.emit(info.muted ? TrackEvent.Muted : TrackEvent.Unmuted);
- }
- }
- emitSubscriptionUpdateIfChanged(previousStatus) {
- const currentStatus = this.subscriptionStatus;
- if (previousStatus === currentStatus) {
- return;
- }
- this.emit(TrackEvent.SubscriptionStatusChanged, currentStatus, previousStatus);
- }
- emitPermissionUpdateIfChanged(previousPermissionStatus) {
- const currentPermissionStatus = this.permissionStatus;
- if (currentPermissionStatus !== previousPermissionStatus) {
- this.emit(TrackEvent.SubscriptionPermissionChanged, this.permissionStatus, previousPermissionStatus);
- }
- }
- isManualOperationAllowed() {
- if (this.isAdaptiveStream) {
- livekitLogger.warn('adaptive stream is enabled, cannot change track settings', {
- trackSid: this.trackSid
- });
- return false;
- }
- if (!this.isDesired) {
- livekitLogger.warn('cannot update track settings when not subscribed', {
- trackSid: this.trackSid
- });
- return false;
- }
- return true;
- }
- get isAdaptiveStream() {
- return this.track instanceof RemoteVideoTrack && this.track.isAdaptiveStream;
- }
- /* @internal */
- emitTrackUpdate() {
- const settings = UpdateTrackSettings.fromPartial({
- trackSids: [this.trackSid],
- disabled: this.disabled,
- fps: this.fps
- });
- if (this.videoDimensions) {
- settings.width = this.videoDimensions.width;
- settings.height = this.videoDimensions.height;
- } else if (this.currentVideoQuality !== undefined) {
- settings.quality = this.currentVideoQuality;
- } else {
- // defaults to high quality
- settings.quality = VideoQuality.HIGH;
- }
- this.emit(TrackEvent.UpdateSettings, settings);
- }
-}
-
-class RemoteParticipant extends Participant {
- /** @internal */
- static fromParticipantInfo(signalClient, pi) {
- return new RemoteParticipant(signalClient, pi.sid, pi.identity, pi.name, pi.metadata);
- }
- /** @internal */
- constructor(signalClient, sid, identity, name, metadata) {
- super(sid, identity || '', name, metadata);
- this.signalClient = signalClient;
- this.tracks = new Map();
- this.audioTracks = new Map();
- this.videoTracks = new Map();
- }
- addTrackPublication(publication) {
- super.addTrackPublication(publication);
- // register action events
- publication.on(TrackEvent.UpdateSettings, settings => {
- livekitLogger.debug('send update settings', settings);
- this.signalClient.sendUpdateTrackSettings(settings);
- });
- publication.on(TrackEvent.UpdateSubscription, sub => {
- sub.participantTracks.forEach(pt => {
- pt.participantSid = this.sid;
- });
- this.signalClient.sendUpdateSubscription(sub);
- });
- publication.on(TrackEvent.SubscriptionPermissionChanged, status => {
- this.emit(ParticipantEvent.TrackSubscriptionPermissionChanged, publication, status);
- });
- publication.on(TrackEvent.SubscriptionStatusChanged, status => {
- this.emit(ParticipantEvent.TrackSubscriptionStatusChanged, publication, status);
- });
- publication.on(TrackEvent.Subscribed, track => {
- this.emit(ParticipantEvent.TrackSubscribed, track, publication);
- });
- publication.on(TrackEvent.Unsubscribed, previousTrack => {
- this.emit(ParticipantEvent.TrackUnsubscribed, previousTrack, publication);
- });
- }
- getTrack(source) {
- const track = super.getTrack(source);
- if (track) {
- return track;
- }
- }
- getTrackByName(name) {
- const track = super.getTrackByName(name);
- if (track) {
- return track;
- }
- }
- /**
- * sets the volume on the participant's microphone track
- * if no track exists the volume will be applied when the microphone track is added
- */
- setVolume(volume) {
- this.volume = volume;
- const audioPublication = this.getTrack(Track.Source.Microphone);
- if (audioPublication && audioPublication.track) {
- audioPublication.track.setVolume(volume);
- }
- }
- /**
- * gets the volume on the participant's microphone track
- */
- getVolume() {
- const audioPublication = this.getTrack(Track.Source.Microphone);
- if (audioPublication && audioPublication.track) {
- return audioPublication.track.getVolume();
- }
- return this.volume;
- }
- /** @internal */
- addSubscribedMediaTrack(mediaTrack, sid, mediaStream, receiver, adaptiveStreamSettings, triesLeft) {
- // find the track publication
- // it's possible for the media track to arrive before participant info
- let publication = this.getTrackPublication(sid);
- // it's also possible that the browser didn't honor our original track id
- // FireFox would use its own local uuid instead of server track id
- if (!publication) {
- if (!sid.startsWith('TR')) {
- // find the first track that matches type
- this.tracks.forEach(p => {
- if (!publication && mediaTrack.kind === p.kind.toString()) {
- publication = p;
- }
- });
- }
- }
- // when we couldn't locate the track, it's possible that the metadata hasn't
- // yet arrived. Wait a bit longer for it to arrive, or fire an error
- if (!publication) {
- if (triesLeft === 0) {
- livekitLogger.error('could not find published track', {
- participant: this.sid,
- trackSid: sid
- });
- this.emit(ParticipantEvent.TrackSubscriptionFailed, sid);
- return;
- }
- if (triesLeft === undefined) triesLeft = 20;
- setTimeout(() => {
- this.addSubscribedMediaTrack(mediaTrack, sid, mediaStream, receiver, adaptiveStreamSettings, triesLeft - 1);
- }, 150);
- return;
- }
- if (mediaTrack.readyState === 'ended') {
- livekitLogger.error('unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()', {
- participant: this.sid,
- trackSid: sid
- });
- this.emit(ParticipantEvent.TrackSubscriptionFailed, sid);
- return;
- }
- const isVideo = mediaTrack.kind === 'video';
- let track;
- if (isVideo) {
- track = new RemoteVideoTrack(mediaTrack, sid, receiver, adaptiveStreamSettings);
- } else {
- track = new RemoteAudioTrack(mediaTrack, sid, receiver, this.audioContext, this.audioOutput);
- }
- // set track info
- track.source = publication.source;
- // keep publication's muted status
- track.isMuted = publication.isMuted;
- track.setMediaStream(mediaStream);
- track.start();
- publication.setTrack(track);
- // set participant volume on new microphone tracks
- if (this.volume !== undefined && track instanceof RemoteAudioTrack && track.source === Track.Source.Microphone) {
- track.setVolume(this.volume);
- }
- return publication;
- }
- /** @internal */
- get hasMetadata() {
- return !!this.participantInfo;
- }
- getTrackPublication(sid) {
- return this.tracks.get(sid);
- }
- /** @internal */
- updateInfo(info) {
- super.updateInfo(info);
- // we are getting a list of all available tracks, reconcile in here
- // and send out events for changes
- // reconcile track publications, publish events only if metadata is already there
- // i.e. changes since the local participant has joined
- const validTracks = new Map();
- const newTracks = new Map();
- info.tracks.forEach(ti => {
- var _a;
- let publication = this.getTrackPublication(ti.sid);
- if (!publication) {
- // new publication
- const kind = Track.kindFromProto(ti.type);
- if (!kind) {
- return;
- }
- publication = new RemoteTrackPublication(kind, ti, (_a = this.signalClient.connectOptions) === null || _a === void 0 ? void 0 : _a.autoSubscribe);
- publication.updateInfo(ti);
- newTracks.set(ti.sid, publication);
- const existingTrackOfSource = Array.from(this.tracks.values()).find(publishedTrack => publishedTrack.source === (publication === null || publication === void 0 ? void 0 : publication.source));
- if (existingTrackOfSource && publication.source !== Track.Source.Unknown) {
- livekitLogger.debug("received a second track publication for ".concat(this.identity, " with the same source: ").concat(publication.source), {
- oldTrack: existingTrackOfSource,
- newTrack: publication,
- participant: this,
- participantInfo: info
- });
- }
- this.addTrackPublication(publication);
- } else {
- publication.updateInfo(ti);
- }
- validTracks.set(ti.sid, publication);
- });
- // detect removed tracks
- this.tracks.forEach(publication => {
- if (!validTracks.has(publication.trackSid)) {
- livekitLogger.trace('detected removed track on remote participant, unpublishing', {
- publication,
- participantSid: this.sid
- });
- this.unpublishTrack(publication.trackSid, true);
- }
- });
- // always emit events for new publications, Room will not forward them unless it's ready
- newTracks.forEach(publication => {
- this.emit(ParticipantEvent.TrackPublished, publication);
- });
- }
- /** @internal */
- unpublishTrack(sid, sendUnpublish) {
- const publication = this.tracks.get(sid);
- if (!publication) {
- return;
- }
- this.tracks.delete(sid);
- // remove from the right type map
- switch (publication.kind) {
- case Track.Kind.Audio:
- this.audioTracks.delete(sid);
- break;
- case Track.Kind.Video:
- this.videoTracks.delete(sid);
- break;
- }
- // also send unsubscribe, if track is actively subscribed
- const {
- track
- } = publication;
- if (track) {
- track.stop();
- publication.setTrack(undefined);
- }
- if (sendUnpublish) {
- this.emit(ParticipantEvent.TrackUnpublished, publication);
- }
- }
- /**
- * @internal
- */
- setAudioContext(ctx) {
- this.audioContext = ctx;
- this.audioTracks.forEach(track => track.track instanceof RemoteAudioTrack && track.track.setAudioContext(ctx));
- }
- /**
- * @internal
- */
- async setAudioOutput(output) {
- this.audioOutput = output;
- const promises = [];
- this.audioTracks.forEach(pub => {
- var _a;
- if (pub.track instanceof RemoteAudioTrack) {
- promises.push(pub.track.setSinkId((_a = output.deviceId) !== null && _a !== void 0 ? _a : 'default'));
- }
- });
- await Promise.all(promises);
- }
- /** @internal */
- emit(event) {
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- args[_key - 1] = arguments[_key];
- }
- livekitLogger.trace('participant event', {
- participant: this.sid,
- event,
- args
- });
- return super.emit(event, ...args);
- }
-}
-
-class LocalParticipant extends Participant {
- /** @internal */
- constructor(sid, identity, engine, options) {
- super(sid, identity);
- this.pendingPublishing = new Set();
- this.pendingPublishPromises = new Map();
- this.participantTrackPermissions = [];
- this.allParticipantsAllowedToSubscribe = true;
- this.handleReconnecting = () => {
- if (!this.reconnectFuture) {
- this.reconnectFuture = new Future();
- }
- };
- this.handleReconnected = () => {
- var _a, _b;
- (_b = (_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a);
- this.reconnectFuture = undefined;
- this.updateTrackSubscriptionPermissions();
- };
- this.handleDisconnected = () => {
- var _a, _b;
- (_b = (_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.reject) === null || _b === void 0 ? void 0 : _b.call(_a, 'Got disconnected during publishing attempt');
- this.reconnectFuture = undefined;
- };
- this.updateTrackSubscriptionPermissions = () => {
- livekitLogger.debug('updating track subscription permissions', {
- allParticipantsAllowed: this.allParticipantsAllowedToSubscribe,
- participantTrackPermissions: this.participantTrackPermissions
- });
- this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe, this.participantTrackPermissions.map(p => trackPermissionToProto(p)));
- };
- /** @internal */
- this.onTrackUnmuted = track => {
- this.onTrackMuted(track, track.isUpstreamPaused);
- };
- // when the local track changes in mute status, we'll notify server as such
- /** @internal */
- this.onTrackMuted = (track, muted) => {
- if (muted === undefined) {
- muted = true;
- }
- if (!track.sid) {
- livekitLogger.error('could not update mute status for unpublished track', track);
- return;
- }
- this.engine.updateMuteStatus(track.sid, muted);
- };
- this.onTrackUpstreamPaused = track => {
- livekitLogger.debug('upstream paused');
- this.onTrackMuted(track, true);
- };
- this.onTrackUpstreamResumed = track => {
- livekitLogger.debug('upstream resumed');
- this.onTrackMuted(track, track.isMuted);
- };
- this.handleSubscribedQualityUpdate = async update => {
- var _a, _b;
- if (!((_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.dynacast)) {
- return;
- }
- const pub = this.videoTracks.get(update.trackSid);
- if (!pub) {
- livekitLogger.warn('received subscribed quality update for unknown track', {
- method: 'handleSubscribedQualityUpdate',
- sid: update.trackSid
- });
- return;
- }
- if (update.subscribedCodecs.length > 0) {
- if (!pub.videoTrack) {
- return;
- }
- const newCodecs = await pub.videoTrack.setPublishingCodecs(update.subscribedCodecs);
- var _iteratorAbruptCompletion = false;
- var _didIteratorError = false;
- var _iteratorError;
- try {
- for (var _iterator = _asyncIterator(newCodecs), _step; _iteratorAbruptCompletion = !(_step = await _iterator.next()).done; _iteratorAbruptCompletion = false) {
- const codec = _step.value;
- {
- if (isBackupCodec(codec)) {
- livekitLogger.debug("publish ".concat(codec, " for ").concat(pub.videoTrack.sid));
- await this.publishAdditionalCodecForTrack(pub.videoTrack, codec, pub.options);
- }
- }
- }
- } catch (err) {
- _didIteratorError = true;
- _iteratorError = err;
- } finally {
- try {
- if (_iteratorAbruptCompletion && _iterator.return != null) {
- await _iterator.return();
- }
- } finally {
- if (_didIteratorError) {
- throw _iteratorError;
- }
- }
- }
- } else if (update.subscribedQualities.length > 0) {
- await ((_b = pub.videoTrack) === null || _b === void 0 ? void 0 : _b.setPublishingLayers(update.subscribedQualities));
- }
- };
- this.handleLocalTrackUnpublished = unpublished => {
- const track = this.tracks.get(unpublished.trackSid);
- if (!track) {
- livekitLogger.warn('received unpublished event for unknown track', {
- method: 'handleLocalTrackUnpublished',
- trackSid: unpublished.trackSid
- });
- return;
- }
- this.unpublishTrack(track.track);
- };
- this.handleTrackEnded = async track => {
- if (track.source === Track.Source.ScreenShare || track.source === Track.Source.ScreenShareAudio) {
- livekitLogger.debug('unpublishing local track due to TrackEnded', {
- track: track.sid
- });
- this.unpublishTrack(track);
- } else if (track.isUserProvided) {
- await track.mute();
- } else if (track instanceof LocalAudioTrack || track instanceof LocalVideoTrack) {
- try {
- if (isWeb()) {
- try {
- const currentPermissions = await (navigator === null || navigator === void 0 ? void 0 : navigator.permissions.query({
- // the permission query for camera and microphone currently not supported in Safari and Firefox
- // @ts-ignore
- name: track.source === Track.Source.Camera ? 'camera' : 'microphone'
- }));
- if (currentPermissions && currentPermissions.state === 'denied') {
- livekitLogger.warn("user has revoked access to ".concat(track.source));
- // detect granted change after permissions were denied to try and resume then
- currentPermissions.onchange = () => {
- if (currentPermissions.state !== 'denied') {
- if (!track.isMuted) {
- track.restartTrack();
- }
- currentPermissions.onchange = null;
- }
- };
- throw new Error('GetUserMedia Permission denied');
- }
- } catch (e) {
- // permissions query fails for firefox, we continue and try to restart the track
- }
- }
- if (!track.isMuted) {
- livekitLogger.debug('track ended, attempting to use a different device');
- await track.restartTrack();
- }
- } catch (e) {
- livekitLogger.warn("could not restart track, muting instead");
- await track.mute();
- }
- }
- };
- this.audioTracks = new Map();
- this.videoTracks = new Map();
- this.tracks = new Map();
- this.engine = engine;
- this.roomOptions = options;
- this.setupEngine(engine);
- }
- get lastCameraError() {
- return this.cameraError;
- }
- get lastMicrophoneError() {
- return this.microphoneError;
- }
- getTrack(source) {
- const track = super.getTrack(source);
- if (track) {
- return track;
- }
- }
- getTrackByName(name) {
- const track = super.getTrackByName(name);
- if (track) {
- return track;
- }
- }
- /**
- * @internal
- */
- setupEngine(engine) {
- this.engine = engine;
- this.engine.client.onRemoteMuteChanged = (trackSid, muted) => {
- const pub = this.tracks.get(trackSid);
- if (!pub || !pub.track) {
- return;
- }
- if (muted) {
- pub.mute();
- } else {
- pub.unmute();
- }
- };
- this.engine.client.onSubscribedQualityUpdate = this.handleSubscribedQualityUpdate;
- this.engine.client.onLocalTrackUnpublished = this.handleLocalTrackUnpublished;
- this.engine.on(EngineEvent.Connected, this.handleReconnected).on(EngineEvent.Restarted, this.handleReconnected).on(EngineEvent.Resumed, this.handleReconnected).on(EngineEvent.Restarting, this.handleReconnecting).on(EngineEvent.Resuming, this.handleReconnecting).on(EngineEvent.Disconnected, this.handleDisconnected);
- }
- /**
- * Enable or disable a participant's camera track.
- *
- * If a track has already published, it'll mute or unmute the track.
- * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise
- */
- setCameraEnabled(enabled, options, publishOptions) {
- return this.setTrackEnabled(Track.Source.Camera, enabled, options, publishOptions);
- }
- /**
- * Enable or disable a participant's microphone track.
- *
- * If a track has already published, it'll mute or unmute the track.
- * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise
- */
- setMicrophoneEnabled(enabled, options, publishOptions) {
- return this.setTrackEnabled(Track.Source.Microphone, enabled, options, publishOptions);
- }
- /**
- * Start or stop sharing a participant's screen
- * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise
- */
- setScreenShareEnabled(enabled, options, publishOptions) {
- return this.setTrackEnabled(Track.Source.ScreenShare, enabled, options, publishOptions);
- }
- async setTrackEnabled(source, enabled, options, publishOptions) {
- var _a, _b;
- livekitLogger.debug('setTrackEnabled', {
- source,
- enabled
- });
- let track = this.getTrack(source);
- if (enabled) {
- if (track) {
- await track.unmute();
- } else {
- let localTracks;
- if (this.pendingPublishing.has(source)) {
- livekitLogger.info('skipping duplicate published source', {
- source
- });
- // no-op it's already been requested
- return;
- }
- this.pendingPublishing.add(source);
- try {
- switch (source) {
- case Track.Source.Camera:
- localTracks = await this.createTracks({
- video: (_a = options) !== null && _a !== void 0 ? _a : true
- });
- break;
- case Track.Source.Microphone:
- localTracks = await this.createTracks({
- audio: (_b = options) !== null && _b !== void 0 ? _b : true
- });
- break;
- case Track.Source.ScreenShare:
- localTracks = await this.createScreenTracks(_objectSpread2({}, options));
- break;
- default:
- throw new TrackInvalidError(source);
- }
- const publishPromises = [];
- for (const localTrack of localTracks) {
- livekitLogger.info('publishing track', {
- localTrack
- });
- publishPromises.push(this.publishTrack(localTrack, publishOptions));
- }
- const publishedTracks = await Promise.all(publishPromises);
- // for screen share publications including audio, this will only return the screen share publication, not the screen share audio one
- // revisit if we want to return an array of tracks instead for v2
- [track] = publishedTracks;
- } catch (e) {
- if (e instanceof Error && !(e instanceof TrackInvalidError)) {
- this.emit(ParticipantEvent.MediaDevicesError, e);
- }
- throw e;
- } finally {
- this.pendingPublishing.delete(source);
- }
- }
- } else if (track && track.track) {
- // screenshare cannot be muted, unpublish instead
- if (source === Track.Source.ScreenShare) {
- track = await this.unpublishTrack(track.track);
- const screenAudioTrack = this.getTrack(Track.Source.ScreenShareAudio);
- if (screenAudioTrack && screenAudioTrack.track) {
- this.unpublishTrack(screenAudioTrack.track);
- }
- } else {
- await track.mute();
- }
- }
- return track;
- }
- /**
- * Publish both camera and microphone at the same time. This is useful for
- * displaying a single Permission Dialog box to the end user.
- */
- async enableCameraAndMicrophone() {
- if (this.pendingPublishing.has(Track.Source.Camera) || this.pendingPublishing.has(Track.Source.Microphone)) {
- // no-op it's already been requested
- return;
- }
- this.pendingPublishing.add(Track.Source.Camera);
- this.pendingPublishing.add(Track.Source.Microphone);
- try {
- const tracks = await this.createTracks({
- audio: true,
- video: true
- });
- await Promise.all(tracks.map(track => this.publishTrack(track)));
- } finally {
- this.pendingPublishing.delete(Track.Source.Camera);
- this.pendingPublishing.delete(Track.Source.Microphone);
- }
- }
- /**
- * Create local camera and/or microphone tracks
- * @param options
- * @returns
- */
- async createTracks(options) {
- var _a, _b;
- const opts = mergeDefaultOptions(options, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.audioCaptureDefaults, (_b = this.roomOptions) === null || _b === void 0 ? void 0 : _b.videoCaptureDefaults);
- const constraints = constraintsForOptions(opts);
- let stream;
- try {
- stream = await navigator.mediaDevices.getUserMedia(constraints);
- } catch (err) {
- if (err instanceof Error) {
- if (constraints.audio) {
- this.microphoneError = err;
- }
- if (constraints.video) {
- this.cameraError = err;
- }
- }
- throw err;
- }
- if (constraints.audio) {
- this.microphoneError = undefined;
- }
- if (constraints.video) {
- this.cameraError = undefined;
- }
- return stream.getTracks().map(mediaStreamTrack => {
- const isAudio = mediaStreamTrack.kind === 'audio';
- isAudio ? options.audio : options.video;
- let trackConstraints;
- const conOrBool = isAudio ? constraints.audio : constraints.video;
- if (typeof conOrBool !== 'boolean') {
- trackConstraints = conOrBool;
- }
- const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints);
- if (track.kind === Track.Kind.Video) {
- track.source = Track.Source.Camera;
- } else if (track.kind === Track.Kind.Audio) {
- track.source = Track.Source.Microphone;
- }
- track.mediaStream = stream;
- return track;
- });
- }
- /**
- * Creates a screen capture tracks with getDisplayMedia().
- * A LocalVideoTrack is always created and returned.
- * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.
- */
- async createScreenTracks(options) {
- var _a;
- if (options === undefined) {
- options = {};
- }
- if (options.resolution === undefined) {
- options.resolution = ScreenSharePresets.h1080fps15.resolution;
- }
- let videoConstraints = true;
- if (options.resolution) {
- if (isSafari()) {
- videoConstraints = {
- width: {
- max: options.resolution.width
- },
- height: {
- max: options.resolution.height
- },
- frameRate: options.resolution.frameRate
- };
- } else {
- videoConstraints = {
- width: {
- ideal: options.resolution.width
- },
- height: {
- ideal: options.resolution.height
- },
- frameRate: options.resolution.frameRate
- };
- }
- }
- if (navigator.mediaDevices.getDisplayMedia === undefined) {
- throw new DeviceUnsupportedError('getDisplayMedia not supported');
- }
- const stream = await navigator.mediaDevices.getDisplayMedia({
- audio: (_a = options.audio) !== null && _a !== void 0 ? _a : false,
- video: videoConstraints,
- // @ts-expect-error support for experimental display media features
- controller: options.controller,
- selfBrowserSurface: options.selfBrowserSurface,
- surfaceSwitching: options.surfaceSwitching,
- systemAudio: options.systemAudio
- });
- const tracks = stream.getVideoTracks();
- if (tracks.length === 0) {
- throw new TrackInvalidError('no video track found');
- }
- const screenVideo = new LocalVideoTrack(tracks[0], undefined, false);
- screenVideo.source = Track.Source.ScreenShare;
- const localTracks = [screenVideo];
- if (stream.getAudioTracks().length > 0) {
- const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false);
- screenAudio.source = Track.Source.ScreenShareAudio;
- localTracks.push(screenAudio);
- }
- return localTracks;
- }
- /**
- * Publish a new track to the room
- * @param track
- * @param options
- */
- async publishTrack(track, options) {
- var _a, _b, _c;
- await ((_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.promise);
- if (track instanceof LocalTrack && this.pendingPublishPromises.has(track)) {
- await this.pendingPublishPromises.get(track);
- }
- // convert raw media track into audio or video track
- if (track instanceof MediaStreamTrack) {
- switch (track.kind) {
- case 'audio':
- track = new LocalAudioTrack(track, undefined, true);
- break;
- case 'video':
- track = new LocalVideoTrack(track, undefined, true);
- break;
- default:
- throw new TrackInvalidError("unsupported MediaStreamTrack kind ".concat(track.kind));
- }
- }
- // is it already published? if so skip
- let existingPublication;
- this.tracks.forEach(publication => {
- if (!publication.track) {
- return;
- }
- if (publication.track === track) {
- existingPublication = publication;
- }
- });
- if (existingPublication) {
- livekitLogger.warn('track has already been published, skipping');
- return existingPublication;
- }
- const isStereo = (options === null || options === void 0 ? void 0 : options.forceStereo) || 'channelCount' in track.mediaStreamTrack.getSettings() &&
- // @ts-ignore `channelCount` on getSettings() is currently only available for Safari, but is generally the best way to determine a stereo track https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings/channelCount
- track.mediaStreamTrack.getSettings().channelCount === 2 || track.mediaStreamTrack.getConstraints().channelCount === 2;
- // disable dtx for stereo track if not enabled explicitly
- if (isStereo) {
- if (!options) {
- options = {};
- }
- if (options.dtx === undefined) {
- livekitLogger.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.");
- }
- if (options.red === undefined) {
- livekitLogger.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work.");
- }
- (_b = options.dtx) !== null && _b !== void 0 ? _b : options.dtx = false;
- (_c = options.red) !== null && _c !== void 0 ? _c : options.red = false;
- }
- const opts = _objectSpread2(_objectSpread2({}, this.roomOptions.publishDefaults), options);
- if (opts.source) {
- track.source = opts.source;
- }
- const publishPromise = this.publish(track, opts, options, isStereo);
- this.pendingPublishPromises.set(track, publishPromise);
- try {
- const publication = await publishPromise;
- return publication;
- } catch (e) {
- throw e;
- } finally {
- this.pendingPublishPromises.delete(track);
- }
- }
- async publish(track, opts, options, isStereo) {
- var _a, _b, _c, _d;
- const existingTrackOfSource = Array.from(this.tracks.values()).find(publishedTrack => track instanceof LocalTrack && publishedTrack.source === track.source);
- if (existingTrackOfSource && track.source !== Track.Source.Unknown) {
- try {
- // throw an Error in order to capture the stack trace
- throw Error("publishing a second track with the same source: ".concat(track.source));
- } catch (e) {
- if (e instanceof Error) {
- livekitLogger.warn(e.message, {
- oldTrack: existingTrackOfSource,
- newTrack: track,
- trace: e.stack
- });
- }
- }
- }
- if (opts.stopMicTrackOnMute && track instanceof LocalAudioTrack) {
- track.stopOnMute = true;
- }
- if (track.source === Track.Source.ScreenShare && isFireFox()) {
- // Firefox does not work well with simulcasted screen share
- // we frequently get no data on layer 0 when enabled
- opts.simulcast = false;
- }
- // require full AV1 SVC support prior to using it
- if (opts.videoCodec === 'av1' && !supportsAV1()) {
- opts.videoCodec = undefined;
- }
- // handle track actions
- track.on(TrackEvent.Muted, this.onTrackMuted);
- track.on(TrackEvent.Unmuted, this.onTrackUnmuted);
- track.on(TrackEvent.Ended, this.handleTrackEnded);
- track.on(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);
- track.on(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);
- // create track publication from track
- const req = AddTrackRequest.fromPartial({
- // get local track id for use during publishing
- cid: track.mediaStreamTrack.id,
- name: options === null || options === void 0 ? void 0 : options.name,
- type: Track.kindToProto(track.kind),
- muted: track.isMuted,
- source: Track.sourceToProto(track.source),
- disableDtx: !((_a = opts.dtx) !== null && _a !== void 0 ? _a : true),
- stereo: isStereo,
- disableRed: !((_b = opts.red) !== null && _b !== void 0 ? _b : true)
- });
- // compute encodings and layers for video
- let encodings;
- let simEncodings;
- if (track.kind === Track.Kind.Video) {
- let dims = {
- width: 0,
- height: 0
- };
- try {
- dims = await track.waitForDimensions();
- } catch (e) {
- // log failure
- livekitLogger.error('could not determine track dimensions');
- }
- // width and height should be defined for video
- req.width = dims.width;
- req.height = dims.height;
- // for svc codecs, disable simulcast and use vp8 for backup codec
- if (track instanceof LocalVideoTrack) {
- if ((opts === null || opts === void 0 ? void 0 : opts.videoCodec) === 'av1') {
- // set scalabilityMode to 'L3T3' by default
- opts.scalabilityMode = (_c = opts.scalabilityMode) !== null && _c !== void 0 ? _c : 'L3T3';
- }
- // set up backup
- if (opts.videoCodec && opts.backupCodec && opts.videoCodec !== opts.backupCodec.codec) {
- const simOpts = _objectSpread2({}, opts);
- simOpts.simulcast = true;
- simEncodings = computeTrackBackupEncodings(track, opts.backupCodec.codec, simOpts);
- req.simulcastCodecs = [{
- codec: opts.videoCodec,
- cid: track.mediaStreamTrack.id,
- enableSimulcastLayers: true
- }, {
- codec: opts.backupCodec.codec,
- cid: '',
- enableSimulcastLayers: true
- }];
- }
- }
- encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, dims.width, dims.height, opts);
- req.layers = videoLayersFromEncodings(req.width, req.height, simEncodings !== null && simEncodings !== void 0 ? simEncodings : encodings);
- } else if (track.kind === Track.Kind.Audio && opts.audioBitrate) {
- encodings = [{
- maxBitrate: opts.audioBitrate
- }];
- }
- if (!this.engine || this.engine.isClosed) {
- throw new UnexpectedConnectionState('cannot publish track when not connected');
- }
- const ti = await this.engine.addTrack(req);
- const publication = new LocalTrackPublication(track.kind, ti, track);
- // save options for when it needs to be republished again
- publication.options = opts;
- track.sid = ti.sid;
- if (!this.engine.publisher) {
- throw new UnexpectedConnectionState('publisher is closed');
- }
- livekitLogger.debug("publishing ".concat(track.kind, " with encodings"), {
- encodings,
- trackInfo: ti
- });
- // store RTPSender
- track.sender = await this.engine.createSender(track, opts, encodings);
- if (track.codec === 'av1' && encodings && ((_d = encodings[0]) === null || _d === void 0 ? void 0 : _d.maxBitrate)) {
- this.engine.publisher.setTrackCodecBitrate(req.cid, track.codec, encodings[0].maxBitrate / 1000);
- }
- this.engine.negotiate();
- if (track instanceof LocalVideoTrack) {
- track.startMonitor(this.engine.client);
- } else if (track instanceof LocalAudioTrack) {
- track.startMonitor();
- }
- this.addTrackPublication(publication);
- // send event for publication
- this.emit(ParticipantEvent.LocalTrackPublished, publication);
- return publication;
- }
- get isLocal() {
- return true;
- }
- /** @internal
- * publish additional codec to existing track
- */
- async publishAdditionalCodecForTrack(track, videoCodec, options) {
- var _a;
- // is it not published? if so skip
- let existingPublication;
- this.tracks.forEach(publication => {
- if (!publication.track) {
- return;
- }
- if (publication.track === track) {
- existingPublication = publication;
- }
- });
- if (!existingPublication) {
- throw new TrackInvalidError('track is not published');
- }
- if (!(track instanceof LocalVideoTrack)) {
- throw new TrackInvalidError('track is not a video track');
- }
- const opts = _objectSpread2(_objectSpread2({}, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.publishDefaults), options);
- const encodings = computeTrackBackupEncodings(track, videoCodec, opts);
- if (!encodings) {
- livekitLogger.info("backup codec has been disabled, ignoring request to add additional codec for track");
- return;
- }
- const simulcastTrack = track.addSimulcastTrack(videoCodec, encodings);
- const req = AddTrackRequest.fromPartial({
- cid: simulcastTrack.mediaStreamTrack.id,
- type: Track.kindToProto(track.kind),
- muted: track.isMuted,
- source: Track.sourceToProto(track.source),
- sid: track.sid,
- simulcastCodecs: [{
- codec: opts.videoCodec,
- cid: simulcastTrack.mediaStreamTrack.id,
- enableSimulcastLayers: opts.simulcast
- }]
- });
- req.layers = videoLayersFromEncodings(req.width, req.height, encodings);
- if (!this.engine || this.engine.isClosed) {
- throw new UnexpectedConnectionState('cannot publish track when not connected');
- }
- const ti = await this.engine.addTrack(req);
- await this.engine.createSimulcastSender(track, simulcastTrack, opts, encodings);
- this.engine.negotiate();
- livekitLogger.debug("published ".concat(videoCodec, " for track ").concat(track.sid), {
- encodings,
- trackInfo: ti
- });
- }
- async unpublishTrack(track, stopOnUnpublish) {
- var _a, _b;
- // look through all published tracks to find the right ones
- const publication = this.getPublicationForTrack(track);
- livekitLogger.debug('unpublishing track', {
- track,
- method: 'unpublishTrack'
- });
- if (!publication || !publication.track) {
- livekitLogger.warn('track was not unpublished because no publication was found', {
- track,
- method: 'unpublishTrack'
- });
- return undefined;
- }
- track = publication.track;
- track.off(TrackEvent.Muted, this.onTrackMuted);
- track.off(TrackEvent.Unmuted, this.onTrackUnmuted);
- track.off(TrackEvent.Ended, this.handleTrackEnded);
- track.off(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);
- track.off(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);
- if (stopOnUnpublish === undefined) {
- stopOnUnpublish = (_b = (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.stopLocalTrackOnUnpublish) !== null && _b !== void 0 ? _b : true;
- }
- if (stopOnUnpublish) {
- track.stop();
- }
- let negotiationNeeded = false;
- const trackSender = track.sender;
- track.sender = undefined;
- if (this.engine.publisher && this.engine.publisher.pc.connectionState !== 'closed' && trackSender) {
- try {
- if (this.engine.removeTrack(trackSender)) {
- negotiationNeeded = true;
- }
- if (track instanceof LocalVideoTrack) {
- for (const [, trackInfo] of track.simulcastCodecs) {
- if (trackInfo.sender) {
- if (this.engine.removeTrack(trackInfo.sender)) {
- negotiationNeeded = true;
- }
- trackInfo.sender = undefined;
- }
- }
- track.simulcastCodecs.clear();
- }
- } catch (e) {
- livekitLogger.warn('failed to unpublish track', {
- error: e,
- method: 'unpublishTrack'
- });
- }
- }
- // remove from our maps
- this.tracks.delete(publication.trackSid);
- switch (publication.kind) {
- case Track.Kind.Audio:
- this.audioTracks.delete(publication.trackSid);
- break;
- case Track.Kind.Video:
- this.videoTracks.delete(publication.trackSid);
- break;
- }
- this.emit(ParticipantEvent.LocalTrackUnpublished, publication);
- publication.setTrack(undefined);
- if (negotiationNeeded) {
- await this.engine.negotiate();
- }
- return publication;
- }
- async unpublishTracks(tracks) {
- const results = await Promise.all(tracks.map(track => this.unpublishTrack(track)));
- return results.filter(track => track instanceof LocalTrackPublication);
- }
- async republishAllTracks(options) {
- const localPubs = [];
- this.tracks.forEach(pub => {
- if (pub.track) {
- if (options) {
- pub.options = _objectSpread2(_objectSpread2({}, pub.options), options);
- }
- localPubs.push(pub);
- }
- });
- await Promise.all(localPubs.map(async pub => {
- const track = pub.track;
- await this.unpublishTrack(track, false);
- await this.publishTrack(track, pub.options);
- }));
- }
- async publishData(data, kind) {
- let publishOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
- const destination = Array.isArray(publishOptions) ? publishOptions : publishOptions === null || publishOptions === void 0 ? void 0 : publishOptions.destination;
- const destinationSids = [];
- const topic = !Array.isArray(publishOptions) ? publishOptions.topic : undefined;
- if (destination !== undefined) {
- destination.forEach(val => {
- if (val instanceof RemoteParticipant) {
- destinationSids.push(val.sid);
- } else {
- destinationSids.push(val);
- }
- });
- }
- const packet = {
- kind,
- value: {
- $case: 'user',
- user: {
- participantSid: this.sid,
- payload: data,
- destinationSids: destinationSids,
- topic
- }
- }
- };
- await this.engine.sendDataPacket(packet, kind);
- }
- /**
- * Control who can subscribe to LocalParticipant's published tracks.
- *
- * By default, all participants can subscribe. This allows fine-grained control over
- * who is able to subscribe at a participant and track level.
- *
- * Note: if access is given at a track-level (i.e. both [allParticipantsAllowed] and
- * [ParticipantTrackPermission.allTracksAllowed] are false), any newer published tracks
- * will not grant permissions to any participants and will require a subsequent
- * permissions update to allow subscription.
- *
- * @param allParticipantsAllowed Allows all participants to subscribe all tracks.
- * Takes precedence over [[participantTrackPermissions]] if set to true.
- * By default this is set to true.
- * @param participantTrackPermissions Full list of individual permissions per
- * participant/track. Any omitted participants will not receive any permissions.
- */
- setTrackSubscriptionPermissions(allParticipantsAllowed) {
- let participantTrackPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
- this.participantTrackPermissions = participantTrackPermissions;
- this.allParticipantsAllowedToSubscribe = allParticipantsAllowed;
- if (this.engine.client.isConnected) {
- this.updateTrackSubscriptionPermissions();
- }
- }
- /** @internal */
- updateInfo(info) {
- if (info.sid !== this.sid) {
- // drop updates that specify a wrong sid.
- // the sid for local participant is only explicitly set on join and full reconnect
- return;
- }
- super.updateInfo(info);
- // reconcile track mute status.
- // if server's track mute status doesn't match actual, we'll have to update
- // the server's copy
- info.tracks.forEach(ti => {
- var _a, _b;
- const pub = this.tracks.get(ti.sid);
- if (pub) {
- const mutedOnServer = pub.isMuted || ((_b = (_a = pub.track) === null || _a === void 0 ? void 0 : _a.isUpstreamPaused) !== null && _b !== void 0 ? _b : false);
- if (mutedOnServer !== ti.muted) {
- livekitLogger.debug('updating server mute state after reconcile', {
- sid: ti.sid,
- muted: mutedOnServer
- });
- this.engine.client.sendMuteTrack(ti.sid, mutedOnServer);
- }
- }
- });
- }
- getPublicationForTrack(track) {
- let publication;
- this.tracks.forEach(pub => {
- const localTrack = pub.track;
- if (!localTrack) {
- return;
- }
- // this looks overly complicated due to this object tree
- if (track instanceof MediaStreamTrack) {
- if (localTrack instanceof LocalAudioTrack || localTrack instanceof LocalVideoTrack) {
- if (localTrack.mediaStreamTrack === track) {
- publication = pub;
- }
- }
- } else if (track === localTrack) {
- publication = pub;
- }
- });
- return publication;
- }
- /** @internal */
- publishedTracksInfo() {
- const infos = [];
- this.tracks.forEach(track => {
- if (track.track !== undefined) {
- infos.push({
- cid: track.track.mediaStreamID,
- track: track.trackInfo
- });
- }
- });
- return infos;
- }
- /** @internal */
- dataChannelsInfo() {
- const infos = [];
- const getInfo = (dc, target) => {
- if ((dc === null || dc === void 0 ? void 0 : dc.id) !== undefined && dc.id !== null) {
- infos.push({
- label: dc.label,
- id: dc.id,
- target
- });
- }
- };
- getInfo(this.engine.dataChannelForKind(DataPacket_Kind.LOSSY), SignalTarget.PUBLISHER);
- getInfo(this.engine.dataChannelForKind(DataPacket_Kind.RELIABLE), SignalTarget.PUBLISHER);
- getInfo(this.engine.dataChannelForKind(DataPacket_Kind.LOSSY, true), SignalTarget.SUBSCRIBER);
- getInfo(this.engine.dataChannelForKind(DataPacket_Kind.RELIABLE, true), SignalTarget.SUBSCRIBER);
- return infos;
- }
-}
-
-const passThroughQueueSignals = ['syncState', 'trickle', 'offer', 'answer', 'simulate', 'leave'];
-function canPassThroughQueue(req) {
- const canPass = passThroughQueueSignals.includes(req.$case);
- livekitLogger.trace('request allowed to bypass queue:', {
- canPass,
- req
- });
- return canPass;
-}
-/** @internal */
-class SignalClient {
- constructor() {
- let useJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- /** signal rtt in milliseconds */
- this.rtt = 0;
- this.isConnected = false;
- this.isReconnecting = false;
- this.useJSON = useJSON;
- this.requestQueue = new Queue();
- this.queuedRequests = [];
- this.closingLock = new Mutex();
- }
- async join(url, token, opts, abortSignal) {
- // during a full reconnect, we'd want to start the sequence even if currently
- // connected
- this.isConnected = false;
- this.options = opts;
- const res = await this.connect(url, token, opts, abortSignal);
- return res;
- }
- async reconnect(url, token, sid, reason) {
- if (!this.options) {
- livekitLogger.warn('attempted to reconnect without signal options being set, ignoring');
- return;
- }
- this.isReconnecting = true;
- // clear ping interval and restart it once reconnected
- this.clearPingInterval();
- const res = await this.connect(url, token, _objectSpread2(_objectSpread2({}, this.options), {}, {
- reconnect: true,
- sid,
- reconnectReason: reason
- }));
- return res;
- }
- connect(url, token, opts, abortSignal) {
- this.connectOptions = opts;
- if (url.startsWith('http')) {
- url = url.replace('http', 'ws');
- }
- // strip trailing slash
- url = url.replace(/\/$/, '');
- url += '/rtc';
- const clientInfo = getClientInfo();
- const params = createConnectionParams(token, clientInfo, opts);
- return new Promise(async (resolve, reject) => {
- const abortHandler = async () => {
- await this.close();
- reject(new ConnectionError('room connection has been cancelled'));
- };
- if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
- abortHandler();
- }
- abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener('abort', abortHandler);
- livekitLogger.debug("connecting to ".concat(url + params));
- if (this.ws) {
- await this.close();
- }
- this.ws = new WebSocket(url + params);
- this.ws.binaryType = 'arraybuffer';
- this.ws.onerror = async ev => {
- if (!this.isConnected) {
- try {
- const resp = await fetch("http".concat(url.substring(2), "/validate").concat(params));
- if (!resp.ok) {
- const msg = await resp.text();
- reject(new ConnectionError(msg, 0 /* ConnectionErrorReason.NotAllowed */, resp.status));
- } else {
- reject(new ConnectionError('Internal error', 2 /* ConnectionErrorReason.InternalError */, resp.status));
- }
- } catch (e) {
- reject(new ConnectionError('server was not reachable', 1 /* ConnectionErrorReason.ServerUnreachable */));
- }
-
- return;
- }
- // other errors, handle
- this.handleWSError(ev);
- };
- this.ws.onmessage = async ev => {
- var _a, _b, _c, _d;
- // not considered connected until JoinResponse is received
- let resp;
- if (typeof ev.data === 'string') {
- const json = JSON.parse(ev.data);
- resp = SignalResponse.fromJSON(json);
- } else if (ev.data instanceof ArrayBuffer) {
- resp = SignalResponse.decode(new Uint8Array(ev.data));
- } else {
- livekitLogger.error("could not decode websocket message: ".concat(typeof ev.data));
- return;
- }
- if (!this.isConnected) {
- let shouldProcessMessage = false;
- // handle join message only
- if (((_a = resp.message) === null || _a === void 0 ? void 0 : _a.$case) === 'join') {
- this.isConnected = true;
- abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', abortHandler);
- this.pingTimeoutDuration = resp.message.join.pingTimeout;
- this.pingIntervalDuration = resp.message.join.pingInterval;
- if (this.pingTimeoutDuration && this.pingTimeoutDuration > 0) {
- livekitLogger.debug('ping config', {
- timeout: this.pingTimeoutDuration,
- interval: this.pingIntervalDuration
- });
- this.startPingInterval();
- }
- resolve(resp.message.join);
- } else if (opts.reconnect) {
- // in reconnecting, any message received means signal reconnected
- this.isConnected = true;
- abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', abortHandler);
- this.startPingInterval();
- if (((_b = resp.message) === null || _b === void 0 ? void 0 : _b.$case) === 'reconnect') {
- resolve((_c = resp.message) === null || _c === void 0 ? void 0 : _c.reconnect);
- } else {
- resolve();
- shouldProcessMessage = true;
- }
- } else if (!opts.reconnect) {
- // non-reconnect case, should receive join response first
- reject(new ConnectionError("did not receive join response, got ".concat((_d = resp.message) === null || _d === void 0 ? void 0 : _d.$case, " instead")));
- }
- if (!shouldProcessMessage) {
- return;
- }
- }
- if (this.signalLatency) {
- await sleep(this.signalLatency);
- }
- this.handleSignalResponse(resp);
- };
- this.ws.onclose = ev => {
- if (!this.isConnected) return;
- livekitLogger.debug("websocket connection closed: ".concat(ev.reason));
- this.isConnected = false;
- if (this.onClose) {
- this.onClose(ev.reason);
- }
- this.ws = undefined;
- };
- });
- }
- async close() {
- const unlock = await this.closingLock.lock();
- try {
- this.isConnected = false;
- if (this.ws) {
- this.ws.onclose = null;
- this.ws.onmessage = null;
- this.ws.onopen = null;
- // calling `ws.close()` only starts the closing handshake (CLOSING state), prefer to wait until state is actually CLOSED
- const closePromise = new Promise(resolve => {
- if (this.ws) {
- this.ws.onclose = resolve;
- } else {
- resolve(true);
- }
- });
- this.ws.close();
- // 250ms grace period for ws to close gracefully
- await Promise.race([closePromise, sleep(250)]);
- }
- this.ws = undefined;
- this.clearPingInterval();
- } finally {
- unlock();
- }
- }
- // initial offer after joining
- sendOffer(offer) {
- livekitLogger.debug('sending offer', offer);
- this.sendRequest({
- $case: 'offer',
- offer: toProtoSessionDescription(offer)
- });
- }
- // answer a server-initiated offer
- sendAnswer(answer) {
- livekitLogger.debug('sending answer');
- this.sendRequest({
- $case: 'answer',
- answer: toProtoSessionDescription(answer)
- });
- }
- sendIceCandidate(candidate, target) {
- livekitLogger.trace('sending ice candidate', candidate);
- this.sendRequest({
- $case: 'trickle',
- trickle: {
- candidateInit: JSON.stringify(candidate),
- target
- }
- });
- }
- sendMuteTrack(trackSid, muted) {
- this.sendRequest({
- $case: 'mute',
- mute: {
- sid: trackSid,
- muted
- }
- });
- }
- sendAddTrack(req) {
- this.sendRequest({
- $case: 'addTrack',
- addTrack: AddTrackRequest.fromPartial(req)
- });
- }
- sendUpdateTrackSettings(settings) {
- this.sendRequest({
- $case: 'trackSetting',
- trackSetting: settings
- });
- }
- sendUpdateSubscription(sub) {
- this.sendRequest({
- $case: 'subscription',
- subscription: sub
- });
- }
- sendSyncState(sync) {
- this.sendRequest({
- $case: 'syncState',
- syncState: sync
- });
- }
- sendUpdateVideoLayers(trackSid, layers) {
- this.sendRequest({
- $case: 'updateLayers',
- updateLayers: {
- trackSid,
- layers
- }
- });
- }
- sendUpdateSubscriptionPermissions(allParticipants, trackPermissions) {
- this.sendRequest({
- $case: 'subscriptionPermission',
- subscriptionPermission: {
- allParticipants,
- trackPermissions
- }
- });
- }
- sendSimulateScenario(scenario) {
- this.sendRequest({
- $case: 'simulate',
- simulate: scenario
- });
- }
- sendPing() {
- /** send both of ping and pingReq for compatibility to old and new server */
- this.sendRequest({
- $case: 'ping',
- ping: Date.now()
- });
- this.sendRequest({
- $case: 'pingReq',
- pingReq: {
- timestamp: Date.now(),
- rtt: this.rtt
- }
- });
- }
- async sendLeave() {
- await this.sendRequest({
- $case: 'leave',
- leave: {
- canReconnect: false,
- reason: DisconnectReason.CLIENT_INITIATED
- }
- });
- }
- async sendRequest(message) {
- let fromQueue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
- // capture all requests while reconnecting and put them in a queue
- // unless the request originates from the queue, then don't enqueue again
- const canQueue = !fromQueue && !canPassThroughQueue(message);
- if (canQueue && this.isReconnecting) {
- this.queuedRequests.push(async () => {
- await this.sendRequest(message, true);
- });
- return;
- }
- // make sure previously queued requests are being sent first
- if (!fromQueue) {
- await this.requestQueue.flush();
- }
- if (this.signalLatency) {
- await sleep(this.signalLatency);
- }
- if (!this.ws || this.ws.readyState !== this.ws.OPEN) {
- livekitLogger.error("cannot send signal request before connected, type: ".concat(message === null || message === void 0 ? void 0 : message.$case));
- return;
- }
- const req = {
- message
- };
- try {
- if (this.useJSON) {
- this.ws.send(JSON.stringify(SignalRequest.toJSON(req)));
- } else {
- this.ws.send(SignalRequest.encode(req).finish());
- }
- } catch (e) {
- livekitLogger.error('error sending signal message', {
- error: e
- });
- }
- }
- handleSignalResponse(res) {
- var _a, _b;
- const msg = res.message;
- if (msg == undefined) {
- livekitLogger.debug('received unsupported message');
- return;
- }
- if (msg.$case === 'answer') {
- const sd = fromProtoSessionDescription(msg.answer);
- if (this.onAnswer) {
- this.onAnswer(sd);
- }
- } else if (msg.$case === 'offer') {
- const sd = fromProtoSessionDescription(msg.offer);
- if (this.onOffer) {
- this.onOffer(sd);
- }
- } else if (msg.$case === 'trickle') {
- const candidate = JSON.parse(msg.trickle.candidateInit);
- if (this.onTrickle) {
- this.onTrickle(candidate, msg.trickle.target);
- }
- } else if (msg.$case === 'update') {
- if (this.onParticipantUpdate) {
- this.onParticipantUpdate((_a = msg.update.participants) !== null && _a !== void 0 ? _a : []);
- }
- } else if (msg.$case === 'trackPublished') {
- if (this.onLocalTrackPublished) {
- this.onLocalTrackPublished(msg.trackPublished);
- }
- } else if (msg.$case === 'speakersChanged') {
- if (this.onSpeakersChanged) {
- this.onSpeakersChanged((_b = msg.speakersChanged.speakers) !== null && _b !== void 0 ? _b : []);
- }
- } else if (msg.$case === 'leave') {
- if (this.onLeave) {
- this.onLeave(msg.leave);
- }
- } else if (msg.$case === 'mute') {
- if (this.onRemoteMuteChanged) {
- this.onRemoteMuteChanged(msg.mute.sid, msg.mute.muted);
- }
- } else if (msg.$case === 'roomUpdate') {
- if (this.onRoomUpdate && msg.roomUpdate.room) {
- this.onRoomUpdate(msg.roomUpdate.room);
- }
- } else if (msg.$case === 'connectionQuality') {
- if (this.onConnectionQuality) {
- this.onConnectionQuality(msg.connectionQuality);
- }
- } else if (msg.$case === 'streamStateUpdate') {
- if (this.onStreamStateUpdate) {
- this.onStreamStateUpdate(msg.streamStateUpdate);
- }
- } else if (msg.$case === 'subscribedQualityUpdate') {
- if (this.onSubscribedQualityUpdate) {
- this.onSubscribedQualityUpdate(msg.subscribedQualityUpdate);
- }
- } else if (msg.$case === 'subscriptionPermissionUpdate') {
- if (this.onSubscriptionPermissionUpdate) {
- this.onSubscriptionPermissionUpdate(msg.subscriptionPermissionUpdate);
- }
- } else if (msg.$case === 'refreshToken') {
- if (this.onTokenRefresh) {
- this.onTokenRefresh(msg.refreshToken);
- }
- } else if (msg.$case === 'trackUnpublished') {
- if (this.onLocalTrackUnpublished) {
- this.onLocalTrackUnpublished(msg.trackUnpublished);
- }
- } else if (msg.$case === 'pong') {
- this.resetPingTimeout();
- } else if (msg.$case === 'pongResp') {
- this.rtt = Date.now() - msg.pongResp.lastPingTimestamp;
- this.resetPingTimeout();
- } else {
- livekitLogger.debug('unsupported message', msg);
- }
- }
- setReconnected() {
- while (this.queuedRequests.length > 0) {
- const req = this.queuedRequests.shift();
- if (req) {
- this.requestQueue.run(req);
- }
- }
- this.isReconnecting = false;
- }
- handleWSError(ev) {
- livekitLogger.error('websocket error', ev);
- }
- /**
- * Resets the ping timeout and starts a new timeout.
- * Call this after receiving a pong message
- */
- resetPingTimeout() {
- this.clearPingTimeout();
- if (!this.pingTimeoutDuration) {
- livekitLogger.warn('ping timeout duration not set');
- return;
- }
- this.pingTimeout = CriticalTimers.setTimeout(() => {
- livekitLogger.warn("ping timeout triggered. last pong received at: ".concat(new Date(Date.now() - this.pingTimeoutDuration * 1000).toUTCString()));
- if (this.onClose) {
- this.onClose('ping timeout');
- }
- }, this.pingTimeoutDuration * 1000);
- }
- /**
- * Clears ping timeout (does not start a new timeout)
- */
- clearPingTimeout() {
- if (this.pingTimeout) {
- CriticalTimers.clearTimeout(this.pingTimeout);
- }
- }
- startPingInterval() {
- this.clearPingInterval();
- this.resetPingTimeout();
- if (!this.pingIntervalDuration) {
- livekitLogger.warn('ping interval duration not set');
- return;
- }
- livekitLogger.debug('start ping interval');
- this.pingInterval = CriticalTimers.setInterval(() => {
- this.sendPing();
- }, this.pingIntervalDuration * 1000);
- }
- clearPingInterval() {
- livekitLogger.debug('clearing ping interval');
- this.clearPingTimeout();
- if (this.pingInterval) {
- CriticalTimers.clearInterval(this.pingInterval);
- }
- }
-}
-function fromProtoSessionDescription(sd) {
- const rsd = {
- type: 'offer',
- sdp: sd.sdp
- };
- switch (sd.type) {
- case 'answer':
- case 'offer':
- case 'pranswer':
- case 'rollback':
- rsd.type = sd.type;
- break;
- }
- return rsd;
-}
-function toProtoSessionDescription(rsd) {
- const sd = {
- sdp: rsd.sdp,
- type: rsd.type
- };
- return sd;
-}
-function createConnectionParams(token, info, opts) {
- var _a;
- const params = new URLSearchParams();
- params.set('access_token', token);
- // opts
- if (opts.reconnect) {
- params.set('reconnect', '1');
- if (opts.sid) {
- params.set('sid', opts.sid);
- }
- }
- params.set('auto_subscribe', opts.autoSubscribe ? '1' : '0');
- // ClientInfo
- params.set('sdk', isReactNative() ? 'reactnative' : 'js');
- params.set('version', info.version);
- params.set('protocol', info.protocol.toString());
- if (info.deviceModel) {
- params.set('device_model', info.deviceModel);
- }
- if (info.os) {
- params.set('os', info.os);
- }
- if (info.osVersion) {
- params.set('os_version', info.osVersion);
- }
- if (info.browser) {
- params.set('browser', info.browser);
- }
- if (info.browserVersion) {
- params.set('browser_version', info.browserVersion);
- }
- if (opts.publishOnly !== undefined) {
- params.set('publish', opts.publishOnly);
- }
- if (opts.adaptiveStream) {
- params.set('adaptive_stream', '1');
- }
- if (opts.reconnectReason) {
- params.set('reconnect_reason', opts.reconnectReason.toString());
- }
- // @ts-ignore
- if ((_a = navigator.connection) === null || _a === void 0 ? void 0 : _a.type) {
- // @ts-ignore
- params.set('network', navigator.connection.type);
- }
- return "?".concat(params.toString());
-}
-
-const publishDefaults = {
- audioBitrate: AudioPresets.music.maxBitrate,
- dtx: true,
- red: true,
- forceStereo: false,
- simulcast: true,
- screenShareEncoding: ScreenSharePresets.h1080fps15.encoding,
- stopMicTrackOnMute: false,
- videoCodec: 'vp8',
- backupCodec: {
- codec: 'vp8',
- encoding: VideoPresets.h540.encoding
- }
-};
-const audioDefaults = {
- autoGainControl: true,
- echoCancellation: true,
- noiseSuppression: true
-};
-const videoDefaults = {
- resolution: VideoPresets.h720.resolution
-};
-const roomOptionDefaults = {
- adaptiveStream: false,
- dynacast: false,
- stopLocalTrackOnUnpublish: true,
- reconnectPolicy: new DefaultReconnectPolicy(),
- disconnectOnPageLeave: true,
- expWebAudioMix: false
-};
-const roomConnectOptionDefaults = {
- autoSubscribe: true,
- maxRetries: 1,
- peerConnectionTimeout: 15000
-};
-
-var parser$1 = {};
-
-var grammarExports = {};
-var grammar$2 = {
- get exports(){ return grammarExports; },
- set exports(v){ grammarExports = v; },
-};
-
-var grammar$1 = grammar$2.exports = {
- v: [{
- name: 'version',
- reg: /^(\d*)$/
- }],
- o: [{
- // o=- 20518 0 IN IP4 203.0.113.1
- // NB: sessionId will be a String in most cases because it is huge
- name: 'origin',
- reg: /^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,
- names: ['username', 'sessionId', 'sessionVersion', 'netType', 'ipVer', 'address'],
- format: '%s %s %d %s IP%d %s'
- }],
- // default parsing of these only (though some of these feel outdated)
- s: [{
- name: 'name'
- }],
- i: [{
- name: 'description'
- }],
- u: [{
- name: 'uri'
- }],
- e: [{
- name: 'email'
- }],
- p: [{
- name: 'phone'
- }],
- z: [{
- name: 'timezones'
- }],
- // TODO: this one can actually be parsed properly...
- r: [{
- name: 'repeats'
- }],
- // TODO: this one can also be parsed properly
- // k: [{}], // outdated thing ignored
- t: [{
- // t=0 0
- name: 'timing',
- reg: /^(\d*) (\d*)/,
- names: ['start', 'stop'],
- format: '%d %d'
- }],
- c: [{
- // c=IN IP4 10.47.197.26
- name: 'connection',
- reg: /^IN IP(\d) (\S*)/,
- names: ['version', 'ip'],
- format: 'IN IP%d %s'
- }],
- b: [{
- // b=AS:4000
- push: 'bandwidth',
- reg: /^(TIAS|AS|CT|RR|RS):(\d*)/,
- names: ['type', 'limit'],
- format: '%s:%s'
- }],
- m: [{
- // m=video 51744 RTP/AVP 126 97 98 34 31
- // NB: special - pushes to session
- // TODO: rtp/fmtp should be filtered by the payloads found here?
- reg: /^(\w*) (\d*) ([\w/]*)(?: (.*))?/,
- names: ['type', 'port', 'protocol', 'payloads'],
- format: '%s %d %s %s'
- }],
- a: [{
- // a=rtpmap:110 opus/48000/2
- push: 'rtp',
- reg: /^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,
- names: ['payload', 'codec', 'rate', 'encoding'],
- format: function (o) {
- return o.encoding ? 'rtpmap:%d %s/%s/%s' : o.rate ? 'rtpmap:%d %s/%s' : 'rtpmap:%d %s';
- }
- }, {
- // a=fmtp:108 profile-level-id=24;object=23;bitrate=64000
- // a=fmtp:111 minptime=10; useinbandfec=1
- push: 'fmtp',
- reg: /^fmtp:(\d*) ([\S| ]*)/,
- names: ['payload', 'config'],
- format: 'fmtp:%d %s'
- }, {
- // a=control:streamid=0
- name: 'control',
- reg: /^control:(.*)/,
- format: 'control:%s'
- }, {
- // a=rtcp:65179 IN IP4 193.84.77.194
- name: 'rtcp',
- reg: /^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,
- names: ['port', 'netType', 'ipVer', 'address'],
- format: function (o) {
- return o.address != null ? 'rtcp:%d %s IP%d %s' : 'rtcp:%d';
- }
- }, {
- // a=rtcp-fb:98 trr-int 100
- push: 'rtcpFbTrrInt',
- reg: /^rtcp-fb:(\*|\d*) trr-int (\d*)/,
- names: ['payload', 'value'],
- format: 'rtcp-fb:%s trr-int %d'
- }, {
- // a=rtcp-fb:98 nack rpsi
- push: 'rtcpFb',
- reg: /^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,
- names: ['payload', 'type', 'subtype'],
- format: function (o) {
- return o.subtype != null ? 'rtcp-fb:%s %s %s' : 'rtcp-fb:%s %s';
- }
- }, {
- // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
- // a=extmap:1/recvonly URI-gps-string
- // a=extmap:3 urn:ietf:params:rtp-hdrext:encrypt urn:ietf:params:rtp-hdrext:smpte-tc 25@600/24
- push: 'ext',
- reg: /^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,
- names: ['value', 'direction', 'encrypt-uri', 'uri', 'config'],
- format: function (o) {
- return 'extmap:%d' + (o.direction ? '/%s' : '%v') + (o['encrypt-uri'] ? ' %s' : '%v') + ' %s' + (o.config ? ' %s' : '');
- }
- }, {
- // a=extmap-allow-mixed
- name: 'extmapAllowMixed',
- reg: /^(extmap-allow-mixed)/
- }, {
- // a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR|2^20|1:32
- push: 'crypto',
- reg: /^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,
- names: ['id', 'suite', 'config', 'sessionConfig'],
- format: function (o) {
- return o.sessionConfig != null ? 'crypto:%d %s %s %s' : 'crypto:%d %s %s';
- }
- }, {
- // a=setup:actpass
- name: 'setup',
- reg: /^setup:(\w*)/,
- format: 'setup:%s'
- }, {
- // a=connection:new
- name: 'connectionType',
- reg: /^connection:(new|existing)/,
- format: 'connection:%s'
- }, {
- // a=mid:1
- name: 'mid',
- reg: /^mid:([^\s]*)/,
- format: 'mid:%s'
- }, {
- // a=msid:0c8b064d-d807-43b4-b434-f92a889d8587 98178685-d409-46e0-8e16-7ef0db0db64a
- name: 'msid',
- reg: /^msid:(.*)/,
- format: 'msid:%s'
- }, {
- // a=ptime:20
- name: 'ptime',
- reg: /^ptime:(\d*(?:\.\d*)*)/,
- format: 'ptime:%d'
- }, {
- // a=maxptime:60
- name: 'maxptime',
- reg: /^maxptime:(\d*(?:\.\d*)*)/,
- format: 'maxptime:%d'
- }, {
- // a=sendrecv
- name: 'direction',
- reg: /^(sendrecv|recvonly|sendonly|inactive)/
- }, {
- // a=ice-lite
- name: 'icelite',
- reg: /^(ice-lite)/
- }, {
- // a=ice-ufrag:F7gI
- name: 'iceUfrag',
- reg: /^ice-ufrag:(\S*)/,
- format: 'ice-ufrag:%s'
- }, {
- // a=ice-pwd:x9cml/YzichV2+XlhiMu8g
- name: 'icePwd',
- reg: /^ice-pwd:(\S*)/,
- format: 'ice-pwd:%s'
- }, {
- // a=fingerprint:SHA-1 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33
- name: 'fingerprint',
- reg: /^fingerprint:(\S*) (\S*)/,
- names: ['type', 'hash'],
- format: 'fingerprint:%s %s'
- }, {
- // a=candidate:0 1 UDP 2113667327 203.0.113.1 54400 typ host
- // a=candidate:1162875081 1 udp 2113937151 192.168.34.75 60017 typ host generation 0 network-id 3 network-cost 10
- // a=candidate:3289912957 2 udp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 generation 0 network-id 3 network-cost 10
- // a=candidate:229815620 1 tcp 1518280447 192.168.150.19 60017 typ host tcptype active generation 0 network-id 3 network-cost 10
- // a=candidate:3289912957 2 tcp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 tcptype passive generation 0 network-id 3 network-cost 10
- push: 'candidates',
- reg: /^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,
- names: ['foundation', 'component', 'transport', 'priority', 'ip', 'port', 'type', 'raddr', 'rport', 'tcptype', 'generation', 'network-id', 'network-cost'],
- format: function (o) {
- var str = 'candidate:%s %d %s %d %s %d typ %s';
- str += o.raddr != null ? ' raddr %s rport %d' : '%v%v';
-
- // NB: candidate has three optional chunks, so %void middles one if it's missing
- str += o.tcptype != null ? ' tcptype %s' : '%v';
- if (o.generation != null) {
- str += ' generation %d';
- }
- str += o['network-id'] != null ? ' network-id %d' : '%v';
- str += o['network-cost'] != null ? ' network-cost %d' : '%v';
- return str;
- }
- }, {
- // a=end-of-candidates (keep after the candidates line for readability)
- name: 'endOfCandidates',
- reg: /^(end-of-candidates)/
- }, {
- // a=remote-candidates:1 203.0.113.1 54400 2 203.0.113.1 54401 ...
- name: 'remoteCandidates',
- reg: /^remote-candidates:(.*)/,
- format: 'remote-candidates:%s'
- }, {
- // a=ice-options:google-ice
- name: 'iceOptions',
- reg: /^ice-options:(\S*)/,
- format: 'ice-options:%s'
- }, {
- // a=ssrc:2566107569 cname:t9YU8M1UxTF8Y1A1
- push: 'ssrcs',
- reg: /^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,
- names: ['id', 'attribute', 'value'],
- format: function (o) {
- var str = 'ssrc:%d';
- if (o.attribute != null) {
- str += ' %s';
- if (o.value != null) {
- str += ':%s';
- }
- }
- return str;
- }
- }, {
- // a=ssrc-group:FEC 1 2
- // a=ssrc-group:FEC-FR 3004364195 1080772241
- push: 'ssrcGroups',
- // token-char = %x21 / %x23-27 / %x2A-2B / %x2D-2E / %x30-39 / %x41-5A / %x5E-7E
- reg: /^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,
- names: ['semantics', 'ssrcs'],
- format: 'ssrc-group:%s %s'
- }, {
- // a=msid-semantic: WMS Jvlam5X3SX1OP6pn20zWogvaKJz5Hjf9OnlV
- name: 'msidSemantic',
- reg: /^msid-semantic:\s?(\w*) (\S*)/,
- names: ['semantic', 'token'],
- format: 'msid-semantic: %s %s' // space after ':' is not accidental
- }, {
- // a=group:BUNDLE audio video
- push: 'groups',
- reg: /^group:(\w*) (.*)/,
- names: ['type', 'mids'],
- format: 'group:%s %s'
- }, {
- // a=rtcp-mux
- name: 'rtcpMux',
- reg: /^(rtcp-mux)/
- }, {
- // a=rtcp-rsize
- name: 'rtcpRsize',
- reg: /^(rtcp-rsize)/
- }, {
- // a=sctpmap:5000 webrtc-datachannel 1024
- name: 'sctpmap',
- reg: /^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,
- names: ['sctpmapNumber', 'app', 'maxMessageSize'],
- format: function (o) {
- return o.maxMessageSize != null ? 'sctpmap:%s %s %s' : 'sctpmap:%s %s';
- }
- }, {
- // a=x-google-flag:conference
- name: 'xGoogleFlag',
- reg: /^x-google-flag:([^\s]*)/,
- format: 'x-google-flag:%s'
- }, {
- // a=rid:1 send max-width=1280;max-height=720;max-fps=30;depend=0
- push: 'rids',
- reg: /^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,
- names: ['id', 'direction', 'params'],
- format: function (o) {
- return o.params ? 'rid:%s %s %s' : 'rid:%s %s';
- }
- }, {
- // a=imageattr:97 send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320] recv [x=330,y=250]
- // a=imageattr:* send [x=800,y=640] recv *
- // a=imageattr:100 recv [x=320,y=240]
- push: 'imageattrs',
- reg: new RegExp(
- // a=imageattr:97
- '^imageattr:(\\d+|\\*)' +
- // send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320]
- '[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)' +
- // recv [x=330,y=250]
- '(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?'),
- names: ['pt', 'dir1', 'attrs1', 'dir2', 'attrs2'],
- format: function (o) {
- return 'imageattr:%s %s %s' + (o.dir2 ? ' %s %s' : '');
- }
- }, {
- // a=simulcast:send 1,2,3;~4,~5 recv 6;~7,~8
- // a=simulcast:recv 1;4,5 send 6;7
- name: 'simulcast',
- reg: new RegExp(
- // a=simulcast:
- '^simulcast:' +
- // send 1,2,3;~4,~5
- '(send|recv) ([a-zA-Z0-9\\-_~;,]+)' +
- // space + recv 6;~7,~8
- '(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?' +
- // end
- '$'),
- names: ['dir1', 'list1', 'dir2', 'list2'],
- format: function (o) {
- return 'simulcast:%s %s' + (o.dir2 ? ' %s %s' : '');
- }
- }, {
- // old simulcast draft 03 (implemented by Firefox)
- // https://tools.ietf.org/html/draft-ietf-mmusic-sdp-simulcast-03
- // a=simulcast: recv pt=97;98 send pt=97
- // a=simulcast: send rid=5;6;7 paused=6,7
- name: 'simulcast_03',
- reg: /^simulcast:[\s\t]+([\S+\s\t]+)$/,
- names: ['value'],
- format: 'simulcast: %s'
- }, {
- // a=framerate:25
- // a=framerate:29.97
- name: 'framerate',
- reg: /^framerate:(\d+(?:$|\.\d+))/,
- format: 'framerate:%s'
- }, {
- // RFC4570
- // a=source-filter: incl IN IP4 239.5.2.31 10.1.15.5
- name: 'sourceFilter',
- reg: /^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,
- names: ['filterMode', 'netType', 'addressTypes', 'destAddress', 'srcList'],
- format: 'source-filter: %s %s %s %s %s'
- }, {
- // a=bundle-only
- name: 'bundleOnly',
- reg: /^(bundle-only)/
- }, {
- // a=label:1
- name: 'label',
- reg: /^label:(.+)/,
- format: 'label:%s'
- }, {
- // RFC version 26 for SCTP over DTLS
- // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-5
- name: 'sctpPort',
- reg: /^sctp-port:(\d+)$/,
- format: 'sctp-port:%s'
- }, {
- // RFC version 26 for SCTP over DTLS
- // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-6
- name: 'maxMessageSize',
- reg: /^max-message-size:(\d+)$/,
- format: 'max-message-size:%s'
- }, {
- // RFC7273
- // a=ts-refclk:ptp=IEEE1588-2008:39-A7-94-FF-FE-07-CB-D0:37
- push: 'tsRefClocks',
- reg: /^ts-refclk:([^\s=]*)(?:=(\S*))?/,
- names: ['clksrc', 'clksrcExt'],
- format: function (o) {
- return 'ts-refclk:%s' + (o.clksrcExt != null ? '=%s' : '');
- }
- }, {
- // RFC7273
- // a=mediaclk:direct=963214424
- name: 'mediaClk',
- reg: /^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,
- names: ['id', 'mediaClockName', 'mediaClockValue', 'rateNumerator', 'rateDenominator'],
- format: function (o) {
- var str = 'mediaclk:';
- str += o.id != null ? 'id=%s %s' : '%v%s';
- str += o.mediaClockValue != null ? '=%s' : '';
- str += o.rateNumerator != null ? ' rate=%s' : '';
- str += o.rateDenominator != null ? '/%s' : '';
- return str;
- }
- }, {
- // a=keywds:keywords
- name: 'keywords',
- reg: /^keywds:(.+)$/,
- format: 'keywds:%s'
- }, {
- // a=content:main
- name: 'content',
- reg: /^content:(.+)/,
- format: 'content:%s'
- },
- // BFCP https://tools.ietf.org/html/rfc4583
- {
- // a=floorctrl:c-s
- name: 'bfcpFloorCtrl',
- reg: /^floorctrl:(c-only|s-only|c-s)/,
- format: 'floorctrl:%s'
- }, {
- // a=confid:1
- name: 'bfcpConfId',
- reg: /^confid:(\d+)/,
- format: 'confid:%s'
- }, {
- // a=userid:1
- name: 'bfcpUserId',
- reg: /^userid:(\d+)/,
- format: 'userid:%s'
- }, {
- // a=floorid:1
- name: 'bfcpFloorId',
- reg: /^floorid:(.+) (?:m-stream|mstrm):(.+)/,
- names: ['id', 'mStream'],
- format: 'floorid:%s mstrm:%s'
- }, {
- // any a= that we don't understand is kept verbatim on media.invalid
- push: 'invalid',
- names: ['value']
- }]
-};
-
-// set sensible defaults to avoid polluting the grammar with boring details
-Object.keys(grammar$1).forEach(function (key) {
- var objs = grammar$1[key];
- objs.forEach(function (obj) {
- if (!obj.reg) {
- obj.reg = /(.*)/;
- }
- if (!obj.format) {
- obj.format = '%s';
- }
- });
-});
-
-(function (exports) {
- var toIntIfInt = function (v) {
- return String(Number(v)) === v ? Number(v) : v;
- };
- var attachProperties = function (match, location, names, rawName) {
- if (rawName && !names) {
- location[rawName] = toIntIfInt(match[1]);
- } else {
- for (var i = 0; i < names.length; i += 1) {
- if (match[i + 1] != null) {
- location[names[i]] = toIntIfInt(match[i + 1]);
- }
- }
- }
- };
- var parseReg = function (obj, location, content) {
- var needsBlank = obj.name && obj.names;
- if (obj.push && !location[obj.push]) {
- location[obj.push] = [];
- } else if (needsBlank && !location[obj.name]) {
- location[obj.name] = {};
- }
- var keyLocation = obj.push ? {} :
- // blank object that will be pushed
- needsBlank ? location[obj.name] : location; // otherwise, named location or root
-
- attachProperties(content.match(obj.reg), keyLocation, obj.names, obj.name);
- if (obj.push) {
- location[obj.push].push(keyLocation);
- }
- };
- var grammar = grammarExports;
- var validLine = RegExp.prototype.test.bind(/^([a-z])=(.*)/);
- exports.parse = function (sdp) {
- var session = {},
- media = [],
- location = session; // points at where properties go under (one of the above)
-
- // parse lines we understand
- sdp.split(/(\r\n|\r|\n)/).filter(validLine).forEach(function (l) {
- var type = l[0];
- var content = l.slice(2);
- if (type === 'm') {
- media.push({
- rtp: [],
- fmtp: []
- });
- location = media[media.length - 1]; // point at latest media line
- }
-
- for (var j = 0; j < (grammar[type] || []).length; j += 1) {
- var obj = grammar[type][j];
- if (obj.reg.test(content)) {
- return parseReg(obj, location, content);
- }
- }
- });
- session.media = media; // link it up
- return session;
- };
- var paramReducer = function (acc, expr) {
- var s = expr.split(/=(.+)/, 2);
- if (s.length === 2) {
- acc[s[0]] = toIntIfInt(s[1]);
- } else if (s.length === 1 && expr.length > 1) {
- acc[s[0]] = undefined;
- }
- return acc;
- };
- exports.parseParams = function (str) {
- return str.split(/;\s?/).reduce(paramReducer, {});
- };
-
- // For backward compatibility - alias will be removed in 3.0.0
- exports.parseFmtpConfig = exports.parseParams;
- exports.parsePayloads = function (str) {
- return str.toString().split(' ').map(Number);
- };
- exports.parseRemoteCandidates = function (str) {
- var candidates = [];
- var parts = str.split(' ').map(toIntIfInt);
- for (var i = 0; i < parts.length; i += 3) {
- candidates.push({
- component: parts[i],
- ip: parts[i + 1],
- port: parts[i + 2]
- });
- }
- return candidates;
- };
- exports.parseImageAttributes = function (str) {
- return str.split(' ').map(function (item) {
- return item.substring(1, item.length - 1).split(',').reduce(paramReducer, {});
- });
- };
- exports.parseSimulcastStreamList = function (str) {
- return str.split(';').map(function (stream) {
- return stream.split(',').map(function (format) {
- var scid,
- paused = false;
- if (format[0] !== '~') {
- scid = toIntIfInt(format);
- } else {
- scid = toIntIfInt(format.substring(1, format.length));
- paused = true;
- }
- return {
- scid: scid,
- paused: paused
- };
- });
- });
- };
-})(parser$1);
-
-var grammar = grammarExports;
-
-// customized util.format - discards excess arguments and can void middle ones
-var formatRegExp = /%[sdv%]/g;
-var format = function (formatStr) {
- var i = 1;
- var args = arguments;
- var len = args.length;
- return formatStr.replace(formatRegExp, function (x) {
- if (i >= len) {
- return x; // missing argument
- }
-
- var arg = args[i];
- i += 1;
- switch (x) {
- case '%%':
- return '%';
- case '%s':
- return String(arg);
- case '%d':
- return Number(arg);
- case '%v':
- return '';
- }
- });
- // NB: we discard excess arguments - they are typically undefined from makeLine
-};
-
-var makeLine = function (type, obj, location) {
- var str = obj.format instanceof Function ? obj.format(obj.push ? location : location[obj.name]) : obj.format;
- var args = [type + '=' + str];
- if (obj.names) {
- for (var i = 0; i < obj.names.length; i += 1) {
- var n = obj.names[i];
- if (obj.name) {
- args.push(location[obj.name][n]);
- } else {
- // for mLine and push attributes
- args.push(location[obj.names[i]]);
- }
- }
- } else {
- args.push(location[obj.name]);
- }
- return format.apply(null, args);
-};
-
-// RFC specified order
-// TODO: extend this with all the rest
-var defaultOuterOrder = ['v', 'o', 's', 'i', 'u', 'e', 'p', 'c', 'b', 't', 'r', 'z', 'a'];
-var defaultInnerOrder = ['i', 'c', 'b', 'a'];
-var writer$1 = function (session, opts) {
- opts = opts || {};
- // ensure certain properties exist
- if (session.version == null) {
- session.version = 0; // 'v=0' must be there (only defined version atm)
- }
-
- if (session.name == null) {
- session.name = ' '; // 's= ' must be there if no meaningful name set
- }
-
- session.media.forEach(function (mLine) {
- if (mLine.payloads == null) {
- mLine.payloads = '';
- }
- });
- var outerOrder = opts.outerOrder || defaultOuterOrder;
- var innerOrder = opts.innerOrder || defaultInnerOrder;
- var sdp = [];
-
- // loop through outerOrder for matching properties on session
- outerOrder.forEach(function (type) {
- grammar[type].forEach(function (obj) {
- if (obj.name in session && session[obj.name] != null) {
- sdp.push(makeLine(type, obj, session));
- } else if (obj.push in session && session[obj.push] != null) {
- session[obj.push].forEach(function (el) {
- sdp.push(makeLine(type, obj, el));
- });
- }
- });
- });
-
- // then for each media line, follow the innerOrder
- session.media.forEach(function (mLine) {
- sdp.push(makeLine('m', grammar.m[0], mLine));
- innerOrder.forEach(function (type) {
- grammar[type].forEach(function (obj) {
- if (obj.name in mLine && mLine[obj.name] != null) {
- sdp.push(makeLine(type, obj, mLine));
- } else if (obj.push in mLine && mLine[obj.push] != null) {
- mLine[obj.push].forEach(function (el) {
- sdp.push(makeLine(type, obj, el));
- });
- }
- });
- });
- });
- return sdp.join('\r\n') + '\r\n';
-};
-
-var parser = parser$1;
-var writer = writer$1;
-var write = writer;
-var parse = parser.parse;
-parser.parseParams;
-parser.parseFmtpConfig; // Alias of parseParams().
-parser.parsePayloads;
-parser.parseRemoteCandidates;
-parser.parseImageAttributes;
-parser.parseSimulcastStreamList;
-
-const PCEvents = {
- NegotiationStarted: 'negotiationStarted',
- NegotiationComplete: 'negotiationComplete'
-};
-/** @internal */
-class PCTransport extends eventsExports {
- constructor(config) {
- super();
- this.pendingCandidates = [];
- this.restartingIce = false;
- this.renegotiate = false;
- this.trackBitrates = [];
- this.remoteStereoMids = [];
- this.remoteNackMids = [];
- // debounced negotiate interface
- this.negotiate = r(onError => {
- this.emit(PCEvents.NegotiationStarted);
- try {
- this.createAndSendOffer();
- } catch (e) {
- if (onError) {
- onError(e);
- } else {
- throw e;
- }
- }
- }, 100);
- this.pc = new RTCPeerConnection(config);
- }
- get isICEConnected() {
- return this.pc.iceConnectionState === 'connected' || this.pc.iceConnectionState === 'completed';
- }
- async addIceCandidate(candidate) {
- if (this.pc.remoteDescription && !this.restartingIce) {
- return this.pc.addIceCandidate(candidate);
- }
- this.pendingCandidates.push(candidate);
- }
- async setRemoteDescription(sd) {
- if (sd.type === 'offer') {
- let {
- stereoMids,
- nackMids
- } = extractStereoAndNackAudioFromOffer(sd);
- this.remoteStereoMids = stereoMids;
- this.remoteNackMids = nackMids;
- }
- await this.pc.setRemoteDescription(sd);
- this.pendingCandidates.forEach(candidate => {
- this.pc.addIceCandidate(candidate);
- });
- this.pendingCandidates = [];
- this.restartingIce = false;
- if (this.renegotiate) {
- this.renegotiate = false;
- this.createAndSendOffer();
- } else if (sd.type === 'answer') {
- this.emit(PCEvents.NegotiationComplete);
- }
- }
- async createAndSendOffer(options) {
- var _a;
- if (this.onOffer === undefined) {
- return;
- }
- if (options === null || options === void 0 ? void 0 : options.iceRestart) {
- livekitLogger.debug('restarting ICE');
- this.restartingIce = true;
- }
- if (this.pc.signalingState === 'have-local-offer') {
- // we're waiting for the peer to accept our offer, so we'll just wait
- // the only exception to this is when ICE restart is needed
- const currentSD = this.pc.remoteDescription;
- if ((options === null || options === void 0 ? void 0 : options.iceRestart) && currentSD) {
- // TODO: handle when ICE restart is needed but we don't have a remote description
- // the best thing to do is to recreate the peerconnection
- await this.pc.setRemoteDescription(currentSD);
- } else {
- this.renegotiate = true;
- return;
- }
- } else if (this.pc.signalingState === 'closed') {
- livekitLogger.warn('could not createOffer with closed peer connection');
- return;
- }
- // actually negotiate
- livekitLogger.debug('starting to negotiate');
- const offer = await this.pc.createOffer(options);
- const sdpParsed = parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');
- sdpParsed.media.forEach(media => {
- if (media.type === 'audio') {
- ensureAudioNackAndStereo(media, [], []);
- } else if (media.type === 'video') {
- // mung sdp for codec bitrate setting that can't apply by sendEncoding
- this.trackBitrates.some(trackbr => {
- if (!media.msid || !media.msid.includes(trackbr.sid)) {
- return false;
- }
- let codecPayload = 0;
- media.rtp.some(rtp => {
- if (rtp.codec.toUpperCase() === trackbr.codec.toUpperCase()) {
- codecPayload = rtp.payload;
- return true;
- }
- return false;
- });
- // add x-google-max-bitrate to fmtp line if not exist
- if (codecPayload > 0) {
- if (!media.fmtp.some(fmtp => {
- if (fmtp.payload === codecPayload) {
- if (!fmtp.config.includes('x-google-max-bitrate')) {
- fmtp.config += ";x-google-max-bitrate=".concat(trackbr.maxbr);
- }
- return true;
- }
- return false;
- })) {
- media.fmtp.push({
- payload: codecPayload,
- config: "x-google-max-bitrate=".concat(trackbr.maxbr)
- });
- }
- }
- return true;
- });
- }
- });
- this.trackBitrates = [];
- await this.setMungedLocalDescription(offer, write(sdpParsed));
- this.onOffer(offer);
- }
- async createAndSetAnswer() {
- var _a;
- const answer = await this.pc.createAnswer();
- const sdpParsed = parse((_a = answer.sdp) !== null && _a !== void 0 ? _a : '');
- sdpParsed.media.forEach(media => {
- if (media.type === 'audio') {
- ensureAudioNackAndStereo(media, this.remoteStereoMids, this.remoteNackMids);
- }
- });
- await this.setMungedLocalDescription(answer, write(sdpParsed));
- return answer;
- }
- setTrackCodecBitrate(sid, codec, maxbr) {
- this.trackBitrates.push({
- sid,
- codec,
- maxbr
- });
- }
- close() {
- this.pc.onconnectionstatechange = null;
- this.pc.oniceconnectionstatechange = null;
- this.pc.close();
- }
- async setMungedLocalDescription(sd, munged) {
- const originalSdp = sd.sdp;
- sd.sdp = munged;
- try {
- livekitLogger.debug('setting munged local description');
- await this.pc.setLocalDescription(sd);
- return;
- } catch (e) {
- livekitLogger.warn("not able to set ".concat(sd.type, ", falling back to unmodified sdp"), {
- error: e
- });
- sd.sdp = originalSdp;
- }
- try {
- await this.pc.setLocalDescription(sd);
- } catch (e) {
- // this error cannot always be caught.
- // If the local description has a setCodecPreferences error, this error will be uncaught
- let msg = 'unknown error';
- if (e instanceof Error) {
- msg = e.message;
- } else if (typeof e === 'string') {
- msg = e;
- }
- throw new NegotiationError(msg);
- }
- }
-}
-function ensureAudioNackAndStereo(media, stereoMids, nackMids) {
- // found opus codec to add nack fb
- let opusPayload = 0;
- media.rtp.some(rtp => {
- if (rtp.codec === 'opus') {
- opusPayload = rtp.payload;
- return true;
- }
- return false;
- });
- // add nack rtcpfb if not exist
- if (opusPayload > 0) {
- if (!media.rtcpFb) {
- media.rtcpFb = [];
- }
- if (nackMids.includes(media.mid) && !media.rtcpFb.some(fb => fb.payload === opusPayload && fb.type === 'nack')) {
- media.rtcpFb.push({
- payload: opusPayload,
- type: 'nack'
- });
- }
- if (stereoMids.includes(media.mid)) {
- media.fmtp.some(fmtp => {
- if (fmtp.payload === opusPayload) {
- if (!fmtp.config.includes('stereo=1')) {
- fmtp.config += ';stereo=1';
- }
- return true;
- }
- return false;
- });
- }
- }
-}
-function extractStereoAndNackAudioFromOffer(offer) {
- var _a;
- const stereoMids = [];
- const nackMids = [];
- const sdpParsed = parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');
- let opusPayload = 0;
- sdpParsed.media.forEach(media => {
- var _a;
- if (media.type === 'audio') {
- media.rtp.some(rtp => {
- if (rtp.codec === 'opus') {
- opusPayload = rtp.payload;
- return true;
- }
- return false;
- });
- if ((_a = media.rtcpFb) === null || _a === void 0 ? void 0 : _a.some(fb => fb.payload === opusPayload && fb.type === 'nack')) {
- nackMids.push(media.mid);
- }
- media.fmtp.some(fmtp => {
- if (fmtp.payload === opusPayload) {
- if (fmtp.config.includes('sprop-stereo=1')) {
- stereoMids.push(media.mid);
- }
- return true;
- }
- return false;
- });
- }
- });
- return {
- stereoMids,
- nackMids
- };
-}
-
-const lossyDataChannel = '_lossy';
-const reliableDataChannel = '_reliable';
-const minReconnectWait = 2 * 1000;
-const leaveReconnect = 'leave-reconnect';
-var PCState;
-(function (PCState) {
- PCState[PCState["New"] = 0] = "New";
- PCState[PCState["Connected"] = 1] = "Connected";
- PCState[PCState["Disconnected"] = 2] = "Disconnected";
- PCState[PCState["Reconnecting"] = 3] = "Reconnecting";
- PCState[PCState["Closed"] = 4] = "Closed";
-})(PCState || (PCState = {}));
-/** @internal */
-class RTCEngine extends eventsExports.EventEmitter {
- get isClosed() {
- return this._isClosed;
- }
- constructor(options) {
- super();
- this.options = options;
- this.rtcConfig = {};
- this.peerConnectionTimeout = roomConnectOptionDefaults.peerConnectionTimeout;
- this.subscriberPrimary = false;
- this.pcState = PCState.New;
- this._isClosed = true;
- this.pendingTrackResolvers = {};
- // true if publisher connection has already been established.
- // this is helpful to know if we need to restart ICE on the publisher connection
- this.hasPublished = false;
- this.reconnectAttempts = 0;
- this.reconnectStart = 0;
- this.fullReconnectOnNext = false;
- this.attemptingReconnect = false;
- /** keeps track of how often an initial join connection has been tried */
- this.joinAttempts = 0;
- /** specifies how often an initial join connection is allowed to retry */
- this.maxJoinAttempts = 1;
- this.shouldFailNext = false;
- this.handleDataChannel = async _ref => {
- let {
- channel
- } = _ref;
- if (!channel) {
- return;
- }
- if (channel.label === reliableDataChannel) {
- this.reliableDCSub = channel;
- } else if (channel.label === lossyDataChannel) {
- this.lossyDCSub = channel;
- } else {
- return;
- }
- livekitLogger.debug("on data channel ".concat(channel.id, ", ").concat(channel.label));
- channel.onmessage = this.handleDataMessage;
- };
- this.handleDataMessage = async message => {
- var _a, _b;
- // make sure to respect incoming data message order by processing message events one after the other
- const unlock = await this.dataProcessLock.lock();
- try {
- // decode
- let buffer;
- if (message.data instanceof ArrayBuffer) {
- buffer = message.data;
- } else if (message.data instanceof Blob) {
- buffer = await message.data.arrayBuffer();
- } else {
- livekitLogger.error('unsupported data type', message.data);
- return;
- }
- const dp = DataPacket.decode(new Uint8Array(buffer));
- if (((_a = dp.value) === null || _a === void 0 ? void 0 : _a.$case) === 'speaker') {
- // dispatch speaker updates
- this.emit(EngineEvent.ActiveSpeakersUpdate, dp.value.speaker.speakers);
- } else if (((_b = dp.value) === null || _b === void 0 ? void 0 : _b.$case) === 'user') {
- this.emit(EngineEvent.DataPacketReceived, dp.value.user, dp.kind);
- }
- } finally {
- unlock();
- }
- };
- this.handleDataError = event => {
- const channel = event.currentTarget;
- const channelKind = channel.maxRetransmits === 0 ? 'lossy' : 'reliable';
- if (event instanceof ErrorEvent) {
- const {
- error
- } = event.error;
- livekitLogger.error("DataChannel error on ".concat(channelKind, ": ").concat(event.message), error);
- } else {
- livekitLogger.error("Unknown DataChannel Error on ".concat(channelKind), event);
- }
- };
- // websocket reconnect behavior. if websocket is interrupted, and the PeerConnection
- // continues to work, we can reconnect to websocket to continue the session
- // after a number of retries, we'll close and give up permanently
- this.handleDisconnect = (connection, disconnectReason) => {
- if (this._isClosed) {
- return;
- }
- livekitLogger.warn("".concat(connection, " disconnected"));
- if (this.reconnectAttempts === 0) {
- // only reset start time on the first try
- this.reconnectStart = Date.now();
- }
- const disconnect = duration => {
- livekitLogger.warn("could not recover connection after ".concat(this.reconnectAttempts, " attempts, ").concat(duration, "ms. giving up"));
- this.emit(EngineEvent.Disconnected);
- this.close();
- };
- const duration = Date.now() - this.reconnectStart;
- let delay = this.getNextRetryDelay({
- elapsedMs: duration,
- retryCount: this.reconnectAttempts
- });
- if (delay === null) {
- disconnect(duration);
- return;
- }
- if (connection === leaveReconnect) {
- delay = 0;
- }
- livekitLogger.debug("reconnecting in ".concat(delay, "ms"));
- this.clearReconnectTimeout();
- this.reconnectTimeout = CriticalTimers.setTimeout(() => this.attemptReconnect(disconnectReason), delay);
- };
- this.handleBrowserOnLine = () => {
- // in case the engine is currently reconnecting, attempt a reconnect immediately after the browser state has changed to 'onLine'
- if (this.client.isReconnecting) {
- this.clearReconnectTimeout();
- this.attemptReconnect(ReconnectReason.RR_SIGNAL_DISCONNECTED);
- }
- };
- this.client = new SignalClient();
- this.client.signalLatency = this.options.expSignalLatency;
- this.reconnectPolicy = this.options.reconnectPolicy;
- this.registerOnLineListener();
- this.closingLock = new Mutex();
- this.dataProcessLock = new Mutex();
- }
- async join(url, token, opts, abortSignal) {
- this.url = url;
- this.token = token;
- this.signalOpts = opts;
- try {
- this.joinAttempts += 1;
- const joinResponse = await this.client.join(url, token, opts, abortSignal);
- this._isClosed = false;
- this.subscriberPrimary = joinResponse.subscriberPrimary;
- if (!this.publisher) {
- this.configure(joinResponse);
- }
- // create offer
- if (!this.subscriberPrimary) {
- this.negotiate();
- }
- this.clientConfiguration = joinResponse.clientConfiguration;
- return joinResponse;
- } catch (e) {
- if (e instanceof ConnectionError) {
- if (e.reason === 1 /* ConnectionErrorReason.ServerUnreachable */) {
- livekitLogger.warn("Couldn't connect to server, attempt ".concat(this.joinAttempts, " of ").concat(this.maxJoinAttempts));
- if (this.joinAttempts < this.maxJoinAttempts) {
- return this.join(url, token, opts, abortSignal);
- }
- }
- }
- throw e;
- }
- }
- async close() {
- const unlock = await this.closingLock.lock();
- if (this.isClosed) {
- unlock();
- return;
- }
- try {
- this._isClosed = true;
- this.emit(EngineEvent.Closing);
- this.removeAllListeners();
- this.deregisterOnLineListener();
- this.clearPendingReconnect();
- if (this.publisher && this.publisher.pc.signalingState !== 'closed') {
- this.publisher.pc.getSenders().forEach(sender => {
- var _a, _b;
- try {
- // TODO: react-native-webrtc doesn't have removeTrack yet.
- if ((_a = this.publisher) === null || _a === void 0 ? void 0 : _a.pc.removeTrack) {
- (_b = this.publisher) === null || _b === void 0 ? void 0 : _b.pc.removeTrack(sender);
- }
- } catch (e) {
- livekitLogger.warn('could not removeTrack', {
- error: e
- });
- }
- });
- this.publisher.close();
- this.publisher = undefined;
- }
- if (this.subscriber) {
- this.subscriber.close();
- this.subscriber = undefined;
- }
- await this.client.close();
- } finally {
- unlock();
- }
- }
- addTrack(req) {
- if (this.pendingTrackResolvers[req.cid]) {
- throw new TrackInvalidError('a track with the same ID has already been published');
- }
- return new Promise((resolve, reject) => {
- const publicationTimeout = setTimeout(() => {
- delete this.pendingTrackResolvers[req.cid];
- reject(new ConnectionError('publication of local track timed out, no response from server'));
- }, 10000);
- this.pendingTrackResolvers[req.cid] = {
- resolve: info => {
- clearTimeout(publicationTimeout);
- resolve(info);
- },
- reject: () => {
- clearTimeout(publicationTimeout);
- reject(new Error('Cancelled publication by calling unpublish'));
- }
- };
- this.client.sendAddTrack(req);
- });
- }
- /**
- * Removes sender from PeerConnection, returning true if it was removed successfully
- * and a negotiation is necessary
- * @param sender
- * @returns
- */
- removeTrack(sender) {
- var _a;
- if (sender.track && this.pendingTrackResolvers[sender.track.id]) {
- const {
- reject
- } = this.pendingTrackResolvers[sender.track.id];
- if (reject) {
- reject();
- }
- delete this.pendingTrackResolvers[sender.track.id];
- }
- try {
- (_a = this.publisher) === null || _a === void 0 ? void 0 : _a.pc.removeTrack(sender);
- return true;
- } catch (e) {
- livekitLogger.warn('failed to remove track', {
- error: e,
- method: 'removeTrack'
- });
- }
- return false;
- }
- updateMuteStatus(trackSid, muted) {
- this.client.sendMuteTrack(trackSid, muted);
- }
- get dataSubscriberReadyState() {
- var _a;
- return (_a = this.reliableDCSub) === null || _a === void 0 ? void 0 : _a.readyState;
- }
- async getConnectedServerAddress() {
- if (this.primaryPC === undefined) {
- return undefined;
- }
- return getConnectedAddress(this.primaryPC);
- }
- configure(joinResponse) {
- var _a;
- // already configured
- if (this.publisher || this.subscriber) {
- return;
- }
- this.participantSid = (_a = joinResponse.participant) === null || _a === void 0 ? void 0 : _a.sid;
- const rtcConfig = this.makeRTCConfiguration(joinResponse);
- this.publisher = new PCTransport(rtcConfig);
- this.subscriber = new PCTransport(rtcConfig);
- this.emit(EngineEvent.TransportsCreated, this.publisher, this.subscriber);
- this.publisher.pc.onicecandidate = ev => {
- if (!ev.candidate) return;
- livekitLogger.trace('adding ICE candidate for peer', ev.candidate);
- this.client.sendIceCandidate(ev.candidate, SignalTarget.PUBLISHER);
- };
- this.subscriber.pc.onicecandidate = ev => {
- if (!ev.candidate) return;
- this.client.sendIceCandidate(ev.candidate, SignalTarget.SUBSCRIBER);
- };
- this.publisher.onOffer = offer => {
- this.client.sendOffer(offer);
- };
- let primaryPC = this.publisher.pc;
- let secondaryPC = this.subscriber.pc;
- let subscriberPrimary = joinResponse.subscriberPrimary;
- if (subscriberPrimary) {
- primaryPC = this.subscriber.pc;
- secondaryPC = this.publisher.pc;
- // in subscriber primary mode, server side opens sub data channels.
- this.subscriber.pc.ondatachannel = this.handleDataChannel;
- }
- this.primaryPC = primaryPC;
- primaryPC.onconnectionstatechange = async () => {
- livekitLogger.debug("primary PC state changed ".concat(primaryPC.connectionState));
- if (primaryPC.connectionState === 'connected') {
- const shouldEmit = this.pcState === PCState.New;
- this.pcState = PCState.Connected;
- if (shouldEmit) {
- this.emit(EngineEvent.Connected, joinResponse);
- }
- } else if (primaryPC.connectionState === 'failed') {
- // on Safari, PeerConnection will switch to 'disconnected' during renegotiation
- if (this.pcState === PCState.Connected) {
- this.pcState = PCState.Disconnected;
- this.handleDisconnect('primary peerconnection', subscriberPrimary ? ReconnectReason.RR_SUBSCRIBER_FAILED : ReconnectReason.RR_PUBLISHER_FAILED);
- }
- }
- };
- secondaryPC.onconnectionstatechange = async () => {
- livekitLogger.debug("secondary PC state changed ".concat(secondaryPC.connectionState));
- // also reconnect if secondary peerconnection fails
- if (secondaryPC.connectionState === 'failed') {
- this.handleDisconnect('secondary peerconnection', subscriberPrimary ? ReconnectReason.RR_PUBLISHER_FAILED : ReconnectReason.RR_SUBSCRIBER_FAILED);
- }
- };
- this.subscriber.pc.ontrack = ev => {
- this.emit(EngineEvent.MediaTrackAdded, ev.track, ev.streams[0], ev.receiver);
- };
- this.createDataChannels();
- // configure signaling client
- this.client.onAnswer = async sd => {
- if (!this.publisher) {
- return;
- }
- livekitLogger.debug('received server answer', {
- RTCSdpType: sd.type,
- signalingState: this.publisher.pc.signalingState
- });
- await this.publisher.setRemoteDescription(sd);
- };
- // add candidate on trickle
- this.client.onTrickle = (candidate, target) => {
- if (!this.publisher || !this.subscriber) {
- return;
- }
- livekitLogger.trace('got ICE candidate from peer', {
- candidate,
- target
- });
- if (target === SignalTarget.PUBLISHER) {
- this.publisher.addIceCandidate(candidate);
- } else {
- this.subscriber.addIceCandidate(candidate);
- }
- };
- // when server creates an offer for the client
- this.client.onOffer = async sd => {
- if (!this.subscriber) {
- return;
- }
- livekitLogger.debug('received server offer', {
- RTCSdpType: sd.type,
- signalingState: this.subscriber.pc.signalingState
- });
- await this.subscriber.setRemoteDescription(sd);
- // answer the offer
- const answer = await this.subscriber.createAndSetAnswer();
- this.client.sendAnswer(answer);
- };
- this.client.onLocalTrackPublished = res => {
- livekitLogger.debug('received trackPublishedResponse', res);
- const {
- resolve
- } = this.pendingTrackResolvers[res.cid];
- if (!resolve) {
- livekitLogger.error("missing track resolver for ".concat(res.cid));
- return;
- }
- delete this.pendingTrackResolvers[res.cid];
- resolve(res.track);
- };
- this.client.onTokenRefresh = token => {
- this.token = token;
- };
- this.client.onClose = () => {
- this.handleDisconnect('signal', ReconnectReason.RR_SIGNAL_DISCONNECTED);
- };
- this.client.onLeave = leave => {
- if (leave === null || leave === void 0 ? void 0 : leave.canReconnect) {
- this.fullReconnectOnNext = true;
- this.primaryPC = undefined;
- // reconnect immediately instead of waiting for next attempt
- this.handleDisconnect(leaveReconnect);
- } else {
- this.emit(EngineEvent.Disconnected, leave === null || leave === void 0 ? void 0 : leave.reason);
- this.close();
- }
- livekitLogger.trace('leave request', {
- leave
- });
- };
- }
- makeRTCConfiguration(serverResponse) {
- const rtcConfig = _objectSpread2({}, this.rtcConfig);
- // update ICE servers before creating PeerConnection
- if (serverResponse.iceServers && !rtcConfig.iceServers) {
- const rtcIceServers = [];
- serverResponse.iceServers.forEach(iceServer => {
- const rtcIceServer = {
- urls: iceServer.urls
- };
- if (iceServer.username) rtcIceServer.username = iceServer.username;
- if (iceServer.credential) {
- rtcIceServer.credential = iceServer.credential;
- }
- rtcIceServers.push(rtcIceServer);
- });
- rtcConfig.iceServers = rtcIceServers;
- }
- if (serverResponse.clientConfiguration && serverResponse.clientConfiguration.forceRelay === ClientConfigSetting.ENABLED) {
- rtcConfig.iceTransportPolicy = 'relay';
- }
- // @ts-ignore
- rtcConfig.sdpSemantics = 'unified-plan';
- // @ts-ignore
- rtcConfig.continualGatheringPolicy = 'gather_continually';
- return rtcConfig;
- }
- createDataChannels() {
- if (!this.publisher) {
- return;
- }
- // clear old data channel callbacks if recreate
- if (this.lossyDC) {
- this.lossyDC.onmessage = null;
- this.lossyDC.onerror = null;
- }
- if (this.reliableDC) {
- this.reliableDC.onmessage = null;
- this.reliableDC.onerror = null;
- }
- // create data channels
- this.lossyDC = this.publisher.pc.createDataChannel(lossyDataChannel, {
- // will drop older packets that arrive
- ordered: true,
- maxRetransmits: 0
- });
- this.reliableDC = this.publisher.pc.createDataChannel(reliableDataChannel, {
- ordered: true
- });
- // also handle messages over the pub channel, for backwards compatibility
- this.lossyDC.onmessage = this.handleDataMessage;
- this.reliableDC.onmessage = this.handleDataMessage;
- // handle datachannel errors
- this.lossyDC.onerror = this.handleDataError;
- this.reliableDC.onerror = this.handleDataError;
- }
- setPreferredCodec(transceiver, kind, videoCodec) {
- if (!('getCapabilities' in RTCRtpSender)) {
- return;
- }
- const cap = RTCRtpSender.getCapabilities(kind);
- if (!cap) return;
- livekitLogger.debug('get capabilities', cap);
- const matched = [];
- const partialMatched = [];
- const unmatched = [];
- cap.codecs.forEach(c => {
- const codec = c.mimeType.toLowerCase();
- if (codec === 'audio/opus') {
- matched.push(c);
- return;
- }
- const matchesVideoCodec = codec === "video/".concat(videoCodec);
- if (!matchesVideoCodec) {
- unmatched.push(c);
- return;
- }
- // for h264 codecs that have sdpFmtpLine available, use only if the
- // profile-level-id is 42e01f for cross-browser compatibility
- if (videoCodec === 'h264') {
- if (c.sdpFmtpLine && c.sdpFmtpLine.includes('profile-level-id=42e01f')) {
- matched.push(c);
- } else {
- partialMatched.push(c);
- }
- return;
- }
- matched.push(c);
- });
- if (supportsSetCodecPreferences(transceiver)) {
- transceiver.setCodecPreferences(matched.concat(partialMatched, unmatched));
- }
- }
- async createSender(track, opts, encodings) {
- if (supportsTransceiver()) {
- return this.createTransceiverRTCRtpSender(track, opts, encodings);
- }
- if (supportsAddTrack()) {
- livekitLogger.debug('using add-track fallback');
- return this.createRTCRtpSender(track.mediaStreamTrack);
- }
- throw new UnexpectedConnectionState('Required webRTC APIs not supported on this device');
- }
- async createSimulcastSender(track, simulcastTrack, opts, encodings) {
- // store RTCRtpSender
- // @ts-ignore
- if (supportsTransceiver()) {
- return this.createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings);
- }
- if (supportsAddTrack()) {
- livekitLogger.debug('using add-track fallback');
- return this.createRTCRtpSender(track.mediaStreamTrack);
- }
- throw new UnexpectedConnectionState('Cannot stream on this device');
- }
- async createTransceiverRTCRtpSender(track, opts, encodings) {
- if (!this.publisher) {
- throw new UnexpectedConnectionState('publisher is closed');
- }
- const transceiverInit = {
- direction: 'sendonly'
- };
- if (encodings) {
- transceiverInit.sendEncodings = encodings;
- }
- // addTransceiver for react-native is async. web is synchronous, but await won't effect it.
- const transceiver = await this.publisher.pc.addTransceiver(track.mediaStreamTrack, transceiverInit);
- if (track.kind === Track.Kind.Video && opts.videoCodec) {
- this.setPreferredCodec(transceiver, track.kind, opts.videoCodec);
- track.codec = opts.videoCodec;
- }
- return transceiver.sender;
- }
- async createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings) {
- if (!this.publisher) {
- throw new UnexpectedConnectionState('publisher is closed');
- }
- const transceiverInit = {
- direction: 'sendonly'
- };
- if (encodings) {
- transceiverInit.sendEncodings = encodings;
- }
- // addTransceiver for react-native is async. web is synchronous, but await won't effect it.
- const transceiver = await this.publisher.pc.addTransceiver(simulcastTrack.mediaStreamTrack, transceiverInit);
- if (!opts.videoCodec) {
- return;
- }
- this.setPreferredCodec(transceiver, track.kind, opts.videoCodec);
- track.setSimulcastTrackSender(opts.videoCodec, transceiver.sender);
- return transceiver.sender;
- }
- async createRTCRtpSender(track) {
- if (!this.publisher) {
- throw new UnexpectedConnectionState('publisher is closed');
- }
- return this.publisher.pc.addTrack(track);
- }
- async attemptReconnect(reason) {
- var _a, _b, _c;
- if (this._isClosed) {
- return;
- }
- // guard for attempting reconnection multiple times while one attempt is still not finished
- if (this.attemptingReconnect) {
- return;
- }
- if (((_a = this.clientConfiguration) === null || _a === void 0 ? void 0 : _a.resumeConnection) === ClientConfigSetting.DISABLED ||
- // signaling state could change to closed due to hardware sleep
- // those connections cannot be resumed
- ((_c = (_b = this.primaryPC) === null || _b === void 0 ? void 0 : _b.signalingState) !== null && _c !== void 0 ? _c : 'closed') === 'closed') {
- this.fullReconnectOnNext = true;
- }
- try {
- this.attemptingReconnect = true;
- if (this.fullReconnectOnNext) {
- await this.restartConnection();
- } else {
- await this.resumeConnection(reason);
- }
- this.clearPendingReconnect();
- this.fullReconnectOnNext = false;
- } catch (e) {
- this.reconnectAttempts += 1;
- let recoverable = true;
- if (e instanceof UnexpectedConnectionState) {
- livekitLogger.debug('received unrecoverable error', {
- error: e
- });
- // unrecoverable
- recoverable = false;
- } else if (!(e instanceof SignalReconnectError)) {
- // cannot resume
- this.fullReconnectOnNext = true;
- }
- if (recoverable) {
- this.handleDisconnect('reconnect', ReconnectReason.RR_UNKOWN);
- } else {
- livekitLogger.info("could not recover connection after ".concat(this.reconnectAttempts, " attempts, ").concat(Date.now() - this.reconnectStart, "ms. giving up"));
- this.emit(EngineEvent.Disconnected);
- this.close();
- }
- } finally {
- this.attemptingReconnect = false;
- }
- }
- getNextRetryDelay(context) {
- try {
- return this.reconnectPolicy.nextRetryDelayInMs(context);
- } catch (e) {
- livekitLogger.warn('encountered error in reconnect policy', {
- error: e
- });
- }
- // error in user code with provided reconnect policy, stop reconnecting
- return null;
- }
- async restartConnection() {
- var _a, _b;
- if (!this.url || !this.token) {
- // permanent failure, don't attempt reconnection
- throw new UnexpectedConnectionState('could not reconnect, url or token not saved');
- }
- livekitLogger.info("reconnecting, attempt: ".concat(this.reconnectAttempts));
- this.emit(EngineEvent.Restarting);
- if (this.client.isConnected) {
- await this.client.sendLeave();
- }
- await this.client.close();
- this.primaryPC = undefined;
- (_a = this.publisher) === null || _a === void 0 ? void 0 : _a.close();
- this.publisher = undefined;
- (_b = this.subscriber) === null || _b === void 0 ? void 0 : _b.close();
- this.subscriber = undefined;
- let joinResponse;
- try {
- if (!this.signalOpts) {
- livekitLogger.warn('attempted connection restart, without signal options present');
- throw new SignalReconnectError();
- }
- joinResponse = await this.join(this.url, this.token, this.signalOpts);
- } catch (e) {
- throw new SignalReconnectError();
- }
- if (this.shouldFailNext) {
- this.shouldFailNext = false;
- throw new Error('simulated failure');
- }
- await this.waitForPCConnected();
- this.client.setReconnected();
- // reconnect success
- this.emit(EngineEvent.Restarted, joinResponse);
- }
- async resumeConnection(reason) {
- var _a;
- if (!this.url || !this.token) {
- // permanent failure, don't attempt reconnection
- throw new UnexpectedConnectionState('could not reconnect, url or token not saved');
- }
- // trigger publisher reconnect
- if (!this.publisher || !this.subscriber) {
- throw new UnexpectedConnectionState('publisher and subscriber connections unset');
- }
- livekitLogger.info("resuming signal connection, attempt ".concat(this.reconnectAttempts));
- this.emit(EngineEvent.Resuming);
- try {
- const res = await this.client.reconnect(this.url, this.token, this.participantSid, reason);
- if (res) {
- const rtcConfig = this.makeRTCConfiguration(res);
- this.publisher.pc.setConfiguration(rtcConfig);
- this.subscriber.pc.setConfiguration(rtcConfig);
- }
- } catch (e) {
- let message = '';
- if (e instanceof Error) {
- message = e.message;
- }
- throw new SignalReconnectError(message);
- }
- this.emit(EngineEvent.SignalResumed);
- if (this.shouldFailNext) {
- this.shouldFailNext = false;
- throw new Error('simulated failure');
- }
- this.subscriber.restartingIce = true;
- // only restart publisher if it's needed
- if (this.hasPublished) {
- await this.publisher.createAndSendOffer({
- iceRestart: true
- });
- }
- await this.waitForPCConnected();
- this.client.setReconnected();
- // recreate publish datachannel if it's id is null
- // (for safari https://bugs.webkit.org/show_bug.cgi?id=184688)
- if (((_a = this.reliableDC) === null || _a === void 0 ? void 0 : _a.readyState) === 'open' && this.reliableDC.id === null) {
- this.createDataChannels();
- }
- // resume success
- this.emit(EngineEvent.Resumed);
- }
- async waitForPCConnected() {
- var _a;
- const startTime = Date.now();
- let now = startTime;
- this.pcState = PCState.Reconnecting;
- livekitLogger.debug('waiting for peer connection to reconnect');
- while (now - startTime < this.peerConnectionTimeout) {
- if (this.primaryPC === undefined) {
- // we can abort early, connection is hosed
- break;
- } else if (
- // on Safari, we don't get a connectionstatechanged event during ICE restart
- // this means we'd have to check its status manually and update address
- // manually
- now - startTime > minReconnectWait && ((_a = this.primaryPC) === null || _a === void 0 ? void 0 : _a.connectionState) === 'connected') {
- this.pcState = PCState.Connected;
- }
- if (this.pcState === PCState.Connected) {
- return;
- }
- await sleep(100);
- now = Date.now();
- }
- // have not reconnected, throw
- throw new ConnectionError('could not establish PC connection');
- }
- /* @internal */
- async sendDataPacket(packet, kind) {
- const msg = DataPacket.encode(packet).finish();
- // make sure we do have a data connection
- await this.ensurePublisherConnected(kind);
- if (kind === DataPacket_Kind.LOSSY && this.lossyDC) {
- this.lossyDC.send(msg);
- } else if (kind === DataPacket_Kind.RELIABLE && this.reliableDC) {
- this.reliableDC.send(msg);
- }
- }
- /**
- * @internal
- */
- async ensureDataTransportConnected(kind) {
- let subscriber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.subscriberPrimary;
- var _a, _b, _c;
- const transport = subscriber ? this.subscriber : this.publisher;
- const transportName = subscriber ? 'Subscriber' : 'Publisher';
- if (!transport) {
- throw new ConnectionError("".concat(transportName, " connection not set"));
- }
- if (!subscriber && !((_a = this.publisher) === null || _a === void 0 ? void 0 : _a.isICEConnected) && ((_b = this.publisher) === null || _b === void 0 ? void 0 : _b.pc.iceConnectionState) !== 'checking') {
- // start negotiation
- this.negotiate();
- }
- const targetChannel = this.dataChannelForKind(kind, subscriber);
- if ((targetChannel === null || targetChannel === void 0 ? void 0 : targetChannel.readyState) === 'open') {
- return;
- }
- // wait until ICE connected
- const endTime = new Date().getTime() + this.peerConnectionTimeout;
- while (new Date().getTime() < endTime) {
- if (transport.isICEConnected && ((_c = this.dataChannelForKind(kind, subscriber)) === null || _c === void 0 ? void 0 : _c.readyState) === 'open') {
- return;
- }
- await sleep(50);
- }
- throw new ConnectionError("could not establish ".concat(transportName, " connection, state: ").concat(transport.pc.iceConnectionState));
- }
- async ensurePublisherConnected(kind) {
- await this.ensureDataTransportConnected(kind, false);
- }
- /** @internal */
- negotiate() {
- // observe signal state
- return new Promise((resolve, reject) => {
- if (!this.publisher) {
- reject(new NegotiationError('publisher is not defined'));
- return;
- }
- this.hasPublished = true;
- const handleClosed = () => {
- livekitLogger.debug('engine disconnected while negotiation was ongoing');
- cleanup();
- resolve();
- return;
- };
- this.on(EngineEvent.Closing, handleClosed);
- const negotiationTimeout = setTimeout(() => {
- reject('negotiation timed out');
- this.handleDisconnect('negotiation', ReconnectReason.RR_SIGNAL_DISCONNECTED);
- }, this.peerConnectionTimeout);
- const cleanup = () => {
- clearTimeout(negotiationTimeout);
- this.off(EngineEvent.Closing, handleClosed);
- };
- this.publisher.once(PCEvents.NegotiationStarted, () => {
- var _a;
- (_a = this.publisher) === null || _a === void 0 ? void 0 : _a.once(PCEvents.NegotiationComplete, () => {
- cleanup();
- resolve();
- });
- });
- this.publisher.negotiate(e => {
- cleanup();
- reject(e);
- if (e instanceof NegotiationError) {
- this.fullReconnectOnNext = true;
- }
- this.handleDisconnect('negotiation', ReconnectReason.RR_UNKOWN);
- });
- });
- }
- dataChannelForKind(kind, sub) {
- if (!sub) {
- if (kind === DataPacket_Kind.LOSSY) {
- return this.lossyDC;
- }
- if (kind === DataPacket_Kind.RELIABLE) {
- return this.reliableDC;
- }
- } else {
- if (kind === DataPacket_Kind.LOSSY) {
- return this.lossyDCSub;
- }
- if (kind === DataPacket_Kind.RELIABLE) {
- return this.reliableDCSub;
- }
- }
- }
- /* @internal */
- failNext() {
- // debugging method to fail the next reconnect/resume attempt
- this.shouldFailNext = true;
- }
- clearReconnectTimeout() {
- if (this.reconnectTimeout) {
- CriticalTimers.clearTimeout(this.reconnectTimeout);
- }
- }
- clearPendingReconnect() {
- this.clearReconnectTimeout();
- this.reconnectAttempts = 0;
- }
- registerOnLineListener() {
- if (isWeb()) {
- window.addEventListener('online', this.handleBrowserOnLine);
- }
- }
- deregisterOnLineListener() {
- if (isWeb()) {
- window.removeEventListener('online', this.handleBrowserOnLine);
- }
- }
-}
-async function getConnectedAddress(pc) {
- var _a;
- let selectedCandidatePairId = '';
- const candidatePairs = new Map();
- // id -> candidate ip
- const candidates = new Map();
- const stats = await pc.getStats();
- stats.forEach(v => {
- switch (v.type) {
- case 'transport':
- selectedCandidatePairId = v.selectedCandidatePairId;
- break;
- case 'candidate-pair':
- if (selectedCandidatePairId === '' && v.selected) {
- selectedCandidatePairId = v.id;
- }
- candidatePairs.set(v.id, v);
- break;
- case 'remote-candidate':
- candidates.set(v.id, "".concat(v.address, ":").concat(v.port));
- break;
- }
- });
- if (selectedCandidatePairId === '') {
- return undefined;
- }
- const selectedID = (_a = candidatePairs.get(selectedCandidatePairId)) === null || _a === void 0 ? void 0 : _a.remoteCandidateId;
- if (selectedID === undefined) {
- return undefined;
- }
- return candidates.get(selectedID);
-}
-class SignalReconnectError extends Error {}
-
-var ConnectionState;
-(function (ConnectionState) {
- ConnectionState["Disconnected"] = "disconnected";
- ConnectionState["Connecting"] = "connecting";
- ConnectionState["Connected"] = "connected";
- ConnectionState["Reconnecting"] = "reconnecting";
-})(ConnectionState || (ConnectionState = {}));
-/** @deprecated RoomState has been renamed to [[ConnectionState]] */
-const RoomState = ConnectionState;
-/**
- * In LiveKit, a room is the logical grouping for a list of participants.
- * Participants in a room can publish tracks, and subscribe to others' tracks.
- *
- * a Room fires [[RoomEvent | RoomEvents]].
- *
- * @noInheritDoc
- */
-class Room extends eventsExports.EventEmitter {
- /**
- * Creates a new Room, the primary construct for a LiveKit session.
- * @param options
- */
- constructor(options) {
- var _this;
- super();
- _this = this;
- this.state = ConnectionState.Disconnected;
- /**
- * list of participants that are actively speaking. when this changes
- * a [[RoomEvent.ActiveSpeakersChanged]] event is fired
- */
- this.activeSpeakers = [];
- // available after connected
- /** server assigned unique room id */
- this.sid = '';
- /** user assigned name, derived from JWT token */
- this.name = '';
- /** room metadata */
- this.metadata = undefined;
- this._isRecording = false;
- this.audioEnabled = true;
- this.connect = async (url, token, opts) => {
- // In case a disconnect called happened right before the connect call, make sure the disconnect is completed first by awaiting its lock
- const unlockDisconnect = await this.disconnectLock.lock();
- if (this.state === ConnectionState.Connected) {
- // when the state is reconnecting or connected, this function returns immediately
- livekitLogger.info("already connected to room ".concat(this.name));
- unlockDisconnect();
- return Promise.resolve();
- }
- if (this.connectFuture) {
- unlockDisconnect();
- return this.connectFuture.promise;
- }
- this.setAndEmitConnectionState(ConnectionState.Connecting);
- const connectFn = async (resolve, reject) => {
- var _a, _b;
- if (!this.abortController || this.abortController.signal.aborted) {
- this.abortController = new AbortController();
- }
- // at this point the intention to connect has been signalled so we can allow cancelling of the connection via disconnect() again
- unlockDisconnect();
- if (this.state === ConnectionState.Reconnecting) {
- livekitLogger.info('Reconnection attempt replaced by new connection attempt');
- // make sure we close and recreate the existing engine in order to get rid of any potentially ongoing reconnection attempts
- this.recreateEngine();
- } else {
- // create engine if previously disconnected
- this.maybeCreateEngine();
- }
- this.acquireAudioContext();
- this.connOptions = _objectSpread2(_objectSpread2({}, roomConnectOptionDefaults), opts);
- if (this.connOptions.rtcConfig) {
- this.engine.rtcConfig = this.connOptions.rtcConfig;
- }
- if (this.connOptions.peerConnectionTimeout) {
- this.engine.peerConnectionTimeout = this.connOptions.peerConnectionTimeout;
- }
- try {
- const joinResponse = await this.engine.join(url, token, {
- autoSubscribe: this.connOptions.autoSubscribe,
- publishOnly: this.connOptions.publishOnly,
- adaptiveStream: typeof this.options.adaptiveStream === 'object' ? true : this.options.adaptiveStream,
- maxRetries: this.connOptions.maxRetries
- }, this.abortController.signal);
- let serverInfo = joinResponse.serverInfo;
- if (!serverInfo) {
- serverInfo = {
- version: joinResponse.serverVersion,
- region: joinResponse.serverRegion
- };
- }
- livekitLogger.debug("connected to Livekit Server ".concat(Object.entries(serverInfo).map(_ref => {
- let [key, value] = _ref;
- return "".concat(key, ": ").concat(value);
- }).join(', ')));
- if (!joinResponse.serverVersion) {
- throw new UnsupportedServer('unknown server version');
- }
- if (joinResponse.serverVersion === '0.15.1' && this.options.dynacast) {
- livekitLogger.debug('disabling dynacast due to server version');
- // dynacast has a bug in 0.15.1, so we cannot use it then
- this.options.dynacast = false;
- }
- const pi = joinResponse.participant;
- this.localParticipant.sid = pi.sid;
- this.localParticipant.identity = pi.identity;
- this.localParticipant.updateInfo(pi);
- // forward metadata changed for the local participant
- this.setupLocalParticipantEvents();
- // populate remote participants, these should not trigger new events
- joinResponse.otherParticipants.forEach(info => {
- if (info.sid !== this.localParticipant.sid && info.identity !== this.localParticipant.identity) {
- this.getOrCreateParticipant(info.sid, info);
- } else {
- livekitLogger.warn('received info to create local participant as remote participant', {
- info,
- localParticipant: this.localParticipant
- });
- }
- });
- this.name = joinResponse.room.name;
- this.sid = joinResponse.room.sid;
- this.metadata = joinResponse.room.metadata;
- if (this._isRecording !== joinResponse.room.activeRecording) {
- this._isRecording = joinResponse.room.activeRecording;
- this.emit(RoomEvent.RecordingStatusChanged, joinResponse.room.activeRecording);
- }
- this.emit(RoomEvent.SignalConnected);
- } catch (err) {
- this.recreateEngine();
- this.handleDisconnect(this.options.stopLocalTrackOnUnpublish);
- const resultingError = new ConnectionError("could not establish signal connection");
- if (err instanceof Error) {
- resultingError.message = "".concat(resultingError.message, ": ").concat(err.message);
- }
- if (err instanceof ConnectionError) {
- resultingError.reason = err.reason;
- resultingError.status = err.status;
- }
- livekitLogger.debug("error trying to establish signal connection", {
- error: err
- });
- reject(resultingError);
- return;
- }
- // don't return until ICE connected
- const connectTimeout = CriticalTimers.setTimeout(() => {
- // timeout
- this.recreateEngine();
- this.handleDisconnect(this.options.stopLocalTrackOnUnpublish);
- reject(new ConnectionError('could not connect PeerConnection after timeout'));
- }, this.connOptions.peerConnectionTimeout);
- const abortHandler = () => {
- livekitLogger.warn('closing engine');
- CriticalTimers.clearTimeout(connectTimeout);
- this.recreateEngine();
- this.handleDisconnect(this.options.stopLocalTrackOnUnpublish);
- reject(new ConnectionError('room connection has been cancelled'));
- };
- if ((_a = this.abortController) === null || _a === void 0 ? void 0 : _a.signal.aborted) {
- abortHandler();
- }
- (_b = this.abortController) === null || _b === void 0 ? void 0 : _b.signal.addEventListener('abort', abortHandler);
- this.engine.once(EngineEvent.Connected, () => {
- var _a, _b;
- CriticalTimers.clearTimeout(connectTimeout);
- (_a = this.abortController) === null || _a === void 0 ? void 0 : _a.signal.removeEventListener('abort', abortHandler);
- // also hook unload event
- if (isWeb() && this.options.disconnectOnPageLeave) {
- // capturing both 'pagehide' and 'beforeunload' to capture broadest set of browser behaviors
- window.addEventListener('pagehide', this.onPageLeave);
- window.addEventListener('beforeunload', this.onPageLeave);
- (_b = navigator.mediaDevices) === null || _b === void 0 ? void 0 : _b.addEventListener('devicechange', this.handleDeviceChange);
- }
- this.setAndEmitConnectionState(ConnectionState.Connected);
- this.emit(RoomEvent.Connected);
- resolve();
- });
- };
- this.connectFuture = new Future(connectFn, () => {
- this.clearConnectionFutures();
- });
- return this.connectFuture.promise;
- };
- /**
- * disconnects the room, emits [[RoomEvent.Disconnected]]
- */
- this.disconnect = async function () {
- let stopTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
- var _a, _b, _c, _d;
- const unlock = await _this.disconnectLock.lock();
- try {
- if (_this.state === ConnectionState.Disconnected) {
- livekitLogger.debug('already disconnected');
- return;
- }
- livekitLogger.info('disconnect from room', {
- identity: _this.localParticipant.identity
- });
- if (_this.state === ConnectionState.Connecting || _this.state === ConnectionState.Reconnecting) {
- // try aborting pending connection attempt
- livekitLogger.warn('abort connection attempt');
- (_a = _this.abortController) === null || _a === void 0 ? void 0 : _a.abort();
- // in case the abort controller didn't manage to cancel the connection attempt, reject the connect promise explicitly
- (_c = (_b = _this.connectFuture) === null || _b === void 0 ? void 0 : _b.reject) === null || _c === void 0 ? void 0 : _c.call(_b, new ConnectionError('Client initiated disconnect'));
- _this.connectFuture = undefined;
- }
- // send leave
- if ((_d = _this.engine) === null || _d === void 0 ? void 0 : _d.client.isConnected) {
- await _this.engine.client.sendLeave();
- }
- // close engine (also closes client)
- if (_this.engine) {
- await _this.engine.close();
- }
- _this.handleDisconnect(stopTracks, DisconnectReason.CLIENT_INITIATED);
- /* @ts-ignore */
- _this.engine = undefined;
- } finally {
- unlock();
- }
- };
- this.onPageLeave = async () => {
- await this.disconnect();
- };
- this.handleRestarting = () => {
- // also unwind existing participants & existing subscriptions
- for (const p of this.participants.values()) {
- this.handleParticipantDisconnected(p.sid, p);
- }
- if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {
- this.emit(RoomEvent.Reconnecting);
- }
- };
- this.handleRestarted = async joinResponse => {
- livekitLogger.debug("reconnected to server", {
- region: joinResponse.serverRegion
- });
- try {
- // rehydrate participants
- if (joinResponse.participant) {
- // with a restart, the sid will have changed, we'll map our understanding to it
- this.localParticipant.sid = joinResponse.participant.sid;
- this.handleParticipantUpdates([joinResponse.participant]);
- }
- this.handleParticipantUpdates(joinResponse.otherParticipants);
- // unpublish & republish tracks
- const localPubs = [];
- this.localParticipant.tracks.forEach(pub => {
- if (pub.track) {
- localPubs.push(pub);
- }
- });
- await Promise.all(localPubs.map(async pub => {
- const track = pub.track;
- this.localParticipant.unpublishTrack(track, false);
- if (!track.isMuted) {
- if ((track instanceof LocalAudioTrack || track instanceof LocalVideoTrack) && !track.isUserProvided) {
- // we need to restart the track before publishing, often a full reconnect
- // is necessary because computer had gone to sleep.
- livekitLogger.debug('restarting existing track', {
- track: pub.trackSid
- });
- await track.restartTrack();
- }
- livekitLogger.debug('publishing new track', {
- track: pub.trackSid
- });
- await this.localParticipant.publishTrack(track, pub.options);
- }
- }));
- } catch (error) {
- livekitLogger.error('error trying to re-publish tracks after reconnection', {
- error
- });
- } finally {
- this.setAndEmitConnectionState(ConnectionState.Connected);
- this.emit(RoomEvent.Reconnected);
- }
- };
- this.handleParticipantUpdates = participantInfos => {
- // handle changes to participant state, and send events
- participantInfos.forEach(info => {
- if (info.identity === this.localParticipant.identity) {
- this.localParticipant.updateInfo(info);
- return;
- }
- // ensure identity <=> sid mapping
- const sid = this.identityToSid.get(info.identity);
- if (sid && sid !== info.sid) {
- // sid had changed, need to remove previous participant
- this.handleParticipantDisconnected(sid, this.participants.get(sid));
- }
- let remoteParticipant = this.participants.get(info.sid);
- const isNewParticipant = !remoteParticipant;
- // when it's disconnected, send updates
- if (info.state === ParticipantInfo_State.DISCONNECTED) {
- this.handleParticipantDisconnected(info.sid, remoteParticipant);
- } else {
- // create participant if doesn't exist
- remoteParticipant = this.getOrCreateParticipant(info.sid, info);
- if (!isNewParticipant) {
- // just update, no events
- remoteParticipant.updateInfo(info);
- }
- }
- });
- };
- // updates are sent only when there's a change to speaker ordering
- this.handleActiveSpeakersUpdate = speakers => {
- const activeSpeakers = [];
- const seenSids = {};
- speakers.forEach(speaker => {
- seenSids[speaker.sid] = true;
- if (speaker.sid === this.localParticipant.sid) {
- this.localParticipant.audioLevel = speaker.level;
- this.localParticipant.setIsSpeaking(true);
- activeSpeakers.push(this.localParticipant);
- } else {
- const p = this.participants.get(speaker.sid);
- if (p) {
- p.audioLevel = speaker.level;
- p.setIsSpeaking(true);
- activeSpeakers.push(p);
- }
- }
- });
- if (!seenSids[this.localParticipant.sid]) {
- this.localParticipant.audioLevel = 0;
- this.localParticipant.setIsSpeaking(false);
- }
- this.participants.forEach(p => {
- if (!seenSids[p.sid]) {
- p.audioLevel = 0;
- p.setIsSpeaking(false);
- }
- });
- this.activeSpeakers = activeSpeakers;
- this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);
- };
- // process list of changed speakers
- this.handleSpeakersChanged = speakerUpdates => {
- const lastSpeakers = new Map();
- this.activeSpeakers.forEach(p => {
- lastSpeakers.set(p.sid, p);
- });
- speakerUpdates.forEach(speaker => {
- let p = this.participants.get(speaker.sid);
- if (speaker.sid === this.localParticipant.sid) {
- p = this.localParticipant;
- }
- if (!p) {
- return;
- }
- p.audioLevel = speaker.level;
- p.setIsSpeaking(speaker.active);
- if (speaker.active) {
- lastSpeakers.set(speaker.sid, p);
- } else {
- lastSpeakers.delete(speaker.sid);
- }
- });
- const activeSpeakers = Array.from(lastSpeakers.values());
- activeSpeakers.sort((a, b) => b.audioLevel - a.audioLevel);
- this.activeSpeakers = activeSpeakers;
- this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);
- };
- this.handleStreamStateUpdate = streamStateUpdate => {
- streamStateUpdate.streamStates.forEach(streamState => {
- const participant = this.participants.get(streamState.participantSid);
- if (!participant) {
- return;
- }
- const pub = participant.getTrackPublication(streamState.trackSid);
- if (!pub || !pub.track) {
- return;
- }
- pub.track.streamState = Track.streamStateFromProto(streamState.state);
- participant.emit(ParticipantEvent.TrackStreamStateChanged, pub, pub.track.streamState);
- this.emitWhenConnected(RoomEvent.TrackStreamStateChanged, pub, pub.track.streamState, participant);
- });
- };
- this.handleSubscriptionPermissionUpdate = update => {
- const participant = this.participants.get(update.participantSid);
- if (!participant) {
- return;
- }
- const pub = participant.getTrackPublication(update.trackSid);
- if (!pub) {
- return;
- }
- pub.setAllowed(update.allowed);
- };
- this.handleDataPacket = (userPacket, kind) => {
- // find the participant
- const participant = this.participants.get(userPacket.participantSid);
- this.emit(RoomEvent.DataReceived, userPacket.payload, participant, kind, userPacket.topic);
- // also emit on the participant
- participant === null || participant === void 0 ? void 0 : participant.emit(ParticipantEvent.DataReceived, userPacket.payload, kind);
- };
- this.handleAudioPlaybackStarted = () => {
- if (this.canPlaybackAudio) {
- return;
- }
- this.audioEnabled = true;
- this.emit(RoomEvent.AudioPlaybackStatusChanged, true);
- };
- this.handleAudioPlaybackFailed = e => {
- livekitLogger.warn('could not playback audio', e);
- if (!this.canPlaybackAudio) {
- return;
- }
- this.audioEnabled = false;
- this.emit(RoomEvent.AudioPlaybackStatusChanged, false);
- };
- this.handleDeviceChange = async () => {
- this.emit(RoomEvent.MediaDevicesChanged);
- };
- this.handleRoomUpdate = r => {
- if (this._isRecording !== r.activeRecording) {
- this._isRecording = r.activeRecording;
- this.emit(RoomEvent.RecordingStatusChanged, r.activeRecording);
- }
- if (this.metadata !== r.metadata) {
- this.metadata = r.metadata;
- this.emitWhenConnected(RoomEvent.RoomMetadataChanged, r.metadata);
- }
- };
- this.handleConnectionQualityUpdate = update => {
- update.updates.forEach(info => {
- if (info.participantSid === this.localParticipant.sid) {
- this.localParticipant.setConnectionQuality(info.quality);
- return;
- }
- const participant = this.participants.get(info.participantSid);
- if (participant) {
- participant.setConnectionQuality(info.quality);
- }
- });
- };
- this.onLocalParticipantMetadataChanged = metadata => {
- this.emit(RoomEvent.ParticipantMetadataChanged, metadata, this.localParticipant);
- };
- this.onLocalTrackMuted = pub => {
- this.emit(RoomEvent.TrackMuted, pub, this.localParticipant);
- };
- this.onLocalTrackUnmuted = pub => {
- this.emit(RoomEvent.TrackUnmuted, pub, this.localParticipant);
- };
- this.onLocalTrackPublished = async pub => {
- this.emit(RoomEvent.LocalTrackPublished, pub, this.localParticipant);
- if (pub.track instanceof LocalAudioTrack) {
- const trackIsSilent = await pub.track.checkForSilence();
- if (trackIsSilent) {
- this.emit(RoomEvent.LocalAudioSilenceDetected, pub);
- }
- }
- };
- this.onLocalTrackUnpublished = pub => {
- this.emit(RoomEvent.LocalTrackUnpublished, pub, this.localParticipant);
- };
- this.onLocalConnectionQualityChanged = quality => {
- this.emit(RoomEvent.ConnectionQualityChanged, quality, this.localParticipant);
- };
- this.onMediaDevicesError = e => {
- this.emit(RoomEvent.MediaDevicesError, e);
- };
- this.onLocalParticipantPermissionsChanged = prevPermissions => {
- this.emit(RoomEvent.ParticipantPermissionsChanged, prevPermissions, this.localParticipant);
- };
- this.setMaxListeners(100);
- this.participants = new Map();
- this.identityToSid = new Map();
- this.options = _objectSpread2(_objectSpread2({}, roomOptionDefaults), options);
- this.options.audioCaptureDefaults = _objectSpread2(_objectSpread2({}, audioDefaults), options === null || options === void 0 ? void 0 : options.audioCaptureDefaults);
- this.options.videoCaptureDefaults = _objectSpread2(_objectSpread2({}, videoDefaults), options === null || options === void 0 ? void 0 : options.videoCaptureDefaults);
- this.options.publishDefaults = _objectSpread2(_objectSpread2({}, publishDefaults), options === null || options === void 0 ? void 0 : options.publishDefaults);
- this.maybeCreateEngine();
- this.disconnectLock = new Mutex();
- this.localParticipant = new LocalParticipant('', '', this.engine, this.options);
- }
- maybeCreateEngine() {
- if (this.engine) {
- return;
- }
- this.engine = new RTCEngine(this.options);
- this.engine.client.onParticipantUpdate = this.handleParticipantUpdates;
- this.engine.client.onRoomUpdate = this.handleRoomUpdate;
- this.engine.client.onSpeakersChanged = this.handleSpeakersChanged;
- this.engine.client.onStreamStateUpdate = this.handleStreamStateUpdate;
- this.engine.client.onSubscriptionPermissionUpdate = this.handleSubscriptionPermissionUpdate;
- this.engine.client.onConnectionQuality = this.handleConnectionQualityUpdate;
- this.engine.on(EngineEvent.MediaTrackAdded, (mediaTrack, stream, receiver) => {
- this.onTrackAdded(mediaTrack, stream, receiver);
- }).on(EngineEvent.Disconnected, reason => {
- this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, reason);
- }).on(EngineEvent.ActiveSpeakersUpdate, this.handleActiveSpeakersUpdate).on(EngineEvent.DataPacketReceived, this.handleDataPacket).on(EngineEvent.Resuming, () => {
- if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {
- this.emit(RoomEvent.Reconnecting);
- }
- }).on(EngineEvent.Resumed, () => {
- this.setAndEmitConnectionState(ConnectionState.Connected);
- this.emit(RoomEvent.Reconnected);
- this.updateSubscriptions();
- }).on(EngineEvent.SignalResumed, () => {
- if (this.state === ConnectionState.Reconnecting) {
- this.sendSyncState();
- }
- }).on(EngineEvent.Restarting, this.handleRestarting).on(EngineEvent.Restarted, this.handleRestarted);
- if (this.localParticipant) {
- this.localParticipant.setupEngine(this.engine);
- }
- }
- /**
- * getLocalDevices abstracts navigator.mediaDevices.enumerateDevices.
- * In particular, it handles Chrome's unique behavior of creating `default`
- * devices. When encountered, it'll be removed from the list of devices.
- * The actual default device will be placed at top.
- * @param kind
- * @returns a list of available local devices
- */
- static getLocalDevices(kind) {
- let requestPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
- return DeviceManager.getInstance().getDevices(kind, requestPermissions);
- }
- /**
- * prepares the connection to the livekit server by sending a HEAD request in order to
- * 1. speed up DNS resolution
- * 2. speed up TLS setup
- * on the actual connection request
- * throws an error if server is not reachable after the request timeout
- * @experimental
- */
- async prepareConnection(url) {
- await fetch("http".concat(url.substring(2)), {
- method: 'HEAD'
- });
- }
- /**
- * retrieves a participant by identity
- * @param identity
- * @returns
- */
- getParticipantByIdentity(identity) {
- if (this.localParticipant.identity === identity) {
- return this.localParticipant;
- }
- const sid = this.identityToSid.get(identity);
- if (sid) {
- return this.participants.get(sid);
- }
- }
- clearConnectionFutures() {
- this.connectFuture = undefined;
- }
- /**
- * if the current room has a participant with `recorder: true` in its JWT grant
- **/
- get isRecording() {
- return this._isRecording;
- }
- /**
- * @internal for testing
- */
- async simulateScenario(scenario) {
- let postAction = () => {};
- let req;
- switch (scenario) {
- case 'signal-reconnect':
- await this.engine.client.close();
- if (this.engine.client.onClose) {
- this.engine.client.onClose('simulate disconnect');
- }
- break;
- case 'speaker':
- req = SimulateScenario.fromPartial({
- scenario: {
- $case: 'speakerUpdate',
- speakerUpdate: 3
- }
- });
- break;
- case 'node-failure':
- req = SimulateScenario.fromPartial({
- scenario: {
- $case: 'nodeFailure',
- nodeFailure: true
- }
- });
- break;
- case 'server-leave':
- req = SimulateScenario.fromPartial({
- scenario: {
- $case: 'serverLeave',
- serverLeave: true
- }
- });
- break;
- case 'migration':
- req = SimulateScenario.fromPartial({
- scenario: {
- $case: 'migration',
- migration: true
- }
- });
- break;
- case 'resume-reconnect':
- this.engine.failNext();
- await this.engine.client.close();
- if (this.engine.client.onClose) {
- this.engine.client.onClose('simulate resume-reconnect');
- }
- break;
- case 'force-tcp':
- case 'force-tls':
- req = SimulateScenario.fromPartial({
- scenario: {
- $case: 'switchCandidateProtocol',
- switchCandidateProtocol: scenario === 'force-tls' ? 2 : 1
- }
- });
- postAction = async () => {
- const onLeave = this.engine.client.onLeave;
- if (onLeave) {
- onLeave({
- reason: DisconnectReason.CLIENT_INITIATED,
- canReconnect: true
- });
- }
- };
- break;
- }
- if (req) {
- this.engine.client.sendSimulateScenario(req);
- postAction();
- }
- }
- /**
- * Browsers have different policies regarding audio playback. Most requiring
- * some form of user interaction (click/tap/etc).
- * In those cases, audio will be silent until a click/tap triggering one of the following
- * - `startAudio`
- * - `getUserMedia`
- */
- async startAudio() {
- await this.acquireAudioContext();
- const elements = [];
- this.participants.forEach(p => {
- p.audioTracks.forEach(t => {
- if (t.track) {
- t.track.attachedElements.forEach(e => {
- elements.push(e);
- });
- }
- });
- });
- try {
- await Promise.all(elements.map(e => {
- e.muted = false;
- return e.play();
- }));
- this.handleAudioPlaybackStarted();
- } catch (err) {
- this.handleAudioPlaybackFailed(err);
- throw err;
- }
- }
- /**
- * Returns true if audio playback is enabled
- */
- get canPlaybackAudio() {
- return this.audioEnabled;
- }
- /**
- * Returns the active audio output device used in this room.
- *
- * Note: to get the active `audioinput` or `videoinput` use [[LocalTrack.getDeviceId()]]
- *
- * @return the previously successfully set audio output device ID or an empty string if the default device is used.
- */
- getActiveAudioOutputDevice() {
- var _a, _b;
- return (_b = (_a = this.options.audioOutput) === null || _a === void 0 ? void 0 : _a.deviceId) !== null && _b !== void 0 ? _b : '';
- }
- /**
- * Switches all active devices used in this room to the given device.
- *
- * Note: setting AudioOutput is not supported on some browsers. See [setSinkId](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId#browser_compatibility)
- *
- * @param kind use `videoinput` for camera track,
- * `audioinput` for microphone track,
- * `audiooutput` to set speaker for all incoming audio tracks
- * @param deviceId
- */
- async switchActiveDevice(kind, deviceId) {
- let exact = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- var _a;
- var _b;
- const deviceConstraint = exact ? {
- exact: deviceId
- } : deviceId;
- if (kind === 'audioinput') {
- const prevDeviceId = this.options.audioCaptureDefaults.deviceId;
- this.options.audioCaptureDefaults.deviceId = deviceConstraint;
- const tracks = Array.from(this.localParticipant.audioTracks.values()).filter(track => track.source === Track.Source.Microphone);
- try {
- await Promise.all(tracks.map(t => {
- var _a;
- return (_a = t.audioTrack) === null || _a === void 0 ? void 0 : _a.setDeviceId(deviceConstraint);
- }));
- } catch (e) {
- this.options.audioCaptureDefaults.deviceId = prevDeviceId;
- throw e;
- }
- } else if (kind === 'videoinput') {
- const prevDeviceId = this.options.videoCaptureDefaults.deviceId;
- this.options.videoCaptureDefaults.deviceId = deviceConstraint;
- const tracks = Array.from(this.localParticipant.videoTracks.values()).filter(track => track.source === Track.Source.Camera);
- try {
- await Promise.all(tracks.map(t => {
- var _a;
- return (_a = t.videoTrack) === null || _a === void 0 ? void 0 : _a.setDeviceId(deviceConstraint);
- }));
- } catch (e) {
- this.options.videoCaptureDefaults.deviceId = prevDeviceId;
- throw e;
- }
- } else if (kind === 'audiooutput') {
- // TODO add support for webaudio mix once the API becomes available https://github.com/WebAudio/web-audio-api/pull/2498
- if (!supportsSetSinkId()) {
- throw new Error('cannot switch audio output, setSinkId not supported');
- }
- (_a = (_b = this.options).audioOutput) !== null && _a !== void 0 ? _a : _b.audioOutput = {};
- const prevDeviceId = this.options.audioOutput.deviceId;
- this.options.audioOutput.deviceId = deviceId;
- try {
- await Promise.all(Array.from(this.participants.values()).map(p => p.setAudioOutput({
- deviceId
- })));
- } catch (e) {
- this.options.audioOutput.deviceId = prevDeviceId;
- throw e;
- }
- }
- }
- setupLocalParticipantEvents() {
- this.localParticipant.on(ParticipantEvent.ParticipantMetadataChanged, this.onLocalParticipantMetadataChanged).on(ParticipantEvent.TrackMuted, this.onLocalTrackMuted).on(ParticipantEvent.TrackUnmuted, this.onLocalTrackUnmuted).on(ParticipantEvent.LocalTrackPublished, this.onLocalTrackPublished).on(ParticipantEvent.LocalTrackUnpublished, this.onLocalTrackUnpublished).on(ParticipantEvent.ConnectionQualityChanged, this.onLocalConnectionQualityChanged).on(ParticipantEvent.MediaDevicesError, this.onMediaDevicesError).on(ParticipantEvent.ParticipantPermissionsChanged, this.onLocalParticipantPermissionsChanged);
- }
- recreateEngine() {
- var _a;
- (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close();
- /* @ts-ignore */
- this.engine = undefined;
- // clear out existing remote participants, since they may have attached
- // the old engine
- this.participants.clear();
- this.maybeCreateEngine();
- }
- onTrackAdded(mediaTrack, stream, receiver) {
- // don't fire onSubscribed when connecting
- // WebRTC fires onTrack as soon as setRemoteDescription is called on the offer
- // at that time, ICE connectivity has not been established so the track is not
- // technically subscribed.
- // We'll defer these events until when the room is connected or eventually disconnected.
- if (this.state === ConnectionState.Connecting || this.state === ConnectionState.Reconnecting) {
- const reconnectedHandler = () => {
- this.onTrackAdded(mediaTrack, stream, receiver);
- cleanup();
- };
- const cleanup = () => {
- this.off(RoomEvent.Reconnected, reconnectedHandler);
- this.off(RoomEvent.Connected, reconnectedHandler);
- this.off(RoomEvent.Disconnected, cleanup);
- };
- this.once(RoomEvent.Reconnected, reconnectedHandler);
- this.once(RoomEvent.Connected, reconnectedHandler);
- this.once(RoomEvent.Disconnected, cleanup);
- return;
- }
- if (this.state === ConnectionState.Disconnected) {
- livekitLogger.warn('skipping incoming track after Room disconnected');
- return;
- }
- const parts = unpackStreamId(stream.id);
- const participantId = parts[0];
- let trackId = parts[1];
- if (!trackId || trackId === '') trackId = mediaTrack.id;
- if (participantId === this.localParticipant.sid) {
- livekitLogger.warn('tried to create RemoteParticipant for local participant');
- return;
- }
- const participant = this.getOrCreateParticipant(participantId);
- let adaptiveStreamSettings;
- if (this.options.adaptiveStream) {
- if (typeof this.options.adaptiveStream === 'object') {
- adaptiveStreamSettings = this.options.adaptiveStream;
- } else {
- adaptiveStreamSettings = {};
- }
- }
- participant.addSubscribedMediaTrack(mediaTrack, trackId, stream, receiver, adaptiveStreamSettings);
- }
- handleDisconnect() {
- let shouldStopTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
- let reason = arguments.length > 1 ? arguments[1] : undefined;
- var _a;
- if (this.state === ConnectionState.Disconnected) {
- return;
- }
- this.participants.forEach(p => {
- p.tracks.forEach(pub => {
- p.unpublishTrack(pub.trackSid);
- });
- });
- this.localParticipant.tracks.forEach(pub => {
- var _a, _b;
- if (pub.track) {
- this.localParticipant.unpublishTrack(pub.track, shouldStopTracks);
- }
- if (shouldStopTracks) {
- (_a = pub.track) === null || _a === void 0 ? void 0 : _a.detach();
- (_b = pub.track) === null || _b === void 0 ? void 0 : _b.stop();
- }
- });
- this.localParticipant.off(ParticipantEvent.ParticipantMetadataChanged, this.onLocalParticipantMetadataChanged).off(ParticipantEvent.TrackMuted, this.onLocalTrackMuted).off(ParticipantEvent.TrackUnmuted, this.onLocalTrackUnmuted).off(ParticipantEvent.LocalTrackPublished, this.onLocalTrackPublished).off(ParticipantEvent.LocalTrackUnpublished, this.onLocalTrackUnpublished).off(ParticipantEvent.ConnectionQualityChanged, this.onLocalConnectionQualityChanged).off(ParticipantEvent.MediaDevicesError, this.onMediaDevicesError).off(ParticipantEvent.ParticipantPermissionsChanged, this.onLocalParticipantPermissionsChanged);
- this.localParticipant.tracks.clear();
- this.localParticipant.videoTracks.clear();
- this.localParticipant.audioTracks.clear();
- this.participants.clear();
- this.activeSpeakers = [];
- if (this.audioContext && typeof this.options.expWebAudioMix === 'boolean') {
- this.audioContext.close();
- this.audioContext = undefined;
- }
- if (isWeb()) {
- window.removeEventListener('beforeunload', this.onPageLeave);
- window.removeEventListener('pagehide', this.onPageLeave);
- (_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.removeEventListener('devicechange', this.handleDeviceChange);
- }
- this.setAndEmitConnectionState(ConnectionState.Disconnected);
- this.emit(RoomEvent.Disconnected, reason);
- }
- handleParticipantDisconnected(sid, participant) {
- // remove and send event
- this.participants.delete(sid);
- if (!participant) {
- return;
- }
- this.identityToSid.delete(participant.identity);
- participant.tracks.forEach(publication => {
- participant.unpublishTrack(publication.trackSid, true);
- });
- this.emit(RoomEvent.ParticipantDisconnected, participant);
- }
- async acquireAudioContext() {
- var _a, _b;
- if (typeof this.options.expWebAudioMix !== 'boolean' && this.options.expWebAudioMix.audioContext) {
- // override audio context with custom audio context if supplied by user
- this.audioContext = this.options.expWebAudioMix.audioContext;
- await this.audioContext.resume();
- } else {
- // by using an AudioContext, it reduces lag on audio elements
- // https://stackoverflow.com/questions/9811429/html5-audio-tag-on-safari-has-a-delay/54119854#54119854
- this.audioContext = (_a = getNewAudioContext()) !== null && _a !== void 0 ? _a : undefined;
- }
- if (this.options.expWebAudioMix) {
- this.participants.forEach(participant => participant.setAudioContext(this.audioContext));
- }
- const newContextIsRunning = ((_b = this.audioContext) === null || _b === void 0 ? void 0 : _b.state) === 'running';
- if (newContextIsRunning !== this.canPlaybackAudio) {
- this.audioEnabled = newContextIsRunning;
- this.emit(RoomEvent.AudioPlaybackStatusChanged, newContextIsRunning);
- }
- }
- createParticipant(id, info) {
- let participant;
- if (info) {
- participant = RemoteParticipant.fromParticipantInfo(this.engine.client, info);
- } else {
- participant = new RemoteParticipant(this.engine.client, id, '', undefined, undefined);
- }
- if (this.options.expWebAudioMix) {
- participant.setAudioContext(this.audioContext);
- }
- return participant;
- }
- getOrCreateParticipant(id, info) {
- if (this.participants.has(id)) {
- return this.participants.get(id);
- }
- // it's possible for the RTC track to arrive before signaling data
- // when this happens, we'll create the participant and make the track work
- const participant = this.createParticipant(id, info);
- this.participants.set(id, participant);
- if (info) {
- this.identityToSid.set(info.identity, info.sid);
- // if we have valid info and the participant wasn't in the map before, we can assume the participant is new
- // firing here to make sure that `ParticipantConnected` fires before the initial track events
- this.emitWhenConnected(RoomEvent.ParticipantConnected, participant);
- }
- // also forward events
- // trackPublished is only fired for tracks added after both local participant
- // and remote participant joined the room
- participant.on(ParticipantEvent.TrackPublished, trackPublication => {
- this.emitWhenConnected(RoomEvent.TrackPublished, trackPublication, participant);
- }).on(ParticipantEvent.TrackSubscribed, (track, publication) => {
- // monitor playback status
- if (track.kind === Track.Kind.Audio) {
- track.on(TrackEvent.AudioPlaybackStarted, this.handleAudioPlaybackStarted);
- track.on(TrackEvent.AudioPlaybackFailed, this.handleAudioPlaybackFailed);
- }
- this.emit(RoomEvent.TrackSubscribed, track, publication, participant);
- }).on(ParticipantEvent.TrackUnpublished, publication => {
- this.emit(RoomEvent.TrackUnpublished, publication, participant);
- }).on(ParticipantEvent.TrackUnsubscribed, (track, publication) => {
- this.emit(RoomEvent.TrackUnsubscribed, track, publication, participant);
- }).on(ParticipantEvent.TrackSubscriptionFailed, sid => {
- this.emit(RoomEvent.TrackSubscriptionFailed, sid, participant);
- }).on(ParticipantEvent.TrackMuted, pub => {
- this.emitWhenConnected(RoomEvent.TrackMuted, pub, participant);
- }).on(ParticipantEvent.TrackUnmuted, pub => {
- this.emitWhenConnected(RoomEvent.TrackUnmuted, pub, participant);
- }).on(ParticipantEvent.ParticipantMetadataChanged, metadata => {
- this.emitWhenConnected(RoomEvent.ParticipantMetadataChanged, metadata, participant);
- }).on(ParticipantEvent.ConnectionQualityChanged, quality => {
- this.emitWhenConnected(RoomEvent.ConnectionQualityChanged, quality, participant);
- }).on(ParticipantEvent.ParticipantPermissionsChanged, prevPermissions => {
- this.emitWhenConnected(RoomEvent.ParticipantPermissionsChanged, prevPermissions, participant);
- }).on(ParticipantEvent.TrackSubscriptionStatusChanged, (pub, status) => {
- this.emitWhenConnected(RoomEvent.TrackSubscriptionStatusChanged, pub, status, participant);
- }).on(ParticipantEvent.TrackSubscriptionPermissionChanged, (pub, status) => {
- this.emitWhenConnected(RoomEvent.TrackSubscriptionPermissionChanged, pub, status, participant);
- });
- // update info at the end after callbacks have been set up
- if (info) {
- participant.updateInfo(info);
- }
- return participant;
- }
- sendSyncState() {
- var _a, _b;
- if (this.engine.subscriber === undefined || this.engine.subscriber.pc.localDescription === null) {
- return;
- }
- const previousAnswer = this.engine.subscriber.pc.localDescription;
- const previousOffer = this.engine.subscriber.pc.remoteDescription;
- /* 1. autosubscribe on, so subscribed tracks = all tracks - unsub tracks,
- in this case, we send unsub tracks, so server add all tracks to this
- subscribe pc and unsub special tracks from it.
- 2. autosubscribe off, we send subscribed tracks.
- */
- const autoSubscribe = (_b = (_a = this.connOptions) === null || _a === void 0 ? void 0 : _a.autoSubscribe) !== null && _b !== void 0 ? _b : true;
- const trackSids = new Array();
- this.participants.forEach(participant => {
- participant.tracks.forEach(track => {
- if (track.isDesired !== autoSubscribe) {
- trackSids.push(track.trackSid);
- }
- });
- });
- this.engine.client.sendSyncState({
- answer: toProtoSessionDescription({
- sdp: previousAnswer.sdp,
- type: previousAnswer.type
- }),
- offer: previousOffer ? toProtoSessionDescription({
- sdp: previousOffer.sdp,
- type: previousOffer.type
- }) : undefined,
- subscription: {
- trackSids,
- subscribe: !autoSubscribe,
- participantTracks: []
- },
- publishTracks: this.localParticipant.publishedTracksInfo(),
- dataChannels: this.localParticipant.dataChannelsInfo()
- });
- }
- /**
- * After resuming, we'll need to notify the server of the current
- * subscription settings.
- */
- updateSubscriptions() {
- for (const p of this.participants.values()) {
- for (const pub of p.videoTracks.values()) {
- if (pub.isSubscribed && pub instanceof RemoteTrackPublication) {
- pub.emitTrackUpdate();
- }
- }
- }
- }
- setAndEmitConnectionState(state) {
- if (state === this.state) {
- // unchanged
- return false;
- }
- this.state = state;
- this.emit(RoomEvent.ConnectionStateChanged, this.state);
- return true;
- }
- emitWhenConnected(event) {
- if (this.state === ConnectionState.Connected) {
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- args[_key - 1] = arguments[_key];
- }
- return this.emit(event, ...args);
- }
- return false;
- }
- /**
- * Allows to populate a room with simulated participants.
- * No actual connection to a server will be established, all state is
- * @experimental
- */
- async simulateParticipants(options) {
- var _a, _b;
- const publishOptions = _objectSpread2({
- audio: true,
- video: true,
- useRealTracks: false
- }, options.publish);
- const participantOptions = _objectSpread2({
- count: 9,
- audio: false,
- video: true,
- aspectRatios: [1.66, 1.7, 1.3]
- }, options.participants);
- this.handleDisconnect();
- this.name = 'simulated-room';
- this.localParticipant.updateInfo(ParticipantInfo.fromPartial({
- identity: 'simulated-local',
- name: 'local-name'
- }));
- this.setupLocalParticipantEvents();
- this.emit(RoomEvent.SignalConnected);
- this.emit(RoomEvent.Connected);
- this.setAndEmitConnectionState(ConnectionState.Connected);
- if (publishOptions.video) {
- const camPub = new LocalTrackPublication(Track.Kind.Video, TrackInfo.fromPartial({
- source: TrackSource.CAMERA,
- sid: Math.floor(Math.random() * 10000).toString(),
- type: TrackType.AUDIO,
- name: 'video-dummy'
- }), new LocalVideoTrack(publishOptions.useRealTracks ? (await navigator.mediaDevices.getUserMedia({
- video: true
- })).getVideoTracks()[0] : createDummyVideoStreamTrack((_a = 160 * participantOptions.aspectRatios[0]) !== null && _a !== void 0 ? _a : 1, 160, true, true)));
- // @ts-ignore
- this.localParticipant.addTrackPublication(camPub);
- this.localParticipant.emit(ParticipantEvent.LocalTrackPublished, camPub);
- }
- if (publishOptions.audio) {
- const audioPub = new LocalTrackPublication(Track.Kind.Audio, TrackInfo.fromPartial({
- source: TrackSource.MICROPHONE,
- sid: Math.floor(Math.random() * 10000).toString(),
- type: TrackType.AUDIO
- }), new LocalAudioTrack(publishOptions.useRealTracks ? (await navigator.mediaDevices.getUserMedia({
- audio: true
- })).getAudioTracks()[0] : getEmptyAudioStreamTrack()));
- // @ts-ignore
- this.localParticipant.addTrackPublication(audioPub);
- this.localParticipant.emit(ParticipantEvent.LocalTrackPublished, audioPub);
- }
- for (let i = 0; i < participantOptions.count - 1; i += 1) {
- let info = ParticipantInfo.fromPartial({
- sid: Math.floor(Math.random() * 10000).toString(),
- identity: "simulated-".concat(i),
- state: ParticipantInfo_State.ACTIVE,
- tracks: [],
- joinedAt: Date.now()
- });
- const p = this.getOrCreateParticipant(info.identity, info);
- if (participantOptions.video) {
- const dummyVideo = createDummyVideoStreamTrack((_b = 160 * participantOptions.aspectRatios[i % participantOptions.aspectRatios.length]) !== null && _b !== void 0 ? _b : 1, 160, false, true);
- const videoTrack = TrackInfo.fromPartial({
- source: TrackSource.CAMERA,
- sid: Math.floor(Math.random() * 10000).toString(),
- type: TrackType.AUDIO
- });
- p.addSubscribedMediaTrack(dummyVideo, videoTrack.sid, new MediaStream([dummyVideo]));
- info.tracks = [...info.tracks, videoTrack];
- }
- if (participantOptions.audio) {
- const dummyTrack = getEmptyAudioStreamTrack();
- const audioTrack = TrackInfo.fromPartial({
- source: TrackSource.MICROPHONE,
- sid: Math.floor(Math.random() * 10000).toString(),
- type: TrackType.AUDIO
- });
- p.addSubscribedMediaTrack(dummyTrack, audioTrack.sid, new MediaStream([dummyTrack]));
- info.tracks = [...info.tracks, audioTrack];
- }
- p.updateInfo(info);
- }
- }
- // /** @internal */
- emit(event) {
- for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
- args[_key2 - 1] = arguments[_key2];
- }
- // active speaker updates are too spammy
- if (event !== RoomEvent.ActiveSpeakersChanged) {
- livekitLogger.debug("room event ".concat(event), {
- event,
- args
- });
- }
- return super.emit(event, ...args);
- }
-}
-
-/**
- * Creates a local video and audio track at the same time. When acquiring both
- * audio and video tracks together, it'll display a single permission prompt to
- * the user instead of two separate ones.
- * @param options
- */
-async function createLocalTracks(options) {
- var _a, _b;
- // set default options to true
- options !== null && options !== void 0 ? options : options = {};
- (_a = options.audio) !== null && _a !== void 0 ? _a : options.audio = true;
- (_b = options.video) !== null && _b !== void 0 ? _b : options.video = true;
- const opts = mergeDefaultOptions(options, audioDefaults, videoDefaults);
- const constraints = constraintsForOptions(opts);
- // Keep a reference to the promise on DeviceManager and await it in getLocalDevices()
- // works around iOS Safari Bug https://bugs.webkit.org/show_bug.cgi?id=179363
- const mediaPromise = navigator.mediaDevices.getUserMedia(constraints);
- if (options.audio) {
- DeviceManager.userMediaPromiseMap.set('audioinput', mediaPromise);
- mediaPromise.catch(() => DeviceManager.userMediaPromiseMap.delete('audioinput'));
- }
- if (options.video) {
- DeviceManager.userMediaPromiseMap.set('videoinput', mediaPromise);
- mediaPromise.catch(() => DeviceManager.userMediaPromiseMap.delete('videoinput'));
- }
- const stream = await mediaPromise;
- return stream.getTracks().map(mediaStreamTrack => {
- const isAudio = mediaStreamTrack.kind === 'audio';
- isAudio ? options.audio : options.video;
- let trackConstraints;
- const conOrBool = isAudio ? constraints.audio : constraints.video;
- if (typeof conOrBool !== 'boolean') {
- trackConstraints = conOrBool;
- }
- const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints);
- if (track.kind === Track.Kind.Video) {
- track.source = Track.Source.Camera;
- } else if (track.kind === Track.Kind.Audio) {
- track.source = Track.Source.Microphone;
- }
- track.mediaStream = stream;
- return track;
- });
-}
-/**
- * Creates a [[LocalVideoTrack]] with getUserMedia()
- * @param options
- */
-async function createLocalVideoTrack(options) {
- const tracks = await createLocalTracks({
- audio: false,
- video: options
- });
- return tracks[0];
-}
-async function createLocalAudioTrack(options) {
- const tracks = await createLocalTracks({
- audio: options,
- video: false
- });
- return tracks[0];
-}
-/**
- * Creates a screen capture tracks with getDisplayMedia().
- * A LocalVideoTrack is always created and returned.
- * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.
- */
-async function createLocalScreenTracks(options) {
- var _a;
- if (options === undefined) {
- options = {};
- }
- if (options.resolution === undefined) {
- options.resolution = VideoPresets.h1080.resolution;
- }
- let videoConstraints = true;
- if (options.resolution) {
- videoConstraints = {
- width: options.resolution.width,
- height: options.resolution.height
- };
- }
- if (navigator.mediaDevices.getDisplayMedia === undefined) {
- throw new DeviceUnsupportedError('getDisplayMedia not supported');
- }
- // typescript definition is missing getDisplayMedia: https://github.com/microsoft/TypeScript/issues/33232
- // @ts-ignore
- const stream = await navigator.mediaDevices.getDisplayMedia({
- audio: (_a = options.audio) !== null && _a !== void 0 ? _a : false,
- video: videoConstraints
- });
- const tracks = stream.getVideoTracks();
- if (tracks.length === 0) {
- throw new TrackInvalidError('no video track found');
- }
- const screenVideo = new LocalVideoTrack(tracks[0], undefined, false);
- screenVideo.source = Track.Source.ScreenShare;
- const localTracks = [screenVideo];
- if (stream.getAudioTracks().length > 0) {
- const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false);
- screenAudio.source = Track.Source.ScreenShareAudio;
- localTracks.push(screenAudio);
- }
- return localTracks;
-}
-
-var CheckStatus;
-(function (CheckStatus) {
- CheckStatus[CheckStatus["IDLE"] = 0] = "IDLE";
- CheckStatus[CheckStatus["RUNNING"] = 1] = "RUNNING";
- CheckStatus[CheckStatus["SKIPPED"] = 2] = "SKIPPED";
- CheckStatus[CheckStatus["SUCCESS"] = 3] = "SUCCESS";
- CheckStatus[CheckStatus["FAILED"] = 4] = "FAILED";
-})(CheckStatus || (CheckStatus = {}));
-class Checker extends eventsExports.EventEmitter {
- constructor(url, token) {
- let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
- super();
- this.status = CheckStatus.IDLE;
- this.logs = [];
- this.errorsAsWarnings = false;
- this.url = url;
- this.token = token;
- this.name = this.constructor.name;
- this.room = new Room(options.roomOptions);
- this.connectOptions = options.connectOptions;
- if (options.errorsAsWarnings) {
- this.errorsAsWarnings = options.errorsAsWarnings;
- }
- }
- async run(onComplete) {
- if (this.status !== CheckStatus.IDLE) {
- throw Error('check is running already');
- }
- this.setStatus(CheckStatus.RUNNING);
- this.appendMessage("".concat(this.name, " started."));
- try {
- await this.perform();
- } catch (err) {
- if (err instanceof Error) {
- if (this.errorsAsWarnings) {
- this.appendWarning(err.message);
- } else {
- this.appendError(err.message);
- }
- }
- }
- await this.disconnect();
- // sleep for a bit to ensure disconnect
- await new Promise(resolve => setTimeout(resolve, 500));
- // @ts-ignore
- if (this.status !== CheckStatus.SKIPPED) {
- this.setStatus(this.isSuccess() ? CheckStatus.SUCCESS : CheckStatus.FAILED);
- }
- if (onComplete) {
- onComplete();
- }
- return this.getInfo();
- }
- isSuccess() {
- return !this.logs.some(l => l.level === 'error');
- }
- async connect() {
- if (this.room.state === ConnectionState.Connected) {
- return this.room;
- }
- await this.room.connect(this.url, this.token);
- return this.room;
- }
- async disconnect() {
- if (this.room && this.room.state !== ConnectionState.Disconnected) {
- await this.room.disconnect();
- // wait for it to go through
- await new Promise(resolve => setTimeout(resolve, 500));
- }
- }
- skip() {
- this.setStatus(CheckStatus.SKIPPED);
- }
- appendMessage(message) {
- this.logs.push({
- level: 'info',
- message
- });
- this.emit('update', this.getInfo());
- }
- appendWarning(message) {
- this.logs.push({
- level: 'warning',
- message
- });
- this.emit('update', this.getInfo());
- }
- appendError(message) {
- this.logs.push({
- level: 'error',
- message
- });
- this.emit('update', this.getInfo());
- }
- setStatus(status) {
- this.status = status;
- this.emit('update', this.getInfo());
- }
- get engine() {
- var _a;
- return (_a = this.room) === null || _a === void 0 ? void 0 : _a.engine;
- }
- getInfo() {
- return {
- logs: this.logs,
- name: this.name,
- status: this.status,
- description: this.description
- };
- }
-}
-
-class PublishAudioCheck extends Checker {
- get description() {
- return 'Can publish audio';
- }
- async perform() {
- var _a;
- const room = await this.connect();
- const track = await createLocalAudioTrack();
- room.localParticipant.publishTrack(track);
- // wait for a few seconds to publish
- await new Promise(resolve => setTimeout(resolve, 3000));
- // verify RTC stats that it's publishing
- const stats = await ((_a = track.sender) === null || _a === void 0 ? void 0 : _a.getStats());
- if (!stats) {
- throw new Error('Could not get RTCStats');
- }
- let numPackets = 0;
- stats.forEach(stat => {
- if (stat.type === 'outbound-rtp' && stat.mediaType === 'audio') {
- numPackets = stat.packetsSent;
- }
- });
- if (numPackets === 0) {
- throw new Error('Could not determine packets are sent');
- }
- this.appendMessage("published ".concat(numPackets, " audio packets"));
- }
-}
-
-class PublishVideoCheck extends Checker {
- get description() {
- return 'Can publish video';
- }
- async perform() {
- var _a;
- const room = await this.connect();
- const track = await createLocalVideoTrack();
- room.localParticipant.publishTrack(track);
- // wait for a few seconds to publish
- await new Promise(resolve => setTimeout(resolve, 3000));
- // verify RTC stats that it's publishing
- const stats = await ((_a = track.sender) === null || _a === void 0 ? void 0 : _a.getStats());
- if (!stats) {
- throw new Error('Could not get RTCStats');
- }
- let numPackets = 0;
- stats.forEach(stat => {
- if (stat.type === 'outbound-rtp' && stat.mediaType === 'video') {
- numPackets = stat.packetsSent;
- }
- });
- if (numPackets === 0) {
- throw new Error('Could not determine packets are sent');
- }
- this.appendMessage("published ".concat(numPackets, " video packets"));
- }
-}
-
-class ReconnectCheck extends Checker {
- get description() {
- return 'Resuming connection after interruption';
- }
- async perform() {
- var _a;
- const room = await this.connect();
- let reconnectingTriggered = false;
- let reconnected = false;
- let reconnectResolver;
- const reconnectTimeout = new Promise(resolve => {
- setTimeout(resolve, 5000);
- reconnectResolver = resolve;
- });
- room.on(RoomEvent.Reconnecting, () => {
- reconnectingTriggered = true;
- }).on(RoomEvent.Reconnected, () => {
- reconnected = true;
- reconnectResolver(true);
- });
- (_a = room.engine.client.ws) === null || _a === void 0 ? void 0 : _a.close();
- const onClose = room.engine.client.onClose;
- if (onClose) {
- onClose('');
- }
- await reconnectTimeout;
- if (!reconnectingTriggered) {
- throw new Error('Did not attempt to reconnect');
- } else if (!reconnected || room.state !== ConnectionState.Connected) {
- this.appendWarning('reconnection is only possible in Redis-based configurations');
- throw new Error('Not able to reconnect');
- }
- }
-}
-
-class TURNCheck extends Checker {
- get description() {
- return 'Can connect via TURN';
- }
- async perform() {
- var _a, _b;
- const signalClient = new SignalClient();
- const joinRes = await signalClient.join(this.url, this.token, {
- autoSubscribe: true,
- maxRetries: 0
- });
- let hasTLS = false;
- let hasTURN = false;
- let hasSTUN = false;
- for (let iceServer of joinRes.iceServers) {
- for (let url of iceServer.urls) {
- if (url.startsWith('turn:')) {
- hasTURN = true;
- hasSTUN = true;
- } else if (url.startsWith('turns:')) {
- hasTURN = true;
- hasSTUN = true;
- hasTLS = true;
- }
- if (url.startsWith('stun:')) {
- hasSTUN = true;
- }
- }
- }
- if (!hasSTUN) {
- this.appendWarning('No STUN servers configured on server side.');
- } else if (hasTURN && !hasTLS) {
- this.appendWarning('TURN is configured server side, but TURN/TLS is unavailable.');
- }
- await signalClient.close();
- if (((_b = (_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.rtcConfig) === null || _b === void 0 ? void 0 : _b.iceServers) || hasTURN) {
- await this.room.connect(this.url, this.token, {
- rtcConfig: {
- iceTransportPolicy: 'relay'
- }
- });
- } else {
- this.appendWarning('No TURN servers configured.');
- this.skip();
- await new Promise(resolve => setTimeout(resolve, 0));
- }
- }
-}
-
-class WebRTCCheck extends Checker {
- get description() {
- return 'Establishing WebRTC connection';
- }
- async perform() {
- try {
- console.log('initiating room connection');
- this.room = await this.connect();
- console.log('now the room is connected');
- } catch (err) {
- this.appendWarning('ports need to be open on firewall in order to connect.');
- throw err;
- }
- }
-}
-
-class WebSocketCheck extends Checker {
- get description() {
- return 'Connecting to signal connection via WebSocket';
- }
- async perform() {
- if (this.url.startsWith('ws:') || this.url.startsWith('http:')) {
- this.appendWarning('Server is insecure, clients may block connections to it');
- }
- let signalClient = new SignalClient();
- const joinRes = await signalClient.join(this.url, this.token, {
- autoSubscribe: true,
- maxRetries: 0
- });
- this.appendMessage("Connected to server, version ".concat(joinRes.serverVersion, "."));
- await signalClient.close();
- }
-}
-
-class ConnectionCheck extends eventsExports {
- constructor(url, token) {
- super();
- this.checkResults = new Map();
- this.url = url;
- this.token = token;
- }
- getNextCheckId() {
- const nextId = this.checkResults.size;
- this.checkResults.set(nextId, {
- logs: [],
- status: CheckStatus.IDLE,
- name: '',
- description: ''
- });
- return nextId;
- }
- updateCheck(checkId, info) {
- this.checkResults.set(checkId, info);
- this.emit('checkUpdate', checkId, info);
- }
- isSuccess() {
- return Array.from(this.checkResults.values()).every(r => r.status !== CheckStatus.FAILED);
- }
- getResults() {
- return Array.from(this.checkResults.values());
- }
- async createAndRunCheck(check) {
- const checkId = this.getNextCheckId();
- const test = new check(this.url, this.token);
- const handleUpdate = info => {
- this.updateCheck(checkId, info);
- };
- test.on('update', handleUpdate);
- const result = await test.run();
- test.off('update', handleUpdate);
- return result;
- }
- async checkWebsocket() {
- return this.createAndRunCheck(WebSocketCheck);
- }
- async checkWebRTC() {
- return this.createAndRunCheck(WebRTCCheck);
- }
- async checkTURN() {
- return this.createAndRunCheck(TURNCheck);
- }
- async checkReconnect() {
- return this.createAndRunCheck(ReconnectCheck);
- }
- async checkPublishAudio() {
- return this.createAndRunCheck(PublishAudioCheck);
- }
- async checkPublishVideo() {
- return this.createAndRunCheck(PublishVideoCheck);
- }
-}
-
-
-//# sourceMappingURL=livekit-client.esm.mjs.map
-
-
/***/ }),
/***/ "./node_modules/@firebase/app/dist/esm/index.esm2017.js":
@@ -40089,24 +17382,24 @@ class ConnectionCheck extends eventsExports {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "FirebaseError": () => (/* reexport safe */ _firebase_util__WEBPACK_IMPORTED_MODULE_2__.FirebaseError),
-/* harmony export */ "SDK_VERSION": () => (/* binding */ SDK_VERSION),
-/* harmony export */ "_DEFAULT_ENTRY_NAME": () => (/* binding */ DEFAULT_ENTRY_NAME),
-/* harmony export */ "_addComponent": () => (/* binding */ _addComponent),
-/* harmony export */ "_addOrOverwriteComponent": () => (/* binding */ _addOrOverwriteComponent),
-/* harmony export */ "_apps": () => (/* binding */ _apps),
-/* harmony export */ "_clearComponents": () => (/* binding */ _clearComponents),
-/* harmony export */ "_components": () => (/* binding */ _components),
-/* harmony export */ "_getProvider": () => (/* binding */ _getProvider),
-/* harmony export */ "_registerComponent": () => (/* binding */ _registerComponent),
-/* harmony export */ "_removeServiceInstance": () => (/* binding */ _removeServiceInstance),
-/* harmony export */ "deleteApp": () => (/* binding */ deleteApp),
-/* harmony export */ "getApp": () => (/* binding */ getApp),
-/* harmony export */ "getApps": () => (/* binding */ getApps),
-/* harmony export */ "initializeApp": () => (/* binding */ initializeApp),
-/* harmony export */ "onLog": () => (/* binding */ onLog),
-/* harmony export */ "registerVersion": () => (/* binding */ registerVersion),
-/* harmony export */ "setLogLevel": () => (/* binding */ setLogLevel)
+/* harmony export */ FirebaseError: () => (/* reexport safe */ _firebase_util__WEBPACK_IMPORTED_MODULE_2__.FirebaseError),
+/* harmony export */ SDK_VERSION: () => (/* binding */ SDK_VERSION),
+/* harmony export */ _DEFAULT_ENTRY_NAME: () => (/* binding */ DEFAULT_ENTRY_NAME),
+/* harmony export */ _addComponent: () => (/* binding */ _addComponent),
+/* harmony export */ _addOrOverwriteComponent: () => (/* binding */ _addOrOverwriteComponent),
+/* harmony export */ _apps: () => (/* binding */ _apps),
+/* harmony export */ _clearComponents: () => (/* binding */ _clearComponents),
+/* harmony export */ _components: () => (/* binding */ _components),
+/* harmony export */ _getProvider: () => (/* binding */ _getProvider),
+/* harmony export */ _registerComponent: () => (/* binding */ _registerComponent),
+/* harmony export */ _removeServiceInstance: () => (/* binding */ _removeServiceInstance),
+/* harmony export */ deleteApp: () => (/* binding */ deleteApp),
+/* harmony export */ getApp: () => (/* binding */ getApp),
+/* harmony export */ getApps: () => (/* binding */ getApps),
+/* harmony export */ initializeApp: () => (/* binding */ initializeApp),
+/* harmony export */ onLog: () => (/* binding */ onLog),
+/* harmony export */ registerVersion: () => (/* binding */ registerVersion),
+/* harmony export */ setLogLevel: () => (/* binding */ setLogLevel)
/* harmony export */ });
/* harmony import */ var _firebase_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/component */ "./node_modules/@firebase/component/dist/esm/index.esm2017.js");
/* harmony import */ var _firebase_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @firebase/logger */ "./node_modules/@firebase/logger/dist/esm/index.esm2017.js");
@@ -40172,7 +17465,7 @@ function isVersionServiceProvider(provider) {
}
const name$o = "@firebase/app";
-const version$1 = "0.9.5";
+const version$1 = "0.9.12";
/**
* @license
@@ -40239,7 +17532,7 @@ const name$2 = "@firebase/firestore";
const name$1 = "@firebase/firestore-compat";
const name = "firebase";
-const version = "9.18.0";
+const version = "9.22.2";
/**
* @license
@@ -40415,7 +17708,7 @@ function _clearComponents() {
*/
const ERRORS = {
["no-app" /* AppError.NO_APP */]: "No Firebase App '{$appName}' has been created - " +
- 'call Firebase App.initializeApp()',
+ 'call initializeApp() first',
["bad-app-name" /* AppError.BAD_APP_NAME */]: "Illegal App name: '{$appName}",
["duplicate-app" /* AppError.DUPLICATE_APP */]: "Firebase App named '{$appName}' already exists with different options or config",
["app-deleted" /* AppError.APP_DELETED */]: "Firebase App named '{$appName}' already deleted",
@@ -40586,7 +17879,7 @@ function initializeApp(_options, rawConfig = {}) {
*/
function getApp(name = DEFAULT_ENTRY_NAME) {
const app = _apps.get(name);
- if (!app && name === DEFAULT_ENTRY_NAME) {
+ if (!app && name === DEFAULT_ENTRY_NAME && (0,_firebase_util__WEBPACK_IMPORTED_MODULE_2__.getDefaultAppConfig)()) {
return initializeApp();
}
if (!app) {
@@ -40735,10 +18028,11 @@ function getDbPromise() {
async function readHeartbeatsFromIndexedDB(app) {
try {
const db = await getDbPromise();
- return db
+ const result = await db
.transaction(STORE_NAME)
.objectStore(STORE_NAME)
.get(computeKey(app));
+ return result;
}
catch (e) {
if (e instanceof _firebase_util__WEBPACK_IMPORTED_MODULE_2__.FirebaseError) {
@@ -40758,7 +18052,7 @@ async function writeHeartbeatsToIndexedDB(app, heartbeatObject) {
const tx = db.transaction(STORE_NAME, 'readwrite');
const objectStore = tx.objectStore(STORE_NAME);
await objectStore.put(heartbeatObject, computeKey(app));
- return tx.done;
+ await tx.done;
}
catch (e) {
if (e instanceof _firebase_util__WEBPACK_IMPORTED_MODULE_2__.FirebaseError) {
@@ -41057,9 +18351,9 @@ registerCoreComponents('');
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "Component": () => (/* binding */ Component),
-/* harmony export */ "ComponentContainer": () => (/* binding */ ComponentContainer),
-/* harmony export */ "Provider": () => (/* binding */ Provider)
+/* harmony export */ Component: () => (/* binding */ Component),
+/* harmony export */ ComponentContainer: () => (/* binding */ ComponentContainer),
+/* harmony export */ Provider: () => (/* binding */ Provider)
/* harmony export */ });
/* harmony import */ var _firebase_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/util */ "./node_modules/@firebase/util/dist/index.esm2017.js");
@@ -41483,16 +18777,16 @@ class ComponentContainer {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "deleteInstallations": () => (/* binding */ deleteInstallations),
-/* harmony export */ "getId": () => (/* binding */ getId),
-/* harmony export */ "getInstallations": () => (/* binding */ getInstallations),
-/* harmony export */ "getToken": () => (/* binding */ getToken),
-/* harmony export */ "onIdChange": () => (/* binding */ onIdChange)
+/* harmony export */ deleteInstallations: () => (/* binding */ deleteInstallations),
+/* harmony export */ getId: () => (/* binding */ getId),
+/* harmony export */ getInstallations: () => (/* binding */ getInstallations),
+/* harmony export */ getToken: () => (/* binding */ getToken),
+/* harmony export */ onIdChange: () => (/* binding */ onIdChange)
/* harmony export */ });
/* harmony import */ var _firebase_app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/app */ "./node_modules/@firebase/app/dist/esm/index.esm2017.js");
/* harmony import */ var _firebase_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @firebase/component */ "./node_modules/@firebase/component/dist/esm/index.esm2017.js");
/* harmony import */ var _firebase_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @firebase/util */ "./node_modules/@firebase/util/dist/index.esm2017.js");
-/* harmony import */ var idb__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! idb */ "./node_modules/idb/build/index.js");
+/* harmony import */ var idb__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! idb */ "./node_modules/@firebase/installations/node_modules/idb/build/index.js");
@@ -42649,6 +19943,315 @@ registerInstallations();
//# sourceMappingURL=index.esm2017.js.map
+/***/ }),
+
+/***/ "./node_modules/@firebase/installations/node_modules/idb/build/index.js":
+/*!******************************************************************************!*\
+ !*** ./node_modules/@firebase/installations/node_modules/idb/build/index.js ***!
+ \******************************************************************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ deleteDB: () => (/* binding */ deleteDB),
+/* harmony export */ openDB: () => (/* binding */ openDB),
+/* harmony export */ unwrap: () => (/* reexport safe */ _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.u),
+/* harmony export */ wrap: () => (/* reexport safe */ _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)
+/* harmony export */ });
+/* harmony import */ var _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wrap-idb-value.js */ "./node_modules/@firebase/installations/node_modules/idb/build/wrap-idb-value.js");
+
+
+
+/**
+ * Open a database.
+ *
+ * @param name Name of the database.
+ * @param version Schema version.
+ * @param callbacks Additional callbacks.
+ */
+function openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {
+ const request = indexedDB.open(name, version);
+ const openPromise = (0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)(request);
+ if (upgrade) {
+ request.addEventListener('upgradeneeded', (event) => {
+ upgrade((0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)(request.result), event.oldVersion, event.newVersion, (0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)(request.transaction));
+ });
+ }
+ if (blocked)
+ request.addEventListener('blocked', () => blocked());
+ openPromise
+ .then((db) => {
+ if (terminated)
+ db.addEventListener('close', () => terminated());
+ if (blocking)
+ db.addEventListener('versionchange', () => blocking());
+ })
+ .catch(() => { });
+ return openPromise;
+}
+/**
+ * Delete a database.
+ *
+ * @param name Name of the database.
+ */
+function deleteDB(name, { blocked } = {}) {
+ const request = indexedDB.deleteDatabase(name);
+ if (blocked)
+ request.addEventListener('blocked', () => blocked());
+ return (0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)(request).then(() => undefined);
+}
+
+const readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];
+const writeMethods = ['put', 'add', 'delete', 'clear'];
+const cachedMethods = new Map();
+function getMethod(target, prop) {
+ if (!(target instanceof IDBDatabase &&
+ !(prop in target) &&
+ typeof prop === 'string')) {
+ return;
+ }
+ if (cachedMethods.get(prop))
+ return cachedMethods.get(prop);
+ const targetFuncName = prop.replace(/FromIndex$/, '');
+ const useIndex = prop !== targetFuncName;
+ const isWrite = writeMethods.includes(targetFuncName);
+ if (
+ // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.
+ !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||
+ !(isWrite || readMethods.includes(targetFuncName))) {
+ return;
+ }
+ const method = async function (storeName, ...args) {
+ // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(
+ const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');
+ let target = tx.store;
+ if (useIndex)
+ target = target.index(args.shift());
+ // Must reject if op rejects.
+ // If it's a write operation, must reject if tx.done rejects.
+ // Must reject with op rejection first.
+ // Must resolve with op value.
+ // Must handle both promises (no unhandled rejections)
+ return (await Promise.all([
+ target[targetFuncName](...args),
+ isWrite && tx.done,
+ ]))[0];
+ };
+ cachedMethods.set(prop, method);
+ return method;
+}
+(0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.r)((oldTraps) => ({
+ ...oldTraps,
+ get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),
+ has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),
+}));
+
+
+
+
+/***/ }),
+
+/***/ "./node_modules/@firebase/installations/node_modules/idb/build/wrap-idb-value.js":
+/*!***************************************************************************************!*\
+ !*** ./node_modules/@firebase/installations/node_modules/idb/build/wrap-idb-value.js ***!
+ \***************************************************************************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ a: () => (/* binding */ reverseTransformCache),
+/* harmony export */ i: () => (/* binding */ instanceOfAny),
+/* harmony export */ r: () => (/* binding */ replaceTraps),
+/* harmony export */ u: () => (/* binding */ unwrap),
+/* harmony export */ w: () => (/* binding */ wrap)
+/* harmony export */ });
+const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);
+
+let idbProxyableTypes;
+let cursorAdvanceMethods;
+// This is a function to prevent it throwing up in node environments.
+function getIdbProxyableTypes() {
+ return (idbProxyableTypes ||
+ (idbProxyableTypes = [
+ IDBDatabase,
+ IDBObjectStore,
+ IDBIndex,
+ IDBCursor,
+ IDBTransaction,
+ ]));
+}
+// This is a function to prevent it throwing up in node environments.
+function getCursorAdvanceMethods() {
+ return (cursorAdvanceMethods ||
+ (cursorAdvanceMethods = [
+ IDBCursor.prototype.advance,
+ IDBCursor.prototype.continue,
+ IDBCursor.prototype.continuePrimaryKey,
+ ]));
+}
+const cursorRequestMap = new WeakMap();
+const transactionDoneMap = new WeakMap();
+const transactionStoreNamesMap = new WeakMap();
+const transformCache = new WeakMap();
+const reverseTransformCache = new WeakMap();
+function promisifyRequest(request) {
+ const promise = new Promise((resolve, reject) => {
+ const unlisten = () => {
+ request.removeEventListener('success', success);
+ request.removeEventListener('error', error);
+ };
+ const success = () => {
+ resolve(wrap(request.result));
+ unlisten();
+ };
+ const error = () => {
+ reject(request.error);
+ unlisten();
+ };
+ request.addEventListener('success', success);
+ request.addEventListener('error', error);
+ });
+ promise
+ .then((value) => {
+ // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval
+ // (see wrapFunction).
+ if (value instanceof IDBCursor) {
+ cursorRequestMap.set(value, request);
+ }
+ // Catching to avoid "Uncaught Promise exceptions"
+ })
+ .catch(() => { });
+ // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This
+ // is because we create many promises from a single IDBRequest.
+ reverseTransformCache.set(promise, request);
+ return promise;
+}
+function cacheDonePromiseForTransaction(tx) {
+ // Early bail if we've already created a done promise for this transaction.
+ if (transactionDoneMap.has(tx))
+ return;
+ const done = new Promise((resolve, reject) => {
+ const unlisten = () => {
+ tx.removeEventListener('complete', complete);
+ tx.removeEventListener('error', error);
+ tx.removeEventListener('abort', error);
+ };
+ const complete = () => {
+ resolve();
+ unlisten();
+ };
+ const error = () => {
+ reject(tx.error || new DOMException('AbortError', 'AbortError'));
+ unlisten();
+ };
+ tx.addEventListener('complete', complete);
+ tx.addEventListener('error', error);
+ tx.addEventListener('abort', error);
+ });
+ // Cache it for later retrieval.
+ transactionDoneMap.set(tx, done);
+}
+let idbProxyTraps = {
+ get(target, prop, receiver) {
+ if (target instanceof IDBTransaction) {
+ // Special handling for transaction.done.
+ if (prop === 'done')
+ return transactionDoneMap.get(target);
+ // Polyfill for objectStoreNames because of Edge.
+ if (prop === 'objectStoreNames') {
+ return target.objectStoreNames || transactionStoreNamesMap.get(target);
+ }
+ // Make tx.store return the only store in the transaction, or undefined if there are many.
+ if (prop === 'store') {
+ return receiver.objectStoreNames[1]
+ ? undefined
+ : receiver.objectStore(receiver.objectStoreNames[0]);
+ }
+ }
+ // Else transform whatever we get back.
+ return wrap(target[prop]);
+ },
+ set(target, prop, value) {
+ target[prop] = value;
+ return true;
+ },
+ has(target, prop) {
+ if (target instanceof IDBTransaction &&
+ (prop === 'done' || prop === 'store')) {
+ return true;
+ }
+ return prop in target;
+ },
+};
+function replaceTraps(callback) {
+ idbProxyTraps = callback(idbProxyTraps);
+}
+function wrapFunction(func) {
+ // Due to expected object equality (which is enforced by the caching in `wrap`), we
+ // only create one new func per func.
+ // Edge doesn't support objectStoreNames (booo), so we polyfill it here.
+ if (func === IDBDatabase.prototype.transaction &&
+ !('objectStoreNames' in IDBTransaction.prototype)) {
+ return function (storeNames, ...args) {
+ const tx = func.call(unwrap(this), storeNames, ...args);
+ transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);
+ return wrap(tx);
+ };
+ }
+ // Cursor methods are special, as the behaviour is a little more different to standard IDB. In
+ // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the
+ // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense
+ // with real promises, so each advance methods returns a new promise for the cursor object, or
+ // undefined if the end of the cursor has been reached.
+ if (getCursorAdvanceMethods().includes(func)) {
+ return function (...args) {
+ // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use
+ // the original object.
+ func.apply(unwrap(this), args);
+ return wrap(cursorRequestMap.get(this));
+ };
+ }
+ return function (...args) {
+ // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use
+ // the original object.
+ return wrap(func.apply(unwrap(this), args));
+ };
+}
+function transformCachableValue(value) {
+ if (typeof value === 'function')
+ return wrapFunction(value);
+ // This doesn't return, it just creates a 'done' promise for the transaction,
+ // which is later returned for transaction.done (see idbObjectHandler).
+ if (value instanceof IDBTransaction)
+ cacheDonePromiseForTransaction(value);
+ if (instanceOfAny(value, getIdbProxyableTypes()))
+ return new Proxy(value, idbProxyTraps);
+ // Return the same value back if we're not going to transform it.
+ return value;
+}
+function wrap(value) {
+ // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because
+ // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.
+ if (value instanceof IDBRequest)
+ return promisifyRequest(value);
+ // If we've already transformed this value before, reuse the transformed value.
+ // This is faster, but it also provides object equality.
+ if (transformCache.has(value))
+ return transformCache.get(value);
+ const newValue = transformCachableValue(value);
+ // Not all types are transformed.
+ // These may be primitive types, so they can't be WeakMap keys.
+ if (newValue !== value) {
+ transformCache.set(value, newValue);
+ reverseTransformCache.set(newValue, value);
+ }
+ return newValue;
+}
+const unwrap = (value) => reverseTransformCache.get(value);
+
+
+
+
/***/ }),
/***/ "./node_modules/@firebase/logger/dist/esm/index.esm2017.js":
@@ -42659,10 +20262,10 @@ registerInstallations();
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "LogLevel": () => (/* binding */ LogLevel),
-/* harmony export */ "Logger": () => (/* binding */ Logger),
-/* harmony export */ "setLogLevel": () => (/* binding */ setLogLevel),
-/* harmony export */ "setUserLogHandler": () => (/* binding */ setUserLogHandler)
+/* harmony export */ LogLevel: () => (/* binding */ LogLevel),
+/* harmony export */ Logger: () => (/* binding */ Logger),
+/* harmony export */ setLogLevel: () => (/* binding */ setLogLevel),
+/* harmony export */ setUserLogHandler: () => (/* binding */ setUserLogHandler)
/* harmony export */ });
/**
* @license
@@ -42895,15 +20498,15 @@ function setUserLogHandler(logCallback, options) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "deleteToken": () => (/* binding */ deleteToken),
-/* harmony export */ "getMessaging": () => (/* binding */ getMessagingInWindow),
-/* harmony export */ "getToken": () => (/* binding */ getToken),
-/* harmony export */ "isSupported": () => (/* binding */ isWindowSupported),
-/* harmony export */ "onMessage": () => (/* binding */ onMessage)
+/* harmony export */ deleteToken: () => (/* binding */ deleteToken),
+/* harmony export */ getMessaging: () => (/* binding */ getMessagingInWindow),
+/* harmony export */ getToken: () => (/* binding */ getToken),
+/* harmony export */ isSupported: () => (/* binding */ isWindowSupported),
+/* harmony export */ onMessage: () => (/* binding */ onMessage)
/* harmony export */ });
/* harmony import */ var _firebase_installations__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/installations */ "./node_modules/@firebase/installations/dist/esm/index.esm2017.js");
/* harmony import */ var _firebase_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @firebase/component */ "./node_modules/@firebase/component/dist/esm/index.esm2017.js");
-/* harmony import */ var idb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! idb */ "./node_modules/idb/build/index.js");
+/* harmony import */ var idb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! idb */ "./node_modules/@firebase/messaging/node_modules/idb/build/index.js");
/* harmony import */ var _firebase_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @firebase/util */ "./node_modules/@firebase/util/dist/index.esm2017.js");
/* harmony import */ var _firebase_app__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @firebase/app */ "./node_modules/@firebase/app/dist/esm/index.esm2017.js");
@@ -44144,97 +21747,20 @@ registerMessagingInWindow();
/***/ }),
-/***/ "./node_modules/firebase/app/dist/esm/index.esm.js":
-/*!*********************************************************!*\
- !*** ./node_modules/firebase/app/dist/esm/index.esm.js ***!
- \*********************************************************/
+/***/ "./node_modules/@firebase/messaging/node_modules/idb/build/index.js":
+/*!**************************************************************************!*\
+ !*** ./node_modules/@firebase/messaging/node_modules/idb/build/index.js ***!
+ \**************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "FirebaseError": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.FirebaseError),
-/* harmony export */ "SDK_VERSION": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION),
-/* harmony export */ "_DEFAULT_ENTRY_NAME": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._DEFAULT_ENTRY_NAME),
-/* harmony export */ "_addComponent": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._addComponent),
-/* harmony export */ "_addOrOverwriteComponent": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._addOrOverwriteComponent),
-/* harmony export */ "_apps": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._apps),
-/* harmony export */ "_clearComponents": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._clearComponents),
-/* harmony export */ "_components": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._components),
-/* harmony export */ "_getProvider": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._getProvider),
-/* harmony export */ "_registerComponent": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._registerComponent),
-/* harmony export */ "_removeServiceInstance": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._removeServiceInstance),
-/* harmony export */ "deleteApp": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.deleteApp),
-/* harmony export */ "getApp": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.getApp),
-/* harmony export */ "getApps": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.getApps),
-/* harmony export */ "initializeApp": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.initializeApp),
-/* harmony export */ "onLog": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.onLog),
-/* harmony export */ "registerVersion": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.registerVersion),
-/* harmony export */ "setLogLevel": () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.setLogLevel)
+/* harmony export */ deleteDB: () => (/* binding */ deleteDB),
+/* harmony export */ openDB: () => (/* binding */ openDB),
+/* harmony export */ unwrap: () => (/* reexport safe */ _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.u),
+/* harmony export */ wrap: () => (/* reexport safe */ _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)
/* harmony export */ });
-/* harmony import */ var _firebase_app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/app */ "./node_modules/@firebase/app/dist/esm/index.esm2017.js");
-
-
-
-var name = "firebase";
-var version = "9.18.0";
-
-/**
- * @license
- * Copyright 2020 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-(0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__.registerVersion)(name, version, 'app');
-//# sourceMappingURL=index.esm.js.map
-
-
-/***/ }),
-
-/***/ "./node_modules/firebase/messaging/dist/esm/index.esm.js":
-/*!***************************************************************!*\
- !*** ./node_modules/firebase/messaging/dist/esm/index.esm.js ***!
- \***************************************************************/
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "deleteToken": () => (/* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.deleteToken),
-/* harmony export */ "getMessaging": () => (/* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.getMessaging),
-/* harmony export */ "getToken": () => (/* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.getToken),
-/* harmony export */ "isSupported": () => (/* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.isSupported),
-/* harmony export */ "onMessage": () => (/* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.onMessage)
-/* harmony export */ });
-/* harmony import */ var _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/messaging */ "./node_modules/@firebase/messaging/dist/esm/index.esm2017.js");
-
-//# sourceMappingURL=index.esm.js.map
-
-
-/***/ }),
-
-/***/ "./node_modules/idb/build/index.js":
-/*!*****************************************!*\
- !*** ./node_modules/idb/build/index.js ***!
- \*****************************************/
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "deleteDB": () => (/* binding */ deleteDB),
-/* harmony export */ "openDB": () => (/* binding */ openDB),
-/* harmony export */ "unwrap": () => (/* reexport safe */ _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.u),
-/* harmony export */ "wrap": () => (/* reexport safe */ _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)
-/* harmony export */ });
-/* harmony import */ var _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wrap-idb-value.js */ "./node_modules/idb/build/wrap-idb-value.js");
+/* harmony import */ var _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wrap-idb-value.js */ "./node_modules/@firebase/messaging/node_modules/idb/build/wrap-idb-value.js");
@@ -44327,19 +21853,19 @@ function getMethod(target, prop) {
/***/ }),
-/***/ "./node_modules/idb/build/wrap-idb-value.js":
-/*!**************************************************!*\
- !*** ./node_modules/idb/build/wrap-idb-value.js ***!
- \**************************************************/
+/***/ "./node_modules/@firebase/messaging/node_modules/idb/build/wrap-idb-value.js":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/@firebase/messaging/node_modules/idb/build/wrap-idb-value.js ***!
+ \***********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "a": () => (/* binding */ reverseTransformCache),
-/* harmony export */ "i": () => (/* binding */ instanceOfAny),
-/* harmony export */ "r": () => (/* binding */ replaceTraps),
-/* harmony export */ "u": () => (/* binding */ unwrap),
-/* harmony export */ "w": () => (/* binding */ wrap)
+/* harmony export */ a: () => (/* binding */ reverseTransformCache),
+/* harmony export */ i: () => (/* binding */ instanceOfAny),
+/* harmony export */ r: () => (/* binding */ replaceTraps),
+/* harmony export */ u: () => (/* binding */ unwrap),
+/* harmony export */ w: () => (/* binding */ wrap)
/* harmony export */ });
const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);
@@ -44528,6 +22054,24302 @@ const unwrap = (value) => reverseTransformCache.get(value);
+/***/ }),
+
+/***/ "./node_modules/firebase/app/dist/esm/index.esm.js":
+/*!*********************************************************!*\
+ !*** ./node_modules/firebase/app/dist/esm/index.esm.js ***!
+ \*********************************************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ FirebaseError: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.FirebaseError),
+/* harmony export */ SDK_VERSION: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION),
+/* harmony export */ _DEFAULT_ENTRY_NAME: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._DEFAULT_ENTRY_NAME),
+/* harmony export */ _addComponent: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._addComponent),
+/* harmony export */ _addOrOverwriteComponent: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._addOrOverwriteComponent),
+/* harmony export */ _apps: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._apps),
+/* harmony export */ _clearComponents: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._clearComponents),
+/* harmony export */ _components: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._components),
+/* harmony export */ _getProvider: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._getProvider),
+/* harmony export */ _registerComponent: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._registerComponent),
+/* harmony export */ _removeServiceInstance: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__._removeServiceInstance),
+/* harmony export */ deleteApp: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.deleteApp),
+/* harmony export */ getApp: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.getApp),
+/* harmony export */ getApps: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.getApps),
+/* harmony export */ initializeApp: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.initializeApp),
+/* harmony export */ onLog: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.onLog),
+/* harmony export */ registerVersion: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.registerVersion),
+/* harmony export */ setLogLevel: () => (/* reexport safe */ _firebase_app__WEBPACK_IMPORTED_MODULE_0__.setLogLevel)
+/* harmony export */ });
+/* harmony import */ var _firebase_app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/app */ "./node_modules/@firebase/app/dist/esm/index.esm2017.js");
+
+
+
+var name = "firebase";
+var version = "9.22.2";
+
+/**
+ * @license
+ * Copyright 2020 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+(0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__.registerVersion)(name, version, 'app');
+//# sourceMappingURL=index.esm.js.map
+
+
+/***/ }),
+
+/***/ "./node_modules/firebase/messaging/dist/esm/index.esm.js":
+/*!***************************************************************!*\
+ !*** ./node_modules/firebase/messaging/dist/esm/index.esm.js ***!
+ \***************************************************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ deleteToken: () => (/* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.deleteToken),
+/* harmony export */ getMessaging: () => (/* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.getMessaging),
+/* harmony export */ getToken: () => (/* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.getToken),
+/* harmony export */ isSupported: () => (/* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.isSupported),
+/* harmony export */ onMessage: () => (/* reexport safe */ _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__.onMessage)
+/* harmony export */ });
+/* harmony import */ var _firebase_messaging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @firebase/messaging */ "./node_modules/@firebase/messaging/dist/esm/index.esm2017.js");
+
+//# sourceMappingURL=index.esm.js.map
+
+
+/***/ }),
+
+/***/ "./node_modules/idb/build/index.js":
+/*!*****************************************!*\
+ !*** ./node_modules/idb/build/index.js ***!
+ \*****************************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ deleteDB: () => (/* binding */ deleteDB),
+/* harmony export */ openDB: () => (/* binding */ openDB),
+/* harmony export */ unwrap: () => (/* reexport safe */ _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.u),
+/* harmony export */ wrap: () => (/* reexport safe */ _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)
+/* harmony export */ });
+/* harmony import */ var _wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wrap-idb-value.js */ "./node_modules/idb/build/wrap-idb-value.js");
+
+
+
+/**
+ * Open a database.
+ *
+ * @param name Name of the database.
+ * @param version Schema version.
+ * @param callbacks Additional callbacks.
+ */
+function openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {
+ const request = indexedDB.open(name, version);
+ const openPromise = (0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)(request);
+ if (upgrade) {
+ request.addEventListener('upgradeneeded', (event) => {
+ upgrade((0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)(request.result), event.oldVersion, event.newVersion, (0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)(request.transaction), event);
+ });
+ }
+ if (blocked) {
+ request.addEventListener('blocked', (event) => blocked(
+ // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405
+ event.oldVersion, event.newVersion, event));
+ }
+ openPromise
+ .then((db) => {
+ if (terminated)
+ db.addEventListener('close', () => terminated());
+ if (blocking) {
+ db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));
+ }
+ })
+ .catch(() => { });
+ return openPromise;
+}
+/**
+ * Delete a database.
+ *
+ * @param name Name of the database.
+ */
+function deleteDB(name, { blocked } = {}) {
+ const request = indexedDB.deleteDatabase(name);
+ if (blocked) {
+ request.addEventListener('blocked', (event) => blocked(
+ // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405
+ event.oldVersion, event));
+ }
+ return (0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.w)(request).then(() => undefined);
+}
+
+const readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];
+const writeMethods = ['put', 'add', 'delete', 'clear'];
+const cachedMethods = new Map();
+function getMethod(target, prop) {
+ if (!(target instanceof IDBDatabase &&
+ !(prop in target) &&
+ typeof prop === 'string')) {
+ return;
+ }
+ if (cachedMethods.get(prop))
+ return cachedMethods.get(prop);
+ const targetFuncName = prop.replace(/FromIndex$/, '');
+ const useIndex = prop !== targetFuncName;
+ const isWrite = writeMethods.includes(targetFuncName);
+ if (
+ // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.
+ !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||
+ !(isWrite || readMethods.includes(targetFuncName))) {
+ return;
+ }
+ const method = async function (storeName, ...args) {
+ // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(
+ const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');
+ let target = tx.store;
+ if (useIndex)
+ target = target.index(args.shift());
+ // Must reject if op rejects.
+ // If it's a write operation, must reject if tx.done rejects.
+ // Must reject with op rejection first.
+ // Must resolve with op value.
+ // Must handle both promises (no unhandled rejections)
+ return (await Promise.all([
+ target[targetFuncName](...args),
+ isWrite && tx.done,
+ ]))[0];
+ };
+ cachedMethods.set(prop, method);
+ return method;
+}
+(0,_wrap_idb_value_js__WEBPACK_IMPORTED_MODULE_0__.r)((oldTraps) => ({
+ ...oldTraps,
+ get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),
+ has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),
+}));
+
+
+
+
+/***/ }),
+
+/***/ "./node_modules/idb/build/wrap-idb-value.js":
+/*!**************************************************!*\
+ !*** ./node_modules/idb/build/wrap-idb-value.js ***!
+ \**************************************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ a: () => (/* binding */ reverseTransformCache),
+/* harmony export */ i: () => (/* binding */ instanceOfAny),
+/* harmony export */ r: () => (/* binding */ replaceTraps),
+/* harmony export */ u: () => (/* binding */ unwrap),
+/* harmony export */ w: () => (/* binding */ wrap)
+/* harmony export */ });
+const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);
+
+let idbProxyableTypes;
+let cursorAdvanceMethods;
+// This is a function to prevent it throwing up in node environments.
+function getIdbProxyableTypes() {
+ return (idbProxyableTypes ||
+ (idbProxyableTypes = [
+ IDBDatabase,
+ IDBObjectStore,
+ IDBIndex,
+ IDBCursor,
+ IDBTransaction,
+ ]));
+}
+// This is a function to prevent it throwing up in node environments.
+function getCursorAdvanceMethods() {
+ return (cursorAdvanceMethods ||
+ (cursorAdvanceMethods = [
+ IDBCursor.prototype.advance,
+ IDBCursor.prototype.continue,
+ IDBCursor.prototype.continuePrimaryKey,
+ ]));
+}
+const cursorRequestMap = new WeakMap();
+const transactionDoneMap = new WeakMap();
+const transactionStoreNamesMap = new WeakMap();
+const transformCache = new WeakMap();
+const reverseTransformCache = new WeakMap();
+function promisifyRequest(request) {
+ const promise = new Promise((resolve, reject) => {
+ const unlisten = () => {
+ request.removeEventListener('success', success);
+ request.removeEventListener('error', error);
+ };
+ const success = () => {
+ resolve(wrap(request.result));
+ unlisten();
+ };
+ const error = () => {
+ reject(request.error);
+ unlisten();
+ };
+ request.addEventListener('success', success);
+ request.addEventListener('error', error);
+ });
+ promise
+ .then((value) => {
+ // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval
+ // (see wrapFunction).
+ if (value instanceof IDBCursor) {
+ cursorRequestMap.set(value, request);
+ }
+ // Catching to avoid "Uncaught Promise exceptions"
+ })
+ .catch(() => { });
+ // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This
+ // is because we create many promises from a single IDBRequest.
+ reverseTransformCache.set(promise, request);
+ return promise;
+}
+function cacheDonePromiseForTransaction(tx) {
+ // Early bail if we've already created a done promise for this transaction.
+ if (transactionDoneMap.has(tx))
+ return;
+ const done = new Promise((resolve, reject) => {
+ const unlisten = () => {
+ tx.removeEventListener('complete', complete);
+ tx.removeEventListener('error', error);
+ tx.removeEventListener('abort', error);
+ };
+ const complete = () => {
+ resolve();
+ unlisten();
+ };
+ const error = () => {
+ reject(tx.error || new DOMException('AbortError', 'AbortError'));
+ unlisten();
+ };
+ tx.addEventListener('complete', complete);
+ tx.addEventListener('error', error);
+ tx.addEventListener('abort', error);
+ });
+ // Cache it for later retrieval.
+ transactionDoneMap.set(tx, done);
+}
+let idbProxyTraps = {
+ get(target, prop, receiver) {
+ if (target instanceof IDBTransaction) {
+ // Special handling for transaction.done.
+ if (prop === 'done')
+ return transactionDoneMap.get(target);
+ // Polyfill for objectStoreNames because of Edge.
+ if (prop === 'objectStoreNames') {
+ return target.objectStoreNames || transactionStoreNamesMap.get(target);
+ }
+ // Make tx.store return the only store in the transaction, or undefined if there are many.
+ if (prop === 'store') {
+ return receiver.objectStoreNames[1]
+ ? undefined
+ : receiver.objectStore(receiver.objectStoreNames[0]);
+ }
+ }
+ // Else transform whatever we get back.
+ return wrap(target[prop]);
+ },
+ set(target, prop, value) {
+ target[prop] = value;
+ return true;
+ },
+ has(target, prop) {
+ if (target instanceof IDBTransaction &&
+ (prop === 'done' || prop === 'store')) {
+ return true;
+ }
+ return prop in target;
+ },
+};
+function replaceTraps(callback) {
+ idbProxyTraps = callback(idbProxyTraps);
+}
+function wrapFunction(func) {
+ // Due to expected object equality (which is enforced by the caching in `wrap`), we
+ // only create one new func per func.
+ // Edge doesn't support objectStoreNames (booo), so we polyfill it here.
+ if (func === IDBDatabase.prototype.transaction &&
+ !('objectStoreNames' in IDBTransaction.prototype)) {
+ return function (storeNames, ...args) {
+ const tx = func.call(unwrap(this), storeNames, ...args);
+ transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);
+ return wrap(tx);
+ };
+ }
+ // Cursor methods are special, as the behaviour is a little more different to standard IDB. In
+ // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the
+ // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense
+ // with real promises, so each advance methods returns a new promise for the cursor object, or
+ // undefined if the end of the cursor has been reached.
+ if (getCursorAdvanceMethods().includes(func)) {
+ return function (...args) {
+ // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use
+ // the original object.
+ func.apply(unwrap(this), args);
+ return wrap(cursorRequestMap.get(this));
+ };
+ }
+ return function (...args) {
+ // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use
+ // the original object.
+ return wrap(func.apply(unwrap(this), args));
+ };
+}
+function transformCachableValue(value) {
+ if (typeof value === 'function')
+ return wrapFunction(value);
+ // This doesn't return, it just creates a 'done' promise for the transaction,
+ // which is later returned for transaction.done (see idbObjectHandler).
+ if (value instanceof IDBTransaction)
+ cacheDonePromiseForTransaction(value);
+ if (instanceOfAny(value, getIdbProxyableTypes()))
+ return new Proxy(value, idbProxyTraps);
+ // Return the same value back if we're not going to transform it.
+ return value;
+}
+function wrap(value) {
+ // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because
+ // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.
+ if (value instanceof IDBRequest)
+ return promisifyRequest(value);
+ // If we've already transformed this value before, reuse the transformed value.
+ // This is faster, but it also provides object equality.
+ if (transformCache.has(value))
+ return transformCache.get(value);
+ const newValue = transformCachableValue(value);
+ // Not all types are transformed.
+ // These may be primitive types, so they can't be WeakMap keys.
+ if (newValue !== value) {
+ transformCache.set(value, newValue);
+ reverseTransformCache.set(newValue, value);
+ }
+ return newValue;
+}
+const unwrap = (value) => reverseTransformCache.get(value);
+
+
+
+
+/***/ }),
+
+/***/ "./node_modules/livekit-client/dist/livekit-client.esm.mjs":
+/*!*****************************************************************!*\
+ !*** ./node_modules/livekit-client/dist/livekit-client.esm.mjs ***!
+ \*****************************************************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ AudioPresets: () => (/* binding */ AudioPresets),
+/* harmony export */ ConnectionCheck: () => (/* binding */ ConnectionCheck),
+/* harmony export */ ConnectionError: () => (/* binding */ ConnectionError),
+/* harmony export */ ConnectionQuality: () => (/* binding */ ConnectionQuality),
+/* harmony export */ ConnectionState: () => (/* binding */ ConnectionState),
+/* harmony export */ CriticalTimers: () => (/* binding */ CriticalTimers),
+/* harmony export */ DataPacket_Kind: () => (/* binding */ DataPacket_Kind),
+/* harmony export */ DefaultReconnectPolicy: () => (/* binding */ DefaultReconnectPolicy),
+/* harmony export */ DeviceUnsupportedError: () => (/* binding */ DeviceUnsupportedError),
+/* harmony export */ DisconnectReason: () => (/* binding */ DisconnectReason),
+/* harmony export */ EngineEvent: () => (/* binding */ EngineEvent),
+/* harmony export */ LivekitError: () => (/* binding */ LivekitError),
+/* harmony export */ LocalAudioTrack: () => (/* binding */ LocalAudioTrack),
+/* harmony export */ LocalParticipant: () => (/* binding */ LocalParticipant),
+/* harmony export */ LocalTrack: () => (/* binding */ LocalTrack),
+/* harmony export */ LocalTrackPublication: () => (/* binding */ LocalTrackPublication),
+/* harmony export */ LocalVideoTrack: () => (/* binding */ LocalVideoTrack),
+/* harmony export */ LogLevel: () => (/* binding */ LogLevel),
+/* harmony export */ MediaDeviceFailure: () => (/* binding */ MediaDeviceFailure),
+/* harmony export */ NegotiationError: () => (/* binding */ NegotiationError),
+/* harmony export */ Participant: () => (/* binding */ Participant),
+/* harmony export */ ParticipantEvent: () => (/* binding */ ParticipantEvent),
+/* harmony export */ PublishDataError: () => (/* binding */ PublishDataError),
+/* harmony export */ RemoteAudioTrack: () => (/* binding */ RemoteAudioTrack),
+/* harmony export */ RemoteParticipant: () => (/* binding */ RemoteParticipant),
+/* harmony export */ RemoteTrack: () => (/* binding */ RemoteTrack),
+/* harmony export */ RemoteTrackPublication: () => (/* binding */ RemoteTrackPublication),
+/* harmony export */ RemoteVideoTrack: () => (/* binding */ RemoteVideoTrack),
+/* harmony export */ Room: () => (/* binding */ Room),
+/* harmony export */ RoomEvent: () => (/* binding */ RoomEvent),
+/* harmony export */ RoomState: () => (/* binding */ RoomState),
+/* harmony export */ ScreenSharePresets: () => (/* binding */ ScreenSharePresets),
+/* harmony export */ Track: () => (/* binding */ Track),
+/* harmony export */ TrackEvent: () => (/* binding */ TrackEvent),
+/* harmony export */ TrackInvalidError: () => (/* binding */ TrackInvalidError),
+/* harmony export */ TrackPublication: () => (/* binding */ TrackPublication),
+/* harmony export */ UnexpectedConnectionState: () => (/* binding */ UnexpectedConnectionState),
+/* harmony export */ UnsupportedServer: () => (/* binding */ UnsupportedServer),
+/* harmony export */ VideoPreset: () => (/* binding */ VideoPreset),
+/* harmony export */ VideoPresets: () => (/* binding */ VideoPresets),
+/* harmony export */ VideoPresets43: () => (/* binding */ VideoPresets43),
+/* harmony export */ VideoQuality: () => (/* binding */ VideoQuality),
+/* harmony export */ attachToElement: () => (/* binding */ attachToElement),
+/* harmony export */ createAudioAnalyser: () => (/* binding */ createAudioAnalyser),
+/* harmony export */ createLocalAudioTrack: () => (/* binding */ createLocalAudioTrack),
+/* harmony export */ createLocalScreenTracks: () => (/* binding */ createLocalScreenTracks),
+/* harmony export */ createLocalTracks: () => (/* binding */ createLocalTracks),
+/* harmony export */ createLocalVideoTrack: () => (/* binding */ createLocalVideoTrack),
+/* harmony export */ detachTrack: () => (/* binding */ detachTrack),
+/* harmony export */ getEmptyAudioStreamTrack: () => (/* binding */ getEmptyAudioStreamTrack),
+/* harmony export */ getEmptyVideoStreamTrack: () => (/* binding */ getEmptyVideoStreamTrack),
+/* harmony export */ isBackupCodec: () => (/* binding */ isBackupCodec),
+/* harmony export */ isBrowserSupported: () => (/* binding */ isBrowserSupported),
+/* harmony export */ isCodecEqual: () => (/* binding */ isCodecEqual),
+/* harmony export */ protocolVersion: () => (/* binding */ protocolVersion),
+/* harmony export */ setLogExtension: () => (/* binding */ setLogExtension),
+/* harmony export */ setLogLevel: () => (/* binding */ setLogLevel),
+/* harmony export */ supportsAV1: () => (/* binding */ supportsAV1),
+/* harmony export */ supportsAdaptiveStream: () => (/* binding */ supportsAdaptiveStream),
+/* harmony export */ supportsDynacast: () => (/* binding */ supportsDynacast),
+/* harmony export */ supportsVP9: () => (/* binding */ supportsVP9),
+/* harmony export */ version: () => (/* binding */ version)
+/* harmony export */ });
+function _mergeNamespaces(n, m) {
+ m.forEach(function (e) {
+ e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {
+ if (k !== 'default' && !(k in n)) {
+ var d = Object.getOwnPropertyDescriptor(e, k);
+ Object.defineProperty(n, k, d.get ? d : {
+ enumerable: true,
+ get: function () { return e[k]; }
+ });
+ }
+ });
+ });
+ return Object.freeze(n);
+}
+
+var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function getDefaultExportFromCjs (x) {
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
+}
+
+var loglevel = {exports: {}};
+
+/*
+* loglevel - https://github.com/pimterry/loglevel
+*
+* Copyright (c) 2013 Tim Perry
+* Licensed under the MIT license.
+*/
+(function (module) {
+ (function (root, definition) {
+
+ if (module.exports) {
+ module.exports = definition();
+ } else {
+ root.log = definition();
+ }
+ })(commonjsGlobal, function () {
+
+ // Slightly dubious tricks to cut down minimized file size
+ var noop = function () {};
+ var undefinedType = "undefined";
+ var isIE = typeof window !== undefinedType && typeof window.navigator !== undefinedType && /Trident\/|MSIE /.test(window.navigator.userAgent);
+ var logMethods = ["trace", "debug", "info", "warn", "error"];
+
+ // Cross-browser bind equivalent that works at least back to IE6
+ function bindMethod(obj, methodName) {
+ var method = obj[methodName];
+ if (typeof method.bind === 'function') {
+ return method.bind(obj);
+ } else {
+ try {
+ return Function.prototype.bind.call(method, obj);
+ } catch (e) {
+ // Missing bind shim or IE8 + Modernizr, fallback to wrapping
+ return function () {
+ return Function.prototype.apply.apply(method, [obj, arguments]);
+ };
+ }
+ }
+ }
+
+ // Trace() doesn't print the message in IE, so for that case we need to wrap it
+ function traceForIE() {
+ if (console.log) {
+ if (console.log.apply) {
+ console.log.apply(console, arguments);
+ } else {
+ // In old IE, native console methods themselves don't have apply().
+ Function.prototype.apply.apply(console.log, [console, arguments]);
+ }
+ }
+ if (console.trace) console.trace();
+ }
+
+ // Build the best logging method possible for this env
+ // Wherever possible we want to bind, not wrap, to preserve stack traces
+ function realMethod(methodName) {
+ if (methodName === 'debug') {
+ methodName = 'log';
+ }
+ if (typeof console === undefinedType) {
+ return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives
+ } else if (methodName === 'trace' && isIE) {
+ return traceForIE;
+ } else if (console[methodName] !== undefined) {
+ return bindMethod(console, methodName);
+ } else if (console.log !== undefined) {
+ return bindMethod(console, 'log');
+ } else {
+ return noop;
+ }
+ }
+
+ // These private functions always need `this` to be set properly
+
+ function replaceLoggingMethods(level, loggerName) {
+ /*jshint validthis:true */
+ for (var i = 0; i < logMethods.length; i++) {
+ var methodName = logMethods[i];
+ this[methodName] = i < level ? noop : this.methodFactory(methodName, level, loggerName);
+ }
+
+ // Define log.log as an alias for log.debug
+ this.log = this.debug;
+ }
+
+ // In old IE versions, the console isn't present until you first open it.
+ // We build realMethod() replacements here that regenerate logging methods
+ function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {
+ return function () {
+ if (typeof console !== undefinedType) {
+ replaceLoggingMethods.call(this, level, loggerName);
+ this[methodName].apply(this, arguments);
+ }
+ };
+ }
+
+ // By default, we use closely bound real methods wherever possible, and
+ // otherwise we wait for a console to appear, and then try again.
+ function defaultMethodFactory(methodName, level, loggerName) {
+ /*jshint validthis:true */
+ return realMethod(methodName) || enableLoggingWhenConsoleArrives.apply(this, arguments);
+ }
+ function Logger(name, defaultLevel, factory) {
+ var self = this;
+ var currentLevel;
+ defaultLevel = defaultLevel == null ? "WARN" : defaultLevel;
+ var storageKey = "loglevel";
+ if (typeof name === "string") {
+ storageKey += ":" + name;
+ } else if (typeof name === "symbol") {
+ storageKey = undefined;
+ }
+ function persistLevelIfPossible(levelNum) {
+ var levelName = (logMethods[levelNum] || 'silent').toUpperCase();
+ if (typeof window === undefinedType || !storageKey) return;
+
+ // Use localStorage if available
+ try {
+ window.localStorage[storageKey] = levelName;
+ return;
+ } catch (ignore) {}
+
+ // Use session cookie as fallback
+ try {
+ window.document.cookie = encodeURIComponent(storageKey) + "=" + levelName + ";";
+ } catch (ignore) {}
+ }
+ function getPersistedLevel() {
+ var storedLevel;
+ if (typeof window === undefinedType || !storageKey) return;
+ try {
+ storedLevel = window.localStorage[storageKey];
+ } catch (ignore) {}
+
+ // Fallback to cookies if local storage gives us nothing
+ if (typeof storedLevel === undefinedType) {
+ try {
+ var cookie = window.document.cookie;
+ var location = cookie.indexOf(encodeURIComponent(storageKey) + "=");
+ if (location !== -1) {
+ storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];
+ }
+ } catch (ignore) {}
+ }
+
+ // If the stored level is not valid, treat it as if nothing was stored.
+ if (self.levels[storedLevel] === undefined) {
+ storedLevel = undefined;
+ }
+ return storedLevel;
+ }
+ function clearPersistedLevel() {
+ if (typeof window === undefinedType || !storageKey) return;
+
+ // Use localStorage if available
+ try {
+ window.localStorage.removeItem(storageKey);
+ return;
+ } catch (ignore) {}
+
+ // Use session cookie as fallback
+ try {
+ window.document.cookie = encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
+ } catch (ignore) {}
+ }
+
+ /*
+ *
+ * Public logger API - see https://github.com/pimterry/loglevel for details
+ *
+ */
+
+ self.name = name;
+ self.levels = {
+ "TRACE": 0,
+ "DEBUG": 1,
+ "INFO": 2,
+ "WARN": 3,
+ "ERROR": 4,
+ "SILENT": 5
+ };
+ self.methodFactory = factory || defaultMethodFactory;
+ self.getLevel = function () {
+ return currentLevel;
+ };
+ self.setLevel = function (level, persist) {
+ if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) {
+ level = self.levels[level.toUpperCase()];
+ }
+ if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) {
+ currentLevel = level;
+ if (persist !== false) {
+ // defaults to true
+ persistLevelIfPossible(level);
+ }
+ replaceLoggingMethods.call(self, level, name);
+ if (typeof console === undefinedType && level < self.levels.SILENT) {
+ return "No console available for logging";
+ }
+ } else {
+ throw "log.setLevel() called with invalid level: " + level;
+ }
+ };
+ self.setDefaultLevel = function (level) {
+ defaultLevel = level;
+ if (!getPersistedLevel()) {
+ self.setLevel(level, false);
+ }
+ };
+ self.resetLevel = function () {
+ self.setLevel(defaultLevel, false);
+ clearPersistedLevel();
+ };
+ self.enableAll = function (persist) {
+ self.setLevel(self.levels.TRACE, persist);
+ };
+ self.disableAll = function (persist) {
+ self.setLevel(self.levels.SILENT, persist);
+ };
+
+ // Initialize with the right level
+ var initialLevel = getPersistedLevel();
+ if (initialLevel == null) {
+ initialLevel = defaultLevel;
+ }
+ self.setLevel(initialLevel, false);
+ }
+
+ /*
+ *
+ * Top-level API
+ *
+ */
+
+ var defaultLogger = new Logger();
+ var _loggersByName = {};
+ defaultLogger.getLogger = function getLogger(name) {
+ if (typeof name !== "symbol" && typeof name !== "string" || name === "") {
+ throw new TypeError("You must supply a name when creating a logger.");
+ }
+ var logger = _loggersByName[name];
+ if (!logger) {
+ logger = _loggersByName[name] = new Logger(name, defaultLogger.getLevel(), defaultLogger.methodFactory);
+ }
+ return logger;
+ };
+
+ // Grab the current global log variable in case of overwrite
+ var _log = typeof window !== undefinedType ? window.log : undefined;
+ defaultLogger.noConflict = function () {
+ if (typeof window !== undefinedType && window.log === defaultLogger) {
+ window.log = _log;
+ }
+ return defaultLogger;
+ };
+ defaultLogger.getLoggers = function getLoggers() {
+ return _loggersByName;
+ };
+
+ // ES6 default export, for compatibility
+ defaultLogger['default'] = defaultLogger;
+ return defaultLogger;
+ });
+})(loglevel);
+var loglevelExports = loglevel.exports;
+
+var LogLevel;
+(function (LogLevel) {
+ LogLevel[LogLevel["trace"] = 0] = "trace";
+ LogLevel[LogLevel["debug"] = 1] = "debug";
+ LogLevel[LogLevel["info"] = 2] = "info";
+ LogLevel[LogLevel["warn"] = 3] = "warn";
+ LogLevel[LogLevel["error"] = 4] = "error";
+ LogLevel[LogLevel["silent"] = 5] = "silent";
+})(LogLevel || (LogLevel = {}));
+const livekitLogger = loglevelExports.getLogger('livekit');
+livekitLogger.setLevel(LogLevel.info);
+function setLogLevel(level) {
+ livekitLogger.setLevel(level);
+}
+/**
+ * use this to hook into the logging function to allow sending internal livekit logs to third party services
+ * if set, the browser logs will lose their stacktrace information (see https://github.com/pimterry/loglevel#writing-plugins)
+ */
+function setLogExtension(extension) {
+ const originalFactory = livekitLogger.methodFactory;
+ livekitLogger.methodFactory = (methodName, logLevel, loggerName) => {
+ const rawMethod = originalFactory(methodName, logLevel, loggerName);
+ const configLevel = livekitLogger.getLevel();
+ const needLog = logLevel >= configLevel && logLevel < LogLevel.silent;
+ return (msg, context) => {
+ if (context) rawMethod(msg, context);else rawMethod(msg);
+ if (needLog) {
+ extension(logLevel, msg, context);
+ }
+ };
+ };
+ livekitLogger.setLevel(livekitLogger.getLevel()); // Be sure to call setLevel method in order to apply plugin
+}
+
+var long = Long;
+
+/**
+ * wasm optimizations, to do native i64 multiplication and divide
+ */
+var wasm = null;
+try {
+ wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11])), {}).exports;
+} catch (e) {
+ // no wasm support :(
+}
+
+/**
+ * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.
+ * See the from* functions below for more convenient ways of constructing Longs.
+ * @exports Long
+ * @class A Long class for representing a 64 bit two's-complement integer value.
+ * @param {number} low The low (signed) 32 bits of the long
+ * @param {number} high The high (signed) 32 bits of the long
+ * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
+ * @constructor
+ */
+function Long(low, high, unsigned) {
+ /**
+ * The low 32 bits as a signed value.
+ * @type {number}
+ */
+ this.low = low | 0;
+
+ /**
+ * The high 32 bits as a signed value.
+ * @type {number}
+ */
+ this.high = high | 0;
+
+ /**
+ * Whether unsigned or not.
+ * @type {boolean}
+ */
+ this.unsigned = !!unsigned;
+}
+
+// The internal representation of a long is the two given signed, 32-bit values.
+// We use 32-bit pieces because these are the size of integers on which
+// Javascript performs bit-operations. For operations like addition and
+// multiplication, we split each number into 16 bit pieces, which can easily be
+// multiplied within Javascript's floating-point representation without overflow
+// or change in sign.
+//
+// In the algorithms below, we frequently reduce the negative case to the
+// positive case by negating the input(s) and then post-processing the result.
+// Note that we must ALWAYS check specially whether those values are MIN_VALUE
+// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as
+// a positive number, it overflows back into a negative). Not handling this
+// case would often result in infinite recursion.
+//
+// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*
+// methods on which they depend.
+
+/**
+ * An indicator used to reliably determine if an object is a Long or not.
+ * @type {boolean}
+ * @const
+ * @private
+ */
+Long.prototype.__isLong__;
+Object.defineProperty(Long.prototype, "__isLong__", {
+ value: true
+});
+
+/**
+ * @function
+ * @param {*} obj Object
+ * @returns {boolean}
+ * @inner
+ */
+function isLong(obj) {
+ return (obj && obj["__isLong__"]) === true;
+}
+
+/**
+ * Tests if the specified object is a Long.
+ * @function
+ * @param {*} obj Object
+ * @returns {boolean}
+ */
+Long.isLong = isLong;
+
+/**
+ * A cache of the Long representations of small integer values.
+ * @type {!Object}
+ * @inner
+ */
+var INT_CACHE = {};
+
+/**
+ * A cache of the Long representations of small unsigned integer values.
+ * @type {!Object}
+ * @inner
+ */
+var UINT_CACHE = {};
+
+/**
+ * @param {number} value
+ * @param {boolean=} unsigned
+ * @returns {!Long}
+ * @inner
+ */
+function fromInt(value, unsigned) {
+ var obj, cachedObj, cache;
+ if (unsigned) {
+ value >>>= 0;
+ if (cache = 0 <= value && value < 256) {
+ cachedObj = UINT_CACHE[value];
+ if (cachedObj) return cachedObj;
+ }
+ obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);
+ if (cache) UINT_CACHE[value] = obj;
+ return obj;
+ } else {
+ value |= 0;
+ if (cache = -128 <= value && value < 128) {
+ cachedObj = INT_CACHE[value];
+ if (cachedObj) return cachedObj;
+ }
+ obj = fromBits(value, value < 0 ? -1 : 0, false);
+ if (cache) INT_CACHE[value] = obj;
+ return obj;
+ }
+}
+
+/**
+ * Returns a Long representing the given 32 bit integer value.
+ * @function
+ * @param {number} value The 32 bit integer in question
+ * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
+ * @returns {!Long} The corresponding Long value
+ */
+Long.fromInt = fromInt;
+
+/**
+ * @param {number} value
+ * @param {boolean=} unsigned
+ * @returns {!Long}
+ * @inner
+ */
+function fromNumber(value, unsigned) {
+ if (isNaN(value)) return unsigned ? UZERO : ZERO;
+ if (unsigned) {
+ if (value < 0) return UZERO;
+ if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;
+ } else {
+ if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;
+ if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;
+ }
+ if (value < 0) return fromNumber(-value, unsigned).neg();
+ return fromBits(value % TWO_PWR_32_DBL | 0, value / TWO_PWR_32_DBL | 0, unsigned);
+}
+
+/**
+ * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.
+ * @function
+ * @param {number} value The number in question
+ * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
+ * @returns {!Long} The corresponding Long value
+ */
+Long.fromNumber = fromNumber;
+
+/**
+ * @param {number} lowBits
+ * @param {number} highBits
+ * @param {boolean=} unsigned
+ * @returns {!Long}
+ * @inner
+ */
+function fromBits(lowBits, highBits, unsigned) {
+ return new Long(lowBits, highBits, unsigned);
+}
+
+/**
+ * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is
+ * assumed to use 32 bits.
+ * @function
+ * @param {number} lowBits The low 32 bits
+ * @param {number} highBits The high 32 bits
+ * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
+ * @returns {!Long} The corresponding Long value
+ */
+Long.fromBits = fromBits;
+
+/**
+ * @function
+ * @param {number} base
+ * @param {number} exponent
+ * @returns {number}
+ * @inner
+ */
+var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)
+
+/**
+ * @param {string} str
+ * @param {(boolean|number)=} unsigned
+ * @param {number=} radix
+ * @returns {!Long}
+ * @inner
+ */
+function fromString(str, unsigned, radix) {
+ if (str.length === 0) throw Error('empty string');
+ if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity") return ZERO;
+ if (typeof unsigned === 'number') {
+ // For goog.math.long compatibility
+ radix = unsigned, unsigned = false;
+ } else {
+ unsigned = !!unsigned;
+ }
+ radix = radix || 10;
+ if (radix < 2 || 36 < radix) throw RangeError('radix');
+ var p;
+ if ((p = str.indexOf('-')) > 0) throw Error('interior hyphen');else if (p === 0) {
+ return fromString(str.substring(1), unsigned, radix).neg();
+ }
+
+ // Do several (8) digits each time through the loop, so as to
+ // minimize the calls to the very expensive emulated div.
+ var radixToPower = fromNumber(pow_dbl(radix, 8));
+ var result = ZERO;
+ for (var i = 0; i < str.length; i += 8) {
+ var size = Math.min(8, str.length - i),
+ value = parseInt(str.substring(i, i + size), radix);
+ if (size < 8) {
+ var power = fromNumber(pow_dbl(radix, size));
+ result = result.mul(power).add(fromNumber(value));
+ } else {
+ result = result.mul(radixToPower);
+ result = result.add(fromNumber(value));
+ }
+ }
+ result.unsigned = unsigned;
+ return result;
+}
+
+/**
+ * Returns a Long representation of the given string, written using the specified radix.
+ * @function
+ * @param {string} str The textual representation of the Long
+ * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed
+ * @param {number=} radix The radix in which the text is written (2-36), defaults to 10
+ * @returns {!Long} The corresponding Long value
+ */
+Long.fromString = fromString;
+
+/**
+ * @function
+ * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val
+ * @param {boolean=} unsigned
+ * @returns {!Long}
+ * @inner
+ */
+function fromValue(val, unsigned) {
+ if (typeof val === 'number') return fromNumber(val, unsigned);
+ if (typeof val === 'string') return fromString(val, unsigned);
+ // Throws for non-objects, converts non-instanceof Long:
+ return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);
+}
+
+/**
+ * Converts the specified value to a Long using the appropriate from* function for its type.
+ * @function
+ * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value
+ * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
+ * @returns {!Long}
+ */
+Long.fromValue = fromValue;
+
+// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be
+// no runtime penalty for these.
+
+/**
+ * @type {number}
+ * @const
+ * @inner
+ */
+var TWO_PWR_16_DBL = 1 << 16;
+
+/**
+ * @type {number}
+ * @const
+ * @inner
+ */
+var TWO_PWR_24_DBL = 1 << 24;
+
+/**
+ * @type {number}
+ * @const
+ * @inner
+ */
+var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;
+
+/**
+ * @type {number}
+ * @const
+ * @inner
+ */
+var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;
+
+/**
+ * @type {number}
+ * @const
+ * @inner
+ */
+var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;
+
+/**
+ * @type {!Long}
+ * @const
+ * @inner
+ */
+var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);
+
+/**
+ * @type {!Long}
+ * @inner
+ */
+var ZERO = fromInt(0);
+
+/**
+ * Signed zero.
+ * @type {!Long}
+ */
+Long.ZERO = ZERO;
+
+/**
+ * @type {!Long}
+ * @inner
+ */
+var UZERO = fromInt(0, true);
+
+/**
+ * Unsigned zero.
+ * @type {!Long}
+ */
+Long.UZERO = UZERO;
+
+/**
+ * @type {!Long}
+ * @inner
+ */
+var ONE = fromInt(1);
+
+/**
+ * Signed one.
+ * @type {!Long}
+ */
+Long.ONE = ONE;
+
+/**
+ * @type {!Long}
+ * @inner
+ */
+var UONE = fromInt(1, true);
+
+/**
+ * Unsigned one.
+ * @type {!Long}
+ */
+Long.UONE = UONE;
+
+/**
+ * @type {!Long}
+ * @inner
+ */
+var NEG_ONE = fromInt(-1);
+
+/**
+ * Signed negative one.
+ * @type {!Long}
+ */
+Long.NEG_ONE = NEG_ONE;
+
+/**
+ * @type {!Long}
+ * @inner
+ */
+var MAX_VALUE = fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0, false);
+
+/**
+ * Maximum signed value.
+ * @type {!Long}
+ */
+Long.MAX_VALUE = MAX_VALUE;
+
+/**
+ * @type {!Long}
+ * @inner
+ */
+var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF | 0, 0xFFFFFFFF | 0, true);
+
+/**
+ * Maximum unsigned value.
+ * @type {!Long}
+ */
+Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;
+
+/**
+ * @type {!Long}
+ * @inner
+ */
+var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);
+
+/**
+ * Minimum signed value.
+ * @type {!Long}
+ */
+Long.MIN_VALUE = MIN_VALUE;
+
+/**
+ * @alias Long.prototype
+ * @inner
+ */
+var LongPrototype = Long.prototype;
+
+/**
+ * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.
+ * @returns {number}
+ */
+LongPrototype.toInt = function toInt() {
+ return this.unsigned ? this.low >>> 0 : this.low;
+};
+
+/**
+ * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).
+ * @returns {number}
+ */
+LongPrototype.toNumber = function toNumber() {
+ if (this.unsigned) return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);
+ return this.high * TWO_PWR_32_DBL + (this.low >>> 0);
+};
+
+/**
+ * Converts the Long to a string written in the specified radix.
+ * @param {number=} radix Radix (2-36), defaults to 10
+ * @returns {string}
+ * @override
+ * @throws {RangeError} If `radix` is out of range
+ */
+LongPrototype.toString = function toString(radix) {
+ radix = radix || 10;
+ if (radix < 2 || 36 < radix) throw RangeError('radix');
+ if (this.isZero()) return '0';
+ if (this.isNegative()) {
+ // Unsigned Longs are never negative
+ if (this.eq(MIN_VALUE)) {
+ // We need to change the Long value before it can be negated, so we remove
+ // the bottom-most digit in this base and then recurse to do the rest.
+ var radixLong = fromNumber(radix),
+ div = this.div(radixLong),
+ rem1 = div.mul(radixLong).sub(this);
+ return div.toString(radix) + rem1.toInt().toString(radix);
+ } else return '-' + this.neg().toString(radix);
+ }
+
+ // Do several (6) digits each time through the loop, so as to
+ // minimize the calls to the very expensive emulated div.
+ var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),
+ rem = this;
+ var result = '';
+ while (true) {
+ var remDiv = rem.div(radixToPower),
+ intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,
+ digits = intval.toString(radix);
+ rem = remDiv;
+ if (rem.isZero()) return digits + result;else {
+ while (digits.length < 6) digits = '0' + digits;
+ result = '' + digits + result;
+ }
+ }
+};
+
+/**
+ * Gets the high 32 bits as a signed integer.
+ * @returns {number} Signed high bits
+ */
+LongPrototype.getHighBits = function getHighBits() {
+ return this.high;
+};
+
+/**
+ * Gets the high 32 bits as an unsigned integer.
+ * @returns {number} Unsigned high bits
+ */
+LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {
+ return this.high >>> 0;
+};
+
+/**
+ * Gets the low 32 bits as a signed integer.
+ * @returns {number} Signed low bits
+ */
+LongPrototype.getLowBits = function getLowBits() {
+ return this.low;
+};
+
+/**
+ * Gets the low 32 bits as an unsigned integer.
+ * @returns {number} Unsigned low bits
+ */
+LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {
+ return this.low >>> 0;
+};
+
+/**
+ * Gets the number of bits needed to represent the absolute value of this Long.
+ * @returns {number}
+ */
+LongPrototype.getNumBitsAbs = function getNumBitsAbs() {
+ if (this.isNegative())
+ // Unsigned Longs are never negative
+ return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();
+ var val = this.high != 0 ? this.high : this.low;
+ for (var bit = 31; bit > 0; bit--) if ((val & 1 << bit) != 0) break;
+ return this.high != 0 ? bit + 33 : bit + 1;
+};
+
+/**
+ * Tests if this Long's value equals zero.
+ * @returns {boolean}
+ */
+LongPrototype.isZero = function isZero() {
+ return this.high === 0 && this.low === 0;
+};
+
+/**
+ * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.
+ * @returns {boolean}
+ */
+LongPrototype.eqz = LongPrototype.isZero;
+
+/**
+ * Tests if this Long's value is negative.
+ * @returns {boolean}
+ */
+LongPrototype.isNegative = function isNegative() {
+ return !this.unsigned && this.high < 0;
+};
+
+/**
+ * Tests if this Long's value is positive.
+ * @returns {boolean}
+ */
+LongPrototype.isPositive = function isPositive() {
+ return this.unsigned || this.high >= 0;
+};
+
+/**
+ * Tests if this Long's value is odd.
+ * @returns {boolean}
+ */
+LongPrototype.isOdd = function isOdd() {
+ return (this.low & 1) === 1;
+};
+
+/**
+ * Tests if this Long's value is even.
+ * @returns {boolean}
+ */
+LongPrototype.isEven = function isEven() {
+ return (this.low & 1) === 0;
+};
+
+/**
+ * Tests if this Long's value equals the specified's.
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.equals = function equals(other) {
+ if (!isLong(other)) other = fromValue(other);
+ if (this.unsigned !== other.unsigned && this.high >>> 31 === 1 && other.high >>> 31 === 1) return false;
+ return this.high === other.high && this.low === other.low;
+};
+
+/**
+ * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.
+ * @function
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.eq = LongPrototype.equals;
+
+/**
+ * Tests if this Long's value differs from the specified's.
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.notEquals = function notEquals(other) {
+ return !this.eq( /* validates */other);
+};
+
+/**
+ * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.
+ * @function
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.neq = LongPrototype.notEquals;
+
+/**
+ * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.
+ * @function
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.ne = LongPrototype.notEquals;
+
+/**
+ * Tests if this Long's value is less than the specified's.
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.lessThan = function lessThan(other) {
+ return this.comp( /* validates */other) < 0;
+};
+
+/**
+ * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.
+ * @function
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.lt = LongPrototype.lessThan;
+
+/**
+ * Tests if this Long's value is less than or equal the specified's.
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {
+ return this.comp( /* validates */other) <= 0;
+};
+
+/**
+ * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.
+ * @function
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.lte = LongPrototype.lessThanOrEqual;
+
+/**
+ * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.
+ * @function
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.le = LongPrototype.lessThanOrEqual;
+
+/**
+ * Tests if this Long's value is greater than the specified's.
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.greaterThan = function greaterThan(other) {
+ return this.comp( /* validates */other) > 0;
+};
+
+/**
+ * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.
+ * @function
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.gt = LongPrototype.greaterThan;
+
+/**
+ * Tests if this Long's value is greater than or equal the specified's.
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
+ return this.comp( /* validates */other) >= 0;
+};
+
+/**
+ * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.
+ * @function
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.gte = LongPrototype.greaterThanOrEqual;
+
+/**
+ * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.
+ * @function
+ * @param {!Long|number|string} other Other value
+ * @returns {boolean}
+ */
+LongPrototype.ge = LongPrototype.greaterThanOrEqual;
+
+/**
+ * Compares this Long's value with the specified's.
+ * @param {!Long|number|string} other Other value
+ * @returns {number} 0 if they are the same, 1 if the this is greater and -1
+ * if the given one is greater
+ */
+LongPrototype.compare = function compare(other) {
+ if (!isLong(other)) other = fromValue(other);
+ if (this.eq(other)) return 0;
+ var thisNeg = this.isNegative(),
+ otherNeg = other.isNegative();
+ if (thisNeg && !otherNeg) return -1;
+ if (!thisNeg && otherNeg) return 1;
+ // At this point the sign bits are the same
+ if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;
+ // Both are positive if at least one is unsigned
+ return other.high >>> 0 > this.high >>> 0 || other.high === this.high && other.low >>> 0 > this.low >>> 0 ? -1 : 1;
+};
+
+/**
+ * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.
+ * @function
+ * @param {!Long|number|string} other Other value
+ * @returns {number} 0 if they are the same, 1 if the this is greater and -1
+ * if the given one is greater
+ */
+LongPrototype.comp = LongPrototype.compare;
+
+/**
+ * Negates this Long's value.
+ * @returns {!Long} Negated Long
+ */
+LongPrototype.negate = function negate() {
+ if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;
+ return this.not().add(ONE);
+};
+
+/**
+ * Negates this Long's value. This is an alias of {@link Long#negate}.
+ * @function
+ * @returns {!Long} Negated Long
+ */
+LongPrototype.neg = LongPrototype.negate;
+
+/**
+ * Returns the sum of this and the specified Long.
+ * @param {!Long|number|string} addend Addend
+ * @returns {!Long} Sum
+ */
+LongPrototype.add = function add(addend) {
+ if (!isLong(addend)) addend = fromValue(addend);
+
+ // Divide each number into 4 chunks of 16 bits, and then sum the chunks.
+
+ var a48 = this.high >>> 16;
+ var a32 = this.high & 0xFFFF;
+ var a16 = this.low >>> 16;
+ var a00 = this.low & 0xFFFF;
+ var b48 = addend.high >>> 16;
+ var b32 = addend.high & 0xFFFF;
+ var b16 = addend.low >>> 16;
+ var b00 = addend.low & 0xFFFF;
+ var c48 = 0,
+ c32 = 0,
+ c16 = 0,
+ c00 = 0;
+ c00 += a00 + b00;
+ c16 += c00 >>> 16;
+ c00 &= 0xFFFF;
+ c16 += a16 + b16;
+ c32 += c16 >>> 16;
+ c16 &= 0xFFFF;
+ c32 += a32 + b32;
+ c48 += c32 >>> 16;
+ c32 &= 0xFFFF;
+ c48 += a48 + b48;
+ c48 &= 0xFFFF;
+ return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
+};
+
+/**
+ * Returns the difference of this and the specified Long.
+ * @param {!Long|number|string} subtrahend Subtrahend
+ * @returns {!Long} Difference
+ */
+LongPrototype.subtract = function subtract(subtrahend) {
+ if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend);
+ return this.add(subtrahend.neg());
+};
+
+/**
+ * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.
+ * @function
+ * @param {!Long|number|string} subtrahend Subtrahend
+ * @returns {!Long} Difference
+ */
+LongPrototype.sub = LongPrototype.subtract;
+
+/**
+ * Returns the product of this and the specified Long.
+ * @param {!Long|number|string} multiplier Multiplier
+ * @returns {!Long} Product
+ */
+LongPrototype.multiply = function multiply(multiplier) {
+ if (this.isZero()) return ZERO;
+ if (!isLong(multiplier)) multiplier = fromValue(multiplier);
+
+ // use wasm support if present
+ if (wasm) {
+ var low = wasm.mul(this.low, this.high, multiplier.low, multiplier.high);
+ return fromBits(low, wasm.get_high(), this.unsigned);
+ }
+ if (multiplier.isZero()) return ZERO;
+ if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;
+ if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;
+ if (this.isNegative()) {
+ if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());else return this.neg().mul(multiplier).neg();
+ } else if (multiplier.isNegative()) return this.mul(multiplier.neg()).neg();
+
+ // If both longs are small, use float multiplication
+ if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24)) return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);
+
+ // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.
+ // We can skip products that would overflow.
+
+ var a48 = this.high >>> 16;
+ var a32 = this.high & 0xFFFF;
+ var a16 = this.low >>> 16;
+ var a00 = this.low & 0xFFFF;
+ var b48 = multiplier.high >>> 16;
+ var b32 = multiplier.high & 0xFFFF;
+ var b16 = multiplier.low >>> 16;
+ var b00 = multiplier.low & 0xFFFF;
+ var c48 = 0,
+ c32 = 0,
+ c16 = 0,
+ c00 = 0;
+ c00 += a00 * b00;
+ c16 += c00 >>> 16;
+ c00 &= 0xFFFF;
+ c16 += a16 * b00;
+ c32 += c16 >>> 16;
+ c16 &= 0xFFFF;
+ c16 += a00 * b16;
+ c32 += c16 >>> 16;
+ c16 &= 0xFFFF;
+ c32 += a32 * b00;
+ c48 += c32 >>> 16;
+ c32 &= 0xFFFF;
+ c32 += a16 * b16;
+ c48 += c32 >>> 16;
+ c32 &= 0xFFFF;
+ c32 += a00 * b32;
+ c48 += c32 >>> 16;
+ c32 &= 0xFFFF;
+ c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
+ c48 &= 0xFFFF;
+ return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
+};
+
+/**
+ * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.
+ * @function
+ * @param {!Long|number|string} multiplier Multiplier
+ * @returns {!Long} Product
+ */
+LongPrototype.mul = LongPrototype.multiply;
+
+/**
+ * Returns this Long divided by the specified. The result is signed if this Long is signed or
+ * unsigned if this Long is unsigned.
+ * @param {!Long|number|string} divisor Divisor
+ * @returns {!Long} Quotient
+ */
+LongPrototype.divide = function divide(divisor) {
+ if (!isLong(divisor)) divisor = fromValue(divisor);
+ if (divisor.isZero()) throw Error('division by zero');
+
+ // use wasm support if present
+ if (wasm) {
+ // guard against signed division overflow: the largest
+ // negative number / -1 would be 1 larger than the largest
+ // positive number, due to two's complement.
+ if (!this.unsigned && this.high === -0x80000000 && divisor.low === -1 && divisor.high === -1) {
+ // be consistent with non-wasm code path
+ return this;
+ }
+ var low = (this.unsigned ? wasm.div_u : wasm.div_s)(this.low, this.high, divisor.low, divisor.high);
+ return fromBits(low, wasm.get_high(), this.unsigned);
+ }
+ if (this.isZero()) return this.unsigned ? UZERO : ZERO;
+ var approx, rem, res;
+ if (!this.unsigned) {
+ // This section is only relevant for signed longs and is derived from the
+ // closure library as a whole.
+ if (this.eq(MIN_VALUE)) {
+ if (divisor.eq(ONE) || divisor.eq(NEG_ONE)) return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE
+ else if (divisor.eq(MIN_VALUE)) return ONE;else {
+ // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.
+ var halfThis = this.shr(1);
+ approx = halfThis.div(divisor).shl(1);
+ if (approx.eq(ZERO)) {
+ return divisor.isNegative() ? ONE : NEG_ONE;
+ } else {
+ rem = this.sub(divisor.mul(approx));
+ res = approx.add(rem.div(divisor));
+ return res;
+ }
+ }
+ } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;
+ if (this.isNegative()) {
+ if (divisor.isNegative()) return this.neg().div(divisor.neg());
+ return this.neg().div(divisor).neg();
+ } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();
+ res = ZERO;
+ } else {
+ // The algorithm below has not been made for unsigned longs. It's therefore
+ // required to take special care of the MSB prior to running it.
+ if (!divisor.unsigned) divisor = divisor.toUnsigned();
+ if (divisor.gt(this)) return UZERO;
+ if (divisor.gt(this.shru(1)))
+ // 15 >>> 1 = 7 ; with divisor = 8 ; true
+ return UONE;
+ res = UZERO;
+ }
+
+ // Repeat the following until the remainder is less than other: find a
+ // floating-point that approximates remainder / other *from below*, add this
+ // into the result, and subtract it from the remainder. It is critical that
+ // the approximate value is less than or equal to the real value so that the
+ // remainder never becomes negative.
+ rem = this;
+ while (rem.gte(divisor)) {
+ // Approximate the result of division. This may be a little greater or
+ // smaller than the actual value.
+ approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));
+
+ // We will tweak the approximate result by changing it in the 48-th digit or
+ // the smallest non-fractional digit, whichever is larger.
+ var log2 = Math.ceil(Math.log(approx) / Math.LN2),
+ delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48),
+ // Decrease the approximation until it is smaller than the remainder. Note
+ // that if it is too large, the product overflows and is negative.
+ approxRes = fromNumber(approx),
+ approxRem = approxRes.mul(divisor);
+ while (approxRem.isNegative() || approxRem.gt(rem)) {
+ approx -= delta;
+ approxRes = fromNumber(approx, this.unsigned);
+ approxRem = approxRes.mul(divisor);
+ }
+
+ // We know the answer can't be zero... and actually, zero would cause
+ // infinite recursion since we would make no progress.
+ if (approxRes.isZero()) approxRes = ONE;
+ res = res.add(approxRes);
+ rem = rem.sub(approxRem);
+ }
+ return res;
+};
+
+/**
+ * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.
+ * @function
+ * @param {!Long|number|string} divisor Divisor
+ * @returns {!Long} Quotient
+ */
+LongPrototype.div = LongPrototype.divide;
+
+/**
+ * Returns this Long modulo the specified.
+ * @param {!Long|number|string} divisor Divisor
+ * @returns {!Long} Remainder
+ */
+LongPrototype.modulo = function modulo(divisor) {
+ if (!isLong(divisor)) divisor = fromValue(divisor);
+
+ // use wasm support if present
+ if (wasm) {
+ var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(this.low, this.high, divisor.low, divisor.high);
+ return fromBits(low, wasm.get_high(), this.unsigned);
+ }
+ return this.sub(this.div(divisor).mul(divisor));
+};
+
+/**
+ * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.
+ * @function
+ * @param {!Long|number|string} divisor Divisor
+ * @returns {!Long} Remainder
+ */
+LongPrototype.mod = LongPrototype.modulo;
+
+/**
+ * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.
+ * @function
+ * @param {!Long|number|string} divisor Divisor
+ * @returns {!Long} Remainder
+ */
+LongPrototype.rem = LongPrototype.modulo;
+
+/**
+ * Returns the bitwise NOT of this Long.
+ * @returns {!Long}
+ */
+LongPrototype.not = function not() {
+ return fromBits(~this.low, ~this.high, this.unsigned);
+};
+
+/**
+ * Returns the bitwise AND of this Long and the specified.
+ * @param {!Long|number|string} other Other Long
+ * @returns {!Long}
+ */
+LongPrototype.and = function and(other) {
+ if (!isLong(other)) other = fromValue(other);
+ return fromBits(this.low & other.low, this.high & other.high, this.unsigned);
+};
+
+/**
+ * Returns the bitwise OR of this Long and the specified.
+ * @param {!Long|number|string} other Other Long
+ * @returns {!Long}
+ */
+LongPrototype.or = function or(other) {
+ if (!isLong(other)) other = fromValue(other);
+ return fromBits(this.low | other.low, this.high | other.high, this.unsigned);
+};
+
+/**
+ * Returns the bitwise XOR of this Long and the given one.
+ * @param {!Long|number|string} other Other Long
+ * @returns {!Long}
+ */
+LongPrototype.xor = function xor(other) {
+ if (!isLong(other)) other = fromValue(other);
+ return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);
+};
+
+/**
+ * Returns this Long with bits shifted to the left by the given amount.
+ * @param {number|!Long} numBits Number of bits
+ * @returns {!Long} Shifted Long
+ */
+LongPrototype.shiftLeft = function shiftLeft(numBits) {
+ if (isLong(numBits)) numBits = numBits.toInt();
+ if ((numBits &= 63) === 0) return this;else if (numBits < 32) return fromBits(this.low << numBits, this.high << numBits | this.low >>> 32 - numBits, this.unsigned);else return fromBits(0, this.low << numBits - 32, this.unsigned);
+};
+
+/**
+ * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.
+ * @function
+ * @param {number|!Long} numBits Number of bits
+ * @returns {!Long} Shifted Long
+ */
+LongPrototype.shl = LongPrototype.shiftLeft;
+
+/**
+ * Returns this Long with bits arithmetically shifted to the right by the given amount.
+ * @param {number|!Long} numBits Number of bits
+ * @returns {!Long} Shifted Long
+ */
+LongPrototype.shiftRight = function shiftRight(numBits) {
+ if (isLong(numBits)) numBits = numBits.toInt();
+ if ((numBits &= 63) === 0) return this;else if (numBits < 32) return fromBits(this.low >>> numBits | this.high << 32 - numBits, this.high >> numBits, this.unsigned);else return fromBits(this.high >> numBits - 32, this.high >= 0 ? 0 : -1, this.unsigned);
+};
+
+/**
+ * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.
+ * @function
+ * @param {number|!Long} numBits Number of bits
+ * @returns {!Long} Shifted Long
+ */
+LongPrototype.shr = LongPrototype.shiftRight;
+
+/**
+ * Returns this Long with bits logically shifted to the right by the given amount.
+ * @param {number|!Long} numBits Number of bits
+ * @returns {!Long} Shifted Long
+ */
+LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
+ if (isLong(numBits)) numBits = numBits.toInt();
+ numBits &= 63;
+ if (numBits === 0) return this;else {
+ var high = this.high;
+ if (numBits < 32) {
+ var low = this.low;
+ return fromBits(low >>> numBits | high << 32 - numBits, high >>> numBits, this.unsigned);
+ } else if (numBits === 32) return fromBits(high, 0, this.unsigned);else return fromBits(high >>> numBits - 32, 0, this.unsigned);
+ }
+};
+
+/**
+ * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.
+ * @function
+ * @param {number|!Long} numBits Number of bits
+ * @returns {!Long} Shifted Long
+ */
+LongPrototype.shru = LongPrototype.shiftRightUnsigned;
+
+/**
+ * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.
+ * @function
+ * @param {number|!Long} numBits Number of bits
+ * @returns {!Long} Shifted Long
+ */
+LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;
+
+/**
+ * Converts this Long to signed.
+ * @returns {!Long} Signed long
+ */
+LongPrototype.toSigned = function toSigned() {
+ if (!this.unsigned) return this;
+ return fromBits(this.low, this.high, false);
+};
+
+/**
+ * Converts this Long to unsigned.
+ * @returns {!Long} Unsigned long
+ */
+LongPrototype.toUnsigned = function toUnsigned() {
+ if (this.unsigned) return this;
+ return fromBits(this.low, this.high, true);
+};
+
+/**
+ * Converts this Long to its byte representation.
+ * @param {boolean=} le Whether little or big endian, defaults to big endian
+ * @returns {!Array.} Byte representation
+ */
+LongPrototype.toBytes = function toBytes(le) {
+ return le ? this.toBytesLE() : this.toBytesBE();
+};
+
+/**
+ * Converts this Long to its little endian byte representation.
+ * @returns {!Array.} Little endian byte representation
+ */
+LongPrototype.toBytesLE = function toBytesLE() {
+ var hi = this.high,
+ lo = this.low;
+ return [lo & 0xff, lo >>> 8 & 0xff, lo >>> 16 & 0xff, lo >>> 24, hi & 0xff, hi >>> 8 & 0xff, hi >>> 16 & 0xff, hi >>> 24];
+};
+
+/**
+ * Converts this Long to its big endian byte representation.
+ * @returns {!Array.} Big endian byte representation
+ */
+LongPrototype.toBytesBE = function toBytesBE() {
+ var hi = this.high,
+ lo = this.low;
+ return [hi >>> 24, hi >>> 16 & 0xff, hi >>> 8 & 0xff, hi & 0xff, lo >>> 24, lo >>> 16 & 0xff, lo >>> 8 & 0xff, lo & 0xff];
+};
+
+/**
+ * Creates a Long from its byte representation.
+ * @param {!Array.} bytes Byte representation
+ * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
+ * @param {boolean=} le Whether little or big endian, defaults to big endian
+ * @returns {Long} The corresponding Long value
+ */
+Long.fromBytes = function fromBytes(bytes, unsigned, le) {
+ return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);
+};
+
+/**
+ * Creates a Long from its little endian byte representation.
+ * @param {!Array.} bytes Little endian byte representation
+ * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
+ * @returns {Long} The corresponding Long value
+ */
+Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {
+ return new Long(bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24, bytes[4] | bytes[5] << 8 | bytes[6] << 16 | bytes[7] << 24, unsigned);
+};
+
+/**
+ * Creates a Long from its big endian byte representation.
+ * @param {!Array.} bytes Big endian byte representation
+ * @param {boolean=} unsigned Whether unsigned or not, defaults to signed
+ * @returns {Long} The corresponding Long value
+ */
+Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {
+ return new Long(bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7], bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], unsigned);
+};
+var Long$1 = /*@__PURE__*/getDefaultExportFromCjs(long);
+
+var indexMinimal = {};
+
+var minimal$1 = {};
+
+var aspromise;
+var hasRequiredAspromise;
+function requireAspromise() {
+ if (hasRequiredAspromise) return aspromise;
+ hasRequiredAspromise = 1;
+ aspromise = asPromise;
+
+ /**
+ * Callback as used by {@link util.asPromise}.
+ * @typedef asPromiseCallback
+ * @type {function}
+ * @param {Error|null} error Error, if any
+ * @param {...*} params Additional arguments
+ * @returns {undefined}
+ */
+
+ /**
+ * Returns a promise from a node-style callback function.
+ * @memberof util
+ * @param {asPromiseCallback} fn Function to call
+ * @param {*} ctx Function context
+ * @param {...*} params Function arguments
+ * @returns {Promise<*>} Promisified function
+ */
+ function asPromise(fn, ctx /*, varargs */) {
+ var params = new Array(arguments.length - 1),
+ offset = 0,
+ index = 2,
+ pending = true;
+ while (index < arguments.length) params[offset++] = arguments[index++];
+ return new Promise(function executor(resolve, reject) {
+ params[offset] = function callback(err /*, varargs */) {
+ if (pending) {
+ pending = false;
+ if (err) reject(err);else {
+ var params = new Array(arguments.length - 1),
+ offset = 0;
+ while (offset < params.length) params[offset++] = arguments[offset];
+ resolve.apply(null, params);
+ }
+ }
+ };
+ try {
+ fn.apply(ctx || null, params);
+ } catch (err) {
+ if (pending) {
+ pending = false;
+ reject(err);
+ }
+ }
+ });
+ }
+ return aspromise;
+}
+
+var base64$1 = {};
+
+var hasRequiredBase64;
+function requireBase64() {
+ if (hasRequiredBase64) return base64$1;
+ hasRequiredBase64 = 1;
+ (function (exports) {
+
+ /**
+ * A minimal base64 implementation for number arrays.
+ * @memberof util
+ * @namespace
+ */
+ var base64 = exports;
+
+ /**
+ * Calculates the byte length of a base64 encoded string.
+ * @param {string} string Base64 encoded string
+ * @returns {number} Byte length
+ */
+ base64.length = function length(string) {
+ var p = string.length;
+ if (!p) return 0;
+ var n = 0;
+ while (--p % 4 > 1 && string.charAt(p) === "=") ++n;
+ return Math.ceil(string.length * 3) / 4 - n;
+ };
+
+ // Base64 encoding table
+ var b64 = new Array(64);
+
+ // Base64 decoding table
+ var s64 = new Array(123);
+
+ // 65..90, 97..122, 48..57, 43, 47
+ for (var i = 0; i < 64;) s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;
+
+ /**
+ * Encodes a buffer to a base64 encoded string.
+ * @param {Uint8Array} buffer Source buffer
+ * @param {number} start Source start
+ * @param {number} end Source end
+ * @returns {string} Base64 encoded string
+ */
+ base64.encode = function encode(buffer, start, end) {
+ var parts = null,
+ chunk = [];
+ var i = 0,
+ // output index
+ j = 0,
+ // goto index
+ t; // temporary
+ while (start < end) {
+ var b = buffer[start++];
+ switch (j) {
+ case 0:
+ chunk[i++] = b64[b >> 2];
+ t = (b & 3) << 4;
+ j = 1;
+ break;
+ case 1:
+ chunk[i++] = b64[t | b >> 4];
+ t = (b & 15) << 2;
+ j = 2;
+ break;
+ case 2:
+ chunk[i++] = b64[t | b >> 6];
+ chunk[i++] = b64[b & 63];
+ j = 0;
+ break;
+ }
+ if (i > 8191) {
+ (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));
+ i = 0;
+ }
+ }
+ if (j) {
+ chunk[i++] = b64[t];
+ chunk[i++] = 61;
+ if (j === 1) chunk[i++] = 61;
+ }
+ if (parts) {
+ if (i) parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));
+ return parts.join("");
+ }
+ return String.fromCharCode.apply(String, chunk.slice(0, i));
+ };
+ var invalidEncoding = "invalid encoding";
+
+ /**
+ * Decodes a base64 encoded string to a buffer.
+ * @param {string} string Source string
+ * @param {Uint8Array} buffer Destination buffer
+ * @param {number} offset Destination offset
+ * @returns {number} Number of bytes written
+ * @throws {Error} If encoding is invalid
+ */
+ base64.decode = function decode(string, buffer, offset) {
+ var start = offset;
+ var j = 0,
+ // goto index
+ t; // temporary
+ for (var i = 0; i < string.length;) {
+ var c = string.charCodeAt(i++);
+ if (c === 61 && j > 1) break;
+ if ((c = s64[c]) === undefined) throw Error(invalidEncoding);
+ switch (j) {
+ case 0:
+ t = c;
+ j = 1;
+ break;
+ case 1:
+ buffer[offset++] = t << 2 | (c & 48) >> 4;
+ t = c;
+ j = 2;
+ break;
+ case 2:
+ buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;
+ t = c;
+ j = 3;
+ break;
+ case 3:
+ buffer[offset++] = (t & 3) << 6 | c;
+ j = 0;
+ break;
+ }
+ }
+ if (j === 1) throw Error(invalidEncoding);
+ return offset - start;
+ };
+
+ /**
+ * Tests if the specified string appears to be base64 encoded.
+ * @param {string} string String to test
+ * @returns {boolean} `true` if probably base64 encoded, otherwise false
+ */
+ base64.test = function test(string) {
+ return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);
+ };
+ })(base64$1);
+ return base64$1;
+}
+
+var eventemitter;
+var hasRequiredEventemitter;
+function requireEventemitter() {
+ if (hasRequiredEventemitter) return eventemitter;
+ hasRequiredEventemitter = 1;
+ eventemitter = EventEmitter;
+
+ /**
+ * Constructs a new event emitter instance.
+ * @classdesc A minimal event emitter.
+ * @memberof util
+ * @constructor
+ */
+ function EventEmitter() {
+ /**
+ * Registered listeners.
+ * @type {Object.}
+ * @private
+ */
+ this._listeners = {};
+ }
+
+ /**
+ * Registers an event listener.
+ * @param {string} evt Event name
+ * @param {function} fn Listener
+ * @param {*} [ctx] Listener context
+ * @returns {util.EventEmitter} `this`
+ */
+ EventEmitter.prototype.on = function on(evt, fn, ctx) {
+ (this._listeners[evt] || (this._listeners[evt] = [])).push({
+ fn: fn,
+ ctx: ctx || this
+ });
+ return this;
+ };
+
+ /**
+ * Removes an event listener or any matching listeners if arguments are omitted.
+ * @param {string} [evt] Event name. Removes all listeners if omitted.
+ * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.
+ * @returns {util.EventEmitter} `this`
+ */
+ EventEmitter.prototype.off = function off(evt, fn) {
+ if (evt === undefined) this._listeners = {};else {
+ if (fn === undefined) this._listeners[evt] = [];else {
+ var listeners = this._listeners[evt];
+ for (var i = 0; i < listeners.length;) if (listeners[i].fn === fn) listeners.splice(i, 1);else ++i;
+ }
+ }
+ return this;
+ };
+
+ /**
+ * Emits an event by calling its listeners with the specified arguments.
+ * @param {string} evt Event name
+ * @param {...*} args Arguments
+ * @returns {util.EventEmitter} `this`
+ */
+ EventEmitter.prototype.emit = function emit(evt) {
+ var listeners = this._listeners[evt];
+ if (listeners) {
+ var args = [],
+ i = 1;
+ for (; i < arguments.length;) args.push(arguments[i++]);
+ for (i = 0; i < listeners.length;) listeners[i].fn.apply(listeners[i++].ctx, args);
+ }
+ return this;
+ };
+ return eventemitter;
+}
+
+var float;
+var hasRequiredFloat;
+function requireFloat() {
+ if (hasRequiredFloat) return float;
+ hasRequiredFloat = 1;
+ float = factory(factory);
+
+ /**
+ * Reads / writes floats / doubles from / to buffers.
+ * @name util.float
+ * @namespace
+ */
+
+ /**
+ * Writes a 32 bit float to a buffer using little endian byte order.
+ * @name util.float.writeFloatLE
+ * @function
+ * @param {number} val Value to write
+ * @param {Uint8Array} buf Target buffer
+ * @param {number} pos Target buffer offset
+ * @returns {undefined}
+ */
+
+ /**
+ * Writes a 32 bit float to a buffer using big endian byte order.
+ * @name util.float.writeFloatBE
+ * @function
+ * @param {number} val Value to write
+ * @param {Uint8Array} buf Target buffer
+ * @param {number} pos Target buffer offset
+ * @returns {undefined}
+ */
+
+ /**
+ * Reads a 32 bit float from a buffer using little endian byte order.
+ * @name util.float.readFloatLE
+ * @function
+ * @param {Uint8Array} buf Source buffer
+ * @param {number} pos Source buffer offset
+ * @returns {number} Value read
+ */
+
+ /**
+ * Reads a 32 bit float from a buffer using big endian byte order.
+ * @name util.float.readFloatBE
+ * @function
+ * @param {Uint8Array} buf Source buffer
+ * @param {number} pos Source buffer offset
+ * @returns {number} Value read
+ */
+
+ /**
+ * Writes a 64 bit double to a buffer using little endian byte order.
+ * @name util.float.writeDoubleLE
+ * @function
+ * @param {number} val Value to write
+ * @param {Uint8Array} buf Target buffer
+ * @param {number} pos Target buffer offset
+ * @returns {undefined}
+ */
+
+ /**
+ * Writes a 64 bit double to a buffer using big endian byte order.
+ * @name util.float.writeDoubleBE
+ * @function
+ * @param {number} val Value to write
+ * @param {Uint8Array} buf Target buffer
+ * @param {number} pos Target buffer offset
+ * @returns {undefined}
+ */
+
+ /**
+ * Reads a 64 bit double from a buffer using little endian byte order.
+ * @name util.float.readDoubleLE
+ * @function
+ * @param {Uint8Array} buf Source buffer
+ * @param {number} pos Source buffer offset
+ * @returns {number} Value read
+ */
+
+ /**
+ * Reads a 64 bit double from a buffer using big endian byte order.
+ * @name util.float.readDoubleBE
+ * @function
+ * @param {Uint8Array} buf Source buffer
+ * @param {number} pos Source buffer offset
+ * @returns {number} Value read
+ */
+
+ // Factory function for the purpose of node-based testing in modified global environments
+ function factory(exports) {
+ // float: typed array
+ if (typeof Float32Array !== "undefined") (function () {
+ var f32 = new Float32Array([-0]),
+ f8b = new Uint8Array(f32.buffer),
+ le = f8b[3] === 128;
+ function writeFloat_f32_cpy(val, buf, pos) {
+ f32[0] = val;
+ buf[pos] = f8b[0];
+ buf[pos + 1] = f8b[1];
+ buf[pos + 2] = f8b[2];
+ buf[pos + 3] = f8b[3];
+ }
+ function writeFloat_f32_rev(val, buf, pos) {
+ f32[0] = val;
+ buf[pos] = f8b[3];
+ buf[pos + 1] = f8b[2];
+ buf[pos + 2] = f8b[1];
+ buf[pos + 3] = f8b[0];
+ }
+
+ /* istanbul ignore next */
+ exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;
+ /* istanbul ignore next */
+ exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;
+ function readFloat_f32_cpy(buf, pos) {
+ f8b[0] = buf[pos];
+ f8b[1] = buf[pos + 1];
+ f8b[2] = buf[pos + 2];
+ f8b[3] = buf[pos + 3];
+ return f32[0];
+ }
+ function readFloat_f32_rev(buf, pos) {
+ f8b[3] = buf[pos];
+ f8b[2] = buf[pos + 1];
+ f8b[1] = buf[pos + 2];
+ f8b[0] = buf[pos + 3];
+ return f32[0];
+ }
+
+ /* istanbul ignore next */
+ exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;
+ /* istanbul ignore next */
+ exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;
+
+ // float: ieee754
+ })();else (function () {
+ function writeFloat_ieee754(writeUint, val, buf, pos) {
+ var sign = val < 0 ? 1 : 0;
+ if (sign) val = -val;
+ if (val === 0) writeUint(1 / val > 0 ? /* positive */0 : /* negative 0 */2147483648, buf, pos);else if (isNaN(val)) writeUint(2143289344, buf, pos);else if (val > 3.4028234663852886e+38)
+ // +-Infinity
+ writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);else if (val < 1.1754943508222875e-38)
+ // denormal
+ writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);else {
+ var exponent = Math.floor(Math.log(val) / Math.LN2),
+ mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;
+ writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);
+ }
+ }
+ exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);
+ exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);
+ function readFloat_ieee754(readUint, buf, pos) {
+ var uint = readUint(buf, pos),
+ sign = (uint >> 31) * 2 + 1,
+ exponent = uint >>> 23 & 255,
+ mantissa = uint & 8388607;
+ return exponent === 255 ? mantissa ? NaN : sign * Infinity : exponent === 0 // denormal
+ ? sign * 1.401298464324817e-45 * mantissa : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);
+ }
+ exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);
+ exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);
+ })();
+
+ // double: typed array
+ if (typeof Float64Array !== "undefined") (function () {
+ var f64 = new Float64Array([-0]),
+ f8b = new Uint8Array(f64.buffer),
+ le = f8b[7] === 128;
+ function writeDouble_f64_cpy(val, buf, pos) {
+ f64[0] = val;
+ buf[pos] = f8b[0];
+ buf[pos + 1] = f8b[1];
+ buf[pos + 2] = f8b[2];
+ buf[pos + 3] = f8b[3];
+ buf[pos + 4] = f8b[4];
+ buf[pos + 5] = f8b[5];
+ buf[pos + 6] = f8b[6];
+ buf[pos + 7] = f8b[7];
+ }
+ function writeDouble_f64_rev(val, buf, pos) {
+ f64[0] = val;
+ buf[pos] = f8b[7];
+ buf[pos + 1] = f8b[6];
+ buf[pos + 2] = f8b[5];
+ buf[pos + 3] = f8b[4];
+ buf[pos + 4] = f8b[3];
+ buf[pos + 5] = f8b[2];
+ buf[pos + 6] = f8b[1];
+ buf[pos + 7] = f8b[0];
+ }
+
+ /* istanbul ignore next */
+ exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;
+ /* istanbul ignore next */
+ exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;
+ function readDouble_f64_cpy(buf, pos) {
+ f8b[0] = buf[pos];
+ f8b[1] = buf[pos + 1];
+ f8b[2] = buf[pos + 2];
+ f8b[3] = buf[pos + 3];
+ f8b[4] = buf[pos + 4];
+ f8b[5] = buf[pos + 5];
+ f8b[6] = buf[pos + 6];
+ f8b[7] = buf[pos + 7];
+ return f64[0];
+ }
+ function readDouble_f64_rev(buf, pos) {
+ f8b[7] = buf[pos];
+ f8b[6] = buf[pos + 1];
+ f8b[5] = buf[pos + 2];
+ f8b[4] = buf[pos + 3];
+ f8b[3] = buf[pos + 4];
+ f8b[2] = buf[pos + 5];
+ f8b[1] = buf[pos + 6];
+ f8b[0] = buf[pos + 7];
+ return f64[0];
+ }
+
+ /* istanbul ignore next */
+ exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;
+ /* istanbul ignore next */
+ exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;
+
+ // double: ieee754
+ })();else (function () {
+ function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {
+ var sign = val < 0 ? 1 : 0;
+ if (sign) val = -val;
+ if (val === 0) {
+ writeUint(0, buf, pos + off0);
+ writeUint(1 / val > 0 ? /* positive */0 : /* negative 0 */2147483648, buf, pos + off1);
+ } else if (isNaN(val)) {
+ writeUint(0, buf, pos + off0);
+ writeUint(2146959360, buf, pos + off1);
+ } else if (val > 1.7976931348623157e+308) {
+ // +-Infinity
+ writeUint(0, buf, pos + off0);
+ writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);
+ } else {
+ var mantissa;
+ if (val < 2.2250738585072014e-308) {
+ // denormal
+ mantissa = val / 5e-324;
+ writeUint(mantissa >>> 0, buf, pos + off0);
+ writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);
+ } else {
+ var exponent = Math.floor(Math.log(val) / Math.LN2);
+ if (exponent === 1024) exponent = 1023;
+ mantissa = val * Math.pow(2, -exponent);
+ writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);
+ writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);
+ }
+ }
+ }
+ exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);
+ exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);
+ function readDouble_ieee754(readUint, off0, off1, buf, pos) {
+ var lo = readUint(buf, pos + off0),
+ hi = readUint(buf, pos + off1);
+ var sign = (hi >> 31) * 2 + 1,
+ exponent = hi >>> 20 & 2047,
+ mantissa = 4294967296 * (hi & 1048575) + lo;
+ return exponent === 2047 ? mantissa ? NaN : sign * Infinity : exponent === 0 // denormal
+ ? sign * 5e-324 * mantissa : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);
+ }
+ exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);
+ exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);
+ })();
+ return exports;
+ }
+
+ // uint helpers
+
+ function writeUintLE(val, buf, pos) {
+ buf[pos] = val & 255;
+ buf[pos + 1] = val >>> 8 & 255;
+ buf[pos + 2] = val >>> 16 & 255;
+ buf[pos + 3] = val >>> 24;
+ }
+ function writeUintBE(val, buf, pos) {
+ buf[pos] = val >>> 24;
+ buf[pos + 1] = val >>> 16 & 255;
+ buf[pos + 2] = val >>> 8 & 255;
+ buf[pos + 3] = val & 255;
+ }
+ function readUintLE(buf, pos) {
+ return (buf[pos] | buf[pos + 1] << 8 | buf[pos + 2] << 16 | buf[pos + 3] << 24) >>> 0;
+ }
+ function readUintBE(buf, pos) {
+ return (buf[pos] << 24 | buf[pos + 1] << 16 | buf[pos + 2] << 8 | buf[pos + 3]) >>> 0;
+ }
+ return float;
+}
+
+var inquire_1;
+var hasRequiredInquire;
+function requireInquire() {
+ if (hasRequiredInquire) return inquire_1;
+ hasRequiredInquire = 1;
+ inquire_1 = inquire;
+
+ /**
+ * Requires a module only if available.
+ * @memberof util
+ * @param {string} moduleName Module to require
+ * @returns {?Object} Required module if available and not empty, otherwise `null`
+ */
+ function inquire(moduleName) {
+ try {
+ var mod = undefined; // eslint-disable-line no-eval
+ if (mod && (mod.length || Object.keys(mod).length)) return mod;
+ } catch (e) {} // eslint-disable-line no-empty
+ return null;
+ }
+ return inquire_1;
+}
+
+var utf8$2 = {};
+
+var hasRequiredUtf8;
+function requireUtf8() {
+ if (hasRequiredUtf8) return utf8$2;
+ hasRequiredUtf8 = 1;
+ (function (exports) {
+
+ /**
+ * A minimal UTF8 implementation for number arrays.
+ * @memberof util
+ * @namespace
+ */
+ var utf8 = exports;
+
+ /**
+ * Calculates the UTF8 byte length of a string.
+ * @param {string} string String
+ * @returns {number} Byte length
+ */
+ utf8.length = function utf8_length(string) {
+ var len = 0,
+ c = 0;
+ for (var i = 0; i < string.length; ++i) {
+ c = string.charCodeAt(i);
+ if (c < 128) len += 1;else if (c < 2048) len += 2;else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {
+ ++i;
+ len += 4;
+ } else len += 3;
+ }
+ return len;
+ };
+
+ /**
+ * Reads UTF8 bytes as a string.
+ * @param {Uint8Array} buffer Source buffer
+ * @param {number} start Source start
+ * @param {number} end Source end
+ * @returns {string} String read
+ */
+ utf8.read = function utf8_read(buffer, start, end) {
+ var len = end - start;
+ if (len < 1) return "";
+ var parts = null,
+ chunk = [],
+ i = 0,
+ // char offset
+ t; // temporary
+ while (start < end) {
+ t = buffer[start++];
+ if (t < 128) chunk[i++] = t;else if (t > 191 && t < 224) chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;else if (t > 239 && t < 365) {
+ t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;
+ chunk[i++] = 0xD800 + (t >> 10);
+ chunk[i++] = 0xDC00 + (t & 1023);
+ } else chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;
+ if (i > 8191) {
+ (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));
+ i = 0;
+ }
+ }
+ if (parts) {
+ if (i) parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));
+ return parts.join("");
+ }
+ return String.fromCharCode.apply(String, chunk.slice(0, i));
+ };
+
+ /**
+ * Writes a string as UTF8 bytes.
+ * @param {string} string Source string
+ * @param {Uint8Array} buffer Destination buffer
+ * @param {number} offset Destination offset
+ * @returns {number} Bytes written
+ */
+ utf8.write = function utf8_write(string, buffer, offset) {
+ var start = offset,
+ c1,
+ // character 1
+ c2; // character 2
+ for (var i = 0; i < string.length; ++i) {
+ c1 = string.charCodeAt(i);
+ if (c1 < 128) {
+ buffer[offset++] = c1;
+ } else if (c1 < 2048) {
+ buffer[offset++] = c1 >> 6 | 192;
+ buffer[offset++] = c1 & 63 | 128;
+ } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {
+ c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);
+ ++i;
+ buffer[offset++] = c1 >> 18 | 240;
+ buffer[offset++] = c1 >> 12 & 63 | 128;
+ buffer[offset++] = c1 >> 6 & 63 | 128;
+ buffer[offset++] = c1 & 63 | 128;
+ } else {
+ buffer[offset++] = c1 >> 12 | 224;
+ buffer[offset++] = c1 >> 6 & 63 | 128;
+ buffer[offset++] = c1 & 63 | 128;
+ }
+ }
+ return offset - start;
+ };
+ })(utf8$2);
+ return utf8$2;
+}
+
+var pool_1;
+var hasRequiredPool;
+function requirePool() {
+ if (hasRequiredPool) return pool_1;
+ hasRequiredPool = 1;
+ pool_1 = pool;
+
+ /**
+ * An allocator as used by {@link util.pool}.
+ * @typedef PoolAllocator
+ * @type {function}
+ * @param {number} size Buffer size
+ * @returns {Uint8Array} Buffer
+ */
+
+ /**
+ * A slicer as used by {@link util.pool}.
+ * @typedef PoolSlicer
+ * @type {function}
+ * @param {number} start Start offset
+ * @param {number} end End offset
+ * @returns {Uint8Array} Buffer slice
+ * @this {Uint8Array}
+ */
+
+ /**
+ * A general purpose buffer pool.
+ * @memberof util
+ * @function
+ * @param {PoolAllocator} alloc Allocator
+ * @param {PoolSlicer} slice Slicer
+ * @param {number} [size=8192] Slab size
+ * @returns {PoolAllocator} Pooled allocator
+ */
+ function pool(alloc, slice, size) {
+ var SIZE = size || 8192;
+ var MAX = SIZE >>> 1;
+ var slab = null;
+ var offset = SIZE;
+ return function pool_alloc(size) {
+ if (size < 1 || size > MAX) return alloc(size);
+ if (offset + size > SIZE) {
+ slab = alloc(SIZE);
+ offset = 0;
+ }
+ var buf = slice.call(slab, offset, offset += size);
+ if (offset & 7)
+ // align to 32 bit
+ offset = (offset | 7) + 1;
+ return buf;
+ };
+ }
+ return pool_1;
+}
+
+var longbits;
+var hasRequiredLongbits;
+function requireLongbits() {
+ if (hasRequiredLongbits) return longbits;
+ hasRequiredLongbits = 1;
+ longbits = LongBits;
+ var util = requireMinimal();
+
+ /**
+ * Constructs new long bits.
+ * @classdesc Helper class for working with the low and high bits of a 64 bit value.
+ * @memberof util
+ * @constructor
+ * @param {number} lo Low 32 bits, unsigned
+ * @param {number} hi High 32 bits, unsigned
+ */
+ function LongBits(lo, hi) {
+ // note that the casts below are theoretically unnecessary as of today, but older statically
+ // generated converter code might still call the ctor with signed 32bits. kept for compat.
+
+ /**
+ * Low bits.
+ * @type {number}
+ */
+ this.lo = lo >>> 0;
+
+ /**
+ * High bits.
+ * @type {number}
+ */
+ this.hi = hi >>> 0;
+ }
+
+ /**
+ * Zero bits.
+ * @memberof util.LongBits
+ * @type {util.LongBits}
+ */
+ var zero = LongBits.zero = new LongBits(0, 0);
+ zero.toNumber = function () {
+ return 0;
+ };
+ zero.zzEncode = zero.zzDecode = function () {
+ return this;
+ };
+ zero.length = function () {
+ return 1;
+ };
+
+ /**
+ * Zero hash.
+ * @memberof util.LongBits
+ * @type {string}
+ */
+ var zeroHash = LongBits.zeroHash = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * Constructs new long bits from the specified number.
+ * @param {number} value Value
+ * @returns {util.LongBits} Instance
+ */
+ LongBits.fromNumber = function fromNumber(value) {
+ if (value === 0) return zero;
+ var sign = value < 0;
+ if (sign) value = -value;
+ var lo = value >>> 0,
+ hi = (value - lo) / 4294967296 >>> 0;
+ if (sign) {
+ hi = ~hi >>> 0;
+ lo = ~lo >>> 0;
+ if (++lo > 4294967295) {
+ lo = 0;
+ if (++hi > 4294967295) hi = 0;
+ }
+ }
+ return new LongBits(lo, hi);
+ };
+
+ /**
+ * Constructs new long bits from a number, long or string.
+ * @param {Long|number|string} value Value
+ * @returns {util.LongBits} Instance
+ */
+ LongBits.from = function from(value) {
+ if (typeof value === "number") return LongBits.fromNumber(value);
+ if (util.isString(value)) {
+ /* istanbul ignore else */
+ if (util.Long) value = util.Long.fromString(value);else return LongBits.fromNumber(parseInt(value, 10));
+ }
+ return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;
+ };
+
+ /**
+ * Converts this long bits to a possibly unsafe JavaScript number.
+ * @param {boolean} [unsigned=false] Whether unsigned or not
+ * @returns {number} Possibly unsafe number
+ */
+ LongBits.prototype.toNumber = function toNumber(unsigned) {
+ if (!unsigned && this.hi >>> 31) {
+ var lo = ~this.lo + 1 >>> 0,
+ hi = ~this.hi >>> 0;
+ if (!lo) hi = hi + 1 >>> 0;
+ return -(lo + hi * 4294967296);
+ }
+ return this.lo + this.hi * 4294967296;
+ };
+
+ /**
+ * Converts this long bits to a long.
+ * @param {boolean} [unsigned=false] Whether unsigned or not
+ * @returns {Long} Long
+ */
+ LongBits.prototype.toLong = function toLong(unsigned) {
+ return util.Long ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))
+ /* istanbul ignore next */ : {
+ low: this.lo | 0,
+ high: this.hi | 0,
+ unsigned: Boolean(unsigned)
+ };
+ };
+ var charCodeAt = String.prototype.charCodeAt;
+
+ /**
+ * Constructs new long bits from the specified 8 characters long hash.
+ * @param {string} hash Hash
+ * @returns {util.LongBits} Bits
+ */
+ LongBits.fromHash = function fromHash(hash) {
+ if (hash === zeroHash) return zero;
+ return new LongBits((charCodeAt.call(hash, 0) | charCodeAt.call(hash, 1) << 8 | charCodeAt.call(hash, 2) << 16 | charCodeAt.call(hash, 3) << 24) >>> 0, (charCodeAt.call(hash, 4) | charCodeAt.call(hash, 5) << 8 | charCodeAt.call(hash, 6) << 16 | charCodeAt.call(hash, 7) << 24) >>> 0);
+ };
+
+ /**
+ * Converts this long bits to a 8 characters long hash.
+ * @returns {string} Hash
+ */
+ LongBits.prototype.toHash = function toHash() {
+ return String.fromCharCode(this.lo & 255, this.lo >>> 8 & 255, this.lo >>> 16 & 255, this.lo >>> 24, this.hi & 255, this.hi >>> 8 & 255, this.hi >>> 16 & 255, this.hi >>> 24);
+ };
+
+ /**
+ * Zig-zag encodes this long bits.
+ * @returns {util.LongBits} `this`
+ */
+ LongBits.prototype.zzEncode = function zzEncode() {
+ var mask = this.hi >> 31;
+ this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;
+ this.lo = (this.lo << 1 ^ mask) >>> 0;
+ return this;
+ };
+
+ /**
+ * Zig-zag decodes this long bits.
+ * @returns {util.LongBits} `this`
+ */
+ LongBits.prototype.zzDecode = function zzDecode() {
+ var mask = -(this.lo & 1);
+ this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;
+ this.hi = (this.hi >>> 1 ^ mask) >>> 0;
+ return this;
+ };
+
+ /**
+ * Calculates the length of this longbits when encoded as a varint.
+ * @returns {number} Length
+ */
+ LongBits.prototype.length = function length() {
+ var part0 = this.lo,
+ part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,
+ part2 = this.hi >>> 24;
+ return part2 === 0 ? part1 === 0 ? part0 < 16384 ? part0 < 128 ? 1 : 2 : part0 < 2097152 ? 3 : 4 : part1 < 16384 ? part1 < 128 ? 5 : 6 : part1 < 2097152 ? 7 : 8 : part2 < 128 ? 9 : 10;
+ };
+ return longbits;
+}
+
+var hasRequiredMinimal;
+function requireMinimal() {
+ if (hasRequiredMinimal) return minimal$1;
+ hasRequiredMinimal = 1;
+ (function (exports) {
+
+ var util = exports;
+
+ // used to return a Promise where callback is omitted
+ util.asPromise = requireAspromise();
+
+ // converts to / from base64 encoded strings
+ util.base64 = requireBase64();
+
+ // base class of rpc.Service
+ util.EventEmitter = requireEventemitter();
+
+ // float handling accross browsers
+ util.float = requireFloat();
+
+ // requires modules optionally and hides the call from bundlers
+ util.inquire = requireInquire();
+
+ // converts to / from utf8 encoded strings
+ util.utf8 = requireUtf8();
+
+ // provides a node-like buffer pool in the browser
+ util.pool = requirePool();
+
+ // utility to work with the low and high bits of a 64 bit value
+ util.LongBits = requireLongbits();
+
+ /**
+ * Whether running within node or not.
+ * @memberof util
+ * @type {boolean}
+ */
+ util.isNode = Boolean(typeof commonjsGlobal !== "undefined" && commonjsGlobal && commonjsGlobal.process && commonjsGlobal.process.versions && commonjsGlobal.process.versions.node);
+
+ /**
+ * Global object reference.
+ * @memberof util
+ * @type {Object}
+ */
+ util.global = util.isNode && commonjsGlobal || typeof window !== "undefined" && window || typeof self !== "undefined" && self || commonjsGlobal; // eslint-disable-line no-invalid-this
+
+ /**
+ * An immuable empty array.
+ * @memberof util
+ * @type {Array.<*>}
+ * @const
+ */
+ util.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */[]; // used on prototypes
+
+ /**
+ * An immutable empty object.
+ * @type {Object}
+ * @const
+ */
+ util.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */{}; // used on prototypes
+
+ /**
+ * Tests if the specified value is an integer.
+ * @function
+ * @param {*} value Value to test
+ * @returns {boolean} `true` if the value is an integer
+ */
+ util.isInteger = Number.isInteger || /* istanbul ignore next */function isInteger(value) {
+ return typeof value === "number" && isFinite(value) && Math.floor(value) === value;
+ };
+
+ /**
+ * Tests if the specified value is a string.
+ * @param {*} value Value to test
+ * @returns {boolean} `true` if the value is a string
+ */
+ util.isString = function isString(value) {
+ return typeof value === "string" || value instanceof String;
+ };
+
+ /**
+ * Tests if the specified value is a non-null object.
+ * @param {*} value Value to test
+ * @returns {boolean} `true` if the value is a non-null object
+ */
+ util.isObject = function isObject(value) {
+ return value && typeof value === "object";
+ };
+
+ /**
+ * Checks if a property on a message is considered to be present.
+ * This is an alias of {@link util.isSet}.
+ * @function
+ * @param {Object} obj Plain object or message instance
+ * @param {string} prop Property name
+ * @returns {boolean} `true` if considered to be present, otherwise `false`
+ */
+ util.isset =
+ /**
+ * Checks if a property on a message is considered to be present.
+ * @param {Object} obj Plain object or message instance
+ * @param {string} prop Property name
+ * @returns {boolean} `true` if considered to be present, otherwise `false`
+ */
+ util.isSet = function isSet(obj, prop) {
+ var value = obj[prop];
+ if (value != null && obj.hasOwnProperty(prop))
+ // eslint-disable-line eqeqeq, no-prototype-builtins
+ return typeof value !== "object" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;
+ return false;
+ };
+
+ /**
+ * Any compatible Buffer instance.
+ * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.
+ * @interface Buffer
+ * @extends Uint8Array
+ */
+
+ /**
+ * Node's Buffer class if available.
+ * @type {Constructor}
+ */
+ util.Buffer = function () {
+ try {
+ var Buffer = util.inquire("buffer").Buffer;
+ // refuse to use non-node buffers if not explicitly assigned (perf reasons):
+ return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */null;
+ } catch (e) {
+ /* istanbul ignore next */
+ return null;
+ }
+ }();
+
+ // Internal alias of or polyfull for Buffer.from.
+ util._Buffer_from = null;
+
+ // Internal alias of or polyfill for Buffer.allocUnsafe.
+ util._Buffer_allocUnsafe = null;
+
+ /**
+ * Creates a new buffer of whatever type supported by the environment.
+ * @param {number|number[]} [sizeOrArray=0] Buffer size or number array
+ * @returns {Uint8Array|Buffer} Buffer
+ */
+ util.newBuffer = function newBuffer(sizeOrArray) {
+ /* istanbul ignore next */
+ return typeof sizeOrArray === "number" ? util.Buffer ? util._Buffer_allocUnsafe(sizeOrArray) : new util.Array(sizeOrArray) : util.Buffer ? util._Buffer_from(sizeOrArray) : typeof Uint8Array === "undefined" ? sizeOrArray : new Uint8Array(sizeOrArray);
+ };
+
+ /**
+ * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.
+ * @type {Constructor}
+ */
+ util.Array = typeof Uint8Array !== "undefined" ? Uint8Array /* istanbul ignore next */ : Array;
+
+ /**
+ * Any compatible Long instance.
+ * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.
+ * @interface Long
+ * @property {number} low Low bits
+ * @property {number} high High bits
+ * @property {boolean} unsigned Whether unsigned or not
+ */
+
+ /**
+ * Long.js's Long class if available.
+ * @type {Constructor}
+ */
+ util.Long = /* istanbul ignore next */util.global.dcodeIO && /* istanbul ignore next */util.global.dcodeIO.Long || /* istanbul ignore next */util.global.Long || util.inquire("long");
+
+ /**
+ * Regular expression used to verify 2 bit (`bool`) map keys.
+ * @type {RegExp}
+ * @const
+ */
+ util.key2Re = /^true|false|0|1$/;
+
+ /**
+ * Regular expression used to verify 32 bit (`int32` etc.) map keys.
+ * @type {RegExp}
+ * @const
+ */
+ util.key32Re = /^-?(?:0|[1-9][0-9]*)$/;
+
+ /**
+ * Regular expression used to verify 64 bit (`int64` etc.) map keys.
+ * @type {RegExp}
+ * @const
+ */
+ util.key64Re = /^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;
+
+ /**
+ * Converts a number or long to an 8 characters long hash string.
+ * @param {Long|number} value Value to convert
+ * @returns {string} Hash
+ */
+ util.longToHash = function longToHash(value) {
+ return value ? util.LongBits.from(value).toHash() : util.LongBits.zeroHash;
+ };
+
+ /**
+ * Converts an 8 characters long hash string to a long or number.
+ * @param {string} hash Hash
+ * @param {boolean} [unsigned=false] Whether unsigned or not
+ * @returns {Long|number} Original value
+ */
+ util.longFromHash = function longFromHash(hash, unsigned) {
+ var bits = util.LongBits.fromHash(hash);
+ if (util.Long) return util.Long.fromBits(bits.lo, bits.hi, unsigned);
+ return bits.toNumber(Boolean(unsigned));
+ };
+
+ /**
+ * Merges the properties of the source object into the destination object.
+ * @memberof util
+ * @param {Object.} dst Destination object
+ * @param {Object.} src Source object
+ * @param {boolean} [ifNotSet=false] Merges only if the key is not already set
+ * @returns {Object.} Destination object
+ */
+ function merge(dst, src, ifNotSet) {
+ // used by converters
+ for (var keys = Object.keys(src), i = 0; i < keys.length; ++i) if (dst[keys[i]] === undefined || !ifNotSet) dst[keys[i]] = src[keys[i]];
+ return dst;
+ }
+ util.merge = merge;
+
+ /**
+ * Converts the first character of a string to lower case.
+ * @param {string} str String to convert
+ * @returns {string} Converted string
+ */
+ util.lcFirst = function lcFirst(str) {
+ return str.charAt(0).toLowerCase() + str.substring(1);
+ };
+
+ /**
+ * Creates a custom error constructor.
+ * @memberof util
+ * @param {string} name Error name
+ * @returns {Constructor} Custom error constructor
+ */
+ function newError(name) {
+ function CustomError(message, properties) {
+ if (!(this instanceof CustomError)) return new CustomError(message, properties);
+
+ // Error.call(this, message);
+ // ^ just returns a new error instance because the ctor can be called as a function
+
+ Object.defineProperty(this, "message", {
+ get: function () {
+ return message;
+ }
+ });
+
+ /* istanbul ignore next */
+ if (Error.captureStackTrace)
+ // node
+ Error.captureStackTrace(this, CustomError);else Object.defineProperty(this, "stack", {
+ value: new Error().stack || ""
+ });
+ if (properties) merge(this, properties);
+ }
+ CustomError.prototype = Object.create(Error.prototype, {
+ constructor: {
+ value: CustomError,
+ writable: true,
+ enumerable: false,
+ configurable: true
+ },
+ name: {
+ get: function get() {
+ return name;
+ },
+ set: undefined,
+ enumerable: false,
+ // configurable: false would accurately preserve the behavior of
+ // the original, but I'm guessing that was not intentional.
+ // For an actual error subclass, this property would
+ // be configurable.
+ configurable: true
+ },
+ toString: {
+ value: function value() {
+ return this.name + ": " + this.message;
+ },
+ writable: true,
+ enumerable: false,
+ configurable: true
+ }
+ });
+ return CustomError;
+ }
+ util.newError = newError;
+
+ /**
+ * Constructs a new protocol error.
+ * @classdesc Error subclass indicating a protocol specifc error.
+ * @memberof util
+ * @extends Error
+ * @template T extends Message
+ * @constructor
+ * @param {string} message Error message
+ * @param {Object.} [properties] Additional properties
+ * @example
+ * try {
+ * MyMessage.decode(someBuffer); // throws if required fields are missing
+ * } catch (e) {
+ * if (e instanceof ProtocolError && e.instance)
+ * console.log("decoded so far: " + JSON.stringify(e.instance));
+ * }
+ */
+ util.ProtocolError = newError("ProtocolError");
+
+ /**
+ * So far decoded message instance.
+ * @name util.ProtocolError#instance
+ * @type {Message}
+ */
+
+ /**
+ * A OneOf getter as returned by {@link util.oneOfGetter}.
+ * @typedef OneOfGetter
+ * @type {function}
+ * @returns {string|undefined} Set field name, if any
+ */
+
+ /**
+ * Builds a getter for a oneof's present field name.
+ * @param {string[]} fieldNames Field names
+ * @returns {OneOfGetter} Unbound getter
+ */
+ util.oneOfGetter = function getOneOf(fieldNames) {
+ var fieldMap = {};
+ for (var i = 0; i < fieldNames.length; ++i) fieldMap[fieldNames[i]] = 1;
+
+ /**
+ * @returns {string|undefined} Set field name, if any
+ * @this Object
+ * @ignore
+ */
+ return function () {
+ // eslint-disable-line consistent-return
+ for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i) if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null) return keys[i];
+ };
+ };
+
+ /**
+ * A OneOf setter as returned by {@link util.oneOfSetter}.
+ * @typedef OneOfSetter
+ * @type {function}
+ * @param {string|undefined} value Field name
+ * @returns {undefined}
+ */
+
+ /**
+ * Builds a setter for a oneof's present field name.
+ * @param {string[]} fieldNames Field names
+ * @returns {OneOfSetter} Unbound setter
+ */
+ util.oneOfSetter = function setOneOf(fieldNames) {
+ /**
+ * @param {string} name Field name
+ * @returns {undefined}
+ * @this Object
+ * @ignore
+ */
+ return function (name) {
+ for (var i = 0; i < fieldNames.length; ++i) if (fieldNames[i] !== name) delete this[fieldNames[i]];
+ };
+ };
+
+ /**
+ * Default conversion options used for {@link Message#toJSON} implementations.
+ *
+ * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:
+ *
+ * - Longs become strings
+ * - Enums become string keys
+ * - Bytes become base64 encoded strings
+ * - (Sub-)Messages become plain objects
+ * - Maps become plain objects with all string keys
+ * - Repeated fields become arrays
+ * - NaN and Infinity for float and double fields become strings
+ *
+ * @type {IConversionOptions}
+ * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json
+ */
+ util.toJSONOptions = {
+ longs: String,
+ enums: String,
+ bytes: String,
+ json: true
+ };
+
+ // Sets up buffer utility according to the environment (called in index-minimal)
+ util._configure = function () {
+ var Buffer = util.Buffer;
+ /* istanbul ignore if */
+ if (!Buffer) {
+ util._Buffer_from = util._Buffer_allocUnsafe = null;
+ return;
+ }
+ // because node 4.x buffers are incompatible & immutable
+ // see: https://github.com/dcodeIO/protobuf.js/pull/665
+ util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from || /* istanbul ignore next */
+ function Buffer_from(value, encoding) {
+ return new Buffer(value, encoding);
+ };
+ util._Buffer_allocUnsafe = Buffer.allocUnsafe || /* istanbul ignore next */
+ function Buffer_allocUnsafe(size) {
+ return new Buffer(size);
+ };
+ };
+ })(minimal$1);
+ return minimal$1;
+}
+
+var writer$2 = Writer$1;
+var util$4 = requireMinimal();
+var BufferWriter$1; // cyclic
+
+var LongBits$1 = util$4.LongBits,
+ base64 = util$4.base64,
+ utf8$1 = util$4.utf8;
+
+/**
+ * Constructs a new writer operation instance.
+ * @classdesc Scheduled writer operation.
+ * @constructor
+ * @param {function(*, Uint8Array, number)} fn Function to call
+ * @param {number} len Value byte length
+ * @param {*} val Value to write
+ * @ignore
+ */
+function Op(fn, len, val) {
+ /**
+ * Function to call.
+ * @type {function(Uint8Array, number, *)}
+ */
+ this.fn = fn;
+
+ /**
+ * Value byte length.
+ * @type {number}
+ */
+ this.len = len;
+
+ /**
+ * Next operation.
+ * @type {Writer.Op|undefined}
+ */
+ this.next = undefined;
+
+ /**
+ * Value to write.
+ * @type {*}
+ */
+ this.val = val; // type varies
+}
+
+/* istanbul ignore next */
+function noop() {} // eslint-disable-line no-empty-function
+
+/**
+ * Constructs a new writer state instance.
+ * @classdesc Copied writer state.
+ * @memberof Writer
+ * @constructor
+ * @param {Writer} writer Writer to copy state from
+ * @ignore
+ */
+function State(writer) {
+ /**
+ * Current head.
+ * @type {Writer.Op}
+ */
+ this.head = writer.head;
+
+ /**
+ * Current tail.
+ * @type {Writer.Op}
+ */
+ this.tail = writer.tail;
+
+ /**
+ * Current buffer length.
+ * @type {number}
+ */
+ this.len = writer.len;
+
+ /**
+ * Next state.
+ * @type {State|null}
+ */
+ this.next = writer.states;
+}
+
+/**
+ * Constructs a new writer instance.
+ * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.
+ * @constructor
+ */
+function Writer$1() {
+ /**
+ * Current length.
+ * @type {number}
+ */
+ this.len = 0;
+
+ /**
+ * Operations head.
+ * @type {Object}
+ */
+ this.head = new Op(noop, 0, 0);
+
+ /**
+ * Operations tail
+ * @type {Object}
+ */
+ this.tail = this.head;
+
+ /**
+ * Linked forked states.
+ * @type {Object|null}
+ */
+ this.states = null;
+
+ // When a value is written, the writer calculates its byte length and puts it into a linked
+ // list of operations to perform when finish() is called. This both allows us to allocate
+ // buffers of the exact required size and reduces the amount of work we have to do compared
+ // to first calculating over objects and then encoding over objects. In our case, the encoding
+ // part is just a linked list walk calling operations with already prepared values.
+}
+
+var create$1 = function create() {
+ return util$4.Buffer ? function create_buffer_setup() {
+ return (Writer$1.create = function create_buffer() {
+ return new BufferWriter$1();
+ })();
+ }
+ /* istanbul ignore next */ : function create_array() {
+ return new Writer$1();
+ };
+};
+
+/**
+ * Creates a new writer.
+ * @function
+ * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}
+ */
+Writer$1.create = create$1();
+
+/**
+ * Allocates a buffer of the specified size.
+ * @param {number} size Buffer size
+ * @returns {Uint8Array} Buffer
+ */
+Writer$1.alloc = function alloc(size) {
+ return new util$4.Array(size);
+};
+
+// Use Uint8Array buffer pool in the browser, just like node does with buffers
+/* istanbul ignore else */
+if (util$4.Array !== Array) Writer$1.alloc = util$4.pool(Writer$1.alloc, util$4.Array.prototype.subarray);
+
+/**
+ * Pushes a new operation to the queue.
+ * @param {function(Uint8Array, number, *)} fn Function to call
+ * @param {number} len Value byte length
+ * @param {number} val Value to write
+ * @returns {Writer} `this`
+ * @private
+ */
+Writer$1.prototype._push = function push(fn, len, val) {
+ this.tail = this.tail.next = new Op(fn, len, val);
+ this.len += len;
+ return this;
+};
+function writeByte(val, buf, pos) {
+ buf[pos] = val & 255;
+}
+function writeVarint32(val, buf, pos) {
+ while (val > 127) {
+ buf[pos++] = val & 127 | 128;
+ val >>>= 7;
+ }
+ buf[pos] = val;
+}
+
+/**
+ * Constructs a new varint writer operation instance.
+ * @classdesc Scheduled varint writer operation.
+ * @extends Op
+ * @constructor
+ * @param {number} len Value byte length
+ * @param {number} val Value to write
+ * @ignore
+ */
+function VarintOp(len, val) {
+ this.len = len;
+ this.next = undefined;
+ this.val = val;
+}
+VarintOp.prototype = Object.create(Op.prototype);
+VarintOp.prototype.fn = writeVarint32;
+
+/**
+ * Writes an unsigned 32 bit value as a varint.
+ * @param {number} value Value to write
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.uint32 = function write_uint32(value) {
+ // here, the call to this.push has been inlined and a varint specific Op subclass is used.
+ // uint32 is by far the most frequently used operation and benefits significantly from this.
+ this.len += (this.tail = this.tail.next = new VarintOp((value = value >>> 0) < 128 ? 1 : value < 16384 ? 2 : value < 2097152 ? 3 : value < 268435456 ? 4 : 5, value)).len;
+ return this;
+};
+
+/**
+ * Writes a signed 32 bit value as a varint.
+ * @function
+ * @param {number} value Value to write
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.int32 = function write_int32(value) {
+ return value < 0 ? this._push(writeVarint64, 10, LongBits$1.fromNumber(value)) // 10 bytes per spec
+ : this.uint32(value);
+};
+
+/**
+ * Writes a 32 bit value as a varint, zig-zag encoded.
+ * @param {number} value Value to write
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.sint32 = function write_sint32(value) {
+ return this.uint32((value << 1 ^ value >> 31) >>> 0);
+};
+function writeVarint64(val, buf, pos) {
+ while (val.hi) {
+ buf[pos++] = val.lo & 127 | 128;
+ val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;
+ val.hi >>>= 7;
+ }
+ while (val.lo > 127) {
+ buf[pos++] = val.lo & 127 | 128;
+ val.lo = val.lo >>> 7;
+ }
+ buf[pos++] = val.lo;
+}
+
+/**
+ * Writes an unsigned 64 bit value as a varint.
+ * @param {Long|number|string} value Value to write
+ * @returns {Writer} `this`
+ * @throws {TypeError} If `value` is a string and no long library is present.
+ */
+Writer$1.prototype.uint64 = function write_uint64(value) {
+ var bits = LongBits$1.from(value);
+ return this._push(writeVarint64, bits.length(), bits);
+};
+
+/**
+ * Writes a signed 64 bit value as a varint.
+ * @function
+ * @param {Long|number|string} value Value to write
+ * @returns {Writer} `this`
+ * @throws {TypeError} If `value` is a string and no long library is present.
+ */
+Writer$1.prototype.int64 = Writer$1.prototype.uint64;
+
+/**
+ * Writes a signed 64 bit value as a varint, zig-zag encoded.
+ * @param {Long|number|string} value Value to write
+ * @returns {Writer} `this`
+ * @throws {TypeError} If `value` is a string and no long library is present.
+ */
+Writer$1.prototype.sint64 = function write_sint64(value) {
+ var bits = LongBits$1.from(value).zzEncode();
+ return this._push(writeVarint64, bits.length(), bits);
+};
+
+/**
+ * Writes a boolish value as a varint.
+ * @param {boolean} value Value to write
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.bool = function write_bool(value) {
+ return this._push(writeByte, 1, value ? 1 : 0);
+};
+function writeFixed32(val, buf, pos) {
+ buf[pos] = val & 255;
+ buf[pos + 1] = val >>> 8 & 255;
+ buf[pos + 2] = val >>> 16 & 255;
+ buf[pos + 3] = val >>> 24;
+}
+
+/**
+ * Writes an unsigned 32 bit value as fixed 32 bits.
+ * @param {number} value Value to write
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.fixed32 = function write_fixed32(value) {
+ return this._push(writeFixed32, 4, value >>> 0);
+};
+
+/**
+ * Writes a signed 32 bit value as fixed 32 bits.
+ * @function
+ * @param {number} value Value to write
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.sfixed32 = Writer$1.prototype.fixed32;
+
+/**
+ * Writes an unsigned 64 bit value as fixed 64 bits.
+ * @param {Long|number|string} value Value to write
+ * @returns {Writer} `this`
+ * @throws {TypeError} If `value` is a string and no long library is present.
+ */
+Writer$1.prototype.fixed64 = function write_fixed64(value) {
+ var bits = LongBits$1.from(value);
+ return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);
+};
+
+/**
+ * Writes a signed 64 bit value as fixed 64 bits.
+ * @function
+ * @param {Long|number|string} value Value to write
+ * @returns {Writer} `this`
+ * @throws {TypeError} If `value` is a string and no long library is present.
+ */
+Writer$1.prototype.sfixed64 = Writer$1.prototype.fixed64;
+
+/**
+ * Writes a float (32 bit).
+ * @function
+ * @param {number} value Value to write
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.float = function write_float(value) {
+ return this._push(util$4.float.writeFloatLE, 4, value);
+};
+
+/**
+ * Writes a double (64 bit float).
+ * @function
+ * @param {number} value Value to write
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.double = function write_double(value) {
+ return this._push(util$4.float.writeDoubleLE, 8, value);
+};
+var writeBytes = util$4.Array.prototype.set ? function writeBytes_set(val, buf, pos) {
+ buf.set(val, pos); // also works for plain array values
+}
+/* istanbul ignore next */ : function writeBytes_for(val, buf, pos) {
+ for (var i = 0; i < val.length; ++i) buf[pos + i] = val[i];
+};
+
+/**
+ * Writes a sequence of bytes.
+ * @param {Uint8Array|string} value Buffer or base64 encoded string to write
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.bytes = function write_bytes(value) {
+ var len = value.length >>> 0;
+ if (!len) return this._push(writeByte, 1, 0);
+ if (util$4.isString(value)) {
+ var buf = Writer$1.alloc(len = base64.length(value));
+ base64.decode(value, buf, 0);
+ value = buf;
+ }
+ return this.uint32(len)._push(writeBytes, len, value);
+};
+
+/**
+ * Writes a string.
+ * @param {string} value Value to write
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.string = function write_string(value) {
+ var len = utf8$1.length(value);
+ return len ? this.uint32(len)._push(utf8$1.write, len, value) : this._push(writeByte, 1, 0);
+};
+
+/**
+ * Forks this writer's state by pushing it to a stack.
+ * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.fork = function fork() {
+ this.states = new State(this);
+ this.head = this.tail = new Op(noop, 0, 0);
+ this.len = 0;
+ return this;
+};
+
+/**
+ * Resets this instance to the last state.
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.reset = function reset() {
+ if (this.states) {
+ this.head = this.states.head;
+ this.tail = this.states.tail;
+ this.len = this.states.len;
+ this.states = this.states.next;
+ } else {
+ this.head = this.tail = new Op(noop, 0, 0);
+ this.len = 0;
+ }
+ return this;
+};
+
+/**
+ * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.
+ * @returns {Writer} `this`
+ */
+Writer$1.prototype.ldelim = function ldelim() {
+ var head = this.head,
+ tail = this.tail,
+ len = this.len;
+ this.reset().uint32(len);
+ if (len) {
+ this.tail.next = head.next; // skip noop
+ this.tail = tail;
+ this.len += len;
+ }
+ return this;
+};
+
+/**
+ * Finishes the write operation.
+ * @returns {Uint8Array} Finished buffer
+ */
+Writer$1.prototype.finish = function finish() {
+ var head = this.head.next,
+ // skip noop
+ buf = this.constructor.alloc(this.len),
+ pos = 0;
+ while (head) {
+ head.fn(head.val, buf, pos);
+ pos += head.len;
+ head = head.next;
+ }
+ // this.head = this.tail = null;
+ return buf;
+};
+Writer$1._configure = function (BufferWriter_) {
+ BufferWriter$1 = BufferWriter_;
+ Writer$1.create = create$1();
+ BufferWriter$1._configure();
+};
+
+var writer_buffer = BufferWriter;
+
+// extends Writer
+var Writer = writer$2;
+(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;
+var util$3 = requireMinimal();
+
+/**
+ * Constructs a new buffer writer instance.
+ * @classdesc Wire format writer using node buffers.
+ * @extends Writer
+ * @constructor
+ */
+function BufferWriter() {
+ Writer.call(this);
+}
+BufferWriter._configure = function () {
+ /**
+ * Allocates a buffer of the specified size.
+ * @function
+ * @param {number} size Buffer size
+ * @returns {Buffer} Buffer
+ */
+ BufferWriter.alloc = util$3._Buffer_allocUnsafe;
+ BufferWriter.writeBytesBuffer = util$3.Buffer && util$3.Buffer.prototype instanceof Uint8Array && util$3.Buffer.prototype.set.name === "set" ? function writeBytesBuffer_set(val, buf, pos) {
+ buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)
+ // also works for plain array values
+ }
+ /* istanbul ignore next */ : function writeBytesBuffer_copy(val, buf, pos) {
+ if (val.copy)
+ // Buffer values
+ val.copy(buf, pos, 0, val.length);else for (var i = 0; i < val.length;)
+ // plain array values
+ buf[pos++] = val[i++];
+ };
+};
+
+/**
+ * @override
+ */
+BufferWriter.prototype.bytes = function write_bytes_buffer(value) {
+ if (util$3.isString(value)) value = util$3._Buffer_from(value, "base64");
+ var len = value.length >>> 0;
+ this.uint32(len);
+ if (len) this._push(BufferWriter.writeBytesBuffer, len, value);
+ return this;
+};
+function writeStringBuffer(val, buf, pos) {
+ if (val.length < 40)
+ // plain js is faster for short strings (probably due to redundant assertions)
+ util$3.utf8.write(val, buf, pos);else if (buf.utf8Write) buf.utf8Write(val, pos);else buf.write(val, pos);
+}
+
+/**
+ * @override
+ */
+BufferWriter.prototype.string = function write_string_buffer(value) {
+ var len = util$3.Buffer.byteLength(value);
+ this.uint32(len);
+ if (len) this._push(writeStringBuffer, len, value);
+ return this;
+};
+
+/**
+ * Finishes the write operation.
+ * @name BufferWriter#finish
+ * @function
+ * @returns {Buffer} Finished buffer
+ */
+
+BufferWriter._configure();
+
+var reader = Reader$1;
+var util$2 = requireMinimal();
+var BufferReader$1; // cyclic
+
+var LongBits = util$2.LongBits,
+ utf8 = util$2.utf8;
+
+/* istanbul ignore next */
+function indexOutOfRange(reader, writeLength) {
+ return RangeError("index out of range: " + reader.pos + " + " + (writeLength || 1) + " > " + reader.len);
+}
+
+/**
+ * Constructs a new reader instance using the specified buffer.
+ * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.
+ * @constructor
+ * @param {Uint8Array} buffer Buffer to read from
+ */
+function Reader$1(buffer) {
+ /**
+ * Read buffer.
+ * @type {Uint8Array}
+ */
+ this.buf = buffer;
+
+ /**
+ * Read buffer position.
+ * @type {number}
+ */
+ this.pos = 0;
+
+ /**
+ * Read buffer length.
+ * @type {number}
+ */
+ this.len = buffer.length;
+}
+var create_array = typeof Uint8Array !== "undefined" ? function create_typed_array(buffer) {
+ if (buffer instanceof Uint8Array || Array.isArray(buffer)) return new Reader$1(buffer);
+ throw Error("illegal buffer");
+}
+/* istanbul ignore next */ : function create_array(buffer) {
+ if (Array.isArray(buffer)) return new Reader$1(buffer);
+ throw Error("illegal buffer");
+};
+var create = function create() {
+ return util$2.Buffer ? function create_buffer_setup(buffer) {
+ return (Reader$1.create = function create_buffer(buffer) {
+ return util$2.Buffer.isBuffer(buffer) ? new BufferReader$1(buffer)
+ /* istanbul ignore next */ : create_array(buffer);
+ })(buffer);
+ }
+ /* istanbul ignore next */ : create_array;
+};
+
+/**
+ * Creates a new reader using the specified buffer.
+ * @function
+ * @param {Uint8Array|Buffer} buffer Buffer to read from
+ * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}
+ * @throws {Error} If `buffer` is not a valid buffer
+ */
+Reader$1.create = create();
+Reader$1.prototype._slice = util$2.Array.prototype.subarray || /* istanbul ignore next */util$2.Array.prototype.slice;
+
+/**
+ * Reads a varint as an unsigned 32 bit value.
+ * @function
+ * @returns {number} Value read
+ */
+Reader$1.prototype.uint32 = function read_uint32_setup() {
+ var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)
+ return function read_uint32() {
+ value = (this.buf[this.pos] & 127) >>> 0;
+ if (this.buf[this.pos++] < 128) return value;
+ value = (value | (this.buf[this.pos] & 127) << 7) >>> 0;
+ if (this.buf[this.pos++] < 128) return value;
+ value = (value | (this.buf[this.pos] & 127) << 14) >>> 0;
+ if (this.buf[this.pos++] < 128) return value;
+ value = (value | (this.buf[this.pos] & 127) << 21) >>> 0;
+ if (this.buf[this.pos++] < 128) return value;
+ value = (value | (this.buf[this.pos] & 15) << 28) >>> 0;
+ if (this.buf[this.pos++] < 128) return value;
+
+ /* istanbul ignore if */
+ if ((this.pos += 5) > this.len) {
+ this.pos = this.len;
+ throw indexOutOfRange(this, 10);
+ }
+ return value;
+ };
+}();
+
+/**
+ * Reads a varint as a signed 32 bit value.
+ * @returns {number} Value read
+ */
+Reader$1.prototype.int32 = function read_int32() {
+ return this.uint32() | 0;
+};
+
+/**
+ * Reads a zig-zag encoded varint as a signed 32 bit value.
+ * @returns {number} Value read
+ */
+Reader$1.prototype.sint32 = function read_sint32() {
+ var value = this.uint32();
+ return value >>> 1 ^ -(value & 1) | 0;
+};
+
+/* eslint-disable no-invalid-this */
+
+function readLongVarint() {
+ // tends to deopt with local vars for octet etc.
+ var bits = new LongBits(0, 0);
+ var i = 0;
+ if (this.len - this.pos > 4) {
+ // fast route (lo)
+ for (; i < 4; ++i) {
+ // 1st..4th
+ bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
+ if (this.buf[this.pos++] < 128) return bits;
+ }
+ // 5th
+ bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;
+ bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;
+ if (this.buf[this.pos++] < 128) return bits;
+ i = 0;
+ } else {
+ for (; i < 3; ++i) {
+ /* istanbul ignore if */
+ if (this.pos >= this.len) throw indexOutOfRange(this);
+ // 1st..3th
+ bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
+ if (this.buf[this.pos++] < 128) return bits;
+ }
+ // 4th
+ bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;
+ return bits;
+ }
+ if (this.len - this.pos > 4) {
+ // fast route (hi)
+ for (; i < 5; ++i) {
+ // 6th..10th
+ bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
+ if (this.buf[this.pos++] < 128) return bits;
+ }
+ } else {
+ for (; i < 5; ++i) {
+ /* istanbul ignore if */
+ if (this.pos >= this.len) throw indexOutOfRange(this);
+ // 6th..10th
+ bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
+ if (this.buf[this.pos++] < 128) return bits;
+ }
+ }
+ /* istanbul ignore next */
+ throw Error("invalid varint encoding");
+}
+
+/* eslint-enable no-invalid-this */
+
+/**
+ * Reads a varint as a signed 64 bit value.
+ * @name Reader#int64
+ * @function
+ * @returns {Long} Value read
+ */
+
+/**
+ * Reads a varint as an unsigned 64 bit value.
+ * @name Reader#uint64
+ * @function
+ * @returns {Long} Value read
+ */
+
+/**
+ * Reads a zig-zag encoded varint as a signed 64 bit value.
+ * @name Reader#sint64
+ * @function
+ * @returns {Long} Value read
+ */
+
+/**
+ * Reads a varint as a boolean.
+ * @returns {boolean} Value read
+ */
+Reader$1.prototype.bool = function read_bool() {
+ return this.uint32() !== 0;
+};
+function readFixed32_end(buf, end) {
+ // note that this uses `end`, not `pos`
+ return (buf[end - 4] | buf[end - 3] << 8 | buf[end - 2] << 16 | buf[end - 1] << 24) >>> 0;
+}
+
+/**
+ * Reads fixed 32 bits as an unsigned 32 bit integer.
+ * @returns {number} Value read
+ */
+Reader$1.prototype.fixed32 = function read_fixed32() {
+ /* istanbul ignore if */
+ if (this.pos + 4 > this.len) throw indexOutOfRange(this, 4);
+ return readFixed32_end(this.buf, this.pos += 4);
+};
+
+/**
+ * Reads fixed 32 bits as a signed 32 bit integer.
+ * @returns {number} Value read
+ */
+Reader$1.prototype.sfixed32 = function read_sfixed32() {
+ /* istanbul ignore if */
+ if (this.pos + 4 > this.len) throw indexOutOfRange(this, 4);
+ return readFixed32_end(this.buf, this.pos += 4) | 0;
+};
+
+/* eslint-disable no-invalid-this */
+
+function readFixed64( /* this: Reader */
+) {
+ /* istanbul ignore if */
+ if (this.pos + 8 > this.len) throw indexOutOfRange(this, 8);
+ return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));
+}
+
+/* eslint-enable no-invalid-this */
+
+/**
+ * Reads fixed 64 bits.
+ * @name Reader#fixed64
+ * @function
+ * @returns {Long} Value read
+ */
+
+/**
+ * Reads zig-zag encoded fixed 64 bits.
+ * @name Reader#sfixed64
+ * @function
+ * @returns {Long} Value read
+ */
+
+/**
+ * Reads a float (32 bit) as a number.
+ * @function
+ * @returns {number} Value read
+ */
+Reader$1.prototype.float = function read_float() {
+ /* istanbul ignore if */
+ if (this.pos + 4 > this.len) throw indexOutOfRange(this, 4);
+ var value = util$2.float.readFloatLE(this.buf, this.pos);
+ this.pos += 4;
+ return value;
+};
+
+/**
+ * Reads a double (64 bit float) as a number.
+ * @function
+ * @returns {number} Value read
+ */
+Reader$1.prototype.double = function read_double() {
+ /* istanbul ignore if */
+ if (this.pos + 8 > this.len) throw indexOutOfRange(this, 4);
+ var value = util$2.float.readDoubleLE(this.buf, this.pos);
+ this.pos += 8;
+ return value;
+};
+
+/**
+ * Reads a sequence of bytes preceeded by its length as a varint.
+ * @returns {Uint8Array} Value read
+ */
+Reader$1.prototype.bytes = function read_bytes() {
+ var length = this.uint32(),
+ start = this.pos,
+ end = this.pos + length;
+
+ /* istanbul ignore if */
+ if (end > this.len) throw indexOutOfRange(this, length);
+ this.pos += length;
+ if (Array.isArray(this.buf))
+ // plain array
+ return this.buf.slice(start, end);
+ return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1
+ ? new this.buf.constructor(0) : this._slice.call(this.buf, start, end);
+};
+
+/**
+ * Reads a string preceeded by its byte length as a varint.
+ * @returns {string} Value read
+ */
+Reader$1.prototype.string = function read_string() {
+ var bytes = this.bytes();
+ return utf8.read(bytes, 0, bytes.length);
+};
+
+/**
+ * Skips the specified number of bytes if specified, otherwise skips a varint.
+ * @param {number} [length] Length if known, otherwise a varint is assumed
+ * @returns {Reader} `this`
+ */
+Reader$1.prototype.skip = function skip(length) {
+ if (typeof length === "number") {
+ /* istanbul ignore if */
+ if (this.pos + length > this.len) throw indexOutOfRange(this, length);
+ this.pos += length;
+ } else {
+ do {
+ /* istanbul ignore if */
+ if (this.pos >= this.len) throw indexOutOfRange(this);
+ } while (this.buf[this.pos++] & 128);
+ }
+ return this;
+};
+
+/**
+ * Skips the next element of the specified wire type.
+ * @param {number} wireType Wire type received
+ * @returns {Reader} `this`
+ */
+Reader$1.prototype.skipType = function (wireType) {
+ switch (wireType) {
+ case 0:
+ this.skip();
+ break;
+ case 1:
+ this.skip(8);
+ break;
+ case 2:
+ this.skip(this.uint32());
+ break;
+ case 3:
+ while ((wireType = this.uint32() & 7) !== 4) {
+ this.skipType(wireType);
+ }
+ break;
+ case 5:
+ this.skip(4);
+ break;
+
+ /* istanbul ignore next */
+ default:
+ throw Error("invalid wire type " + wireType + " at offset " + this.pos);
+ }
+ return this;
+};
+Reader$1._configure = function (BufferReader_) {
+ BufferReader$1 = BufferReader_;
+ Reader$1.create = create();
+ BufferReader$1._configure();
+ var fn = util$2.Long ? "toLong" : /* istanbul ignore next */"toNumber";
+ util$2.merge(Reader$1.prototype, {
+ int64: function read_int64() {
+ return readLongVarint.call(this)[fn](false);
+ },
+ uint64: function read_uint64() {
+ return readLongVarint.call(this)[fn](true);
+ },
+ sint64: function read_sint64() {
+ return readLongVarint.call(this).zzDecode()[fn](false);
+ },
+ fixed64: function read_fixed64() {
+ return readFixed64.call(this)[fn](true);
+ },
+ sfixed64: function read_sfixed64() {
+ return readFixed64.call(this)[fn](false);
+ }
+ });
+};
+
+var reader_buffer = BufferReader;
+
+// extends Reader
+var Reader = reader;
+(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;
+var util$1 = requireMinimal();
+
+/**
+ * Constructs a new buffer reader instance.
+ * @classdesc Wire format reader using node buffers.
+ * @extends Reader
+ * @constructor
+ * @param {Buffer} buffer Buffer to read from
+ */
+function BufferReader(buffer) {
+ Reader.call(this, buffer);
+
+ /**
+ * Read buffer.
+ * @name BufferReader#buf
+ * @type {Buffer}
+ */
+}
+
+BufferReader._configure = function () {
+ /* istanbul ignore else */
+ if (util$1.Buffer) BufferReader.prototype._slice = util$1.Buffer.prototype.slice;
+};
+
+/**
+ * @override
+ */
+BufferReader.prototype.string = function read_string_buffer() {
+ var len = this.uint32(); // modifies pos
+ return this.buf.utf8Slice ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len)) : this.buf.toString("utf-8", this.pos, this.pos = Math.min(this.pos + len, this.len));
+};
+
+/**
+ * Reads a sequence of bytes preceeded by its length as a varint.
+ * @name BufferReader#bytes
+ * @function
+ * @returns {Buffer} Value read
+ */
+
+BufferReader._configure();
+
+var rpc = {};
+
+var service = Service;
+var util = requireMinimal();
+
+// Extends EventEmitter
+(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;
+
+/**
+ * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.
+ *
+ * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.
+ * @typedef rpc.ServiceMethodCallback
+ * @template TRes extends Message
+ * @type {function}
+ * @param {Error|null} error Error, if any
+ * @param {TRes} [response] Response message
+ * @returns {undefined}
+ */
+
+/**
+ * A service method part of a {@link rpc.Service} as created by {@link Service.create}.
+ * @typedef rpc.ServiceMethod
+ * @template TReq extends Message
+ * @template TRes extends Message
+ * @type {function}
+ * @param {TReq|Properties} request Request message or plain object
+ * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message
+ * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`
+ */
+
+/**
+ * Constructs a new RPC service instance.
+ * @classdesc An RPC service as returned by {@link Service#create}.
+ * @exports rpc.Service
+ * @extends util.EventEmitter
+ * @constructor
+ * @param {RPCImpl} rpcImpl RPC implementation
+ * @param {boolean} [requestDelimited=false] Whether requests are length-delimited
+ * @param {boolean} [responseDelimited=false] Whether responses are length-delimited
+ */
+function Service(rpcImpl, requestDelimited, responseDelimited) {
+ if (typeof rpcImpl !== "function") throw TypeError("rpcImpl must be a function");
+ util.EventEmitter.call(this);
+
+ /**
+ * RPC implementation. Becomes `null` once the service is ended.
+ * @type {RPCImpl|null}
+ */
+ this.rpcImpl = rpcImpl;
+
+ /**
+ * Whether requests are length-delimited.
+ * @type {boolean}
+ */
+ this.requestDelimited = Boolean(requestDelimited);
+
+ /**
+ * Whether responses are length-delimited.
+ * @type {boolean}
+ */
+ this.responseDelimited = Boolean(responseDelimited);
+}
+
+/**
+ * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.
+ * @param {Method|rpc.ServiceMethod} method Reflected or static method
+ * @param {Constructor} requestCtor Request constructor
+ * @param {Constructor} responseCtor Response constructor
+ * @param {TReq|Properties} request Request message or plain object
+ * @param {rpc.ServiceMethodCallback} callback Service callback
+ * @returns {undefined}
+ * @template TReq extends Message
+ * @template TRes extends Message
+ */
+Service.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {
+ if (!request) throw TypeError("request must be specified");
+ var self = this;
+ if (!callback) return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);
+ if (!self.rpcImpl) {
+ setTimeout(function () {
+ callback(Error("already ended"));
+ }, 0);
+ return undefined;
+ }
+ try {
+ return self.rpcImpl(method, requestCtor[self.requestDelimited ? "encodeDelimited" : "encode"](request).finish(), function rpcCallback(err, response) {
+ if (err) {
+ self.emit("error", err, method);
+ return callback(err);
+ }
+ if (response === null) {
+ self.end( /* endedByRPC */true);
+ return undefined;
+ }
+ if (!(response instanceof responseCtor)) {
+ try {
+ response = responseCtor[self.responseDelimited ? "decodeDelimited" : "decode"](response);
+ } catch (err) {
+ self.emit("error", err, method);
+ return callback(err);
+ }
+ }
+ self.emit("data", response, method);
+ return callback(null, response);
+ });
+ } catch (err) {
+ self.emit("error", err, method);
+ setTimeout(function () {
+ callback(err);
+ }, 0);
+ return undefined;
+ }
+};
+
+/**
+ * Ends this service and emits the `end` event.
+ * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.
+ * @returns {rpc.Service} `this`
+ */
+Service.prototype.end = function end(endedByRPC) {
+ if (this.rpcImpl) {
+ if (!endedByRPC)
+ // signal end to rpcImpl
+ this.rpcImpl(null, null, null);
+ this.rpcImpl = null;
+ this.emit("end").off();
+ }
+ return this;
+};
+
+(function (exports) {
+
+ /**
+ * Streaming RPC helpers.
+ * @namespace
+ */
+ var rpc = exports;
+
+ /**
+ * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.
+ * @typedef RPCImpl
+ * @type {function}
+ * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called
+ * @param {Uint8Array} requestData Request data
+ * @param {RPCImplCallback} callback Callback function
+ * @returns {undefined}
+ * @example
+ * function rpcImpl(method, requestData, callback) {
+ * if (protobuf.util.lcFirst(method.name) !== "myMethod") // compatible with static code
+ * throw Error("no such method");
+ * asynchronouslyObtainAResponse(requestData, function(err, responseData) {
+ * callback(err, responseData);
+ * });
+ * }
+ */
+
+ /**
+ * Node-style callback as used by {@link RPCImpl}.
+ * @typedef RPCImplCallback
+ * @type {function}
+ * @param {Error|null} error Error, if any, otherwise `null`
+ * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error
+ * @returns {undefined}
+ */
+
+ rpc.Service = service;
+})(rpc);
+
+var roots = {};
+
+(function (exports) {
+
+ var protobuf = exports;
+
+ /**
+ * Build type, one of `"full"`, `"light"` or `"minimal"`.
+ * @name build
+ * @type {string}
+ * @const
+ */
+ protobuf.build = "minimal";
+
+ // Serialization
+ protobuf.Writer = writer$2;
+ protobuf.BufferWriter = writer_buffer;
+ protobuf.Reader = reader;
+ protobuf.BufferReader = reader_buffer;
+
+ // Utility
+ protobuf.util = requireMinimal();
+ protobuf.rpc = rpc;
+ protobuf.roots = roots;
+ protobuf.configure = configure;
+
+ /* istanbul ignore next */
+ /**
+ * Reconfigures the library according to the environment.
+ * @returns {undefined}
+ */
+ function configure() {
+ protobuf.util._configure();
+ protobuf.Writer._configure(protobuf.BufferWriter);
+ protobuf.Reader._configure(protobuf.BufferReader);
+ }
+
+ // Set up buffer utility according to the environment
+ configure();
+})(indexMinimal);
+
+var minimal = indexMinimal;
+var _m0 = /*@__PURE__*/getDefaultExportFromCjs(minimal);
+
+/* eslint-disable */
+(() => {
+ if (typeof globalThis !== "undefined") {
+ return globalThis;
+ }
+ if (typeof self !== "undefined") {
+ return self;
+ }
+ if (typeof window !== "undefined") {
+ return window;
+ }
+ if (typeof global !== "undefined") {
+ return global;
+ }
+ throw "Unable to locate global object";
+})();
+if (_m0.util.Long !== Long$1) {
+ _m0.util.Long = Long$1;
+ _m0.configure();
+}
+
+/* eslint-disable */
+var AudioCodec;
+(function (AudioCodec) {
+ AudioCodec[AudioCodec["DEFAULT_AC"] = 0] = "DEFAULT_AC";
+ AudioCodec[AudioCodec["OPUS"] = 1] = "OPUS";
+ AudioCodec[AudioCodec["AAC"] = 2] = "AAC";
+ AudioCodec[AudioCodec["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(AudioCodec || (AudioCodec = {}));
+var VideoCodec;
+(function (VideoCodec) {
+ VideoCodec[VideoCodec["DEFAULT_VC"] = 0] = "DEFAULT_VC";
+ VideoCodec[VideoCodec["H264_BASELINE"] = 1] = "H264_BASELINE";
+ VideoCodec[VideoCodec["H264_MAIN"] = 2] = "H264_MAIN";
+ VideoCodec[VideoCodec["H264_HIGH"] = 3] = "H264_HIGH";
+ VideoCodec[VideoCodec["VP8"] = 4] = "VP8";
+ VideoCodec[VideoCodec["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(VideoCodec || (VideoCodec = {}));
+var TrackType;
+(function (TrackType) {
+ TrackType[TrackType["AUDIO"] = 0] = "AUDIO";
+ TrackType[TrackType["VIDEO"] = 1] = "VIDEO";
+ TrackType[TrackType["DATA"] = 2] = "DATA";
+ TrackType[TrackType["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(TrackType || (TrackType = {}));
+function trackTypeFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "AUDIO":
+ return TrackType.AUDIO;
+ case 1:
+ case "VIDEO":
+ return TrackType.VIDEO;
+ case 2:
+ case "DATA":
+ return TrackType.DATA;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return TrackType.UNRECOGNIZED;
+ }
+}
+function trackTypeToJSON(object) {
+ switch (object) {
+ case TrackType.AUDIO:
+ return "AUDIO";
+ case TrackType.VIDEO:
+ return "VIDEO";
+ case TrackType.DATA:
+ return "DATA";
+ case TrackType.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var TrackSource;
+(function (TrackSource) {
+ TrackSource[TrackSource["UNKNOWN"] = 0] = "UNKNOWN";
+ TrackSource[TrackSource["CAMERA"] = 1] = "CAMERA";
+ TrackSource[TrackSource["MICROPHONE"] = 2] = "MICROPHONE";
+ TrackSource[TrackSource["SCREEN_SHARE"] = 3] = "SCREEN_SHARE";
+ TrackSource[TrackSource["SCREEN_SHARE_AUDIO"] = 4] = "SCREEN_SHARE_AUDIO";
+ TrackSource[TrackSource["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(TrackSource || (TrackSource = {}));
+function trackSourceFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "UNKNOWN":
+ return TrackSource.UNKNOWN;
+ case 1:
+ case "CAMERA":
+ return TrackSource.CAMERA;
+ case 2:
+ case "MICROPHONE":
+ return TrackSource.MICROPHONE;
+ case 3:
+ case "SCREEN_SHARE":
+ return TrackSource.SCREEN_SHARE;
+ case 4:
+ case "SCREEN_SHARE_AUDIO":
+ return TrackSource.SCREEN_SHARE_AUDIO;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return TrackSource.UNRECOGNIZED;
+ }
+}
+function trackSourceToJSON(object) {
+ switch (object) {
+ case TrackSource.UNKNOWN:
+ return "UNKNOWN";
+ case TrackSource.CAMERA:
+ return "CAMERA";
+ case TrackSource.MICROPHONE:
+ return "MICROPHONE";
+ case TrackSource.SCREEN_SHARE:
+ return "SCREEN_SHARE";
+ case TrackSource.SCREEN_SHARE_AUDIO:
+ return "SCREEN_SHARE_AUDIO";
+ case TrackSource.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var VideoQuality;
+(function (VideoQuality) {
+ VideoQuality[VideoQuality["LOW"] = 0] = "LOW";
+ VideoQuality[VideoQuality["MEDIUM"] = 1] = "MEDIUM";
+ VideoQuality[VideoQuality["HIGH"] = 2] = "HIGH";
+ VideoQuality[VideoQuality["OFF"] = 3] = "OFF";
+ VideoQuality[VideoQuality["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(VideoQuality || (VideoQuality = {}));
+function videoQualityFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "LOW":
+ return VideoQuality.LOW;
+ case 1:
+ case "MEDIUM":
+ return VideoQuality.MEDIUM;
+ case 2:
+ case "HIGH":
+ return VideoQuality.HIGH;
+ case 3:
+ case "OFF":
+ return VideoQuality.OFF;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return VideoQuality.UNRECOGNIZED;
+ }
+}
+function videoQualityToJSON(object) {
+ switch (object) {
+ case VideoQuality.LOW:
+ return "LOW";
+ case VideoQuality.MEDIUM:
+ return "MEDIUM";
+ case VideoQuality.HIGH:
+ return "HIGH";
+ case VideoQuality.OFF:
+ return "OFF";
+ case VideoQuality.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var ConnectionQuality$1;
+(function (ConnectionQuality) {
+ ConnectionQuality[ConnectionQuality["POOR"] = 0] = "POOR";
+ ConnectionQuality[ConnectionQuality["GOOD"] = 1] = "GOOD";
+ ConnectionQuality[ConnectionQuality["EXCELLENT"] = 2] = "EXCELLENT";
+ ConnectionQuality[ConnectionQuality["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(ConnectionQuality$1 || (ConnectionQuality$1 = {}));
+function connectionQualityFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "POOR":
+ return ConnectionQuality$1.POOR;
+ case 1:
+ case "GOOD":
+ return ConnectionQuality$1.GOOD;
+ case 2:
+ case "EXCELLENT":
+ return ConnectionQuality$1.EXCELLENT;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return ConnectionQuality$1.UNRECOGNIZED;
+ }
+}
+function connectionQualityToJSON(object) {
+ switch (object) {
+ case ConnectionQuality$1.POOR:
+ return "POOR";
+ case ConnectionQuality$1.GOOD:
+ return "GOOD";
+ case ConnectionQuality$1.EXCELLENT:
+ return "EXCELLENT";
+ case ConnectionQuality$1.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var ClientConfigSetting;
+(function (ClientConfigSetting) {
+ ClientConfigSetting[ClientConfigSetting["UNSET"] = 0] = "UNSET";
+ ClientConfigSetting[ClientConfigSetting["DISABLED"] = 1] = "DISABLED";
+ ClientConfigSetting[ClientConfigSetting["ENABLED"] = 2] = "ENABLED";
+ ClientConfigSetting[ClientConfigSetting["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(ClientConfigSetting || (ClientConfigSetting = {}));
+function clientConfigSettingFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "UNSET":
+ return ClientConfigSetting.UNSET;
+ case 1:
+ case "DISABLED":
+ return ClientConfigSetting.DISABLED;
+ case 2:
+ case "ENABLED":
+ return ClientConfigSetting.ENABLED;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return ClientConfigSetting.UNRECOGNIZED;
+ }
+}
+function clientConfigSettingToJSON(object) {
+ switch (object) {
+ case ClientConfigSetting.UNSET:
+ return "UNSET";
+ case ClientConfigSetting.DISABLED:
+ return "DISABLED";
+ case ClientConfigSetting.ENABLED:
+ return "ENABLED";
+ case ClientConfigSetting.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var DisconnectReason;
+(function (DisconnectReason) {
+ DisconnectReason[DisconnectReason["UNKNOWN_REASON"] = 0] = "UNKNOWN_REASON";
+ DisconnectReason[DisconnectReason["CLIENT_INITIATED"] = 1] = "CLIENT_INITIATED";
+ DisconnectReason[DisconnectReason["DUPLICATE_IDENTITY"] = 2] = "DUPLICATE_IDENTITY";
+ DisconnectReason[DisconnectReason["SERVER_SHUTDOWN"] = 3] = "SERVER_SHUTDOWN";
+ DisconnectReason[DisconnectReason["PARTICIPANT_REMOVED"] = 4] = "PARTICIPANT_REMOVED";
+ DisconnectReason[DisconnectReason["ROOM_DELETED"] = 5] = "ROOM_DELETED";
+ DisconnectReason[DisconnectReason["STATE_MISMATCH"] = 6] = "STATE_MISMATCH";
+ DisconnectReason[DisconnectReason["JOIN_FAILURE"] = 7] = "JOIN_FAILURE";
+ DisconnectReason[DisconnectReason["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(DisconnectReason || (DisconnectReason = {}));
+function disconnectReasonFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "UNKNOWN_REASON":
+ return DisconnectReason.UNKNOWN_REASON;
+ case 1:
+ case "CLIENT_INITIATED":
+ return DisconnectReason.CLIENT_INITIATED;
+ case 2:
+ case "DUPLICATE_IDENTITY":
+ return DisconnectReason.DUPLICATE_IDENTITY;
+ case 3:
+ case "SERVER_SHUTDOWN":
+ return DisconnectReason.SERVER_SHUTDOWN;
+ case 4:
+ case "PARTICIPANT_REMOVED":
+ return DisconnectReason.PARTICIPANT_REMOVED;
+ case 5:
+ case "ROOM_DELETED":
+ return DisconnectReason.ROOM_DELETED;
+ case 6:
+ case "STATE_MISMATCH":
+ return DisconnectReason.STATE_MISMATCH;
+ case 7:
+ case "JOIN_FAILURE":
+ return DisconnectReason.JOIN_FAILURE;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return DisconnectReason.UNRECOGNIZED;
+ }
+}
+function disconnectReasonToJSON(object) {
+ switch (object) {
+ case DisconnectReason.UNKNOWN_REASON:
+ return "UNKNOWN_REASON";
+ case DisconnectReason.CLIENT_INITIATED:
+ return "CLIENT_INITIATED";
+ case DisconnectReason.DUPLICATE_IDENTITY:
+ return "DUPLICATE_IDENTITY";
+ case DisconnectReason.SERVER_SHUTDOWN:
+ return "SERVER_SHUTDOWN";
+ case DisconnectReason.PARTICIPANT_REMOVED:
+ return "PARTICIPANT_REMOVED";
+ case DisconnectReason.ROOM_DELETED:
+ return "ROOM_DELETED";
+ case DisconnectReason.STATE_MISMATCH:
+ return "STATE_MISMATCH";
+ case DisconnectReason.JOIN_FAILURE:
+ return "JOIN_FAILURE";
+ case DisconnectReason.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var ReconnectReason;
+(function (ReconnectReason) {
+ ReconnectReason[ReconnectReason["RR_UNKOWN"] = 0] = "RR_UNKOWN";
+ ReconnectReason[ReconnectReason["RR_SIGNAL_DISCONNECTED"] = 1] = "RR_SIGNAL_DISCONNECTED";
+ ReconnectReason[ReconnectReason["RR_PUBLISHER_FAILED"] = 2] = "RR_PUBLISHER_FAILED";
+ ReconnectReason[ReconnectReason["RR_SUBSCRIBER_FAILED"] = 3] = "RR_SUBSCRIBER_FAILED";
+ ReconnectReason[ReconnectReason["RR_SWITCH_CANDIDATE"] = 4] = "RR_SWITCH_CANDIDATE";
+ ReconnectReason[ReconnectReason["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(ReconnectReason || (ReconnectReason = {}));
+var SubscriptionError;
+(function (SubscriptionError) {
+ SubscriptionError[SubscriptionError["SE_UNKOWN"] = 0] = "SE_UNKOWN";
+ SubscriptionError[SubscriptionError["SE_CODEC_UNSUPPORTED"] = 1] = "SE_CODEC_UNSUPPORTED";
+ SubscriptionError[SubscriptionError["SE_TRACK_NOTFOUND"] = 2] = "SE_TRACK_NOTFOUND";
+ SubscriptionError[SubscriptionError["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(SubscriptionError || (SubscriptionError = {}));
+function subscriptionErrorFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "SE_UNKOWN":
+ return SubscriptionError.SE_UNKOWN;
+ case 1:
+ case "SE_CODEC_UNSUPPORTED":
+ return SubscriptionError.SE_CODEC_UNSUPPORTED;
+ case 2:
+ case "SE_TRACK_NOTFOUND":
+ return SubscriptionError.SE_TRACK_NOTFOUND;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return SubscriptionError.UNRECOGNIZED;
+ }
+}
+function subscriptionErrorToJSON(object) {
+ switch (object) {
+ case SubscriptionError.SE_UNKOWN:
+ return "SE_UNKOWN";
+ case SubscriptionError.SE_CODEC_UNSUPPORTED:
+ return "SE_CODEC_UNSUPPORTED";
+ case SubscriptionError.SE_TRACK_NOTFOUND:
+ return "SE_TRACK_NOTFOUND";
+ case SubscriptionError.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var ParticipantInfo_State;
+(function (ParticipantInfo_State) {
+ /** JOINING - websocket' connected, but not offered yet */
+ ParticipantInfo_State[ParticipantInfo_State["JOINING"] = 0] = "JOINING";
+ /** JOINED - server received client offer */
+ ParticipantInfo_State[ParticipantInfo_State["JOINED"] = 1] = "JOINED";
+ /** ACTIVE - ICE connectivity established */
+ ParticipantInfo_State[ParticipantInfo_State["ACTIVE"] = 2] = "ACTIVE";
+ /** DISCONNECTED - WS disconnected */
+ ParticipantInfo_State[ParticipantInfo_State["DISCONNECTED"] = 3] = "DISCONNECTED";
+ ParticipantInfo_State[ParticipantInfo_State["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(ParticipantInfo_State || (ParticipantInfo_State = {}));
+function participantInfo_StateFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "JOINING":
+ return ParticipantInfo_State.JOINING;
+ case 1:
+ case "JOINED":
+ return ParticipantInfo_State.JOINED;
+ case 2:
+ case "ACTIVE":
+ return ParticipantInfo_State.ACTIVE;
+ case 3:
+ case "DISCONNECTED":
+ return ParticipantInfo_State.DISCONNECTED;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return ParticipantInfo_State.UNRECOGNIZED;
+ }
+}
+function participantInfo_StateToJSON(object) {
+ switch (object) {
+ case ParticipantInfo_State.JOINING:
+ return "JOINING";
+ case ParticipantInfo_State.JOINED:
+ return "JOINED";
+ case ParticipantInfo_State.ACTIVE:
+ return "ACTIVE";
+ case ParticipantInfo_State.DISCONNECTED:
+ return "DISCONNECTED";
+ case ParticipantInfo_State.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var Encryption_Type;
+(function (Encryption_Type) {
+ Encryption_Type[Encryption_Type["NONE"] = 0] = "NONE";
+ Encryption_Type[Encryption_Type["GCM"] = 1] = "GCM";
+ Encryption_Type[Encryption_Type["CUSTOM"] = 2] = "CUSTOM";
+ Encryption_Type[Encryption_Type["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(Encryption_Type || (Encryption_Type = {}));
+function encryption_TypeFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "NONE":
+ return Encryption_Type.NONE;
+ case 1:
+ case "GCM":
+ return Encryption_Type.GCM;
+ case 2:
+ case "CUSTOM":
+ return Encryption_Type.CUSTOM;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return Encryption_Type.UNRECOGNIZED;
+ }
+}
+function encryption_TypeToJSON(object) {
+ switch (object) {
+ case Encryption_Type.NONE:
+ return "NONE";
+ case Encryption_Type.GCM:
+ return "GCM";
+ case Encryption_Type.CUSTOM:
+ return "CUSTOM";
+ case Encryption_Type.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var DataPacket_Kind;
+(function (DataPacket_Kind) {
+ DataPacket_Kind[DataPacket_Kind["RELIABLE"] = 0] = "RELIABLE";
+ DataPacket_Kind[DataPacket_Kind["LOSSY"] = 1] = "LOSSY";
+ DataPacket_Kind[DataPacket_Kind["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(DataPacket_Kind || (DataPacket_Kind = {}));
+function dataPacket_KindFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "RELIABLE":
+ return DataPacket_Kind.RELIABLE;
+ case 1:
+ case "LOSSY":
+ return DataPacket_Kind.LOSSY;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return DataPacket_Kind.UNRECOGNIZED;
+ }
+}
+function dataPacket_KindToJSON(object) {
+ switch (object) {
+ case DataPacket_Kind.RELIABLE:
+ return "RELIABLE";
+ case DataPacket_Kind.LOSSY:
+ return "LOSSY";
+ case DataPacket_Kind.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var ServerInfo_Edition;
+(function (ServerInfo_Edition) {
+ ServerInfo_Edition[ServerInfo_Edition["Standard"] = 0] = "Standard";
+ ServerInfo_Edition[ServerInfo_Edition["Cloud"] = 1] = "Cloud";
+ ServerInfo_Edition[ServerInfo_Edition["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(ServerInfo_Edition || (ServerInfo_Edition = {}));
+function serverInfo_EditionFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "Standard":
+ return ServerInfo_Edition.Standard;
+ case 1:
+ case "Cloud":
+ return ServerInfo_Edition.Cloud;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return ServerInfo_Edition.UNRECOGNIZED;
+ }
+}
+function serverInfo_EditionToJSON(object) {
+ switch (object) {
+ case ServerInfo_Edition.Standard:
+ return "Standard";
+ case ServerInfo_Edition.Cloud:
+ return "Cloud";
+ case ServerInfo_Edition.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var ClientInfo_SDK;
+(function (ClientInfo_SDK) {
+ ClientInfo_SDK[ClientInfo_SDK["UNKNOWN"] = 0] = "UNKNOWN";
+ ClientInfo_SDK[ClientInfo_SDK["JS"] = 1] = "JS";
+ ClientInfo_SDK[ClientInfo_SDK["SWIFT"] = 2] = "SWIFT";
+ ClientInfo_SDK[ClientInfo_SDK["ANDROID"] = 3] = "ANDROID";
+ ClientInfo_SDK[ClientInfo_SDK["FLUTTER"] = 4] = "FLUTTER";
+ ClientInfo_SDK[ClientInfo_SDK["GO"] = 5] = "GO";
+ ClientInfo_SDK[ClientInfo_SDK["UNITY"] = 6] = "UNITY";
+ ClientInfo_SDK[ClientInfo_SDK["REACT_NATIVE"] = 7] = "REACT_NATIVE";
+ ClientInfo_SDK[ClientInfo_SDK["RUST"] = 8] = "RUST";
+ ClientInfo_SDK[ClientInfo_SDK["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(ClientInfo_SDK || (ClientInfo_SDK = {}));
+function clientInfo_SDKFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "UNKNOWN":
+ return ClientInfo_SDK.UNKNOWN;
+ case 1:
+ case "JS":
+ return ClientInfo_SDK.JS;
+ case 2:
+ case "SWIFT":
+ return ClientInfo_SDK.SWIFT;
+ case 3:
+ case "ANDROID":
+ return ClientInfo_SDK.ANDROID;
+ case 4:
+ case "FLUTTER":
+ return ClientInfo_SDK.FLUTTER;
+ case 5:
+ case "GO":
+ return ClientInfo_SDK.GO;
+ case 6:
+ case "UNITY":
+ return ClientInfo_SDK.UNITY;
+ case 7:
+ case "REACT_NATIVE":
+ return ClientInfo_SDK.REACT_NATIVE;
+ case 8:
+ case "RUST":
+ return ClientInfo_SDK.RUST;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return ClientInfo_SDK.UNRECOGNIZED;
+ }
+}
+function clientInfo_SDKToJSON(object) {
+ switch (object) {
+ case ClientInfo_SDK.UNKNOWN:
+ return "UNKNOWN";
+ case ClientInfo_SDK.JS:
+ return "JS";
+ case ClientInfo_SDK.SWIFT:
+ return "SWIFT";
+ case ClientInfo_SDK.ANDROID:
+ return "ANDROID";
+ case ClientInfo_SDK.FLUTTER:
+ return "FLUTTER";
+ case ClientInfo_SDK.GO:
+ return "GO";
+ case ClientInfo_SDK.UNITY:
+ return "UNITY";
+ case ClientInfo_SDK.REACT_NATIVE:
+ return "REACT_NATIVE";
+ case ClientInfo_SDK.RUST:
+ return "RUST";
+ case ClientInfo_SDK.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+function createBaseRoom() {
+ return {
+ sid: "",
+ name: "",
+ emptyTimeout: 0,
+ maxParticipants: 0,
+ creationTime: 0,
+ turnPassword: "",
+ enabledCodecs: [],
+ metadata: "",
+ numParticipants: 0,
+ numPublishers: 0,
+ activeRecording: false
+ };
+}
+const Room$1 = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.sid !== "") {
+ writer.uint32(10).string(message.sid);
+ }
+ if (message.name !== "") {
+ writer.uint32(18).string(message.name);
+ }
+ if (message.emptyTimeout !== 0) {
+ writer.uint32(24).uint32(message.emptyTimeout);
+ }
+ if (message.maxParticipants !== 0) {
+ writer.uint32(32).uint32(message.maxParticipants);
+ }
+ if (message.creationTime !== 0) {
+ writer.uint32(40).int64(message.creationTime);
+ }
+ if (message.turnPassword !== "") {
+ writer.uint32(50).string(message.turnPassword);
+ }
+ for (const v of message.enabledCodecs) {
+ Codec.encode(v, writer.uint32(58).fork()).ldelim();
+ }
+ if (message.metadata !== "") {
+ writer.uint32(66).string(message.metadata);
+ }
+ if (message.numParticipants !== 0) {
+ writer.uint32(72).uint32(message.numParticipants);
+ }
+ if (message.numPublishers !== 0) {
+ writer.uint32(88).uint32(message.numPublishers);
+ }
+ if (message.activeRecording === true) {
+ writer.uint32(80).bool(message.activeRecording);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseRoom();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.sid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.name = reader.string();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.emptyTimeout = reader.uint32();
+ continue;
+ case 4:
+ if (tag !== 32) {
+ break;
+ }
+ message.maxParticipants = reader.uint32();
+ continue;
+ case 5:
+ if (tag !== 40) {
+ break;
+ }
+ message.creationTime = longToNumber$1(reader.int64());
+ continue;
+ case 6:
+ if (tag !== 50) {
+ break;
+ }
+ message.turnPassword = reader.string();
+ continue;
+ case 7:
+ if (tag !== 58) {
+ break;
+ }
+ message.enabledCodecs.push(Codec.decode(reader, reader.uint32()));
+ continue;
+ case 8:
+ if (tag !== 66) {
+ break;
+ }
+ message.metadata = reader.string();
+ continue;
+ case 9:
+ if (tag !== 72) {
+ break;
+ }
+ message.numParticipants = reader.uint32();
+ continue;
+ case 11:
+ if (tag !== 88) {
+ break;
+ }
+ message.numPublishers = reader.uint32();
+ continue;
+ case 10:
+ if (tag !== 80) {
+ break;
+ }
+ message.activeRecording = reader.bool();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ sid: isSet$1(object.sid) ? String(object.sid) : "",
+ name: isSet$1(object.name) ? String(object.name) : "",
+ emptyTimeout: isSet$1(object.emptyTimeout) ? Number(object.emptyTimeout) : 0,
+ maxParticipants: isSet$1(object.maxParticipants) ? Number(object.maxParticipants) : 0,
+ creationTime: isSet$1(object.creationTime) ? Number(object.creationTime) : 0,
+ turnPassword: isSet$1(object.turnPassword) ? String(object.turnPassword) : "",
+ enabledCodecs: Array.isArray(object === null || object === void 0 ? void 0 : object.enabledCodecs) ? object.enabledCodecs.map(e => Codec.fromJSON(e)) : [],
+ metadata: isSet$1(object.metadata) ? String(object.metadata) : "",
+ numParticipants: isSet$1(object.numParticipants) ? Number(object.numParticipants) : 0,
+ numPublishers: isSet$1(object.numPublishers) ? Number(object.numPublishers) : 0,
+ activeRecording: isSet$1(object.activeRecording) ? Boolean(object.activeRecording) : false
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.sid !== undefined && (obj.sid = message.sid);
+ message.name !== undefined && (obj.name = message.name);
+ message.emptyTimeout !== undefined && (obj.emptyTimeout = Math.round(message.emptyTimeout));
+ message.maxParticipants !== undefined && (obj.maxParticipants = Math.round(message.maxParticipants));
+ message.creationTime !== undefined && (obj.creationTime = Math.round(message.creationTime));
+ message.turnPassword !== undefined && (obj.turnPassword = message.turnPassword);
+ if (message.enabledCodecs) {
+ obj.enabledCodecs = message.enabledCodecs.map(e => e ? Codec.toJSON(e) : undefined);
+ } else {
+ obj.enabledCodecs = [];
+ }
+ message.metadata !== undefined && (obj.metadata = message.metadata);
+ message.numParticipants !== undefined && (obj.numParticipants = Math.round(message.numParticipants));
+ message.numPublishers !== undefined && (obj.numPublishers = Math.round(message.numPublishers));
+ message.activeRecording !== undefined && (obj.activeRecording = message.activeRecording);
+ return obj;
+ },
+ create(base) {
+ return Room$1.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
+ const message = createBaseRoom();
+ message.sid = (_a = object.sid) !== null && _a !== void 0 ? _a : "";
+ message.name = (_b = object.name) !== null && _b !== void 0 ? _b : "";
+ message.emptyTimeout = (_c = object.emptyTimeout) !== null && _c !== void 0 ? _c : 0;
+ message.maxParticipants = (_d = object.maxParticipants) !== null && _d !== void 0 ? _d : 0;
+ message.creationTime = (_e = object.creationTime) !== null && _e !== void 0 ? _e : 0;
+ message.turnPassword = (_f = object.turnPassword) !== null && _f !== void 0 ? _f : "";
+ message.enabledCodecs = ((_g = object.enabledCodecs) === null || _g === void 0 ? void 0 : _g.map(e => Codec.fromPartial(e))) || [];
+ message.metadata = (_h = object.metadata) !== null && _h !== void 0 ? _h : "";
+ message.numParticipants = (_j = object.numParticipants) !== null && _j !== void 0 ? _j : 0;
+ message.numPublishers = (_k = object.numPublishers) !== null && _k !== void 0 ? _k : 0;
+ message.activeRecording = (_l = object.activeRecording) !== null && _l !== void 0 ? _l : false;
+ return message;
+ }
+};
+function createBaseCodec() {
+ return {
+ mime: "",
+ fmtpLine: ""
+ };
+}
+const Codec = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.mime !== "") {
+ writer.uint32(10).string(message.mime);
+ }
+ if (message.fmtpLine !== "") {
+ writer.uint32(18).string(message.fmtpLine);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseCodec();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.mime = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.fmtpLine = reader.string();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ mime: isSet$1(object.mime) ? String(object.mime) : "",
+ fmtpLine: isSet$1(object.fmtpLine) ? String(object.fmtpLine) : ""
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.mime !== undefined && (obj.mime = message.mime);
+ message.fmtpLine !== undefined && (obj.fmtpLine = message.fmtpLine);
+ return obj;
+ },
+ create(base) {
+ return Codec.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseCodec();
+ message.mime = (_a = object.mime) !== null && _a !== void 0 ? _a : "";
+ message.fmtpLine = (_b = object.fmtpLine) !== null && _b !== void 0 ? _b : "";
+ return message;
+ }
+};
+function createBaseParticipantPermission() {
+ return {
+ canSubscribe: false,
+ canPublish: false,
+ canPublishData: false,
+ canPublishSources: [],
+ hidden: false,
+ recorder: false,
+ canUpdateMetadata: false
+ };
+}
+const ParticipantPermission = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.canSubscribe === true) {
+ writer.uint32(8).bool(message.canSubscribe);
+ }
+ if (message.canPublish === true) {
+ writer.uint32(16).bool(message.canPublish);
+ }
+ if (message.canPublishData === true) {
+ writer.uint32(24).bool(message.canPublishData);
+ }
+ writer.uint32(74).fork();
+ for (const v of message.canPublishSources) {
+ writer.int32(v);
+ }
+ writer.ldelim();
+ if (message.hidden === true) {
+ writer.uint32(56).bool(message.hidden);
+ }
+ if (message.recorder === true) {
+ writer.uint32(64).bool(message.recorder);
+ }
+ if (message.canUpdateMetadata === true) {
+ writer.uint32(80).bool(message.canUpdateMetadata);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseParticipantPermission();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.canSubscribe = reader.bool();
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.canPublish = reader.bool();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.canPublishData = reader.bool();
+ continue;
+ case 9:
+ if (tag === 72) {
+ message.canPublishSources.push(reader.int32());
+ continue;
+ }
+ if (tag === 74) {
+ const end2 = reader.uint32() + reader.pos;
+ while (reader.pos < end2) {
+ message.canPublishSources.push(reader.int32());
+ }
+ continue;
+ }
+ break;
+ case 7:
+ if (tag !== 56) {
+ break;
+ }
+ message.hidden = reader.bool();
+ continue;
+ case 8:
+ if (tag !== 64) {
+ break;
+ }
+ message.recorder = reader.bool();
+ continue;
+ case 10:
+ if (tag !== 80) {
+ break;
+ }
+ message.canUpdateMetadata = reader.bool();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ canSubscribe: isSet$1(object.canSubscribe) ? Boolean(object.canSubscribe) : false,
+ canPublish: isSet$1(object.canPublish) ? Boolean(object.canPublish) : false,
+ canPublishData: isSet$1(object.canPublishData) ? Boolean(object.canPublishData) : false,
+ canPublishSources: Array.isArray(object === null || object === void 0 ? void 0 : object.canPublishSources) ? object.canPublishSources.map(e => trackSourceFromJSON(e)) : [],
+ hidden: isSet$1(object.hidden) ? Boolean(object.hidden) : false,
+ recorder: isSet$1(object.recorder) ? Boolean(object.recorder) : false,
+ canUpdateMetadata: isSet$1(object.canUpdateMetadata) ? Boolean(object.canUpdateMetadata) : false
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.canSubscribe !== undefined && (obj.canSubscribe = message.canSubscribe);
+ message.canPublish !== undefined && (obj.canPublish = message.canPublish);
+ message.canPublishData !== undefined && (obj.canPublishData = message.canPublishData);
+ if (message.canPublishSources) {
+ obj.canPublishSources = message.canPublishSources.map(e => trackSourceToJSON(e));
+ } else {
+ obj.canPublishSources = [];
+ }
+ message.hidden !== undefined && (obj.hidden = message.hidden);
+ message.recorder !== undefined && (obj.recorder = message.recorder);
+ message.canUpdateMetadata !== undefined && (obj.canUpdateMetadata = message.canUpdateMetadata);
+ return obj;
+ },
+ create(base) {
+ return ParticipantPermission.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g;
+ const message = createBaseParticipantPermission();
+ message.canSubscribe = (_a = object.canSubscribe) !== null && _a !== void 0 ? _a : false;
+ message.canPublish = (_b = object.canPublish) !== null && _b !== void 0 ? _b : false;
+ message.canPublishData = (_c = object.canPublishData) !== null && _c !== void 0 ? _c : false;
+ message.canPublishSources = ((_d = object.canPublishSources) === null || _d === void 0 ? void 0 : _d.map(e => e)) || [];
+ message.hidden = (_e = object.hidden) !== null && _e !== void 0 ? _e : false;
+ message.recorder = (_f = object.recorder) !== null && _f !== void 0 ? _f : false;
+ message.canUpdateMetadata = (_g = object.canUpdateMetadata) !== null && _g !== void 0 ? _g : false;
+ return message;
+ }
+};
+function createBaseParticipantInfo() {
+ return {
+ sid: "",
+ identity: "",
+ state: 0,
+ tracks: [],
+ metadata: "",
+ joinedAt: 0,
+ name: "",
+ version: 0,
+ permission: undefined,
+ region: "",
+ isPublisher: false
+ };
+}
+const ParticipantInfo = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.sid !== "") {
+ writer.uint32(10).string(message.sid);
+ }
+ if (message.identity !== "") {
+ writer.uint32(18).string(message.identity);
+ }
+ if (message.state !== 0) {
+ writer.uint32(24).int32(message.state);
+ }
+ for (const v of message.tracks) {
+ TrackInfo.encode(v, writer.uint32(34).fork()).ldelim();
+ }
+ if (message.metadata !== "") {
+ writer.uint32(42).string(message.metadata);
+ }
+ if (message.joinedAt !== 0) {
+ writer.uint32(48).int64(message.joinedAt);
+ }
+ if (message.name !== "") {
+ writer.uint32(74).string(message.name);
+ }
+ if (message.version !== 0) {
+ writer.uint32(80).uint32(message.version);
+ }
+ if (message.permission !== undefined) {
+ ParticipantPermission.encode(message.permission, writer.uint32(90).fork()).ldelim();
+ }
+ if (message.region !== "") {
+ writer.uint32(98).string(message.region);
+ }
+ if (message.isPublisher === true) {
+ writer.uint32(104).bool(message.isPublisher);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseParticipantInfo();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.sid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.identity = reader.string();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.state = reader.int32();
+ continue;
+ case 4:
+ if (tag !== 34) {
+ break;
+ }
+ message.tracks.push(TrackInfo.decode(reader, reader.uint32()));
+ continue;
+ case 5:
+ if (tag !== 42) {
+ break;
+ }
+ message.metadata = reader.string();
+ continue;
+ case 6:
+ if (tag !== 48) {
+ break;
+ }
+ message.joinedAt = longToNumber$1(reader.int64());
+ continue;
+ case 9:
+ if (tag !== 74) {
+ break;
+ }
+ message.name = reader.string();
+ continue;
+ case 10:
+ if (tag !== 80) {
+ break;
+ }
+ message.version = reader.uint32();
+ continue;
+ case 11:
+ if (tag !== 90) {
+ break;
+ }
+ message.permission = ParticipantPermission.decode(reader, reader.uint32());
+ continue;
+ case 12:
+ if (tag !== 98) {
+ break;
+ }
+ message.region = reader.string();
+ continue;
+ case 13:
+ if (tag !== 104) {
+ break;
+ }
+ message.isPublisher = reader.bool();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ sid: isSet$1(object.sid) ? String(object.sid) : "",
+ identity: isSet$1(object.identity) ? String(object.identity) : "",
+ state: isSet$1(object.state) ? participantInfo_StateFromJSON(object.state) : 0,
+ tracks: Array.isArray(object === null || object === void 0 ? void 0 : object.tracks) ? object.tracks.map(e => TrackInfo.fromJSON(e)) : [],
+ metadata: isSet$1(object.metadata) ? String(object.metadata) : "",
+ joinedAt: isSet$1(object.joinedAt) ? Number(object.joinedAt) : 0,
+ name: isSet$1(object.name) ? String(object.name) : "",
+ version: isSet$1(object.version) ? Number(object.version) : 0,
+ permission: isSet$1(object.permission) ? ParticipantPermission.fromJSON(object.permission) : undefined,
+ region: isSet$1(object.region) ? String(object.region) : "",
+ isPublisher: isSet$1(object.isPublisher) ? Boolean(object.isPublisher) : false
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.sid !== undefined && (obj.sid = message.sid);
+ message.identity !== undefined && (obj.identity = message.identity);
+ message.state !== undefined && (obj.state = participantInfo_StateToJSON(message.state));
+ if (message.tracks) {
+ obj.tracks = message.tracks.map(e => e ? TrackInfo.toJSON(e) : undefined);
+ } else {
+ obj.tracks = [];
+ }
+ message.metadata !== undefined && (obj.metadata = message.metadata);
+ message.joinedAt !== undefined && (obj.joinedAt = Math.round(message.joinedAt));
+ message.name !== undefined && (obj.name = message.name);
+ message.version !== undefined && (obj.version = Math.round(message.version));
+ message.permission !== undefined && (obj.permission = message.permission ? ParticipantPermission.toJSON(message.permission) : undefined);
+ message.region !== undefined && (obj.region = message.region);
+ message.isPublisher !== undefined && (obj.isPublisher = message.isPublisher);
+ return obj;
+ },
+ create(base) {
+ return ParticipantInfo.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
+ const message = createBaseParticipantInfo();
+ message.sid = (_a = object.sid) !== null && _a !== void 0 ? _a : "";
+ message.identity = (_b = object.identity) !== null && _b !== void 0 ? _b : "";
+ message.state = (_c = object.state) !== null && _c !== void 0 ? _c : 0;
+ message.tracks = ((_d = object.tracks) === null || _d === void 0 ? void 0 : _d.map(e => TrackInfo.fromPartial(e))) || [];
+ message.metadata = (_e = object.metadata) !== null && _e !== void 0 ? _e : "";
+ message.joinedAt = (_f = object.joinedAt) !== null && _f !== void 0 ? _f : 0;
+ message.name = (_g = object.name) !== null && _g !== void 0 ? _g : "";
+ message.version = (_h = object.version) !== null && _h !== void 0 ? _h : 0;
+ message.permission = object.permission !== undefined && object.permission !== null ? ParticipantPermission.fromPartial(object.permission) : undefined;
+ message.region = (_j = object.region) !== null && _j !== void 0 ? _j : "";
+ message.isPublisher = (_k = object.isPublisher) !== null && _k !== void 0 ? _k : false;
+ return message;
+ }
+};
+function createBaseSimulcastCodecInfo() {
+ return {
+ mimeType: "",
+ mid: "",
+ cid: "",
+ layers: []
+ };
+}
+const SimulcastCodecInfo = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.mimeType !== "") {
+ writer.uint32(10).string(message.mimeType);
+ }
+ if (message.mid !== "") {
+ writer.uint32(18).string(message.mid);
+ }
+ if (message.cid !== "") {
+ writer.uint32(26).string(message.cid);
+ }
+ for (const v of message.layers) {
+ VideoLayer.encode(v, writer.uint32(34).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSimulcastCodecInfo();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.mimeType = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.mid = reader.string();
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.cid = reader.string();
+ continue;
+ case 4:
+ if (tag !== 34) {
+ break;
+ }
+ message.layers.push(VideoLayer.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ mimeType: isSet$1(object.mimeType) ? String(object.mimeType) : "",
+ mid: isSet$1(object.mid) ? String(object.mid) : "",
+ cid: isSet$1(object.cid) ? String(object.cid) : "",
+ layers: Array.isArray(object === null || object === void 0 ? void 0 : object.layers) ? object.layers.map(e => VideoLayer.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.mimeType !== undefined && (obj.mimeType = message.mimeType);
+ message.mid !== undefined && (obj.mid = message.mid);
+ message.cid !== undefined && (obj.cid = message.cid);
+ if (message.layers) {
+ obj.layers = message.layers.map(e => e ? VideoLayer.toJSON(e) : undefined);
+ } else {
+ obj.layers = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return SimulcastCodecInfo.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d;
+ const message = createBaseSimulcastCodecInfo();
+ message.mimeType = (_a = object.mimeType) !== null && _a !== void 0 ? _a : "";
+ message.mid = (_b = object.mid) !== null && _b !== void 0 ? _b : "";
+ message.cid = (_c = object.cid) !== null && _c !== void 0 ? _c : "";
+ message.layers = ((_d = object.layers) === null || _d === void 0 ? void 0 : _d.map(e => VideoLayer.fromPartial(e))) || [];
+ return message;
+ }
+};
+function createBaseTrackInfo() {
+ return {
+ sid: "",
+ type: 0,
+ name: "",
+ muted: false,
+ width: 0,
+ height: 0,
+ simulcast: false,
+ disableDtx: false,
+ source: 0,
+ layers: [],
+ mimeType: "",
+ mid: "",
+ codecs: [],
+ stereo: false,
+ disableRed: false,
+ encryption: 0
+ };
+}
+const TrackInfo = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.sid !== "") {
+ writer.uint32(10).string(message.sid);
+ }
+ if (message.type !== 0) {
+ writer.uint32(16).int32(message.type);
+ }
+ if (message.name !== "") {
+ writer.uint32(26).string(message.name);
+ }
+ if (message.muted === true) {
+ writer.uint32(32).bool(message.muted);
+ }
+ if (message.width !== 0) {
+ writer.uint32(40).uint32(message.width);
+ }
+ if (message.height !== 0) {
+ writer.uint32(48).uint32(message.height);
+ }
+ if (message.simulcast === true) {
+ writer.uint32(56).bool(message.simulcast);
+ }
+ if (message.disableDtx === true) {
+ writer.uint32(64).bool(message.disableDtx);
+ }
+ if (message.source !== 0) {
+ writer.uint32(72).int32(message.source);
+ }
+ for (const v of message.layers) {
+ VideoLayer.encode(v, writer.uint32(82).fork()).ldelim();
+ }
+ if (message.mimeType !== "") {
+ writer.uint32(90).string(message.mimeType);
+ }
+ if (message.mid !== "") {
+ writer.uint32(98).string(message.mid);
+ }
+ for (const v of message.codecs) {
+ SimulcastCodecInfo.encode(v, writer.uint32(106).fork()).ldelim();
+ }
+ if (message.stereo === true) {
+ writer.uint32(112).bool(message.stereo);
+ }
+ if (message.disableRed === true) {
+ writer.uint32(120).bool(message.disableRed);
+ }
+ if (message.encryption !== 0) {
+ writer.uint32(128).int32(message.encryption);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseTrackInfo();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.sid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.type = reader.int32();
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.name = reader.string();
+ continue;
+ case 4:
+ if (tag !== 32) {
+ break;
+ }
+ message.muted = reader.bool();
+ continue;
+ case 5:
+ if (tag !== 40) {
+ break;
+ }
+ message.width = reader.uint32();
+ continue;
+ case 6:
+ if (tag !== 48) {
+ break;
+ }
+ message.height = reader.uint32();
+ continue;
+ case 7:
+ if (tag !== 56) {
+ break;
+ }
+ message.simulcast = reader.bool();
+ continue;
+ case 8:
+ if (tag !== 64) {
+ break;
+ }
+ message.disableDtx = reader.bool();
+ continue;
+ case 9:
+ if (tag !== 72) {
+ break;
+ }
+ message.source = reader.int32();
+ continue;
+ case 10:
+ if (tag !== 82) {
+ break;
+ }
+ message.layers.push(VideoLayer.decode(reader, reader.uint32()));
+ continue;
+ case 11:
+ if (tag !== 90) {
+ break;
+ }
+ message.mimeType = reader.string();
+ continue;
+ case 12:
+ if (tag !== 98) {
+ break;
+ }
+ message.mid = reader.string();
+ continue;
+ case 13:
+ if (tag !== 106) {
+ break;
+ }
+ message.codecs.push(SimulcastCodecInfo.decode(reader, reader.uint32()));
+ continue;
+ case 14:
+ if (tag !== 112) {
+ break;
+ }
+ message.stereo = reader.bool();
+ continue;
+ case 15:
+ if (tag !== 120) {
+ break;
+ }
+ message.disableRed = reader.bool();
+ continue;
+ case 16:
+ if (tag !== 128) {
+ break;
+ }
+ message.encryption = reader.int32();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ sid: isSet$1(object.sid) ? String(object.sid) : "",
+ type: isSet$1(object.type) ? trackTypeFromJSON(object.type) : 0,
+ name: isSet$1(object.name) ? String(object.name) : "",
+ muted: isSet$1(object.muted) ? Boolean(object.muted) : false,
+ width: isSet$1(object.width) ? Number(object.width) : 0,
+ height: isSet$1(object.height) ? Number(object.height) : 0,
+ simulcast: isSet$1(object.simulcast) ? Boolean(object.simulcast) : false,
+ disableDtx: isSet$1(object.disableDtx) ? Boolean(object.disableDtx) : false,
+ source: isSet$1(object.source) ? trackSourceFromJSON(object.source) : 0,
+ layers: Array.isArray(object === null || object === void 0 ? void 0 : object.layers) ? object.layers.map(e => VideoLayer.fromJSON(e)) : [],
+ mimeType: isSet$1(object.mimeType) ? String(object.mimeType) : "",
+ mid: isSet$1(object.mid) ? String(object.mid) : "",
+ codecs: Array.isArray(object === null || object === void 0 ? void 0 : object.codecs) ? object.codecs.map(e => SimulcastCodecInfo.fromJSON(e)) : [],
+ stereo: isSet$1(object.stereo) ? Boolean(object.stereo) : false,
+ disableRed: isSet$1(object.disableRed) ? Boolean(object.disableRed) : false,
+ encryption: isSet$1(object.encryption) ? encryption_TypeFromJSON(object.encryption) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.sid !== undefined && (obj.sid = message.sid);
+ message.type !== undefined && (obj.type = trackTypeToJSON(message.type));
+ message.name !== undefined && (obj.name = message.name);
+ message.muted !== undefined && (obj.muted = message.muted);
+ message.width !== undefined && (obj.width = Math.round(message.width));
+ message.height !== undefined && (obj.height = Math.round(message.height));
+ message.simulcast !== undefined && (obj.simulcast = message.simulcast);
+ message.disableDtx !== undefined && (obj.disableDtx = message.disableDtx);
+ message.source !== undefined && (obj.source = trackSourceToJSON(message.source));
+ if (message.layers) {
+ obj.layers = message.layers.map(e => e ? VideoLayer.toJSON(e) : undefined);
+ } else {
+ obj.layers = [];
+ }
+ message.mimeType !== undefined && (obj.mimeType = message.mimeType);
+ message.mid !== undefined && (obj.mid = message.mid);
+ if (message.codecs) {
+ obj.codecs = message.codecs.map(e => e ? SimulcastCodecInfo.toJSON(e) : undefined);
+ } else {
+ obj.codecs = [];
+ }
+ message.stereo !== undefined && (obj.stereo = message.stereo);
+ message.disableRed !== undefined && (obj.disableRed = message.disableRed);
+ message.encryption !== undefined && (obj.encryption = encryption_TypeToJSON(message.encryption));
+ return obj;
+ },
+ create(base) {
+ return TrackInfo.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
+ const message = createBaseTrackInfo();
+ message.sid = (_a = object.sid) !== null && _a !== void 0 ? _a : "";
+ message.type = (_b = object.type) !== null && _b !== void 0 ? _b : 0;
+ message.name = (_c = object.name) !== null && _c !== void 0 ? _c : "";
+ message.muted = (_d = object.muted) !== null && _d !== void 0 ? _d : false;
+ message.width = (_e = object.width) !== null && _e !== void 0 ? _e : 0;
+ message.height = (_f = object.height) !== null && _f !== void 0 ? _f : 0;
+ message.simulcast = (_g = object.simulcast) !== null && _g !== void 0 ? _g : false;
+ message.disableDtx = (_h = object.disableDtx) !== null && _h !== void 0 ? _h : false;
+ message.source = (_j = object.source) !== null && _j !== void 0 ? _j : 0;
+ message.layers = ((_k = object.layers) === null || _k === void 0 ? void 0 : _k.map(e => VideoLayer.fromPartial(e))) || [];
+ message.mimeType = (_l = object.mimeType) !== null && _l !== void 0 ? _l : "";
+ message.mid = (_m = object.mid) !== null && _m !== void 0 ? _m : "";
+ message.codecs = ((_o = object.codecs) === null || _o === void 0 ? void 0 : _o.map(e => SimulcastCodecInfo.fromPartial(e))) || [];
+ message.stereo = (_p = object.stereo) !== null && _p !== void 0 ? _p : false;
+ message.disableRed = (_q = object.disableRed) !== null && _q !== void 0 ? _q : false;
+ message.encryption = (_r = object.encryption) !== null && _r !== void 0 ? _r : 0;
+ return message;
+ }
+};
+function createBaseVideoLayer() {
+ return {
+ quality: 0,
+ width: 0,
+ height: 0,
+ bitrate: 0,
+ ssrc: 0
+ };
+}
+const VideoLayer = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.quality !== 0) {
+ writer.uint32(8).int32(message.quality);
+ }
+ if (message.width !== 0) {
+ writer.uint32(16).uint32(message.width);
+ }
+ if (message.height !== 0) {
+ writer.uint32(24).uint32(message.height);
+ }
+ if (message.bitrate !== 0) {
+ writer.uint32(32).uint32(message.bitrate);
+ }
+ if (message.ssrc !== 0) {
+ writer.uint32(40).uint32(message.ssrc);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseVideoLayer();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.quality = reader.int32();
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.width = reader.uint32();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.height = reader.uint32();
+ continue;
+ case 4:
+ if (tag !== 32) {
+ break;
+ }
+ message.bitrate = reader.uint32();
+ continue;
+ case 5:
+ if (tag !== 40) {
+ break;
+ }
+ message.ssrc = reader.uint32();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ quality: isSet$1(object.quality) ? videoQualityFromJSON(object.quality) : 0,
+ width: isSet$1(object.width) ? Number(object.width) : 0,
+ height: isSet$1(object.height) ? Number(object.height) : 0,
+ bitrate: isSet$1(object.bitrate) ? Number(object.bitrate) : 0,
+ ssrc: isSet$1(object.ssrc) ? Number(object.ssrc) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.quality !== undefined && (obj.quality = videoQualityToJSON(message.quality));
+ message.width !== undefined && (obj.width = Math.round(message.width));
+ message.height !== undefined && (obj.height = Math.round(message.height));
+ message.bitrate !== undefined && (obj.bitrate = Math.round(message.bitrate));
+ message.ssrc !== undefined && (obj.ssrc = Math.round(message.ssrc));
+ return obj;
+ },
+ create(base) {
+ return VideoLayer.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e;
+ const message = createBaseVideoLayer();
+ message.quality = (_a = object.quality) !== null && _a !== void 0 ? _a : 0;
+ message.width = (_b = object.width) !== null && _b !== void 0 ? _b : 0;
+ message.height = (_c = object.height) !== null && _c !== void 0 ? _c : 0;
+ message.bitrate = (_d = object.bitrate) !== null && _d !== void 0 ? _d : 0;
+ message.ssrc = (_e = object.ssrc) !== null && _e !== void 0 ? _e : 0;
+ return message;
+ }
+};
+function createBaseDataPacket() {
+ return {
+ kind: 0,
+ value: undefined
+ };
+}
+const DataPacket = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ var _a;
+ if (message.kind !== 0) {
+ writer.uint32(8).int32(message.kind);
+ }
+ switch ((_a = message.value) === null || _a === void 0 ? void 0 : _a.$case) {
+ case "user":
+ UserPacket.encode(message.value.user, writer.uint32(18).fork()).ldelim();
+ break;
+ case "speaker":
+ ActiveSpeakerUpdate.encode(message.value.speaker, writer.uint32(26).fork()).ldelim();
+ break;
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseDataPacket();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.kind = reader.int32();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.value = {
+ $case: "user",
+ user: UserPacket.decode(reader, reader.uint32())
+ };
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.value = {
+ $case: "speaker",
+ speaker: ActiveSpeakerUpdate.decode(reader, reader.uint32())
+ };
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ kind: isSet$1(object.kind) ? dataPacket_KindFromJSON(object.kind) : 0,
+ value: isSet$1(object.user) ? {
+ $case: "user",
+ user: UserPacket.fromJSON(object.user)
+ } : isSet$1(object.speaker) ? {
+ $case: "speaker",
+ speaker: ActiveSpeakerUpdate.fromJSON(object.speaker)
+ } : undefined
+ };
+ },
+ toJSON(message) {
+ var _a, _b, _c, _d, _e, _f;
+ const obj = {};
+ message.kind !== undefined && (obj.kind = dataPacket_KindToJSON(message.kind));
+ ((_a = message.value) === null || _a === void 0 ? void 0 : _a.$case) === "user" && (obj.user = ((_b = message.value) === null || _b === void 0 ? void 0 : _b.user) ? UserPacket.toJSON((_c = message.value) === null || _c === void 0 ? void 0 : _c.user) : undefined);
+ ((_d = message.value) === null || _d === void 0 ? void 0 : _d.$case) === "speaker" && (obj.speaker = ((_e = message.value) === null || _e === void 0 ? void 0 : _e.speaker) ? ActiveSpeakerUpdate.toJSON((_f = message.value) === null || _f === void 0 ? void 0 : _f.speaker) : undefined);
+ return obj;
+ },
+ create(base) {
+ return DataPacket.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g;
+ const message = createBaseDataPacket();
+ message.kind = (_a = object.kind) !== null && _a !== void 0 ? _a : 0;
+ if (((_b = object.value) === null || _b === void 0 ? void 0 : _b.$case) === "user" && ((_c = object.value) === null || _c === void 0 ? void 0 : _c.user) !== undefined && ((_d = object.value) === null || _d === void 0 ? void 0 : _d.user) !== null) {
+ message.value = {
+ $case: "user",
+ user: UserPacket.fromPartial(object.value.user)
+ };
+ }
+ if (((_e = object.value) === null || _e === void 0 ? void 0 : _e.$case) === "speaker" && ((_f = object.value) === null || _f === void 0 ? void 0 : _f.speaker) !== undefined && ((_g = object.value) === null || _g === void 0 ? void 0 : _g.speaker) !== null) {
+ message.value = {
+ $case: "speaker",
+ speaker: ActiveSpeakerUpdate.fromPartial(object.value.speaker)
+ };
+ }
+ return message;
+ }
+};
+function createBaseActiveSpeakerUpdate() {
+ return {
+ speakers: []
+ };
+}
+const ActiveSpeakerUpdate = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ for (const v of message.speakers) {
+ SpeakerInfo.encode(v, writer.uint32(10).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseActiveSpeakerUpdate();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.speakers.push(SpeakerInfo.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ speakers: Array.isArray(object === null || object === void 0 ? void 0 : object.speakers) ? object.speakers.map(e => SpeakerInfo.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ if (message.speakers) {
+ obj.speakers = message.speakers.map(e => e ? SpeakerInfo.toJSON(e) : undefined);
+ } else {
+ obj.speakers = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return ActiveSpeakerUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a;
+ const message = createBaseActiveSpeakerUpdate();
+ message.speakers = ((_a = object.speakers) === null || _a === void 0 ? void 0 : _a.map(e => SpeakerInfo.fromPartial(e))) || [];
+ return message;
+ }
+};
+function createBaseSpeakerInfo() {
+ return {
+ sid: "",
+ level: 0,
+ active: false
+ };
+}
+const SpeakerInfo = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.sid !== "") {
+ writer.uint32(10).string(message.sid);
+ }
+ if (message.level !== 0) {
+ writer.uint32(21).float(message.level);
+ }
+ if (message.active === true) {
+ writer.uint32(24).bool(message.active);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSpeakerInfo();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.sid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 21) {
+ break;
+ }
+ message.level = reader.float();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.active = reader.bool();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ sid: isSet$1(object.sid) ? String(object.sid) : "",
+ level: isSet$1(object.level) ? Number(object.level) : 0,
+ active: isSet$1(object.active) ? Boolean(object.active) : false
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.sid !== undefined && (obj.sid = message.sid);
+ message.level !== undefined && (obj.level = message.level);
+ message.active !== undefined && (obj.active = message.active);
+ return obj;
+ },
+ create(base) {
+ return SpeakerInfo.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c;
+ const message = createBaseSpeakerInfo();
+ message.sid = (_a = object.sid) !== null && _a !== void 0 ? _a : "";
+ message.level = (_b = object.level) !== null && _b !== void 0 ? _b : 0;
+ message.active = (_c = object.active) !== null && _c !== void 0 ? _c : false;
+ return message;
+ }
+};
+function createBaseUserPacket() {
+ return {
+ participantSid: "",
+ payload: new Uint8Array(),
+ destinationSids: [],
+ topic: undefined
+ };
+}
+const UserPacket = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.participantSid !== "") {
+ writer.uint32(10).string(message.participantSid);
+ }
+ if (message.payload.length !== 0) {
+ writer.uint32(18).bytes(message.payload);
+ }
+ for (const v of message.destinationSids) {
+ writer.uint32(26).string(v);
+ }
+ if (message.topic !== undefined) {
+ writer.uint32(34).string(message.topic);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseUserPacket();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.participantSid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.payload = reader.bytes();
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.destinationSids.push(reader.string());
+ continue;
+ case 4:
+ if (tag !== 34) {
+ break;
+ }
+ message.topic = reader.string();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ participantSid: isSet$1(object.participantSid) ? String(object.participantSid) : "",
+ payload: isSet$1(object.payload) ? bytesFromBase64$1(object.payload) : new Uint8Array(),
+ destinationSids: Array.isArray(object === null || object === void 0 ? void 0 : object.destinationSids) ? object.destinationSids.map(e => String(e)) : [],
+ topic: isSet$1(object.topic) ? String(object.topic) : undefined
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.participantSid !== undefined && (obj.participantSid = message.participantSid);
+ message.payload !== undefined && (obj.payload = base64FromBytes$1(message.payload !== undefined ? message.payload : new Uint8Array()));
+ if (message.destinationSids) {
+ obj.destinationSids = message.destinationSids.map(e => e);
+ } else {
+ obj.destinationSids = [];
+ }
+ message.topic !== undefined && (obj.topic = message.topic);
+ return obj;
+ },
+ create(base) {
+ return UserPacket.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d;
+ const message = createBaseUserPacket();
+ message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
+ message.payload = (_b = object.payload) !== null && _b !== void 0 ? _b : new Uint8Array();
+ message.destinationSids = ((_c = object.destinationSids) === null || _c === void 0 ? void 0 : _c.map(e => e)) || [];
+ message.topic = (_d = object.topic) !== null && _d !== void 0 ? _d : undefined;
+ return message;
+ }
+};
+function createBaseParticipantTracks() {
+ return {
+ participantSid: "",
+ trackSids: []
+ };
+}
+const ParticipantTracks = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.participantSid !== "") {
+ writer.uint32(10).string(message.participantSid);
+ }
+ for (const v of message.trackSids) {
+ writer.uint32(18).string(v);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseParticipantTracks();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.participantSid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.trackSids.push(reader.string());
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ participantSid: isSet$1(object.participantSid) ? String(object.participantSid) : "",
+ trackSids: Array.isArray(object === null || object === void 0 ? void 0 : object.trackSids) ? object.trackSids.map(e => String(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.participantSid !== undefined && (obj.participantSid = message.participantSid);
+ if (message.trackSids) {
+ obj.trackSids = message.trackSids.map(e => e);
+ } else {
+ obj.trackSids = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return ParticipantTracks.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseParticipantTracks();
+ message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
+ message.trackSids = ((_b = object.trackSids) === null || _b === void 0 ? void 0 : _b.map(e => e)) || [];
+ return message;
+ }
+};
+function createBaseServerInfo() {
+ return {
+ edition: 0,
+ version: "",
+ protocol: 0,
+ region: "",
+ nodeId: "",
+ debugInfo: ""
+ };
+}
+const ServerInfo = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.edition !== 0) {
+ writer.uint32(8).int32(message.edition);
+ }
+ if (message.version !== "") {
+ writer.uint32(18).string(message.version);
+ }
+ if (message.protocol !== 0) {
+ writer.uint32(24).int32(message.protocol);
+ }
+ if (message.region !== "") {
+ writer.uint32(34).string(message.region);
+ }
+ if (message.nodeId !== "") {
+ writer.uint32(42).string(message.nodeId);
+ }
+ if (message.debugInfo !== "") {
+ writer.uint32(50).string(message.debugInfo);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseServerInfo();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.edition = reader.int32();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.version = reader.string();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.protocol = reader.int32();
+ continue;
+ case 4:
+ if (tag !== 34) {
+ break;
+ }
+ message.region = reader.string();
+ continue;
+ case 5:
+ if (tag !== 42) {
+ break;
+ }
+ message.nodeId = reader.string();
+ continue;
+ case 6:
+ if (tag !== 50) {
+ break;
+ }
+ message.debugInfo = reader.string();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ edition: isSet$1(object.edition) ? serverInfo_EditionFromJSON(object.edition) : 0,
+ version: isSet$1(object.version) ? String(object.version) : "",
+ protocol: isSet$1(object.protocol) ? Number(object.protocol) : 0,
+ region: isSet$1(object.region) ? String(object.region) : "",
+ nodeId: isSet$1(object.nodeId) ? String(object.nodeId) : "",
+ debugInfo: isSet$1(object.debugInfo) ? String(object.debugInfo) : ""
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.edition !== undefined && (obj.edition = serverInfo_EditionToJSON(message.edition));
+ message.version !== undefined && (obj.version = message.version);
+ message.protocol !== undefined && (obj.protocol = Math.round(message.protocol));
+ message.region !== undefined && (obj.region = message.region);
+ message.nodeId !== undefined && (obj.nodeId = message.nodeId);
+ message.debugInfo !== undefined && (obj.debugInfo = message.debugInfo);
+ return obj;
+ },
+ create(base) {
+ return ServerInfo.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f;
+ const message = createBaseServerInfo();
+ message.edition = (_a = object.edition) !== null && _a !== void 0 ? _a : 0;
+ message.version = (_b = object.version) !== null && _b !== void 0 ? _b : "";
+ message.protocol = (_c = object.protocol) !== null && _c !== void 0 ? _c : 0;
+ message.region = (_d = object.region) !== null && _d !== void 0 ? _d : "";
+ message.nodeId = (_e = object.nodeId) !== null && _e !== void 0 ? _e : "";
+ message.debugInfo = (_f = object.debugInfo) !== null && _f !== void 0 ? _f : "";
+ return message;
+ }
+};
+function createBaseClientInfo() {
+ return {
+ sdk: 0,
+ version: "",
+ protocol: 0,
+ os: "",
+ osVersion: "",
+ deviceModel: "",
+ browser: "",
+ browserVersion: "",
+ address: "",
+ network: ""
+ };
+}
+const ClientInfo = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.sdk !== 0) {
+ writer.uint32(8).int32(message.sdk);
+ }
+ if (message.version !== "") {
+ writer.uint32(18).string(message.version);
+ }
+ if (message.protocol !== 0) {
+ writer.uint32(24).int32(message.protocol);
+ }
+ if (message.os !== "") {
+ writer.uint32(34).string(message.os);
+ }
+ if (message.osVersion !== "") {
+ writer.uint32(42).string(message.osVersion);
+ }
+ if (message.deviceModel !== "") {
+ writer.uint32(50).string(message.deviceModel);
+ }
+ if (message.browser !== "") {
+ writer.uint32(58).string(message.browser);
+ }
+ if (message.browserVersion !== "") {
+ writer.uint32(66).string(message.browserVersion);
+ }
+ if (message.address !== "") {
+ writer.uint32(74).string(message.address);
+ }
+ if (message.network !== "") {
+ writer.uint32(82).string(message.network);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseClientInfo();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.sdk = reader.int32();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.version = reader.string();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.protocol = reader.int32();
+ continue;
+ case 4:
+ if (tag !== 34) {
+ break;
+ }
+ message.os = reader.string();
+ continue;
+ case 5:
+ if (tag !== 42) {
+ break;
+ }
+ message.osVersion = reader.string();
+ continue;
+ case 6:
+ if (tag !== 50) {
+ break;
+ }
+ message.deviceModel = reader.string();
+ continue;
+ case 7:
+ if (tag !== 58) {
+ break;
+ }
+ message.browser = reader.string();
+ continue;
+ case 8:
+ if (tag !== 66) {
+ break;
+ }
+ message.browserVersion = reader.string();
+ continue;
+ case 9:
+ if (tag !== 74) {
+ break;
+ }
+ message.address = reader.string();
+ continue;
+ case 10:
+ if (tag !== 82) {
+ break;
+ }
+ message.network = reader.string();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ sdk: isSet$1(object.sdk) ? clientInfo_SDKFromJSON(object.sdk) : 0,
+ version: isSet$1(object.version) ? String(object.version) : "",
+ protocol: isSet$1(object.protocol) ? Number(object.protocol) : 0,
+ os: isSet$1(object.os) ? String(object.os) : "",
+ osVersion: isSet$1(object.osVersion) ? String(object.osVersion) : "",
+ deviceModel: isSet$1(object.deviceModel) ? String(object.deviceModel) : "",
+ browser: isSet$1(object.browser) ? String(object.browser) : "",
+ browserVersion: isSet$1(object.browserVersion) ? String(object.browserVersion) : "",
+ address: isSet$1(object.address) ? String(object.address) : "",
+ network: isSet$1(object.network) ? String(object.network) : ""
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.sdk !== undefined && (obj.sdk = clientInfo_SDKToJSON(message.sdk));
+ message.version !== undefined && (obj.version = message.version);
+ message.protocol !== undefined && (obj.protocol = Math.round(message.protocol));
+ message.os !== undefined && (obj.os = message.os);
+ message.osVersion !== undefined && (obj.osVersion = message.osVersion);
+ message.deviceModel !== undefined && (obj.deviceModel = message.deviceModel);
+ message.browser !== undefined && (obj.browser = message.browser);
+ message.browserVersion !== undefined && (obj.browserVersion = message.browserVersion);
+ message.address !== undefined && (obj.address = message.address);
+ message.network !== undefined && (obj.network = message.network);
+ return obj;
+ },
+ create(base) {
+ return ClientInfo.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
+ const message = createBaseClientInfo();
+ message.sdk = (_a = object.sdk) !== null && _a !== void 0 ? _a : 0;
+ message.version = (_b = object.version) !== null && _b !== void 0 ? _b : "";
+ message.protocol = (_c = object.protocol) !== null && _c !== void 0 ? _c : 0;
+ message.os = (_d = object.os) !== null && _d !== void 0 ? _d : "";
+ message.osVersion = (_e = object.osVersion) !== null && _e !== void 0 ? _e : "";
+ message.deviceModel = (_f = object.deviceModel) !== null && _f !== void 0 ? _f : "";
+ message.browser = (_g = object.browser) !== null && _g !== void 0 ? _g : "";
+ message.browserVersion = (_h = object.browserVersion) !== null && _h !== void 0 ? _h : "";
+ message.address = (_j = object.address) !== null && _j !== void 0 ? _j : "";
+ message.network = (_k = object.network) !== null && _k !== void 0 ? _k : "";
+ return message;
+ }
+};
+function createBaseClientConfiguration() {
+ return {
+ video: undefined,
+ screen: undefined,
+ resumeConnection: 0,
+ disabledCodecs: undefined,
+ forceRelay: 0
+ };
+}
+const ClientConfiguration = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.video !== undefined) {
+ VideoConfiguration.encode(message.video, writer.uint32(10).fork()).ldelim();
+ }
+ if (message.screen !== undefined) {
+ VideoConfiguration.encode(message.screen, writer.uint32(18).fork()).ldelim();
+ }
+ if (message.resumeConnection !== 0) {
+ writer.uint32(24).int32(message.resumeConnection);
+ }
+ if (message.disabledCodecs !== undefined) {
+ DisabledCodecs.encode(message.disabledCodecs, writer.uint32(34).fork()).ldelim();
+ }
+ if (message.forceRelay !== 0) {
+ writer.uint32(40).int32(message.forceRelay);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseClientConfiguration();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.video = VideoConfiguration.decode(reader, reader.uint32());
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.screen = VideoConfiguration.decode(reader, reader.uint32());
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.resumeConnection = reader.int32();
+ continue;
+ case 4:
+ if (tag !== 34) {
+ break;
+ }
+ message.disabledCodecs = DisabledCodecs.decode(reader, reader.uint32());
+ continue;
+ case 5:
+ if (tag !== 40) {
+ break;
+ }
+ message.forceRelay = reader.int32();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ video: isSet$1(object.video) ? VideoConfiguration.fromJSON(object.video) : undefined,
+ screen: isSet$1(object.screen) ? VideoConfiguration.fromJSON(object.screen) : undefined,
+ resumeConnection: isSet$1(object.resumeConnection) ? clientConfigSettingFromJSON(object.resumeConnection) : 0,
+ disabledCodecs: isSet$1(object.disabledCodecs) ? DisabledCodecs.fromJSON(object.disabledCodecs) : undefined,
+ forceRelay: isSet$1(object.forceRelay) ? clientConfigSettingFromJSON(object.forceRelay) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.video !== undefined && (obj.video = message.video ? VideoConfiguration.toJSON(message.video) : undefined);
+ message.screen !== undefined && (obj.screen = message.screen ? VideoConfiguration.toJSON(message.screen) : undefined);
+ message.resumeConnection !== undefined && (obj.resumeConnection = clientConfigSettingToJSON(message.resumeConnection));
+ message.disabledCodecs !== undefined && (obj.disabledCodecs = message.disabledCodecs ? DisabledCodecs.toJSON(message.disabledCodecs) : undefined);
+ message.forceRelay !== undefined && (obj.forceRelay = clientConfigSettingToJSON(message.forceRelay));
+ return obj;
+ },
+ create(base) {
+ return ClientConfiguration.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseClientConfiguration();
+ message.video = object.video !== undefined && object.video !== null ? VideoConfiguration.fromPartial(object.video) : undefined;
+ message.screen = object.screen !== undefined && object.screen !== null ? VideoConfiguration.fromPartial(object.screen) : undefined;
+ message.resumeConnection = (_a = object.resumeConnection) !== null && _a !== void 0 ? _a : 0;
+ message.disabledCodecs = object.disabledCodecs !== undefined && object.disabledCodecs !== null ? DisabledCodecs.fromPartial(object.disabledCodecs) : undefined;
+ message.forceRelay = (_b = object.forceRelay) !== null && _b !== void 0 ? _b : 0;
+ return message;
+ }
+};
+function createBaseVideoConfiguration() {
+ return {
+ hardwareEncoder: 0
+ };
+}
+const VideoConfiguration = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.hardwareEncoder !== 0) {
+ writer.uint32(8).int32(message.hardwareEncoder);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseVideoConfiguration();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.hardwareEncoder = reader.int32();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ hardwareEncoder: isSet$1(object.hardwareEncoder) ? clientConfigSettingFromJSON(object.hardwareEncoder) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.hardwareEncoder !== undefined && (obj.hardwareEncoder = clientConfigSettingToJSON(message.hardwareEncoder));
+ return obj;
+ },
+ create(base) {
+ return VideoConfiguration.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a;
+ const message = createBaseVideoConfiguration();
+ message.hardwareEncoder = (_a = object.hardwareEncoder) !== null && _a !== void 0 ? _a : 0;
+ return message;
+ }
+};
+function createBaseDisabledCodecs() {
+ return {
+ codecs: [],
+ publish: []
+ };
+}
+const DisabledCodecs = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ for (const v of message.codecs) {
+ Codec.encode(v, writer.uint32(10).fork()).ldelim();
+ }
+ for (const v of message.publish) {
+ Codec.encode(v, writer.uint32(18).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseDisabledCodecs();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.codecs.push(Codec.decode(reader, reader.uint32()));
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.publish.push(Codec.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ codecs: Array.isArray(object === null || object === void 0 ? void 0 : object.codecs) ? object.codecs.map(e => Codec.fromJSON(e)) : [],
+ publish: Array.isArray(object === null || object === void 0 ? void 0 : object.publish) ? object.publish.map(e => Codec.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ if (message.codecs) {
+ obj.codecs = message.codecs.map(e => e ? Codec.toJSON(e) : undefined);
+ } else {
+ obj.codecs = [];
+ }
+ if (message.publish) {
+ obj.publish = message.publish.map(e => e ? Codec.toJSON(e) : undefined);
+ } else {
+ obj.publish = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return DisabledCodecs.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseDisabledCodecs();
+ message.codecs = ((_a = object.codecs) === null || _a === void 0 ? void 0 : _a.map(e => Codec.fromPartial(e))) || [];
+ message.publish = ((_b = object.publish) === null || _b === void 0 ? void 0 : _b.map(e => Codec.fromPartial(e))) || [];
+ return message;
+ }
+};
+var tsProtoGlobalThis$1 = (() => {
+ if (typeof globalThis !== "undefined") {
+ return globalThis;
+ }
+ if (typeof self !== "undefined") {
+ return self;
+ }
+ if (typeof window !== "undefined") {
+ return window;
+ }
+ if (typeof global !== "undefined") {
+ return global;
+ }
+ throw "Unable to locate global object";
+})();
+function bytesFromBase64$1(b64) {
+ if (tsProtoGlobalThis$1.Buffer) {
+ return Uint8Array.from(tsProtoGlobalThis$1.Buffer.from(b64, "base64"));
+ } else {
+ const bin = tsProtoGlobalThis$1.atob(b64);
+ const arr = new Uint8Array(bin.length);
+ for (let i = 0; i < bin.length; ++i) {
+ arr[i] = bin.charCodeAt(i);
+ }
+ return arr;
+ }
+}
+function base64FromBytes$1(arr) {
+ if (tsProtoGlobalThis$1.Buffer) {
+ return tsProtoGlobalThis$1.Buffer.from(arr).toString("base64");
+ } else {
+ const bin = [];
+ arr.forEach(byte => {
+ bin.push(String.fromCharCode(byte));
+ });
+ return tsProtoGlobalThis$1.btoa(bin.join(""));
+ }
+}
+function longToNumber$1(long) {
+ if (long.gt(Number.MAX_SAFE_INTEGER)) {
+ throw new tsProtoGlobalThis$1.Error("Value is larger than Number.MAX_SAFE_INTEGER");
+ }
+ return long.toNumber();
+}
+if (_m0.util.Long !== Long$1) {
+ _m0.util.Long = Long$1;
+ _m0.configure();
+}
+function isSet$1(value) {
+ return value !== null && value !== undefined;
+}
+
+const maxRetryDelay = 7000;
+const DEFAULT_RETRY_DELAYS_IN_MS = [0, 300, 2 * 2 * 300, 3 * 3 * 300, 4 * 4 * 300, maxRetryDelay, maxRetryDelay, maxRetryDelay, maxRetryDelay, maxRetryDelay];
+class DefaultReconnectPolicy {
+ constructor(retryDelays) {
+ this._retryDelays = retryDelays !== undefined ? [...retryDelays] : DEFAULT_RETRY_DELAYS_IN_MS;
+ }
+ nextRetryDelayInMs(context) {
+ if (context.retryCount >= this._retryDelays.length) return null;
+ const retryDelay = this._retryDelays[context.retryCount];
+ if (context.retryCount <= 1) return retryDelay;
+ return retryDelay + Math.random() * 1000;
+ }
+}
+
+/******************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+/* global Reflect, Promise */
+
+
+function __awaiter(thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+}
+
+function __values(o) {
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+ if (m) return m.call(o);
+ if (o && typeof o.length === "number") return {
+ next: function () {
+ if (o && i >= o.length) o = void 0;
+ return { value: o && o[i++], done: !o };
+ }
+ };
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+}
+
+function __asyncValues(o) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var m = o[Symbol.asyncIterator], i;
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+}
+
+var events = {exports: {}};
+
+var R = typeof Reflect === 'object' ? Reflect : null;
+var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {
+ return Function.prototype.apply.call(target, receiver, args);
+};
+var ReflectOwnKeys;
+if (R && typeof R.ownKeys === 'function') {
+ ReflectOwnKeys = R.ownKeys;
+} else if (Object.getOwnPropertySymbols) {
+ ReflectOwnKeys = function ReflectOwnKeys(target) {
+ return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));
+ };
+} else {
+ ReflectOwnKeys = function ReflectOwnKeys(target) {
+ return Object.getOwnPropertyNames(target);
+ };
+}
+function ProcessEmitWarning(warning) {
+ if (console && console.warn) console.warn(warning);
+}
+var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
+ return value !== value;
+};
+function EventEmitter() {
+ EventEmitter.init.call(this);
+}
+events.exports = EventEmitter;
+events.exports.once = once;
+
+// Backwards-compat with node 0.10.x
+EventEmitter.EventEmitter = EventEmitter;
+EventEmitter.prototype._events = undefined;
+EventEmitter.prototype._eventsCount = 0;
+EventEmitter.prototype._maxListeners = undefined;
+
+// By default EventEmitters will print a warning if more than 10 listeners are
+// added to it. This is a useful default which helps finding memory leaks.
+var defaultMaxListeners = 10;
+function checkListener(listener) {
+ if (typeof listener !== 'function') {
+ throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
+ }
+}
+Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
+ enumerable: true,
+ get: function () {
+ return defaultMaxListeners;
+ },
+ set: function (arg) {
+ if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
+ throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
+ }
+ defaultMaxListeners = arg;
+ }
+});
+EventEmitter.init = function () {
+ if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {
+ this._events = Object.create(null);
+ this._eventsCount = 0;
+ }
+ this._maxListeners = this._maxListeners || undefined;
+};
+
+// Obviously not all Emitters should be limited to 10. This function allows
+// that to be increased. Set to zero for unlimited.
+EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
+ if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
+ throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
+ }
+ this._maxListeners = n;
+ return this;
+};
+function _getMaxListeners(that) {
+ if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;
+ return that._maxListeners;
+}
+EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
+ return _getMaxListeners(this);
+};
+EventEmitter.prototype.emit = function emit(type) {
+ var args = [];
+ for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);
+ var doError = type === 'error';
+ var events = this._events;
+ if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false;
+
+ // If there is no 'error' event listener then throw.
+ if (doError) {
+ var er;
+ if (args.length > 0) er = args[0];
+ if (er instanceof Error) {
+ // Note: The comments on the `throw` lines are intentional, they show
+ // up in Node's output if this results in an unhandled exception.
+ throw er; // Unhandled 'error' event
+ }
+ // At least give some kind of context to the user
+ var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
+ err.context = er;
+ throw err; // Unhandled 'error' event
+ }
+
+ var handler = events[type];
+ if (handler === undefined) return false;
+ if (typeof handler === 'function') {
+ ReflectApply(handler, this, args);
+ } else {
+ var len = handler.length;
+ var listeners = arrayClone(handler, len);
+ for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args);
+ }
+ return true;
+};
+function _addListener(target, type, listener, prepend) {
+ var m;
+ var events;
+ var existing;
+ checkListener(listener);
+ events = target._events;
+ if (events === undefined) {
+ events = target._events = Object.create(null);
+ target._eventsCount = 0;
+ } else {
+ // To avoid recursion in the case that type === "newListener"! Before
+ // adding it to the listeners, first emit "newListener".
+ if (events.newListener !== undefined) {
+ target.emit('newListener', type, listener.listener ? listener.listener : listener);
+
+ // Re-assign `events` because a newListener handler could have caused the
+ // this._events to be assigned to a new object
+ events = target._events;
+ }
+ existing = events[type];
+ }
+ if (existing === undefined) {
+ // Optimize the case of one listener. Don't need the extra array object.
+ existing = events[type] = listener;
+ ++target._eventsCount;
+ } else {
+ if (typeof existing === 'function') {
+ // Adding the second element, need to change to array.
+ existing = events[type] = prepend ? [listener, existing] : [existing, listener];
+ // If we've already got an array, just append.
+ } else if (prepend) {
+ existing.unshift(listener);
+ } else {
+ existing.push(listener);
+ }
+
+ // Check for listener leak
+ m = _getMaxListeners(target);
+ if (m > 0 && existing.length > m && !existing.warned) {
+ existing.warned = true;
+ // No error code for this since it is a Warning
+ // eslint-disable-next-line no-restricted-syntax
+ var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');
+ w.name = 'MaxListenersExceededWarning';
+ w.emitter = target;
+ w.type = type;
+ w.count = existing.length;
+ ProcessEmitWarning(w);
+ }
+ }
+ return target;
+}
+EventEmitter.prototype.addListener = function addListener(type, listener) {
+ return _addListener(this, type, listener, false);
+};
+EventEmitter.prototype.on = EventEmitter.prototype.addListener;
+EventEmitter.prototype.prependListener = function prependListener(type, listener) {
+ return _addListener(this, type, listener, true);
+};
+function onceWrapper() {
+ if (!this.fired) {
+ this.target.removeListener(this.type, this.wrapFn);
+ this.fired = true;
+ if (arguments.length === 0) return this.listener.call(this.target);
+ return this.listener.apply(this.target, arguments);
+ }
+}
+function _onceWrap(target, type, listener) {
+ var state = {
+ fired: false,
+ wrapFn: undefined,
+ target: target,
+ type: type,
+ listener: listener
+ };
+ var wrapped = onceWrapper.bind(state);
+ wrapped.listener = listener;
+ state.wrapFn = wrapped;
+ return wrapped;
+}
+EventEmitter.prototype.once = function once(type, listener) {
+ checkListener(listener);
+ this.on(type, _onceWrap(this, type, listener));
+ return this;
+};
+EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
+ checkListener(listener);
+ this.prependListener(type, _onceWrap(this, type, listener));
+ return this;
+};
+
+// Emits a 'removeListener' event if and only if the listener was removed.
+EventEmitter.prototype.removeListener = function removeListener(type, listener) {
+ var list, events, position, i, originalListener;
+ checkListener(listener);
+ events = this._events;
+ if (events === undefined) return this;
+ list = events[type];
+ if (list === undefined) return this;
+ if (list === listener || list.listener === listener) {
+ if (--this._eventsCount === 0) this._events = Object.create(null);else {
+ delete events[type];
+ if (events.removeListener) this.emit('removeListener', type, list.listener || listener);
+ }
+ } else if (typeof list !== 'function') {
+ position = -1;
+ for (i = list.length - 1; i >= 0; i--) {
+ if (list[i] === listener || list[i].listener === listener) {
+ originalListener = list[i].listener;
+ position = i;
+ break;
+ }
+ }
+ if (position < 0) return this;
+ if (position === 0) list.shift();else {
+ spliceOne(list, position);
+ }
+ if (list.length === 1) events[type] = list[0];
+ if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);
+ }
+ return this;
+};
+EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
+EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
+ var listeners, events, i;
+ events = this._events;
+ if (events === undefined) return this;
+
+ // not listening for removeListener, no need to emit
+ if (events.removeListener === undefined) {
+ if (arguments.length === 0) {
+ this._events = Object.create(null);
+ this._eventsCount = 0;
+ } else if (events[type] !== undefined) {
+ if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];
+ }
+ return this;
+ }
+
+ // emit removeListener for all listeners on all events
+ if (arguments.length === 0) {
+ var keys = Object.keys(events);
+ var key;
+ for (i = 0; i < keys.length; ++i) {
+ key = keys[i];
+ if (key === 'removeListener') continue;
+ this.removeAllListeners(key);
+ }
+ this.removeAllListeners('removeListener');
+ this._events = Object.create(null);
+ this._eventsCount = 0;
+ return this;
+ }
+ listeners = events[type];
+ if (typeof listeners === 'function') {
+ this.removeListener(type, listeners);
+ } else if (listeners !== undefined) {
+ // LIFO order
+ for (i = listeners.length - 1; i >= 0; i--) {
+ this.removeListener(type, listeners[i]);
+ }
+ }
+ return this;
+};
+function _listeners(target, type, unwrap) {
+ var events = target._events;
+ if (events === undefined) return [];
+ var evlistener = events[type];
+ if (evlistener === undefined) return [];
+ if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];
+ return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
+}
+EventEmitter.prototype.listeners = function listeners(type) {
+ return _listeners(this, type, true);
+};
+EventEmitter.prototype.rawListeners = function rawListeners(type) {
+ return _listeners(this, type, false);
+};
+EventEmitter.listenerCount = function (emitter, type) {
+ if (typeof emitter.listenerCount === 'function') {
+ return emitter.listenerCount(type);
+ } else {
+ return listenerCount.call(emitter, type);
+ }
+};
+EventEmitter.prototype.listenerCount = listenerCount;
+function listenerCount(type) {
+ var events = this._events;
+ if (events !== undefined) {
+ var evlistener = events[type];
+ if (typeof evlistener === 'function') {
+ return 1;
+ } else if (evlistener !== undefined) {
+ return evlistener.length;
+ }
+ }
+ return 0;
+}
+EventEmitter.prototype.eventNames = function eventNames() {
+ return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
+};
+function arrayClone(arr, n) {
+ var copy = new Array(n);
+ for (var i = 0; i < n; ++i) copy[i] = arr[i];
+ return copy;
+}
+function spliceOne(list, index) {
+ for (; index + 1 < list.length; index++) list[index] = list[index + 1];
+ list.pop();
+}
+function unwrapListeners(arr) {
+ var ret = new Array(arr.length);
+ for (var i = 0; i < ret.length; ++i) {
+ ret[i] = arr[i].listener || arr[i];
+ }
+ return ret;
+}
+function once(emitter, name) {
+ return new Promise(function (resolve, reject) {
+ function errorListener(err) {
+ emitter.removeListener(name, resolver);
+ reject(err);
+ }
+ function resolver() {
+ if (typeof emitter.removeListener === 'function') {
+ emitter.removeListener('error', errorListener);
+ }
+ resolve([].slice.call(arguments));
+ }
+ eventTargetAgnosticAddListener(emitter, name, resolver, {
+ once: true
+ });
+ if (name !== 'error') {
+ addErrorHandlerIfEventEmitter(emitter, errorListener, {
+ once: true
+ });
+ }
+ });
+}
+function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
+ if (typeof emitter.on === 'function') {
+ eventTargetAgnosticAddListener(emitter, 'error', handler, flags);
+ }
+}
+function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
+ if (typeof emitter.on === 'function') {
+ if (flags.once) {
+ emitter.once(name, listener);
+ } else {
+ emitter.on(name, listener);
+ }
+ } else if (typeof emitter.addEventListener === 'function') {
+ // EventTarget does not have `error` event semantics like Node
+ // EventEmitters, we do not listen for `error` events here.
+ emitter.addEventListener(name, function wrapListener(arg) {
+ // IE does not have builtin `{ once: true }` support so we
+ // have to do it manually.
+ if (flags.once) {
+ emitter.removeEventListener(name, wrapListener);
+ }
+ listener(arg);
+ });
+ } else {
+ throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
+ }
+}
+var eventsExports = events.exports;
+
+/*
+ * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree.
+ */
+/* eslint-env node */
+
+let logDisabled_ = true;
+let deprecationWarnings_ = true;
+
+/**
+ * Extract browser version out of the provided user agent string.
+ *
+ * @param {!string} uastring userAgent string.
+ * @param {!string} expr Regular expression used as match criteria.
+ * @param {!number} pos position in the version string to be returned.
+ * @return {!number} browser version.
+ */
+function extractVersion(uastring, expr, pos) {
+ const match = uastring.match(expr);
+ return match && match.length >= pos && parseInt(match[pos], 10);
+}
+
+// Wraps the peerconnection event eventNameToWrap in a function
+// which returns the modified event object (or false to prevent
+// the event).
+function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {
+ if (!window.RTCPeerConnection) {
+ return;
+ }
+ const proto = window.RTCPeerConnection.prototype;
+ const nativeAddEventListener = proto.addEventListener;
+ proto.addEventListener = function (nativeEventName, cb) {
+ if (nativeEventName !== eventNameToWrap) {
+ return nativeAddEventListener.apply(this, arguments);
+ }
+ const wrappedCallback = e => {
+ const modifiedEvent = wrapper(e);
+ if (modifiedEvent) {
+ if (cb.handleEvent) {
+ cb.handleEvent(modifiedEvent);
+ } else {
+ cb(modifiedEvent);
+ }
+ }
+ };
+ this._eventMap = this._eventMap || {};
+ if (!this._eventMap[eventNameToWrap]) {
+ this._eventMap[eventNameToWrap] = new Map();
+ }
+ this._eventMap[eventNameToWrap].set(cb, wrappedCallback);
+ return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]);
+ };
+ const nativeRemoveEventListener = proto.removeEventListener;
+ proto.removeEventListener = function (nativeEventName, cb) {
+ if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) {
+ return nativeRemoveEventListener.apply(this, arguments);
+ }
+ if (!this._eventMap[eventNameToWrap].has(cb)) {
+ return nativeRemoveEventListener.apply(this, arguments);
+ }
+ const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);
+ this._eventMap[eventNameToWrap].delete(cb);
+ if (this._eventMap[eventNameToWrap].size === 0) {
+ delete this._eventMap[eventNameToWrap];
+ }
+ if (Object.keys(this._eventMap).length === 0) {
+ delete this._eventMap;
+ }
+ return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]);
+ };
+ Object.defineProperty(proto, 'on' + eventNameToWrap, {
+ get() {
+ return this['_on' + eventNameToWrap];
+ },
+ set(cb) {
+ if (this['_on' + eventNameToWrap]) {
+ this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]);
+ delete this['_on' + eventNameToWrap];
+ }
+ if (cb) {
+ this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb);
+ }
+ },
+ enumerable: true,
+ configurable: true
+ });
+}
+function disableLog(bool) {
+ if (typeof bool !== 'boolean') {
+ return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');
+ }
+ logDisabled_ = bool;
+ return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled';
+}
+
+/**
+ * Disable or enable deprecation warnings
+ * @param {!boolean} bool set to true to disable warnings.
+ */
+function disableWarnings(bool) {
+ if (typeof bool !== 'boolean') {
+ return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');
+ }
+ deprecationWarnings_ = !bool;
+ return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');
+}
+function log() {
+ if (typeof window === 'object') {
+ if (logDisabled_) {
+ return;
+ }
+ if (typeof console !== 'undefined' && typeof console.log === 'function') {
+ console.log.apply(console, arguments);
+ }
+ }
+}
+
+/**
+ * Shows a deprecation warning suggesting the modern and spec-compatible API.
+ */
+function deprecated(oldMethod, newMethod) {
+ if (!deprecationWarnings_) {
+ return;
+ }
+ console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.');
+}
+
+/**
+ * Browser detector.
+ *
+ * @return {object} result containing browser and version
+ * properties.
+ */
+function detectBrowser(window) {
+ // Returned result object.
+ const result = {
+ browser: null,
+ version: null
+ };
+
+ // Fail early if it's not a browser
+ if (typeof window === 'undefined' || !window.navigator) {
+ result.browser = 'Not a browser.';
+ return result;
+ }
+ const {
+ navigator
+ } = window;
+ if (navigator.mozGetUserMedia) {
+ // Firefox.
+ result.browser = 'firefox';
+ result.version = extractVersion(navigator.userAgent, /Firefox\/(\d+)\./, 1);
+ } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection) {
+ // Chrome, Chromium, Webview, Opera.
+ // Version matches Chrome/WebRTC version.
+ // Chrome 74 removed webkitGetUserMedia on http as well so we need the
+ // more complicated fallback to webkitRTCPeerConnection.
+ result.browser = 'chrome';
+ result.version = extractVersion(navigator.userAgent, /Chrom(e|ium)\/(\d+)\./, 2);
+ } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) {
+ // Safari.
+ result.browser = 'safari';
+ result.version = extractVersion(navigator.userAgent, /AppleWebKit\/(\d+)\./, 1);
+ result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype;
+ } else {
+ // Default fallthrough: not supported.
+ result.browser = 'Not a supported browser.';
+ return result;
+ }
+ return result;
+}
+
+/**
+ * Checks if something is an object.
+ *
+ * @param {*} val The something you want to check.
+ * @return true if val is an object, false otherwise.
+ */
+function isObject(val) {
+ return Object.prototype.toString.call(val) === '[object Object]';
+}
+
+/**
+ * Remove all empty objects and undefined values
+ * from a nested object -- an enhanced and vanilla version
+ * of Lodash's `compact`.
+ */
+function compactObject(data) {
+ if (!isObject(data)) {
+ return data;
+ }
+ return Object.keys(data).reduce(function (accumulator, key) {
+ const isObj = isObject(data[key]);
+ const value = isObj ? compactObject(data[key]) : data[key];
+ const isEmptyObject = isObj && !Object.keys(value).length;
+ if (value === undefined || isEmptyObject) {
+ return accumulator;
+ }
+ return Object.assign(accumulator, {
+ [key]: value
+ });
+ }, {});
+}
+
+/* iterates the stats graph recursively. */
+function walkStats(stats, base, resultSet) {
+ if (!base || resultSet.has(base.id)) {
+ return;
+ }
+ resultSet.set(base.id, base);
+ Object.keys(base).forEach(name => {
+ if (name.endsWith('Id')) {
+ walkStats(stats, stats.get(base[name]), resultSet);
+ } else if (name.endsWith('Ids')) {
+ base[name].forEach(id => {
+ walkStats(stats, stats.get(id), resultSet);
+ });
+ }
+ });
+}
+
+/* filter getStats for a sender/receiver track. */
+function filterStats(result, track, outbound) {
+ const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';
+ const filteredResult = new Map();
+ if (track === null) {
+ return filteredResult;
+ }
+ const trackStats = [];
+ result.forEach(value => {
+ if (value.type === 'track' && value.trackIdentifier === track.id) {
+ trackStats.push(value);
+ }
+ });
+ trackStats.forEach(trackStat => {
+ result.forEach(stats => {
+ if (stats.type === streamStatsType && stats.trackId === trackStat.id) {
+ walkStats(result, stats, filteredResult);
+ }
+ });
+ });
+ return filteredResult;
+}
+
+/*
+ * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree.
+ */
+/* eslint-env node */
+const logging = log;
+function shimGetUserMedia$2(window, browserDetails) {
+ const navigator = window && window.navigator;
+ if (!navigator.mediaDevices) {
+ return;
+ }
+ const constraintsToChrome_ = function (c) {
+ if (typeof c !== 'object' || c.mandatory || c.optional) {
+ return c;
+ }
+ const cc = {};
+ Object.keys(c).forEach(key => {
+ if (key === 'require' || key === 'advanced' || key === 'mediaSource') {
+ return;
+ }
+ const r = typeof c[key] === 'object' ? c[key] : {
+ ideal: c[key]
+ };
+ if (r.exact !== undefined && typeof r.exact === 'number') {
+ r.min = r.max = r.exact;
+ }
+ const oldname_ = function (prefix, name) {
+ if (prefix) {
+ return prefix + name.charAt(0).toUpperCase() + name.slice(1);
+ }
+ return name === 'deviceId' ? 'sourceId' : name;
+ };
+ if (r.ideal !== undefined) {
+ cc.optional = cc.optional || [];
+ let oc = {};
+ if (typeof r.ideal === 'number') {
+ oc[oldname_('min', key)] = r.ideal;
+ cc.optional.push(oc);
+ oc = {};
+ oc[oldname_('max', key)] = r.ideal;
+ cc.optional.push(oc);
+ } else {
+ oc[oldname_('', key)] = r.ideal;
+ cc.optional.push(oc);
+ }
+ }
+ if (r.exact !== undefined && typeof r.exact !== 'number') {
+ cc.mandatory = cc.mandatory || {};
+ cc.mandatory[oldname_('', key)] = r.exact;
+ } else {
+ ['min', 'max'].forEach(mix => {
+ if (r[mix] !== undefined) {
+ cc.mandatory = cc.mandatory || {};
+ cc.mandatory[oldname_(mix, key)] = r[mix];
+ }
+ });
+ }
+ });
+ if (c.advanced) {
+ cc.optional = (cc.optional || []).concat(c.advanced);
+ }
+ return cc;
+ };
+ const shimConstraints_ = function (constraints, func) {
+ if (browserDetails.version >= 61) {
+ return func(constraints);
+ }
+ constraints = JSON.parse(JSON.stringify(constraints));
+ if (constraints && typeof constraints.audio === 'object') {
+ const remap = function (obj, a, b) {
+ if (a in obj && !(b in obj)) {
+ obj[b] = obj[a];
+ delete obj[a];
+ }
+ };
+ constraints = JSON.parse(JSON.stringify(constraints));
+ remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');
+ remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');
+ constraints.audio = constraintsToChrome_(constraints.audio);
+ }
+ if (constraints && typeof constraints.video === 'object') {
+ // Shim facingMode for mobile & surface pro.
+ let face = constraints.video.facingMode;
+ face = face && (typeof face === 'object' ? face : {
+ ideal: face
+ });
+ const getSupportedFacingModeLies = browserDetails.version < 66;
+ if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {
+ delete constraints.video.facingMode;
+ let matches;
+ if (face.exact === 'environment' || face.ideal === 'environment') {
+ matches = ['back', 'rear'];
+ } else if (face.exact === 'user' || face.ideal === 'user') {
+ matches = ['front'];
+ }
+ if (matches) {
+ // Look for matches in label, or use last cam for back (typical).
+ return navigator.mediaDevices.enumerateDevices().then(devices => {
+ devices = devices.filter(d => d.kind === 'videoinput');
+ let dev = devices.find(d => matches.some(match => d.label.toLowerCase().includes(match)));
+ if (!dev && devices.length && matches.includes('back')) {
+ dev = devices[devices.length - 1]; // more likely the back cam
+ }
+
+ if (dev) {
+ constraints.video.deviceId = face.exact ? {
+ exact: dev.deviceId
+ } : {
+ ideal: dev.deviceId
+ };
+ }
+ constraints.video = constraintsToChrome_(constraints.video);
+ logging('chrome: ' + JSON.stringify(constraints));
+ return func(constraints);
+ });
+ }
+ }
+ constraints.video = constraintsToChrome_(constraints.video);
+ }
+ logging('chrome: ' + JSON.stringify(constraints));
+ return func(constraints);
+ };
+ const shimError_ = function (e) {
+ if (browserDetails.version >= 64) {
+ return e;
+ }
+ return {
+ name: {
+ PermissionDeniedError: 'NotAllowedError',
+ PermissionDismissedError: 'NotAllowedError',
+ InvalidStateError: 'NotAllowedError',
+ DevicesNotFoundError: 'NotFoundError',
+ ConstraintNotSatisfiedError: 'OverconstrainedError',
+ TrackStartError: 'NotReadableError',
+ MediaDeviceFailedDueToShutdown: 'NotAllowedError',
+ MediaDeviceKillSwitchOn: 'NotAllowedError',
+ TabCaptureError: 'AbortError',
+ ScreenCaptureError: 'AbortError',
+ DeviceCaptureError: 'AbortError'
+ }[e.name] || e.name,
+ message: e.message,
+ constraint: e.constraint || e.constraintName,
+ toString() {
+ return this.name + (this.message && ': ') + this.message;
+ }
+ };
+ };
+ const getUserMedia_ = function (constraints, onSuccess, onError) {
+ shimConstraints_(constraints, c => {
+ navigator.webkitGetUserMedia(c, onSuccess, e => {
+ if (onError) {
+ onError(shimError_(e));
+ }
+ });
+ });
+ };
+ navigator.getUserMedia = getUserMedia_.bind(navigator);
+
+ // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia
+ // function which returns a Promise, it does not accept spec-style
+ // constraints.
+ if (navigator.mediaDevices.getUserMedia) {
+ const origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
+ navigator.mediaDevices.getUserMedia = function (cs) {
+ return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {
+ if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {
+ stream.getTracks().forEach(track => {
+ track.stop();
+ });
+ throw new DOMException('', 'NotFoundError');
+ }
+ return stream;
+ }, e => Promise.reject(shimError_(e))));
+ };
+ }
+}
+
+/*
+ * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree.
+ */
+/* eslint-env node */
+
+function shimGetDisplayMedia$1(window, getSourceId) {
+ if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {
+ return;
+ }
+ if (!window.navigator.mediaDevices) {
+ return;
+ }
+ // getSourceId is a function that returns a promise resolving with
+ // the sourceId of the screen/window/tab to be shared.
+ if (typeof getSourceId !== 'function') {
+ console.error('shimGetDisplayMedia: getSourceId argument is not ' + 'a function');
+ return;
+ }
+ window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {
+ return getSourceId(constraints).then(sourceId => {
+ const widthSpecified = constraints.video && constraints.video.width;
+ const heightSpecified = constraints.video && constraints.video.height;
+ const frameRateSpecified = constraints.video && constraints.video.frameRate;
+ constraints.video = {
+ mandatory: {
+ chromeMediaSource: 'desktop',
+ chromeMediaSourceId: sourceId,
+ maxFrameRate: frameRateSpecified || 3
+ }
+ };
+ if (widthSpecified) {
+ constraints.video.mandatory.maxWidth = widthSpecified;
+ }
+ if (heightSpecified) {
+ constraints.video.mandatory.maxHeight = heightSpecified;
+ }
+ return window.navigator.mediaDevices.getUserMedia(constraints);
+ });
+ };
+}
+
+/*
+ * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree.
+ */
+/* eslint-env node */
+function shimMediaStream(window) {
+ window.MediaStream = window.MediaStream || window.webkitMediaStream;
+}
+function shimOnTrack$1(window) {
+ if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) {
+ Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {
+ get() {
+ return this._ontrack;
+ },
+ set(f) {
+ if (this._ontrack) {
+ this.removeEventListener('track', this._ontrack);
+ }
+ this.addEventListener('track', this._ontrack = f);
+ },
+ enumerable: true,
+ configurable: true
+ });
+ const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;
+ window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {
+ if (!this._ontrackpoly) {
+ this._ontrackpoly = e => {
+ // onaddstream does not fire when a track is added to an existing
+ // stream. But stream.onaddtrack is implemented so we use that.
+ e.stream.addEventListener('addtrack', te => {
+ let receiver;
+ if (window.RTCPeerConnection.prototype.getReceivers) {
+ receiver = this.getReceivers().find(r => r.track && r.track.id === te.track.id);
+ } else {
+ receiver = {
+ track: te.track
+ };
+ }
+ const event = new Event('track');
+ event.track = te.track;
+ event.receiver = receiver;
+ event.transceiver = {
+ receiver
+ };
+ event.streams = [e.stream];
+ this.dispatchEvent(event);
+ });
+ e.stream.getTracks().forEach(track => {
+ let receiver;
+ if (window.RTCPeerConnection.prototype.getReceivers) {
+ receiver = this.getReceivers().find(r => r.track && r.track.id === track.id);
+ } else {
+ receiver = {
+ track
+ };
+ }
+ const event = new Event('track');
+ event.track = track;
+ event.receiver = receiver;
+ event.transceiver = {
+ receiver
+ };
+ event.streams = [e.stream];
+ this.dispatchEvent(event);
+ });
+ };
+ this.addEventListener('addstream', this._ontrackpoly);
+ }
+ return origSetRemoteDescription.apply(this, arguments);
+ };
+ } else {
+ // even if RTCRtpTransceiver is in window, it is only used and
+ // emitted in unified-plan. Unfortunately this means we need
+ // to unconditionally wrap the event.
+ wrapPeerConnectionEvent(window, 'track', e => {
+ if (!e.transceiver) {
+ Object.defineProperty(e, 'transceiver', {
+ value: {
+ receiver: e.receiver
+ }
+ });
+ }
+ return e;
+ });
+ }
+}
+function shimGetSendersWithDtmf(window) {
+ // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.
+ if (typeof window === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) {
+ const shimSenderWithDtmf = function (pc, track) {
+ return {
+ track,
+ get dtmf() {
+ if (this._dtmf === undefined) {
+ if (track.kind === 'audio') {
+ this._dtmf = pc.createDTMFSender(track);
+ } else {
+ this._dtmf = null;
+ }
+ }
+ return this._dtmf;
+ },
+ _pc: pc
+ };
+ };
+
+ // augment addTrack when getSenders is not available.
+ if (!window.RTCPeerConnection.prototype.getSenders) {
+ window.RTCPeerConnection.prototype.getSenders = function getSenders() {
+ this._senders = this._senders || [];
+ return this._senders.slice(); // return a copy of the internal state.
+ };
+
+ const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
+ window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {
+ let sender = origAddTrack.apply(this, arguments);
+ if (!sender) {
+ sender = shimSenderWithDtmf(this, track);
+ this._senders.push(sender);
+ }
+ return sender;
+ };
+ const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;
+ window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {
+ origRemoveTrack.apply(this, arguments);
+ const idx = this._senders.indexOf(sender);
+ if (idx !== -1) {
+ this._senders.splice(idx, 1);
+ }
+ };
+ }
+ const origAddStream = window.RTCPeerConnection.prototype.addStream;
+ window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
+ this._senders = this._senders || [];
+ origAddStream.apply(this, [stream]);
+ stream.getTracks().forEach(track => {
+ this._senders.push(shimSenderWithDtmf(this, track));
+ });
+ };
+ const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;
+ window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {
+ this._senders = this._senders || [];
+ origRemoveStream.apply(this, [stream]);
+ stream.getTracks().forEach(track => {
+ const sender = this._senders.find(s => s.track === track);
+ if (sender) {
+ // remove sender
+ this._senders.splice(this._senders.indexOf(sender), 1);
+ }
+ });
+ };
+ } else if (typeof window === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {
+ const origGetSenders = window.RTCPeerConnection.prototype.getSenders;
+ window.RTCPeerConnection.prototype.getSenders = function getSenders() {
+ const senders = origGetSenders.apply(this, []);
+ senders.forEach(sender => sender._pc = this);
+ return senders;
+ };
+ Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {
+ get() {
+ if (this._dtmf === undefined) {
+ if (this.track.kind === 'audio') {
+ this._dtmf = this._pc.createDTMFSender(this.track);
+ } else {
+ this._dtmf = null;
+ }
+ }
+ return this._dtmf;
+ }
+ });
+ }
+}
+function shimGetStats(window) {
+ if (!window.RTCPeerConnection) {
+ return;
+ }
+ const origGetStats = window.RTCPeerConnection.prototype.getStats;
+ window.RTCPeerConnection.prototype.getStats = function getStats() {
+ const [selector, onSucc, onErr] = arguments;
+
+ // If selector is a function then we are in the old style stats so just
+ // pass back the original getStats format to avoid breaking old users.
+ if (arguments.length > 0 && typeof selector === 'function') {
+ return origGetStats.apply(this, arguments);
+ }
+
+ // When spec-style getStats is supported, return those when called with
+ // either no arguments or the selector argument is null.
+ if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== 'function')) {
+ return origGetStats.apply(this, []);
+ }
+ const fixChromeStats_ = function (response) {
+ const standardReport = {};
+ const reports = response.result();
+ reports.forEach(report => {
+ const standardStats = {
+ id: report.id,
+ timestamp: report.timestamp,
+ type: {
+ localcandidate: 'local-candidate',
+ remotecandidate: 'remote-candidate'
+ }[report.type] || report.type
+ };
+ report.names().forEach(name => {
+ standardStats[name] = report.stat(name);
+ });
+ standardReport[standardStats.id] = standardStats;
+ });
+ return standardReport;
+ };
+
+ // shim getStats with maplike support
+ const makeMapStats = function (stats) {
+ return new Map(Object.keys(stats).map(key => [key, stats[key]]));
+ };
+ if (arguments.length >= 2) {
+ const successCallbackWrapper_ = function (response) {
+ onSucc(makeMapStats(fixChromeStats_(response)));
+ };
+ return origGetStats.apply(this, [successCallbackWrapper_, selector]);
+ }
+
+ // promise-support
+ return new Promise((resolve, reject) => {
+ origGetStats.apply(this, [function (response) {
+ resolve(makeMapStats(fixChromeStats_(response)));
+ }, reject]);
+ }).then(onSucc, onErr);
+ };
+}
+function shimSenderReceiverGetStats(window) {
+ if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) {
+ return;
+ }
+
+ // shim sender stats.
+ if (!('getStats' in window.RTCRtpSender.prototype)) {
+ const origGetSenders = window.RTCPeerConnection.prototype.getSenders;
+ if (origGetSenders) {
+ window.RTCPeerConnection.prototype.getSenders = function getSenders() {
+ const senders = origGetSenders.apply(this, []);
+ senders.forEach(sender => sender._pc = this);
+ return senders;
+ };
+ }
+ const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
+ if (origAddTrack) {
+ window.RTCPeerConnection.prototype.addTrack = function addTrack() {
+ const sender = origAddTrack.apply(this, arguments);
+ sender._pc = this;
+ return sender;
+ };
+ }
+ window.RTCRtpSender.prototype.getStats = function getStats() {
+ const sender = this;
+ return this._pc.getStats().then(result =>
+ /* Note: this will include stats of all senders that
+ * send a track with the same id as sender.track as
+ * it is not possible to identify the RTCRtpSender.
+ */
+ filterStats(result, sender.track, true));
+ };
+ }
+
+ // shim receiver stats.
+ if (!('getStats' in window.RTCRtpReceiver.prototype)) {
+ const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;
+ if (origGetReceivers) {
+ window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {
+ const receivers = origGetReceivers.apply(this, []);
+ receivers.forEach(receiver => receiver._pc = this);
+ return receivers;
+ };
+ }
+ wrapPeerConnectionEvent(window, 'track', e => {
+ e.receiver._pc = e.srcElement;
+ return e;
+ });
+ window.RTCRtpReceiver.prototype.getStats = function getStats() {
+ const receiver = this;
+ return this._pc.getStats().then(result => filterStats(result, receiver.track, false));
+ };
+ }
+ if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) {
+ return;
+ }
+
+ // shim RTCPeerConnection.getStats(track).
+ const origGetStats = window.RTCPeerConnection.prototype.getStats;
+ window.RTCPeerConnection.prototype.getStats = function getStats() {
+ if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {
+ const track = arguments[0];
+ let sender;
+ let receiver;
+ let err;
+ this.getSenders().forEach(s => {
+ if (s.track === track) {
+ if (sender) {
+ err = true;
+ } else {
+ sender = s;
+ }
+ }
+ });
+ this.getReceivers().forEach(r => {
+ if (r.track === track) {
+ if (receiver) {
+ err = true;
+ } else {
+ receiver = r;
+ }
+ }
+ return r.track === track;
+ });
+ if (err || sender && receiver) {
+ return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError'));
+ } else if (sender) {
+ return sender.getStats();
+ } else if (receiver) {
+ return receiver.getStats();
+ }
+ return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError'));
+ }
+ return origGetStats.apply(this, arguments);
+ };
+}
+function shimAddTrackRemoveTrackWithNative(window) {
+ // shim addTrack/removeTrack with native variants in order to make
+ // the interactions with legacy getLocalStreams behave as in other browsers.
+ // Keeps a mapping stream.id => [stream, rtpsenders...]
+ window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {
+ this._shimmedLocalStreams = this._shimmedLocalStreams || {};
+ return Object.keys(this._shimmedLocalStreams).map(streamId => this._shimmedLocalStreams[streamId][0]);
+ };
+ const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
+ window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {
+ if (!stream) {
+ return origAddTrack.apply(this, arguments);
+ }
+ this._shimmedLocalStreams = this._shimmedLocalStreams || {};
+ const sender = origAddTrack.apply(this, arguments);
+ if (!this._shimmedLocalStreams[stream.id]) {
+ this._shimmedLocalStreams[stream.id] = [stream, sender];
+ } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {
+ this._shimmedLocalStreams[stream.id].push(sender);
+ }
+ return sender;
+ };
+ const origAddStream = window.RTCPeerConnection.prototype.addStream;
+ window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
+ this._shimmedLocalStreams = this._shimmedLocalStreams || {};
+ stream.getTracks().forEach(track => {
+ const alreadyExists = this.getSenders().find(s => s.track === track);
+ if (alreadyExists) {
+ throw new DOMException('Track already exists.', 'InvalidAccessError');
+ }
+ });
+ const existingSenders = this.getSenders();
+ origAddStream.apply(this, arguments);
+ const newSenders = this.getSenders().filter(newSender => existingSenders.indexOf(newSender) === -1);
+ this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);
+ };
+ const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;
+ window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {
+ this._shimmedLocalStreams = this._shimmedLocalStreams || {};
+ delete this._shimmedLocalStreams[stream.id];
+ return origRemoveStream.apply(this, arguments);
+ };
+ const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;
+ window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {
+ this._shimmedLocalStreams = this._shimmedLocalStreams || {};
+ if (sender) {
+ Object.keys(this._shimmedLocalStreams).forEach(streamId => {
+ const idx = this._shimmedLocalStreams[streamId].indexOf(sender);
+ if (idx !== -1) {
+ this._shimmedLocalStreams[streamId].splice(idx, 1);
+ }
+ if (this._shimmedLocalStreams[streamId].length === 1) {
+ delete this._shimmedLocalStreams[streamId];
+ }
+ });
+ }
+ return origRemoveTrack.apply(this, arguments);
+ };
+}
+function shimAddTrackRemoveTrack(window, browserDetails) {
+ if (!window.RTCPeerConnection) {
+ return;
+ }
+ // shim addTrack and removeTrack.
+ if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) {
+ return shimAddTrackRemoveTrackWithNative(window);
+ }
+
+ // also shim pc.getLocalStreams when addTrack is shimmed
+ // to return the original streams.
+ const origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;
+ window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {
+ const nativeStreams = origGetLocalStreams.apply(this);
+ this._reverseStreams = this._reverseStreams || {};
+ return nativeStreams.map(stream => this._reverseStreams[stream.id]);
+ };
+ const origAddStream = window.RTCPeerConnection.prototype.addStream;
+ window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
+ this._streams = this._streams || {};
+ this._reverseStreams = this._reverseStreams || {};
+ stream.getTracks().forEach(track => {
+ const alreadyExists = this.getSenders().find(s => s.track === track);
+ if (alreadyExists) {
+ throw new DOMException('Track already exists.', 'InvalidAccessError');
+ }
+ });
+ // Add identity mapping for consistency with addTrack.
+ // Unless this is being used with a stream from addTrack.
+ if (!this._reverseStreams[stream.id]) {
+ const newStream = new window.MediaStream(stream.getTracks());
+ this._streams[stream.id] = newStream;
+ this._reverseStreams[newStream.id] = stream;
+ stream = newStream;
+ }
+ origAddStream.apply(this, [stream]);
+ };
+ const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;
+ window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {
+ this._streams = this._streams || {};
+ this._reverseStreams = this._reverseStreams || {};
+ origRemoveStream.apply(this, [this._streams[stream.id] || stream]);
+ delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];
+ delete this._streams[stream.id];
+ };
+ window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {
+ if (this.signalingState === 'closed') {
+ throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError');
+ }
+ const streams = [].slice.call(arguments, 1);
+ if (streams.length !== 1 || !streams[0].getTracks().find(t => t === track)) {
+ // this is not fully correct but all we can manage without
+ // [[associated MediaStreams]] internal slot.
+ throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError');
+ }
+ const alreadyExists = this.getSenders().find(s => s.track === track);
+ if (alreadyExists) {
+ throw new DOMException('Track already exists.', 'InvalidAccessError');
+ }
+ this._streams = this._streams || {};
+ this._reverseStreams = this._reverseStreams || {};
+ const oldStream = this._streams[stream.id];
+ if (oldStream) {
+ // this is using odd Chrome behaviour, use with caution:
+ // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815
+ // Note: we rely on the high-level addTrack/dtmf shim to
+ // create the sender with a dtmf sender.
+ oldStream.addTrack(track);
+
+ // Trigger ONN async.
+ Promise.resolve().then(() => {
+ this.dispatchEvent(new Event('negotiationneeded'));
+ });
+ } else {
+ const newStream = new window.MediaStream([track]);
+ this._streams[stream.id] = newStream;
+ this._reverseStreams[newStream.id] = stream;
+ this.addStream(newStream);
+ }
+ return this.getSenders().find(s => s.track === track);
+ };
+
+ // replace the internal stream id with the external one and
+ // vice versa.
+ function replaceInternalStreamId(pc, description) {
+ let sdp = description.sdp;
+ Object.keys(pc._reverseStreams || []).forEach(internalId => {
+ const externalStream = pc._reverseStreams[internalId];
+ const internalStream = pc._streams[externalStream.id];
+ sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id);
+ });
+ return new RTCSessionDescription({
+ type: description.type,
+ sdp
+ });
+ }
+ function replaceExternalStreamId(pc, description) {
+ let sdp = description.sdp;
+ Object.keys(pc._reverseStreams || []).forEach(internalId => {
+ const externalStream = pc._reverseStreams[internalId];
+ const internalStream = pc._streams[externalStream.id];
+ sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id);
+ });
+ return new RTCSessionDescription({
+ type: description.type,
+ sdp
+ });
+ }
+ ['createOffer', 'createAnswer'].forEach(function (method) {
+ const nativeMethod = window.RTCPeerConnection.prototype[method];
+ const methodObj = {
+ [method]() {
+ const args = arguments;
+ const isLegacyCall = arguments.length && typeof arguments[0] === 'function';
+ if (isLegacyCall) {
+ return nativeMethod.apply(this, [description => {
+ const desc = replaceInternalStreamId(this, description);
+ args[0].apply(null, [desc]);
+ }, err => {
+ if (args[1]) {
+ args[1].apply(null, err);
+ }
+ }, arguments[2]]);
+ }
+ return nativeMethod.apply(this, arguments).then(description => replaceInternalStreamId(this, description));
+ }
+ };
+ window.RTCPeerConnection.prototype[method] = methodObj[method];
+ });
+ const origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;
+ window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {
+ if (!arguments.length || !arguments[0].type) {
+ return origSetLocalDescription.apply(this, arguments);
+ }
+ arguments[0] = replaceExternalStreamId(this, arguments[0]);
+ return origSetLocalDescription.apply(this, arguments);
+ };
+
+ // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier
+
+ const origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription');
+ Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', {
+ get() {
+ const description = origLocalDescription.get.apply(this);
+ if (description.type === '') {
+ return description;
+ }
+ return replaceInternalStreamId(this, description);
+ }
+ });
+ window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {
+ if (this.signalingState === 'closed') {
+ throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError');
+ }
+ // We can not yet check for sender instanceof RTCRtpSender
+ // since we shim RTPSender. So we check if sender._pc is set.
+ if (!sender._pc) {
+ throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError');
+ }
+ const isLocal = sender._pc === this;
+ if (!isLocal) {
+ throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError');
+ }
+
+ // Search for the native stream the senders track belongs to.
+ this._streams = this._streams || {};
+ let stream;
+ Object.keys(this._streams).forEach(streamid => {
+ const hasTrack = this._streams[streamid].getTracks().find(track => sender.track === track);
+ if (hasTrack) {
+ stream = this._streams[streamid];
+ }
+ });
+ if (stream) {
+ if (stream.getTracks().length === 1) {
+ // if this is the last track of the stream, remove the stream. This
+ // takes care of any shimmed _senders.
+ this.removeStream(this._reverseStreams[stream.id]);
+ } else {
+ // relying on the same odd chrome behaviour as above.
+ stream.removeTrack(sender.track);
+ }
+ this.dispatchEvent(new Event('negotiationneeded'));
+ }
+ };
+}
+function shimPeerConnection$1(window, browserDetails) {
+ if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {
+ // very basic support for old versions.
+ window.RTCPeerConnection = window.webkitRTCPeerConnection;
+ }
+ if (!window.RTCPeerConnection) {
+ return;
+ }
+
+ // shim implicit creation of RTCSessionDescription/RTCIceCandidate
+ if (browserDetails.version < 53) {
+ ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {
+ const nativeMethod = window.RTCPeerConnection.prototype[method];
+ const methodObj = {
+ [method]() {
+ arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);
+ return nativeMethod.apply(this, arguments);
+ }
+ };
+ window.RTCPeerConnection.prototype[method] = methodObj[method];
+ });
+ }
+}
+
+// Attempt to fix ONN in plan-b mode.
+function fixNegotiationNeeded(window, browserDetails) {
+ wrapPeerConnectionEvent(window, 'negotiationneeded', e => {
+ const pc = e.target;
+ if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') {
+ if (pc.signalingState !== 'stable') {
+ return;
+ }
+ }
+ return e;
+ });
+}
+
+var chromeShim = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ fixNegotiationNeeded: fixNegotiationNeeded,
+ shimAddTrackRemoveTrack: shimAddTrackRemoveTrack,
+ shimAddTrackRemoveTrackWithNative: shimAddTrackRemoveTrackWithNative,
+ shimGetDisplayMedia: shimGetDisplayMedia$1,
+ shimGetSendersWithDtmf: shimGetSendersWithDtmf,
+ shimGetStats: shimGetStats,
+ shimGetUserMedia: shimGetUserMedia$2,
+ shimMediaStream: shimMediaStream,
+ shimOnTrack: shimOnTrack$1,
+ shimPeerConnection: shimPeerConnection$1,
+ shimSenderReceiverGetStats: shimSenderReceiverGetStats
+});
+
+/*
+ * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree.
+ */
+/* eslint-env node */
+function shimGetUserMedia$1(window, browserDetails) {
+ const navigator = window && window.navigator;
+ const MediaStreamTrack = window && window.MediaStreamTrack;
+ navigator.getUserMedia = function (constraints, onSuccess, onError) {
+ // Replace Firefox 44+'s deprecation warning with unprefixed version.
+ deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia');
+ navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);
+ };
+ if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {
+ const remap = function (obj, a, b) {
+ if (a in obj && !(b in obj)) {
+ obj[b] = obj[a];
+ delete obj[a];
+ }
+ };
+ const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
+ navigator.mediaDevices.getUserMedia = function (c) {
+ if (typeof c === 'object' && typeof c.audio === 'object') {
+ c = JSON.parse(JSON.stringify(c));
+ remap(c.audio, 'autoGainControl', 'mozAutoGainControl');
+ remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');
+ }
+ return nativeGetUserMedia(c);
+ };
+ if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {
+ const nativeGetSettings = MediaStreamTrack.prototype.getSettings;
+ MediaStreamTrack.prototype.getSettings = function () {
+ const obj = nativeGetSettings.apply(this, arguments);
+ remap(obj, 'mozAutoGainControl', 'autoGainControl');
+ remap(obj, 'mozNoiseSuppression', 'noiseSuppression');
+ return obj;
+ };
+ }
+ if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {
+ const nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;
+ MediaStreamTrack.prototype.applyConstraints = function (c) {
+ if (this.kind === 'audio' && typeof c === 'object') {
+ c = JSON.parse(JSON.stringify(c));
+ remap(c, 'autoGainControl', 'mozAutoGainControl');
+ remap(c, 'noiseSuppression', 'mozNoiseSuppression');
+ }
+ return nativeApplyConstraints.apply(this, [c]);
+ };
+ }
+ }
+}
+
+/*
+ * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree.
+ */
+/* eslint-env node */
+
+function shimGetDisplayMedia(window, preferredMediaSource) {
+ if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {
+ return;
+ }
+ if (!window.navigator.mediaDevices) {
+ return;
+ }
+ window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {
+ if (!(constraints && constraints.video)) {
+ const err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined');
+ err.name = 'NotFoundError';
+ // from https://heycam.github.io/webidl/#idl-DOMException-error-names
+ err.code = 8;
+ return Promise.reject(err);
+ }
+ if (constraints.video === true) {
+ constraints.video = {
+ mediaSource: preferredMediaSource
+ };
+ } else {
+ constraints.video.mediaSource = preferredMediaSource;
+ }
+ return window.navigator.mediaDevices.getUserMedia(constraints);
+ };
+}
+
+/*
+ * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree.
+ */
+/* eslint-env node */
+function shimOnTrack(window) {
+ if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {
+ Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {
+ get() {
+ return {
+ receiver: this.receiver
+ };
+ }
+ });
+ }
+}
+function shimPeerConnection(window, browserDetails) {
+ if (typeof window !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {
+ return; // probably media.peerconnection.enabled=false in about:config
+ }
+
+ if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {
+ // very basic support for old versions.
+ window.RTCPeerConnection = window.mozRTCPeerConnection;
+ }
+ if (browserDetails.version < 53) {
+ // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.
+ ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {
+ const nativeMethod = window.RTCPeerConnection.prototype[method];
+ const methodObj = {
+ [method]() {
+ arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);
+ return nativeMethod.apply(this, arguments);
+ }
+ };
+ window.RTCPeerConnection.prototype[method] = methodObj[method];
+ });
+ }
+ const modernStatsTypes = {
+ inboundrtp: 'inbound-rtp',
+ outboundrtp: 'outbound-rtp',
+ candidatepair: 'candidate-pair',
+ localcandidate: 'local-candidate',
+ remotecandidate: 'remote-candidate'
+ };
+ const nativeGetStats = window.RTCPeerConnection.prototype.getStats;
+ window.RTCPeerConnection.prototype.getStats = function getStats() {
+ const [selector, onSucc, onErr] = arguments;
+ return nativeGetStats.apply(this, [selector || null]).then(stats => {
+ if (browserDetails.version < 53 && !onSucc) {
+ // Shim only promise getStats with spec-hyphens in type names
+ // Leave callback version alone; misc old uses of forEach before Map
+ try {
+ stats.forEach(stat => {
+ stat.type = modernStatsTypes[stat.type] || stat.type;
+ });
+ } catch (e) {
+ if (e.name !== 'TypeError') {
+ throw e;
+ }
+ // Avoid TypeError: "type" is read-only, in old versions. 34-43ish
+ stats.forEach((stat, i) => {
+ stats.set(i, Object.assign({}, stat, {
+ type: modernStatsTypes[stat.type] || stat.type
+ }));
+ });
+ }
+ }
+ return stats;
+ }).then(onSucc, onErr);
+ };
+}
+function shimSenderGetStats(window) {
+ if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {
+ return;
+ }
+ if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {
+ return;
+ }
+ const origGetSenders = window.RTCPeerConnection.prototype.getSenders;
+ if (origGetSenders) {
+ window.RTCPeerConnection.prototype.getSenders = function getSenders() {
+ const senders = origGetSenders.apply(this, []);
+ senders.forEach(sender => sender._pc = this);
+ return senders;
+ };
+ }
+ const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
+ if (origAddTrack) {
+ window.RTCPeerConnection.prototype.addTrack = function addTrack() {
+ const sender = origAddTrack.apply(this, arguments);
+ sender._pc = this;
+ return sender;
+ };
+ }
+ window.RTCRtpSender.prototype.getStats = function getStats() {
+ return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());
+ };
+}
+function shimReceiverGetStats(window) {
+ if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {
+ return;
+ }
+ if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {
+ return;
+ }
+ const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;
+ if (origGetReceivers) {
+ window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {
+ const receivers = origGetReceivers.apply(this, []);
+ receivers.forEach(receiver => receiver._pc = this);
+ return receivers;
+ };
+ }
+ wrapPeerConnectionEvent(window, 'track', e => {
+ e.receiver._pc = e.srcElement;
+ return e;
+ });
+ window.RTCRtpReceiver.prototype.getStats = function getStats() {
+ return this._pc.getStats(this.track);
+ };
+}
+function shimRemoveStream(window) {
+ if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) {
+ return;
+ }
+ window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {
+ deprecated('removeStream', 'removeTrack');
+ this.getSenders().forEach(sender => {
+ if (sender.track && stream.getTracks().includes(sender.track)) {
+ this.removeTrack(sender);
+ }
+ });
+ };
+}
+function shimRTCDataChannel(window) {
+ // rename DataChannel to RTCDataChannel (native fix in FF60):
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851
+ if (window.DataChannel && !window.RTCDataChannel) {
+ window.RTCDataChannel = window.DataChannel;
+ }
+}
+function shimAddTransceiver(window) {
+ // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647
+ // Firefox ignores the init sendEncodings options passed to addTransceiver
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918
+ if (!(typeof window === 'object' && window.RTCPeerConnection)) {
+ return;
+ }
+ const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;
+ if (origAddTransceiver) {
+ window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {
+ this.setParametersPromises = [];
+ // WebIDL input coercion and validation
+ let sendEncodings = arguments[1] && arguments[1].sendEncodings;
+ if (sendEncodings === undefined) {
+ sendEncodings = [];
+ }
+ sendEncodings = [...sendEncodings];
+ const shouldPerformCheck = sendEncodings.length > 0;
+ if (shouldPerformCheck) {
+ // If sendEncodings params are provided, validate grammar
+ sendEncodings.forEach(encodingParam => {
+ if ('rid' in encodingParam) {
+ const ridRegex = /^[a-z0-9]{0,16}$/i;
+ if (!ridRegex.test(encodingParam.rid)) {
+ throw new TypeError('Invalid RID value provided.');
+ }
+ }
+ if ('scaleResolutionDownBy' in encodingParam) {
+ if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {
+ throw new RangeError('scale_resolution_down_by must be >= 1.0');
+ }
+ }
+ if ('maxFramerate' in encodingParam) {
+ if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {
+ throw new RangeError('max_framerate must be >= 0.0');
+ }
+ }
+ });
+ }
+ const transceiver = origAddTransceiver.apply(this, arguments);
+ if (shouldPerformCheck) {
+ // Check if the init options were applied. If not we do this in an
+ // asynchronous way and save the promise reference in a global object.
+ // This is an ugly hack, but at the same time is way more robust than
+ // checking the sender parameters before and after the createOffer
+ // Also note that after the createoffer we are not 100% sure that
+ // the params were asynchronously applied so we might miss the
+ // opportunity to recreate offer.
+ const {
+ sender
+ } = transceiver;
+ const params = sender.getParameters();
+ if (!('encodings' in params) ||
+ // Avoid being fooled by patched getParameters() below.
+ params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {
+ params.encodings = sendEncodings;
+ sender.sendEncodings = sendEncodings;
+ this.setParametersPromises.push(sender.setParameters(params).then(() => {
+ delete sender.sendEncodings;
+ }).catch(() => {
+ delete sender.sendEncodings;
+ }));
+ }
+ }
+ return transceiver;
+ };
+ }
+}
+function shimGetParameters(window) {
+ if (!(typeof window === 'object' && window.RTCRtpSender)) {
+ return;
+ }
+ const origGetParameters = window.RTCRtpSender.prototype.getParameters;
+ if (origGetParameters) {
+ window.RTCRtpSender.prototype.getParameters = function getParameters() {
+ const params = origGetParameters.apply(this, arguments);
+ if (!('encodings' in params)) {
+ params.encodings = [].concat(this.sendEncodings || [{}]);
+ }
+ return params;
+ };
+ }
+}
+function shimCreateOffer(window) {
+ // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647
+ // Firefox ignores the init sendEncodings options passed to addTransceiver
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918
+ if (!(typeof window === 'object' && window.RTCPeerConnection)) {
+ return;
+ }
+ const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;
+ window.RTCPeerConnection.prototype.createOffer = function createOffer() {
+ if (this.setParametersPromises && this.setParametersPromises.length) {
+ return Promise.all(this.setParametersPromises).then(() => {
+ return origCreateOffer.apply(this, arguments);
+ }).finally(() => {
+ this.setParametersPromises = [];
+ });
+ }
+ return origCreateOffer.apply(this, arguments);
+ };
+}
+function shimCreateAnswer(window) {
+ // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647
+ // Firefox ignores the init sendEncodings options passed to addTransceiver
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918
+ if (!(typeof window === 'object' && window.RTCPeerConnection)) {
+ return;
+ }
+ const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;
+ window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {
+ if (this.setParametersPromises && this.setParametersPromises.length) {
+ return Promise.all(this.setParametersPromises).then(() => {
+ return origCreateAnswer.apply(this, arguments);
+ }).finally(() => {
+ this.setParametersPromises = [];
+ });
+ }
+ return origCreateAnswer.apply(this, arguments);
+ };
+}
+
+var firefoxShim = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ shimAddTransceiver: shimAddTransceiver,
+ shimCreateAnswer: shimCreateAnswer,
+ shimCreateOffer: shimCreateOffer,
+ shimGetDisplayMedia: shimGetDisplayMedia,
+ shimGetParameters: shimGetParameters,
+ shimGetUserMedia: shimGetUserMedia$1,
+ shimOnTrack: shimOnTrack,
+ shimPeerConnection: shimPeerConnection,
+ shimRTCDataChannel: shimRTCDataChannel,
+ shimReceiverGetStats: shimReceiverGetStats,
+ shimRemoveStream: shimRemoveStream,
+ shimSenderGetStats: shimSenderGetStats
+});
+
+/*
+ * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree.
+ */
+function shimLocalStreamsAPI(window) {
+ if (typeof window !== 'object' || !window.RTCPeerConnection) {
+ return;
+ }
+ if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {
+ window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {
+ if (!this._localStreams) {
+ this._localStreams = [];
+ }
+ return this._localStreams;
+ };
+ }
+ if (!('addStream' in window.RTCPeerConnection.prototype)) {
+ const _addTrack = window.RTCPeerConnection.prototype.addTrack;
+ window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
+ if (!this._localStreams) {
+ this._localStreams = [];
+ }
+ if (!this._localStreams.includes(stream)) {
+ this._localStreams.push(stream);
+ }
+ // Try to emulate Chrome's behaviour of adding in audio-video order.
+ // Safari orders by track id.
+ stream.getAudioTracks().forEach(track => _addTrack.call(this, track, stream));
+ stream.getVideoTracks().forEach(track => _addTrack.call(this, track, stream));
+ };
+ window.RTCPeerConnection.prototype.addTrack = function addTrack(track) {
+ for (var _len = arguments.length, streams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ streams[_key - 1] = arguments[_key];
+ }
+ if (streams) {
+ streams.forEach(stream => {
+ if (!this._localStreams) {
+ this._localStreams = [stream];
+ } else if (!this._localStreams.includes(stream)) {
+ this._localStreams.push(stream);
+ }
+ });
+ }
+ return _addTrack.apply(this, arguments);
+ };
+ }
+ if (!('removeStream' in window.RTCPeerConnection.prototype)) {
+ window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {
+ if (!this._localStreams) {
+ this._localStreams = [];
+ }
+ const index = this._localStreams.indexOf(stream);
+ if (index === -1) {
+ return;
+ }
+ this._localStreams.splice(index, 1);
+ const tracks = stream.getTracks();
+ this.getSenders().forEach(sender => {
+ if (tracks.includes(sender.track)) {
+ this.removeTrack(sender);
+ }
+ });
+ };
+ }
+}
+function shimRemoteStreamsAPI(window) {
+ if (typeof window !== 'object' || !window.RTCPeerConnection) {
+ return;
+ }
+ if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {
+ window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {
+ return this._remoteStreams ? this._remoteStreams : [];
+ };
+ }
+ if (!('onaddstream' in window.RTCPeerConnection.prototype)) {
+ Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {
+ get() {
+ return this._onaddstream;
+ },
+ set(f) {
+ if (this._onaddstream) {
+ this.removeEventListener('addstream', this._onaddstream);
+ this.removeEventListener('track', this._onaddstreampoly);
+ }
+ this.addEventListener('addstream', this._onaddstream = f);
+ this.addEventListener('track', this._onaddstreampoly = e => {
+ e.streams.forEach(stream => {
+ if (!this._remoteStreams) {
+ this._remoteStreams = [];
+ }
+ if (this._remoteStreams.includes(stream)) {
+ return;
+ }
+ this._remoteStreams.push(stream);
+ const event = new Event('addstream');
+ event.stream = stream;
+ this.dispatchEvent(event);
+ });
+ });
+ }
+ });
+ const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;
+ window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {
+ const pc = this;
+ if (!this._onaddstreampoly) {
+ this.addEventListener('track', this._onaddstreampoly = function (e) {
+ e.streams.forEach(stream => {
+ if (!pc._remoteStreams) {
+ pc._remoteStreams = [];
+ }
+ if (pc._remoteStreams.indexOf(stream) >= 0) {
+ return;
+ }
+ pc._remoteStreams.push(stream);
+ const event = new Event('addstream');
+ event.stream = stream;
+ pc.dispatchEvent(event);
+ });
+ });
+ }
+ return origSetRemoteDescription.apply(pc, arguments);
+ };
+ }
+}
+function shimCallbacksAPI(window) {
+ if (typeof window !== 'object' || !window.RTCPeerConnection) {
+ return;
+ }
+ const prototype = window.RTCPeerConnection.prototype;
+ const origCreateOffer = prototype.createOffer;
+ const origCreateAnswer = prototype.createAnswer;
+ const setLocalDescription = prototype.setLocalDescription;
+ const setRemoteDescription = prototype.setRemoteDescription;
+ const addIceCandidate = prototype.addIceCandidate;
+ prototype.createOffer = function createOffer(successCallback, failureCallback) {
+ const options = arguments.length >= 2 ? arguments[2] : arguments[0];
+ const promise = origCreateOffer.apply(this, [options]);
+ if (!failureCallback) {
+ return promise;
+ }
+ promise.then(successCallback, failureCallback);
+ return Promise.resolve();
+ };
+ prototype.createAnswer = function createAnswer(successCallback, failureCallback) {
+ const options = arguments.length >= 2 ? arguments[2] : arguments[0];
+ const promise = origCreateAnswer.apply(this, [options]);
+ if (!failureCallback) {
+ return promise;
+ }
+ promise.then(successCallback, failureCallback);
+ return Promise.resolve();
+ };
+ let withCallback = function (description, successCallback, failureCallback) {
+ const promise = setLocalDescription.apply(this, [description]);
+ if (!failureCallback) {
+ return promise;
+ }
+ promise.then(successCallback, failureCallback);
+ return Promise.resolve();
+ };
+ prototype.setLocalDescription = withCallback;
+ withCallback = function (description, successCallback, failureCallback) {
+ const promise = setRemoteDescription.apply(this, [description]);
+ if (!failureCallback) {
+ return promise;
+ }
+ promise.then(successCallback, failureCallback);
+ return Promise.resolve();
+ };
+ prototype.setRemoteDescription = withCallback;
+ withCallback = function (candidate, successCallback, failureCallback) {
+ const promise = addIceCandidate.apply(this, [candidate]);
+ if (!failureCallback) {
+ return promise;
+ }
+ promise.then(successCallback, failureCallback);
+ return Promise.resolve();
+ };
+ prototype.addIceCandidate = withCallback;
+}
+function shimGetUserMedia(window) {
+ const navigator = window && window.navigator;
+ if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
+ // shim not needed in Safari 12.1
+ const mediaDevices = navigator.mediaDevices;
+ const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);
+ navigator.mediaDevices.getUserMedia = constraints => {
+ return _getUserMedia(shimConstraints(constraints));
+ };
+ }
+ if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
+ navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {
+ navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);
+ }.bind(navigator);
+ }
+}
+function shimConstraints(constraints) {
+ if (constraints && constraints.video !== undefined) {
+ return Object.assign({}, constraints, {
+ video: compactObject(constraints.video)
+ });
+ }
+ return constraints;
+}
+function shimRTCIceServerUrls(window) {
+ if (!window.RTCPeerConnection) {
+ return;
+ }
+ // migrate from non-spec RTCIceServer.url to RTCIceServer.urls
+ const OrigPeerConnection = window.RTCPeerConnection;
+ window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {
+ if (pcConfig && pcConfig.iceServers) {
+ const newIceServers = [];
+ for (let i = 0; i < pcConfig.iceServers.length; i++) {
+ let server = pcConfig.iceServers[i];
+ if (server.urls === undefined && server.url) {
+ deprecated('RTCIceServer.url', 'RTCIceServer.urls');
+ server = JSON.parse(JSON.stringify(server));
+ server.urls = server.url;
+ delete server.url;
+ newIceServers.push(server);
+ } else {
+ newIceServers.push(pcConfig.iceServers[i]);
+ }
+ }
+ pcConfig.iceServers = newIceServers;
+ }
+ return new OrigPeerConnection(pcConfig, pcConstraints);
+ };
+ window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;
+ // wrap static methods. Currently just generateCertificate.
+ if ('generateCertificate' in OrigPeerConnection) {
+ Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {
+ get() {
+ return OrigPeerConnection.generateCertificate;
+ }
+ });
+ }
+}
+function shimTrackEventTransceiver(window) {
+ // Add event.transceiver member over deprecated event.receiver
+ if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {
+ Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {
+ get() {
+ return {
+ receiver: this.receiver
+ };
+ }
+ });
+ }
+}
+function shimCreateOfferLegacy(window) {
+ const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;
+ window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {
+ if (offerOptions) {
+ if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {
+ // support bit values
+ offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;
+ }
+ const audioTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'audio');
+ if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {
+ if (audioTransceiver.direction === 'sendrecv') {
+ if (audioTransceiver.setDirection) {
+ audioTransceiver.setDirection('sendonly');
+ } else {
+ audioTransceiver.direction = 'sendonly';
+ }
+ } else if (audioTransceiver.direction === 'recvonly') {
+ if (audioTransceiver.setDirection) {
+ audioTransceiver.setDirection('inactive');
+ } else {
+ audioTransceiver.direction = 'inactive';
+ }
+ }
+ } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) {
+ this.addTransceiver('audio', {
+ direction: 'recvonly'
+ });
+ }
+ if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {
+ // support bit values
+ offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;
+ }
+ const videoTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'video');
+ if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {
+ if (videoTransceiver.direction === 'sendrecv') {
+ if (videoTransceiver.setDirection) {
+ videoTransceiver.setDirection('sendonly');
+ } else {
+ videoTransceiver.direction = 'sendonly';
+ }
+ } else if (videoTransceiver.direction === 'recvonly') {
+ if (videoTransceiver.setDirection) {
+ videoTransceiver.setDirection('inactive');
+ } else {
+ videoTransceiver.direction = 'inactive';
+ }
+ }
+ } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) {
+ this.addTransceiver('video', {
+ direction: 'recvonly'
+ });
+ }
+ }
+ return origCreateOffer.apply(this, arguments);
+ };
+}
+function shimAudioContext(window) {
+ if (typeof window !== 'object' || window.AudioContext) {
+ return;
+ }
+ window.AudioContext = window.webkitAudioContext;
+}
+
+var safariShim = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ shimAudioContext: shimAudioContext,
+ shimCallbacksAPI: shimCallbacksAPI,
+ shimConstraints: shimConstraints,
+ shimCreateOfferLegacy: shimCreateOfferLegacy,
+ shimGetUserMedia: shimGetUserMedia,
+ shimLocalStreamsAPI: shimLocalStreamsAPI,
+ shimRTCIceServerUrls: shimRTCIceServerUrls,
+ shimRemoteStreamsAPI: shimRemoteStreamsAPI,
+ shimTrackEventTransceiver: shimTrackEventTransceiver
+});
+
+var sdp$1 = {exports: {}};
+
+/* eslint-env node */
+(function (module) {
+
+ // SDP helpers.
+ const SDPUtils = {};
+
+ // Generate an alphanumeric identifier for cname or mids.
+ // TODO: use UUIDs instead? https://gist.github.com/jed/982883
+ SDPUtils.generateIdentifier = function () {
+ return Math.random().toString(36).substring(2, 12);
+ };
+
+ // The RTCP CNAME used by all peerconnections from the same JS.
+ SDPUtils.localCName = SDPUtils.generateIdentifier();
+
+ // Splits SDP into lines, dealing with both CRLF and LF.
+ SDPUtils.splitLines = function (blob) {
+ return blob.trim().split('\n').map(line => line.trim());
+ };
+ // Splits SDP into sessionpart and mediasections. Ensures CRLF.
+ SDPUtils.splitSections = function (blob) {
+ const parts = blob.split('\nm=');
+ return parts.map((part, index) => (index > 0 ? 'm=' + part : part).trim() + '\r\n');
+ };
+
+ // Returns the session description.
+ SDPUtils.getDescription = function (blob) {
+ const sections = SDPUtils.splitSections(blob);
+ return sections && sections[0];
+ };
+
+ // Returns the individual media sections.
+ SDPUtils.getMediaSections = function (blob) {
+ const sections = SDPUtils.splitSections(blob);
+ sections.shift();
+ return sections;
+ };
+
+ // Returns lines that start with a certain prefix.
+ SDPUtils.matchPrefix = function (blob, prefix) {
+ return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);
+ };
+
+ // Parses an ICE candidate line. Sample input:
+ // candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8
+ // rport 55996"
+ // Input can be prefixed with a=.
+ SDPUtils.parseCandidate = function (line) {
+ let parts;
+ // Parse both variants.
+ if (line.indexOf('a=candidate:') === 0) {
+ parts = line.substring(12).split(' ');
+ } else {
+ parts = line.substring(10).split(' ');
+ }
+ const candidate = {
+ foundation: parts[0],
+ component: {
+ 1: 'rtp',
+ 2: 'rtcp'
+ }[parts[1]] || parts[1],
+ protocol: parts[2].toLowerCase(),
+ priority: parseInt(parts[3], 10),
+ ip: parts[4],
+ address: parts[4],
+ // address is an alias for ip.
+ port: parseInt(parts[5], 10),
+ // skip parts[6] == 'typ'
+ type: parts[7]
+ };
+ for (let i = 8; i < parts.length; i += 2) {
+ switch (parts[i]) {
+ case 'raddr':
+ candidate.relatedAddress = parts[i + 1];
+ break;
+ case 'rport':
+ candidate.relatedPort = parseInt(parts[i + 1], 10);
+ break;
+ case 'tcptype':
+ candidate.tcpType = parts[i + 1];
+ break;
+ case 'ufrag':
+ candidate.ufrag = parts[i + 1]; // for backward compatibility.
+ candidate.usernameFragment = parts[i + 1];
+ break;
+ default:
+ // extension handling, in particular ufrag. Don't overwrite.
+ if (candidate[parts[i]] === undefined) {
+ candidate[parts[i]] = parts[i + 1];
+ }
+ break;
+ }
+ }
+ return candidate;
+ };
+
+ // Translates a candidate object into SDP candidate attribute.
+ // This does not include the a= prefix!
+ SDPUtils.writeCandidate = function (candidate) {
+ const sdp = [];
+ sdp.push(candidate.foundation);
+ const component = candidate.component;
+ if (component === 'rtp') {
+ sdp.push(1);
+ } else if (component === 'rtcp') {
+ sdp.push(2);
+ } else {
+ sdp.push(component);
+ }
+ sdp.push(candidate.protocol.toUpperCase());
+ sdp.push(candidate.priority);
+ sdp.push(candidate.address || candidate.ip);
+ sdp.push(candidate.port);
+ const type = candidate.type;
+ sdp.push('typ');
+ sdp.push(type);
+ if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort) {
+ sdp.push('raddr');
+ sdp.push(candidate.relatedAddress);
+ sdp.push('rport');
+ sdp.push(candidate.relatedPort);
+ }
+ if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {
+ sdp.push('tcptype');
+ sdp.push(candidate.tcpType);
+ }
+ if (candidate.usernameFragment || candidate.ufrag) {
+ sdp.push('ufrag');
+ sdp.push(candidate.usernameFragment || candidate.ufrag);
+ }
+ return 'candidate:' + sdp.join(' ');
+ };
+
+ // Parses an ice-options line, returns an array of option tags.
+ // Sample input:
+ // a=ice-options:foo bar
+ SDPUtils.parseIceOptions = function (line) {
+ return line.substring(14).split(' ');
+ };
+
+ // Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:
+ // a=rtpmap:111 opus/48000/2
+ SDPUtils.parseRtpMap = function (line) {
+ let parts = line.substring(9).split(' ');
+ const parsed = {
+ payloadType: parseInt(parts.shift(), 10) // was: id
+ };
+
+ parts = parts[0].split('/');
+ parsed.name = parts[0];
+ parsed.clockRate = parseInt(parts[1], 10); // was: clockrate
+ parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;
+ // legacy alias, got renamed back to channels in ORTC.
+ parsed.numChannels = parsed.channels;
+ return parsed;
+ };
+
+ // Generates a rtpmap line from RTCRtpCodecCapability or
+ // RTCRtpCodecParameters.
+ SDPUtils.writeRtpMap = function (codec) {
+ let pt = codec.payloadType;
+ if (codec.preferredPayloadType !== undefined) {
+ pt = codec.preferredPayloadType;
+ }
+ const channels = codec.channels || codec.numChannels || 1;
+ return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\r\n';
+ };
+
+ // Parses a extmap line (headerextension from RFC 5285). Sample input:
+ // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
+ // a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset
+ SDPUtils.parseExtmap = function (line) {
+ const parts = line.substring(9).split(' ');
+ return {
+ id: parseInt(parts[0], 10),
+ direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',
+ uri: parts[1],
+ attributes: parts.slice(2).join(' ')
+ };
+ };
+
+ // Generates an extmap line from RTCRtpHeaderExtensionParameters or
+ // RTCRtpHeaderExtension.
+ SDPUtils.writeExtmap = function (headerExtension) {
+ return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + (headerExtension.attributes ? ' ' + headerExtension.attributes : '') + '\r\n';
+ };
+
+ // Parses a fmtp line, returns dictionary. Sample input:
+ // a=fmtp:96 vbr=on;cng=on
+ // Also deals with vbr=on; cng=on
+ SDPUtils.parseFmtp = function (line) {
+ const parsed = {};
+ let kv;
+ const parts = line.substring(line.indexOf(' ') + 1).split(';');
+ for (let j = 0; j < parts.length; j++) {
+ kv = parts[j].trim().split('=');
+ parsed[kv[0].trim()] = kv[1];
+ }
+ return parsed;
+ };
+
+ // Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.
+ SDPUtils.writeFmtp = function (codec) {
+ let line = '';
+ let pt = codec.payloadType;
+ if (codec.preferredPayloadType !== undefined) {
+ pt = codec.preferredPayloadType;
+ }
+ if (codec.parameters && Object.keys(codec.parameters).length) {
+ const params = [];
+ Object.keys(codec.parameters).forEach(param => {
+ if (codec.parameters[param] !== undefined) {
+ params.push(param + '=' + codec.parameters[param]);
+ } else {
+ params.push(param);
+ }
+ });
+ line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n';
+ }
+ return line;
+ };
+
+ // Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:
+ // a=rtcp-fb:98 nack rpsi
+ SDPUtils.parseRtcpFb = function (line) {
+ const parts = line.substring(line.indexOf(' ') + 1).split(' ');
+ return {
+ type: parts.shift(),
+ parameter: parts.join(' ')
+ };
+ };
+
+ // Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.
+ SDPUtils.writeRtcpFb = function (codec) {
+ let lines = '';
+ let pt = codec.payloadType;
+ if (codec.preferredPayloadType !== undefined) {
+ pt = codec.preferredPayloadType;
+ }
+ if (codec.rtcpFeedback && codec.rtcpFeedback.length) {
+ // FIXME: special handling for trr-int?
+ codec.rtcpFeedback.forEach(fb => {
+ lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\r\n';
+ });
+ }
+ return lines;
+ };
+
+ // Parses a RFC 5576 ssrc media attribute. Sample input:
+ // a=ssrc:3735928559 cname:something
+ SDPUtils.parseSsrcMedia = function (line) {
+ const sp = line.indexOf(' ');
+ const parts = {
+ ssrc: parseInt(line.substring(7, sp), 10)
+ };
+ const colon = line.indexOf(':', sp);
+ if (colon > -1) {
+ parts.attribute = line.substring(sp + 1, colon);
+ parts.value = line.substring(colon + 1);
+ } else {
+ parts.attribute = line.substring(sp + 1);
+ }
+ return parts;
+ };
+
+ // Parse a ssrc-group line (see RFC 5576). Sample input:
+ // a=ssrc-group:semantics 12 34
+ SDPUtils.parseSsrcGroup = function (line) {
+ const parts = line.substring(13).split(' ');
+ return {
+ semantics: parts.shift(),
+ ssrcs: parts.map(ssrc => parseInt(ssrc, 10))
+ };
+ };
+
+ // Extracts the MID (RFC 5888) from a media section.
+ // Returns the MID or undefined if no mid line was found.
+ SDPUtils.getMid = function (mediaSection) {
+ const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];
+ if (mid) {
+ return mid.substring(6);
+ }
+ };
+
+ // Parses a fingerprint line for DTLS-SRTP.
+ SDPUtils.parseFingerprint = function (line) {
+ const parts = line.substring(14).split(' ');
+ return {
+ algorithm: parts[0].toLowerCase(),
+ // algorithm is case-sensitive in Edge.
+ value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572.
+ };
+ };
+
+ // Extracts DTLS parameters from SDP media section or sessionpart.
+ // FIXME: for consistency with other functions this should only
+ // get the fingerprint line as input. See also getIceParameters.
+ SDPUtils.getDtlsParameters = function (mediaSection, sessionpart) {
+ const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');
+ // Note: a=setup line is ignored since we use the 'auto' role in Edge.
+ return {
+ role: 'auto',
+ fingerprints: lines.map(SDPUtils.parseFingerprint)
+ };
+ };
+
+ // Serializes DTLS parameters to SDP.
+ SDPUtils.writeDtlsParameters = function (params, setupType) {
+ let sdp = 'a=setup:' + setupType + '\r\n';
+ params.fingerprints.forEach(fp => {
+ sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n';
+ });
+ return sdp;
+ };
+
+ // Parses a=crypto lines into
+ // https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members
+ SDPUtils.parseCryptoLine = function (line) {
+ const parts = line.substring(9).split(' ');
+ return {
+ tag: parseInt(parts[0], 10),
+ cryptoSuite: parts[1],
+ keyParams: parts[2],
+ sessionParams: parts.slice(3)
+ };
+ };
+ SDPUtils.writeCryptoLine = function (parameters) {
+ return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (typeof parameters.keyParams === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\r\n';
+ };
+
+ // Parses the crypto key parameters into
+ // https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*
+ SDPUtils.parseCryptoKeyParams = function (keyParams) {
+ if (keyParams.indexOf('inline:') !== 0) {
+ return null;
+ }
+ const parts = keyParams.substring(7).split('|');
+ return {
+ keyMethod: 'inline',
+ keySalt: parts[0],
+ lifeTime: parts[1],
+ mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,
+ mkiLength: parts[2] ? parts[2].split(':')[1] : undefined
+ };
+ };
+ SDPUtils.writeCryptoKeyParams = function (keyParams) {
+ return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : '');
+ };
+
+ // Extracts all SDES parameters.
+ SDPUtils.getCryptoParameters = function (mediaSection, sessionpart) {
+ const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:');
+ return lines.map(SDPUtils.parseCryptoLine);
+ };
+
+ // Parses ICE information from SDP media section or sessionpart.
+ // FIXME: for consistency with other functions this should only
+ // get the ice-ufrag and ice-pwd lines as input.
+ SDPUtils.getIceParameters = function (mediaSection, sessionpart) {
+ const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0];
+ const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0];
+ if (!(ufrag && pwd)) {
+ return null;
+ }
+ return {
+ usernameFragment: ufrag.substring(12),
+ password: pwd.substring(10)
+ };
+ };
+
+ // Serializes ICE parameters to SDP.
+ SDPUtils.writeIceParameters = function (params) {
+ let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + 'a=ice-pwd:' + params.password + '\r\n';
+ if (params.iceLite) {
+ sdp += 'a=ice-lite\r\n';
+ }
+ return sdp;
+ };
+
+ // Parses the SDP media section and returns RTCRtpParameters.
+ SDPUtils.parseRtpParameters = function (mediaSection) {
+ const description = {
+ codecs: [],
+ headerExtensions: [],
+ fecMechanisms: [],
+ rtcp: []
+ };
+ const lines = SDPUtils.splitLines(mediaSection);
+ const mline = lines[0].split(' ');
+ description.profile = mline[2];
+ for (let i = 3; i < mline.length; i++) {
+ // find all codecs from mline[3..]
+ const pt = mline[i];
+ const rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0];
+ if (rtpmapline) {
+ const codec = SDPUtils.parseRtpMap(rtpmapline);
+ const fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' ');
+ // Only the first a=fmtp: is considered.
+ codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};
+ codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb);
+ description.codecs.push(codec);
+ // parse FEC mechanisms from rtpmap lines.
+ switch (codec.name.toUpperCase()) {
+ case 'RED':
+ case 'ULPFEC':
+ description.fecMechanisms.push(codec.name.toUpperCase());
+ break;
+ }
+ }
+ }
+ SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {
+ description.headerExtensions.push(SDPUtils.parseExtmap(line));
+ });
+ const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ').map(SDPUtils.parseRtcpFb);
+ description.codecs.forEach(codec => {
+ wildcardRtcpFb.forEach(fb => {
+ const duplicate = codec.rtcpFeedback.find(existingFeedback => {
+ return existingFeedback.type === fb.type && existingFeedback.parameter === fb.parameter;
+ });
+ if (!duplicate) {
+ codec.rtcpFeedback.push(fb);
+ }
+ });
+ });
+ // FIXME: parse rtcp.
+ return description;
+ };
+
+ // Generates parts of the SDP media section describing the capabilities /
+ // parameters.
+ SDPUtils.writeRtpDescription = function (kind, caps) {
+ let sdp = '';
+
+ // Build the mline.
+ sdp += 'm=' + kind + ' ';
+ sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.
+ sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' ';
+ sdp += caps.codecs.map(codec => {
+ if (codec.preferredPayloadType !== undefined) {
+ return codec.preferredPayloadType;
+ }
+ return codec.payloadType;
+ }).join(' ') + '\r\n';
+ sdp += 'c=IN IP4 0.0.0.0\r\n';
+ sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n';
+
+ // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.
+ caps.codecs.forEach(codec => {
+ sdp += SDPUtils.writeRtpMap(codec);
+ sdp += SDPUtils.writeFmtp(codec);
+ sdp += SDPUtils.writeRtcpFb(codec);
+ });
+ let maxptime = 0;
+ caps.codecs.forEach(codec => {
+ if (codec.maxptime > maxptime) {
+ maxptime = codec.maxptime;
+ }
+ });
+ if (maxptime > 0) {
+ sdp += 'a=maxptime:' + maxptime + '\r\n';
+ }
+ if (caps.headerExtensions) {
+ caps.headerExtensions.forEach(extension => {
+ sdp += SDPUtils.writeExtmap(extension);
+ });
+ }
+ // FIXME: write fecMechanisms.
+ return sdp;
+ };
+
+ // Parses the SDP media section and returns an array of
+ // RTCRtpEncodingParameters.
+ SDPUtils.parseRtpEncodingParameters = function (mediaSection) {
+ const encodingParameters = [];
+ const description = SDPUtils.parseRtpParameters(mediaSection);
+ const hasRed = description.fecMechanisms.indexOf('RED') !== -1;
+ const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;
+
+ // filter a=ssrc:... cname:, ignore PlanB-msid
+ const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(parts => parts.attribute === 'cname');
+ const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;
+ let secondarySsrc;
+ const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(line => {
+ const parts = line.substring(17).split(' ');
+ return parts.map(part => parseInt(part, 10));
+ });
+ if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {
+ secondarySsrc = flows[0][1];
+ }
+ description.codecs.forEach(codec => {
+ if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {
+ let encParam = {
+ ssrc: primarySsrc,
+ codecPayloadType: parseInt(codec.parameters.apt, 10)
+ };
+ if (primarySsrc && secondarySsrc) {
+ encParam.rtx = {
+ ssrc: secondarySsrc
+ };
+ }
+ encodingParameters.push(encParam);
+ if (hasRed) {
+ encParam = JSON.parse(JSON.stringify(encParam));
+ encParam.fec = {
+ ssrc: primarySsrc,
+ mechanism: hasUlpfec ? 'red+ulpfec' : 'red'
+ };
+ encodingParameters.push(encParam);
+ }
+ }
+ });
+ if (encodingParameters.length === 0 && primarySsrc) {
+ encodingParameters.push({
+ ssrc: primarySsrc
+ });
+ }
+
+ // we support both b=AS and b=TIAS but interpret AS as TIAS.
+ let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');
+ if (bandwidth.length) {
+ if (bandwidth[0].indexOf('b=TIAS:') === 0) {
+ bandwidth = parseInt(bandwidth[0].substring(7), 10);
+ } else if (bandwidth[0].indexOf('b=AS:') === 0) {
+ // use formula from JSEP to convert b=AS to TIAS value.
+ bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95 - 50 * 40 * 8;
+ } else {
+ bandwidth = undefined;
+ }
+ encodingParameters.forEach(params => {
+ params.maxBitrate = bandwidth;
+ });
+ }
+ return encodingParameters;
+ };
+
+ // parses http://draft.ortc.org/#rtcrtcpparameters*
+ SDPUtils.parseRtcpParameters = function (mediaSection) {
+ const rtcpParameters = {};
+
+ // Gets the first SSRC. Note that with RTX there might be multiple
+ // SSRCs.
+ const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(obj => obj.attribute === 'cname')[0];
+ if (remoteSsrc) {
+ rtcpParameters.cname = remoteSsrc.value;
+ rtcpParameters.ssrc = remoteSsrc.ssrc;
+ }
+
+ // Edge uses the compound attribute instead of reducedSize
+ // compound is !reducedSize
+ const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');
+ rtcpParameters.reducedSize = rsize.length > 0;
+ rtcpParameters.compound = rsize.length === 0;
+
+ // parses the rtcp-mux attrіbute.
+ // Note that Edge does not support unmuxed RTCP.
+ const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');
+ rtcpParameters.mux = mux.length > 0;
+ return rtcpParameters;
+ };
+ SDPUtils.writeRtcpParameters = function (rtcpParameters) {
+ let sdp = '';
+ if (rtcpParameters.reducedSize) {
+ sdp += 'a=rtcp-rsize\r\n';
+ }
+ if (rtcpParameters.mux) {
+ sdp += 'a=rtcp-mux\r\n';
+ }
+ if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {
+ sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\r\n';
+ }
+ return sdp;
+ };
+
+ // parses either a=msid: or a=ssrc:... msid lines and returns
+ // the id of the MediaStream and MediaStreamTrack.
+ SDPUtils.parseMsid = function (mediaSection) {
+ let parts;
+ const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');
+ if (spec.length === 1) {
+ parts = spec[0].substring(7).split(' ');
+ return {
+ stream: parts[0],
+ track: parts[1]
+ };
+ }
+ const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(msidParts => msidParts.attribute === 'msid');
+ if (planB.length > 0) {
+ parts = planB[0].value.split(' ');
+ return {
+ stream: parts[0],
+ track: parts[1]
+ };
+ }
+ };
+
+ // SCTP
+ // parses draft-ietf-mmusic-sctp-sdp-26 first and falls back
+ // to draft-ietf-mmusic-sctp-sdp-05
+ SDPUtils.parseSctpDescription = function (mediaSection) {
+ const mline = SDPUtils.parseMLine(mediaSection);
+ const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');
+ let maxMessageSize;
+ if (maxSizeLine.length > 0) {
+ maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);
+ }
+ if (isNaN(maxMessageSize)) {
+ maxMessageSize = 65536;
+ }
+ const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');
+ if (sctpPort.length > 0) {
+ return {
+ port: parseInt(sctpPort[0].substring(12), 10),
+ protocol: mline.fmt,
+ maxMessageSize
+ };
+ }
+ const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');
+ if (sctpMapLines.length > 0) {
+ const parts = sctpMapLines[0].substring(10).split(' ');
+ return {
+ port: parseInt(parts[0], 10),
+ protocol: parts[1],
+ maxMessageSize
+ };
+ }
+ };
+
+ // SCTP
+ // outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers
+ // support by now receiving in this format, unless we originally parsed
+ // as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line
+ // protocol of DTLS/SCTP -- without UDP/ or TCP/)
+ SDPUtils.writeSctpDescription = function (media, sctp) {
+ let output = [];
+ if (media.protocol !== 'DTLS/SCTP') {
+ output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctp-port:' + sctp.port + '\r\n'];
+ } else {
+ output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\r\n', 'c=IN IP4 0.0.0.0\r\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\r\n'];
+ }
+ if (sctp.maxMessageSize !== undefined) {
+ output.push('a=max-message-size:' + sctp.maxMessageSize + '\r\n');
+ }
+ return output.join('');
+ };
+
+ // Generate a session ID for SDP.
+ // https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1
+ // recommends using a cryptographically random +ve 64-bit value
+ // but right now this should be acceptable and within the right range
+ SDPUtils.generateSessionId = function () {
+ return Math.random().toString().substr(2, 22);
+ };
+
+ // Write boiler plate for start of SDP
+ // sessId argument is optional - if not supplied it will
+ // be generated randomly
+ // sessVersion is optional and defaults to 2
+ // sessUser is optional and defaults to 'thisisadapterortc'
+ SDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) {
+ let sessionId;
+ const version = sessVer !== undefined ? sessVer : 2;
+ if (sessId) {
+ sessionId = sessId;
+ } else {
+ sessionId = SDPUtils.generateSessionId();
+ }
+ const user = sessUser || 'thisisadapterortc';
+ // FIXME: sess-id should be an NTP timestamp.
+ return 'v=0\r\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\r\n' + 's=-\r\n' + 't=0 0\r\n';
+ };
+
+ // Gets the direction from the mediaSection or the sessionpart.
+ SDPUtils.getDirection = function (mediaSection, sessionpart) {
+ // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.
+ const lines = SDPUtils.splitLines(mediaSection);
+ for (let i = 0; i < lines.length; i++) {
+ switch (lines[i]) {
+ case 'a=sendrecv':
+ case 'a=sendonly':
+ case 'a=recvonly':
+ case 'a=inactive':
+ return lines[i].substring(2);
+ // FIXME: What should happen here?
+ }
+ }
+
+ if (sessionpart) {
+ return SDPUtils.getDirection(sessionpart);
+ }
+ return 'sendrecv';
+ };
+ SDPUtils.getKind = function (mediaSection) {
+ const lines = SDPUtils.splitLines(mediaSection);
+ const mline = lines[0].split(' ');
+ return mline[0].substring(2);
+ };
+ SDPUtils.isRejected = function (mediaSection) {
+ return mediaSection.split(' ', 2)[1] === '0';
+ };
+ SDPUtils.parseMLine = function (mediaSection) {
+ const lines = SDPUtils.splitLines(mediaSection);
+ const parts = lines[0].substring(2).split(' ');
+ return {
+ kind: parts[0],
+ port: parseInt(parts[1], 10),
+ protocol: parts[2],
+ fmt: parts.slice(3).join(' ')
+ };
+ };
+ SDPUtils.parseOLine = function (mediaSection) {
+ const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];
+ const parts = line.substring(2).split(' ');
+ return {
+ username: parts[0],
+ sessionId: parts[1],
+ sessionVersion: parseInt(parts[2], 10),
+ netType: parts[3],
+ addressType: parts[4],
+ address: parts[5]
+ };
+ };
+
+ // a very naive interpretation of a valid SDP.
+ SDPUtils.isValidSDP = function (blob) {
+ if (typeof blob !== 'string' || blob.length === 0) {
+ return false;
+ }
+ const lines = SDPUtils.splitLines(blob);
+ for (let i = 0; i < lines.length; i++) {
+ if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {
+ return false;
+ }
+ // TODO: check the modifier a bit more.
+ }
+
+ return true;
+ };
+
+ // Expose public methods.
+ {
+ module.exports = SDPUtils;
+ }
+})(sdp$1);
+var sdpExports = sdp$1.exports;
+var SDPUtils = /*@__PURE__*/getDefaultExportFromCjs(sdpExports);
+
+var sdp = /*#__PURE__*/_mergeNamespaces({
+ __proto__: null,
+ default: SDPUtils
+}, [sdpExports]);
+
+/*
+ * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree.
+ */
+/* eslint-env node */
+function shimRTCIceCandidate(window) {
+ // foundation is arbitrarily chosen as an indicator for full support for
+ // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface
+ if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) {
+ return;
+ }
+ const NativeRTCIceCandidate = window.RTCIceCandidate;
+ window.RTCIceCandidate = function RTCIceCandidate(args) {
+ // Remove the a= which shouldn't be part of the candidate string.
+ if (typeof args === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) {
+ args = JSON.parse(JSON.stringify(args));
+ args.candidate = args.candidate.substring(2);
+ }
+ if (args.candidate && args.candidate.length) {
+ // Augment the native candidate with the parsed fields.
+ const nativeCandidate = new NativeRTCIceCandidate(args);
+ const parsedCandidate = SDPUtils.parseCandidate(args.candidate);
+ for (const key in parsedCandidate) {
+ if (!(key in nativeCandidate)) {
+ Object.defineProperty(nativeCandidate, key, {
+ value: parsedCandidate[key]
+ });
+ }
+ }
+
+ // Override serializer to not serialize the extra attributes.
+ nativeCandidate.toJSON = function toJSON() {
+ return {
+ candidate: nativeCandidate.candidate,
+ sdpMid: nativeCandidate.sdpMid,
+ sdpMLineIndex: nativeCandidate.sdpMLineIndex,
+ usernameFragment: nativeCandidate.usernameFragment
+ };
+ };
+ return nativeCandidate;
+ }
+ return new NativeRTCIceCandidate(args);
+ };
+ window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;
+
+ // Hook up the augmented candidate in onicecandidate and
+ // addEventListener('icecandidate', ...)
+ wrapPeerConnectionEvent(window, 'icecandidate', e => {
+ if (e.candidate) {
+ Object.defineProperty(e, 'candidate', {
+ value: new window.RTCIceCandidate(e.candidate),
+ writable: 'false'
+ });
+ }
+ return e;
+ });
+}
+function shimRTCIceCandidateRelayProtocol(window) {
+ if (!window.RTCIceCandidate || window.RTCIceCandidate && 'relayProtocol' in window.RTCIceCandidate.prototype) {
+ return;
+ }
+
+ // Hook up the augmented candidate in onicecandidate and
+ // addEventListener('icecandidate', ...)
+ wrapPeerConnectionEvent(window, 'icecandidate', e => {
+ if (e.candidate) {
+ const parsedCandidate = SDPUtils.parseCandidate(e.candidate.candidate);
+ if (parsedCandidate.type === 'relay') {
+ // This is a libwebrtc-specific mapping of local type preference
+ // to relayProtocol.
+ e.candidate.relayProtocol = {
+ 0: 'tls',
+ 1: 'tcp',
+ 2: 'udp'
+ }[parsedCandidate.priority >> 24];
+ }
+ }
+ return e;
+ });
+}
+function shimMaxMessageSize(window, browserDetails) {
+ if (!window.RTCPeerConnection) {
+ return;
+ }
+ if (!('sctp' in window.RTCPeerConnection.prototype)) {
+ Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {
+ get() {
+ return typeof this._sctp === 'undefined' ? null : this._sctp;
+ }
+ });
+ }
+ const sctpInDescription = function (description) {
+ if (!description || !description.sdp) {
+ return false;
+ }
+ const sections = SDPUtils.splitSections(description.sdp);
+ sections.shift();
+ return sections.some(mediaSection => {
+ const mLine = SDPUtils.parseMLine(mediaSection);
+ return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1;
+ });
+ };
+ const getRemoteFirefoxVersion = function (description) {
+ // TODO: Is there a better solution for detecting Firefox?
+ const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);
+ if (match === null || match.length < 2) {
+ return -1;
+ }
+ const version = parseInt(match[1], 10);
+ // Test for NaN (yes, this is ugly)
+ return version !== version ? -1 : version;
+ };
+ const getCanSendMaxMessageSize = function (remoteIsFirefox) {
+ // Every implementation we know can send at least 64 KiB.
+ // Note: Although Chrome is technically able to send up to 256 KiB, the
+ // data does not reach the other peer reliably.
+ // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419
+ let canSendMaxMessageSize = 65536;
+ if (browserDetails.browser === 'firefox') {
+ if (browserDetails.version < 57) {
+ if (remoteIsFirefox === -1) {
+ // FF < 57 will send in 16 KiB chunks using the deprecated PPID
+ // fragmentation.
+ canSendMaxMessageSize = 16384;
+ } else {
+ // However, other FF (and RAWRTC) can reassemble PPID-fragmented
+ // messages. Thus, supporting ~2 GiB when sending.
+ canSendMaxMessageSize = 2147483637;
+ }
+ } else if (browserDetails.version < 60) {
+ // Currently, all FF >= 57 will reset the remote maximum message size
+ // to the default value when a data channel is created at a later
+ // stage. :(
+ // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831
+ canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;
+ } else {
+ // FF >= 60 supports sending ~2 GiB
+ canSendMaxMessageSize = 2147483637;
+ }
+ }
+ return canSendMaxMessageSize;
+ };
+ const getMaxMessageSize = function (description, remoteIsFirefox) {
+ // Note: 65536 bytes is the default value from the SDP spec. Also,
+ // every implementation we know supports receiving 65536 bytes.
+ let maxMessageSize = 65536;
+
+ // FF 57 has a slightly incorrect default remote max message size, so
+ // we need to adjust it here to avoid a failure when sending.
+ // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697
+ if (browserDetails.browser === 'firefox' && browserDetails.version === 57) {
+ maxMessageSize = 65535;
+ }
+ const match = SDPUtils.matchPrefix(description.sdp, 'a=max-message-size:');
+ if (match.length > 0) {
+ maxMessageSize = parseInt(match[0].substring(19), 10);
+ } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) {
+ // If the maximum message size is not present in the remote SDP and
+ // both local and remote are Firefox, the remote peer can receive
+ // ~2 GiB.
+ maxMessageSize = 2147483637;
+ }
+ return maxMessageSize;
+ };
+ const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;
+ window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {
+ this._sctp = null;
+ // Chrome decided to not expose .sctp in plan-b mode.
+ // As usual, adapter.js has to do an 'ugly worakaround'
+ // to cover up the mess.
+ if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {
+ const {
+ sdpSemantics
+ } = this.getConfiguration();
+ if (sdpSemantics === 'plan-b') {
+ Object.defineProperty(this, 'sctp', {
+ get() {
+ return typeof this._sctp === 'undefined' ? null : this._sctp;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ }
+ }
+ if (sctpInDescription(arguments[0])) {
+ // Check if the remote is FF.
+ const isFirefox = getRemoteFirefoxVersion(arguments[0]);
+
+ // Get the maximum message size the local peer is capable of sending
+ const canSendMMS = getCanSendMaxMessageSize(isFirefox);
+
+ // Get the maximum message size of the remote peer.
+ const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);
+
+ // Determine final maximum message size
+ let maxMessageSize;
+ if (canSendMMS === 0 && remoteMMS === 0) {
+ maxMessageSize = Number.POSITIVE_INFINITY;
+ } else if (canSendMMS === 0 || remoteMMS === 0) {
+ maxMessageSize = Math.max(canSendMMS, remoteMMS);
+ } else {
+ maxMessageSize = Math.min(canSendMMS, remoteMMS);
+ }
+
+ // Create a dummy RTCSctpTransport object and the 'maxMessageSize'
+ // attribute.
+ const sctp = {};
+ Object.defineProperty(sctp, 'maxMessageSize', {
+ get() {
+ return maxMessageSize;
+ }
+ });
+ this._sctp = sctp;
+ }
+ return origSetRemoteDescription.apply(this, arguments);
+ };
+}
+function shimSendThrowTypeError(window) {
+ if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) {
+ return;
+ }
+
+ // Note: Although Firefox >= 57 has a native implementation, the maximum
+ // message size can be reset for all data channels at a later stage.
+ // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831
+
+ function wrapDcSend(dc, pc) {
+ const origDataChannelSend = dc.send;
+ dc.send = function send() {
+ const data = arguments[0];
+ const length = data.length || data.size || data.byteLength;
+ if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) {
+ throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)');
+ }
+ return origDataChannelSend.apply(dc, arguments);
+ };
+ }
+ const origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;
+ window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {
+ const dataChannel = origCreateDataChannel.apply(this, arguments);
+ wrapDcSend(dataChannel, this);
+ return dataChannel;
+ };
+ wrapPeerConnectionEvent(window, 'datachannel', e => {
+ wrapDcSend(e.channel, e.target);
+ return e;
+ });
+}
+
+/* shims RTCConnectionState by pretending it is the same as iceConnectionState.
+ * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12
+ * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect
+ * since DTLS failures would be hidden. See
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827
+ * for the Firefox tracking bug.
+ */
+function shimConnectionState(window) {
+ if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) {
+ return;
+ }
+ const proto = window.RTCPeerConnection.prototype;
+ Object.defineProperty(proto, 'connectionState', {
+ get() {
+ return {
+ completed: 'connected',
+ checking: 'connecting'
+ }[this.iceConnectionState] || this.iceConnectionState;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(proto, 'onconnectionstatechange', {
+ get() {
+ return this._onconnectionstatechange || null;
+ },
+ set(cb) {
+ if (this._onconnectionstatechange) {
+ this.removeEventListener('connectionstatechange', this._onconnectionstatechange);
+ delete this._onconnectionstatechange;
+ }
+ if (cb) {
+ this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb);
+ }
+ },
+ enumerable: true,
+ configurable: true
+ });
+ ['setLocalDescription', 'setRemoteDescription'].forEach(method => {
+ const origMethod = proto[method];
+ proto[method] = function () {
+ if (!this._connectionstatechangepoly) {
+ this._connectionstatechangepoly = e => {
+ const pc = e.target;
+ if (pc._lastConnectionState !== pc.connectionState) {
+ pc._lastConnectionState = pc.connectionState;
+ const newEvent = new Event('connectionstatechange', e);
+ pc.dispatchEvent(newEvent);
+ }
+ return e;
+ };
+ this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly);
+ }
+ return origMethod.apply(this, arguments);
+ };
+ });
+}
+function removeExtmapAllowMixed(window, browserDetails) {
+ /* remove a=extmap-allow-mixed for webrtc.org < M71 */
+ if (!window.RTCPeerConnection) {
+ return;
+ }
+ if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {
+ return;
+ }
+ if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {
+ return;
+ }
+ const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;
+ window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {
+ if (desc && desc.sdp && desc.sdp.indexOf('\na=extmap-allow-mixed') !== -1) {
+ const sdp = desc.sdp.split('\n').filter(line => {
+ return line.trim() !== 'a=extmap-allow-mixed';
+ }).join('\n');
+ // Safari enforces read-only-ness of RTCSessionDescription fields.
+ if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) {
+ arguments[0] = new window.RTCSessionDescription({
+ type: desc.type,
+ sdp
+ });
+ } else {
+ desc.sdp = sdp;
+ }
+ }
+ return nativeSRD.apply(this, arguments);
+ };
+}
+function shimAddIceCandidateNullOrEmpty(window, browserDetails) {
+ // Support for addIceCandidate(null or undefined)
+ // as well as addIceCandidate({candidate: "", ...})
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=978582
+ // Note: must be called before other polyfills which change the signature.
+ if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {
+ return;
+ }
+ const nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;
+ if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {
+ return;
+ }
+ window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {
+ if (!arguments[0]) {
+ if (arguments[1]) {
+ arguments[1].apply(null);
+ }
+ return Promise.resolve();
+ }
+ // Firefox 68+ emits and processes {candidate: "", ...}, ignore
+ // in older versions.
+ // Native support for ignoring exists for Chrome M77+.
+ // Safari ignores as well, exact version unknown but works in the same
+ // version that also ignores addIceCandidate(null).
+ if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') {
+ return Promise.resolve();
+ }
+ return nativeAddIceCandidate.apply(this, arguments);
+ };
+}
+
+// Note: Make sure to call this ahead of APIs that modify
+// setLocalDescription.length
+function shimParameterlessSetLocalDescription(window, browserDetails) {
+ if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {
+ return;
+ }
+ const nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;
+ if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {
+ return;
+ }
+ window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {
+ let desc = arguments[0] || {};
+ if (typeof desc !== 'object' || desc.type && desc.sdp) {
+ return nativeSetLocalDescription.apply(this, arguments);
+ }
+ // The remaining steps should technically happen when SLD comes off the
+ // RTCPeerConnection's operations chain (not ahead of going on it), but
+ // this is too difficult to shim. Instead, this shim only covers the
+ // common case where the operations chain is empty. This is imperfect, but
+ // should cover many cases. Rationale: Even if we can't reduce the glare
+ // window to zero on imperfect implementations, there's value in tapping
+ // into the perfect negotiation pattern that several browsers support.
+ desc = {
+ type: desc.type,
+ sdp: desc.sdp
+ };
+ if (!desc.type) {
+ switch (this.signalingState) {
+ case 'stable':
+ case 'have-local-offer':
+ case 'have-remote-pranswer':
+ desc.type = 'offer';
+ break;
+ default:
+ desc.type = 'answer';
+ break;
+ }
+ }
+ if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') {
+ return nativeSetLocalDescription.apply(this, [desc]);
+ }
+ const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;
+ return func.apply(this).then(d => nativeSetLocalDescription.apply(this, [d]));
+ };
+}
+
+var commonShim = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ removeExtmapAllowMixed: removeExtmapAllowMixed,
+ shimAddIceCandidateNullOrEmpty: shimAddIceCandidateNullOrEmpty,
+ shimConnectionState: shimConnectionState,
+ shimMaxMessageSize: shimMaxMessageSize,
+ shimParameterlessSetLocalDescription: shimParameterlessSetLocalDescription,
+ shimRTCIceCandidate: shimRTCIceCandidate,
+ shimRTCIceCandidateRelayProtocol: shimRTCIceCandidateRelayProtocol,
+ shimSendThrowTypeError: shimSendThrowTypeError
+});
+
+/*
+ * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree.
+ */
+
+// Shimming starts here.
+function adapterFactory() {
+ let {
+ window
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
+ shimChrome: true,
+ shimFirefox: true,
+ shimSafari: true
+ };
+ // Utils.
+ const logging = log;
+ const browserDetails = detectBrowser(window);
+ const adapter = {
+ browserDetails,
+ commonShim,
+ extractVersion: extractVersion,
+ disableLog: disableLog,
+ disableWarnings: disableWarnings,
+ // Expose sdp as a convenience. For production apps include directly.
+ sdp
+ };
+
+ // Shim browser if found.
+ switch (browserDetails.browser) {
+ case 'chrome':
+ if (!chromeShim || !shimPeerConnection$1 || !options.shimChrome) {
+ logging('Chrome shim is not included in this adapter release.');
+ return adapter;
+ }
+ if (browserDetails.version === null) {
+ logging('Chrome shim can not determine version, not shimming.');
+ return adapter;
+ }
+ logging('adapter.js shimming chrome.');
+ // Export to the adapter global object visible in the browser.
+ adapter.browserShim = chromeShim;
+
+ // Must be called before shimPeerConnection.
+ shimAddIceCandidateNullOrEmpty(window, browserDetails);
+ shimParameterlessSetLocalDescription(window);
+ shimGetUserMedia$2(window, browserDetails);
+ shimMediaStream(window);
+ shimPeerConnection$1(window, browserDetails);
+ shimOnTrack$1(window);
+ shimAddTrackRemoveTrack(window, browserDetails);
+ shimGetSendersWithDtmf(window);
+ shimGetStats(window);
+ shimSenderReceiverGetStats(window);
+ fixNegotiationNeeded(window, browserDetails);
+ shimRTCIceCandidate(window);
+ shimRTCIceCandidateRelayProtocol(window);
+ shimConnectionState(window);
+ shimMaxMessageSize(window, browserDetails);
+ shimSendThrowTypeError(window);
+ removeExtmapAllowMixed(window, browserDetails);
+ break;
+ case 'firefox':
+ if (!firefoxShim || !shimPeerConnection || !options.shimFirefox) {
+ logging('Firefox shim is not included in this adapter release.');
+ return adapter;
+ }
+ logging('adapter.js shimming firefox.');
+ // Export to the adapter global object visible in the browser.
+ adapter.browserShim = firefoxShim;
+
+ // Must be called before shimPeerConnection.
+ shimAddIceCandidateNullOrEmpty(window, browserDetails);
+ shimParameterlessSetLocalDescription(window);
+ shimGetUserMedia$1(window, browserDetails);
+ shimPeerConnection(window, browserDetails);
+ shimOnTrack(window);
+ shimRemoveStream(window);
+ shimSenderGetStats(window);
+ shimReceiverGetStats(window);
+ shimRTCDataChannel(window);
+ shimAddTransceiver(window);
+ shimGetParameters(window);
+ shimCreateOffer(window);
+ shimCreateAnswer(window);
+ shimRTCIceCandidate(window);
+ shimConnectionState(window);
+ shimMaxMessageSize(window, browserDetails);
+ shimSendThrowTypeError(window);
+ break;
+ case 'safari':
+ if (!safariShim || !options.shimSafari) {
+ logging('Safari shim is not included in this adapter release.');
+ return adapter;
+ }
+ logging('adapter.js shimming safari.');
+ // Export to the adapter global object visible in the browser.
+ adapter.browserShim = safariShim;
+
+ // Must be called before shimCallbackAPI.
+ shimAddIceCandidateNullOrEmpty(window, browserDetails);
+ shimParameterlessSetLocalDescription(window);
+ shimRTCIceServerUrls(window);
+ shimCreateOfferLegacy(window);
+ shimCallbacksAPI(window);
+ shimLocalStreamsAPI(window);
+ shimRemoteStreamsAPI(window);
+ shimTrackEventTransceiver(window);
+ shimGetUserMedia(window);
+ shimAudioContext(window);
+ shimRTCIceCandidate(window);
+ shimRTCIceCandidateRelayProtocol(window);
+ shimMaxMessageSize(window, browserDetails);
+ shimSendThrowTypeError(window);
+ removeExtmapAllowMixed(window, browserDetails);
+ break;
+ default:
+ logging('Unsupported browser!');
+ break;
+ }
+ return adapter;
+}
+
+/*
+ * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree.
+ */
+/* eslint-env node */
+
+adapterFactory({
+ window: typeof window === 'undefined' ? undefined : window
+});
+
+/* eslint-disable */
+var SignalTarget;
+(function (SignalTarget) {
+ SignalTarget[SignalTarget["PUBLISHER"] = 0] = "PUBLISHER";
+ SignalTarget[SignalTarget["SUBSCRIBER"] = 1] = "SUBSCRIBER";
+ SignalTarget[SignalTarget["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(SignalTarget || (SignalTarget = {}));
+function signalTargetFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "PUBLISHER":
+ return SignalTarget.PUBLISHER;
+ case 1:
+ case "SUBSCRIBER":
+ return SignalTarget.SUBSCRIBER;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return SignalTarget.UNRECOGNIZED;
+ }
+}
+function signalTargetToJSON(object) {
+ switch (object) {
+ case SignalTarget.PUBLISHER:
+ return "PUBLISHER";
+ case SignalTarget.SUBSCRIBER:
+ return "SUBSCRIBER";
+ case SignalTarget.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var StreamState;
+(function (StreamState) {
+ StreamState[StreamState["ACTIVE"] = 0] = "ACTIVE";
+ StreamState[StreamState["PAUSED"] = 1] = "PAUSED";
+ StreamState[StreamState["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(StreamState || (StreamState = {}));
+function streamStateFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "ACTIVE":
+ return StreamState.ACTIVE;
+ case 1:
+ case "PAUSED":
+ return StreamState.PAUSED;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return StreamState.UNRECOGNIZED;
+ }
+}
+function streamStateToJSON(object) {
+ switch (object) {
+ case StreamState.ACTIVE:
+ return "ACTIVE";
+ case StreamState.PAUSED:
+ return "PAUSED";
+ case StreamState.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+var CandidateProtocol;
+(function (CandidateProtocol) {
+ CandidateProtocol[CandidateProtocol["UDP"] = 0] = "UDP";
+ CandidateProtocol[CandidateProtocol["TCP"] = 1] = "TCP";
+ CandidateProtocol[CandidateProtocol["TLS"] = 2] = "TLS";
+ CandidateProtocol[CandidateProtocol["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
+})(CandidateProtocol || (CandidateProtocol = {}));
+function candidateProtocolFromJSON(object) {
+ switch (object) {
+ case 0:
+ case "UDP":
+ return CandidateProtocol.UDP;
+ case 1:
+ case "TCP":
+ return CandidateProtocol.TCP;
+ case 2:
+ case "TLS":
+ return CandidateProtocol.TLS;
+ case -1:
+ case "UNRECOGNIZED":
+ default:
+ return CandidateProtocol.UNRECOGNIZED;
+ }
+}
+function candidateProtocolToJSON(object) {
+ switch (object) {
+ case CandidateProtocol.UDP:
+ return "UDP";
+ case CandidateProtocol.TCP:
+ return "TCP";
+ case CandidateProtocol.TLS:
+ return "TLS";
+ case CandidateProtocol.UNRECOGNIZED:
+ default:
+ return "UNRECOGNIZED";
+ }
+}
+function createBaseSignalRequest() {
+ return {
+ message: undefined
+ };
+}
+const SignalRequest = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ var _a;
+ switch ((_a = message.message) === null || _a === void 0 ? void 0 : _a.$case) {
+ case "offer":
+ SessionDescription.encode(message.message.offer, writer.uint32(10).fork()).ldelim();
+ break;
+ case "answer":
+ SessionDescription.encode(message.message.answer, writer.uint32(18).fork()).ldelim();
+ break;
+ case "trickle":
+ TrickleRequest.encode(message.message.trickle, writer.uint32(26).fork()).ldelim();
+ break;
+ case "addTrack":
+ AddTrackRequest.encode(message.message.addTrack, writer.uint32(34).fork()).ldelim();
+ break;
+ case "mute":
+ MuteTrackRequest.encode(message.message.mute, writer.uint32(42).fork()).ldelim();
+ break;
+ case "subscription":
+ UpdateSubscription.encode(message.message.subscription, writer.uint32(50).fork()).ldelim();
+ break;
+ case "trackSetting":
+ UpdateTrackSettings.encode(message.message.trackSetting, writer.uint32(58).fork()).ldelim();
+ break;
+ case "leave":
+ LeaveRequest.encode(message.message.leave, writer.uint32(66).fork()).ldelim();
+ break;
+ case "updateLayers":
+ UpdateVideoLayers.encode(message.message.updateLayers, writer.uint32(82).fork()).ldelim();
+ break;
+ case "subscriptionPermission":
+ SubscriptionPermission.encode(message.message.subscriptionPermission, writer.uint32(90).fork()).ldelim();
+ break;
+ case "syncState":
+ SyncState.encode(message.message.syncState, writer.uint32(98).fork()).ldelim();
+ break;
+ case "simulate":
+ SimulateScenario.encode(message.message.simulate, writer.uint32(106).fork()).ldelim();
+ break;
+ case "ping":
+ writer.uint32(112).int64(message.message.ping);
+ break;
+ case "updateMetadata":
+ UpdateParticipantMetadata.encode(message.message.updateMetadata, writer.uint32(122).fork()).ldelim();
+ break;
+ case "pingReq":
+ Ping.encode(message.message.pingReq, writer.uint32(130).fork()).ldelim();
+ break;
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSignalRequest();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.message = {
+ $case: "offer",
+ offer: SessionDescription.decode(reader, reader.uint32())
+ };
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.message = {
+ $case: "answer",
+ answer: SessionDescription.decode(reader, reader.uint32())
+ };
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.message = {
+ $case: "trickle",
+ trickle: TrickleRequest.decode(reader, reader.uint32())
+ };
+ continue;
+ case 4:
+ if (tag !== 34) {
+ break;
+ }
+ message.message = {
+ $case: "addTrack",
+ addTrack: AddTrackRequest.decode(reader, reader.uint32())
+ };
+ continue;
+ case 5:
+ if (tag !== 42) {
+ break;
+ }
+ message.message = {
+ $case: "mute",
+ mute: MuteTrackRequest.decode(reader, reader.uint32())
+ };
+ continue;
+ case 6:
+ if (tag !== 50) {
+ break;
+ }
+ message.message = {
+ $case: "subscription",
+ subscription: UpdateSubscription.decode(reader, reader.uint32())
+ };
+ continue;
+ case 7:
+ if (tag !== 58) {
+ break;
+ }
+ message.message = {
+ $case: "trackSetting",
+ trackSetting: UpdateTrackSettings.decode(reader, reader.uint32())
+ };
+ continue;
+ case 8:
+ if (tag !== 66) {
+ break;
+ }
+ message.message = {
+ $case: "leave",
+ leave: LeaveRequest.decode(reader, reader.uint32())
+ };
+ continue;
+ case 10:
+ if (tag !== 82) {
+ break;
+ }
+ message.message = {
+ $case: "updateLayers",
+ updateLayers: UpdateVideoLayers.decode(reader, reader.uint32())
+ };
+ continue;
+ case 11:
+ if (tag !== 90) {
+ break;
+ }
+ message.message = {
+ $case: "subscriptionPermission",
+ subscriptionPermission: SubscriptionPermission.decode(reader, reader.uint32())
+ };
+ continue;
+ case 12:
+ if (tag !== 98) {
+ break;
+ }
+ message.message = {
+ $case: "syncState",
+ syncState: SyncState.decode(reader, reader.uint32())
+ };
+ continue;
+ case 13:
+ if (tag !== 106) {
+ break;
+ }
+ message.message = {
+ $case: "simulate",
+ simulate: SimulateScenario.decode(reader, reader.uint32())
+ };
+ continue;
+ case 14:
+ if (tag !== 112) {
+ break;
+ }
+ message.message = {
+ $case: "ping",
+ ping: longToNumber(reader.int64())
+ };
+ continue;
+ case 15:
+ if (tag !== 122) {
+ break;
+ }
+ message.message = {
+ $case: "updateMetadata",
+ updateMetadata: UpdateParticipantMetadata.decode(reader, reader.uint32())
+ };
+ continue;
+ case 16:
+ if (tag !== 130) {
+ break;
+ }
+ message.message = {
+ $case: "pingReq",
+ pingReq: Ping.decode(reader, reader.uint32())
+ };
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ message: isSet(object.offer) ? {
+ $case: "offer",
+ offer: SessionDescription.fromJSON(object.offer)
+ } : isSet(object.answer) ? {
+ $case: "answer",
+ answer: SessionDescription.fromJSON(object.answer)
+ } : isSet(object.trickle) ? {
+ $case: "trickle",
+ trickle: TrickleRequest.fromJSON(object.trickle)
+ } : isSet(object.addTrack) ? {
+ $case: "addTrack",
+ addTrack: AddTrackRequest.fromJSON(object.addTrack)
+ } : isSet(object.mute) ? {
+ $case: "mute",
+ mute: MuteTrackRequest.fromJSON(object.mute)
+ } : isSet(object.subscription) ? {
+ $case: "subscription",
+ subscription: UpdateSubscription.fromJSON(object.subscription)
+ } : isSet(object.trackSetting) ? {
+ $case: "trackSetting",
+ trackSetting: UpdateTrackSettings.fromJSON(object.trackSetting)
+ } : isSet(object.leave) ? {
+ $case: "leave",
+ leave: LeaveRequest.fromJSON(object.leave)
+ } : isSet(object.updateLayers) ? {
+ $case: "updateLayers",
+ updateLayers: UpdateVideoLayers.fromJSON(object.updateLayers)
+ } : isSet(object.subscriptionPermission) ? {
+ $case: "subscriptionPermission",
+ subscriptionPermission: SubscriptionPermission.fromJSON(object.subscriptionPermission)
+ } : isSet(object.syncState) ? {
+ $case: "syncState",
+ syncState: SyncState.fromJSON(object.syncState)
+ } : isSet(object.simulate) ? {
+ $case: "simulate",
+ simulate: SimulateScenario.fromJSON(object.simulate)
+ } : isSet(object.ping) ? {
+ $case: "ping",
+ ping: Number(object.ping)
+ } : isSet(object.updateMetadata) ? {
+ $case: "updateMetadata",
+ updateMetadata: UpdateParticipantMetadata.fromJSON(object.updateMetadata)
+ } : isSet(object.pingReq) ? {
+ $case: "pingReq",
+ pingReq: Ping.fromJSON(object.pingReq)
+ } : undefined
+ };
+ },
+ toJSON(message) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19;
+ const obj = {};
+ ((_a = message.message) === null || _a === void 0 ? void 0 : _a.$case) === "offer" && (obj.offer = ((_b = message.message) === null || _b === void 0 ? void 0 : _b.offer) ? SessionDescription.toJSON((_c = message.message) === null || _c === void 0 ? void 0 : _c.offer) : undefined);
+ ((_d = message.message) === null || _d === void 0 ? void 0 : _d.$case) === "answer" && (obj.answer = ((_e = message.message) === null || _e === void 0 ? void 0 : _e.answer) ? SessionDescription.toJSON((_f = message.message) === null || _f === void 0 ? void 0 : _f.answer) : undefined);
+ ((_g = message.message) === null || _g === void 0 ? void 0 : _g.$case) === "trickle" && (obj.trickle = ((_h = message.message) === null || _h === void 0 ? void 0 : _h.trickle) ? TrickleRequest.toJSON((_j = message.message) === null || _j === void 0 ? void 0 : _j.trickle) : undefined);
+ ((_k = message.message) === null || _k === void 0 ? void 0 : _k.$case) === "addTrack" && (obj.addTrack = ((_l = message.message) === null || _l === void 0 ? void 0 : _l.addTrack) ? AddTrackRequest.toJSON((_m = message.message) === null || _m === void 0 ? void 0 : _m.addTrack) : undefined);
+ ((_o = message.message) === null || _o === void 0 ? void 0 : _o.$case) === "mute" && (obj.mute = ((_p = message.message) === null || _p === void 0 ? void 0 : _p.mute) ? MuteTrackRequest.toJSON((_q = message.message) === null || _q === void 0 ? void 0 : _q.mute) : undefined);
+ ((_r = message.message) === null || _r === void 0 ? void 0 : _r.$case) === "subscription" && (obj.subscription = ((_s = message.message) === null || _s === void 0 ? void 0 : _s.subscription) ? UpdateSubscription.toJSON((_t = message.message) === null || _t === void 0 ? void 0 : _t.subscription) : undefined);
+ ((_u = message.message) === null || _u === void 0 ? void 0 : _u.$case) === "trackSetting" && (obj.trackSetting = ((_v = message.message) === null || _v === void 0 ? void 0 : _v.trackSetting) ? UpdateTrackSettings.toJSON((_w = message.message) === null || _w === void 0 ? void 0 : _w.trackSetting) : undefined);
+ ((_x = message.message) === null || _x === void 0 ? void 0 : _x.$case) === "leave" && (obj.leave = ((_y = message.message) === null || _y === void 0 ? void 0 : _y.leave) ? LeaveRequest.toJSON((_z = message.message) === null || _z === void 0 ? void 0 : _z.leave) : undefined);
+ ((_0 = message.message) === null || _0 === void 0 ? void 0 : _0.$case) === "updateLayers" && (obj.updateLayers = ((_1 = message.message) === null || _1 === void 0 ? void 0 : _1.updateLayers) ? UpdateVideoLayers.toJSON((_2 = message.message) === null || _2 === void 0 ? void 0 : _2.updateLayers) : undefined);
+ ((_3 = message.message) === null || _3 === void 0 ? void 0 : _3.$case) === "subscriptionPermission" && (obj.subscriptionPermission = ((_4 = message.message) === null || _4 === void 0 ? void 0 : _4.subscriptionPermission) ? SubscriptionPermission.toJSON((_5 = message.message) === null || _5 === void 0 ? void 0 : _5.subscriptionPermission) : undefined);
+ ((_6 = message.message) === null || _6 === void 0 ? void 0 : _6.$case) === "syncState" && (obj.syncState = ((_7 = message.message) === null || _7 === void 0 ? void 0 : _7.syncState) ? SyncState.toJSON((_8 = message.message) === null || _8 === void 0 ? void 0 : _8.syncState) : undefined);
+ ((_9 = message.message) === null || _9 === void 0 ? void 0 : _9.$case) === "simulate" && (obj.simulate = ((_10 = message.message) === null || _10 === void 0 ? void 0 : _10.simulate) ? SimulateScenario.toJSON((_11 = message.message) === null || _11 === void 0 ? void 0 : _11.simulate) : undefined);
+ ((_12 = message.message) === null || _12 === void 0 ? void 0 : _12.$case) === "ping" && (obj.ping = Math.round((_13 = message.message) === null || _13 === void 0 ? void 0 : _13.ping));
+ ((_14 = message.message) === null || _14 === void 0 ? void 0 : _14.$case) === "updateMetadata" && (obj.updateMetadata = ((_15 = message.message) === null || _15 === void 0 ? void 0 : _15.updateMetadata) ? UpdateParticipantMetadata.toJSON((_16 = message.message) === null || _16 === void 0 ? void 0 : _16.updateMetadata) : undefined);
+ ((_17 = message.message) === null || _17 === void 0 ? void 0 : _17.$case) === "pingReq" && (obj.pingReq = ((_18 = message.message) === null || _18 === void 0 ? void 0 : _18.pingReq) ? Ping.toJSON((_19 = message.message) === null || _19 === void 0 ? void 0 : _19.pingReq) : undefined);
+ return obj;
+ },
+ create(base) {
+ return SignalRequest.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20;
+ const message = createBaseSignalRequest();
+ if (((_a = object.message) === null || _a === void 0 ? void 0 : _a.$case) === "offer" && ((_b = object.message) === null || _b === void 0 ? void 0 : _b.offer) !== undefined && ((_c = object.message) === null || _c === void 0 ? void 0 : _c.offer) !== null) {
+ message.message = {
+ $case: "offer",
+ offer: SessionDescription.fromPartial(object.message.offer)
+ };
+ }
+ if (((_d = object.message) === null || _d === void 0 ? void 0 : _d.$case) === "answer" && ((_e = object.message) === null || _e === void 0 ? void 0 : _e.answer) !== undefined && ((_f = object.message) === null || _f === void 0 ? void 0 : _f.answer) !== null) {
+ message.message = {
+ $case: "answer",
+ answer: SessionDescription.fromPartial(object.message.answer)
+ };
+ }
+ if (((_g = object.message) === null || _g === void 0 ? void 0 : _g.$case) === "trickle" && ((_h = object.message) === null || _h === void 0 ? void 0 : _h.trickle) !== undefined && ((_j = object.message) === null || _j === void 0 ? void 0 : _j.trickle) !== null) {
+ message.message = {
+ $case: "trickle",
+ trickle: TrickleRequest.fromPartial(object.message.trickle)
+ };
+ }
+ if (((_k = object.message) === null || _k === void 0 ? void 0 : _k.$case) === "addTrack" && ((_l = object.message) === null || _l === void 0 ? void 0 : _l.addTrack) !== undefined && ((_m = object.message) === null || _m === void 0 ? void 0 : _m.addTrack) !== null) {
+ message.message = {
+ $case: "addTrack",
+ addTrack: AddTrackRequest.fromPartial(object.message.addTrack)
+ };
+ }
+ if (((_o = object.message) === null || _o === void 0 ? void 0 : _o.$case) === "mute" && ((_p = object.message) === null || _p === void 0 ? void 0 : _p.mute) !== undefined && ((_q = object.message) === null || _q === void 0 ? void 0 : _q.mute) !== null) {
+ message.message = {
+ $case: "mute",
+ mute: MuteTrackRequest.fromPartial(object.message.mute)
+ };
+ }
+ if (((_r = object.message) === null || _r === void 0 ? void 0 : _r.$case) === "subscription" && ((_s = object.message) === null || _s === void 0 ? void 0 : _s.subscription) !== undefined && ((_t = object.message) === null || _t === void 0 ? void 0 : _t.subscription) !== null) {
+ message.message = {
+ $case: "subscription",
+ subscription: UpdateSubscription.fromPartial(object.message.subscription)
+ };
+ }
+ if (((_u = object.message) === null || _u === void 0 ? void 0 : _u.$case) === "trackSetting" && ((_v = object.message) === null || _v === void 0 ? void 0 : _v.trackSetting) !== undefined && ((_w = object.message) === null || _w === void 0 ? void 0 : _w.trackSetting) !== null) {
+ message.message = {
+ $case: "trackSetting",
+ trackSetting: UpdateTrackSettings.fromPartial(object.message.trackSetting)
+ };
+ }
+ if (((_x = object.message) === null || _x === void 0 ? void 0 : _x.$case) === "leave" && ((_y = object.message) === null || _y === void 0 ? void 0 : _y.leave) !== undefined && ((_z = object.message) === null || _z === void 0 ? void 0 : _z.leave) !== null) {
+ message.message = {
+ $case: "leave",
+ leave: LeaveRequest.fromPartial(object.message.leave)
+ };
+ }
+ if (((_0 = object.message) === null || _0 === void 0 ? void 0 : _0.$case) === "updateLayers" && ((_1 = object.message) === null || _1 === void 0 ? void 0 : _1.updateLayers) !== undefined && ((_2 = object.message) === null || _2 === void 0 ? void 0 : _2.updateLayers) !== null) {
+ message.message = {
+ $case: "updateLayers",
+ updateLayers: UpdateVideoLayers.fromPartial(object.message.updateLayers)
+ };
+ }
+ if (((_3 = object.message) === null || _3 === void 0 ? void 0 : _3.$case) === "subscriptionPermission" && ((_4 = object.message) === null || _4 === void 0 ? void 0 : _4.subscriptionPermission) !== undefined && ((_5 = object.message) === null || _5 === void 0 ? void 0 : _5.subscriptionPermission) !== null) {
+ message.message = {
+ $case: "subscriptionPermission",
+ subscriptionPermission: SubscriptionPermission.fromPartial(object.message.subscriptionPermission)
+ };
+ }
+ if (((_6 = object.message) === null || _6 === void 0 ? void 0 : _6.$case) === "syncState" && ((_7 = object.message) === null || _7 === void 0 ? void 0 : _7.syncState) !== undefined && ((_8 = object.message) === null || _8 === void 0 ? void 0 : _8.syncState) !== null) {
+ message.message = {
+ $case: "syncState",
+ syncState: SyncState.fromPartial(object.message.syncState)
+ };
+ }
+ if (((_9 = object.message) === null || _9 === void 0 ? void 0 : _9.$case) === "simulate" && ((_10 = object.message) === null || _10 === void 0 ? void 0 : _10.simulate) !== undefined && ((_11 = object.message) === null || _11 === void 0 ? void 0 : _11.simulate) !== null) {
+ message.message = {
+ $case: "simulate",
+ simulate: SimulateScenario.fromPartial(object.message.simulate)
+ };
+ }
+ if (((_12 = object.message) === null || _12 === void 0 ? void 0 : _12.$case) === "ping" && ((_13 = object.message) === null || _13 === void 0 ? void 0 : _13.ping) !== undefined && ((_14 = object.message) === null || _14 === void 0 ? void 0 : _14.ping) !== null) {
+ message.message = {
+ $case: "ping",
+ ping: object.message.ping
+ };
+ }
+ if (((_15 = object.message) === null || _15 === void 0 ? void 0 : _15.$case) === "updateMetadata" && ((_16 = object.message) === null || _16 === void 0 ? void 0 : _16.updateMetadata) !== undefined && ((_17 = object.message) === null || _17 === void 0 ? void 0 : _17.updateMetadata) !== null) {
+ message.message = {
+ $case: "updateMetadata",
+ updateMetadata: UpdateParticipantMetadata.fromPartial(object.message.updateMetadata)
+ };
+ }
+ if (((_18 = object.message) === null || _18 === void 0 ? void 0 : _18.$case) === "pingReq" && ((_19 = object.message) === null || _19 === void 0 ? void 0 : _19.pingReq) !== undefined && ((_20 = object.message) === null || _20 === void 0 ? void 0 : _20.pingReq) !== null) {
+ message.message = {
+ $case: "pingReq",
+ pingReq: Ping.fromPartial(object.message.pingReq)
+ };
+ }
+ return message;
+ }
+};
+function createBaseSignalResponse() {
+ return {
+ message: undefined
+ };
+}
+const SignalResponse = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ var _a;
+ switch ((_a = message.message) === null || _a === void 0 ? void 0 : _a.$case) {
+ case "join":
+ JoinResponse.encode(message.message.join, writer.uint32(10).fork()).ldelim();
+ break;
+ case "answer":
+ SessionDescription.encode(message.message.answer, writer.uint32(18).fork()).ldelim();
+ break;
+ case "offer":
+ SessionDescription.encode(message.message.offer, writer.uint32(26).fork()).ldelim();
+ break;
+ case "trickle":
+ TrickleRequest.encode(message.message.trickle, writer.uint32(34).fork()).ldelim();
+ break;
+ case "update":
+ ParticipantUpdate.encode(message.message.update, writer.uint32(42).fork()).ldelim();
+ break;
+ case "trackPublished":
+ TrackPublishedResponse.encode(message.message.trackPublished, writer.uint32(50).fork()).ldelim();
+ break;
+ case "leave":
+ LeaveRequest.encode(message.message.leave, writer.uint32(66).fork()).ldelim();
+ break;
+ case "mute":
+ MuteTrackRequest.encode(message.message.mute, writer.uint32(74).fork()).ldelim();
+ break;
+ case "speakersChanged":
+ SpeakersChanged.encode(message.message.speakersChanged, writer.uint32(82).fork()).ldelim();
+ break;
+ case "roomUpdate":
+ RoomUpdate.encode(message.message.roomUpdate, writer.uint32(90).fork()).ldelim();
+ break;
+ case "connectionQuality":
+ ConnectionQualityUpdate.encode(message.message.connectionQuality, writer.uint32(98).fork()).ldelim();
+ break;
+ case "streamStateUpdate":
+ StreamStateUpdate.encode(message.message.streamStateUpdate, writer.uint32(106).fork()).ldelim();
+ break;
+ case "subscribedQualityUpdate":
+ SubscribedQualityUpdate.encode(message.message.subscribedQualityUpdate, writer.uint32(114).fork()).ldelim();
+ break;
+ case "subscriptionPermissionUpdate":
+ SubscriptionPermissionUpdate.encode(message.message.subscriptionPermissionUpdate, writer.uint32(122).fork()).ldelim();
+ break;
+ case "refreshToken":
+ writer.uint32(130).string(message.message.refreshToken);
+ break;
+ case "trackUnpublished":
+ TrackUnpublishedResponse.encode(message.message.trackUnpublished, writer.uint32(138).fork()).ldelim();
+ break;
+ case "pong":
+ writer.uint32(144).int64(message.message.pong);
+ break;
+ case "reconnect":
+ ReconnectResponse.encode(message.message.reconnect, writer.uint32(154).fork()).ldelim();
+ break;
+ case "pongResp":
+ Pong.encode(message.message.pongResp, writer.uint32(162).fork()).ldelim();
+ break;
+ case "subscriptionResponse":
+ SubscriptionResponse.encode(message.message.subscriptionResponse, writer.uint32(170).fork()).ldelim();
+ break;
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSignalResponse();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.message = {
+ $case: "join",
+ join: JoinResponse.decode(reader, reader.uint32())
+ };
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.message = {
+ $case: "answer",
+ answer: SessionDescription.decode(reader, reader.uint32())
+ };
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.message = {
+ $case: "offer",
+ offer: SessionDescription.decode(reader, reader.uint32())
+ };
+ continue;
+ case 4:
+ if (tag !== 34) {
+ break;
+ }
+ message.message = {
+ $case: "trickle",
+ trickle: TrickleRequest.decode(reader, reader.uint32())
+ };
+ continue;
+ case 5:
+ if (tag !== 42) {
+ break;
+ }
+ message.message = {
+ $case: "update",
+ update: ParticipantUpdate.decode(reader, reader.uint32())
+ };
+ continue;
+ case 6:
+ if (tag !== 50) {
+ break;
+ }
+ message.message = {
+ $case: "trackPublished",
+ trackPublished: TrackPublishedResponse.decode(reader, reader.uint32())
+ };
+ continue;
+ case 8:
+ if (tag !== 66) {
+ break;
+ }
+ message.message = {
+ $case: "leave",
+ leave: LeaveRequest.decode(reader, reader.uint32())
+ };
+ continue;
+ case 9:
+ if (tag !== 74) {
+ break;
+ }
+ message.message = {
+ $case: "mute",
+ mute: MuteTrackRequest.decode(reader, reader.uint32())
+ };
+ continue;
+ case 10:
+ if (tag !== 82) {
+ break;
+ }
+ message.message = {
+ $case: "speakersChanged",
+ speakersChanged: SpeakersChanged.decode(reader, reader.uint32())
+ };
+ continue;
+ case 11:
+ if (tag !== 90) {
+ break;
+ }
+ message.message = {
+ $case: "roomUpdate",
+ roomUpdate: RoomUpdate.decode(reader, reader.uint32())
+ };
+ continue;
+ case 12:
+ if (tag !== 98) {
+ break;
+ }
+ message.message = {
+ $case: "connectionQuality",
+ connectionQuality: ConnectionQualityUpdate.decode(reader, reader.uint32())
+ };
+ continue;
+ case 13:
+ if (tag !== 106) {
+ break;
+ }
+ message.message = {
+ $case: "streamStateUpdate",
+ streamStateUpdate: StreamStateUpdate.decode(reader, reader.uint32())
+ };
+ continue;
+ case 14:
+ if (tag !== 114) {
+ break;
+ }
+ message.message = {
+ $case: "subscribedQualityUpdate",
+ subscribedQualityUpdate: SubscribedQualityUpdate.decode(reader, reader.uint32())
+ };
+ continue;
+ case 15:
+ if (tag !== 122) {
+ break;
+ }
+ message.message = {
+ $case: "subscriptionPermissionUpdate",
+ subscriptionPermissionUpdate: SubscriptionPermissionUpdate.decode(reader, reader.uint32())
+ };
+ continue;
+ case 16:
+ if (tag !== 130) {
+ break;
+ }
+ message.message = {
+ $case: "refreshToken",
+ refreshToken: reader.string()
+ };
+ continue;
+ case 17:
+ if (tag !== 138) {
+ break;
+ }
+ message.message = {
+ $case: "trackUnpublished",
+ trackUnpublished: TrackUnpublishedResponse.decode(reader, reader.uint32())
+ };
+ continue;
+ case 18:
+ if (tag !== 144) {
+ break;
+ }
+ message.message = {
+ $case: "pong",
+ pong: longToNumber(reader.int64())
+ };
+ continue;
+ case 19:
+ if (tag !== 154) {
+ break;
+ }
+ message.message = {
+ $case: "reconnect",
+ reconnect: ReconnectResponse.decode(reader, reader.uint32())
+ };
+ continue;
+ case 20:
+ if (tag !== 162) {
+ break;
+ }
+ message.message = {
+ $case: "pongResp",
+ pongResp: Pong.decode(reader, reader.uint32())
+ };
+ continue;
+ case 21:
+ if (tag !== 170) {
+ break;
+ }
+ message.message = {
+ $case: "subscriptionResponse",
+ subscriptionResponse: SubscriptionResponse.decode(reader, reader.uint32())
+ };
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ message: isSet(object.join) ? {
+ $case: "join",
+ join: JoinResponse.fromJSON(object.join)
+ } : isSet(object.answer) ? {
+ $case: "answer",
+ answer: SessionDescription.fromJSON(object.answer)
+ } : isSet(object.offer) ? {
+ $case: "offer",
+ offer: SessionDescription.fromJSON(object.offer)
+ } : isSet(object.trickle) ? {
+ $case: "trickle",
+ trickle: TrickleRequest.fromJSON(object.trickle)
+ } : isSet(object.update) ? {
+ $case: "update",
+ update: ParticipantUpdate.fromJSON(object.update)
+ } : isSet(object.trackPublished) ? {
+ $case: "trackPublished",
+ trackPublished: TrackPublishedResponse.fromJSON(object.trackPublished)
+ } : isSet(object.leave) ? {
+ $case: "leave",
+ leave: LeaveRequest.fromJSON(object.leave)
+ } : isSet(object.mute) ? {
+ $case: "mute",
+ mute: MuteTrackRequest.fromJSON(object.mute)
+ } : isSet(object.speakersChanged) ? {
+ $case: "speakersChanged",
+ speakersChanged: SpeakersChanged.fromJSON(object.speakersChanged)
+ } : isSet(object.roomUpdate) ? {
+ $case: "roomUpdate",
+ roomUpdate: RoomUpdate.fromJSON(object.roomUpdate)
+ } : isSet(object.connectionQuality) ? {
+ $case: "connectionQuality",
+ connectionQuality: ConnectionQualityUpdate.fromJSON(object.connectionQuality)
+ } : isSet(object.streamStateUpdate) ? {
+ $case: "streamStateUpdate",
+ streamStateUpdate: StreamStateUpdate.fromJSON(object.streamStateUpdate)
+ } : isSet(object.subscribedQualityUpdate) ? {
+ $case: "subscribedQualityUpdate",
+ subscribedQualityUpdate: SubscribedQualityUpdate.fromJSON(object.subscribedQualityUpdate)
+ } : isSet(object.subscriptionPermissionUpdate) ? {
+ $case: "subscriptionPermissionUpdate",
+ subscriptionPermissionUpdate: SubscriptionPermissionUpdate.fromJSON(object.subscriptionPermissionUpdate)
+ } : isSet(object.refreshToken) ? {
+ $case: "refreshToken",
+ refreshToken: String(object.refreshToken)
+ } : isSet(object.trackUnpublished) ? {
+ $case: "trackUnpublished",
+ trackUnpublished: TrackUnpublishedResponse.fromJSON(object.trackUnpublished)
+ } : isSet(object.pong) ? {
+ $case: "pong",
+ pong: Number(object.pong)
+ } : isSet(object.reconnect) ? {
+ $case: "reconnect",
+ reconnect: ReconnectResponse.fromJSON(object.reconnect)
+ } : isSet(object.pongResp) ? {
+ $case: "pongResp",
+ pongResp: Pong.fromJSON(object.pongResp)
+ } : isSet(object.subscriptionResponse) ? {
+ $case: "subscriptionResponse",
+ subscriptionResponse: SubscriptionResponse.fromJSON(object.subscriptionResponse)
+ } : undefined
+ };
+ },
+ toJSON(message) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33;
+ const obj = {};
+ ((_a = message.message) === null || _a === void 0 ? void 0 : _a.$case) === "join" && (obj.join = ((_b = message.message) === null || _b === void 0 ? void 0 : _b.join) ? JoinResponse.toJSON((_c = message.message) === null || _c === void 0 ? void 0 : _c.join) : undefined);
+ ((_d = message.message) === null || _d === void 0 ? void 0 : _d.$case) === "answer" && (obj.answer = ((_e = message.message) === null || _e === void 0 ? void 0 : _e.answer) ? SessionDescription.toJSON((_f = message.message) === null || _f === void 0 ? void 0 : _f.answer) : undefined);
+ ((_g = message.message) === null || _g === void 0 ? void 0 : _g.$case) === "offer" && (obj.offer = ((_h = message.message) === null || _h === void 0 ? void 0 : _h.offer) ? SessionDescription.toJSON((_j = message.message) === null || _j === void 0 ? void 0 : _j.offer) : undefined);
+ ((_k = message.message) === null || _k === void 0 ? void 0 : _k.$case) === "trickle" && (obj.trickle = ((_l = message.message) === null || _l === void 0 ? void 0 : _l.trickle) ? TrickleRequest.toJSON((_m = message.message) === null || _m === void 0 ? void 0 : _m.trickle) : undefined);
+ ((_o = message.message) === null || _o === void 0 ? void 0 : _o.$case) === "update" && (obj.update = ((_p = message.message) === null || _p === void 0 ? void 0 : _p.update) ? ParticipantUpdate.toJSON((_q = message.message) === null || _q === void 0 ? void 0 : _q.update) : undefined);
+ ((_r = message.message) === null || _r === void 0 ? void 0 : _r.$case) === "trackPublished" && (obj.trackPublished = ((_s = message.message) === null || _s === void 0 ? void 0 : _s.trackPublished) ? TrackPublishedResponse.toJSON((_t = message.message) === null || _t === void 0 ? void 0 : _t.trackPublished) : undefined);
+ ((_u = message.message) === null || _u === void 0 ? void 0 : _u.$case) === "leave" && (obj.leave = ((_v = message.message) === null || _v === void 0 ? void 0 : _v.leave) ? LeaveRequest.toJSON((_w = message.message) === null || _w === void 0 ? void 0 : _w.leave) : undefined);
+ ((_x = message.message) === null || _x === void 0 ? void 0 : _x.$case) === "mute" && (obj.mute = ((_y = message.message) === null || _y === void 0 ? void 0 : _y.mute) ? MuteTrackRequest.toJSON((_z = message.message) === null || _z === void 0 ? void 0 : _z.mute) : undefined);
+ ((_0 = message.message) === null || _0 === void 0 ? void 0 : _0.$case) === "speakersChanged" && (obj.speakersChanged = ((_1 = message.message) === null || _1 === void 0 ? void 0 : _1.speakersChanged) ? SpeakersChanged.toJSON((_2 = message.message) === null || _2 === void 0 ? void 0 : _2.speakersChanged) : undefined);
+ ((_3 = message.message) === null || _3 === void 0 ? void 0 : _3.$case) === "roomUpdate" && (obj.roomUpdate = ((_4 = message.message) === null || _4 === void 0 ? void 0 : _4.roomUpdate) ? RoomUpdate.toJSON((_5 = message.message) === null || _5 === void 0 ? void 0 : _5.roomUpdate) : undefined);
+ ((_6 = message.message) === null || _6 === void 0 ? void 0 : _6.$case) === "connectionQuality" && (obj.connectionQuality = ((_7 = message.message) === null || _7 === void 0 ? void 0 : _7.connectionQuality) ? ConnectionQualityUpdate.toJSON((_8 = message.message) === null || _8 === void 0 ? void 0 : _8.connectionQuality) : undefined);
+ ((_9 = message.message) === null || _9 === void 0 ? void 0 : _9.$case) === "streamStateUpdate" && (obj.streamStateUpdate = ((_10 = message.message) === null || _10 === void 0 ? void 0 : _10.streamStateUpdate) ? StreamStateUpdate.toJSON((_11 = message.message) === null || _11 === void 0 ? void 0 : _11.streamStateUpdate) : undefined);
+ ((_12 = message.message) === null || _12 === void 0 ? void 0 : _12.$case) === "subscribedQualityUpdate" && (obj.subscribedQualityUpdate = ((_13 = message.message) === null || _13 === void 0 ? void 0 : _13.subscribedQualityUpdate) ? SubscribedQualityUpdate.toJSON((_14 = message.message) === null || _14 === void 0 ? void 0 : _14.subscribedQualityUpdate) : undefined);
+ ((_15 = message.message) === null || _15 === void 0 ? void 0 : _15.$case) === "subscriptionPermissionUpdate" && (obj.subscriptionPermissionUpdate = ((_16 = message.message) === null || _16 === void 0 ? void 0 : _16.subscriptionPermissionUpdate) ? SubscriptionPermissionUpdate.toJSON((_17 = message.message) === null || _17 === void 0 ? void 0 : _17.subscriptionPermissionUpdate) : undefined);
+ ((_18 = message.message) === null || _18 === void 0 ? void 0 : _18.$case) === "refreshToken" && (obj.refreshToken = (_19 = message.message) === null || _19 === void 0 ? void 0 : _19.refreshToken);
+ ((_20 = message.message) === null || _20 === void 0 ? void 0 : _20.$case) === "trackUnpublished" && (obj.trackUnpublished = ((_21 = message.message) === null || _21 === void 0 ? void 0 : _21.trackUnpublished) ? TrackUnpublishedResponse.toJSON((_22 = message.message) === null || _22 === void 0 ? void 0 : _22.trackUnpublished) : undefined);
+ ((_23 = message.message) === null || _23 === void 0 ? void 0 : _23.$case) === "pong" && (obj.pong = Math.round((_24 = message.message) === null || _24 === void 0 ? void 0 : _24.pong));
+ ((_25 = message.message) === null || _25 === void 0 ? void 0 : _25.$case) === "reconnect" && (obj.reconnect = ((_26 = message.message) === null || _26 === void 0 ? void 0 : _26.reconnect) ? ReconnectResponse.toJSON((_27 = message.message) === null || _27 === void 0 ? void 0 : _27.reconnect) : undefined);
+ ((_28 = message.message) === null || _28 === void 0 ? void 0 : _28.$case) === "pongResp" && (obj.pongResp = ((_29 = message.message) === null || _29 === void 0 ? void 0 : _29.pongResp) ? Pong.toJSON((_30 = message.message) === null || _30 === void 0 ? void 0 : _30.pongResp) : undefined);
+ ((_31 = message.message) === null || _31 === void 0 ? void 0 : _31.$case) === "subscriptionResponse" && (obj.subscriptionResponse = ((_32 = message.message) === null || _32 === void 0 ? void 0 : _32.subscriptionResponse) ? SubscriptionResponse.toJSON((_33 = message.message) === null || _33 === void 0 ? void 0 : _33.subscriptionResponse) : undefined);
+ return obj;
+ },
+ create(base) {
+ return SignalResponse.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35;
+ const message = createBaseSignalResponse();
+ if (((_a = object.message) === null || _a === void 0 ? void 0 : _a.$case) === "join" && ((_b = object.message) === null || _b === void 0 ? void 0 : _b.join) !== undefined && ((_c = object.message) === null || _c === void 0 ? void 0 : _c.join) !== null) {
+ message.message = {
+ $case: "join",
+ join: JoinResponse.fromPartial(object.message.join)
+ };
+ }
+ if (((_d = object.message) === null || _d === void 0 ? void 0 : _d.$case) === "answer" && ((_e = object.message) === null || _e === void 0 ? void 0 : _e.answer) !== undefined && ((_f = object.message) === null || _f === void 0 ? void 0 : _f.answer) !== null) {
+ message.message = {
+ $case: "answer",
+ answer: SessionDescription.fromPartial(object.message.answer)
+ };
+ }
+ if (((_g = object.message) === null || _g === void 0 ? void 0 : _g.$case) === "offer" && ((_h = object.message) === null || _h === void 0 ? void 0 : _h.offer) !== undefined && ((_j = object.message) === null || _j === void 0 ? void 0 : _j.offer) !== null) {
+ message.message = {
+ $case: "offer",
+ offer: SessionDescription.fromPartial(object.message.offer)
+ };
+ }
+ if (((_k = object.message) === null || _k === void 0 ? void 0 : _k.$case) === "trickle" && ((_l = object.message) === null || _l === void 0 ? void 0 : _l.trickle) !== undefined && ((_m = object.message) === null || _m === void 0 ? void 0 : _m.trickle) !== null) {
+ message.message = {
+ $case: "trickle",
+ trickle: TrickleRequest.fromPartial(object.message.trickle)
+ };
+ }
+ if (((_o = object.message) === null || _o === void 0 ? void 0 : _o.$case) === "update" && ((_p = object.message) === null || _p === void 0 ? void 0 : _p.update) !== undefined && ((_q = object.message) === null || _q === void 0 ? void 0 : _q.update) !== null) {
+ message.message = {
+ $case: "update",
+ update: ParticipantUpdate.fromPartial(object.message.update)
+ };
+ }
+ if (((_r = object.message) === null || _r === void 0 ? void 0 : _r.$case) === "trackPublished" && ((_s = object.message) === null || _s === void 0 ? void 0 : _s.trackPublished) !== undefined && ((_t = object.message) === null || _t === void 0 ? void 0 : _t.trackPublished) !== null) {
+ message.message = {
+ $case: "trackPublished",
+ trackPublished: TrackPublishedResponse.fromPartial(object.message.trackPublished)
+ };
+ }
+ if (((_u = object.message) === null || _u === void 0 ? void 0 : _u.$case) === "leave" && ((_v = object.message) === null || _v === void 0 ? void 0 : _v.leave) !== undefined && ((_w = object.message) === null || _w === void 0 ? void 0 : _w.leave) !== null) {
+ message.message = {
+ $case: "leave",
+ leave: LeaveRequest.fromPartial(object.message.leave)
+ };
+ }
+ if (((_x = object.message) === null || _x === void 0 ? void 0 : _x.$case) === "mute" && ((_y = object.message) === null || _y === void 0 ? void 0 : _y.mute) !== undefined && ((_z = object.message) === null || _z === void 0 ? void 0 : _z.mute) !== null) {
+ message.message = {
+ $case: "mute",
+ mute: MuteTrackRequest.fromPartial(object.message.mute)
+ };
+ }
+ if (((_0 = object.message) === null || _0 === void 0 ? void 0 : _0.$case) === "speakersChanged" && ((_1 = object.message) === null || _1 === void 0 ? void 0 : _1.speakersChanged) !== undefined && ((_2 = object.message) === null || _2 === void 0 ? void 0 : _2.speakersChanged) !== null) {
+ message.message = {
+ $case: "speakersChanged",
+ speakersChanged: SpeakersChanged.fromPartial(object.message.speakersChanged)
+ };
+ }
+ if (((_3 = object.message) === null || _3 === void 0 ? void 0 : _3.$case) === "roomUpdate" && ((_4 = object.message) === null || _4 === void 0 ? void 0 : _4.roomUpdate) !== undefined && ((_5 = object.message) === null || _5 === void 0 ? void 0 : _5.roomUpdate) !== null) {
+ message.message = {
+ $case: "roomUpdate",
+ roomUpdate: RoomUpdate.fromPartial(object.message.roomUpdate)
+ };
+ }
+ if (((_6 = object.message) === null || _6 === void 0 ? void 0 : _6.$case) === "connectionQuality" && ((_7 = object.message) === null || _7 === void 0 ? void 0 : _7.connectionQuality) !== undefined && ((_8 = object.message) === null || _8 === void 0 ? void 0 : _8.connectionQuality) !== null) {
+ message.message = {
+ $case: "connectionQuality",
+ connectionQuality: ConnectionQualityUpdate.fromPartial(object.message.connectionQuality)
+ };
+ }
+ if (((_9 = object.message) === null || _9 === void 0 ? void 0 : _9.$case) === "streamStateUpdate" && ((_10 = object.message) === null || _10 === void 0 ? void 0 : _10.streamStateUpdate) !== undefined && ((_11 = object.message) === null || _11 === void 0 ? void 0 : _11.streamStateUpdate) !== null) {
+ message.message = {
+ $case: "streamStateUpdate",
+ streamStateUpdate: StreamStateUpdate.fromPartial(object.message.streamStateUpdate)
+ };
+ }
+ if (((_12 = object.message) === null || _12 === void 0 ? void 0 : _12.$case) === "subscribedQualityUpdate" && ((_13 = object.message) === null || _13 === void 0 ? void 0 : _13.subscribedQualityUpdate) !== undefined && ((_14 = object.message) === null || _14 === void 0 ? void 0 : _14.subscribedQualityUpdate) !== null) {
+ message.message = {
+ $case: "subscribedQualityUpdate",
+ subscribedQualityUpdate: SubscribedQualityUpdate.fromPartial(object.message.subscribedQualityUpdate)
+ };
+ }
+ if (((_15 = object.message) === null || _15 === void 0 ? void 0 : _15.$case) === "subscriptionPermissionUpdate" && ((_16 = object.message) === null || _16 === void 0 ? void 0 : _16.subscriptionPermissionUpdate) !== undefined && ((_17 = object.message) === null || _17 === void 0 ? void 0 : _17.subscriptionPermissionUpdate) !== null) {
+ message.message = {
+ $case: "subscriptionPermissionUpdate",
+ subscriptionPermissionUpdate: SubscriptionPermissionUpdate.fromPartial(object.message.subscriptionPermissionUpdate)
+ };
+ }
+ if (((_18 = object.message) === null || _18 === void 0 ? void 0 : _18.$case) === "refreshToken" && ((_19 = object.message) === null || _19 === void 0 ? void 0 : _19.refreshToken) !== undefined && ((_20 = object.message) === null || _20 === void 0 ? void 0 : _20.refreshToken) !== null) {
+ message.message = {
+ $case: "refreshToken",
+ refreshToken: object.message.refreshToken
+ };
+ }
+ if (((_21 = object.message) === null || _21 === void 0 ? void 0 : _21.$case) === "trackUnpublished" && ((_22 = object.message) === null || _22 === void 0 ? void 0 : _22.trackUnpublished) !== undefined && ((_23 = object.message) === null || _23 === void 0 ? void 0 : _23.trackUnpublished) !== null) {
+ message.message = {
+ $case: "trackUnpublished",
+ trackUnpublished: TrackUnpublishedResponse.fromPartial(object.message.trackUnpublished)
+ };
+ }
+ if (((_24 = object.message) === null || _24 === void 0 ? void 0 : _24.$case) === "pong" && ((_25 = object.message) === null || _25 === void 0 ? void 0 : _25.pong) !== undefined && ((_26 = object.message) === null || _26 === void 0 ? void 0 : _26.pong) !== null) {
+ message.message = {
+ $case: "pong",
+ pong: object.message.pong
+ };
+ }
+ if (((_27 = object.message) === null || _27 === void 0 ? void 0 : _27.$case) === "reconnect" && ((_28 = object.message) === null || _28 === void 0 ? void 0 : _28.reconnect) !== undefined && ((_29 = object.message) === null || _29 === void 0 ? void 0 : _29.reconnect) !== null) {
+ message.message = {
+ $case: "reconnect",
+ reconnect: ReconnectResponse.fromPartial(object.message.reconnect)
+ };
+ }
+ if (((_30 = object.message) === null || _30 === void 0 ? void 0 : _30.$case) === "pongResp" && ((_31 = object.message) === null || _31 === void 0 ? void 0 : _31.pongResp) !== undefined && ((_32 = object.message) === null || _32 === void 0 ? void 0 : _32.pongResp) !== null) {
+ message.message = {
+ $case: "pongResp",
+ pongResp: Pong.fromPartial(object.message.pongResp)
+ };
+ }
+ if (((_33 = object.message) === null || _33 === void 0 ? void 0 : _33.$case) === "subscriptionResponse" && ((_34 = object.message) === null || _34 === void 0 ? void 0 : _34.subscriptionResponse) !== undefined && ((_35 = object.message) === null || _35 === void 0 ? void 0 : _35.subscriptionResponse) !== null) {
+ message.message = {
+ $case: "subscriptionResponse",
+ subscriptionResponse: SubscriptionResponse.fromPartial(object.message.subscriptionResponse)
+ };
+ }
+ return message;
+ }
+};
+function createBaseSimulcastCodec() {
+ return {
+ codec: "",
+ cid: "",
+ enableSimulcastLayers: false
+ };
+}
+const SimulcastCodec = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.codec !== "") {
+ writer.uint32(10).string(message.codec);
+ }
+ if (message.cid !== "") {
+ writer.uint32(18).string(message.cid);
+ }
+ if (message.enableSimulcastLayers === true) {
+ writer.uint32(24).bool(message.enableSimulcastLayers);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSimulcastCodec();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.codec = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.cid = reader.string();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.enableSimulcastLayers = reader.bool();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ codec: isSet(object.codec) ? String(object.codec) : "",
+ cid: isSet(object.cid) ? String(object.cid) : "",
+ enableSimulcastLayers: isSet(object.enableSimulcastLayers) ? Boolean(object.enableSimulcastLayers) : false
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.codec !== undefined && (obj.codec = message.codec);
+ message.cid !== undefined && (obj.cid = message.cid);
+ message.enableSimulcastLayers !== undefined && (obj.enableSimulcastLayers = message.enableSimulcastLayers);
+ return obj;
+ },
+ create(base) {
+ return SimulcastCodec.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c;
+ const message = createBaseSimulcastCodec();
+ message.codec = (_a = object.codec) !== null && _a !== void 0 ? _a : "";
+ message.cid = (_b = object.cid) !== null && _b !== void 0 ? _b : "";
+ message.enableSimulcastLayers = (_c = object.enableSimulcastLayers) !== null && _c !== void 0 ? _c : false;
+ return message;
+ }
+};
+function createBaseAddTrackRequest() {
+ return {
+ cid: "",
+ name: "",
+ type: 0,
+ width: 0,
+ height: 0,
+ muted: false,
+ disableDtx: false,
+ source: 0,
+ layers: [],
+ simulcastCodecs: [],
+ sid: "",
+ stereo: false,
+ disableRed: false,
+ encryption: 0
+ };
+}
+const AddTrackRequest = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.cid !== "") {
+ writer.uint32(10).string(message.cid);
+ }
+ if (message.name !== "") {
+ writer.uint32(18).string(message.name);
+ }
+ if (message.type !== 0) {
+ writer.uint32(24).int32(message.type);
+ }
+ if (message.width !== 0) {
+ writer.uint32(32).uint32(message.width);
+ }
+ if (message.height !== 0) {
+ writer.uint32(40).uint32(message.height);
+ }
+ if (message.muted === true) {
+ writer.uint32(48).bool(message.muted);
+ }
+ if (message.disableDtx === true) {
+ writer.uint32(56).bool(message.disableDtx);
+ }
+ if (message.source !== 0) {
+ writer.uint32(64).int32(message.source);
+ }
+ for (const v of message.layers) {
+ VideoLayer.encode(v, writer.uint32(74).fork()).ldelim();
+ }
+ for (const v of message.simulcastCodecs) {
+ SimulcastCodec.encode(v, writer.uint32(82).fork()).ldelim();
+ }
+ if (message.sid !== "") {
+ writer.uint32(90).string(message.sid);
+ }
+ if (message.stereo === true) {
+ writer.uint32(96).bool(message.stereo);
+ }
+ if (message.disableRed === true) {
+ writer.uint32(104).bool(message.disableRed);
+ }
+ if (message.encryption !== 0) {
+ writer.uint32(112).int32(message.encryption);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseAddTrackRequest();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.cid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.name = reader.string();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.type = reader.int32();
+ continue;
+ case 4:
+ if (tag !== 32) {
+ break;
+ }
+ message.width = reader.uint32();
+ continue;
+ case 5:
+ if (tag !== 40) {
+ break;
+ }
+ message.height = reader.uint32();
+ continue;
+ case 6:
+ if (tag !== 48) {
+ break;
+ }
+ message.muted = reader.bool();
+ continue;
+ case 7:
+ if (tag !== 56) {
+ break;
+ }
+ message.disableDtx = reader.bool();
+ continue;
+ case 8:
+ if (tag !== 64) {
+ break;
+ }
+ message.source = reader.int32();
+ continue;
+ case 9:
+ if (tag !== 74) {
+ break;
+ }
+ message.layers.push(VideoLayer.decode(reader, reader.uint32()));
+ continue;
+ case 10:
+ if (tag !== 82) {
+ break;
+ }
+ message.simulcastCodecs.push(SimulcastCodec.decode(reader, reader.uint32()));
+ continue;
+ case 11:
+ if (tag !== 90) {
+ break;
+ }
+ message.sid = reader.string();
+ continue;
+ case 12:
+ if (tag !== 96) {
+ break;
+ }
+ message.stereo = reader.bool();
+ continue;
+ case 13:
+ if (tag !== 104) {
+ break;
+ }
+ message.disableRed = reader.bool();
+ continue;
+ case 14:
+ if (tag !== 112) {
+ break;
+ }
+ message.encryption = reader.int32();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ cid: isSet(object.cid) ? String(object.cid) : "",
+ name: isSet(object.name) ? String(object.name) : "",
+ type: isSet(object.type) ? trackTypeFromJSON(object.type) : 0,
+ width: isSet(object.width) ? Number(object.width) : 0,
+ height: isSet(object.height) ? Number(object.height) : 0,
+ muted: isSet(object.muted) ? Boolean(object.muted) : false,
+ disableDtx: isSet(object.disableDtx) ? Boolean(object.disableDtx) : false,
+ source: isSet(object.source) ? trackSourceFromJSON(object.source) : 0,
+ layers: Array.isArray(object === null || object === void 0 ? void 0 : object.layers) ? object.layers.map(e => VideoLayer.fromJSON(e)) : [],
+ simulcastCodecs: Array.isArray(object === null || object === void 0 ? void 0 : object.simulcastCodecs) ? object.simulcastCodecs.map(e => SimulcastCodec.fromJSON(e)) : [],
+ sid: isSet(object.sid) ? String(object.sid) : "",
+ stereo: isSet(object.stereo) ? Boolean(object.stereo) : false,
+ disableRed: isSet(object.disableRed) ? Boolean(object.disableRed) : false,
+ encryption: isSet(object.encryption) ? encryption_TypeFromJSON(object.encryption) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.cid !== undefined && (obj.cid = message.cid);
+ message.name !== undefined && (obj.name = message.name);
+ message.type !== undefined && (obj.type = trackTypeToJSON(message.type));
+ message.width !== undefined && (obj.width = Math.round(message.width));
+ message.height !== undefined && (obj.height = Math.round(message.height));
+ message.muted !== undefined && (obj.muted = message.muted);
+ message.disableDtx !== undefined && (obj.disableDtx = message.disableDtx);
+ message.source !== undefined && (obj.source = trackSourceToJSON(message.source));
+ if (message.layers) {
+ obj.layers = message.layers.map(e => e ? VideoLayer.toJSON(e) : undefined);
+ } else {
+ obj.layers = [];
+ }
+ if (message.simulcastCodecs) {
+ obj.simulcastCodecs = message.simulcastCodecs.map(e => e ? SimulcastCodec.toJSON(e) : undefined);
+ } else {
+ obj.simulcastCodecs = [];
+ }
+ message.sid !== undefined && (obj.sid = message.sid);
+ message.stereo !== undefined && (obj.stereo = message.stereo);
+ message.disableRed !== undefined && (obj.disableRed = message.disableRed);
+ message.encryption !== undefined && (obj.encryption = encryption_TypeToJSON(message.encryption));
+ return obj;
+ },
+ create(base) {
+ return AddTrackRequest.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
+ const message = createBaseAddTrackRequest();
+ message.cid = (_a = object.cid) !== null && _a !== void 0 ? _a : "";
+ message.name = (_b = object.name) !== null && _b !== void 0 ? _b : "";
+ message.type = (_c = object.type) !== null && _c !== void 0 ? _c : 0;
+ message.width = (_d = object.width) !== null && _d !== void 0 ? _d : 0;
+ message.height = (_e = object.height) !== null && _e !== void 0 ? _e : 0;
+ message.muted = (_f = object.muted) !== null && _f !== void 0 ? _f : false;
+ message.disableDtx = (_g = object.disableDtx) !== null && _g !== void 0 ? _g : false;
+ message.source = (_h = object.source) !== null && _h !== void 0 ? _h : 0;
+ message.layers = ((_j = object.layers) === null || _j === void 0 ? void 0 : _j.map(e => VideoLayer.fromPartial(e))) || [];
+ message.simulcastCodecs = ((_k = object.simulcastCodecs) === null || _k === void 0 ? void 0 : _k.map(e => SimulcastCodec.fromPartial(e))) || [];
+ message.sid = (_l = object.sid) !== null && _l !== void 0 ? _l : "";
+ message.stereo = (_m = object.stereo) !== null && _m !== void 0 ? _m : false;
+ message.disableRed = (_o = object.disableRed) !== null && _o !== void 0 ? _o : false;
+ message.encryption = (_p = object.encryption) !== null && _p !== void 0 ? _p : 0;
+ return message;
+ }
+};
+function createBaseTrickleRequest() {
+ return {
+ candidateInit: "",
+ target: 0
+ };
+}
+const TrickleRequest = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.candidateInit !== "") {
+ writer.uint32(10).string(message.candidateInit);
+ }
+ if (message.target !== 0) {
+ writer.uint32(16).int32(message.target);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseTrickleRequest();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.candidateInit = reader.string();
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.target = reader.int32();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ candidateInit: isSet(object.candidateInit) ? String(object.candidateInit) : "",
+ target: isSet(object.target) ? signalTargetFromJSON(object.target) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.candidateInit !== undefined && (obj.candidateInit = message.candidateInit);
+ message.target !== undefined && (obj.target = signalTargetToJSON(message.target));
+ return obj;
+ },
+ create(base) {
+ return TrickleRequest.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseTrickleRequest();
+ message.candidateInit = (_a = object.candidateInit) !== null && _a !== void 0 ? _a : "";
+ message.target = (_b = object.target) !== null && _b !== void 0 ? _b : 0;
+ return message;
+ }
+};
+function createBaseMuteTrackRequest() {
+ return {
+ sid: "",
+ muted: false
+ };
+}
+const MuteTrackRequest = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.sid !== "") {
+ writer.uint32(10).string(message.sid);
+ }
+ if (message.muted === true) {
+ writer.uint32(16).bool(message.muted);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseMuteTrackRequest();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.sid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.muted = reader.bool();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ sid: isSet(object.sid) ? String(object.sid) : "",
+ muted: isSet(object.muted) ? Boolean(object.muted) : false
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.sid !== undefined && (obj.sid = message.sid);
+ message.muted !== undefined && (obj.muted = message.muted);
+ return obj;
+ },
+ create(base) {
+ return MuteTrackRequest.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseMuteTrackRequest();
+ message.sid = (_a = object.sid) !== null && _a !== void 0 ? _a : "";
+ message.muted = (_b = object.muted) !== null && _b !== void 0 ? _b : false;
+ return message;
+ }
+};
+function createBaseJoinResponse() {
+ return {
+ room: undefined,
+ participant: undefined,
+ otherParticipants: [],
+ serverVersion: "",
+ iceServers: [],
+ subscriberPrimary: false,
+ alternativeUrl: "",
+ clientConfiguration: undefined,
+ serverRegion: "",
+ pingTimeout: 0,
+ pingInterval: 0,
+ serverInfo: undefined,
+ sifTrailer: new Uint8Array()
+ };
+}
+const JoinResponse = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.room !== undefined) {
+ Room$1.encode(message.room, writer.uint32(10).fork()).ldelim();
+ }
+ if (message.participant !== undefined) {
+ ParticipantInfo.encode(message.participant, writer.uint32(18).fork()).ldelim();
+ }
+ for (const v of message.otherParticipants) {
+ ParticipantInfo.encode(v, writer.uint32(26).fork()).ldelim();
+ }
+ if (message.serverVersion !== "") {
+ writer.uint32(34).string(message.serverVersion);
+ }
+ for (const v of message.iceServers) {
+ ICEServer.encode(v, writer.uint32(42).fork()).ldelim();
+ }
+ if (message.subscriberPrimary === true) {
+ writer.uint32(48).bool(message.subscriberPrimary);
+ }
+ if (message.alternativeUrl !== "") {
+ writer.uint32(58).string(message.alternativeUrl);
+ }
+ if (message.clientConfiguration !== undefined) {
+ ClientConfiguration.encode(message.clientConfiguration, writer.uint32(66).fork()).ldelim();
+ }
+ if (message.serverRegion !== "") {
+ writer.uint32(74).string(message.serverRegion);
+ }
+ if (message.pingTimeout !== 0) {
+ writer.uint32(80).int32(message.pingTimeout);
+ }
+ if (message.pingInterval !== 0) {
+ writer.uint32(88).int32(message.pingInterval);
+ }
+ if (message.serverInfo !== undefined) {
+ ServerInfo.encode(message.serverInfo, writer.uint32(98).fork()).ldelim();
+ }
+ if (message.sifTrailer.length !== 0) {
+ writer.uint32(106).bytes(message.sifTrailer);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseJoinResponse();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.room = Room$1.decode(reader, reader.uint32());
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.participant = ParticipantInfo.decode(reader, reader.uint32());
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.otherParticipants.push(ParticipantInfo.decode(reader, reader.uint32()));
+ continue;
+ case 4:
+ if (tag !== 34) {
+ break;
+ }
+ message.serverVersion = reader.string();
+ continue;
+ case 5:
+ if (tag !== 42) {
+ break;
+ }
+ message.iceServers.push(ICEServer.decode(reader, reader.uint32()));
+ continue;
+ case 6:
+ if (tag !== 48) {
+ break;
+ }
+ message.subscriberPrimary = reader.bool();
+ continue;
+ case 7:
+ if (tag !== 58) {
+ break;
+ }
+ message.alternativeUrl = reader.string();
+ continue;
+ case 8:
+ if (tag !== 66) {
+ break;
+ }
+ message.clientConfiguration = ClientConfiguration.decode(reader, reader.uint32());
+ continue;
+ case 9:
+ if (tag !== 74) {
+ break;
+ }
+ message.serverRegion = reader.string();
+ continue;
+ case 10:
+ if (tag !== 80) {
+ break;
+ }
+ message.pingTimeout = reader.int32();
+ continue;
+ case 11:
+ if (tag !== 88) {
+ break;
+ }
+ message.pingInterval = reader.int32();
+ continue;
+ case 12:
+ if (tag !== 98) {
+ break;
+ }
+ message.serverInfo = ServerInfo.decode(reader, reader.uint32());
+ continue;
+ case 13:
+ if (tag !== 106) {
+ break;
+ }
+ message.sifTrailer = reader.bytes();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ room: isSet(object.room) ? Room$1.fromJSON(object.room) : undefined,
+ participant: isSet(object.participant) ? ParticipantInfo.fromJSON(object.participant) : undefined,
+ otherParticipants: Array.isArray(object === null || object === void 0 ? void 0 : object.otherParticipants) ? object.otherParticipants.map(e => ParticipantInfo.fromJSON(e)) : [],
+ serverVersion: isSet(object.serverVersion) ? String(object.serverVersion) : "",
+ iceServers: Array.isArray(object === null || object === void 0 ? void 0 : object.iceServers) ? object.iceServers.map(e => ICEServer.fromJSON(e)) : [],
+ subscriberPrimary: isSet(object.subscriberPrimary) ? Boolean(object.subscriberPrimary) : false,
+ alternativeUrl: isSet(object.alternativeUrl) ? String(object.alternativeUrl) : "",
+ clientConfiguration: isSet(object.clientConfiguration) ? ClientConfiguration.fromJSON(object.clientConfiguration) : undefined,
+ serverRegion: isSet(object.serverRegion) ? String(object.serverRegion) : "",
+ pingTimeout: isSet(object.pingTimeout) ? Number(object.pingTimeout) : 0,
+ pingInterval: isSet(object.pingInterval) ? Number(object.pingInterval) : 0,
+ serverInfo: isSet(object.serverInfo) ? ServerInfo.fromJSON(object.serverInfo) : undefined,
+ sifTrailer: isSet(object.sifTrailer) ? bytesFromBase64(object.sifTrailer) : new Uint8Array()
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.room !== undefined && (obj.room = message.room ? Room$1.toJSON(message.room) : undefined);
+ message.participant !== undefined && (obj.participant = message.participant ? ParticipantInfo.toJSON(message.participant) : undefined);
+ if (message.otherParticipants) {
+ obj.otherParticipants = message.otherParticipants.map(e => e ? ParticipantInfo.toJSON(e) : undefined);
+ } else {
+ obj.otherParticipants = [];
+ }
+ message.serverVersion !== undefined && (obj.serverVersion = message.serverVersion);
+ if (message.iceServers) {
+ obj.iceServers = message.iceServers.map(e => e ? ICEServer.toJSON(e) : undefined);
+ } else {
+ obj.iceServers = [];
+ }
+ message.subscriberPrimary !== undefined && (obj.subscriberPrimary = message.subscriberPrimary);
+ message.alternativeUrl !== undefined && (obj.alternativeUrl = message.alternativeUrl);
+ message.clientConfiguration !== undefined && (obj.clientConfiguration = message.clientConfiguration ? ClientConfiguration.toJSON(message.clientConfiguration) : undefined);
+ message.serverRegion !== undefined && (obj.serverRegion = message.serverRegion);
+ message.pingTimeout !== undefined && (obj.pingTimeout = Math.round(message.pingTimeout));
+ message.pingInterval !== undefined && (obj.pingInterval = Math.round(message.pingInterval));
+ message.serverInfo !== undefined && (obj.serverInfo = message.serverInfo ? ServerInfo.toJSON(message.serverInfo) : undefined);
+ message.sifTrailer !== undefined && (obj.sifTrailer = base64FromBytes(message.sifTrailer !== undefined ? message.sifTrailer : new Uint8Array()));
+ return obj;
+ },
+ create(base) {
+ return JoinResponse.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
+ const message = createBaseJoinResponse();
+ message.room = object.room !== undefined && object.room !== null ? Room$1.fromPartial(object.room) : undefined;
+ message.participant = object.participant !== undefined && object.participant !== null ? ParticipantInfo.fromPartial(object.participant) : undefined;
+ message.otherParticipants = ((_a = object.otherParticipants) === null || _a === void 0 ? void 0 : _a.map(e => ParticipantInfo.fromPartial(e))) || [];
+ message.serverVersion = (_b = object.serverVersion) !== null && _b !== void 0 ? _b : "";
+ message.iceServers = ((_c = object.iceServers) === null || _c === void 0 ? void 0 : _c.map(e => ICEServer.fromPartial(e))) || [];
+ message.subscriberPrimary = (_d = object.subscriberPrimary) !== null && _d !== void 0 ? _d : false;
+ message.alternativeUrl = (_e = object.alternativeUrl) !== null && _e !== void 0 ? _e : "";
+ message.clientConfiguration = object.clientConfiguration !== undefined && object.clientConfiguration !== null ? ClientConfiguration.fromPartial(object.clientConfiguration) : undefined;
+ message.serverRegion = (_f = object.serverRegion) !== null && _f !== void 0 ? _f : "";
+ message.pingTimeout = (_g = object.pingTimeout) !== null && _g !== void 0 ? _g : 0;
+ message.pingInterval = (_h = object.pingInterval) !== null && _h !== void 0 ? _h : 0;
+ message.serverInfo = object.serverInfo !== undefined && object.serverInfo !== null ? ServerInfo.fromPartial(object.serverInfo) : undefined;
+ message.sifTrailer = (_j = object.sifTrailer) !== null && _j !== void 0 ? _j : new Uint8Array();
+ return message;
+ }
+};
+function createBaseReconnectResponse() {
+ return {
+ iceServers: [],
+ clientConfiguration: undefined
+ };
+}
+const ReconnectResponse = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ for (const v of message.iceServers) {
+ ICEServer.encode(v, writer.uint32(10).fork()).ldelim();
+ }
+ if (message.clientConfiguration !== undefined) {
+ ClientConfiguration.encode(message.clientConfiguration, writer.uint32(18).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseReconnectResponse();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.iceServers.push(ICEServer.decode(reader, reader.uint32()));
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.clientConfiguration = ClientConfiguration.decode(reader, reader.uint32());
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ iceServers: Array.isArray(object === null || object === void 0 ? void 0 : object.iceServers) ? object.iceServers.map(e => ICEServer.fromJSON(e)) : [],
+ clientConfiguration: isSet(object.clientConfiguration) ? ClientConfiguration.fromJSON(object.clientConfiguration) : undefined
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ if (message.iceServers) {
+ obj.iceServers = message.iceServers.map(e => e ? ICEServer.toJSON(e) : undefined);
+ } else {
+ obj.iceServers = [];
+ }
+ message.clientConfiguration !== undefined && (obj.clientConfiguration = message.clientConfiguration ? ClientConfiguration.toJSON(message.clientConfiguration) : undefined);
+ return obj;
+ },
+ create(base) {
+ return ReconnectResponse.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a;
+ const message = createBaseReconnectResponse();
+ message.iceServers = ((_a = object.iceServers) === null || _a === void 0 ? void 0 : _a.map(e => ICEServer.fromPartial(e))) || [];
+ message.clientConfiguration = object.clientConfiguration !== undefined && object.clientConfiguration !== null ? ClientConfiguration.fromPartial(object.clientConfiguration) : undefined;
+ return message;
+ }
+};
+function createBaseTrackPublishedResponse() {
+ return {
+ cid: "",
+ track: undefined
+ };
+}
+const TrackPublishedResponse = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.cid !== "") {
+ writer.uint32(10).string(message.cid);
+ }
+ if (message.track !== undefined) {
+ TrackInfo.encode(message.track, writer.uint32(18).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseTrackPublishedResponse();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.cid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.track = TrackInfo.decode(reader, reader.uint32());
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ cid: isSet(object.cid) ? String(object.cid) : "",
+ track: isSet(object.track) ? TrackInfo.fromJSON(object.track) : undefined
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.cid !== undefined && (obj.cid = message.cid);
+ message.track !== undefined && (obj.track = message.track ? TrackInfo.toJSON(message.track) : undefined);
+ return obj;
+ },
+ create(base) {
+ return TrackPublishedResponse.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a;
+ const message = createBaseTrackPublishedResponse();
+ message.cid = (_a = object.cid) !== null && _a !== void 0 ? _a : "";
+ message.track = object.track !== undefined && object.track !== null ? TrackInfo.fromPartial(object.track) : undefined;
+ return message;
+ }
+};
+function createBaseTrackUnpublishedResponse() {
+ return {
+ trackSid: ""
+ };
+}
+const TrackUnpublishedResponse = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.trackSid !== "") {
+ writer.uint32(10).string(message.trackSid);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseTrackUnpublishedResponse();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.trackSid = reader.string();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ trackSid: isSet(object.trackSid) ? String(object.trackSid) : ""
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.trackSid !== undefined && (obj.trackSid = message.trackSid);
+ return obj;
+ },
+ create(base) {
+ return TrackUnpublishedResponse.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a;
+ const message = createBaseTrackUnpublishedResponse();
+ message.trackSid = (_a = object.trackSid) !== null && _a !== void 0 ? _a : "";
+ return message;
+ }
+};
+function createBaseSessionDescription() {
+ return {
+ type: "",
+ sdp: ""
+ };
+}
+const SessionDescription = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.type !== "") {
+ writer.uint32(10).string(message.type);
+ }
+ if (message.sdp !== "") {
+ writer.uint32(18).string(message.sdp);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSessionDescription();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.type = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.sdp = reader.string();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ type: isSet(object.type) ? String(object.type) : "",
+ sdp: isSet(object.sdp) ? String(object.sdp) : ""
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.type !== undefined && (obj.type = message.type);
+ message.sdp !== undefined && (obj.sdp = message.sdp);
+ return obj;
+ },
+ create(base) {
+ return SessionDescription.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseSessionDescription();
+ message.type = (_a = object.type) !== null && _a !== void 0 ? _a : "";
+ message.sdp = (_b = object.sdp) !== null && _b !== void 0 ? _b : "";
+ return message;
+ }
+};
+function createBaseParticipantUpdate() {
+ return {
+ participants: []
+ };
+}
+const ParticipantUpdate = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ for (const v of message.participants) {
+ ParticipantInfo.encode(v, writer.uint32(10).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseParticipantUpdate();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.participants.push(ParticipantInfo.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ participants: Array.isArray(object === null || object === void 0 ? void 0 : object.participants) ? object.participants.map(e => ParticipantInfo.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ if (message.participants) {
+ obj.participants = message.participants.map(e => e ? ParticipantInfo.toJSON(e) : undefined);
+ } else {
+ obj.participants = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return ParticipantUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a;
+ const message = createBaseParticipantUpdate();
+ message.participants = ((_a = object.participants) === null || _a === void 0 ? void 0 : _a.map(e => ParticipantInfo.fromPartial(e))) || [];
+ return message;
+ }
+};
+function createBaseUpdateSubscription() {
+ return {
+ trackSids: [],
+ subscribe: false,
+ participantTracks: []
+ };
+}
+const UpdateSubscription = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ for (const v of message.trackSids) {
+ writer.uint32(10).string(v);
+ }
+ if (message.subscribe === true) {
+ writer.uint32(16).bool(message.subscribe);
+ }
+ for (const v of message.participantTracks) {
+ ParticipantTracks.encode(v, writer.uint32(26).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseUpdateSubscription();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.trackSids.push(reader.string());
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.subscribe = reader.bool();
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.participantTracks.push(ParticipantTracks.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ trackSids: Array.isArray(object === null || object === void 0 ? void 0 : object.trackSids) ? object.trackSids.map(e => String(e)) : [],
+ subscribe: isSet(object.subscribe) ? Boolean(object.subscribe) : false,
+ participantTracks: Array.isArray(object === null || object === void 0 ? void 0 : object.participantTracks) ? object.participantTracks.map(e => ParticipantTracks.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ if (message.trackSids) {
+ obj.trackSids = message.trackSids.map(e => e);
+ } else {
+ obj.trackSids = [];
+ }
+ message.subscribe !== undefined && (obj.subscribe = message.subscribe);
+ if (message.participantTracks) {
+ obj.participantTracks = message.participantTracks.map(e => e ? ParticipantTracks.toJSON(e) : undefined);
+ } else {
+ obj.participantTracks = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return UpdateSubscription.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c;
+ const message = createBaseUpdateSubscription();
+ message.trackSids = ((_a = object.trackSids) === null || _a === void 0 ? void 0 : _a.map(e => e)) || [];
+ message.subscribe = (_b = object.subscribe) !== null && _b !== void 0 ? _b : false;
+ message.participantTracks = ((_c = object.participantTracks) === null || _c === void 0 ? void 0 : _c.map(e => ParticipantTracks.fromPartial(e))) || [];
+ return message;
+ }
+};
+function createBaseUpdateTrackSettings() {
+ return {
+ trackSids: [],
+ disabled: false,
+ quality: 0,
+ width: 0,
+ height: 0,
+ fps: 0,
+ priority: 0
+ };
+}
+const UpdateTrackSettings = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ for (const v of message.trackSids) {
+ writer.uint32(10).string(v);
+ }
+ if (message.disabled === true) {
+ writer.uint32(24).bool(message.disabled);
+ }
+ if (message.quality !== 0) {
+ writer.uint32(32).int32(message.quality);
+ }
+ if (message.width !== 0) {
+ writer.uint32(40).uint32(message.width);
+ }
+ if (message.height !== 0) {
+ writer.uint32(48).uint32(message.height);
+ }
+ if (message.fps !== 0) {
+ writer.uint32(56).uint32(message.fps);
+ }
+ if (message.priority !== 0) {
+ writer.uint32(64).uint32(message.priority);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseUpdateTrackSettings();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.trackSids.push(reader.string());
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.disabled = reader.bool();
+ continue;
+ case 4:
+ if (tag !== 32) {
+ break;
+ }
+ message.quality = reader.int32();
+ continue;
+ case 5:
+ if (tag !== 40) {
+ break;
+ }
+ message.width = reader.uint32();
+ continue;
+ case 6:
+ if (tag !== 48) {
+ break;
+ }
+ message.height = reader.uint32();
+ continue;
+ case 7:
+ if (tag !== 56) {
+ break;
+ }
+ message.fps = reader.uint32();
+ continue;
+ case 8:
+ if (tag !== 64) {
+ break;
+ }
+ message.priority = reader.uint32();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ trackSids: Array.isArray(object === null || object === void 0 ? void 0 : object.trackSids) ? object.trackSids.map(e => String(e)) : [],
+ disabled: isSet(object.disabled) ? Boolean(object.disabled) : false,
+ quality: isSet(object.quality) ? videoQualityFromJSON(object.quality) : 0,
+ width: isSet(object.width) ? Number(object.width) : 0,
+ height: isSet(object.height) ? Number(object.height) : 0,
+ fps: isSet(object.fps) ? Number(object.fps) : 0,
+ priority: isSet(object.priority) ? Number(object.priority) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ if (message.trackSids) {
+ obj.trackSids = message.trackSids.map(e => e);
+ } else {
+ obj.trackSids = [];
+ }
+ message.disabled !== undefined && (obj.disabled = message.disabled);
+ message.quality !== undefined && (obj.quality = videoQualityToJSON(message.quality));
+ message.width !== undefined && (obj.width = Math.round(message.width));
+ message.height !== undefined && (obj.height = Math.round(message.height));
+ message.fps !== undefined && (obj.fps = Math.round(message.fps));
+ message.priority !== undefined && (obj.priority = Math.round(message.priority));
+ return obj;
+ },
+ create(base) {
+ return UpdateTrackSettings.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g;
+ const message = createBaseUpdateTrackSettings();
+ message.trackSids = ((_a = object.trackSids) === null || _a === void 0 ? void 0 : _a.map(e => e)) || [];
+ message.disabled = (_b = object.disabled) !== null && _b !== void 0 ? _b : false;
+ message.quality = (_c = object.quality) !== null && _c !== void 0 ? _c : 0;
+ message.width = (_d = object.width) !== null && _d !== void 0 ? _d : 0;
+ message.height = (_e = object.height) !== null && _e !== void 0 ? _e : 0;
+ message.fps = (_f = object.fps) !== null && _f !== void 0 ? _f : 0;
+ message.priority = (_g = object.priority) !== null && _g !== void 0 ? _g : 0;
+ return message;
+ }
+};
+function createBaseLeaveRequest() {
+ return {
+ canReconnect: false,
+ reason: 0
+ };
+}
+const LeaveRequest = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.canReconnect === true) {
+ writer.uint32(8).bool(message.canReconnect);
+ }
+ if (message.reason !== 0) {
+ writer.uint32(16).int32(message.reason);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseLeaveRequest();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.canReconnect = reader.bool();
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.reason = reader.int32();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ canReconnect: isSet(object.canReconnect) ? Boolean(object.canReconnect) : false,
+ reason: isSet(object.reason) ? disconnectReasonFromJSON(object.reason) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.canReconnect !== undefined && (obj.canReconnect = message.canReconnect);
+ message.reason !== undefined && (obj.reason = disconnectReasonToJSON(message.reason));
+ return obj;
+ },
+ create(base) {
+ return LeaveRequest.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseLeaveRequest();
+ message.canReconnect = (_a = object.canReconnect) !== null && _a !== void 0 ? _a : false;
+ message.reason = (_b = object.reason) !== null && _b !== void 0 ? _b : 0;
+ return message;
+ }
+};
+function createBaseUpdateVideoLayers() {
+ return {
+ trackSid: "",
+ layers: []
+ };
+}
+const UpdateVideoLayers = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.trackSid !== "") {
+ writer.uint32(10).string(message.trackSid);
+ }
+ for (const v of message.layers) {
+ VideoLayer.encode(v, writer.uint32(18).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseUpdateVideoLayers();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.trackSid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.layers.push(VideoLayer.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ trackSid: isSet(object.trackSid) ? String(object.trackSid) : "",
+ layers: Array.isArray(object === null || object === void 0 ? void 0 : object.layers) ? object.layers.map(e => VideoLayer.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.trackSid !== undefined && (obj.trackSid = message.trackSid);
+ if (message.layers) {
+ obj.layers = message.layers.map(e => e ? VideoLayer.toJSON(e) : undefined);
+ } else {
+ obj.layers = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return UpdateVideoLayers.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseUpdateVideoLayers();
+ message.trackSid = (_a = object.trackSid) !== null && _a !== void 0 ? _a : "";
+ message.layers = ((_b = object.layers) === null || _b === void 0 ? void 0 : _b.map(e => VideoLayer.fromPartial(e))) || [];
+ return message;
+ }
+};
+function createBaseUpdateParticipantMetadata() {
+ return {
+ metadata: "",
+ name: ""
+ };
+}
+const UpdateParticipantMetadata = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.metadata !== "") {
+ writer.uint32(10).string(message.metadata);
+ }
+ if (message.name !== "") {
+ writer.uint32(18).string(message.name);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseUpdateParticipantMetadata();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.metadata = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.name = reader.string();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ metadata: isSet(object.metadata) ? String(object.metadata) : "",
+ name: isSet(object.name) ? String(object.name) : ""
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.metadata !== undefined && (obj.metadata = message.metadata);
+ message.name !== undefined && (obj.name = message.name);
+ return obj;
+ },
+ create(base) {
+ return UpdateParticipantMetadata.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseUpdateParticipantMetadata();
+ message.metadata = (_a = object.metadata) !== null && _a !== void 0 ? _a : "";
+ message.name = (_b = object.name) !== null && _b !== void 0 ? _b : "";
+ return message;
+ }
+};
+function createBaseICEServer() {
+ return {
+ urls: [],
+ username: "",
+ credential: ""
+ };
+}
+const ICEServer = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ for (const v of message.urls) {
+ writer.uint32(10).string(v);
+ }
+ if (message.username !== "") {
+ writer.uint32(18).string(message.username);
+ }
+ if (message.credential !== "") {
+ writer.uint32(26).string(message.credential);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseICEServer();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.urls.push(reader.string());
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.username = reader.string();
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.credential = reader.string();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ urls: Array.isArray(object === null || object === void 0 ? void 0 : object.urls) ? object.urls.map(e => String(e)) : [],
+ username: isSet(object.username) ? String(object.username) : "",
+ credential: isSet(object.credential) ? String(object.credential) : ""
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ if (message.urls) {
+ obj.urls = message.urls.map(e => e);
+ } else {
+ obj.urls = [];
+ }
+ message.username !== undefined && (obj.username = message.username);
+ message.credential !== undefined && (obj.credential = message.credential);
+ return obj;
+ },
+ create(base) {
+ return ICEServer.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c;
+ const message = createBaseICEServer();
+ message.urls = ((_a = object.urls) === null || _a === void 0 ? void 0 : _a.map(e => e)) || [];
+ message.username = (_b = object.username) !== null && _b !== void 0 ? _b : "";
+ message.credential = (_c = object.credential) !== null && _c !== void 0 ? _c : "";
+ return message;
+ }
+};
+function createBaseSpeakersChanged() {
+ return {
+ speakers: []
+ };
+}
+const SpeakersChanged = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ for (const v of message.speakers) {
+ SpeakerInfo.encode(v, writer.uint32(10).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSpeakersChanged();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.speakers.push(SpeakerInfo.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ speakers: Array.isArray(object === null || object === void 0 ? void 0 : object.speakers) ? object.speakers.map(e => SpeakerInfo.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ if (message.speakers) {
+ obj.speakers = message.speakers.map(e => e ? SpeakerInfo.toJSON(e) : undefined);
+ } else {
+ obj.speakers = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return SpeakersChanged.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a;
+ const message = createBaseSpeakersChanged();
+ message.speakers = ((_a = object.speakers) === null || _a === void 0 ? void 0 : _a.map(e => SpeakerInfo.fromPartial(e))) || [];
+ return message;
+ }
+};
+function createBaseRoomUpdate() {
+ return {
+ room: undefined
+ };
+}
+const RoomUpdate = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.room !== undefined) {
+ Room$1.encode(message.room, writer.uint32(10).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseRoomUpdate();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.room = Room$1.decode(reader, reader.uint32());
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ room: isSet(object.room) ? Room$1.fromJSON(object.room) : undefined
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.room !== undefined && (obj.room = message.room ? Room$1.toJSON(message.room) : undefined);
+ return obj;
+ },
+ create(base) {
+ return RoomUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ const message = createBaseRoomUpdate();
+ message.room = object.room !== undefined && object.room !== null ? Room$1.fromPartial(object.room) : undefined;
+ return message;
+ }
+};
+function createBaseConnectionQualityInfo() {
+ return {
+ participantSid: "",
+ quality: 0,
+ score: 0
+ };
+}
+const ConnectionQualityInfo = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.participantSid !== "") {
+ writer.uint32(10).string(message.participantSid);
+ }
+ if (message.quality !== 0) {
+ writer.uint32(16).int32(message.quality);
+ }
+ if (message.score !== 0) {
+ writer.uint32(29).float(message.score);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseConnectionQualityInfo();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.participantSid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.quality = reader.int32();
+ continue;
+ case 3:
+ if (tag !== 29) {
+ break;
+ }
+ message.score = reader.float();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ participantSid: isSet(object.participantSid) ? String(object.participantSid) : "",
+ quality: isSet(object.quality) ? connectionQualityFromJSON(object.quality) : 0,
+ score: isSet(object.score) ? Number(object.score) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.participantSid !== undefined && (obj.participantSid = message.participantSid);
+ message.quality !== undefined && (obj.quality = connectionQualityToJSON(message.quality));
+ message.score !== undefined && (obj.score = message.score);
+ return obj;
+ },
+ create(base) {
+ return ConnectionQualityInfo.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c;
+ const message = createBaseConnectionQualityInfo();
+ message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
+ message.quality = (_b = object.quality) !== null && _b !== void 0 ? _b : 0;
+ message.score = (_c = object.score) !== null && _c !== void 0 ? _c : 0;
+ return message;
+ }
+};
+function createBaseConnectionQualityUpdate() {
+ return {
+ updates: []
+ };
+}
+const ConnectionQualityUpdate = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ for (const v of message.updates) {
+ ConnectionQualityInfo.encode(v, writer.uint32(10).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseConnectionQualityUpdate();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.updates.push(ConnectionQualityInfo.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ updates: Array.isArray(object === null || object === void 0 ? void 0 : object.updates) ? object.updates.map(e => ConnectionQualityInfo.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ if (message.updates) {
+ obj.updates = message.updates.map(e => e ? ConnectionQualityInfo.toJSON(e) : undefined);
+ } else {
+ obj.updates = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return ConnectionQualityUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a;
+ const message = createBaseConnectionQualityUpdate();
+ message.updates = ((_a = object.updates) === null || _a === void 0 ? void 0 : _a.map(e => ConnectionQualityInfo.fromPartial(e))) || [];
+ return message;
+ }
+};
+function createBaseStreamStateInfo() {
+ return {
+ participantSid: "",
+ trackSid: "",
+ state: 0
+ };
+}
+const StreamStateInfo = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.participantSid !== "") {
+ writer.uint32(10).string(message.participantSid);
+ }
+ if (message.trackSid !== "") {
+ writer.uint32(18).string(message.trackSid);
+ }
+ if (message.state !== 0) {
+ writer.uint32(24).int32(message.state);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseStreamStateInfo();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.participantSid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.trackSid = reader.string();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.state = reader.int32();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ participantSid: isSet(object.participantSid) ? String(object.participantSid) : "",
+ trackSid: isSet(object.trackSid) ? String(object.trackSid) : "",
+ state: isSet(object.state) ? streamStateFromJSON(object.state) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.participantSid !== undefined && (obj.participantSid = message.participantSid);
+ message.trackSid !== undefined && (obj.trackSid = message.trackSid);
+ message.state !== undefined && (obj.state = streamStateToJSON(message.state));
+ return obj;
+ },
+ create(base) {
+ return StreamStateInfo.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c;
+ const message = createBaseStreamStateInfo();
+ message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
+ message.trackSid = (_b = object.trackSid) !== null && _b !== void 0 ? _b : "";
+ message.state = (_c = object.state) !== null && _c !== void 0 ? _c : 0;
+ return message;
+ }
+};
+function createBaseStreamStateUpdate() {
+ return {
+ streamStates: []
+ };
+}
+const StreamStateUpdate = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ for (const v of message.streamStates) {
+ StreamStateInfo.encode(v, writer.uint32(10).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseStreamStateUpdate();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.streamStates.push(StreamStateInfo.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ streamStates: Array.isArray(object === null || object === void 0 ? void 0 : object.streamStates) ? object.streamStates.map(e => StreamStateInfo.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ if (message.streamStates) {
+ obj.streamStates = message.streamStates.map(e => e ? StreamStateInfo.toJSON(e) : undefined);
+ } else {
+ obj.streamStates = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return StreamStateUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a;
+ const message = createBaseStreamStateUpdate();
+ message.streamStates = ((_a = object.streamStates) === null || _a === void 0 ? void 0 : _a.map(e => StreamStateInfo.fromPartial(e))) || [];
+ return message;
+ }
+};
+function createBaseSubscribedQuality() {
+ return {
+ quality: 0,
+ enabled: false
+ };
+}
+const SubscribedQuality = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.quality !== 0) {
+ writer.uint32(8).int32(message.quality);
+ }
+ if (message.enabled === true) {
+ writer.uint32(16).bool(message.enabled);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSubscribedQuality();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.quality = reader.int32();
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.enabled = reader.bool();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ quality: isSet(object.quality) ? videoQualityFromJSON(object.quality) : 0,
+ enabled: isSet(object.enabled) ? Boolean(object.enabled) : false
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.quality !== undefined && (obj.quality = videoQualityToJSON(message.quality));
+ message.enabled !== undefined && (obj.enabled = message.enabled);
+ return obj;
+ },
+ create(base) {
+ return SubscribedQuality.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseSubscribedQuality();
+ message.quality = (_a = object.quality) !== null && _a !== void 0 ? _a : 0;
+ message.enabled = (_b = object.enabled) !== null && _b !== void 0 ? _b : false;
+ return message;
+ }
+};
+function createBaseSubscribedCodec() {
+ return {
+ codec: "",
+ qualities: []
+ };
+}
+const SubscribedCodec = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.codec !== "") {
+ writer.uint32(10).string(message.codec);
+ }
+ for (const v of message.qualities) {
+ SubscribedQuality.encode(v, writer.uint32(18).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSubscribedCodec();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.codec = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.qualities.push(SubscribedQuality.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ codec: isSet(object.codec) ? String(object.codec) : "",
+ qualities: Array.isArray(object === null || object === void 0 ? void 0 : object.qualities) ? object.qualities.map(e => SubscribedQuality.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.codec !== undefined && (obj.codec = message.codec);
+ if (message.qualities) {
+ obj.qualities = message.qualities.map(e => e ? SubscribedQuality.toJSON(e) : undefined);
+ } else {
+ obj.qualities = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return SubscribedCodec.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseSubscribedCodec();
+ message.codec = (_a = object.codec) !== null && _a !== void 0 ? _a : "";
+ message.qualities = ((_b = object.qualities) === null || _b === void 0 ? void 0 : _b.map(e => SubscribedQuality.fromPartial(e))) || [];
+ return message;
+ }
+};
+function createBaseSubscribedQualityUpdate() {
+ return {
+ trackSid: "",
+ subscribedQualities: [],
+ subscribedCodecs: []
+ };
+}
+const SubscribedQualityUpdate = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.trackSid !== "") {
+ writer.uint32(10).string(message.trackSid);
+ }
+ for (const v of message.subscribedQualities) {
+ SubscribedQuality.encode(v, writer.uint32(18).fork()).ldelim();
+ }
+ for (const v of message.subscribedCodecs) {
+ SubscribedCodec.encode(v, writer.uint32(26).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSubscribedQualityUpdate();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.trackSid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.subscribedQualities.push(SubscribedQuality.decode(reader, reader.uint32()));
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.subscribedCodecs.push(SubscribedCodec.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ trackSid: isSet(object.trackSid) ? String(object.trackSid) : "",
+ subscribedQualities: Array.isArray(object === null || object === void 0 ? void 0 : object.subscribedQualities) ? object.subscribedQualities.map(e => SubscribedQuality.fromJSON(e)) : [],
+ subscribedCodecs: Array.isArray(object === null || object === void 0 ? void 0 : object.subscribedCodecs) ? object.subscribedCodecs.map(e => SubscribedCodec.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.trackSid !== undefined && (obj.trackSid = message.trackSid);
+ if (message.subscribedQualities) {
+ obj.subscribedQualities = message.subscribedQualities.map(e => e ? SubscribedQuality.toJSON(e) : undefined);
+ } else {
+ obj.subscribedQualities = [];
+ }
+ if (message.subscribedCodecs) {
+ obj.subscribedCodecs = message.subscribedCodecs.map(e => e ? SubscribedCodec.toJSON(e) : undefined);
+ } else {
+ obj.subscribedCodecs = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return SubscribedQualityUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c;
+ const message = createBaseSubscribedQualityUpdate();
+ message.trackSid = (_a = object.trackSid) !== null && _a !== void 0 ? _a : "";
+ message.subscribedQualities = ((_b = object.subscribedQualities) === null || _b === void 0 ? void 0 : _b.map(e => SubscribedQuality.fromPartial(e))) || [];
+ message.subscribedCodecs = ((_c = object.subscribedCodecs) === null || _c === void 0 ? void 0 : _c.map(e => SubscribedCodec.fromPartial(e))) || [];
+ return message;
+ }
+};
+function createBaseTrackPermission() {
+ return {
+ participantSid: "",
+ allTracks: false,
+ trackSids: [],
+ participantIdentity: ""
+ };
+}
+const TrackPermission = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.participantSid !== "") {
+ writer.uint32(10).string(message.participantSid);
+ }
+ if (message.allTracks === true) {
+ writer.uint32(16).bool(message.allTracks);
+ }
+ for (const v of message.trackSids) {
+ writer.uint32(26).string(v);
+ }
+ if (message.participantIdentity !== "") {
+ writer.uint32(34).string(message.participantIdentity);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseTrackPermission();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.participantSid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.allTracks = reader.bool();
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.trackSids.push(reader.string());
+ continue;
+ case 4:
+ if (tag !== 34) {
+ break;
+ }
+ message.participantIdentity = reader.string();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ participantSid: isSet(object.participantSid) ? String(object.participantSid) : "",
+ allTracks: isSet(object.allTracks) ? Boolean(object.allTracks) : false,
+ trackSids: Array.isArray(object === null || object === void 0 ? void 0 : object.trackSids) ? object.trackSids.map(e => String(e)) : [],
+ participantIdentity: isSet(object.participantIdentity) ? String(object.participantIdentity) : ""
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.participantSid !== undefined && (obj.participantSid = message.participantSid);
+ message.allTracks !== undefined && (obj.allTracks = message.allTracks);
+ if (message.trackSids) {
+ obj.trackSids = message.trackSids.map(e => e);
+ } else {
+ obj.trackSids = [];
+ }
+ message.participantIdentity !== undefined && (obj.participantIdentity = message.participantIdentity);
+ return obj;
+ },
+ create(base) {
+ return TrackPermission.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d;
+ const message = createBaseTrackPermission();
+ message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
+ message.allTracks = (_b = object.allTracks) !== null && _b !== void 0 ? _b : false;
+ message.trackSids = ((_c = object.trackSids) === null || _c === void 0 ? void 0 : _c.map(e => e)) || [];
+ message.participantIdentity = (_d = object.participantIdentity) !== null && _d !== void 0 ? _d : "";
+ return message;
+ }
+};
+function createBaseSubscriptionPermission() {
+ return {
+ allParticipants: false,
+ trackPermissions: []
+ };
+}
+const SubscriptionPermission = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.allParticipants === true) {
+ writer.uint32(8).bool(message.allParticipants);
+ }
+ for (const v of message.trackPermissions) {
+ TrackPermission.encode(v, writer.uint32(18).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSubscriptionPermission();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.allParticipants = reader.bool();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.trackPermissions.push(TrackPermission.decode(reader, reader.uint32()));
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ allParticipants: isSet(object.allParticipants) ? Boolean(object.allParticipants) : false,
+ trackPermissions: Array.isArray(object === null || object === void 0 ? void 0 : object.trackPermissions) ? object.trackPermissions.map(e => TrackPermission.fromJSON(e)) : []
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.allParticipants !== undefined && (obj.allParticipants = message.allParticipants);
+ if (message.trackPermissions) {
+ obj.trackPermissions = message.trackPermissions.map(e => e ? TrackPermission.toJSON(e) : undefined);
+ } else {
+ obj.trackPermissions = [];
+ }
+ return obj;
+ },
+ create(base) {
+ return SubscriptionPermission.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseSubscriptionPermission();
+ message.allParticipants = (_a = object.allParticipants) !== null && _a !== void 0 ? _a : false;
+ message.trackPermissions = ((_b = object.trackPermissions) === null || _b === void 0 ? void 0 : _b.map(e => TrackPermission.fromPartial(e))) || [];
+ return message;
+ }
+};
+function createBaseSubscriptionPermissionUpdate() {
+ return {
+ participantSid: "",
+ trackSid: "",
+ allowed: false
+ };
+}
+const SubscriptionPermissionUpdate = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.participantSid !== "") {
+ writer.uint32(10).string(message.participantSid);
+ }
+ if (message.trackSid !== "") {
+ writer.uint32(18).string(message.trackSid);
+ }
+ if (message.allowed === true) {
+ writer.uint32(24).bool(message.allowed);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSubscriptionPermissionUpdate();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.participantSid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.trackSid = reader.string();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.allowed = reader.bool();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ participantSid: isSet(object.participantSid) ? String(object.participantSid) : "",
+ trackSid: isSet(object.trackSid) ? String(object.trackSid) : "",
+ allowed: isSet(object.allowed) ? Boolean(object.allowed) : false
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.participantSid !== undefined && (obj.participantSid = message.participantSid);
+ message.trackSid !== undefined && (obj.trackSid = message.trackSid);
+ message.allowed !== undefined && (obj.allowed = message.allowed);
+ return obj;
+ },
+ create(base) {
+ return SubscriptionPermissionUpdate.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c;
+ const message = createBaseSubscriptionPermissionUpdate();
+ message.participantSid = (_a = object.participantSid) !== null && _a !== void 0 ? _a : "";
+ message.trackSid = (_b = object.trackSid) !== null && _b !== void 0 ? _b : "";
+ message.allowed = (_c = object.allowed) !== null && _c !== void 0 ? _c : false;
+ return message;
+ }
+};
+function createBaseSyncState() {
+ return {
+ answer: undefined,
+ subscription: undefined,
+ publishTracks: [],
+ dataChannels: [],
+ offer: undefined
+ };
+}
+const SyncState = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.answer !== undefined) {
+ SessionDescription.encode(message.answer, writer.uint32(10).fork()).ldelim();
+ }
+ if (message.subscription !== undefined) {
+ UpdateSubscription.encode(message.subscription, writer.uint32(18).fork()).ldelim();
+ }
+ for (const v of message.publishTracks) {
+ TrackPublishedResponse.encode(v, writer.uint32(26).fork()).ldelim();
+ }
+ for (const v of message.dataChannels) {
+ DataChannelInfo.encode(v, writer.uint32(34).fork()).ldelim();
+ }
+ if (message.offer !== undefined) {
+ SessionDescription.encode(message.offer, writer.uint32(42).fork()).ldelim();
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSyncState();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.answer = SessionDescription.decode(reader, reader.uint32());
+ continue;
+ case 2:
+ if (tag !== 18) {
+ break;
+ }
+ message.subscription = UpdateSubscription.decode(reader, reader.uint32());
+ continue;
+ case 3:
+ if (tag !== 26) {
+ break;
+ }
+ message.publishTracks.push(TrackPublishedResponse.decode(reader, reader.uint32()));
+ continue;
+ case 4:
+ if (tag !== 34) {
+ break;
+ }
+ message.dataChannels.push(DataChannelInfo.decode(reader, reader.uint32()));
+ continue;
+ case 5:
+ if (tag !== 42) {
+ break;
+ }
+ message.offer = SessionDescription.decode(reader, reader.uint32());
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ answer: isSet(object.answer) ? SessionDescription.fromJSON(object.answer) : undefined,
+ subscription: isSet(object.subscription) ? UpdateSubscription.fromJSON(object.subscription) : undefined,
+ publishTracks: Array.isArray(object === null || object === void 0 ? void 0 : object.publishTracks) ? object.publishTracks.map(e => TrackPublishedResponse.fromJSON(e)) : [],
+ dataChannels: Array.isArray(object === null || object === void 0 ? void 0 : object.dataChannels) ? object.dataChannels.map(e => DataChannelInfo.fromJSON(e)) : [],
+ offer: isSet(object.offer) ? SessionDescription.fromJSON(object.offer) : undefined
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.answer !== undefined && (obj.answer = message.answer ? SessionDescription.toJSON(message.answer) : undefined);
+ message.subscription !== undefined && (obj.subscription = message.subscription ? UpdateSubscription.toJSON(message.subscription) : undefined);
+ if (message.publishTracks) {
+ obj.publishTracks = message.publishTracks.map(e => e ? TrackPublishedResponse.toJSON(e) : undefined);
+ } else {
+ obj.publishTracks = [];
+ }
+ if (message.dataChannels) {
+ obj.dataChannels = message.dataChannels.map(e => e ? DataChannelInfo.toJSON(e) : undefined);
+ } else {
+ obj.dataChannels = [];
+ }
+ message.offer !== undefined && (obj.offer = message.offer ? SessionDescription.toJSON(message.offer) : undefined);
+ return obj;
+ },
+ create(base) {
+ return SyncState.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseSyncState();
+ message.answer = object.answer !== undefined && object.answer !== null ? SessionDescription.fromPartial(object.answer) : undefined;
+ message.subscription = object.subscription !== undefined && object.subscription !== null ? UpdateSubscription.fromPartial(object.subscription) : undefined;
+ message.publishTracks = ((_a = object.publishTracks) === null || _a === void 0 ? void 0 : _a.map(e => TrackPublishedResponse.fromPartial(e))) || [];
+ message.dataChannels = ((_b = object.dataChannels) === null || _b === void 0 ? void 0 : _b.map(e => DataChannelInfo.fromPartial(e))) || [];
+ message.offer = object.offer !== undefined && object.offer !== null ? SessionDescription.fromPartial(object.offer) : undefined;
+ return message;
+ }
+};
+function createBaseDataChannelInfo() {
+ return {
+ label: "",
+ id: 0,
+ target: 0
+ };
+}
+const DataChannelInfo = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.label !== "") {
+ writer.uint32(10).string(message.label);
+ }
+ if (message.id !== 0) {
+ writer.uint32(16).uint32(message.id);
+ }
+ if (message.target !== 0) {
+ writer.uint32(24).int32(message.target);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseDataChannelInfo();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.label = reader.string();
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.id = reader.uint32();
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.target = reader.int32();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ label: isSet(object.label) ? String(object.label) : "",
+ id: isSet(object.id) ? Number(object.id) : 0,
+ target: isSet(object.target) ? signalTargetFromJSON(object.target) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.label !== undefined && (obj.label = message.label);
+ message.id !== undefined && (obj.id = Math.round(message.id));
+ message.target !== undefined && (obj.target = signalTargetToJSON(message.target));
+ return obj;
+ },
+ create(base) {
+ return DataChannelInfo.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c;
+ const message = createBaseDataChannelInfo();
+ message.label = (_a = object.label) !== null && _a !== void 0 ? _a : "";
+ message.id = (_b = object.id) !== null && _b !== void 0 ? _b : 0;
+ message.target = (_c = object.target) !== null && _c !== void 0 ? _c : 0;
+ return message;
+ }
+};
+function createBaseSimulateScenario() {
+ return {
+ scenario: undefined
+ };
+}
+const SimulateScenario = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ var _a;
+ switch ((_a = message.scenario) === null || _a === void 0 ? void 0 : _a.$case) {
+ case "speakerUpdate":
+ writer.uint32(8).int32(message.scenario.speakerUpdate);
+ break;
+ case "nodeFailure":
+ writer.uint32(16).bool(message.scenario.nodeFailure);
+ break;
+ case "migration":
+ writer.uint32(24).bool(message.scenario.migration);
+ break;
+ case "serverLeave":
+ writer.uint32(32).bool(message.scenario.serverLeave);
+ break;
+ case "switchCandidateProtocol":
+ writer.uint32(40).int32(message.scenario.switchCandidateProtocol);
+ break;
+ case "subscriberBandwidth":
+ writer.uint32(48).int64(message.scenario.subscriberBandwidth);
+ break;
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSimulateScenario();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.scenario = {
+ $case: "speakerUpdate",
+ speakerUpdate: reader.int32()
+ };
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.scenario = {
+ $case: "nodeFailure",
+ nodeFailure: reader.bool()
+ };
+ continue;
+ case 3:
+ if (tag !== 24) {
+ break;
+ }
+ message.scenario = {
+ $case: "migration",
+ migration: reader.bool()
+ };
+ continue;
+ case 4:
+ if (tag !== 32) {
+ break;
+ }
+ message.scenario = {
+ $case: "serverLeave",
+ serverLeave: reader.bool()
+ };
+ continue;
+ case 5:
+ if (tag !== 40) {
+ break;
+ }
+ message.scenario = {
+ $case: "switchCandidateProtocol",
+ switchCandidateProtocol: reader.int32()
+ };
+ continue;
+ case 6:
+ if (tag !== 48) {
+ break;
+ }
+ message.scenario = {
+ $case: "subscriberBandwidth",
+ subscriberBandwidth: longToNumber(reader.int64())
+ };
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ scenario: isSet(object.speakerUpdate) ? {
+ $case: "speakerUpdate",
+ speakerUpdate: Number(object.speakerUpdate)
+ } : isSet(object.nodeFailure) ? {
+ $case: "nodeFailure",
+ nodeFailure: Boolean(object.nodeFailure)
+ } : isSet(object.migration) ? {
+ $case: "migration",
+ migration: Boolean(object.migration)
+ } : isSet(object.serverLeave) ? {
+ $case: "serverLeave",
+ serverLeave: Boolean(object.serverLeave)
+ } : isSet(object.switchCandidateProtocol) ? {
+ $case: "switchCandidateProtocol",
+ switchCandidateProtocol: candidateProtocolFromJSON(object.switchCandidateProtocol)
+ } : isSet(object.subscriberBandwidth) ? {
+ $case: "subscriberBandwidth",
+ subscriberBandwidth: Number(object.subscriberBandwidth)
+ } : undefined
+ };
+ },
+ toJSON(message) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
+ const obj = {};
+ ((_a = message.scenario) === null || _a === void 0 ? void 0 : _a.$case) === "speakerUpdate" && (obj.speakerUpdate = Math.round((_b = message.scenario) === null || _b === void 0 ? void 0 : _b.speakerUpdate));
+ ((_c = message.scenario) === null || _c === void 0 ? void 0 : _c.$case) === "nodeFailure" && (obj.nodeFailure = (_d = message.scenario) === null || _d === void 0 ? void 0 : _d.nodeFailure);
+ ((_e = message.scenario) === null || _e === void 0 ? void 0 : _e.$case) === "migration" && (obj.migration = (_f = message.scenario) === null || _f === void 0 ? void 0 : _f.migration);
+ ((_g = message.scenario) === null || _g === void 0 ? void 0 : _g.$case) === "serverLeave" && (obj.serverLeave = (_h = message.scenario) === null || _h === void 0 ? void 0 : _h.serverLeave);
+ ((_j = message.scenario) === null || _j === void 0 ? void 0 : _j.$case) === "switchCandidateProtocol" && (obj.switchCandidateProtocol = ((_k = message.scenario) === null || _k === void 0 ? void 0 : _k.switchCandidateProtocol) !== undefined ? candidateProtocolToJSON((_l = message.scenario) === null || _l === void 0 ? void 0 : _l.switchCandidateProtocol) : undefined);
+ ((_m = message.scenario) === null || _m === void 0 ? void 0 : _m.$case) === "subscriberBandwidth" && (obj.subscriberBandwidth = Math.round((_o = message.scenario) === null || _o === void 0 ? void 0 : _o.subscriberBandwidth));
+ return obj;
+ },
+ create(base) {
+ return SimulateScenario.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
+ const message = createBaseSimulateScenario();
+ if (((_a = object.scenario) === null || _a === void 0 ? void 0 : _a.$case) === "speakerUpdate" && ((_b = object.scenario) === null || _b === void 0 ? void 0 : _b.speakerUpdate) !== undefined && ((_c = object.scenario) === null || _c === void 0 ? void 0 : _c.speakerUpdate) !== null) {
+ message.scenario = {
+ $case: "speakerUpdate",
+ speakerUpdate: object.scenario.speakerUpdate
+ };
+ }
+ if (((_d = object.scenario) === null || _d === void 0 ? void 0 : _d.$case) === "nodeFailure" && ((_e = object.scenario) === null || _e === void 0 ? void 0 : _e.nodeFailure) !== undefined && ((_f = object.scenario) === null || _f === void 0 ? void 0 : _f.nodeFailure) !== null) {
+ message.scenario = {
+ $case: "nodeFailure",
+ nodeFailure: object.scenario.nodeFailure
+ };
+ }
+ if (((_g = object.scenario) === null || _g === void 0 ? void 0 : _g.$case) === "migration" && ((_h = object.scenario) === null || _h === void 0 ? void 0 : _h.migration) !== undefined && ((_j = object.scenario) === null || _j === void 0 ? void 0 : _j.migration) !== null) {
+ message.scenario = {
+ $case: "migration",
+ migration: object.scenario.migration
+ };
+ }
+ if (((_k = object.scenario) === null || _k === void 0 ? void 0 : _k.$case) === "serverLeave" && ((_l = object.scenario) === null || _l === void 0 ? void 0 : _l.serverLeave) !== undefined && ((_m = object.scenario) === null || _m === void 0 ? void 0 : _m.serverLeave) !== null) {
+ message.scenario = {
+ $case: "serverLeave",
+ serverLeave: object.scenario.serverLeave
+ };
+ }
+ if (((_o = object.scenario) === null || _o === void 0 ? void 0 : _o.$case) === "switchCandidateProtocol" && ((_p = object.scenario) === null || _p === void 0 ? void 0 : _p.switchCandidateProtocol) !== undefined && ((_q = object.scenario) === null || _q === void 0 ? void 0 : _q.switchCandidateProtocol) !== null) {
+ message.scenario = {
+ $case: "switchCandidateProtocol",
+ switchCandidateProtocol: object.scenario.switchCandidateProtocol
+ };
+ }
+ if (((_r = object.scenario) === null || _r === void 0 ? void 0 : _r.$case) === "subscriberBandwidth" && ((_s = object.scenario) === null || _s === void 0 ? void 0 : _s.subscriberBandwidth) !== undefined && ((_t = object.scenario) === null || _t === void 0 ? void 0 : _t.subscriberBandwidth) !== null) {
+ message.scenario = {
+ $case: "subscriberBandwidth",
+ subscriberBandwidth: object.scenario.subscriberBandwidth
+ };
+ }
+ return message;
+ }
+};
+function createBasePing() {
+ return {
+ timestamp: 0,
+ rtt: 0
+ };
+}
+const Ping = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.timestamp !== 0) {
+ writer.uint32(8).int64(message.timestamp);
+ }
+ if (message.rtt !== 0) {
+ writer.uint32(16).int64(message.rtt);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBasePing();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.timestamp = longToNumber(reader.int64());
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.rtt = longToNumber(reader.int64());
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ timestamp: isSet(object.timestamp) ? Number(object.timestamp) : 0,
+ rtt: isSet(object.rtt) ? Number(object.rtt) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.timestamp !== undefined && (obj.timestamp = Math.round(message.timestamp));
+ message.rtt !== undefined && (obj.rtt = Math.round(message.rtt));
+ return obj;
+ },
+ create(base) {
+ return Ping.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBasePing();
+ message.timestamp = (_a = object.timestamp) !== null && _a !== void 0 ? _a : 0;
+ message.rtt = (_b = object.rtt) !== null && _b !== void 0 ? _b : 0;
+ return message;
+ }
+};
+function createBasePong() {
+ return {
+ lastPingTimestamp: 0,
+ timestamp: 0
+ };
+}
+const Pong = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.lastPingTimestamp !== 0) {
+ writer.uint32(8).int64(message.lastPingTimestamp);
+ }
+ if (message.timestamp !== 0) {
+ writer.uint32(16).int64(message.timestamp);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBasePong();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 8) {
+ break;
+ }
+ message.lastPingTimestamp = longToNumber(reader.int64());
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.timestamp = longToNumber(reader.int64());
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ lastPingTimestamp: isSet(object.lastPingTimestamp) ? Number(object.lastPingTimestamp) : 0,
+ timestamp: isSet(object.timestamp) ? Number(object.timestamp) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.lastPingTimestamp !== undefined && (obj.lastPingTimestamp = Math.round(message.lastPingTimestamp));
+ message.timestamp !== undefined && (obj.timestamp = Math.round(message.timestamp));
+ return obj;
+ },
+ create(base) {
+ return Pong.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBasePong();
+ message.lastPingTimestamp = (_a = object.lastPingTimestamp) !== null && _a !== void 0 ? _a : 0;
+ message.timestamp = (_b = object.timestamp) !== null && _b !== void 0 ? _b : 0;
+ return message;
+ }
+};
+function createBaseSubscriptionResponse() {
+ return {
+ trackSid: "",
+ err: 0
+ };
+}
+const SubscriptionResponse = {
+ encode(message) {
+ let writer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _m0.Writer.create();
+ if (message.trackSid !== "") {
+ writer.uint32(10).string(message.trackSid);
+ }
+ if (message.err !== 0) {
+ writer.uint32(16).int32(message.err);
+ }
+ return writer;
+ },
+ decode(input, length) {
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
+ let end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseSubscriptionResponse();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1:
+ if (tag !== 10) {
+ break;
+ }
+ message.trackSid = reader.string();
+ continue;
+ case 2:
+ if (tag !== 16) {
+ break;
+ }
+ message.err = reader.int32();
+ continue;
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skipType(tag & 7);
+ }
+ return message;
+ },
+ fromJSON(object) {
+ return {
+ trackSid: isSet(object.trackSid) ? String(object.trackSid) : "",
+ err: isSet(object.err) ? subscriptionErrorFromJSON(object.err) : 0
+ };
+ },
+ toJSON(message) {
+ const obj = {};
+ message.trackSid !== undefined && (obj.trackSid = message.trackSid);
+ message.err !== undefined && (obj.err = subscriptionErrorToJSON(message.err));
+ return obj;
+ },
+ create(base) {
+ return SubscriptionResponse.fromPartial(base !== null && base !== void 0 ? base : {});
+ },
+ fromPartial(object) {
+ var _a, _b;
+ const message = createBaseSubscriptionResponse();
+ message.trackSid = (_a = object.trackSid) !== null && _a !== void 0 ? _a : "";
+ message.err = (_b = object.err) !== null && _b !== void 0 ? _b : 0;
+ return message;
+ }
+};
+var tsProtoGlobalThis = (() => {
+ if (typeof globalThis !== "undefined") {
+ return globalThis;
+ }
+ if (typeof self !== "undefined") {
+ return self;
+ }
+ if (typeof window !== "undefined") {
+ return window;
+ }
+ if (typeof global !== "undefined") {
+ return global;
+ }
+ throw "Unable to locate global object";
+})();
+function bytesFromBase64(b64) {
+ if (tsProtoGlobalThis.Buffer) {
+ return Uint8Array.from(tsProtoGlobalThis.Buffer.from(b64, "base64"));
+ } else {
+ const bin = tsProtoGlobalThis.atob(b64);
+ const arr = new Uint8Array(bin.length);
+ for (let i = 0; i < bin.length; ++i) {
+ arr[i] = bin.charCodeAt(i);
+ }
+ return arr;
+ }
+}
+function base64FromBytes(arr) {
+ if (tsProtoGlobalThis.Buffer) {
+ return tsProtoGlobalThis.Buffer.from(arr).toString("base64");
+ } else {
+ const bin = [];
+ arr.forEach(byte => {
+ bin.push(String.fromCharCode(byte));
+ });
+ return tsProtoGlobalThis.btoa(bin.join(""));
+ }
+}
+function longToNumber(long) {
+ if (long.gt(Number.MAX_SAFE_INTEGER)) {
+ throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
+ }
+ return long.toNumber();
+}
+if (_m0.util.Long !== Long$1) {
+ _m0.util.Long = Long$1;
+ _m0.configure();
+}
+function isSet(value) {
+ return value !== null && value !== undefined;
+}
+
+class LivekitError extends Error {
+ constructor(code, message) {
+ super(message || 'an error has occured');
+ this.code = code;
+ }
+}
+class ConnectionError extends LivekitError {
+ constructor(message, reason, status) {
+ super(1, message);
+ this.status = status;
+ this.reason = reason;
+ }
+}
+class DeviceUnsupportedError extends LivekitError {
+ constructor(message) {
+ super(21, message !== null && message !== void 0 ? message : 'device is unsupported');
+ }
+}
+class TrackInvalidError extends LivekitError {
+ constructor(message) {
+ super(20, message !== null && message !== void 0 ? message : 'track is invalid');
+ }
+}
+class UnsupportedServer extends LivekitError {
+ constructor(message) {
+ super(10, message !== null && message !== void 0 ? message : 'unsupported server');
+ }
+}
+class UnexpectedConnectionState extends LivekitError {
+ constructor(message) {
+ super(12, message !== null && message !== void 0 ? message : 'unexpected connection state');
+ }
+}
+class NegotiationError extends LivekitError {
+ constructor(message) {
+ super(13, message !== null && message !== void 0 ? message : 'unable to negotiate');
+ }
+}
+class PublishDataError extends LivekitError {
+ constructor(message) {
+ super(13, message !== null && message !== void 0 ? message : 'unable to publish data');
+ }
+}
+var MediaDeviceFailure;
+(function (MediaDeviceFailure) {
+ // user rejected permissions
+ MediaDeviceFailure["PermissionDenied"] = "PermissionDenied";
+ // device is not available
+ MediaDeviceFailure["NotFound"] = "NotFound";
+ // device is in use. On Windows, only a single tab may get access to a device at a time.
+ MediaDeviceFailure["DeviceInUse"] = "DeviceInUse";
+ MediaDeviceFailure["Other"] = "Other";
+})(MediaDeviceFailure || (MediaDeviceFailure = {}));
+(function (MediaDeviceFailure) {
+ function getFailure(error) {
+ if (error && 'name' in error) {
+ if (error.name === 'NotFoundError' || error.name === 'DevicesNotFoundError') {
+ return MediaDeviceFailure.NotFound;
+ }
+ if (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError') {
+ return MediaDeviceFailure.PermissionDenied;
+ }
+ if (error.name === 'NotReadableError' || error.name === 'TrackStartError') {
+ return MediaDeviceFailure.DeviceInUse;
+ }
+ return MediaDeviceFailure.Other;
+ }
+ }
+ MediaDeviceFailure.getFailure = getFailure;
+})(MediaDeviceFailure || (MediaDeviceFailure = {}));
+
+/**
+ * Timers that can be overridden with platform specific implementations
+ * that ensure that they are fired. These should be used when it is critical
+ * that the timer fires on time.
+ */
+class CriticalTimers {}
+// eslint-disable-next-line @typescript-eslint/no-implied-eval
+CriticalTimers.setTimeout = function () {
+ return setTimeout(...arguments);
+};
+// eslint-disable-next-line @typescript-eslint/no-implied-eval
+CriticalTimers.setInterval = function () {
+ return setInterval(...arguments);
+};
+CriticalTimers.clearTimeout = function () {
+ return clearTimeout(...arguments);
+};
+CriticalTimers.clearInterval = function () {
+ return clearInterval(...arguments);
+};
+
+// tiny, simplified version of https://github.com/lancedikson/bowser/blob/master/src/parser-browsers.js
+// reduced to only differentiate Chrome(ium) based browsers / Firefox / Safari
+const commonVersionIdentifier = /version\/(\d+(\.?_?\d+)+)/i;
+let browserDetails;
+/**
+ * @internal
+ */
+function getBrowser(userAgent) {
+ let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+ if (typeof userAgent === 'undefined' && typeof navigator === 'undefined') {
+ return;
+ }
+ const ua = (userAgent !== null && userAgent !== void 0 ? userAgent : navigator.userAgent).toLowerCase();
+ if (browserDetails === undefined || force) {
+ const browser = browsersList.find(_ref => {
+ let {
+ test
+ } = _ref;
+ return test.test(ua);
+ });
+ browserDetails = browser === null || browser === void 0 ? void 0 : browser.describe(ua);
+ }
+ return browserDetails;
+}
+const browsersList = [{
+ test: /firefox|iceweasel|fxios/i,
+ describe(ua) {
+ const browser = {
+ name: 'Firefox',
+ version: getMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, ua)
+ };
+ return browser;
+ }
+}, {
+ test: /chrom|crios|crmo/i,
+ describe(ua) {
+ const browser = {
+ name: 'Chrome',
+ version: getMatch(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i, ua)
+ };
+ return browser;
+ }
+}, /* Safari */
+{
+ test: /safari|applewebkit/i,
+ describe(ua) {
+ const browser = {
+ name: 'Safari',
+ version: getMatch(commonVersionIdentifier, ua)
+ };
+ return browser;
+ }
+}];
+function getMatch(exp, ua) {
+ let id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
+ const match = ua.match(exp);
+ return match && match.length >= id && match[id] || '';
+}
+
+var version$1 = "1.10.0";
+
+const version = version$1;
+const protocolVersion = 9;
+
+function mergeDefaultOptions(options, audioDefaults, videoDefaults) {
+ const opts = Object.assign({}, options);
+ if (opts.audio === true) opts.audio = {};
+ if (opts.video === true) opts.video = {};
+ // use defaults
+ if (opts.audio) {
+ mergeObjectWithoutOverwriting(opts.audio, audioDefaults);
+ }
+ if (opts.video) {
+ mergeObjectWithoutOverwriting(opts.video, videoDefaults);
+ }
+ return opts;
+}
+function mergeObjectWithoutOverwriting(mainObject, objectToMerge) {
+ Object.keys(objectToMerge).forEach(key => {
+ if (mainObject[key] === undefined) mainObject[key] = objectToMerge[key];
+ });
+ return mainObject;
+}
+function constraintsForOptions(options) {
+ const constraints = {};
+ if (options.video) {
+ // default video options
+ if (typeof options.video === 'object') {
+ const videoOptions = {};
+ const target = videoOptions;
+ const source = options.video;
+ Object.keys(source).forEach(key => {
+ switch (key) {
+ case 'resolution':
+ // flatten VideoResolution fields
+ mergeObjectWithoutOverwriting(target, source.resolution);
+ break;
+ default:
+ target[key] = source[key];
+ }
+ });
+ constraints.video = videoOptions;
+ } else {
+ constraints.video = options.video;
+ }
+ } else {
+ constraints.video = false;
+ }
+ if (options.audio) {
+ if (typeof options.audio === 'object') {
+ constraints.audio = options.audio;
+ } else {
+ constraints.audio = true;
+ }
+ } else {
+ constraints.audio = false;
+ }
+ return constraints;
+}
+/**
+ * This function detects silence on a given [[Track]] instance.
+ * Returns true if the track seems to be entirely silent.
+ */
+function detectSilence(track) {
+ let timeOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;
+ return __awaiter(this, void 0, void 0, function* () {
+ const ctx = getNewAudioContext();
+ if (ctx) {
+ const analyser = ctx.createAnalyser();
+ analyser.fftSize = 2048;
+ const bufferLength = analyser.frequencyBinCount;
+ const dataArray = new Uint8Array(bufferLength);
+ const source = ctx.createMediaStreamSource(new MediaStream([track.mediaStreamTrack]));
+ source.connect(analyser);
+ yield sleep(timeOffset);
+ analyser.getByteTimeDomainData(dataArray);
+ const someNoise = dataArray.some(sample => sample !== 128 && sample !== 0);
+ ctx.close();
+ return !someNoise;
+ }
+ return false;
+ });
+}
+/**
+ * @internal
+ */
+function getNewAudioContext() {
+ const AudioContext =
+ // @ts-ignore
+ typeof window !== 'undefined' && (window.AudioContext || window.webkitAudioContext);
+ if (AudioContext) {
+ return new AudioContext({
+ latencyHint: 'interactive'
+ });
+ }
+}
+
+const separator = '|';
+const ddExtensionURI = 'https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension';
+function unpackStreamId(packed) {
+ const parts = packed.split(separator);
+ if (parts.length > 1) {
+ return [parts[0], packed.substr(parts[0].length + 1)];
+ }
+ return [packed, ''];
+}
+function sleep(duration) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return new Promise(resolve => setTimeout(resolve, duration));
+ });
+}
+/** @internal */
+function supportsTransceiver() {
+ return 'addTransceiver' in RTCPeerConnection.prototype;
+}
+/** @internal */
+function supportsAddTrack() {
+ return 'addTrack' in RTCPeerConnection.prototype;
+}
+function supportsAdaptiveStream() {
+ return typeof ResizeObserver !== undefined && typeof IntersectionObserver !== undefined;
+}
+function supportsDynacast() {
+ return supportsTransceiver();
+}
+function supportsAV1() {
+ if (!('getCapabilities' in RTCRtpSender)) {
+ return false;
+ }
+ const capabilities = RTCRtpSender.getCapabilities('video');
+ let hasAV1 = false;
+ if (capabilities) {
+ for (const codec of capabilities.codecs) {
+ if (codec.mimeType === 'video/AV1') {
+ hasAV1 = true;
+ break;
+ }
+ }
+ }
+ return hasAV1;
+}
+function supportsVP9() {
+ if (!('getCapabilities' in RTCRtpSender)) {
+ // technically speaking FireFox supports VP9, but SVC publishing is broken
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1633876
+ return false;
+ }
+ const capabilities = RTCRtpSender.getCapabilities('video');
+ let hasVP9 = false;
+ if (capabilities) {
+ for (const codec of capabilities.codecs) {
+ if (codec.mimeType === 'video/VP9') {
+ hasVP9 = true;
+ break;
+ }
+ }
+ }
+ return hasVP9;
+}
+function isSVCCodec(codec) {
+ return codec === 'av1' || codec === 'vp9';
+}
+function supportsSetSinkId(elm) {
+ if (!document) {
+ return false;
+ }
+ if (!elm) {
+ elm = document.createElement('audio');
+ }
+ return 'setSinkId' in elm;
+}
+const setCodecPreferencesVersions = {
+ Chrome: '100',
+ Safari: '15',
+ Firefox: '100'
+};
+function supportsSetCodecPreferences(transceiver) {
+ if (!isWeb()) {
+ return false;
+ }
+ if (!('setCodecPreferences' in transceiver)) {
+ return false;
+ }
+ const browser = getBrowser();
+ if (!(browser === null || browser === void 0 ? void 0 : browser.name) || !browser.version) {
+ // version is required
+ return false;
+ }
+ const v = setCodecPreferencesVersions[browser.name];
+ if (v) {
+ return compareVersions(browser.version, v) >= 0;
+ }
+ return false;
+}
+function isBrowserSupported() {
+ return supportsTransceiver() || supportsAddTrack();
+}
+function isFireFox() {
+ var _a;
+ return ((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.name) === 'Firefox';
+}
+function isChromiumBased() {
+ var _a;
+ return ((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.name) === 'Chrome';
+}
+function isSafari() {
+ var _a;
+ return ((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.name) === 'Safari';
+}
+function isMobile() {
+ if (!isWeb()) return false;
+ return /Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent);
+}
+function isWeb() {
+ return typeof document !== 'undefined';
+}
+function isReactNative() {
+ // navigator.product is deprecated on browsers, but will be set appropriately for react-native.
+ return navigator.product == 'ReactNative';
+}
+function isCloud(serverUrl) {
+ return serverUrl.hostname.endsWith('.livekit.cloud');
+}
+function getLKReactNativeInfo() {
+ // global defined only for ReactNative.
+ // @ts-ignore
+ if (global && global.LiveKitReactNativeGlobal) {
+ // @ts-ignore
+ return global.LiveKitReactNativeGlobal;
+ }
+ return undefined;
+}
+function getReactNativeOs() {
+ if (!isReactNative()) {
+ return undefined;
+ }
+ let info = getLKReactNativeInfo();
+ if (info) {
+ return info.platform;
+ }
+ return undefined;
+}
+function getDevicePixelRatio() {
+ if (isWeb()) {
+ return window.devicePixelRatio;
+ }
+ if (isReactNative()) {
+ let info = getLKReactNativeInfo();
+ if (info) {
+ return info.devicePixelRatio;
+ }
+ }
+ return 1;
+}
+function compareVersions(v1, v2) {
+ const parts1 = v1.split('.');
+ const parts2 = v2.split('.');
+ const k = Math.min(parts1.length, parts2.length);
+ for (let i = 0; i < k; ++i) {
+ const p1 = parseInt(parts1[i], 10);
+ const p2 = parseInt(parts2[i], 10);
+ if (p1 > p2) return 1;
+ if (p1 < p2) return -1;
+ if (i === k - 1 && p1 === p2) return 0;
+ }
+ if (v1 === '' && v2 !== '') {
+ return -1;
+ } else if (v2 === '') {
+ return 1;
+ }
+ return parts1.length == parts2.length ? 0 : parts1.length < parts2.length ? -1 : 1;
+}
+function roDispatchCallback(entries) {
+ for (const entry of entries) {
+ entry.target.handleResize(entry);
+ }
+}
+function ioDispatchCallback(entries) {
+ for (const entry of entries) {
+ entry.target.handleVisibilityChanged(entry);
+ }
+}
+let resizeObserver = null;
+const getResizeObserver = () => {
+ if (!resizeObserver) resizeObserver = new ResizeObserver(roDispatchCallback);
+ return resizeObserver;
+};
+let intersectionObserver = null;
+const getIntersectionObserver = () => {
+ if (!intersectionObserver) {
+ intersectionObserver = new IntersectionObserver(ioDispatchCallback, {
+ root: null,
+ rootMargin: '0px'
+ });
+ }
+ return intersectionObserver;
+};
+function getClientInfo() {
+ var _a;
+ const info = ClientInfo.fromPartial({
+ sdk: ClientInfo_SDK.JS,
+ protocol: protocolVersion,
+ version
+ });
+ if (isReactNative()) {
+ info.os = (_a = getReactNativeOs()) !== null && _a !== void 0 ? _a : '';
+ }
+ return info;
+}
+let emptyVideoStreamTrack;
+function getEmptyVideoStreamTrack() {
+ if (!emptyVideoStreamTrack) {
+ emptyVideoStreamTrack = createDummyVideoStreamTrack();
+ }
+ return emptyVideoStreamTrack;
+}
+function createDummyVideoStreamTrack() {
+ let width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 16;
+ let height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;
+ let enabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ let paintContent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+ const canvas = document.createElement('canvas');
+ // the canvas size is set to 16 by default, because electron apps seem to fail with smaller values
+ canvas.width = width;
+ canvas.height = height;
+ const ctx = canvas.getContext('2d');
+ ctx === null || ctx === void 0 ? void 0 : ctx.fillRect(0, 0, canvas.width, canvas.height);
+ if (paintContent && ctx) {
+ ctx.beginPath();
+ ctx.arc(width / 2, height / 2, 50, 0, Math.PI * 2, true);
+ ctx.closePath();
+ ctx.fillStyle = 'grey';
+ ctx.fill();
+ }
+ // @ts-ignore
+ const dummyStream = canvas.captureStream();
+ const [dummyTrack] = dummyStream.getTracks();
+ if (!dummyTrack) {
+ throw Error('Could not get empty media stream video track');
+ }
+ dummyTrack.enabled = enabled;
+ return dummyTrack;
+}
+let emptyAudioStreamTrack;
+function getEmptyAudioStreamTrack() {
+ if (!emptyAudioStreamTrack) {
+ // implementation adapted from https://blog.mozilla.org/webrtc/warm-up-with-replacetrack/
+ const ctx = new AudioContext();
+ const oscillator = ctx.createOscillator();
+ const dst = ctx.createMediaStreamDestination();
+ oscillator.connect(dst);
+ oscillator.start();
+ [emptyAudioStreamTrack] = dst.stream.getAudioTracks();
+ if (!emptyAudioStreamTrack) {
+ throw Error('Could not get empty media stream audio track');
+ }
+ emptyAudioStreamTrack.enabled = false;
+ }
+ return emptyAudioStreamTrack;
+}
+class Future {
+ constructor(futureBase, onFinally) {
+ this.onFinally = onFinally;
+ this.promise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+ this.resolve = resolve;
+ this.reject = reject;
+ if (futureBase) {
+ yield futureBase(resolve, reject);
+ }
+ })).finally(() => {
+ var _a;
+ return (_a = this.onFinally) === null || _a === void 0 ? void 0 : _a.call(this);
+ });
+ }
+}
+/**
+ * Creates and returns an analyser web audio node that is attached to the provided track.
+ * Additionally returns a convenience method `calculateVolume` to perform instant volume readings on that track.
+ * Call the returned `cleanup` function to close the audioContext that has been created for the instance of this helper
+ */
+function createAudioAnalyser(track, options) {
+ const opts = Object.assign({
+ cloneTrack: false,
+ fftSize: 2048,
+ smoothingTimeConstant: 0.8,
+ minDecibels: -100,
+ maxDecibels: -80
+ }, options);
+ const audioContext = getNewAudioContext();
+ if (!audioContext) {
+ throw new Error('Audio Context not supported on this browser');
+ }
+ const streamTrack = opts.cloneTrack ? track.mediaStreamTrack.clone() : track.mediaStreamTrack;
+ const mediaStreamSource = audioContext.createMediaStreamSource(new MediaStream([streamTrack]));
+ const analyser = audioContext.createAnalyser();
+ analyser.minDecibels = opts.minDecibels;
+ analyser.maxDecibels = opts.maxDecibels;
+ analyser.fftSize = opts.fftSize;
+ analyser.smoothingTimeConstant = opts.smoothingTimeConstant;
+ mediaStreamSource.connect(analyser);
+ const dataArray = new Uint8Array(analyser.frequencyBinCount);
+ /**
+ * Calculates the current volume of the track in the range from 0 to 1
+ */
+ const calculateVolume = () => {
+ analyser.getByteFrequencyData(dataArray);
+ let sum = 0;
+ for (const amplitude of dataArray) {
+ sum += Math.pow(amplitude / 255, 2);
+ }
+ const volume = Math.sqrt(sum / dataArray.length);
+ return volume;
+ };
+ const cleanup = () => {
+ audioContext.close();
+ if (opts.cloneTrack) {
+ streamTrack.stop();
+ }
+ };
+ return {
+ calculateVolume,
+ analyser,
+ cleanup
+ };
+}
+class Mutex {
+ constructor() {
+ this._locking = Promise.resolve();
+ this._locks = 0;
+ }
+ isLocked() {
+ return this._locks > 0;
+ }
+ lock() {
+ this._locks += 1;
+ let unlockNext;
+ const willLock = new Promise(resolve => unlockNext = () => {
+ this._locks -= 1;
+ resolve();
+ });
+ const willUnlock = this._locking.then(() => unlockNext);
+ this._locking = this._locking.then(() => willLock);
+ return willUnlock;
+ }
+}
+
+var QueueTaskStatus;
+(function (QueueTaskStatus) {
+ QueueTaskStatus[QueueTaskStatus["WAITING"] = 0] = "WAITING";
+ QueueTaskStatus[QueueTaskStatus["RUNNING"] = 1] = "RUNNING";
+ QueueTaskStatus[QueueTaskStatus["COMPLETED"] = 2] = "COMPLETED";
+})(QueueTaskStatus || (QueueTaskStatus = {}));
+class AsyncQueue {
+ constructor() {
+ this.pendingTasks = new Map();
+ this.taskMutex = new Mutex();
+ this.nextTaskIndex = 0;
+ }
+ run(task) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const taskInfo = {
+ id: this.nextTaskIndex++,
+ enqueuedAt: Date.now(),
+ status: QueueTaskStatus.WAITING
+ };
+ this.pendingTasks.set(taskInfo.id, taskInfo);
+ const unlock = yield this.taskMutex.lock();
+ try {
+ taskInfo.executedAt = Date.now();
+ taskInfo.status = QueueTaskStatus.RUNNING;
+ return yield task();
+ } finally {
+ taskInfo.status = QueueTaskStatus.COMPLETED;
+ this.pendingTasks.delete(taskInfo.id);
+ unlock();
+ }
+ });
+ }
+ flush() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.run(() => __awaiter(this, void 0, void 0, function* () {}));
+ });
+ }
+ snapshot() {
+ return Array.from(this.pendingTasks.values());
+ }
+}
+
+const passThroughQueueSignals = ['syncState', 'trickle', 'offer', 'answer', 'simulate', 'leave'];
+function canPassThroughQueue(req) {
+ const canPass = passThroughQueueSignals.indexOf(req.$case) >= 0;
+ livekitLogger.trace('request allowed to bypass queue:', {
+ canPass,
+ req
+ });
+ return canPass;
+}
+/** @internal */
+class SignalClient {
+ constructor() {
+ let useJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+ /** signal rtt in milliseconds */
+ this.rtt = 0;
+ this.isConnected = false;
+ this.isReconnecting = false;
+ this.useJSON = useJSON;
+ this.requestQueue = new AsyncQueue();
+ this.queuedRequests = [];
+ this.closingLock = new Mutex();
+ }
+ join(url, token, opts, abortSignal) {
+ return __awaiter(this, void 0, void 0, function* () {
+ // during a full reconnect, we'd want to start the sequence even if currently
+ // connected
+ this.isConnected = false;
+ this.options = opts;
+ const res = yield this.connect(url, token, opts, abortSignal);
+ return res;
+ });
+ }
+ reconnect(url, token, sid, reason) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.options) {
+ livekitLogger.warn('attempted to reconnect without signal options being set, ignoring');
+ return;
+ }
+ this.isReconnecting = true;
+ // clear ping interval and restart it once reconnected
+ this.clearPingInterval();
+ const res = yield this.connect(url, token, Object.assign(Object.assign({}, this.options), {
+ reconnect: true,
+ sid,
+ reconnectReason: reason
+ }));
+ return res;
+ });
+ }
+ connect(url, token, opts, abortSignal) {
+ this.connectOptions = opts;
+ if (url.startsWith('http')) {
+ url = url.replace('http', 'ws');
+ }
+ // strip trailing slash
+ url = url.replace(/\/$/, '');
+ url += '/rtc';
+ const clientInfo = getClientInfo();
+ const params = createConnectionParams(token, clientInfo, opts);
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+ const abortHandler = () => __awaiter(this, void 0, void 0, function* () {
+ this.close();
+ reject(new ConnectionError('room connection has been cancelled (signal)'));
+ });
+ if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
+ abortHandler();
+ }
+ abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener('abort', abortHandler);
+ livekitLogger.debug("connecting to ".concat(url + params));
+ if (this.ws) {
+ yield this.close();
+ }
+ this.ws = new WebSocket(url + params);
+ this.ws.binaryType = 'arraybuffer';
+ this.ws.onerror = ev => __awaiter(this, void 0, void 0, function* () {
+ if (!this.isConnected) {
+ try {
+ const resp = yield fetch("http".concat(url.substring(2), "/validate").concat(params));
+ if (resp.status.toFixed(0).startsWith('4')) {
+ const msg = yield resp.text();
+ reject(new ConnectionError(msg, 0 /* ConnectionErrorReason.NotAllowed */, resp.status));
+ } else {
+ reject(new ConnectionError('Internal error', 2 /* ConnectionErrorReason.InternalError */, resp.status));
+ }
+ } catch (e) {
+ reject(new ConnectionError('server was not reachable', 1 /* ConnectionErrorReason.ServerUnreachable */));
+ }
+
+ return;
+ }
+ // other errors, handle
+ this.handleWSError(ev);
+ });
+ this.ws.onmessage = ev => __awaiter(this, void 0, void 0, function* () {
+ var _a, _b, _c, _d;
+ // not considered connected until JoinResponse is received
+ let resp;
+ if (typeof ev.data === 'string') {
+ const json = JSON.parse(ev.data);
+ resp = SignalResponse.fromJSON(json);
+ } else if (ev.data instanceof ArrayBuffer) {
+ resp = SignalResponse.decode(new Uint8Array(ev.data));
+ } else {
+ livekitLogger.error("could not decode websocket message: ".concat(typeof ev.data));
+ return;
+ }
+ if (!this.isConnected) {
+ let shouldProcessMessage = false;
+ // handle join message only
+ if (((_a = resp.message) === null || _a === void 0 ? void 0 : _a.$case) === 'join') {
+ this.isConnected = true;
+ abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', abortHandler);
+ this.pingTimeoutDuration = resp.message.join.pingTimeout;
+ this.pingIntervalDuration = resp.message.join.pingInterval;
+ if (this.pingTimeoutDuration && this.pingTimeoutDuration > 0) {
+ livekitLogger.debug('ping config', {
+ timeout: this.pingTimeoutDuration,
+ interval: this.pingIntervalDuration
+ });
+ this.startPingInterval();
+ }
+ resolve(resp.message.join);
+ } else if (opts.reconnect) {
+ // in reconnecting, any message received means signal reconnected
+ this.isConnected = true;
+ abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', abortHandler);
+ this.startPingInterval();
+ if (((_b = resp.message) === null || _b === void 0 ? void 0 : _b.$case) === 'reconnect') {
+ resolve((_c = resp.message) === null || _c === void 0 ? void 0 : _c.reconnect);
+ } else {
+ resolve();
+ shouldProcessMessage = true;
+ }
+ } else if (!opts.reconnect) {
+ // non-reconnect case, should receive join response first
+ reject(new ConnectionError("did not receive join response, got ".concat((_d = resp.message) === null || _d === void 0 ? void 0 : _d.$case, " instead")));
+ }
+ if (!shouldProcessMessage) {
+ return;
+ }
+ }
+ if (this.signalLatency) {
+ yield sleep(this.signalLatency);
+ }
+ this.handleSignalResponse(resp);
+ });
+ this.ws.onclose = ev => {
+ livekitLogger.warn("websocket closed", {
+ ev
+ });
+ this.handleOnClose(ev.reason);
+ };
+ }));
+ }
+ close() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield this.closingLock.lock();
+ try {
+ this.isConnected = false;
+ if (this.ws) {
+ this.ws.onclose = null;
+ this.ws.onmessage = null;
+ this.ws.onopen = null;
+ // calling `ws.close()` only starts the closing handshake (CLOSING state), prefer to wait until state is actually CLOSED
+ const closePromise = new Promise(resolve => {
+ if (this.ws) {
+ this.ws.onclose = resolve;
+ } else {
+ resolve(true);
+ }
+ });
+ if (this.ws.readyState < this.ws.CLOSING) {
+ this.ws.close();
+ // 250ms grace period for ws to close gracefully
+ yield Promise.race([closePromise, sleep(250)]);
+ }
+ this.ws = undefined;
+ this.clearPingInterval();
+ }
+ } finally {
+ unlock();
+ }
+ });
+ }
+ // initial offer after joining
+ sendOffer(offer) {
+ livekitLogger.debug('sending offer', offer);
+ this.sendRequest({
+ $case: 'offer',
+ offer: toProtoSessionDescription(offer)
+ });
+ }
+ // answer a server-initiated offer
+ sendAnswer(answer) {
+ livekitLogger.debug('sending answer');
+ return this.sendRequest({
+ $case: 'answer',
+ answer: toProtoSessionDescription(answer)
+ });
+ }
+ sendIceCandidate(candidate, target) {
+ livekitLogger.trace('sending ice candidate', candidate);
+ return this.sendRequest({
+ $case: 'trickle',
+ trickle: {
+ candidateInit: JSON.stringify(candidate),
+ target
+ }
+ });
+ }
+ sendMuteTrack(trackSid, muted) {
+ return this.sendRequest({
+ $case: 'mute',
+ mute: {
+ sid: trackSid,
+ muted
+ }
+ });
+ }
+ sendAddTrack(req) {
+ return this.sendRequest({
+ $case: 'addTrack',
+ addTrack: AddTrackRequest.fromPartial(req)
+ });
+ }
+ sendUpdateLocalMetadata(metadata, name) {
+ return this.sendRequest({
+ $case: 'updateMetadata',
+ updateMetadata: {
+ metadata,
+ name
+ }
+ });
+ }
+ sendUpdateTrackSettings(settings) {
+ this.sendRequest({
+ $case: 'trackSetting',
+ trackSetting: settings
+ });
+ }
+ sendUpdateSubscription(sub) {
+ return this.sendRequest({
+ $case: 'subscription',
+ subscription: sub
+ });
+ }
+ sendSyncState(sync) {
+ return this.sendRequest({
+ $case: 'syncState',
+ syncState: sync
+ });
+ }
+ sendUpdateVideoLayers(trackSid, layers) {
+ return this.sendRequest({
+ $case: 'updateLayers',
+ updateLayers: {
+ trackSid,
+ layers
+ }
+ });
+ }
+ sendUpdateSubscriptionPermissions(allParticipants, trackPermissions) {
+ return this.sendRequest({
+ $case: 'subscriptionPermission',
+ subscriptionPermission: {
+ allParticipants,
+ trackPermissions
+ }
+ });
+ }
+ sendSimulateScenario(scenario) {
+ return this.sendRequest({
+ $case: 'simulate',
+ simulate: scenario
+ });
+ }
+ sendPing() {
+ /** send both of ping and pingReq for compatibility to old and new server */
+ return Promise.all([this.sendRequest({
+ $case: 'ping',
+ ping: Date.now()
+ }), this.sendRequest({
+ $case: 'pingReq',
+ pingReq: {
+ timestamp: Date.now(),
+ rtt: this.rtt
+ }
+ })]);
+ }
+ sendLeave() {
+ return this.sendRequest({
+ $case: 'leave',
+ leave: {
+ canReconnect: false,
+ reason: DisconnectReason.CLIENT_INITIATED
+ }
+ });
+ }
+ sendRequest(message) {
+ let fromQueue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+ return __awaiter(this, void 0, void 0, function* () {
+ // capture all requests while reconnecting and put them in a queue
+ // unless the request originates from the queue, then don't enqueue again
+ const canQueue = !fromQueue && !canPassThroughQueue(message);
+ if (canQueue && this.isReconnecting) {
+ this.queuedRequests.push(() => __awaiter(this, void 0, void 0, function* () {
+ yield this.sendRequest(message, true);
+ }));
+ return;
+ }
+ // make sure previously queued requests are being sent first
+ if (!fromQueue) {
+ yield this.requestQueue.flush();
+ }
+ if (this.signalLatency) {
+ yield sleep(this.signalLatency);
+ }
+ if (!this.ws || this.ws.readyState !== this.ws.OPEN) {
+ livekitLogger.error("cannot send signal request before connected, type: ".concat(message === null || message === void 0 ? void 0 : message.$case));
+ return;
+ }
+ const req = {
+ message
+ };
+ try {
+ if (this.useJSON) {
+ this.ws.send(JSON.stringify(SignalRequest.toJSON(req)));
+ } else {
+ this.ws.send(SignalRequest.encode(req).finish());
+ }
+ } catch (e) {
+ livekitLogger.error('error sending signal message', {
+ error: e
+ });
+ }
+ });
+ }
+ handleSignalResponse(res) {
+ var _a, _b;
+ const msg = res.message;
+ if (msg == undefined) {
+ livekitLogger.debug('received unsupported message');
+ return;
+ }
+ if (msg.$case === 'answer') {
+ const sd = fromProtoSessionDescription(msg.answer);
+ if (this.onAnswer) {
+ this.onAnswer(sd);
+ }
+ } else if (msg.$case === 'offer') {
+ const sd = fromProtoSessionDescription(msg.offer);
+ if (this.onOffer) {
+ this.onOffer(sd);
+ }
+ } else if (msg.$case === 'trickle') {
+ const candidate = JSON.parse(msg.trickle.candidateInit);
+ if (this.onTrickle) {
+ this.onTrickle(candidate, msg.trickle.target);
+ }
+ } else if (msg.$case === 'update') {
+ if (this.onParticipantUpdate) {
+ this.onParticipantUpdate((_a = msg.update.participants) !== null && _a !== void 0 ? _a : []);
+ }
+ } else if (msg.$case === 'trackPublished') {
+ if (this.onLocalTrackPublished) {
+ this.onLocalTrackPublished(msg.trackPublished);
+ }
+ } else if (msg.$case === 'speakersChanged') {
+ if (this.onSpeakersChanged) {
+ this.onSpeakersChanged((_b = msg.speakersChanged.speakers) !== null && _b !== void 0 ? _b : []);
+ }
+ } else if (msg.$case === 'leave') {
+ if (this.onLeave) {
+ this.onLeave(msg.leave);
+ }
+ } else if (msg.$case === 'mute') {
+ if (this.onRemoteMuteChanged) {
+ this.onRemoteMuteChanged(msg.mute.sid, msg.mute.muted);
+ }
+ } else if (msg.$case === 'roomUpdate') {
+ if (this.onRoomUpdate && msg.roomUpdate.room) {
+ this.onRoomUpdate(msg.roomUpdate.room);
+ }
+ } else if (msg.$case === 'connectionQuality') {
+ if (this.onConnectionQuality) {
+ this.onConnectionQuality(msg.connectionQuality);
+ }
+ } else if (msg.$case === 'streamStateUpdate') {
+ if (this.onStreamStateUpdate) {
+ this.onStreamStateUpdate(msg.streamStateUpdate);
+ }
+ } else if (msg.$case === 'subscribedQualityUpdate') {
+ if (this.onSubscribedQualityUpdate) {
+ this.onSubscribedQualityUpdate(msg.subscribedQualityUpdate);
+ }
+ } else if (msg.$case === 'subscriptionPermissionUpdate') {
+ if (this.onSubscriptionPermissionUpdate) {
+ this.onSubscriptionPermissionUpdate(msg.subscriptionPermissionUpdate);
+ }
+ } else if (msg.$case === 'refreshToken') {
+ if (this.onTokenRefresh) {
+ this.onTokenRefresh(msg.refreshToken);
+ }
+ } else if (msg.$case === 'trackUnpublished') {
+ if (this.onLocalTrackUnpublished) {
+ this.onLocalTrackUnpublished(msg.trackUnpublished);
+ }
+ } else if (msg.$case === 'subscriptionResponse') {
+ if (this.onSubscriptionError) {
+ this.onSubscriptionError(msg.subscriptionResponse);
+ }
+ } else if (msg.$case === 'pong') {
+ this.resetPingTimeout();
+ } else if (msg.$case === 'pongResp') {
+ this.rtt = Date.now() - msg.pongResp.lastPingTimestamp;
+ this.resetPingTimeout();
+ } else {
+ livekitLogger.debug('unsupported message', msg);
+ }
+ }
+ setReconnected() {
+ while (this.queuedRequests.length > 0) {
+ const req = this.queuedRequests.shift();
+ if (req) {
+ this.requestQueue.run(req);
+ }
+ }
+ this.isReconnecting = false;
+ }
+ handleOnClose(reason) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.isConnected) return;
+ yield this.close();
+ livekitLogger.debug("websocket connection closed: ".concat(reason));
+ if (this.onClose) {
+ this.onClose(reason);
+ }
+ });
+ }
+ handleWSError(ev) {
+ livekitLogger.error('websocket error', ev);
+ }
+ /**
+ * Resets the ping timeout and starts a new timeout.
+ * Call this after receiving a pong message
+ */
+ resetPingTimeout() {
+ this.clearPingTimeout();
+ if (!this.pingTimeoutDuration) {
+ livekitLogger.warn('ping timeout duration not set');
+ return;
+ }
+ this.pingTimeout = CriticalTimers.setTimeout(() => {
+ livekitLogger.warn("ping timeout triggered. last pong received at: ".concat(new Date(Date.now() - this.pingTimeoutDuration * 1000).toUTCString()));
+ this.handleOnClose('ping timeout');
+ }, this.pingTimeoutDuration * 1000);
+ }
+ /**
+ * Clears ping timeout (does not start a new timeout)
+ */
+ clearPingTimeout() {
+ if (this.pingTimeout) {
+ CriticalTimers.clearTimeout(this.pingTimeout);
+ }
+ }
+ startPingInterval() {
+ this.clearPingInterval();
+ this.resetPingTimeout();
+ if (!this.pingIntervalDuration) {
+ livekitLogger.warn('ping interval duration not set');
+ return;
+ }
+ livekitLogger.debug('start ping interval');
+ this.pingInterval = CriticalTimers.setInterval(() => {
+ this.sendPing();
+ }, this.pingIntervalDuration * 1000);
+ }
+ clearPingInterval() {
+ livekitLogger.debug('clearing ping interval');
+ this.clearPingTimeout();
+ if (this.pingInterval) {
+ CriticalTimers.clearInterval(this.pingInterval);
+ }
+ }
+}
+function fromProtoSessionDescription(sd) {
+ const rsd = {
+ type: 'offer',
+ sdp: sd.sdp
+ };
+ switch (sd.type) {
+ case 'answer':
+ case 'offer':
+ case 'pranswer':
+ case 'rollback':
+ rsd.type = sd.type;
+ break;
+ }
+ return rsd;
+}
+function toProtoSessionDescription(rsd) {
+ const sd = {
+ sdp: rsd.sdp,
+ type: rsd.type
+ };
+ return sd;
+}
+function createConnectionParams(token, info, opts) {
+ var _a;
+ const params = new URLSearchParams();
+ params.set('access_token', token);
+ // opts
+ if (opts.reconnect) {
+ params.set('reconnect', '1');
+ if (opts.sid) {
+ params.set('sid', opts.sid);
+ }
+ }
+ params.set('auto_subscribe', opts.autoSubscribe ? '1' : '0');
+ // ClientInfo
+ params.set('sdk', isReactNative() ? 'reactnative' : 'js');
+ params.set('version', info.version);
+ params.set('protocol', info.protocol.toString());
+ if (info.deviceModel) {
+ params.set('device_model', info.deviceModel);
+ }
+ if (info.os) {
+ params.set('os', info.os);
+ }
+ if (info.osVersion) {
+ params.set('os_version', info.osVersion);
+ }
+ if (info.browser) {
+ params.set('browser', info.browser);
+ }
+ if (info.browserVersion) {
+ params.set('browser_version', info.browserVersion);
+ }
+ if (opts.publishOnly !== undefined) {
+ params.set('publish', opts.publishOnly);
+ }
+ if (opts.adaptiveStream) {
+ params.set('adaptive_stream', '1');
+ }
+ if (opts.reconnectReason) {
+ params.set('reconnect_reason', opts.reconnectReason.toString());
+ }
+ // @ts-ignore
+ if ((_a = navigator.connection) === null || _a === void 0 ? void 0 : _a.type) {
+ // @ts-ignore
+ params.set('network', navigator.connection.type);
+ }
+ return "?".concat(params.toString());
+}
+
+const defaultId = 'default';
+class DeviceManager {
+ static getInstance() {
+ if (this.instance === undefined) {
+ this.instance = new DeviceManager();
+ }
+ return this.instance;
+ }
+ getDevices(kind) {
+ let requestPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (((_a = DeviceManager.userMediaPromiseMap) === null || _a === void 0 ? void 0 : _a.size) > 0) {
+ livekitLogger.debug('awaiting getUserMedia promise');
+ try {
+ if (kind) {
+ yield DeviceManager.userMediaPromiseMap.get(kind);
+ } else {
+ yield Promise.all(DeviceManager.userMediaPromiseMap.values());
+ }
+ } catch (e) {
+ livekitLogger.warn('error waiting for media permissons');
+ }
+ }
+ let devices = yield navigator.mediaDevices.enumerateDevices();
+ if (requestPermissions && kind && (
+ // for safari we need to skip this check, as otherwise it will re-acquire user media and fail on iOS https://bugs.webkit.org/show_bug.cgi?id=179363
+ !DeviceManager.userMediaPromiseMap.get(kind) || !isSafari())) {
+ const isDummyDeviceOrEmpty = devices.length === 0 || devices.some(device => {
+ const noLabel = device.label === '';
+ const isRelevant = kind ? device.kind === kind : true;
+ return noLabel && isRelevant;
+ });
+ if (isDummyDeviceOrEmpty) {
+ const permissionsToAcquire = {
+ video: kind !== 'audioinput' && kind !== 'audiooutput',
+ audio: kind !== 'videoinput'
+ };
+ const stream = yield navigator.mediaDevices.getUserMedia(permissionsToAcquire);
+ devices = yield navigator.mediaDevices.enumerateDevices();
+ stream.getTracks().forEach(track => {
+ track.stop();
+ });
+ }
+ }
+ if (kind) {
+ devices = devices.filter(device => device.kind === kind);
+ }
+ return devices;
+ });
+ }
+ normalizeDeviceId(kind, deviceId, groupId) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (deviceId !== defaultId) {
+ return deviceId;
+ }
+ // resolve actual device id if it's 'default': Chrome returns it when no
+ // device has been chosen
+ const devices = yield this.getDevices(kind);
+ const device = devices.find(d => d.groupId === groupId && d.deviceId !== defaultId);
+ return device === null || device === void 0 ? void 0 : device.deviceId;
+ });
+ }
+}
+DeviceManager.mediaDeviceKinds = ['audioinput', 'audiooutput', 'videoinput'];
+DeviceManager.userMediaPromiseMap = new Map();
+
+var parser$1 = {};
+
+var grammar$2 = {exports: {}};
+
+var grammar$1 = grammar$2.exports = {
+ v: [{
+ name: 'version',
+ reg: /^(\d*)$/
+ }],
+ o: [{
+ // o=- 20518 0 IN IP4 203.0.113.1
+ // NB: sessionId will be a String in most cases because it is huge
+ name: 'origin',
+ reg: /^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,
+ names: ['username', 'sessionId', 'sessionVersion', 'netType', 'ipVer', 'address'],
+ format: '%s %s %d %s IP%d %s'
+ }],
+ // default parsing of these only (though some of these feel outdated)
+ s: [{
+ name: 'name'
+ }],
+ i: [{
+ name: 'description'
+ }],
+ u: [{
+ name: 'uri'
+ }],
+ e: [{
+ name: 'email'
+ }],
+ p: [{
+ name: 'phone'
+ }],
+ z: [{
+ name: 'timezones'
+ }],
+ // TODO: this one can actually be parsed properly...
+ r: [{
+ name: 'repeats'
+ }],
+ // TODO: this one can also be parsed properly
+ // k: [{}], // outdated thing ignored
+ t: [{
+ // t=0 0
+ name: 'timing',
+ reg: /^(\d*) (\d*)/,
+ names: ['start', 'stop'],
+ format: '%d %d'
+ }],
+ c: [{
+ // c=IN IP4 10.47.197.26
+ name: 'connection',
+ reg: /^IN IP(\d) (\S*)/,
+ names: ['version', 'ip'],
+ format: 'IN IP%d %s'
+ }],
+ b: [{
+ // b=AS:4000
+ push: 'bandwidth',
+ reg: /^(TIAS|AS|CT|RR|RS):(\d*)/,
+ names: ['type', 'limit'],
+ format: '%s:%s'
+ }],
+ m: [{
+ // m=video 51744 RTP/AVP 126 97 98 34 31
+ // NB: special - pushes to session
+ // TODO: rtp/fmtp should be filtered by the payloads found here?
+ reg: /^(\w*) (\d*) ([\w/]*)(?: (.*))?/,
+ names: ['type', 'port', 'protocol', 'payloads'],
+ format: '%s %d %s %s'
+ }],
+ a: [{
+ // a=rtpmap:110 opus/48000/2
+ push: 'rtp',
+ reg: /^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,
+ names: ['payload', 'codec', 'rate', 'encoding'],
+ format: function (o) {
+ return o.encoding ? 'rtpmap:%d %s/%s/%s' : o.rate ? 'rtpmap:%d %s/%s' : 'rtpmap:%d %s';
+ }
+ }, {
+ // a=fmtp:108 profile-level-id=24;object=23;bitrate=64000
+ // a=fmtp:111 minptime=10; useinbandfec=1
+ push: 'fmtp',
+ reg: /^fmtp:(\d*) ([\S| ]*)/,
+ names: ['payload', 'config'],
+ format: 'fmtp:%d %s'
+ }, {
+ // a=control:streamid=0
+ name: 'control',
+ reg: /^control:(.*)/,
+ format: 'control:%s'
+ }, {
+ // a=rtcp:65179 IN IP4 193.84.77.194
+ name: 'rtcp',
+ reg: /^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,
+ names: ['port', 'netType', 'ipVer', 'address'],
+ format: function (o) {
+ return o.address != null ? 'rtcp:%d %s IP%d %s' : 'rtcp:%d';
+ }
+ }, {
+ // a=rtcp-fb:98 trr-int 100
+ push: 'rtcpFbTrrInt',
+ reg: /^rtcp-fb:(\*|\d*) trr-int (\d*)/,
+ names: ['payload', 'value'],
+ format: 'rtcp-fb:%s trr-int %d'
+ }, {
+ // a=rtcp-fb:98 nack rpsi
+ push: 'rtcpFb',
+ reg: /^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,
+ names: ['payload', 'type', 'subtype'],
+ format: function (o) {
+ return o.subtype != null ? 'rtcp-fb:%s %s %s' : 'rtcp-fb:%s %s';
+ }
+ }, {
+ // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
+ // a=extmap:1/recvonly URI-gps-string
+ // a=extmap:3 urn:ietf:params:rtp-hdrext:encrypt urn:ietf:params:rtp-hdrext:smpte-tc 25@600/24
+ push: 'ext',
+ reg: /^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,
+ names: ['value', 'direction', 'encrypt-uri', 'uri', 'config'],
+ format: function (o) {
+ return 'extmap:%d' + (o.direction ? '/%s' : '%v') + (o['encrypt-uri'] ? ' %s' : '%v') + ' %s' + (o.config ? ' %s' : '');
+ }
+ }, {
+ // a=extmap-allow-mixed
+ name: 'extmapAllowMixed',
+ reg: /^(extmap-allow-mixed)/
+ }, {
+ // a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR|2^20|1:32
+ push: 'crypto',
+ reg: /^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,
+ names: ['id', 'suite', 'config', 'sessionConfig'],
+ format: function (o) {
+ return o.sessionConfig != null ? 'crypto:%d %s %s %s' : 'crypto:%d %s %s';
+ }
+ }, {
+ // a=setup:actpass
+ name: 'setup',
+ reg: /^setup:(\w*)/,
+ format: 'setup:%s'
+ }, {
+ // a=connection:new
+ name: 'connectionType',
+ reg: /^connection:(new|existing)/,
+ format: 'connection:%s'
+ }, {
+ // a=mid:1
+ name: 'mid',
+ reg: /^mid:([^\s]*)/,
+ format: 'mid:%s'
+ }, {
+ // a=msid:0c8b064d-d807-43b4-b434-f92a889d8587 98178685-d409-46e0-8e16-7ef0db0db64a
+ name: 'msid',
+ reg: /^msid:(.*)/,
+ format: 'msid:%s'
+ }, {
+ // a=ptime:20
+ name: 'ptime',
+ reg: /^ptime:(\d*(?:\.\d*)*)/,
+ format: 'ptime:%d'
+ }, {
+ // a=maxptime:60
+ name: 'maxptime',
+ reg: /^maxptime:(\d*(?:\.\d*)*)/,
+ format: 'maxptime:%d'
+ }, {
+ // a=sendrecv
+ name: 'direction',
+ reg: /^(sendrecv|recvonly|sendonly|inactive)/
+ }, {
+ // a=ice-lite
+ name: 'icelite',
+ reg: /^(ice-lite)/
+ }, {
+ // a=ice-ufrag:F7gI
+ name: 'iceUfrag',
+ reg: /^ice-ufrag:(\S*)/,
+ format: 'ice-ufrag:%s'
+ }, {
+ // a=ice-pwd:x9cml/YzichV2+XlhiMu8g
+ name: 'icePwd',
+ reg: /^ice-pwd:(\S*)/,
+ format: 'ice-pwd:%s'
+ }, {
+ // a=fingerprint:SHA-1 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33
+ name: 'fingerprint',
+ reg: /^fingerprint:(\S*) (\S*)/,
+ names: ['type', 'hash'],
+ format: 'fingerprint:%s %s'
+ }, {
+ // a=candidate:0 1 UDP 2113667327 203.0.113.1 54400 typ host
+ // a=candidate:1162875081 1 udp 2113937151 192.168.34.75 60017 typ host generation 0 network-id 3 network-cost 10
+ // a=candidate:3289912957 2 udp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 generation 0 network-id 3 network-cost 10
+ // a=candidate:229815620 1 tcp 1518280447 192.168.150.19 60017 typ host tcptype active generation 0 network-id 3 network-cost 10
+ // a=candidate:3289912957 2 tcp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 tcptype passive generation 0 network-id 3 network-cost 10
+ push: 'candidates',
+ reg: /^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,
+ names: ['foundation', 'component', 'transport', 'priority', 'ip', 'port', 'type', 'raddr', 'rport', 'tcptype', 'generation', 'network-id', 'network-cost'],
+ format: function (o) {
+ var str = 'candidate:%s %d %s %d %s %d typ %s';
+ str += o.raddr != null ? ' raddr %s rport %d' : '%v%v';
+
+ // NB: candidate has three optional chunks, so %void middles one if it's missing
+ str += o.tcptype != null ? ' tcptype %s' : '%v';
+ if (o.generation != null) {
+ str += ' generation %d';
+ }
+ str += o['network-id'] != null ? ' network-id %d' : '%v';
+ str += o['network-cost'] != null ? ' network-cost %d' : '%v';
+ return str;
+ }
+ }, {
+ // a=end-of-candidates (keep after the candidates line for readability)
+ name: 'endOfCandidates',
+ reg: /^(end-of-candidates)/
+ }, {
+ // a=remote-candidates:1 203.0.113.1 54400 2 203.0.113.1 54401 ...
+ name: 'remoteCandidates',
+ reg: /^remote-candidates:(.*)/,
+ format: 'remote-candidates:%s'
+ }, {
+ // a=ice-options:google-ice
+ name: 'iceOptions',
+ reg: /^ice-options:(\S*)/,
+ format: 'ice-options:%s'
+ }, {
+ // a=ssrc:2566107569 cname:t9YU8M1UxTF8Y1A1
+ push: 'ssrcs',
+ reg: /^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,
+ names: ['id', 'attribute', 'value'],
+ format: function (o) {
+ var str = 'ssrc:%d';
+ if (o.attribute != null) {
+ str += ' %s';
+ if (o.value != null) {
+ str += ':%s';
+ }
+ }
+ return str;
+ }
+ }, {
+ // a=ssrc-group:FEC 1 2
+ // a=ssrc-group:FEC-FR 3004364195 1080772241
+ push: 'ssrcGroups',
+ // token-char = %x21 / %x23-27 / %x2A-2B / %x2D-2E / %x30-39 / %x41-5A / %x5E-7E
+ reg: /^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,
+ names: ['semantics', 'ssrcs'],
+ format: 'ssrc-group:%s %s'
+ }, {
+ // a=msid-semantic: WMS Jvlam5X3SX1OP6pn20zWogvaKJz5Hjf9OnlV
+ name: 'msidSemantic',
+ reg: /^msid-semantic:\s?(\w*) (\S*)/,
+ names: ['semantic', 'token'],
+ format: 'msid-semantic: %s %s' // space after ':' is not accidental
+ }, {
+ // a=group:BUNDLE audio video
+ push: 'groups',
+ reg: /^group:(\w*) (.*)/,
+ names: ['type', 'mids'],
+ format: 'group:%s %s'
+ }, {
+ // a=rtcp-mux
+ name: 'rtcpMux',
+ reg: /^(rtcp-mux)/
+ }, {
+ // a=rtcp-rsize
+ name: 'rtcpRsize',
+ reg: /^(rtcp-rsize)/
+ }, {
+ // a=sctpmap:5000 webrtc-datachannel 1024
+ name: 'sctpmap',
+ reg: /^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,
+ names: ['sctpmapNumber', 'app', 'maxMessageSize'],
+ format: function (o) {
+ return o.maxMessageSize != null ? 'sctpmap:%s %s %s' : 'sctpmap:%s %s';
+ }
+ }, {
+ // a=x-google-flag:conference
+ name: 'xGoogleFlag',
+ reg: /^x-google-flag:([^\s]*)/,
+ format: 'x-google-flag:%s'
+ }, {
+ // a=rid:1 send max-width=1280;max-height=720;max-fps=30;depend=0
+ push: 'rids',
+ reg: /^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,
+ names: ['id', 'direction', 'params'],
+ format: function (o) {
+ return o.params ? 'rid:%s %s %s' : 'rid:%s %s';
+ }
+ }, {
+ // a=imageattr:97 send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320] recv [x=330,y=250]
+ // a=imageattr:* send [x=800,y=640] recv *
+ // a=imageattr:100 recv [x=320,y=240]
+ push: 'imageattrs',
+ reg: new RegExp(
+ // a=imageattr:97
+ '^imageattr:(\\d+|\\*)' +
+ // send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320]
+ '[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)' +
+ // recv [x=330,y=250]
+ '(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?'),
+ names: ['pt', 'dir1', 'attrs1', 'dir2', 'attrs2'],
+ format: function (o) {
+ return 'imageattr:%s %s %s' + (o.dir2 ? ' %s %s' : '');
+ }
+ }, {
+ // a=simulcast:send 1,2,3;~4,~5 recv 6;~7,~8
+ // a=simulcast:recv 1;4,5 send 6;7
+ name: 'simulcast',
+ reg: new RegExp(
+ // a=simulcast:
+ '^simulcast:' +
+ // send 1,2,3;~4,~5
+ '(send|recv) ([a-zA-Z0-9\\-_~;,]+)' +
+ // space + recv 6;~7,~8
+ '(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?' +
+ // end
+ '$'),
+ names: ['dir1', 'list1', 'dir2', 'list2'],
+ format: function (o) {
+ return 'simulcast:%s %s' + (o.dir2 ? ' %s %s' : '');
+ }
+ }, {
+ // old simulcast draft 03 (implemented by Firefox)
+ // https://tools.ietf.org/html/draft-ietf-mmusic-sdp-simulcast-03
+ // a=simulcast: recv pt=97;98 send pt=97
+ // a=simulcast: send rid=5;6;7 paused=6,7
+ name: 'simulcast_03',
+ reg: /^simulcast:[\s\t]+([\S+\s\t]+)$/,
+ names: ['value'],
+ format: 'simulcast: %s'
+ }, {
+ // a=framerate:25
+ // a=framerate:29.97
+ name: 'framerate',
+ reg: /^framerate:(\d+(?:$|\.\d+))/,
+ format: 'framerate:%s'
+ }, {
+ // RFC4570
+ // a=source-filter: incl IN IP4 239.5.2.31 10.1.15.5
+ name: 'sourceFilter',
+ reg: /^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,
+ names: ['filterMode', 'netType', 'addressTypes', 'destAddress', 'srcList'],
+ format: 'source-filter: %s %s %s %s %s'
+ }, {
+ // a=bundle-only
+ name: 'bundleOnly',
+ reg: /^(bundle-only)/
+ }, {
+ // a=label:1
+ name: 'label',
+ reg: /^label:(.+)/,
+ format: 'label:%s'
+ }, {
+ // RFC version 26 for SCTP over DTLS
+ // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-5
+ name: 'sctpPort',
+ reg: /^sctp-port:(\d+)$/,
+ format: 'sctp-port:%s'
+ }, {
+ // RFC version 26 for SCTP over DTLS
+ // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-6
+ name: 'maxMessageSize',
+ reg: /^max-message-size:(\d+)$/,
+ format: 'max-message-size:%s'
+ }, {
+ // RFC7273
+ // a=ts-refclk:ptp=IEEE1588-2008:39-A7-94-FF-FE-07-CB-D0:37
+ push: 'tsRefClocks',
+ reg: /^ts-refclk:([^\s=]*)(?:=(\S*))?/,
+ names: ['clksrc', 'clksrcExt'],
+ format: function (o) {
+ return 'ts-refclk:%s' + (o.clksrcExt != null ? '=%s' : '');
+ }
+ }, {
+ // RFC7273
+ // a=mediaclk:direct=963214424
+ name: 'mediaClk',
+ reg: /^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,
+ names: ['id', 'mediaClockName', 'mediaClockValue', 'rateNumerator', 'rateDenominator'],
+ format: function (o) {
+ var str = 'mediaclk:';
+ str += o.id != null ? 'id=%s %s' : '%v%s';
+ str += o.mediaClockValue != null ? '=%s' : '';
+ str += o.rateNumerator != null ? ' rate=%s' : '';
+ str += o.rateDenominator != null ? '/%s' : '';
+ return str;
+ }
+ }, {
+ // a=keywds:keywords
+ name: 'keywords',
+ reg: /^keywds:(.+)$/,
+ format: 'keywds:%s'
+ }, {
+ // a=content:main
+ name: 'content',
+ reg: /^content:(.+)/,
+ format: 'content:%s'
+ },
+ // BFCP https://tools.ietf.org/html/rfc4583
+ {
+ // a=floorctrl:c-s
+ name: 'bfcpFloorCtrl',
+ reg: /^floorctrl:(c-only|s-only|c-s)/,
+ format: 'floorctrl:%s'
+ }, {
+ // a=confid:1
+ name: 'bfcpConfId',
+ reg: /^confid:(\d+)/,
+ format: 'confid:%s'
+ }, {
+ // a=userid:1
+ name: 'bfcpUserId',
+ reg: /^userid:(\d+)/,
+ format: 'userid:%s'
+ }, {
+ // a=floorid:1
+ name: 'bfcpFloorId',
+ reg: /^floorid:(.+) (?:m-stream|mstrm):(.+)/,
+ names: ['id', 'mStream'],
+ format: 'floorid:%s mstrm:%s'
+ }, {
+ // any a= that we don't understand is kept verbatim on media.invalid
+ push: 'invalid',
+ names: ['value']
+ }]
+};
+
+// set sensible defaults to avoid polluting the grammar with boring details
+Object.keys(grammar$1).forEach(function (key) {
+ var objs = grammar$1[key];
+ objs.forEach(function (obj) {
+ if (!obj.reg) {
+ obj.reg = /(.*)/;
+ }
+ if (!obj.format) {
+ obj.format = '%s';
+ }
+ });
+});
+var grammarExports = grammar$2.exports;
+
+(function (exports) {
+ var toIntIfInt = function (v) {
+ return String(Number(v)) === v ? Number(v) : v;
+ };
+ var attachProperties = function (match, location, names, rawName) {
+ if (rawName && !names) {
+ location[rawName] = toIntIfInt(match[1]);
+ } else {
+ for (var i = 0; i < names.length; i += 1) {
+ if (match[i + 1] != null) {
+ location[names[i]] = toIntIfInt(match[i + 1]);
+ }
+ }
+ }
+ };
+ var parseReg = function (obj, location, content) {
+ var needsBlank = obj.name && obj.names;
+ if (obj.push && !location[obj.push]) {
+ location[obj.push] = [];
+ } else if (needsBlank && !location[obj.name]) {
+ location[obj.name] = {};
+ }
+ var keyLocation = obj.push ? {} :
+ // blank object that will be pushed
+ needsBlank ? location[obj.name] : location; // otherwise, named location or root
+
+ attachProperties(content.match(obj.reg), keyLocation, obj.names, obj.name);
+ if (obj.push) {
+ location[obj.push].push(keyLocation);
+ }
+ };
+ var grammar = grammarExports;
+ var validLine = RegExp.prototype.test.bind(/^([a-z])=(.*)/);
+ exports.parse = function (sdp) {
+ var session = {},
+ media = [],
+ location = session; // points at where properties go under (one of the above)
+
+ // parse lines we understand
+ sdp.split(/(\r\n|\r|\n)/).filter(validLine).forEach(function (l) {
+ var type = l[0];
+ var content = l.slice(2);
+ if (type === 'm') {
+ media.push({
+ rtp: [],
+ fmtp: []
+ });
+ location = media[media.length - 1]; // point at latest media line
+ }
+
+ for (var j = 0; j < (grammar[type] || []).length; j += 1) {
+ var obj = grammar[type][j];
+ if (obj.reg.test(content)) {
+ return parseReg(obj, location, content);
+ }
+ }
+ });
+ session.media = media; // link it up
+ return session;
+ };
+ var paramReducer = function (acc, expr) {
+ var s = expr.split(/=(.+)/, 2);
+ if (s.length === 2) {
+ acc[s[0]] = toIntIfInt(s[1]);
+ } else if (s.length === 1 && expr.length > 1) {
+ acc[s[0]] = undefined;
+ }
+ return acc;
+ };
+ exports.parseParams = function (str) {
+ return str.split(/;\s?/).reduce(paramReducer, {});
+ };
+
+ // For backward compatibility - alias will be removed in 3.0.0
+ exports.parseFmtpConfig = exports.parseParams;
+ exports.parsePayloads = function (str) {
+ return str.toString().split(' ').map(Number);
+ };
+ exports.parseRemoteCandidates = function (str) {
+ var candidates = [];
+ var parts = str.split(' ').map(toIntIfInt);
+ for (var i = 0; i < parts.length; i += 3) {
+ candidates.push({
+ component: parts[i],
+ ip: parts[i + 1],
+ port: parts[i + 2]
+ });
+ }
+ return candidates;
+ };
+ exports.parseImageAttributes = function (str) {
+ return str.split(' ').map(function (item) {
+ return item.substring(1, item.length - 1).split(',').reduce(paramReducer, {});
+ });
+ };
+ exports.parseSimulcastStreamList = function (str) {
+ return str.split(';').map(function (stream) {
+ return stream.split(',').map(function (format) {
+ var scid,
+ paused = false;
+ if (format[0] !== '~') {
+ scid = toIntIfInt(format);
+ } else {
+ scid = toIntIfInt(format.substring(1, format.length));
+ paused = true;
+ }
+ return {
+ scid: scid,
+ paused: paused
+ };
+ });
+ });
+ };
+})(parser$1);
+
+var grammar = grammarExports;
+
+// customized util.format - discards excess arguments and can void middle ones
+var formatRegExp = /%[sdv%]/g;
+var format = function (formatStr) {
+ var i = 1;
+ var args = arguments;
+ var len = args.length;
+ return formatStr.replace(formatRegExp, function (x) {
+ if (i >= len) {
+ return x; // missing argument
+ }
+
+ var arg = args[i];
+ i += 1;
+ switch (x) {
+ case '%%':
+ return '%';
+ case '%s':
+ return String(arg);
+ case '%d':
+ return Number(arg);
+ case '%v':
+ return '';
+ }
+ });
+ // NB: we discard excess arguments - they are typically undefined from makeLine
+};
+
+var makeLine = function (type, obj, location) {
+ var str = obj.format instanceof Function ? obj.format(obj.push ? location : location[obj.name]) : obj.format;
+ var args = [type + '=' + str];
+ if (obj.names) {
+ for (var i = 0; i < obj.names.length; i += 1) {
+ var n = obj.names[i];
+ if (obj.name) {
+ args.push(location[obj.name][n]);
+ } else {
+ // for mLine and push attributes
+ args.push(location[obj.names[i]]);
+ }
+ }
+ } else {
+ args.push(location[obj.name]);
+ }
+ return format.apply(null, args);
+};
+
+// RFC specified order
+// TODO: extend this with all the rest
+var defaultOuterOrder = ['v', 'o', 's', 'i', 'u', 'e', 'p', 'c', 'b', 't', 'r', 'z', 'a'];
+var defaultInnerOrder = ['i', 'c', 'b', 'a'];
+var writer$1 = function (session, opts) {
+ opts = opts || {};
+ // ensure certain properties exist
+ if (session.version == null) {
+ session.version = 0; // 'v=0' must be there (only defined version atm)
+ }
+
+ if (session.name == null) {
+ session.name = ' '; // 's= ' must be there if no meaningful name set
+ }
+
+ session.media.forEach(function (mLine) {
+ if (mLine.payloads == null) {
+ mLine.payloads = '';
+ }
+ });
+ var outerOrder = opts.outerOrder || defaultOuterOrder;
+ var innerOrder = opts.innerOrder || defaultInnerOrder;
+ var sdp = [];
+
+ // loop through outerOrder for matching properties on session
+ outerOrder.forEach(function (type) {
+ grammar[type].forEach(function (obj) {
+ if (obj.name in session && session[obj.name] != null) {
+ sdp.push(makeLine(type, obj, session));
+ } else if (obj.push in session && session[obj.push] != null) {
+ session[obj.push].forEach(function (el) {
+ sdp.push(makeLine(type, obj, el));
+ });
+ }
+ });
+ });
+
+ // then for each media line, follow the innerOrder
+ session.media.forEach(function (mLine) {
+ sdp.push(makeLine('m', grammar.m[0], mLine));
+ innerOrder.forEach(function (type) {
+ grammar[type].forEach(function (obj) {
+ if (obj.name in mLine && mLine[obj.name] != null) {
+ sdp.push(makeLine(type, obj, mLine));
+ } else if (obj.push in mLine && mLine[obj.push] != null) {
+ mLine[obj.push].forEach(function (el) {
+ sdp.push(makeLine(type, obj, el));
+ });
+ }
+ });
+ });
+ });
+ return sdp.join('\r\n') + '\r\n';
+};
+
+var parser = parser$1;
+var writer = writer$1;
+var write = writer;
+var parse = parser.parse;
+parser.parseParams;
+parser.parseFmtpConfig; // Alias of parseParams().
+parser.parsePayloads;
+parser.parseRemoteCandidates;
+parser.parseImageAttributes;
+parser.parseSimulcastStreamList;
+
+function r(r, e, n) {
+ var i, t, o;
+ void 0 === e && (e = 50), void 0 === n && (n = {});
+ var a = null != (i = n.isImmediate) && i,
+ u = null != (t = n.callback) && t,
+ c = n.maxWait,
+ v = Date.now(),
+ l = [];
+ function f() {
+ if (void 0 !== c) {
+ var r = Date.now() - v;
+ if (r + e >= c) return c - r;
+ }
+ return e;
+ }
+ var d = function () {
+ var e = [].slice.call(arguments),
+ n = this;
+ return new Promise(function (i, t) {
+ var c = a && void 0 === o;
+ if (void 0 !== o && clearTimeout(o), o = setTimeout(function () {
+ if (o = void 0, v = Date.now(), !a) {
+ var i = r.apply(n, e);
+ u && u(i), l.forEach(function (r) {
+ return (0, r.resolve)(i);
+ }), l = [];
+ }
+ }, f()), c) {
+ var d = r.apply(n, e);
+ return u && u(d), i(d);
+ }
+ l.push({
+ resolve: i,
+ reject: t
+ });
+ });
+ };
+ return d.cancel = function (r) {
+ void 0 !== o && clearTimeout(o), l.forEach(function (e) {
+ return (0, e.reject)(r);
+ }), l = [];
+ }, d;
+}
+
+const PCEvents = {
+ NegotiationStarted: 'negotiationStarted',
+ NegotiationComplete: 'negotiationComplete'
+};
+/** @internal */
+class PCTransport extends eventsExports.EventEmitter {
+ constructor(config) {
+ let mediaConstraints = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ super();
+ this.pendingCandidates = [];
+ this.restartingIce = false;
+ this.renegotiate = false;
+ this.trackBitrates = [];
+ this.remoteStereoMids = [];
+ this.remoteNackMids = [];
+ // debounced negotiate interface
+ this.negotiate = r(onError => {
+ this.emit(PCEvents.NegotiationStarted);
+ try {
+ this.createAndSendOffer();
+ } catch (e) {
+ if (onError) {
+ onError(e);
+ } else {
+ throw e;
+ }
+ }
+ }, 100);
+ this.pc = isChromiumBased() ?
+ // @ts-expect-error chrome allows additional media constraints to be passed into the RTCPeerConnection constructor
+ new RTCPeerConnection(config, mediaConstraints) : new RTCPeerConnection(config);
+ }
+ get isICEConnected() {
+ return this.pc.iceConnectionState === 'connected' || this.pc.iceConnectionState === 'completed';
+ }
+ addIceCandidate(candidate) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.pc.remoteDescription && !this.restartingIce) {
+ return this.pc.addIceCandidate(candidate);
+ }
+ this.pendingCandidates.push(candidate);
+ });
+ }
+ setRemoteDescription(sd) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (sd.type === 'offer') {
+ let {
+ stereoMids,
+ nackMids
+ } = extractStereoAndNackAudioFromOffer(sd);
+ this.remoteStereoMids = stereoMids;
+ this.remoteNackMids = nackMids;
+ }
+ yield this.pc.setRemoteDescription(sd);
+ this.pendingCandidates.forEach(candidate => {
+ this.pc.addIceCandidate(candidate);
+ });
+ this.pendingCandidates = [];
+ this.restartingIce = false;
+ if (this.renegotiate) {
+ this.renegotiate = false;
+ this.createAndSendOffer();
+ } else if (sd.type === 'answer') {
+ this.emit(PCEvents.NegotiationComplete);
+ }
+ });
+ }
+ createAndSendOffer(options) {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.onOffer === undefined) {
+ return;
+ }
+ if (options === null || options === void 0 ? void 0 : options.iceRestart) {
+ livekitLogger.debug('restarting ICE');
+ this.restartingIce = true;
+ }
+ if (this.pc.signalingState === 'have-local-offer') {
+ // we're waiting for the peer to accept our offer, so we'll just wait
+ // the only exception to this is when ICE restart is needed
+ const currentSD = this.pc.remoteDescription;
+ if ((options === null || options === void 0 ? void 0 : options.iceRestart) && currentSD) {
+ // TODO: handle when ICE restart is needed but we don't have a remote description
+ // the best thing to do is to recreate the peerconnection
+ yield this.pc.setRemoteDescription(currentSD);
+ } else {
+ this.renegotiate = true;
+ return;
+ }
+ } else if (this.pc.signalingState === 'closed') {
+ livekitLogger.warn('could not createOffer with closed peer connection');
+ return;
+ }
+ // actually negotiate
+ livekitLogger.debug('starting to negotiate');
+ const offer = yield this.pc.createOffer(options);
+ const sdpParsed = parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');
+ sdpParsed.media.forEach(media => {
+ if (media.type === 'audio') {
+ ensureAudioNackAndStereo(media, [], []);
+ } else if (media.type === 'video') {
+ ensureVideoDDExtensionForSVC(media);
+ // mung sdp for codec bitrate setting that can't apply by sendEncoding
+ this.trackBitrates.some(trackbr => {
+ if (!media.msid || !media.msid.includes(trackbr.sid)) {
+ return false;
+ }
+ let codecPayload = 0;
+ media.rtp.some(rtp => {
+ if (rtp.codec.toUpperCase() === trackbr.codec.toUpperCase()) {
+ codecPayload = rtp.payload;
+ return true;
+ }
+ return false;
+ });
+ // add x-google-max-bitrate to fmtp line if not exist
+ if (codecPayload > 0) {
+ if (!media.fmtp.some(fmtp => {
+ if (fmtp.payload === codecPayload) {
+ if (!fmtp.config.includes('x-google-start-bitrate')) {
+ fmtp.config += ";x-google-start-bitrate=".concat(trackbr.maxbr * 0.7);
+ }
+ if (!fmtp.config.includes('x-google-max-bitrate')) {
+ fmtp.config += ";x-google-max-bitrate=".concat(trackbr.maxbr);
+ }
+ return true;
+ }
+ return false;
+ })) {
+ media.fmtp.push({
+ payload: codecPayload,
+ config: "x-google-start-bitrate=".concat(trackbr.maxbr * 0.7, ";x-google-max-bitrate=").concat(trackbr.maxbr)
+ });
+ }
+ }
+ return true;
+ });
+ }
+ });
+ this.trackBitrates = [];
+ yield this.setMungedLocalDescription(offer, write(sdpParsed));
+ this.onOffer(offer);
+ });
+ }
+ createAndSetAnswer() {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ const answer = yield this.pc.createAnswer();
+ const sdpParsed = parse((_a = answer.sdp) !== null && _a !== void 0 ? _a : '');
+ sdpParsed.media.forEach(media => {
+ if (media.type === 'audio') {
+ ensureAudioNackAndStereo(media, this.remoteStereoMids, this.remoteNackMids);
+ }
+ });
+ yield this.setMungedLocalDescription(answer, write(sdpParsed));
+ return answer;
+ });
+ }
+ setTrackCodecBitrate(sid, codec, maxbr) {
+ this.trackBitrates.push({
+ sid,
+ codec,
+ maxbr
+ });
+ }
+ close() {
+ this.pc.onconnectionstatechange = null;
+ this.pc.oniceconnectionstatechange = null;
+ this.pc.close();
+ }
+ setMungedLocalDescription(sd, munged) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const originalSdp = sd.sdp;
+ sd.sdp = munged;
+ try {
+ livekitLogger.debug('setting munged local description');
+ yield this.pc.setLocalDescription(sd);
+ return;
+ } catch (e) {
+ livekitLogger.warn("not able to set ".concat(sd.type, ", falling back to unmodified sdp"), {
+ error: e
+ });
+ sd.sdp = originalSdp;
+ }
+ try {
+ yield this.pc.setLocalDescription(sd);
+ } catch (e) {
+ // this error cannot always be caught.
+ // If the local description has a setCodecPreferences error, this error will be uncaught
+ let msg = 'unknown error';
+ if (e instanceof Error) {
+ msg = e.message;
+ } else if (typeof e === 'string') {
+ msg = e;
+ }
+ throw new NegotiationError(msg);
+ }
+ });
+ }
+}
+function ensureAudioNackAndStereo(media, stereoMids, nackMids) {
+ // found opus codec to add nack fb
+ let opusPayload = 0;
+ media.rtp.some(rtp => {
+ if (rtp.codec === 'opus') {
+ opusPayload = rtp.payload;
+ return true;
+ }
+ return false;
+ });
+ // add nack rtcpfb if not exist
+ if (opusPayload > 0) {
+ if (!media.rtcpFb) {
+ media.rtcpFb = [];
+ }
+ if (nackMids.includes(media.mid) && !media.rtcpFb.some(fb => fb.payload === opusPayload && fb.type === 'nack')) {
+ media.rtcpFb.push({
+ payload: opusPayload,
+ type: 'nack'
+ });
+ }
+ if (stereoMids.includes(media.mid)) {
+ media.fmtp.some(fmtp => {
+ if (fmtp.payload === opusPayload) {
+ if (!fmtp.config.includes('stereo=1')) {
+ fmtp.config += ';stereo=1';
+ }
+ return true;
+ }
+ return false;
+ });
+ }
+ }
+}
+function ensureVideoDDExtensionForSVC(media) {
+ var _a, _b, _c, _d;
+ const codec = (_b = (_a = media.rtp[0]) === null || _a === void 0 ? void 0 : _a.codec) === null || _b === void 0 ? void 0 : _b.toLowerCase();
+ if (!isSVCCodec(codec)) {
+ return;
+ }
+ let maxID = 0;
+ const ddFound = (_c = media.ext) === null || _c === void 0 ? void 0 : _c.some(ext => {
+ if (ext.uri === ddExtensionURI) {
+ return true;
+ }
+ if (ext.value > maxID) {
+ maxID = ext.value;
+ }
+ return false;
+ });
+ if (!ddFound) {
+ (_d = media.ext) === null || _d === void 0 ? void 0 : _d.push({
+ value: maxID + 1,
+ uri: ddExtensionURI
+ });
+ }
+}
+function extractStereoAndNackAudioFromOffer(offer) {
+ var _a;
+ const stereoMids = [];
+ const nackMids = [];
+ const sdpParsed = parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');
+ let opusPayload = 0;
+ sdpParsed.media.forEach(media => {
+ var _a;
+ if (media.type === 'audio') {
+ media.rtp.some(rtp => {
+ if (rtp.codec === 'opus') {
+ opusPayload = rtp.payload;
+ return true;
+ }
+ return false;
+ });
+ if ((_a = media.rtcpFb) === null || _a === void 0 ? void 0 : _a.some(fb => fb.payload === opusPayload && fb.type === 'nack')) {
+ nackMids.push(media.mid);
+ }
+ media.fmtp.some(fmtp => {
+ if (fmtp.payload === opusPayload) {
+ if (fmtp.config.includes('sprop-stereo=1')) {
+ stereoMids.push(media.mid);
+ }
+ return true;
+ }
+ return false;
+ });
+ }
+ });
+ return {
+ stereoMids,
+ nackMids
+ };
+}
+
+class RegionUrlProvider {
+ constructor(url, token) {
+ this.lastUpdateAt = 0;
+ this.settingsCacheTime = 3000;
+ this.attemptedRegions = [];
+ this.serverUrl = new URL(url);
+ this.token = token;
+ }
+ isCloud() {
+ return isCloud(this.serverUrl);
+ }
+ getNextBestRegionUrl(abortSignal) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.isCloud()) {
+ throw Error('region availability is only supported for LiveKit Cloud domains');
+ }
+ if (!this.regionSettings || Date.now() - this.lastUpdateAt > this.settingsCacheTime) {
+ this.regionSettings = yield this.fetchRegionSettings(abortSignal);
+ }
+ const regionsLeft = this.regionSettings.regions.filter(region => !this.attemptedRegions.find(attempted => attempted.url === region.url));
+ if (regionsLeft.length > 0) {
+ const nextRegion = regionsLeft[0];
+ this.attemptedRegions.push(nextRegion);
+ livekitLogger.debug("next region: ".concat(nextRegion.region));
+ return nextRegion.url;
+ } else {
+ return null;
+ }
+ });
+ }
+ resetAttempts() {
+ this.attemptedRegions = [];
+ }
+ fetchRegionSettings(signal) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const regionSettingsResponse = yield fetch("".concat(getCloudConfigUrl(this.serverUrl), "/regions"), {
+ headers: {
+ authorization: "Bearer ".concat(this.token)
+ },
+ signal
+ });
+ if (regionSettingsResponse.ok) {
+ const regionSettings = yield regionSettingsResponse.json();
+ this.lastUpdateAt = Date.now();
+ return regionSettings;
+ } else {
+ throw new ConnectionError("Could not fetch region settings: ".concat(regionSettingsResponse.statusText), regionSettingsResponse.status === 401 ? 0 /* ConnectionErrorReason.NotAllowed */ : undefined, regionSettingsResponse.status);
+ }
+ });
+ }
+}
+function getCloudConfigUrl(serverUrl) {
+ return "".concat(serverUrl.protocol.replace('ws', 'http'), "//").concat(serverUrl.host, "/settings");
+}
+
+class VideoPreset {
+ constructor(width, height, maxBitrate, maxFramerate, priority) {
+ this.width = width;
+ this.height = height;
+ this.encoding = {
+ maxBitrate,
+ maxFramerate,
+ priority
+ };
+ }
+ get resolution() {
+ return {
+ width: this.width,
+ height: this.height,
+ frameRate: this.encoding.maxFramerate,
+ aspectRatio: this.width / this.height
+ };
+ }
+}
+const backupCodecs = ['vp8', 'h264'];
+function isBackupCodec(codec) {
+ return !!backupCodecs.find(backup => backup === codec);
+}
+function isCodecEqual(c1, c2) {
+ return (c1 === null || c1 === void 0 ? void 0 : c1.toLowerCase().replace(/audio\/|video\//y, '')) === (c2 === null || c2 === void 0 ? void 0 : c2.toLowerCase().replace(/audio\/|video\//y, ''));
+}
+var AudioPresets;
+(function (AudioPresets) {
+ AudioPresets.telephone = {
+ maxBitrate: 12000
+ };
+ AudioPresets.speech = {
+ maxBitrate: 20000
+ };
+ AudioPresets.music = {
+ maxBitrate: 32000
+ };
+ AudioPresets.musicStereo = {
+ maxBitrate: 48000
+ };
+ AudioPresets.musicHighQuality = {
+ maxBitrate: 64000
+ };
+ AudioPresets.musicHighQualityStereo = {
+ maxBitrate: 96000
+ };
+})(AudioPresets || (AudioPresets = {}));
+/**
+ * Sane presets for video resolution/encoding
+ */
+const VideoPresets = {
+ h90: new VideoPreset(160, 90, 60000, 15),
+ h180: new VideoPreset(320, 180, 120000, 15),
+ h216: new VideoPreset(384, 216, 180000, 15),
+ h360: new VideoPreset(640, 360, 300000, 20),
+ h540: new VideoPreset(960, 540, 600000, 25),
+ h720: new VideoPreset(1280, 720, 1700000, 30),
+ h1080: new VideoPreset(1920, 1080, 3000000, 30),
+ h1440: new VideoPreset(2560, 1440, 5000000, 30),
+ h2160: new VideoPreset(3840, 2160, 8000000, 30)
+};
+/**
+ * Four by three presets
+ */
+const VideoPresets43 = {
+ h120: new VideoPreset(160, 120, 80000, 15),
+ h180: new VideoPreset(240, 180, 100000, 15),
+ h240: new VideoPreset(320, 240, 150000, 15),
+ h360: new VideoPreset(480, 360, 225000, 20),
+ h480: new VideoPreset(640, 480, 300000, 20),
+ h540: new VideoPreset(720, 540, 450000, 25),
+ h720: new VideoPreset(960, 720, 1500000, 30),
+ h1080: new VideoPreset(1440, 1080, 2500000, 30),
+ h1440: new VideoPreset(1920, 1440, 3500000, 30)
+};
+const ScreenSharePresets = {
+ h360fps3: new VideoPreset(640, 360, 200000, 3, 'medium'),
+ h720fps5: new VideoPreset(1280, 720, 400000, 5, 'medium'),
+ h720fps15: new VideoPreset(1280, 720, 1000000, 15, 'medium'),
+ h1080fps15: new VideoPreset(1920, 1080, 1500000, 15, 'medium'),
+ h1080fps30: new VideoPreset(1920, 1080, 3000000, 30, 'medium')
+};
+
+const publishDefaults = {
+ /**
+ * @deprecated
+ */
+ audioBitrate: AudioPresets.music.maxBitrate,
+ audioPreset: AudioPresets.music,
+ dtx: true,
+ red: true,
+ forceStereo: false,
+ simulcast: true,
+ screenShareEncoding: ScreenSharePresets.h1080fps15.encoding,
+ stopMicTrackOnMute: false,
+ videoCodec: 'vp8',
+ backupCodec: {
+ codec: 'vp8',
+ encoding: VideoPresets.h540.encoding
+ }
+};
+const audioDefaults = {
+ autoGainControl: true,
+ echoCancellation: true,
+ noiseSuppression: true
+};
+const videoDefaults = {
+ resolution: VideoPresets.h720.resolution
+};
+const roomOptionDefaults = {
+ adaptiveStream: false,
+ dynacast: false,
+ stopLocalTrackOnUnpublish: true,
+ reconnectPolicy: new DefaultReconnectPolicy(),
+ disconnectOnPageLeave: true,
+ expWebAudioMix: false
+};
+const roomConnectOptionDefaults = {
+ autoSubscribe: true,
+ maxRetries: 1,
+ peerConnectionTimeout: 15000
+};
+
+/**
+ * Events are the primary way LiveKit notifies your application of changes.
+ *
+ * The following are events emitted by [[Room]], listen to room events like
+ *
+ * ```typescript
+ * room.on(RoomEvent.TrackPublished, (track, publication, participant) => {})
+ * ```
+ */
+var RoomEvent;
+(function (RoomEvent) {
+ /**
+ * When the connection to the server has been established
+ */
+ RoomEvent["Connected"] = "connected";
+ /**
+ * When the connection to the server has been interrupted and it's attempting
+ * to reconnect.
+ */
+ RoomEvent["Reconnecting"] = "reconnecting";
+ /**
+ * Fires when a reconnection has been successful.
+ */
+ RoomEvent["Reconnected"] = "reconnected";
+ /**
+ * When disconnected from room. This fires when room.disconnect() is called or
+ * when an unrecoverable connection issue had occured
+ */
+ RoomEvent["Disconnected"] = "disconnected";
+ /**
+ * Whenever the connection state of the room changes
+ *
+ * args: ([[ConnectionState]])
+ */
+ RoomEvent["ConnectionStateChanged"] = "connectionStateChanged";
+ /**
+ * @deprecated StateChanged has been renamed to ConnectionStateChanged
+ */
+ RoomEvent["StateChanged"] = "connectionStateChanged";
+ /**
+ * When input or output devices on the machine have changed.
+ */
+ RoomEvent["MediaDevicesChanged"] = "mediaDevicesChanged";
+ /**
+ * When a [[RemoteParticipant]] joins *after* the local
+ * participant. It will not emit events for participants that are already
+ * in the room
+ *
+ * args: ([[RemoteParticipant]])
+ */
+ RoomEvent["ParticipantConnected"] = "participantConnected";
+ /**
+ * When a [[RemoteParticipant]] leaves *after* the local
+ * participant has joined.
+ *
+ * args: ([[RemoteParticipant]])
+ */
+ RoomEvent["ParticipantDisconnected"] = "participantDisconnected";
+ /**
+ * When a new track is published to room *after* the local
+ * participant has joined. It will not fire for tracks that are already published.
+ *
+ * A track published doesn't mean the participant has subscribed to it. It's
+ * simply reflecting the state of the room.
+ *
+ * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])
+ */
+ RoomEvent["TrackPublished"] = "trackPublished";
+ /**
+ * The [[LocalParticipant]] has subscribed to a new track. This event will **always**
+ * fire as long as new tracks are ready for use.
+ *
+ * args: ([[RemoteTrack]], [[RemoteTrackPublication]], [[RemoteParticipant]])
+ */
+ RoomEvent["TrackSubscribed"] = "trackSubscribed";
+ /**
+ * Could not subscribe to a track
+ *
+ * args: (track sid, [[RemoteParticipant]])
+ */
+ RoomEvent["TrackSubscriptionFailed"] = "trackSubscriptionFailed";
+ /**
+ * A [[RemoteParticipant]] has unpublished a track
+ *
+ * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])
+ */
+ RoomEvent["TrackUnpublished"] = "trackUnpublished";
+ /**
+ * A subscribed track is no longer available. Clients should listen to this
+ * event and ensure they detach tracks.
+ *
+ * args: ([[Track]], [[RemoteTrackPublication]], [[RemoteParticipant]])
+ */
+ RoomEvent["TrackUnsubscribed"] = "trackUnsubscribed";
+ /**
+ * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]
+ *
+ * args: ([[TrackPublication]], [[Participant]])
+ */
+ RoomEvent["TrackMuted"] = "trackMuted";
+ /**
+ * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]
+ *
+ * args: ([[TrackPublication]], [[Participant]])
+ */
+ RoomEvent["TrackUnmuted"] = "trackUnmuted";
+ /**
+ * A local track was published successfully. This event is helpful to know
+ * when to update your local UI with the newly published track.
+ *
+ * args: ([[LocalTrackPublication]], [[LocalParticipant]])
+ */
+ RoomEvent["LocalTrackPublished"] = "localTrackPublished";
+ /**
+ * A local track was unpublished. This event is helpful to know when to remove
+ * the local track from your UI.
+ *
+ * When a user stops sharing their screen by pressing "End" on the browser UI,
+ * this event will also fire.
+ *
+ * args: ([[LocalTrackPublication]], [[LocalParticipant]])
+ */
+ RoomEvent["LocalTrackUnpublished"] = "localTrackUnpublished";
+ /**
+ * When a local audio track is published the SDK checks whether there is complete silence
+ * on that track and emits the LocalAudioSilenceDetected event in that case.
+ * This allows for applications to show UI informing users that they might have to
+ * reset their audio hardware or check for proper device connectivity.
+ */
+ RoomEvent["LocalAudioSilenceDetected"] = "localAudioSilenceDetected";
+ /**
+ * Active speakers changed. List of speakers are ordered by their audio level.
+ * loudest speakers first. This will include the LocalParticipant too.
+ *
+ * Speaker updates are sent only to the publishing participant and their subscribers.
+ *
+ * args: (Array<[[Participant]]>)
+ */
+ RoomEvent["ActiveSpeakersChanged"] = "activeSpeakersChanged";
+ /**
+ * Participant metadata is a simple way for app-specific state to be pushed to
+ * all users.
+ * When RoomService.UpdateParticipantMetadata is called to change a participant's
+ * state, *all* participants in the room will fire this event.
+ *
+ * args: (prevMetadata: string, [[Participant]])
+ *
+ */
+ RoomEvent["ParticipantMetadataChanged"] = "participantMetadataChanged";
+ /**
+ * Participant's display name changed
+ *
+ * args: (name: string, [[Participant]])
+ *
+ */
+ RoomEvent["ParticipantNameChanged"] = "participantNameChanged";
+ /**
+ * Room metadata is a simple way for app-specific state to be pushed to
+ * all users.
+ * When RoomService.UpdateRoomMetadata is called to change a room's state,
+ * *all* participants in the room will fire this event.
+ *
+ * args: (string)
+ */
+ RoomEvent["RoomMetadataChanged"] = "roomMetadataChanged";
+ /**
+ * Data received from another participant.
+ * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.
+ * All participants in the room will receive the messages sent to the room.
+ *
+ * args: (payload: Uint8Array, participant: [[Participant]], kind: [[DataPacket_Kind]], topic?: string)
+ */
+ RoomEvent["DataReceived"] = "dataReceived";
+ /**
+ * Connection quality was changed for a Participant. It'll receive updates
+ * from the local participant, as well as any [[RemoteParticipant]]s that we are
+ * subscribed to.
+ *
+ * args: (connectionQuality: [[ConnectionQuality]], participant: [[Participant]])
+ */
+ RoomEvent["ConnectionQualityChanged"] = "connectionQualityChanged";
+ /**
+ * StreamState indicates if a subscribed (remote) track has been paused by the SFU
+ * (typically this happens because of subscriber's bandwidth constraints)
+ *
+ * When bandwidth conditions allow, the track will be resumed automatically.
+ * TrackStreamStateChanged will also be emitted when that happens.
+ *
+ * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]],
+ * participant: [[RemoteParticipant]])
+ */
+ RoomEvent["TrackStreamStateChanged"] = "trackStreamStateChanged";
+ /**
+ * One of subscribed tracks have changed its permissions for the current
+ * participant. If permission was revoked, then the track will no longer
+ * be subscribed. If permission was granted, a TrackSubscribed event will
+ * be emitted.
+ *
+ * args: (pub: [[RemoteTrackPublication]],
+ * status: [[TrackPublication.SubscriptionStatus]],
+ * participant: [[RemoteParticipant]])
+ */
+ RoomEvent["TrackSubscriptionPermissionChanged"] = "trackSubscriptionPermissionChanged";
+ /**
+ * One of subscribed tracks have changed its status for the current
+ * participant.
+ *
+ * args: (pub: [[RemoteTrackPublication]],
+ * status: [[TrackPublication.SubscriptionStatus]],
+ * participant: [[RemoteParticipant]])
+ */
+ RoomEvent["TrackSubscriptionStatusChanged"] = "trackSubscriptionStatusChanged";
+ /**
+ * LiveKit will attempt to autoplay all audio tracks when you attach them to
+ * audio elements. However, if that fails, we'll notify you via AudioPlaybackStatusChanged.
+ * `Room.canPlayAudio` will indicate if audio playback is permitted.
+ */
+ RoomEvent["AudioPlaybackStatusChanged"] = "audioPlaybackChanged";
+ /**
+ * When we have encountered an error while attempting to create a track.
+ * The errors take place in getUserMedia().
+ * Use MediaDeviceFailure.getFailure(error) to get the reason of failure.
+ * [[LocalParticipant.lastCameraError]] and [[LocalParticipant.lastMicrophoneError]]
+ * will indicate if it had an error while creating the audio or video track respectively.
+ *
+ * args: (error: Error)
+ */
+ RoomEvent["MediaDevicesError"] = "mediaDevicesError";
+ /**
+ * A participant's permission has changed. Currently only fired on LocalParticipant.
+ * args: (prevPermissions: [[ParticipantPermission]], participant: [[Participant]])
+ */
+ RoomEvent["ParticipantPermissionsChanged"] = "participantPermissionsChanged";
+ /**
+ * Signal connected, can publish tracks.
+ */
+ RoomEvent["SignalConnected"] = "signalConnected";
+ /**
+ * Recording of a room has started/stopped. Room.isRecording will be updated too.
+ * args: (isRecording: boolean)
+ */
+ RoomEvent["RecordingStatusChanged"] = "recordingStatusChanged";
+ /**
+ * Emits whenever the current buffer status of a data channel changes
+ * args: (isLow: boolean, kind: [[DataPacket_Kind]])
+ */
+ RoomEvent["DCBufferStatusChanged"] = "dcBufferStatusChanged";
+})(RoomEvent || (RoomEvent = {}));
+var ParticipantEvent;
+(function (ParticipantEvent) {
+ /**
+ * When a new track is published to room *after* the local
+ * participant has joined. It will not fire for tracks that are already published.
+ *
+ * A track published doesn't mean the participant has subscribed to it. It's
+ * simply reflecting the state of the room.
+ *
+ * args: ([[RemoteTrackPublication]])
+ */
+ ParticipantEvent["TrackPublished"] = "trackPublished";
+ /**
+ * Successfully subscribed to the [[RemoteParticipant]]'s track.
+ * This event will **always** fire as long as new tracks are ready for use.
+ *
+ * args: ([[RemoteTrack]], [[RemoteTrackPublication]])
+ */
+ ParticipantEvent["TrackSubscribed"] = "trackSubscribed";
+ /**
+ * Could not subscribe to a track
+ *
+ * args: (track sid)
+ */
+ ParticipantEvent["TrackSubscriptionFailed"] = "trackSubscriptionFailed";
+ /**
+ * A [[RemoteParticipant]] has unpublished a track
+ *
+ * args: ([[RemoteTrackPublication]])
+ */
+ ParticipantEvent["TrackUnpublished"] = "trackUnpublished";
+ /**
+ * A subscribed track is no longer available. Clients should listen to this
+ * event and ensure they detach tracks.
+ *
+ * args: ([[RemoteTrack]], [[RemoteTrackPublication]])
+ */
+ ParticipantEvent["TrackUnsubscribed"] = "trackUnsubscribed";
+ /**
+ * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]
+ *
+ * args: ([[TrackPublication]])
+ */
+ ParticipantEvent["TrackMuted"] = "trackMuted";
+ /**
+ * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]
+ *
+ * args: ([[TrackPublication]])
+ */
+ ParticipantEvent["TrackUnmuted"] = "trackUnmuted";
+ /**
+ * A local track was published successfully. This event is helpful to know
+ * when to update your local UI with the newly published track.
+ *
+ * args: ([[LocalTrackPublication]])
+ */
+ ParticipantEvent["LocalTrackPublished"] = "localTrackPublished";
+ /**
+ * A local track was unpublished. This event is helpful to know when to remove
+ * the local track from your UI.
+ *
+ * When a user stops sharing their screen by pressing "End" on the browser UI,
+ * this event will also fire.
+ *
+ * args: ([[LocalTrackPublication]])
+ */
+ ParticipantEvent["LocalTrackUnpublished"] = "localTrackUnpublished";
+ /**
+ * Participant metadata is a simple way for app-specific state to be pushed to
+ * all users.
+ * When RoomService.UpdateParticipantMetadata is called to change a participant's
+ * state, *all* participants in the room will fire this event.
+ * To access the current metadata, see [[Participant.metadata]].
+ *
+ * args: (prevMetadata: string)
+ *
+ */
+ ParticipantEvent["ParticipantMetadataChanged"] = "participantMetadataChanged";
+ /**
+ * Participant's display name changed
+ *
+ * args: (name: string, [[Participant]])
+ *
+ */
+ ParticipantEvent["ParticipantNameChanged"] = "participantNameChanged";
+ /**
+ * Data received from this participant as sender.
+ * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.
+ * All participants in the room will receive the messages sent to the room.
+ *
+ * args: (payload: Uint8Array, kind: [[DataPacket_Kind]])
+ */
+ ParticipantEvent["DataReceived"] = "dataReceived";
+ /**
+ * Has speaking status changed for the current participant
+ *
+ * args: (speaking: boolean)
+ */
+ ParticipantEvent["IsSpeakingChanged"] = "isSpeakingChanged";
+ /**
+ * Connection quality was changed for a Participant. It'll receive updates
+ * from the local participant, as well as any [[RemoteParticipant]]s that we are
+ * subscribed to.
+ *
+ * args: (connectionQuality: [[ConnectionQuality]])
+ */
+ ParticipantEvent["ConnectionQualityChanged"] = "connectionQualityChanged";
+ /**
+ * StreamState indicates if a subscribed track has been paused by the SFU
+ * (typically this happens because of subscriber's bandwidth constraints)
+ *
+ * When bandwidth conditions allow, the track will be resumed automatically.
+ * TrackStreamStateChanged will also be emitted when that happens.
+ *
+ * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]])
+ */
+ ParticipantEvent["TrackStreamStateChanged"] = "trackStreamStateChanged";
+ /**
+ * One of subscribed tracks have changed its permissions for the current
+ * participant. If permission was revoked, then the track will no longer
+ * be subscribed. If permission was granted, a TrackSubscribed event will
+ * be emitted.
+ *
+ * args: (pub: [[RemoteTrackPublication]],
+ * status: [[TrackPublication.SubscriptionStatus]])
+ */
+ ParticipantEvent["TrackSubscriptionPermissionChanged"] = "trackSubscriptionPermissionChanged";
+ /**
+ * One of the remote participants publications has changed its subscription status.
+ *
+ */
+ ParticipantEvent["TrackSubscriptionStatusChanged"] = "trackSubscriptionStatusChanged";
+ // fired only on LocalParticipant
+ /** @internal */
+ ParticipantEvent["MediaDevicesError"] = "mediaDevicesError";
+ /**
+ * A participant's permission has changed. Currently only fired on LocalParticipant.
+ * args: (prevPermissions: [[ParticipantPermission]])
+ */
+ ParticipantEvent["ParticipantPermissionsChanged"] = "participantPermissionsChanged";
+})(ParticipantEvent || (ParticipantEvent = {}));
+/** @internal */
+var EngineEvent;
+(function (EngineEvent) {
+ EngineEvent["TransportsCreated"] = "transportsCreated";
+ EngineEvent["Connected"] = "connected";
+ EngineEvent["Disconnected"] = "disconnected";
+ EngineEvent["Resuming"] = "resuming";
+ EngineEvent["Resumed"] = "resumed";
+ EngineEvent["Restarting"] = "restarting";
+ EngineEvent["Restarted"] = "restarted";
+ EngineEvent["SignalResumed"] = "signalResumed";
+ EngineEvent["SignalRestarted"] = "signalRestarted";
+ EngineEvent["Closing"] = "closing";
+ EngineEvent["MediaTrackAdded"] = "mediaTrackAdded";
+ EngineEvent["ActiveSpeakersUpdate"] = "activeSpeakersUpdate";
+ EngineEvent["DataPacketReceived"] = "dataPacketReceived";
+ EngineEvent["DCBufferStatusChanged"] = "dcBufferStatusChanged";
+})(EngineEvent || (EngineEvent = {}));
+var TrackEvent;
+(function (TrackEvent) {
+ TrackEvent["Message"] = "message";
+ TrackEvent["Muted"] = "muted";
+ TrackEvent["Unmuted"] = "unmuted";
+ /**
+ * Only fires on LocalTracks
+ */
+ TrackEvent["Restarted"] = "restarted";
+ TrackEvent["Ended"] = "ended";
+ TrackEvent["Subscribed"] = "subscribed";
+ TrackEvent["Unsubscribed"] = "unsubscribed";
+ /** @internal */
+ TrackEvent["UpdateSettings"] = "updateSettings";
+ /** @internal */
+ TrackEvent["UpdateSubscription"] = "updateSubscription";
+ /** @internal */
+ TrackEvent["AudioPlaybackStarted"] = "audioPlaybackStarted";
+ /** @internal */
+ TrackEvent["AudioPlaybackFailed"] = "audioPlaybackFailed";
+ /**
+ * @internal
+ * Only fires on LocalAudioTrack instances
+ */
+ TrackEvent["AudioSilenceDetected"] = "audioSilenceDetected";
+ /** @internal */
+ TrackEvent["VisibilityChanged"] = "visibilityChanged";
+ /** @internal */
+ TrackEvent["VideoDimensionsChanged"] = "videoDimensionsChanged";
+ /** @internal */
+ TrackEvent["ElementAttached"] = "elementAttached";
+ /** @internal */
+ TrackEvent["ElementDetached"] = "elementDetached";
+ /**
+ * @internal
+ * Only fires on LocalTracks
+ */
+ TrackEvent["UpstreamPaused"] = "upstreamPaused";
+ /**
+ * @internal
+ * Only fires on LocalTracks
+ */
+ TrackEvent["UpstreamResumed"] = "upstreamResumed";
+ /**
+ * @internal
+ * Fires on RemoteTrackPublication
+ */
+ TrackEvent["SubscriptionPermissionChanged"] = "subscriptionPermissionChanged";
+ /**
+ * Fires on RemoteTrackPublication
+ */
+ TrackEvent["SubscriptionStatusChanged"] = "subscriptionStatusChanged";
+ /**
+ * Fires on RemoteTrackPublication
+ */
+ TrackEvent["SubscriptionFailed"] = "subscriptionFailed";
+})(TrackEvent || (TrackEvent = {}));
+
+const BACKGROUND_REACTION_DELAY = 5000;
+// keep old audio elements when detached, we would re-use them since on iOS
+// Safari tracks which audio elements have been "blessed" by the user.
+const recycledElements = [];
+class Track extends eventsExports.EventEmitter {
+ constructor(mediaTrack, kind) {
+ super();
+ this.attachedElements = [];
+ this.isMuted = false;
+ /**
+ * indicates current state of stream, it'll indicate `paused` if the track
+ * has been paused by congestion controller
+ */
+ this.streamState = Track.StreamState.Active;
+ this.isInBackground = false;
+ this._currentBitrate = 0;
+ this.appVisibilityChangedListener = () => {
+ if (this.backgroundTimeout) {
+ clearTimeout(this.backgroundTimeout);
+ }
+ // delay app visibility update if it goes to hidden
+ // update immediately if it comes back to focus
+ if (document.visibilityState === 'hidden') {
+ this.backgroundTimeout = setTimeout(() => this.handleAppVisibilityChanged(), BACKGROUND_REACTION_DELAY);
+ } else {
+ this.handleAppVisibilityChanged();
+ }
+ };
+ this.setMaxListeners(100);
+ this.kind = kind;
+ this._mediaStreamTrack = mediaTrack;
+ this._mediaStreamID = mediaTrack.id;
+ this.source = Track.Source.Unknown;
+ }
+ /** current receive bits per second */
+ get currentBitrate() {
+ return this._currentBitrate;
+ }
+ get mediaStreamTrack() {
+ return this._mediaStreamTrack;
+ }
+ /**
+ * @internal
+ * used for keep mediaStream's first id, since it's id might change
+ * if we disable/enable a track
+ */
+ get mediaStreamID() {
+ return this._mediaStreamID;
+ }
+ attach(element) {
+ let elementType = 'audio';
+ if (this.kind === Track.Kind.Video) {
+ elementType = 'video';
+ }
+ if (this.attachedElements.length === 0 && Track.Kind.Video) {
+ this.addAppVisibilityListener();
+ }
+ if (!element) {
+ if (elementType === 'audio') {
+ recycledElements.forEach(e => {
+ if (e.parentElement === null && !element) {
+ element = e;
+ }
+ });
+ if (element) {
+ // remove it from pool
+ recycledElements.splice(recycledElements.indexOf(element), 1);
+ }
+ }
+ if (!element) {
+ element = document.createElement(elementType);
+ }
+ }
+ if (!this.attachedElements.includes(element)) {
+ this.attachedElements.push(element);
+ }
+ // even if we believe it's already attached to the element, it's possible
+ // the element's srcObject was set to something else out of band.
+ // we'll want to re-attach it in that case
+ attachToElement(this.mediaStreamTrack, element);
+ // handle auto playback failures
+ const allMediaStreamTracks = element.srcObject.getTracks();
+ if (allMediaStreamTracks.some(tr => tr.kind === 'audio')) {
+ // manually play audio to detect audio playback status
+ element.play().then(() => {
+ this.emit(TrackEvent.AudioPlaybackStarted);
+ }).catch(e => {
+ if (e.name === 'NotAllowedError') {
+ this.emit(TrackEvent.AudioPlaybackFailed, e);
+ } else {
+ livekitLogger.warn('could not playback audio', e);
+ }
+ // If audio playback isn't allowed make sure we still play back the video
+ if (element && allMediaStreamTracks.some(tr => tr.kind === 'video') && e.name === 'NotAllowedError') {
+ element.muted = true;
+ element.play().catch(() => {
+ // catch for Safari, exceeded options at this point to automatically play the media element
+ });
+ }
+ });
+ }
+ this.emit(TrackEvent.ElementAttached, element);
+ return element;
+ }
+ detach(element) {
+ try {
+ // detach from a single element
+ if (element) {
+ detachTrack(this.mediaStreamTrack, element);
+ const idx = this.attachedElements.indexOf(element);
+ if (idx >= 0) {
+ this.attachedElements.splice(idx, 1);
+ this.recycleElement(element);
+ this.emit(TrackEvent.ElementDetached, element);
+ }
+ return element;
+ }
+ const detached = [];
+ this.attachedElements.forEach(elm => {
+ detachTrack(this.mediaStreamTrack, elm);
+ detached.push(elm);
+ this.recycleElement(elm);
+ this.emit(TrackEvent.ElementDetached, elm);
+ });
+ // remove all tracks
+ this.attachedElements = [];
+ return detached;
+ } finally {
+ if (this.attachedElements.length === 0) {
+ this.removeAppVisibilityListener();
+ }
+ }
+ }
+ stop() {
+ this.stopMonitor();
+ this._mediaStreamTrack.stop();
+ }
+ enable() {
+ this._mediaStreamTrack.enabled = true;
+ }
+ disable() {
+ this._mediaStreamTrack.enabled = false;
+ }
+ /* @internal */
+ stopMonitor() {
+ if (this.monitorInterval) {
+ clearInterval(this.monitorInterval);
+ }
+ }
+ recycleElement(element) {
+ if (element instanceof HTMLAudioElement) {
+ // we only need to re-use a single element
+ let shouldCache = true;
+ element.pause();
+ recycledElements.forEach(e => {
+ if (!e.parentElement) {
+ shouldCache = false;
+ }
+ });
+ if (shouldCache) {
+ recycledElements.push(element);
+ }
+ }
+ }
+ handleAppVisibilityChanged() {
+ return __awaiter(this, void 0, void 0, function* () {
+ this.isInBackground = document.visibilityState === 'hidden';
+ });
+ }
+ addAppVisibilityListener() {
+ if (isWeb()) {
+ this.isInBackground = document.visibilityState === 'hidden';
+ document.addEventListener('visibilitychange', this.appVisibilityChangedListener);
+ } else {
+ this.isInBackground = false;
+ }
+ }
+ removeAppVisibilityListener() {
+ if (isWeb()) {
+ document.removeEventListener('visibilitychange', this.appVisibilityChangedListener);
+ }
+ }
+}
+/** @internal */
+function attachToElement(track, element) {
+ let mediaStream;
+ if (element.srcObject instanceof MediaStream) {
+ mediaStream = element.srcObject;
+ } else {
+ mediaStream = new MediaStream();
+ }
+ // check if track matches existing track
+ let existingTracks;
+ if (track.kind === 'audio') {
+ existingTracks = mediaStream.getAudioTracks();
+ } else {
+ existingTracks = mediaStream.getVideoTracks();
+ }
+ if (!existingTracks.includes(track)) {
+ existingTracks.forEach(et => {
+ mediaStream.removeTrack(et);
+ });
+ mediaStream.addTrack(track);
+ }
+ element.autoplay = true;
+ // In case there are no audio tracks present on the mediastream, we set the element as muted to ensure autoplay works
+ element.muted = mediaStream.getAudioTracks().length === 0;
+ if (element instanceof HTMLVideoElement) {
+ element.playsInline = true;
+ }
+ // avoid flicker
+ if (element.srcObject !== mediaStream) {
+ element.srcObject = mediaStream;
+ if ((isSafari() || isFireFox()) && element instanceof HTMLVideoElement) {
+ // Firefox also has a timing issue where video doesn't actually get attached unless
+ // performed out-of-band
+ // Safari 15 has a bug where in certain layouts, video element renders
+ // black until the page is resized or other changes take place.
+ // Resetting the src triggers it to render.
+ // https://developer.apple.com/forums/thread/690523
+ setTimeout(() => {
+ element.srcObject = mediaStream;
+ // Safari 15 sometimes fails to start a video
+ // when the window is backgrounded before the first frame is drawn
+ // manually calling play here seems to fix that
+ element.play().catch(() => {
+ /* do nothing */
+ });
+ }, 0);
+ }
+ }
+}
+/** @internal */
+function detachTrack(track, element) {
+ if (element.srcObject instanceof MediaStream) {
+ const mediaStream = element.srcObject;
+ mediaStream.removeTrack(track);
+ if (mediaStream.getTracks().length > 0) {
+ element.srcObject = mediaStream;
+ } else {
+ element.srcObject = null;
+ }
+ }
+}
+(function (Track) {
+ let Kind;
+ (function (Kind) {
+ Kind["Audio"] = "audio";
+ Kind["Video"] = "video";
+ Kind["Unknown"] = "unknown";
+ })(Kind = Track.Kind || (Track.Kind = {}));
+ let Source;
+ (function (Source) {
+ Source["Camera"] = "camera";
+ Source["Microphone"] = "microphone";
+ Source["ScreenShare"] = "screen_share";
+ Source["ScreenShareAudio"] = "screen_share_audio";
+ Source["Unknown"] = "unknown";
+ })(Source = Track.Source || (Track.Source = {}));
+ let StreamState$1;
+ (function (StreamState) {
+ StreamState["Active"] = "active";
+ StreamState["Paused"] = "paused";
+ StreamState["Unknown"] = "unknown";
+ })(StreamState$1 = Track.StreamState || (Track.StreamState = {}));
+ /** @internal */
+ function kindToProto(k) {
+ switch (k) {
+ case Kind.Audio:
+ return TrackType.AUDIO;
+ case Kind.Video:
+ return TrackType.VIDEO;
+ default:
+ return TrackType.UNRECOGNIZED;
+ }
+ }
+ Track.kindToProto = kindToProto;
+ /** @internal */
+ function kindFromProto(t) {
+ switch (t) {
+ case TrackType.AUDIO:
+ return Kind.Audio;
+ case TrackType.VIDEO:
+ return Kind.Video;
+ default:
+ return Kind.Unknown;
+ }
+ }
+ Track.kindFromProto = kindFromProto;
+ /** @internal */
+ function sourceToProto(s) {
+ switch (s) {
+ case Source.Camera:
+ return TrackSource.CAMERA;
+ case Source.Microphone:
+ return TrackSource.MICROPHONE;
+ case Source.ScreenShare:
+ return TrackSource.SCREEN_SHARE;
+ case Source.ScreenShareAudio:
+ return TrackSource.SCREEN_SHARE_AUDIO;
+ default:
+ return TrackSource.UNRECOGNIZED;
+ }
+ }
+ Track.sourceToProto = sourceToProto;
+ /** @internal */
+ function sourceFromProto(s) {
+ switch (s) {
+ case TrackSource.CAMERA:
+ return Source.Camera;
+ case TrackSource.MICROPHONE:
+ return Source.Microphone;
+ case TrackSource.SCREEN_SHARE:
+ return Source.ScreenShare;
+ case TrackSource.SCREEN_SHARE_AUDIO:
+ return Source.ScreenShareAudio;
+ default:
+ return Source.Unknown;
+ }
+ }
+ Track.sourceFromProto = sourceFromProto;
+ /** @internal */
+ function streamStateFromProto(s) {
+ switch (s) {
+ case StreamState.ACTIVE:
+ return StreamState$1.Active;
+ case StreamState.PAUSED:
+ return StreamState$1.Paused;
+ default:
+ return StreamState$1.Unknown;
+ }
+ }
+ Track.streamStateFromProto = streamStateFromProto;
+})(Track || (Track = {}));
+
+const lossyDataChannel = '_lossy';
+const reliableDataChannel = '_reliable';
+const minReconnectWait = 2 * 1000;
+const leaveReconnect = 'leave-reconnect';
+var PCState;
+(function (PCState) {
+ PCState[PCState["New"] = 0] = "New";
+ PCState[PCState["Connected"] = 1] = "Connected";
+ PCState[PCState["Disconnected"] = 2] = "Disconnected";
+ PCState[PCState["Reconnecting"] = 3] = "Reconnecting";
+ PCState[PCState["Closed"] = 4] = "Closed";
+})(PCState || (PCState = {}));
+/** @internal */
+class RTCEngine extends eventsExports.EventEmitter {
+ get isClosed() {
+ return this._isClosed;
+ }
+ constructor(options) {
+ super();
+ this.options = options;
+ this.rtcConfig = {};
+ this.peerConnectionTimeout = roomConnectOptionDefaults.peerConnectionTimeout;
+ this.fullReconnectOnNext = false;
+ this.subscriberPrimary = false;
+ this.pcState = PCState.New;
+ this._isClosed = true;
+ this.pendingTrackResolvers = {};
+ // true if publisher connection has already been established.
+ // this is helpful to know if we need to restart ICE on the publisher connection
+ this.hasPublished = false;
+ this.reconnectAttempts = 0;
+ this.reconnectStart = 0;
+ this.attemptingReconnect = false;
+ /** keeps track of how often an initial join connection has been tried */
+ this.joinAttempts = 0;
+ /** specifies how often an initial join connection is allowed to retry */
+ this.maxJoinAttempts = 1;
+ this.shouldFailNext = false;
+ this.handleDataChannel = _ref => {
+ let {
+ channel
+ } = _ref;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!channel) {
+ return;
+ }
+ if (channel.label === reliableDataChannel) {
+ this.reliableDCSub = channel;
+ } else if (channel.label === lossyDataChannel) {
+ this.lossyDCSub = channel;
+ } else {
+ return;
+ }
+ livekitLogger.debug("on data channel ".concat(channel.id, ", ").concat(channel.label));
+ channel.onmessage = this.handleDataMessage;
+ });
+ };
+ this.handleDataMessage = message => __awaiter(this, void 0, void 0, function* () {
+ var _a, _b;
+ // make sure to respect incoming data message order by processing message events one after the other
+ const unlock = yield this.dataProcessLock.lock();
+ try {
+ // decode
+ let buffer;
+ if (message.data instanceof ArrayBuffer) {
+ buffer = message.data;
+ } else if (message.data instanceof Blob) {
+ buffer = yield message.data.arrayBuffer();
+ } else {
+ livekitLogger.error('unsupported data type', message.data);
+ return;
+ }
+ const dp = DataPacket.decode(new Uint8Array(buffer));
+ if (((_a = dp.value) === null || _a === void 0 ? void 0 : _a.$case) === 'speaker') {
+ // dispatch speaker updates
+ this.emit(EngineEvent.ActiveSpeakersUpdate, dp.value.speaker.speakers);
+ } else if (((_b = dp.value) === null || _b === void 0 ? void 0 : _b.$case) === 'user') {
+ this.emit(EngineEvent.DataPacketReceived, dp.value.user, dp.kind);
+ }
+ } finally {
+ unlock();
+ }
+ });
+ this.handleDataError = event => {
+ const channel = event.currentTarget;
+ const channelKind = channel.maxRetransmits === 0 ? 'lossy' : 'reliable';
+ if (event instanceof ErrorEvent) {
+ const {
+ error
+ } = event.error;
+ livekitLogger.error("DataChannel error on ".concat(channelKind, ": ").concat(event.message), error);
+ } else {
+ livekitLogger.error("Unknown DataChannel Error on ".concat(channelKind), event);
+ }
+ };
+ this.handleBufferedAmountLow = event => {
+ const channel = event.currentTarget;
+ const channelKind = channel.maxRetransmits === 0 ? DataPacket_Kind.LOSSY : DataPacket_Kind.RELIABLE;
+ this.updateAndEmitDCBufferStatus(channelKind);
+ };
+ // websocket reconnect behavior. if websocket is interrupted, and the PeerConnection
+ // continues to work, we can reconnect to websocket to continue the session
+ // after a number of retries, we'll close and give up permanently
+ this.handleDisconnect = (connection, disconnectReason) => {
+ if (this._isClosed) {
+ return;
+ }
+ livekitLogger.warn("".concat(connection, " disconnected"));
+ if (this.reconnectAttempts === 0) {
+ // only reset start time on the first try
+ this.reconnectStart = Date.now();
+ }
+ const disconnect = duration => {
+ livekitLogger.warn("could not recover connection after ".concat(this.reconnectAttempts, " attempts, ").concat(duration, "ms. giving up"));
+ this.emit(EngineEvent.Disconnected);
+ this.close();
+ };
+ const duration = Date.now() - this.reconnectStart;
+ let delay = this.getNextRetryDelay({
+ elapsedMs: duration,
+ retryCount: this.reconnectAttempts
+ });
+ if (delay === null) {
+ disconnect(duration);
+ return;
+ }
+ if (connection === leaveReconnect) {
+ delay = 0;
+ }
+ livekitLogger.debug("reconnecting in ".concat(delay, "ms"));
+ this.clearReconnectTimeout();
+ if (this.url && this.token && isCloud(new URL(this.url))) {
+ this.regionUrlProvider = new RegionUrlProvider(this.url, this.token);
+ }
+ this.reconnectTimeout = CriticalTimers.setTimeout(() => this.attemptReconnect(disconnectReason), delay);
+ };
+ this.waitForRestarted = () => {
+ return new Promise((resolve, reject) => {
+ if (this.pcState === PCState.Connected) {
+ resolve();
+ }
+ const onRestarted = () => {
+ this.off(EngineEvent.Disconnected, onDisconnected);
+ resolve();
+ };
+ const onDisconnected = () => {
+ this.off(EngineEvent.Restarted, onRestarted);
+ reject();
+ };
+ this.once(EngineEvent.Restarted, onRestarted);
+ this.once(EngineEvent.Disconnected, onDisconnected);
+ });
+ };
+ this.updateAndEmitDCBufferStatus = kind => {
+ const status = this.isBufferStatusLow(kind);
+ if (typeof status !== 'undefined' && status !== this.dcBufferStatus.get(kind)) {
+ this.dcBufferStatus.set(kind, status);
+ this.emit(EngineEvent.DCBufferStatusChanged, status, kind);
+ }
+ };
+ this.isBufferStatusLow = kind => {
+ const dc = this.dataChannelForKind(kind);
+ if (dc) {
+ return dc.bufferedAmount <= dc.bufferedAmountLowThreshold;
+ }
+ };
+ this.handleBrowserOnLine = () => {
+ // in case the engine is currently reconnecting, attempt a reconnect immediately after the browser state has changed to 'onLine'
+ if (this.client.isReconnecting) {
+ this.clearReconnectTimeout();
+ this.attemptReconnect(ReconnectReason.RR_SIGNAL_DISCONNECTED);
+ }
+ };
+ this.client = new SignalClient();
+ this.client.signalLatency = this.options.expSignalLatency;
+ this.reconnectPolicy = this.options.reconnectPolicy;
+ this.registerOnLineListener();
+ this.closingLock = new Mutex();
+ this.dataProcessLock = new Mutex();
+ this.dcBufferStatus = new Map([[DataPacket_Kind.LOSSY, true], [DataPacket_Kind.RELIABLE, true]]);
+ }
+ join(url, token, opts, abortSignal) {
+ return __awaiter(this, void 0, void 0, function* () {
+ this.url = url;
+ this.token = token;
+ this.signalOpts = opts;
+ try {
+ this.joinAttempts += 1;
+ const joinResponse = yield this.client.join(url, token, opts, abortSignal);
+ this._isClosed = false;
+ this.latestJoinResponse = joinResponse;
+ this.subscriberPrimary = joinResponse.subscriberPrimary;
+ if (!this.publisher) {
+ this.configure(joinResponse);
+ }
+ // create offer
+ if (!this.subscriberPrimary) {
+ this.negotiate();
+ }
+ this.clientConfiguration = joinResponse.clientConfiguration;
+ return joinResponse;
+ } catch (e) {
+ if (e instanceof ConnectionError) {
+ if (e.reason === 1 /* ConnectionErrorReason.ServerUnreachable */) {
+ livekitLogger.warn("Couldn't connect to server, attempt ".concat(this.joinAttempts, " of ").concat(this.maxJoinAttempts));
+ if (this.joinAttempts < this.maxJoinAttempts) {
+ return this.join(url, token, opts, abortSignal);
+ }
+ }
+ }
+ throw e;
+ }
+ });
+ }
+ close() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield this.closingLock.lock();
+ if (this.isClosed) {
+ unlock();
+ return;
+ }
+ try {
+ this._isClosed = true;
+ this.emit(EngineEvent.Closing);
+ this.removeAllListeners();
+ this.deregisterOnLineListener();
+ this.clearPendingReconnect();
+ if (this.publisher && this.publisher.pc.signalingState !== 'closed') {
+ this.publisher.pc.getSenders().forEach(sender => {
+ var _a, _b;
+ try {
+ // TODO: react-native-webrtc doesn't have removeTrack yet.
+ if ((_a = this.publisher) === null || _a === void 0 ? void 0 : _a.pc.removeTrack) {
+ (_b = this.publisher) === null || _b === void 0 ? void 0 : _b.pc.removeTrack(sender);
+ }
+ } catch (e) {
+ livekitLogger.warn('could not removeTrack', {
+ error: e
+ });
+ }
+ });
+ this.publisher.close();
+ this.publisher = undefined;
+ }
+ if (this.subscriber) {
+ this.subscriber.close();
+ this.subscriber = undefined;
+ }
+ yield this.client.close();
+ } finally {
+ unlock();
+ }
+ });
+ }
+ addTrack(req) {
+ if (this.pendingTrackResolvers[req.cid]) {
+ throw new TrackInvalidError('a track with the same ID has already been published');
+ }
+ return new Promise((resolve, reject) => {
+ const publicationTimeout = setTimeout(() => {
+ delete this.pendingTrackResolvers[req.cid];
+ reject(new ConnectionError('publication of local track timed out, no response from server'));
+ }, 10000);
+ this.pendingTrackResolvers[req.cid] = {
+ resolve: info => {
+ clearTimeout(publicationTimeout);
+ resolve(info);
+ },
+ reject: () => {
+ clearTimeout(publicationTimeout);
+ reject(new Error('Cancelled publication by calling unpublish'));
+ }
+ };
+ this.client.sendAddTrack(req);
+ });
+ }
+ /**
+ * Removes sender from PeerConnection, returning true if it was removed successfully
+ * and a negotiation is necessary
+ * @param sender
+ * @returns
+ */
+ removeTrack(sender) {
+ var _a;
+ if (sender.track && this.pendingTrackResolvers[sender.track.id]) {
+ const {
+ reject
+ } = this.pendingTrackResolvers[sender.track.id];
+ if (reject) {
+ reject();
+ }
+ delete this.pendingTrackResolvers[sender.track.id];
+ }
+ try {
+ (_a = this.publisher) === null || _a === void 0 ? void 0 : _a.pc.removeTrack(sender);
+ return true;
+ } catch (e) {
+ livekitLogger.warn('failed to remove track', {
+ error: e,
+ method: 'removeTrack'
+ });
+ }
+ return false;
+ }
+ updateMuteStatus(trackSid, muted) {
+ this.client.sendMuteTrack(trackSid, muted);
+ }
+ get dataSubscriberReadyState() {
+ var _a;
+ return (_a = this.reliableDCSub) === null || _a === void 0 ? void 0 : _a.readyState;
+ }
+ getConnectedServerAddress() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.primaryPC === undefined) {
+ return undefined;
+ }
+ return getConnectedAddress(this.primaryPC);
+ });
+ }
+ configure(joinResponse) {
+ var _a;
+ // already configured
+ if (this.publisher || this.subscriber) {
+ return;
+ }
+ this.participantSid = (_a = joinResponse.participant) === null || _a === void 0 ? void 0 : _a.sid;
+ const rtcConfig = this.makeRTCConfiguration(joinResponse);
+ const googConstraints = {
+ optional: [{
+ googDscp: true
+ }]
+ };
+ this.publisher = new PCTransport(rtcConfig, googConstraints);
+ this.subscriber = new PCTransport(rtcConfig);
+ this.emit(EngineEvent.TransportsCreated, this.publisher, this.subscriber);
+ this.publisher.pc.onicecandidate = ev => {
+ if (!ev.candidate) return;
+ livekitLogger.trace('adding ICE candidate for peer', ev.candidate);
+ this.client.sendIceCandidate(ev.candidate, SignalTarget.PUBLISHER);
+ };
+ this.subscriber.pc.onicecandidate = ev => {
+ if (!ev.candidate) return;
+ this.client.sendIceCandidate(ev.candidate, SignalTarget.SUBSCRIBER);
+ };
+ this.publisher.onOffer = offer => {
+ this.client.sendOffer(offer);
+ };
+ let primaryPC = this.publisher.pc;
+ let secondaryPC = this.subscriber.pc;
+ let subscriberPrimary = joinResponse.subscriberPrimary;
+ if (subscriberPrimary) {
+ primaryPC = this.subscriber.pc;
+ secondaryPC = this.publisher.pc;
+ // in subscriber primary mode, server side opens sub data channels.
+ this.subscriber.pc.ondatachannel = this.handleDataChannel;
+ }
+ this.primaryPC = primaryPC;
+ primaryPC.onconnectionstatechange = () => __awaiter(this, void 0, void 0, function* () {
+ livekitLogger.debug("primary PC state changed ".concat(primaryPC.connectionState));
+ if (primaryPC.connectionState === 'connected') {
+ const shouldEmit = this.pcState === PCState.New;
+ this.pcState = PCState.Connected;
+ if (shouldEmit) {
+ this.emit(EngineEvent.Connected, joinResponse);
+ }
+ } else if (primaryPC.connectionState === 'failed') {
+ // on Safari, PeerConnection will switch to 'disconnected' during renegotiation
+ if (this.pcState === PCState.Connected) {
+ this.pcState = PCState.Disconnected;
+ this.handleDisconnect('primary peerconnection', subscriberPrimary ? ReconnectReason.RR_SUBSCRIBER_FAILED : ReconnectReason.RR_PUBLISHER_FAILED);
+ }
+ }
+ });
+ secondaryPC.onconnectionstatechange = () => __awaiter(this, void 0, void 0, function* () {
+ livekitLogger.debug("secondary PC state changed ".concat(secondaryPC.connectionState));
+ // also reconnect if secondary peerconnection fails
+ if (secondaryPC.connectionState === 'failed') {
+ this.handleDisconnect('secondary peerconnection', subscriberPrimary ? ReconnectReason.RR_PUBLISHER_FAILED : ReconnectReason.RR_SUBSCRIBER_FAILED);
+ }
+ });
+ this.subscriber.pc.ontrack = ev => {
+ this.emit(EngineEvent.MediaTrackAdded, ev.track, ev.streams[0], ev.receiver);
+ };
+ this.createDataChannels();
+ // configure signaling client
+ this.client.onAnswer = sd => __awaiter(this, void 0, void 0, function* () {
+ if (!this.publisher) {
+ return;
+ }
+ livekitLogger.debug('received server answer', {
+ RTCSdpType: sd.type,
+ signalingState: this.publisher.pc.signalingState
+ });
+ yield this.publisher.setRemoteDescription(sd);
+ });
+ // add candidate on trickle
+ this.client.onTrickle = (candidate, target) => {
+ if (!this.publisher || !this.subscriber) {
+ return;
+ }
+ livekitLogger.trace('got ICE candidate from peer', {
+ candidate,
+ target
+ });
+ if (target === SignalTarget.PUBLISHER) {
+ this.publisher.addIceCandidate(candidate);
+ } else {
+ this.subscriber.addIceCandidate(candidate);
+ }
+ };
+ // when server creates an offer for the client
+ this.client.onOffer = sd => __awaiter(this, void 0, void 0, function* () {
+ if (!this.subscriber) {
+ return;
+ }
+ livekitLogger.debug('received server offer', {
+ RTCSdpType: sd.type,
+ signalingState: this.subscriber.pc.signalingState
+ });
+ yield this.subscriber.setRemoteDescription(sd);
+ // answer the offer
+ const answer = yield this.subscriber.createAndSetAnswer();
+ this.client.sendAnswer(answer);
+ });
+ this.client.onLocalTrackPublished = res => {
+ livekitLogger.debug('received trackPublishedResponse', res);
+ const {
+ resolve
+ } = this.pendingTrackResolvers[res.cid];
+ if (!resolve) {
+ livekitLogger.error("missing track resolver for ".concat(res.cid));
+ return;
+ }
+ delete this.pendingTrackResolvers[res.cid];
+ resolve(res.track);
+ };
+ this.client.onTokenRefresh = token => {
+ this.token = token;
+ };
+ this.client.onClose = () => {
+ this.handleDisconnect('signal', ReconnectReason.RR_SIGNAL_DISCONNECTED);
+ };
+ this.client.onLeave = leave => {
+ if (leave === null || leave === void 0 ? void 0 : leave.canReconnect) {
+ this.fullReconnectOnNext = true;
+ this.primaryPC = undefined;
+ // reconnect immediately instead of waiting for next attempt
+ this.handleDisconnect(leaveReconnect);
+ } else {
+ this.emit(EngineEvent.Disconnected, leave === null || leave === void 0 ? void 0 : leave.reason);
+ this.close();
+ }
+ livekitLogger.trace('leave request', {
+ leave
+ });
+ };
+ }
+ makeRTCConfiguration(serverResponse) {
+ const rtcConfig = Object.assign({}, this.rtcConfig);
+ // update ICE servers before creating PeerConnection
+ if (serverResponse.iceServers && !rtcConfig.iceServers) {
+ const rtcIceServers = [];
+ serverResponse.iceServers.forEach(iceServer => {
+ const rtcIceServer = {
+ urls: iceServer.urls
+ };
+ if (iceServer.username) rtcIceServer.username = iceServer.username;
+ if (iceServer.credential) {
+ rtcIceServer.credential = iceServer.credential;
+ }
+ rtcIceServers.push(rtcIceServer);
+ });
+ rtcConfig.iceServers = rtcIceServers;
+ }
+ if (serverResponse.clientConfiguration && serverResponse.clientConfiguration.forceRelay === ClientConfigSetting.ENABLED) {
+ rtcConfig.iceTransportPolicy = 'relay';
+ }
+ // @ts-ignore
+ rtcConfig.sdpSemantics = 'unified-plan';
+ // @ts-ignore
+ rtcConfig.continualGatheringPolicy = 'gather_continually';
+ return rtcConfig;
+ }
+ createDataChannels() {
+ if (!this.publisher) {
+ return;
+ }
+ // clear old data channel callbacks if recreate
+ if (this.lossyDC) {
+ this.lossyDC.onmessage = null;
+ this.lossyDC.onerror = null;
+ }
+ if (this.reliableDC) {
+ this.reliableDC.onmessage = null;
+ this.reliableDC.onerror = null;
+ }
+ // create data channels
+ this.lossyDC = this.publisher.pc.createDataChannel(lossyDataChannel, {
+ // will drop older packets that arrive
+ ordered: true,
+ maxRetransmits: 0
+ });
+ this.reliableDC = this.publisher.pc.createDataChannel(reliableDataChannel, {
+ ordered: true
+ });
+ // also handle messages over the pub channel, for backwards compatibility
+ this.lossyDC.onmessage = this.handleDataMessage;
+ this.reliableDC.onmessage = this.handleDataMessage;
+ // handle datachannel errors
+ this.lossyDC.onerror = this.handleDataError;
+ this.reliableDC.onerror = this.handleDataError;
+ // set up dc buffer threshold, set to 64kB (otherwise 0 by default)
+ this.lossyDC.bufferedAmountLowThreshold = 65535;
+ this.reliableDC.bufferedAmountLowThreshold = 65535;
+ // handle buffer amount low events
+ this.lossyDC.onbufferedamountlow = this.handleBufferedAmountLow;
+ this.reliableDC.onbufferedamountlow = this.handleBufferedAmountLow;
+ }
+ setPreferredCodec(transceiver, kind, videoCodec) {
+ if (!('getCapabilities' in RTCRtpSender)) {
+ return;
+ }
+ const cap = RTCRtpSender.getCapabilities(kind);
+ if (!cap) return;
+ livekitLogger.debug('get capabilities', cap);
+ const matched = [];
+ const partialMatched = [];
+ const unmatched = [];
+ cap.codecs.forEach(c => {
+ const codec = c.mimeType.toLowerCase();
+ if (codec === 'audio/opus') {
+ matched.push(c);
+ return;
+ }
+ const matchesVideoCodec = codec === "video/".concat(videoCodec);
+ if (!matchesVideoCodec) {
+ unmatched.push(c);
+ return;
+ }
+ // for h264 codecs that have sdpFmtpLine available, use only if the
+ // profile-level-id is 42e01f for cross-browser compatibility
+ if (videoCodec === 'h264') {
+ if (c.sdpFmtpLine && c.sdpFmtpLine.includes('profile-level-id=42e01f')) {
+ matched.push(c);
+ } else {
+ partialMatched.push(c);
+ }
+ return;
+ }
+ matched.push(c);
+ });
+ if (supportsSetCodecPreferences(transceiver)) {
+ transceiver.setCodecPreferences(matched.concat(partialMatched, unmatched));
+ }
+ }
+ createSender(track, opts, encodings) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (supportsTransceiver()) {
+ return this.createTransceiverRTCRtpSender(track, opts, encodings);
+ }
+ if (supportsAddTrack()) {
+ livekitLogger.debug('using add-track fallback');
+ return this.createRTCRtpSender(track.mediaStreamTrack);
+ }
+ throw new UnexpectedConnectionState('Required webRTC APIs not supported on this device');
+ });
+ }
+ createSimulcastSender(track, simulcastTrack, opts, encodings) {
+ return __awaiter(this, void 0, void 0, function* () {
+ // store RTCRtpSender
+ // @ts-ignore
+ if (supportsTransceiver()) {
+ return this.createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings);
+ }
+ if (supportsAddTrack()) {
+ livekitLogger.debug('using add-track fallback');
+ return this.createRTCRtpSender(track.mediaStreamTrack);
+ }
+ throw new UnexpectedConnectionState('Cannot stream on this device');
+ });
+ }
+ createTransceiverRTCRtpSender(track, opts, encodings) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.publisher) {
+ throw new UnexpectedConnectionState('publisher is closed');
+ }
+ const transceiverInit = {
+ direction: 'sendonly'
+ };
+ if (encodings) {
+ transceiverInit.sendEncodings = encodings;
+ }
+ // addTransceiver for react-native is async. web is synchronous, but await won't effect it.
+ const transceiver = yield this.publisher.pc.addTransceiver(track.mediaStreamTrack, transceiverInit);
+ if (track.kind === Track.Kind.Video && opts.videoCodec) {
+ this.setPreferredCodec(transceiver, track.kind, opts.videoCodec);
+ track.codec = opts.videoCodec;
+ }
+ return transceiver.sender;
+ });
+ }
+ createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.publisher) {
+ throw new UnexpectedConnectionState('publisher is closed');
+ }
+ const transceiverInit = {
+ direction: 'sendonly'
+ };
+ if (encodings) {
+ transceiverInit.sendEncodings = encodings;
+ }
+ // addTransceiver for react-native is async. web is synchronous, but await won't effect it.
+ const transceiver = yield this.publisher.pc.addTransceiver(simulcastTrack.mediaStreamTrack, transceiverInit);
+ if (!opts.videoCodec) {
+ return;
+ }
+ this.setPreferredCodec(transceiver, track.kind, opts.videoCodec);
+ track.setSimulcastTrackSender(opts.videoCodec, transceiver.sender);
+ return transceiver.sender;
+ });
+ }
+ createRTCRtpSender(track) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.publisher) {
+ throw new UnexpectedConnectionState('publisher is closed');
+ }
+ return this.publisher.pc.addTrack(track);
+ });
+ }
+ attemptReconnect(reason) {
+ var _a, _b, _c;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this._isClosed) {
+ return;
+ }
+ // guard for attempting reconnection multiple times while one attempt is still not finished
+ if (this.attemptingReconnect) {
+ return;
+ }
+ if (((_a = this.clientConfiguration) === null || _a === void 0 ? void 0 : _a.resumeConnection) === ClientConfigSetting.DISABLED ||
+ // signaling state could change to closed due to hardware sleep
+ // those connections cannot be resumed
+ ((_c = (_b = this.primaryPC) === null || _b === void 0 ? void 0 : _b.signalingState) !== null && _c !== void 0 ? _c : 'closed') === 'closed') {
+ this.fullReconnectOnNext = true;
+ }
+ try {
+ this.attemptingReconnect = true;
+ if (this.fullReconnectOnNext) {
+ yield this.restartConnection();
+ } else {
+ yield this.resumeConnection(reason);
+ }
+ this.clearPendingReconnect();
+ this.fullReconnectOnNext = false;
+ } catch (e) {
+ this.reconnectAttempts += 1;
+ let recoverable = true;
+ if (e instanceof UnexpectedConnectionState) {
+ livekitLogger.debug('received unrecoverable error', {
+ error: e
+ });
+ // unrecoverable
+ recoverable = false;
+ } else if (!(e instanceof SignalReconnectError)) {
+ // cannot resume
+ this.fullReconnectOnNext = true;
+ }
+ if (recoverable) {
+ this.handleDisconnect('reconnect', ReconnectReason.RR_UNKOWN);
+ } else {
+ livekitLogger.info("could not recover connection after ".concat(this.reconnectAttempts, " attempts, ").concat(Date.now() - this.reconnectStart, "ms. giving up"));
+ this.emit(EngineEvent.Disconnected);
+ yield this.close();
+ }
+ } finally {
+ this.attemptingReconnect = false;
+ }
+ });
+ }
+ getNextRetryDelay(context) {
+ try {
+ return this.reconnectPolicy.nextRetryDelayInMs(context);
+ } catch (e) {
+ livekitLogger.warn('encountered error in reconnect policy', {
+ error: e
+ });
+ }
+ // error in user code with provided reconnect policy, stop reconnecting
+ return null;
+ }
+ restartConnection(regionUrl) {
+ var _a, _b, _c, _d, _e;
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ if (!this.url || !this.token) {
+ // permanent failure, don't attempt reconnection
+ throw new UnexpectedConnectionState('could not reconnect, url or token not saved');
+ }
+ livekitLogger.info("reconnecting, attempt: ".concat(this.reconnectAttempts));
+ this.emit(EngineEvent.Restarting);
+ if (this.client.isConnected) {
+ yield this.client.sendLeave();
+ }
+ yield this.client.close();
+ this.primaryPC = undefined;
+ (_a = this.publisher) === null || _a === void 0 ? void 0 : _a.close();
+ this.publisher = undefined;
+ (_b = this.subscriber) === null || _b === void 0 ? void 0 : _b.close();
+ this.subscriber = undefined;
+ let joinResponse;
+ try {
+ if (!this.signalOpts) {
+ livekitLogger.warn('attempted connection restart, without signal options present');
+ throw new SignalReconnectError();
+ }
+ // in case a regionUrl is passed, the region URL takes precedence
+ joinResponse = yield this.join(regionUrl !== null && regionUrl !== void 0 ? regionUrl : this.url, this.token, this.signalOpts);
+ } catch (e) {
+ if (e instanceof ConnectionError && e.reason === 0 /* ConnectionErrorReason.NotAllowed */) {
+ throw new UnexpectedConnectionState('could not reconnect, token might be expired');
+ }
+ throw new SignalReconnectError();
+ }
+ if (this.shouldFailNext) {
+ this.shouldFailNext = false;
+ throw new Error('simulated failure');
+ }
+ this.client.setReconnected();
+ this.emit(EngineEvent.SignalRestarted, joinResponse);
+ yield this.waitForPCReconnected();
+ (_c = this.regionUrlProvider) === null || _c === void 0 ? void 0 : _c.resetAttempts();
+ // reconnect success
+ this.emit(EngineEvent.Restarted);
+ } catch (error) {
+ const nextRegionUrl = yield (_d = this.regionUrlProvider) === null || _d === void 0 ? void 0 : _d.getNextBestRegionUrl();
+ if (nextRegionUrl) {
+ yield this.restartConnection(nextRegionUrl);
+ return;
+ } else {
+ // no more regions to try (or we're not on cloud)
+ (_e = this.regionUrlProvider) === null || _e === void 0 ? void 0 : _e.resetAttempts();
+ throw error;
+ }
+ }
+ });
+ }
+ resumeConnection(reason) {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.url || !this.token) {
+ // permanent failure, don't attempt reconnection
+ throw new UnexpectedConnectionState('could not reconnect, url or token not saved');
+ }
+ // trigger publisher reconnect
+ if (!this.publisher || !this.subscriber) {
+ throw new UnexpectedConnectionState('publisher and subscriber connections unset');
+ }
+ livekitLogger.info("resuming signal connection, attempt ".concat(this.reconnectAttempts));
+ this.emit(EngineEvent.Resuming);
+ try {
+ const res = yield this.client.reconnect(this.url, this.token, this.participantSid, reason);
+ if (res) {
+ const rtcConfig = this.makeRTCConfiguration(res);
+ this.publisher.pc.setConfiguration(rtcConfig);
+ this.subscriber.pc.setConfiguration(rtcConfig);
+ }
+ } catch (e) {
+ let message = '';
+ if (e instanceof Error) {
+ message = e.message;
+ }
+ if (e instanceof ConnectionError && e.reason === 0 /* ConnectionErrorReason.NotAllowed */) {
+ throw new UnexpectedConnectionState('could not reconnect, token might be expired');
+ }
+ throw new SignalReconnectError(message);
+ }
+ this.emit(EngineEvent.SignalResumed);
+ if (this.shouldFailNext) {
+ this.shouldFailNext = false;
+ throw new Error('simulated failure');
+ }
+ this.subscriber.restartingIce = true;
+ // only restart publisher if it's needed
+ if (this.hasPublished) {
+ yield this.publisher.createAndSendOffer({
+ iceRestart: true
+ });
+ }
+ yield this.waitForPCReconnected();
+ this.client.setReconnected();
+ // recreate publish datachannel if it's id is null
+ // (for safari https://bugs.webkit.org/show_bug.cgi?id=184688)
+ if (((_a = this.reliableDC) === null || _a === void 0 ? void 0 : _a.readyState) === 'open' && this.reliableDC.id === null) {
+ this.createDataChannels();
+ }
+ // resume success
+ this.emit(EngineEvent.Resumed);
+ });
+ }
+ waitForPCInitialConnection(timeout, abortController) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.pcState === PCState.Connected) {
+ return;
+ }
+ if (this.pcState !== PCState.New) {
+ throw new UnexpectedConnectionState('Expected peer connection to be new on initial connection');
+ }
+ return new Promise((resolve, reject) => {
+ const abortHandler = () => {
+ livekitLogger.warn('closing engine');
+ CriticalTimers.clearTimeout(connectTimeout);
+ reject(new ConnectionError('room connection has been cancelled', 3 /* ConnectionErrorReason.Cancelled */));
+ };
+
+ if (abortController === null || abortController === void 0 ? void 0 : abortController.signal.aborted) {
+ abortHandler();
+ }
+ abortController === null || abortController === void 0 ? void 0 : abortController.signal.addEventListener('abort', abortHandler);
+ const onConnected = () => {
+ CriticalTimers.clearTimeout(connectTimeout);
+ abortController === null || abortController === void 0 ? void 0 : abortController.signal.removeEventListener('abort', abortHandler);
+ resolve();
+ };
+ const connectTimeout = CriticalTimers.setTimeout(() => {
+ this.off(EngineEvent.Connected, onConnected);
+ reject(new ConnectionError('could not establish pc connection'));
+ }, timeout !== null && timeout !== void 0 ? timeout : this.peerConnectionTimeout);
+ this.once(EngineEvent.Connected, onConnected);
+ });
+ });
+ }
+ waitForPCReconnected() {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ const startTime = Date.now();
+ let now = startTime;
+ this.pcState = PCState.Reconnecting;
+ livekitLogger.debug('waiting for peer connection to reconnect');
+ while (now - startTime < this.peerConnectionTimeout) {
+ if (this.primaryPC === undefined) {
+ // we can abort early, connection is hosed
+ break;
+ } else if (
+ // on Safari, we don't get a connectionstatechanged event during ICE restart
+ // this means we'd have to check its status manually and update address
+ // manually
+ now - startTime > minReconnectWait && ((_a = this.primaryPC) === null || _a === void 0 ? void 0 : _a.connectionState) === 'connected') {
+ this.pcState = PCState.Connected;
+ }
+ if (this.pcState === PCState.Connected) {
+ return;
+ }
+ yield sleep(100);
+ now = Date.now();
+ }
+ // have not reconnected, throw
+ throw new ConnectionError('could not establish PC connection');
+ });
+ }
+ /* @internal */
+ sendDataPacket(packet, kind) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const msg = DataPacket.encode(packet).finish();
+ // make sure we do have a data connection
+ yield this.ensurePublisherConnected(kind);
+ const dc = this.dataChannelForKind(kind);
+ if (dc) {
+ dc.send(msg);
+ }
+ this.updateAndEmitDCBufferStatus(kind);
+ });
+ }
+ /**
+ * @internal
+ */
+ ensureDataTransportConnected(kind) {
+ let subscriber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.subscriberPrimary;
+ var _a, _b, _c;
+ return __awaiter(this, void 0, void 0, function* () {
+ const transport = subscriber ? this.subscriber : this.publisher;
+ const transportName = subscriber ? 'Subscriber' : 'Publisher';
+ if (!transport) {
+ throw new ConnectionError("".concat(transportName, " connection not set"));
+ }
+ if (!subscriber && !((_a = this.publisher) === null || _a === void 0 ? void 0 : _a.isICEConnected) && ((_b = this.publisher) === null || _b === void 0 ? void 0 : _b.pc.iceConnectionState) !== 'checking') {
+ // start negotiation
+ this.negotiate();
+ }
+ const targetChannel = this.dataChannelForKind(kind, subscriber);
+ if ((targetChannel === null || targetChannel === void 0 ? void 0 : targetChannel.readyState) === 'open') {
+ return;
+ }
+ // wait until ICE connected
+ const endTime = new Date().getTime() + this.peerConnectionTimeout;
+ while (new Date().getTime() < endTime) {
+ if (transport.isICEConnected && ((_c = this.dataChannelForKind(kind, subscriber)) === null || _c === void 0 ? void 0 : _c.readyState) === 'open') {
+ return;
+ }
+ yield sleep(50);
+ }
+ throw new ConnectionError("could not establish ".concat(transportName, " connection, state: ").concat(transport.pc.iceConnectionState));
+ });
+ }
+ ensurePublisherConnected(kind) {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield this.ensureDataTransportConnected(kind, false);
+ });
+ }
+ /* @internal */
+ verifyTransport() {
+ // primary connection
+ if (!this.primaryPC) {
+ return false;
+ }
+ if (this.primaryPC.connectionState === 'closed' || this.primaryPC.connectionState === 'failed') {
+ return false;
+ }
+ // also verify publisher connection if it's needed or different
+ if (this.hasPublished && this.subscriberPrimary) {
+ if (!this.publisher) {
+ return false;
+ }
+ if (this.publisher.pc.connectionState === 'closed' || this.publisher.pc.connectionState === 'failed') {
+ return false;
+ }
+ }
+ // ensure signal is connected
+ if (!this.client.ws || this.client.ws.readyState === WebSocket.CLOSED) {
+ return false;
+ }
+ return true;
+ }
+ /** @internal */
+ negotiate() {
+ // observe signal state
+ return new Promise((resolve, reject) => {
+ if (!this.publisher) {
+ reject(new NegotiationError('publisher is not defined'));
+ return;
+ }
+ this.hasPublished = true;
+ const handleClosed = () => {
+ livekitLogger.debug('engine disconnected while negotiation was ongoing');
+ cleanup();
+ resolve();
+ return;
+ };
+ this.on(EngineEvent.Closing, handleClosed);
+ const negotiationTimeout = setTimeout(() => {
+ reject('negotiation timed out');
+ this.handleDisconnect('negotiation', ReconnectReason.RR_SIGNAL_DISCONNECTED);
+ }, this.peerConnectionTimeout);
+ const cleanup = () => {
+ clearTimeout(negotiationTimeout);
+ this.off(EngineEvent.Closing, handleClosed);
+ };
+ this.publisher.once(PCEvents.NegotiationStarted, () => {
+ var _a;
+ (_a = this.publisher) === null || _a === void 0 ? void 0 : _a.once(PCEvents.NegotiationComplete, () => {
+ cleanup();
+ resolve();
+ });
+ });
+ this.publisher.negotiate(e => {
+ cleanup();
+ reject(e);
+ if (e instanceof NegotiationError) {
+ this.fullReconnectOnNext = true;
+ }
+ this.handleDisconnect('negotiation', ReconnectReason.RR_UNKOWN);
+ });
+ });
+ }
+ dataChannelForKind(kind, sub) {
+ if (!sub) {
+ if (kind === DataPacket_Kind.LOSSY) {
+ return this.lossyDC;
+ }
+ if (kind === DataPacket_Kind.RELIABLE) {
+ return this.reliableDC;
+ }
+ } else {
+ if (kind === DataPacket_Kind.LOSSY) {
+ return this.lossyDCSub;
+ }
+ if (kind === DataPacket_Kind.RELIABLE) {
+ return this.reliableDCSub;
+ }
+ }
+ }
+ /* @internal */
+ failNext() {
+ // debugging method to fail the next reconnect/resume attempt
+ this.shouldFailNext = true;
+ }
+ clearReconnectTimeout() {
+ if (this.reconnectTimeout) {
+ CriticalTimers.clearTimeout(this.reconnectTimeout);
+ }
+ }
+ clearPendingReconnect() {
+ this.clearReconnectTimeout();
+ this.reconnectAttempts = 0;
+ }
+ registerOnLineListener() {
+ if (isWeb()) {
+ window.addEventListener('online', this.handleBrowserOnLine);
+ }
+ }
+ deregisterOnLineListener() {
+ if (isWeb()) {
+ window.removeEventListener('online', this.handleBrowserOnLine);
+ }
+ }
+}
+function getConnectedAddress(pc) {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ let selectedCandidatePairId = '';
+ const candidatePairs = new Map();
+ // id -> candidate ip
+ const candidates = new Map();
+ const stats = yield pc.getStats();
+ stats.forEach(v => {
+ switch (v.type) {
+ case 'transport':
+ selectedCandidatePairId = v.selectedCandidatePairId;
+ break;
+ case 'candidate-pair':
+ if (selectedCandidatePairId === '' && v.selected) {
+ selectedCandidatePairId = v.id;
+ }
+ candidatePairs.set(v.id, v);
+ break;
+ case 'remote-candidate':
+ candidates.set(v.id, "".concat(v.address, ":").concat(v.port));
+ break;
+ }
+ });
+ if (selectedCandidatePairId === '') {
+ return undefined;
+ }
+ const selectedID = (_a = candidatePairs.get(selectedCandidatePairId)) === null || _a === void 0 ? void 0 : _a.remoteCandidateId;
+ if (selectedID === undefined) {
+ return undefined;
+ }
+ return candidates.get(selectedID);
+ });
+}
+class SignalReconnectError extends Error {}
+
+const monitorFrequency = 2000;
+function computeBitrate(currentStats, prevStats) {
+ if (!prevStats) {
+ return 0;
+ }
+ let bytesNow;
+ let bytesPrev;
+ if ('bytesReceived' in currentStats) {
+ bytesNow = currentStats.bytesReceived;
+ bytesPrev = prevStats.bytesReceived;
+ } else if ('bytesSent' in currentStats) {
+ bytesNow = currentStats.bytesSent;
+ bytesPrev = prevStats.bytesSent;
+ }
+ if (bytesNow === undefined || bytesPrev === undefined || currentStats.timestamp === undefined || prevStats.timestamp === undefined) {
+ return 0;
+ }
+ return (bytesNow - bytesPrev) * 8 * 1000 / (currentStats.timestamp - prevStats.timestamp);
+}
+
+const defaultDimensionsTimeout = 1000;
+class LocalTrack extends Track {
+ /**
+ *
+ * @param mediaTrack
+ * @param kind
+ * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks
+ * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK
+ */
+ constructor(mediaTrack, kind, constraints) {
+ let userProvidedTrack = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+ super(mediaTrack, kind);
+ this.isSettingUpProcessor = false;
+ this._isUpstreamPaused = false;
+ this.handleEnded = () => {
+ if (this.isInBackground) {
+ this.reacquireTrack = true;
+ }
+ this.emit(TrackEvent.Ended, this);
+ };
+ this._mediaStreamTrack.addEventListener('ended', this.handleEnded);
+ this.constraints = constraints !== null && constraints !== void 0 ? constraints : mediaTrack.getConstraints();
+ this.reacquireTrack = false;
+ this.providedByUser = userProvidedTrack;
+ this.muteLock = new Mutex();
+ this.pauseUpstreamLock = new Mutex();
+ }
+ get id() {
+ return this._mediaStreamTrack.id;
+ }
+ get dimensions() {
+ if (this.kind !== Track.Kind.Video) {
+ return undefined;
+ }
+ const {
+ width,
+ height
+ } = this._mediaStreamTrack.getSettings();
+ if (width && height) {
+ return {
+ width,
+ height
+ };
+ }
+ return undefined;
+ }
+ get isUpstreamPaused() {
+ return this._isUpstreamPaused;
+ }
+ get isUserProvided() {
+ return this.providedByUser;
+ }
+ get mediaStreamTrack() {
+ var _a, _b;
+ return (_b = (_a = this.processor) === null || _a === void 0 ? void 0 : _a.processedTrack) !== null && _b !== void 0 ? _b : this._mediaStreamTrack;
+ }
+ waitForDimensions() {
+ let timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultDimensionsTimeout;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.kind === Track.Kind.Audio) {
+ throw new Error('cannot get dimensions for audio tracks');
+ }
+ const started = Date.now();
+ while (Date.now() - started < timeout) {
+ const dims = this.dimensions;
+ if (dims) {
+ return dims;
+ }
+ yield sleep(50);
+ }
+ throw new TrackInvalidError('unable to get track dimensions after timeout');
+ });
+ }
+ /**
+ * @returns DeviceID of the device that is currently being used for this track
+ */
+ getDeviceId() {
+ return __awaiter(this, void 0, void 0, function* () {
+ // screen share doesn't have a usable device id
+ if (this.source === Track.Source.ScreenShare) {
+ return;
+ }
+ const {
+ deviceId,
+ groupId
+ } = this._mediaStreamTrack.getSettings();
+ const kind = this.kind === Track.Kind.Audio ? 'audioinput' : 'videoinput';
+ return DeviceManager.getInstance().normalizeDeviceId(kind, deviceId, groupId);
+ });
+ }
+ mute() {
+ return __awaiter(this, void 0, void 0, function* () {
+ this.setTrackMuted(true);
+ return this;
+ });
+ }
+ unmute() {
+ return __awaiter(this, void 0, void 0, function* () {
+ this.setTrackMuted(false);
+ return this;
+ });
+ }
+ replaceTrack(track) {
+ let userProvidedTrack = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.sender) {
+ throw new TrackInvalidError('unable to replace an unpublished track');
+ }
+ // detach
+ this.attachedElements.forEach(el => {
+ detachTrack(this._mediaStreamTrack, el);
+ });
+ this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);
+ // on Safari, the old audio track must be stopped before attempting to acquire
+ // the new track, otherwise the new track will stop with
+ // 'A MediaStreamTrack ended due to a capture failure`
+ if (!this.providedByUser) {
+ this._mediaStreamTrack.stop();
+ }
+ track.addEventListener('ended', this.handleEnded);
+ livekitLogger.debug('replace MediaStreamTrack');
+ if (this.sender) {
+ yield this.sender.replaceTrack(track);
+ }
+ this._mediaStreamTrack = track;
+ // sync muted state with the enabled state of the newly provided track
+ this._mediaStreamTrack.enabled = !this.isMuted;
+ yield this.resumeUpstream();
+ this.attachedElements.forEach(el => {
+ attachToElement(track, el);
+ });
+ this.mediaStream = new MediaStream([track]);
+ this.providedByUser = userProvidedTrack;
+ if (this.processor) {
+ yield this.stopProcessor();
+ }
+ return this;
+ });
+ }
+ restart(constraints) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!constraints) {
+ constraints = this.constraints;
+ }
+ livekitLogger.debug('restarting track with constraints', constraints);
+ const streamConstraints = {
+ audio: false,
+ video: false
+ };
+ if (this.kind === Track.Kind.Video) {
+ streamConstraints.video = constraints;
+ } else {
+ streamConstraints.audio = constraints;
+ }
+ // detach
+ this.attachedElements.forEach(el => {
+ detachTrack(this.mediaStreamTrack, el);
+ });
+ this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);
+ // on Safari, the old audio track must be stopped before attempting to acquire
+ // the new track, otherwise the new track will stop with
+ // 'A MediaStreamTrack ended due to a capture failure`
+ this._mediaStreamTrack.stop();
+ // create new track and attach
+ const mediaStream = yield navigator.mediaDevices.getUserMedia(streamConstraints);
+ const newTrack = mediaStream.getTracks()[0];
+ newTrack.addEventListener('ended', this.handleEnded);
+ livekitLogger.debug('re-acquired MediaStreamTrack');
+ if (this.sender) {
+ // Track can be restarted after it's unpublished
+ yield this.sender.replaceTrack(newTrack);
+ }
+ this._mediaStreamTrack = newTrack;
+ yield this.resumeUpstream();
+ this.mediaStream = mediaStream;
+ this.constraints = constraints;
+ if (this.processor) {
+ const processor = this.processor;
+ yield this.setProcessor(processor);
+ } else {
+ this.attachedElements.forEach(el => {
+ attachToElement(this._mediaStreamTrack, el);
+ });
+ }
+ this.emit(TrackEvent.Restarted, this);
+ return this;
+ });
+ }
+ setTrackMuted(muted) {
+ livekitLogger.debug("setting ".concat(this.kind, " track ").concat(muted ? 'muted' : 'unmuted'));
+ if (this.isMuted === muted && this._mediaStreamTrack.enabled !== muted) {
+ return;
+ }
+ this.isMuted = muted;
+ this._mediaStreamTrack.enabled = !muted;
+ this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);
+ }
+ get needsReAcquisition() {
+ return this._mediaStreamTrack.readyState !== 'live' || this._mediaStreamTrack.muted || !this._mediaStreamTrack.enabled || this.reacquireTrack;
+ }
+ handleAppVisibilityChanged() {
+ const _super = Object.create(null, {
+ handleAppVisibilityChanged: {
+ get: () => super.handleAppVisibilityChanged
+ }
+ });
+ return __awaiter(this, void 0, void 0, function* () {
+ yield _super.handleAppVisibilityChanged.call(this);
+ if (!isMobile()) return;
+ livekitLogger.debug("visibility changed, is in Background: ".concat(this.isInBackground));
+ if (!this.isInBackground && this.needsReAcquisition && !this.isUserProvided && !this.isMuted) {
+ livekitLogger.debug("track needs to be reaquired, restarting ".concat(this.source));
+ yield this.restart();
+ this.reacquireTrack = false;
+ }
+ });
+ }
+ stop() {
+ var _a;
+ super.stop();
+ (_a = this.processor) === null || _a === void 0 ? void 0 : _a.destroy();
+ this.processor = undefined;
+ }
+ /**
+ * pauses publishing to the server without disabling the local MediaStreamTrack
+ * this is used to display a user's own video locally while pausing publishing to
+ * the server.
+ * this API is unsupported on Safari < 12 due to a bug
+ **/
+ pauseUpstream() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield this.pauseUpstreamLock.lock();
+ try {
+ if (this._isUpstreamPaused === true) {
+ return;
+ }
+ if (!this.sender) {
+ livekitLogger.warn('unable to pause upstream for an unpublished track');
+ return;
+ }
+ this._isUpstreamPaused = true;
+ this.emit(TrackEvent.UpstreamPaused, this);
+ const browser = getBrowser();
+ if ((browser === null || browser === void 0 ? void 0 : browser.name) === 'Safari' && compareVersions(browser.version, '12.0') < 0) {
+ // https://bugs.webkit.org/show_bug.cgi?id=184911
+ throw new DeviceUnsupportedError('pauseUpstream is not supported on Safari < 12.');
+ }
+ yield this.sender.replaceTrack(null);
+ } finally {
+ unlock();
+ }
+ });
+ }
+ resumeUpstream() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield this.pauseUpstreamLock.lock();
+ try {
+ if (this._isUpstreamPaused === false) {
+ return;
+ }
+ if (!this.sender) {
+ livekitLogger.warn('unable to resume upstream for an unpublished track');
+ return;
+ }
+ this._isUpstreamPaused = false;
+ this.emit(TrackEvent.UpstreamResumed, this);
+ yield this.sender.replaceTrack(this._mediaStreamTrack);
+ } finally {
+ unlock();
+ }
+ });
+ }
+ /**
+ * Sets a processor on this track.
+ * See https://github.com/livekit/track-processors-js for example usage
+ *
+ * @experimental
+ *
+ * @param processor
+ * @param showProcessedStreamLocally
+ * @returns
+ */
+ setProcessor(processor) {
+ let showProcessedStreamLocally = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+ var _a, _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.isSettingUpProcessor) {
+ livekitLogger.warn('already trying to set up a processor');
+ return;
+ }
+ livekitLogger.debug('setting up processor');
+ this.isSettingUpProcessor = true;
+ if (this.processor) {
+ yield this.stopProcessor();
+ }
+ if (this.kind === 'unknown') {
+ throw TypeError('cannot set processor on track of unknown kind');
+ }
+ this.processorElement = (_a = this.processorElement) !== null && _a !== void 0 ? _a : document.createElement(this.kind);
+ this.processorElement.muted = true;
+ attachToElement(this._mediaStreamTrack, this.processorElement);
+ this.processorElement.play().catch(e => livekitLogger.error(e));
+ const processorOptions = {
+ kind: this.kind,
+ track: this._mediaStreamTrack,
+ element: this.processorElement
+ };
+ yield processor.init(processorOptions);
+ this.processor = processor;
+ if (this.processor.processedTrack) {
+ for (const el of this.attachedElements) {
+ if (el !== this.processorElement && showProcessedStreamLocally) {
+ detachTrack(this._mediaStreamTrack, el);
+ attachToElement(this.processor.processedTrack, el);
+ }
+ }
+ yield (_b = this.sender) === null || _b === void 0 ? void 0 : _b.replaceTrack(this.processor.processedTrack);
+ }
+ this.isSettingUpProcessor = false;
+ });
+ }
+ getProcessor() {
+ return this.processor;
+ }
+ /**
+ * Stops the track processor
+ * See https://github.com/livekit/track-processors-js for example usage
+ *
+ * @experimental
+ * @returns
+ */
+ stopProcessor() {
+ var _a, _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.processor) return;
+ livekitLogger.debug('stopping processor');
+ (_a = this.processor.processedTrack) === null || _a === void 0 ? void 0 : _a.stop();
+ yield this.processor.destroy();
+ this.processor = undefined;
+ (_b = this.processorElement) === null || _b === void 0 ? void 0 : _b.remove();
+ this.processorElement = undefined;
+ yield this.restart();
+ });
+ }
+}
+
+class LocalAudioTrack extends LocalTrack {
+ /**
+ *
+ * @param mediaTrack
+ * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks
+ * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK
+ */
+ constructor(mediaTrack, constraints) {
+ let userProvidedTrack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+ super(mediaTrack, Track.Kind.Audio, constraints, userProvidedTrack);
+ /** @internal */
+ this.stopOnMute = false;
+ this.monitorSender = () => __awaiter(this, void 0, void 0, function* () {
+ if (!this.sender) {
+ this._currentBitrate = 0;
+ return;
+ }
+ let stats;
+ try {
+ stats = yield this.getSenderStats();
+ } catch (e) {
+ livekitLogger.error('could not get audio sender stats', {
+ error: e
+ });
+ return;
+ }
+ if (stats && this.prevStats) {
+ this._currentBitrate = computeBitrate(stats, this.prevStats);
+ }
+ this.prevStats = stats;
+ });
+ this.checkForSilence();
+ }
+ setDeviceId(deviceId) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.constraints.deviceId === deviceId) {
+ return;
+ }
+ this.constraints.deviceId = deviceId;
+ if (!this.isMuted) {
+ yield this.restartTrack();
+ }
+ });
+ }
+ mute() {
+ const _super = Object.create(null, {
+ mute: {
+ get: () => super.mute
+ }
+ });
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield this.muteLock.lock();
+ try {
+ // disabled special handling as it will cause BT headsets to switch communication modes
+ if (this.source === Track.Source.Microphone && this.stopOnMute && !this.isUserProvided) {
+ livekitLogger.debug('stopping mic track');
+ // also stop the track, so that microphone indicator is turned off
+ this._mediaStreamTrack.stop();
+ }
+ yield _super.mute.call(this);
+ return this;
+ } finally {
+ unlock();
+ }
+ });
+ }
+ unmute() {
+ const _super = Object.create(null, {
+ unmute: {
+ get: () => super.unmute
+ }
+ });
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield this.muteLock.lock();
+ try {
+ if (this.source === Track.Source.Microphone && (this.stopOnMute || this._mediaStreamTrack.readyState === 'ended') && !this.isUserProvided) {
+ livekitLogger.debug('reacquiring mic track');
+ yield this.restartTrack();
+ }
+ yield _super.unmute.call(this);
+ return this;
+ } finally {
+ unlock();
+ }
+ });
+ }
+ restartTrack(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let constraints;
+ if (options) {
+ const streamConstraints = constraintsForOptions({
+ audio: options
+ });
+ if (typeof streamConstraints.audio !== 'boolean') {
+ constraints = streamConstraints.audio;
+ }
+ }
+ yield this.restart(constraints);
+ });
+ }
+ restart(constraints) {
+ const _super = Object.create(null, {
+ restart: {
+ get: () => super.restart
+ }
+ });
+ return __awaiter(this, void 0, void 0, function* () {
+ const track = yield _super.restart.call(this, constraints);
+ this.checkForSilence();
+ return track;
+ });
+ }
+ /* @internal */
+ startMonitor() {
+ if (!isWeb()) {
+ return;
+ }
+ if (this.monitorInterval) {
+ return;
+ }
+ this.monitorInterval = setInterval(() => {
+ this.monitorSender();
+ }, monitorFrequency);
+ }
+ getSenderStats() {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {
+ return undefined;
+ }
+ const stats = yield this.sender.getStats();
+ let audioStats;
+ stats.forEach(v => {
+ if (v.type === 'outbound-rtp') {
+ audioStats = {
+ type: 'audio',
+ streamId: v.id,
+ packetsSent: v.packetsSent,
+ packetsLost: v.packetsLost,
+ bytesSent: v.bytesSent,
+ timestamp: v.timestamp,
+ roundTripTime: v.roundTripTime,
+ jitter: v.jitter
+ };
+ }
+ });
+ return audioStats;
+ });
+ }
+ checkForSilence() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const trackIsSilent = yield detectSilence(this);
+ if (trackIsSilent) {
+ if (!this.isMuted) {
+ livekitLogger.warn('silence detected on local audio track');
+ }
+ this.emit(TrackEvent.AudioSilenceDetected);
+ }
+ return trackIsSilent;
+ });
+ }
+}
+
+/** @internal */
+function mediaTrackToLocalTrack(mediaStreamTrack, constraints) {
+ switch (mediaStreamTrack.kind) {
+ case 'audio':
+ return new LocalAudioTrack(mediaStreamTrack, constraints, false);
+ case 'video':
+ return new LocalVideoTrack(mediaStreamTrack, constraints, false);
+ default:
+ throw new TrackInvalidError("unsupported track type: ".concat(mediaStreamTrack.kind));
+ }
+}
+/* @internal */
+const presets169 = Object.values(VideoPresets);
+/* @internal */
+const presets43 = Object.values(VideoPresets43);
+/* @internal */
+const presetsScreenShare = Object.values(ScreenSharePresets);
+/* @internal */
+const defaultSimulcastPresets169 = [VideoPresets.h180, VideoPresets.h360];
+/* @internal */
+const defaultSimulcastPresets43 = [VideoPresets43.h180, VideoPresets43.h360];
+/* @internal */
+const computeDefaultScreenShareSimulcastPresets = fromPreset => {
+ const layers = [{
+ scaleResolutionDownBy: 2,
+ fps: 3
+ }];
+ return layers.map(t => {
+ var _a;
+ return new VideoPreset(Math.floor(fromPreset.width / t.scaleResolutionDownBy), Math.floor(fromPreset.height / t.scaleResolutionDownBy), Math.max(150000, Math.floor(fromPreset.encoding.maxBitrate / (Math.pow(t.scaleResolutionDownBy, 2) * (((_a = fromPreset.encoding.maxFramerate) !== null && _a !== void 0 ? _a : 30) / t.fps)))), t.fps, fromPreset.encoding.priority);
+ });
+};
+// /**
+// *
+// * @internal
+// * @experimental
+// */
+// const computeDefaultMultiCodecSimulcastEncodings = (width: number, height: number) => {
+// // use vp8 as a default
+// const vp8 = determineAppropriateEncoding(false, width, height);
+// const vp9 = { ...vp8, maxBitrate: vp8.maxBitrate * 0.9 };
+// const h264 = { ...vp8, maxBitrate: vp8.maxBitrate * 1.1 };
+// const av1 = { ...vp8, maxBitrate: vp8.maxBitrate * 0.7 };
+// return {
+// vp8,
+// vp9,
+// h264,
+// av1,
+// };
+// };
+const videoRids = ['q', 'h', 'f'];
+/* @internal */
+function computeVideoEncodings(isScreenShare, width, height, options) {
+ var _a, _b;
+ let videoEncoding = options === null || options === void 0 ? void 0 : options.videoEncoding;
+ if (isScreenShare) {
+ videoEncoding = options === null || options === void 0 ? void 0 : options.screenShareEncoding;
+ }
+ const useSimulcast = options === null || options === void 0 ? void 0 : options.simulcast;
+ const scalabilityMode = options === null || options === void 0 ? void 0 : options.scalabilityMode;
+ const videoCodec = options === null || options === void 0 ? void 0 : options.videoCodec;
+ if (!videoEncoding && !useSimulcast && !scalabilityMode || !width || !height) {
+ // when we aren't simulcasting or svc, will need to return a single encoding without
+ // capping bandwidth. we always require a encoding for dynacast
+ return [{}];
+ }
+ if (!videoEncoding) {
+ // find the right encoding based on width/height
+ videoEncoding = determineAppropriateEncoding(isScreenShare, width, height, videoCodec);
+ livekitLogger.debug('using video encoding', videoEncoding);
+ }
+ const original = new VideoPreset(width, height, videoEncoding.maxBitrate, videoEncoding.maxFramerate);
+ if (scalabilityMode && isSVCCodec(videoCodec)) {
+ livekitLogger.debug("using svc with scalabilityMode ".concat(scalabilityMode));
+ const encodings = [];
+ // svc use first encoding as the original, so we sort encoding from high to low
+ switch (scalabilityMode) {
+ case 'L3T3':
+ case 'L3T3_KEY':
+ encodings.push({
+ rid: videoRids[2],
+ maxBitrate: videoEncoding.maxBitrate,
+ /* @ts-ignore */
+ maxFramerate: original.encoding.maxFramerate,
+ /* @ts-ignore */
+ scalabilityMode: scalabilityMode
+ });
+ livekitLogger.debug('encodings', encodings);
+ return encodings;
+ default:
+ // TODO : support other scalability modes
+ throw new Error("unsupported scalabilityMode: ".concat(scalabilityMode));
+ }
+ }
+ if (!useSimulcast) {
+ return [videoEncoding];
+ }
+ let presets = [];
+ if (isScreenShare) {
+ presets = (_a = sortPresets(options === null || options === void 0 ? void 0 : options.screenShareSimulcastLayers)) !== null && _a !== void 0 ? _a : defaultSimulcastLayers(isScreenShare, original);
+ } else {
+ presets = (_b = sortPresets(options === null || options === void 0 ? void 0 : options.videoSimulcastLayers)) !== null && _b !== void 0 ? _b : defaultSimulcastLayers(isScreenShare, original);
+ }
+ let midPreset;
+ if (presets.length > 0) {
+ const lowPreset = presets[0];
+ if (presets.length > 1) {
+ [, midPreset] = presets;
+ }
+ // NOTE:
+ // 1. Ordering of these encodings is important. Chrome seems
+ // to use the index into encodings to decide which layer
+ // to disable when CPU constrained.
+ // So encodings should be ordered in increasing spatial
+ // resolution order.
+ // 2. ion-sfu translates rids into layers. So, all encodings
+ // should have the base layer `q` and then more added
+ // based on other conditions.
+ const size = Math.max(width, height);
+ if (size >= 960 && midPreset) {
+ return encodingsFromPresets(width, height, [lowPreset, midPreset, original]);
+ }
+ if (size >= 480) {
+ return encodingsFromPresets(width, height, [lowPreset, original]);
+ }
+ }
+ return encodingsFromPresets(width, height, [original]);
+}
+function computeTrackBackupEncodings(track, videoCodec, opts) {
+ var _a, _b, _c, _d;
+ if (!opts.backupCodec || opts.backupCodec.codec === opts.videoCodec) {
+ // backup codec publishing is disabled
+ return;
+ }
+ if (videoCodec !== opts.backupCodec.codec) {
+ livekitLogger.warn('requested a different codec than specified as backup', {
+ serverRequested: videoCodec,
+ backup: opts.backupCodec.codec
+ });
+ }
+ opts.videoCodec = videoCodec;
+ // use backup encoding setting as videoEncoding for backup codec publishing
+ opts.videoEncoding = opts.backupCodec.encoding;
+ const settings = track.mediaStreamTrack.getSettings();
+ const width = (_a = settings.width) !== null && _a !== void 0 ? _a : (_b = track.dimensions) === null || _b === void 0 ? void 0 : _b.width;
+ const height = (_c = settings.height) !== null && _c !== void 0 ? _c : (_d = track.dimensions) === null || _d === void 0 ? void 0 : _d.height;
+ const encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, width, height, opts);
+ return encodings;
+}
+/* @internal */
+function determineAppropriateEncoding(isScreenShare, width, height, codec) {
+ const presets = presetsForResolution(isScreenShare, width, height);
+ let {
+ encoding
+ } = presets[0];
+ // handle portrait by swapping dimensions
+ const size = Math.max(width, height);
+ for (let i = 0; i < presets.length; i += 1) {
+ const preset = presets[i];
+ encoding = preset.encoding;
+ if (preset.width >= size) {
+ break;
+ }
+ }
+ // presets are based on the assumption of vp8 as a codec
+ // for other codecs we adjust the maxBitrate if no specific videoEncoding has been provided
+ // TODO make the bitrate multipliers configurable per codec
+ if (codec) {
+ switch (codec) {
+ case 'av1':
+ encoding = Object.assign({}, encoding);
+ encoding.maxBitrate = encoding.maxBitrate * 0.7;
+ break;
+ case 'vp9':
+ encoding = Object.assign({}, encoding);
+ encoding.maxBitrate = encoding.maxBitrate * 0.85;
+ break;
+ }
+ }
+ return encoding;
+}
+/* @internal */
+function presetsForResolution(isScreenShare, width, height) {
+ if (isScreenShare) {
+ return presetsScreenShare;
+ }
+ const aspect = width > height ? width / height : height / width;
+ if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {
+ return presets169;
+ }
+ return presets43;
+}
+/* @internal */
+function defaultSimulcastLayers(isScreenShare, original) {
+ if (isScreenShare) {
+ return computeDefaultScreenShareSimulcastPresets(original);
+ }
+ const {
+ width,
+ height
+ } = original;
+ const aspect = width > height ? width / height : height / width;
+ if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {
+ return defaultSimulcastPresets169;
+ }
+ return defaultSimulcastPresets43;
+}
+// presets should be ordered by low, medium, high
+function encodingsFromPresets(width, height, presets) {
+ const encodings = [];
+ presets.forEach((preset, idx) => {
+ if (idx >= videoRids.length) {
+ return;
+ }
+ const size = Math.min(width, height);
+ const rid = videoRids[idx];
+ const encoding = {
+ rid,
+ scaleResolutionDownBy: Math.max(1, size / Math.min(preset.width, preset.height)),
+ maxBitrate: preset.encoding.maxBitrate
+ };
+ if (preset.encoding.maxFramerate) {
+ encoding.maxFramerate = preset.encoding.maxFramerate;
+ }
+ if (preset.encoding.priority) {
+ encoding.priority = preset.encoding.priority;
+ encoding.networkPriority = preset.encoding.priority;
+ }
+ encodings.push(encoding);
+ });
+ // RN ios simulcast requires all same framerates.
+ if (isReactNative() && getReactNativeOs() === 'ios') {
+ let topFramerate = undefined;
+ encodings.forEach(encoding => {
+ if (!topFramerate) {
+ topFramerate = encoding.maxFramerate;
+ } else if (encoding.maxFramerate && encoding.maxFramerate > topFramerate) {
+ topFramerate = encoding.maxFramerate;
+ }
+ });
+ let notifyOnce = true;
+ encodings.forEach(encoding => {
+ var _a;
+ if (encoding.maxFramerate != topFramerate) {
+ if (notifyOnce) {
+ notifyOnce = false;
+ livekitLogger.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.");
+ }
+ livekitLogger.info("Setting framerate of encoding \"".concat((_a = encoding.rid) !== null && _a !== void 0 ? _a : '', "\" to ").concat(topFramerate));
+ encoding.maxFramerate = topFramerate;
+ }
+ });
+ }
+ return encodings;
+}
+/** @internal */
+function sortPresets(presets) {
+ if (!presets) return;
+ return presets.sort((a, b) => {
+ const {
+ encoding: aEnc
+ } = a;
+ const {
+ encoding: bEnc
+ } = b;
+ if (aEnc.maxBitrate > bEnc.maxBitrate) {
+ return 1;
+ }
+ if (aEnc.maxBitrate < bEnc.maxBitrate) return -1;
+ if (aEnc.maxBitrate === bEnc.maxBitrate && aEnc.maxFramerate && bEnc.maxFramerate) {
+ return aEnc.maxFramerate > bEnc.maxFramerate ? 1 : -1;
+ }
+ return 0;
+ });
+}
+/** @internal */
+class ScalabilityMode {
+ constructor(scalabilityMode) {
+ const results = scalabilityMode.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);
+ if (!results) {
+ throw new Error('invalid scalability mode');
+ }
+ this.spatial = parseInt(results[1]);
+ this.temporal = parseInt(results[2]);
+ if (results.length > 3) {
+ switch (results[3]) {
+ case 'h':
+ case '_KEY':
+ case '_KEY_SHIFT':
+ this.suffix = results[3];
+ }
+ }
+ }
+ toString() {
+ var _a;
+ return "L".concat(this.spatial, "T").concat(this.temporal).concat((_a = this.suffix) !== null && _a !== void 0 ? _a : '');
+ }
+}
+
+const refreshSubscribedCodecAfterNewCodec = 5000;
+class LocalVideoTrack extends LocalTrack {
+ /**
+ *
+ * @param mediaTrack
+ * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks
+ * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK
+ */
+ constructor(mediaTrack, constraints) {
+ let userProvidedTrack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+ super(mediaTrack, Track.Kind.Video, constraints, userProvidedTrack);
+ /* @internal */
+ this.simulcastCodecs = new Map();
+ this.monitorSender = () => __awaiter(this, void 0, void 0, function* () {
+ if (!this.sender) {
+ this._currentBitrate = 0;
+ return;
+ }
+ let stats;
+ try {
+ stats = yield this.getSenderStats();
+ } catch (e) {
+ livekitLogger.error('could not get audio sender stats', {
+ error: e
+ });
+ return;
+ }
+ const statsMap = new Map(stats.map(s => [s.rid, s]));
+ if (this.prevStats) {
+ let totalBitrate = 0;
+ statsMap.forEach((s, key) => {
+ var _a;
+ const prev = (_a = this.prevStats) === null || _a === void 0 ? void 0 : _a.get(key);
+ totalBitrate += computeBitrate(s, prev);
+ });
+ this._currentBitrate = totalBitrate;
+ }
+ this.prevStats = statsMap;
+ });
+ this.senderLock = new Mutex();
+ }
+ get isSimulcast() {
+ if (this.sender && this.sender.getParameters().encodings.length > 1) {
+ return true;
+ }
+ return false;
+ }
+ /* @internal */
+ startMonitor(signalClient) {
+ var _a;
+ this.signalClient = signalClient;
+ if (!isWeb()) {
+ return;
+ }
+ // save original encodings
+ // TODO : merge simulcast tracks stats
+ const params = (_a = this.sender) === null || _a === void 0 ? void 0 : _a.getParameters();
+ if (params) {
+ this.encodings = params.encodings;
+ }
+ if (this.monitorInterval) {
+ return;
+ }
+ this.monitorInterval = setInterval(() => {
+ this.monitorSender();
+ }, monitorFrequency);
+ }
+ stop() {
+ this._mediaStreamTrack.getConstraints();
+ this.simulcastCodecs.forEach(trackInfo => {
+ trackInfo.mediaStreamTrack.stop();
+ });
+ super.stop();
+ }
+ mute() {
+ const _super = Object.create(null, {
+ mute: {
+ get: () => super.mute
+ }
+ });
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield this.muteLock.lock();
+ try {
+ if (this.source === Track.Source.Camera && !this.isUserProvided) {
+ livekitLogger.debug('stopping camera track');
+ // also stop the track, so that camera indicator is turned off
+ this._mediaStreamTrack.stop();
+ }
+ yield _super.mute.call(this);
+ return this;
+ } finally {
+ unlock();
+ }
+ });
+ }
+ unmute() {
+ const _super = Object.create(null, {
+ unmute: {
+ get: () => super.unmute
+ }
+ });
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield this.muteLock.lock();
+ try {
+ if (this.source === Track.Source.Camera && !this.isUserProvided) {
+ livekitLogger.debug('reacquiring camera track');
+ yield this.restartTrack();
+ }
+ yield _super.unmute.call(this);
+ return this;
+ } finally {
+ unlock();
+ }
+ });
+ }
+ getSenderStats() {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {
+ return [];
+ }
+ const items = [];
+ const stats = yield this.sender.getStats();
+ stats.forEach(v => {
+ var _a;
+ if (v.type === 'outbound-rtp') {
+ const vs = {
+ type: 'video',
+ streamId: v.id,
+ frameHeight: v.frameHeight,
+ frameWidth: v.frameWidth,
+ firCount: v.firCount,
+ pliCount: v.pliCount,
+ nackCount: v.nackCount,
+ packetsSent: v.packetsSent,
+ bytesSent: v.bytesSent,
+ framesSent: v.framesSent,
+ timestamp: v.timestamp,
+ rid: (_a = v.rid) !== null && _a !== void 0 ? _a : v.id,
+ retransmittedPacketsSent: v.retransmittedPacketsSent,
+ qualityLimitationReason: v.qualityLimitationReason,
+ qualityLimitationResolutionChanges: v.qualityLimitationResolutionChanges
+ };
+ // locate the appropriate remote-inbound-rtp item
+ const r = stats.get(v.remoteId);
+ if (r) {
+ vs.jitter = r.jitter;
+ vs.packetsLost = r.packetsLost;
+ vs.roundTripTime = r.roundTripTime;
+ }
+ items.push(vs);
+ }
+ });
+ return items;
+ });
+ }
+ setPublishingQuality(maxQuality) {
+ const qualities = [];
+ for (let q = VideoQuality.LOW; q <= VideoQuality.HIGH; q += 1) {
+ qualities.push({
+ quality: q,
+ enabled: q <= maxQuality
+ });
+ }
+ livekitLogger.debug("setting publishing quality. max quality ".concat(maxQuality));
+ this.setPublishingLayers(qualities);
+ }
+ setDeviceId(deviceId) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.constraints.deviceId === deviceId) {
+ return;
+ }
+ this.constraints.deviceId = deviceId;
+ // when video is muted, underlying media stream track is stopped and
+ // will be restarted later
+ if (!this.isMuted) {
+ yield this.restartTrack();
+ }
+ });
+ }
+ restartTrack(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let constraints;
+ if (options) {
+ const streamConstraints = constraintsForOptions({
+ video: options
+ });
+ if (typeof streamConstraints.video !== 'boolean') {
+ constraints = streamConstraints.video;
+ }
+ }
+ yield this.restart(constraints);
+ });
+ }
+ addSimulcastTrack(codec, encodings) {
+ if (this.simulcastCodecs.has(codec)) {
+ throw new Error("".concat(codec, " already added"));
+ }
+ const simulcastCodecInfo = {
+ codec,
+ mediaStreamTrack: this.mediaStreamTrack.clone(),
+ sender: undefined,
+ encodings
+ };
+ this.simulcastCodecs.set(codec, simulcastCodecInfo);
+ return simulcastCodecInfo;
+ }
+ setSimulcastTrackSender(codec, sender) {
+ const simulcastCodecInfo = this.simulcastCodecs.get(codec);
+ if (!simulcastCodecInfo) {
+ return;
+ }
+ simulcastCodecInfo.sender = sender;
+ // browser will reenable disabled codec/layers after new codec has been published,
+ // so refresh subscribedCodecs after publish a new codec
+ setTimeout(() => {
+ if (this.subscribedCodecs) {
+ this.setPublishingCodecs(this.subscribedCodecs);
+ }
+ }, refreshSubscribedCodecAfterNewCodec);
+ }
+ /**
+ * @internal
+ * Sets codecs that should be publishing
+ */
+ setPublishingCodecs(codecs) {
+ var _a, codecs_1, codecs_1_1;
+ var _b, e_1, _c, _d;
+ return __awaiter(this, void 0, void 0, function* () {
+ livekitLogger.debug('setting publishing codecs', {
+ codecs,
+ currentCodec: this.codec
+ });
+ // only enable simulcast codec for preference codec setted
+ if (!this.codec && codecs.length > 0) {
+ yield this.setPublishingLayers(codecs[0].qualities);
+ return [];
+ }
+ this.subscribedCodecs = codecs;
+ const newCodecs = [];
+ try {
+ for (_a = true, codecs_1 = __asyncValues(codecs); codecs_1_1 = yield codecs_1.next(), _b = codecs_1_1.done, !_b; _a = true) {
+ _d = codecs_1_1.value;
+ _a = false;
+ const codec = _d;
+ if (!this.codec || this.codec === codec.codec) {
+ yield this.setPublishingLayers(codec.qualities);
+ } else {
+ const simulcastCodecInfo = this.simulcastCodecs.get(codec.codec);
+ livekitLogger.debug("try setPublishingCodec for ".concat(codec.codec), simulcastCodecInfo);
+ if (!simulcastCodecInfo || !simulcastCodecInfo.sender) {
+ for (const q of codec.qualities) {
+ if (q.enabled) {
+ newCodecs.push(codec.codec);
+ break;
+ }
+ }
+ } else if (simulcastCodecInfo.encodings) {
+ livekitLogger.debug("try setPublishingLayersForSender ".concat(codec.codec));
+ yield setPublishingLayersForSender(simulcastCodecInfo.sender, simulcastCodecInfo.encodings, codec.qualities, this.senderLock);
+ }
+ }
+ }
+ } catch (e_1_1) {
+ e_1 = {
+ error: e_1_1
+ };
+ } finally {
+ try {
+ if (!_a && !_b && (_c = codecs_1.return)) yield _c.call(codecs_1);
+ } finally {
+ if (e_1) throw e_1.error;
+ }
+ }
+ return newCodecs;
+ });
+ }
+ /**
+ * @internal
+ * Sets layers that should be publishing
+ */
+ setPublishingLayers(qualities) {
+ return __awaiter(this, void 0, void 0, function* () {
+ livekitLogger.debug('setting publishing layers', qualities);
+ if (!this.sender || !this.encodings) {
+ return;
+ }
+ yield setPublishingLayersForSender(this.sender, this.encodings, qualities, this.senderLock);
+ });
+ }
+ handleAppVisibilityChanged() {
+ const _super = Object.create(null, {
+ handleAppVisibilityChanged: {
+ get: () => super.handleAppVisibilityChanged
+ }
+ });
+ return __awaiter(this, void 0, void 0, function* () {
+ yield _super.handleAppVisibilityChanged.call(this);
+ if (!isMobile()) return;
+ if (this.isInBackground && this.source === Track.Source.Camera) {
+ this._mediaStreamTrack.enabled = false;
+ }
+ });
+ }
+}
+function setPublishingLayersForSender(sender, senderEncodings, qualities, senderLock) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield senderLock.lock();
+ livekitLogger.debug('setPublishingLayersForSender', {
+ sender,
+ qualities,
+ senderEncodings
+ });
+ try {
+ const params = sender.getParameters();
+ const {
+ encodings
+ } = params;
+ if (!encodings) {
+ return;
+ }
+ if (encodings.length !== senderEncodings.length) {
+ livekitLogger.warn('cannot set publishing layers, encodings mismatch');
+ return;
+ }
+ let hasChanged = false;
+ /* @ts-ignore */
+ if (encodings.length === 1 && encodings[0].scalabilityMode) {
+ // svc dynacast encodings
+ const encoding = encodings[0];
+ /* @ts-ignore */
+ // const mode = new ScalabilityMode(encoding.scalabilityMode);
+ let maxQuality = VideoQuality.OFF;
+ qualities.forEach(q => {
+ if (q.enabled && (maxQuality === VideoQuality.OFF || q.quality > maxQuality)) {
+ maxQuality = q.quality;
+ }
+ });
+ if (maxQuality === VideoQuality.OFF) {
+ if (encoding.active) {
+ encoding.active = false;
+ hasChanged = true;
+ }
+ } else if (!encoding.active /* || mode.spatial !== maxQuality + 1*/) {
+ hasChanged = true;
+ encoding.active = true;
+ /* disable closable spatial layer as it has video blur/frozen issue with current server/client
+ 1. chrome 113: when switching to up layer with scalability Mode change, it will generate a
+ low resolution frame and recover very quickly, but noticable
+ 2. livekit sfu: additional pli request cause video frozen for a few frames, also noticable
+ @ts-ignore
+ const originalMode = new ScalabilityMode(senderEncodings[0].scalabilityMode)
+ mode.spatial = maxQuality + 1;
+ mode.suffix = originalMode.suffix;
+ if (mode.spatial === 1) {
+ // no suffix for L1Tx
+ mode.suffix = undefined;
+ }
+ @ts-ignore
+ encoding.scalabilityMode = mode.toString();
+ encoding.scaleResolutionDownBy = 2 ** (2 - maxQuality);
+ */
+ }
+ } else {
+ // simulcast dynacast encodings
+ encodings.forEach((encoding, idx) => {
+ var _a;
+ let rid = (_a = encoding.rid) !== null && _a !== void 0 ? _a : '';
+ if (rid === '') {
+ rid = 'q';
+ }
+ const quality = videoQualityForRid(rid);
+ const subscribedQuality = qualities.find(q => q.quality === quality);
+ if (!subscribedQuality) {
+ return;
+ }
+ if (encoding.active !== subscribedQuality.enabled) {
+ hasChanged = true;
+ encoding.active = subscribedQuality.enabled;
+ livekitLogger.debug("setting layer ".concat(subscribedQuality.quality, " to ").concat(encoding.active ? 'enabled' : 'disabled'));
+ // FireFox does not support setting encoding.active to false, so we
+ // have a workaround of lowering its bitrate and resolution to the min.
+ if (isFireFox()) {
+ if (subscribedQuality.enabled) {
+ encoding.scaleResolutionDownBy = senderEncodings[idx].scaleResolutionDownBy;
+ encoding.maxBitrate = senderEncodings[idx].maxBitrate;
+ /* @ts-ignore */
+ encoding.maxFrameRate = senderEncodings[idx].maxFrameRate;
+ } else {
+ encoding.scaleResolutionDownBy = 4;
+ encoding.maxBitrate = 10;
+ /* @ts-ignore */
+ encoding.maxFrameRate = 2;
+ }
+ }
+ }
+ });
+ }
+ if (hasChanged) {
+ params.encodings = encodings;
+ livekitLogger.debug("setting encodings", params.encodings);
+ yield sender.setParameters(params);
+ }
+ } finally {
+ unlock();
+ }
+ });
+}
+function videoQualityForRid(rid) {
+ switch (rid) {
+ case 'f':
+ return VideoQuality.HIGH;
+ case 'h':
+ return VideoQuality.MEDIUM;
+ case 'q':
+ return VideoQuality.LOW;
+ default:
+ return VideoQuality.UNRECOGNIZED;
+ }
+}
+function videoLayersFromEncodings(width, height, encodings) {
+ // default to a single layer, HQ
+ if (!encodings) {
+ return [{
+ quality: VideoQuality.HIGH,
+ width,
+ height,
+ bitrate: 0,
+ ssrc: 0
+ }];
+ }
+ /* @ts-ignore */
+ if (encodings.length === 1 && encodings[0].scalabilityMode) {
+ // svc layers
+ /* @ts-ignore */
+ const sm = new ScalabilityMode(encodings[0].scalabilityMode);
+ const layers = [];
+ for (let i = 0; i < sm.spatial; i += 1) {
+ layers.push({
+ quality: VideoQuality.HIGH - i,
+ width: width / Math.pow(2, i),
+ height: height / Math.pow(2, i),
+ bitrate: encodings[0].maxBitrate ? encodings[0].maxBitrate / Math.pow(3, i) : 0,
+ ssrc: 0
+ });
+ }
+ return layers;
+ }
+ return encodings.map(encoding => {
+ var _a, _b, _c;
+ const scale = (_a = encoding.scaleResolutionDownBy) !== null && _a !== void 0 ? _a : 1;
+ let quality = videoQualityForRid((_b = encoding.rid) !== null && _b !== void 0 ? _b : '');
+ if (quality === VideoQuality.UNRECOGNIZED && encodings.length === 1) {
+ quality = VideoQuality.HIGH;
+ }
+ return {
+ quality,
+ width: width / scale,
+ height: height / scale,
+ bitrate: (_c = encoding.maxBitrate) !== null && _c !== void 0 ? _c : 0,
+ ssrc: 0
+ };
+ });
+}
+
+class RemoteTrack extends Track {
+ constructor(mediaTrack, sid, kind, receiver) {
+ super(mediaTrack, kind);
+ this.sid = sid;
+ this.receiver = receiver;
+ }
+ /** @internal */
+ setMuted(muted) {
+ if (this.isMuted !== muted) {
+ this.isMuted = muted;
+ this._mediaStreamTrack.enabled = !muted;
+ this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);
+ }
+ }
+ /** @internal */
+ setMediaStream(stream) {
+ // this is needed to determine when the track is finished
+ // we send each track down in its own MediaStream, so we can assume the
+ // current track is the only one that can be removed.
+ this.mediaStream = stream;
+ stream.onremovetrack = () => {
+ this.receiver = undefined;
+ this._currentBitrate = 0;
+ this.emit(TrackEvent.Ended, this);
+ };
+ }
+ start() {
+ this.startMonitor();
+ // use `enabled` of track to enable re-use of transceiver
+ super.enable();
+ }
+ stop() {
+ this.stopMonitor();
+ // use `enabled` of track to enable re-use of transceiver
+ super.disable();
+ }
+ /* @internal */
+ startMonitor() {
+ if (!this.monitorInterval) {
+ this.monitorInterval = setInterval(() => this.monitorReceiver(), monitorFrequency);
+ }
+ }
+}
+
+class RemoteAudioTrack extends RemoteTrack {
+ constructor(mediaTrack, sid, receiver, audioContext, audioOutput) {
+ super(mediaTrack, sid, Track.Kind.Audio, receiver);
+ this.monitorReceiver = () => __awaiter(this, void 0, void 0, function* () {
+ if (!this.receiver) {
+ this._currentBitrate = 0;
+ return;
+ }
+ const stats = yield this.getReceiverStats();
+ if (stats && this.prevStats && this.receiver) {
+ this._currentBitrate = computeBitrate(stats, this.prevStats);
+ }
+ this.prevStats = stats;
+ });
+ this.audioContext = audioContext;
+ this.webAudioPluginNodes = [];
+ if (audioOutput) {
+ this.sinkId = audioOutput.deviceId;
+ }
+ }
+ /**
+ * sets the volume for all attached audio elements
+ */
+ setVolume(volume) {
+ var _a;
+ for (const el of this.attachedElements) {
+ if (this.audioContext) {
+ (_a = this.gainNode) === null || _a === void 0 ? void 0 : _a.gain.setTargetAtTime(volume, 0, 0.1);
+ } else {
+ el.volume = volume;
+ }
+ }
+ this.elementVolume = volume;
+ }
+ /**
+ * gets the volume of attached audio elements (loudest)
+ */
+ getVolume() {
+ if (this.elementVolume) {
+ return this.elementVolume;
+ }
+ let highestVolume = 0;
+ this.attachedElements.forEach(element => {
+ if (element.volume > highestVolume) {
+ highestVolume = element.volume;
+ }
+ });
+ return highestVolume;
+ }
+ /**
+ * calls setSinkId on all attached elements, if supported
+ * @param deviceId audio output device
+ */
+ setSinkId(deviceId) {
+ return __awaiter(this, void 0, void 0, function* () {
+ this.sinkId = deviceId;
+ yield Promise.all(this.attachedElements.map(elm => {
+ if (!supportsSetSinkId(elm)) {
+ return;
+ }
+ /* @ts-ignore */
+ return elm.setSinkId(deviceId);
+ }));
+ });
+ }
+ attach(element) {
+ const needsNewWebAudioConnection = this.attachedElements.length === 0;
+ if (!element) {
+ element = super.attach();
+ } else {
+ super.attach(element);
+ }
+ if (this.elementVolume) {
+ element.volume = this.elementVolume;
+ }
+ if (this.sinkId && supportsSetSinkId(element)) {
+ /* @ts-ignore */
+ element.setSinkId(this.sinkId);
+ }
+ if (this.audioContext && needsNewWebAudioConnection) {
+ livekitLogger.debug('using audio context mapping');
+ this.connectWebAudio(this.audioContext, element);
+ element.volume = 0;
+ element.muted = true;
+ }
+ return element;
+ }
+ detach(element) {
+ let detached;
+ if (!element) {
+ detached = super.detach();
+ this.disconnectWebAudio();
+ } else {
+ detached = super.detach(element);
+ // if there are still any attached elements after detaching, connect webaudio to the first element that's left
+ // disconnect webaudio otherwise
+ if (this.audioContext) {
+ if (this.attachedElements.length > 0) {
+ this.connectWebAudio(this.audioContext, this.attachedElements[0]);
+ } else {
+ this.disconnectWebAudio();
+ }
+ }
+ }
+ return detached;
+ }
+ /**
+ * @internal
+ * @experimental
+ */
+ setAudioContext(audioContext) {
+ this.audioContext = audioContext;
+ if (audioContext && this.attachedElements.length > 0) {
+ this.connectWebAudio(audioContext, this.attachedElements[0]);
+ } else if (!audioContext) {
+ this.disconnectWebAudio();
+ }
+ }
+ /**
+ * @internal
+ * @experimental
+ * @param {AudioNode[]} nodes - An array of WebAudio nodes. These nodes should not be connected to each other when passed, as the sdk will take care of connecting them in the order of the array.
+ */
+ setWebAudioPlugins(nodes) {
+ this.webAudioPluginNodes = nodes;
+ if (this.attachedElements.length > 0 && this.audioContext) {
+ this.connectWebAudio(this.audioContext, this.attachedElements[0]);
+ }
+ }
+ connectWebAudio(context, element) {
+ this.disconnectWebAudio();
+ // @ts-ignore attached elements always have a srcObject set
+ this.sourceNode = context.createMediaStreamSource(element.srcObject);
+ let lastNode = this.sourceNode;
+ this.webAudioPluginNodes.forEach(node => {
+ lastNode.connect(node);
+ lastNode = node;
+ });
+ this.gainNode = context.createGain();
+ lastNode.connect(this.gainNode);
+ this.gainNode.connect(context.destination);
+ if (this.elementVolume) {
+ this.gainNode.gain.setTargetAtTime(this.elementVolume, 0, 0.1);
+ }
+ // try to resume the context if it isn't running already
+ if (context.state !== 'running') {
+ context.resume().then(() => {
+ if (context.state !== 'running') {
+ this.emit(TrackEvent.AudioPlaybackFailed, new Error("Audio Context couldn't be started automatically"));
+ }
+ }).catch(e => {
+ this.emit(TrackEvent.AudioPlaybackFailed, e);
+ });
+ }
+ }
+ disconnectWebAudio() {
+ var _a, _b;
+ (_a = this.gainNode) === null || _a === void 0 ? void 0 : _a.disconnect();
+ (_b = this.sourceNode) === null || _b === void 0 ? void 0 : _b.disconnect();
+ this.gainNode = undefined;
+ this.sourceNode = undefined;
+ }
+ getReceiverStats() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.receiver || !this.receiver.getStats) {
+ return;
+ }
+ const stats = yield this.receiver.getStats();
+ let receiverStats;
+ stats.forEach(v => {
+ if (v.type === 'inbound-rtp') {
+ receiverStats = {
+ type: 'audio',
+ timestamp: v.timestamp,
+ jitter: v.jitter,
+ bytesReceived: v.bytesReceived,
+ concealedSamples: v.concealedSamples,
+ concealmentEvents: v.concealmentEvents,
+ silentConcealedSamples: v.silentConcealedSamples,
+ silentConcealmentEvents: v.silentConcealmentEvents,
+ totalAudioEnergy: v.totalAudioEnergy,
+ totalSamplesDuration: v.totalSamplesDuration
+ };
+ }
+ });
+ return receiverStats;
+ });
+ }
+}
+
+const REACTION_DELAY = 100;
+class RemoteVideoTrack extends RemoteTrack {
+ constructor(mediaTrack, sid, receiver, adaptiveStreamSettings) {
+ super(mediaTrack, sid, Track.Kind.Video, receiver);
+ this.elementInfos = [];
+ this.isObserved = false;
+ this.monitorReceiver = () => __awaiter(this, void 0, void 0, function* () {
+ if (!this.receiver) {
+ this._currentBitrate = 0;
+ return;
+ }
+ const stats = yield this.getReceiverStats();
+ if (stats && this.prevStats && this.receiver) {
+ this._currentBitrate = computeBitrate(stats, this.prevStats);
+ }
+ this.prevStats = stats;
+ });
+ this.debouncedHandleResize = r(() => {
+ this.updateDimensions();
+ }, REACTION_DELAY);
+ this.adaptiveStreamSettings = adaptiveStreamSettings;
+ }
+ get isAdaptiveStream() {
+ return this.adaptiveStreamSettings !== undefined;
+ }
+ get mediaStreamTrack() {
+ if (this.isAdaptiveStream && !this.isObserved) {
+ livekitLogger.warn('When using adaptiveStream, you need to use remoteVideoTrack.attach() to add the track to a HTMLVideoElement, otherwise your video tracks might never start');
+ }
+ return this._mediaStreamTrack;
+ }
+ /** @internal */
+ setMuted(muted) {
+ super.setMuted(muted);
+ this.attachedElements.forEach(element => {
+ // detach or attach
+ if (muted) {
+ detachTrack(this._mediaStreamTrack, element);
+ } else {
+ attachToElement(this._mediaStreamTrack, element);
+ }
+ });
+ }
+ attach(element) {
+ if (!element) {
+ element = super.attach();
+ } else {
+ super.attach(element);
+ }
+ // It's possible attach is called multiple times on an element. When that's
+ // the case, we'd want to avoid adding duplicate elementInfos
+ if (this.adaptiveStreamSettings && this.elementInfos.find(info => info.element === element) === undefined) {
+ const elementInfo = new HTMLElementInfo(element);
+ this.observeElementInfo(elementInfo);
+ }
+ return element;
+ }
+ /**
+ * Observe an ElementInfo for changes when adaptive streaming.
+ * @param elementInfo
+ * @internal
+ */
+ observeElementInfo(elementInfo) {
+ if (this.adaptiveStreamSettings && this.elementInfos.find(info => info === elementInfo) === undefined) {
+ elementInfo.handleResize = () => {
+ this.debouncedHandleResize();
+ };
+ elementInfo.handleVisibilityChanged = () => {
+ this.updateVisibility();
+ };
+ this.elementInfos.push(elementInfo);
+ elementInfo.observe();
+ // trigger the first resize update cycle
+ // if the tab is backgrounded, the initial resize event does not fire until
+ // the tab comes into focus for the first time.
+ this.debouncedHandleResize();
+ this.updateVisibility();
+ this.isObserved = true;
+ } else {
+ livekitLogger.warn('visibility resize observer not triggered');
+ }
+ }
+ /**
+ * Stop observing an ElementInfo for changes.
+ * @param elementInfo
+ * @internal
+ */
+ stopObservingElementInfo(elementInfo) {
+ if (!this.isAdaptiveStream) {
+ livekitLogger.warn('stopObservingElementInfo ignored');
+ return;
+ }
+ const stopElementInfos = this.elementInfos.filter(info => info === elementInfo);
+ for (const info of stopElementInfos) {
+ info.stopObserving();
+ }
+ this.elementInfos = this.elementInfos.filter(info => info !== elementInfo);
+ this.updateVisibility();
+ }
+ detach(element) {
+ let detachedElements = [];
+ if (element) {
+ this.stopObservingElement(element);
+ return super.detach(element);
+ }
+ detachedElements = super.detach();
+ for (const e of detachedElements) {
+ this.stopObservingElement(e);
+ }
+ return detachedElements;
+ }
+ /** @internal */
+ getDecoderImplementation() {
+ var _a;
+ return (_a = this.prevStats) === null || _a === void 0 ? void 0 : _a.decoderImplementation;
+ }
+ getReceiverStats() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!this.receiver || !this.receiver.getStats) {
+ return;
+ }
+ const stats = yield this.receiver.getStats();
+ let receiverStats;
+ stats.forEach(v => {
+ if (v.type === 'inbound-rtp') {
+ receiverStats = {
+ type: 'video',
+ framesDecoded: v.framesDecoded,
+ framesDropped: v.framesDropped,
+ framesReceived: v.framesReceived,
+ packetsReceived: v.packetsReceived,
+ packetsLost: v.packetsLost,
+ frameWidth: v.frameWidth,
+ frameHeight: v.frameHeight,
+ pliCount: v.pliCount,
+ firCount: v.firCount,
+ nackCount: v.nackCount,
+ jitter: v.jitter,
+ timestamp: v.timestamp,
+ bytesReceived: v.bytesReceived,
+ decoderImplementation: v.decoderImplementation
+ };
+ }
+ });
+ return receiverStats;
+ });
+ }
+ stopObservingElement(element) {
+ const stopElementInfos = this.elementInfos.filter(info => info.element === element);
+ for (const info of stopElementInfos) {
+ info.stopObserving();
+ }
+ this.elementInfos = this.elementInfos.filter(info => info.element !== element);
+ }
+ handleAppVisibilityChanged() {
+ const _super = Object.create(null, {
+ handleAppVisibilityChanged: {
+ get: () => super.handleAppVisibilityChanged
+ }
+ });
+ return __awaiter(this, void 0, void 0, function* () {
+ yield _super.handleAppVisibilityChanged.call(this);
+ if (!this.isAdaptiveStream) return;
+ this.updateVisibility();
+ });
+ }
+ updateVisibility() {
+ var _a, _b;
+ const lastVisibilityChange = this.elementInfos.reduce((prev, info) => Math.max(prev, info.visibilityChangedAt || 0), 0);
+ const backgroundPause = ((_b = (_a = this.adaptiveStreamSettings) === null || _a === void 0 ? void 0 : _a.pauseVideoInBackground) !== null && _b !== void 0 ? _b : true // default to true
+ ) ? this.isInBackground : false;
+ const isPiPMode = this.elementInfos.some(info => info.pictureInPicture);
+ const isVisible = this.elementInfos.some(info => info.visible) && !backgroundPause || isPiPMode;
+ if (this.lastVisible === isVisible) {
+ return;
+ }
+ if (!isVisible && Date.now() - lastVisibilityChange < REACTION_DELAY) {
+ // delay hidden events
+ CriticalTimers.setTimeout(() => {
+ this.updateVisibility();
+ }, REACTION_DELAY);
+ return;
+ }
+ this.lastVisible = isVisible;
+ this.emit(TrackEvent.VisibilityChanged, isVisible, this);
+ }
+ updateDimensions() {
+ var _a, _b, _c, _d;
+ let maxWidth = 0;
+ let maxHeight = 0;
+ for (const info of this.elementInfos) {
+ const pixelDensity = (_b = (_a = this.adaptiveStreamSettings) === null || _a === void 0 ? void 0 : _a.pixelDensity) !== null && _b !== void 0 ? _b : 1;
+ const pixelDensityValue = pixelDensity === 'screen' ? getDevicePixelRatio() : pixelDensity;
+ const currentElementWidth = info.width() * pixelDensityValue;
+ const currentElementHeight = info.height() * pixelDensityValue;
+ if (currentElementWidth + currentElementHeight > maxWidth + maxHeight) {
+ maxWidth = currentElementWidth;
+ maxHeight = currentElementHeight;
+ }
+ }
+ if (((_c = this.lastDimensions) === null || _c === void 0 ? void 0 : _c.width) === maxWidth && ((_d = this.lastDimensions) === null || _d === void 0 ? void 0 : _d.height) === maxHeight) {
+ return;
+ }
+ this.lastDimensions = {
+ width: maxWidth,
+ height: maxHeight
+ };
+ this.emit(TrackEvent.VideoDimensionsChanged, this.lastDimensions, this);
+ }
+}
+class HTMLElementInfo {
+ get visible() {
+ return this.isPiP || this.isIntersecting;
+ }
+ get pictureInPicture() {
+ return this.isPiP;
+ }
+ constructor(element, visible) {
+ this.onVisibilityChanged = entry => {
+ var _a;
+ const {
+ target,
+ isIntersecting
+ } = entry;
+ if (target === this.element) {
+ this.isIntersecting = isIntersecting;
+ this.visibilityChangedAt = Date.now();
+ (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);
+ }
+ };
+ this.onEnterPiP = () => {
+ var _a;
+ this.isPiP = true;
+ (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);
+ };
+ this.onLeavePiP = () => {
+ var _a;
+ this.isPiP = false;
+ (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);
+ };
+ this.element = element;
+ this.isIntersecting = visible !== null && visible !== void 0 ? visible : isElementInViewport(element);
+ this.isPiP = isWeb() && document.pictureInPictureElement === element;
+ this.visibilityChangedAt = 0;
+ }
+ width() {
+ return this.element.clientWidth;
+ }
+ height() {
+ return this.element.clientHeight;
+ }
+ observe() {
+ // make sure we update the current visible state once we start to observe
+ this.isIntersecting = isElementInViewport(this.element);
+ this.isPiP = document.pictureInPictureElement === this.element;
+ this.element.handleResize = () => {
+ var _a;
+ (_a = this.handleResize) === null || _a === void 0 ? void 0 : _a.call(this);
+ };
+ this.element.handleVisibilityChanged = this.onVisibilityChanged;
+ getIntersectionObserver().observe(this.element);
+ getResizeObserver().observe(this.element);
+ this.element.addEventListener('enterpictureinpicture', this.onEnterPiP);
+ this.element.addEventListener('leavepictureinpicture', this.onLeavePiP);
+ }
+ stopObserving() {
+ var _a, _b;
+ (_a = getIntersectionObserver()) === null || _a === void 0 ? void 0 : _a.unobserve(this.element);
+ (_b = getResizeObserver()) === null || _b === void 0 ? void 0 : _b.unobserve(this.element);
+ this.element.removeEventListener('enterpictureinpicture', this.onEnterPiP);
+ this.element.removeEventListener('leavepictureinpicture', this.onLeavePiP);
+ }
+}
+// does not account for occlusion by other elements
+function isElementInViewport(el) {
+ let top = el.offsetTop;
+ let left = el.offsetLeft;
+ const width = el.offsetWidth;
+ const height = el.offsetHeight;
+ const {
+ hidden
+ } = el;
+ const {
+ opacity,
+ display
+ } = getComputedStyle(el);
+ while (el.offsetParent) {
+ el = el.offsetParent;
+ top += el.offsetTop;
+ left += el.offsetLeft;
+ }
+ return top < window.pageYOffset + window.innerHeight && left < window.pageXOffset + window.innerWidth && top + height > window.pageYOffset && left + width > window.pageXOffset && !hidden && (opacity !== '' ? parseFloat(opacity) > 0 : true) && display !== 'none';
+}
+
+class TrackPublication extends eventsExports.EventEmitter {
+ constructor(kind, id, name) {
+ super();
+ this.metadataMuted = false;
+ this.handleMuted = () => {
+ this.emit(TrackEvent.Muted);
+ };
+ this.handleUnmuted = () => {
+ this.emit(TrackEvent.Unmuted);
+ };
+ this.setMaxListeners(100);
+ this.kind = kind;
+ this.trackSid = id;
+ this.trackName = name;
+ this.source = Track.Source.Unknown;
+ }
+ /** @internal */
+ setTrack(track) {
+ if (this.track) {
+ this.track.off(TrackEvent.Muted, this.handleMuted);
+ this.track.off(TrackEvent.Unmuted, this.handleUnmuted);
+ }
+ this.track = track;
+ if (track) {
+ // forward events
+ track.on(TrackEvent.Muted, this.handleMuted);
+ track.on(TrackEvent.Unmuted, this.handleUnmuted);
+ }
+ }
+ get isMuted() {
+ return this.metadataMuted;
+ }
+ get isEnabled() {
+ return true;
+ }
+ get isSubscribed() {
+ return this.track !== undefined;
+ }
+ /**
+ * an [AudioTrack] if this publication holds an audio track
+ */
+ get audioTrack() {
+ if (this.track instanceof LocalAudioTrack || this.track instanceof RemoteAudioTrack) {
+ return this.track;
+ }
+ }
+ /**
+ * an [VideoTrack] if this publication holds a video track
+ */
+ get videoTrack() {
+ if (this.track instanceof LocalVideoTrack || this.track instanceof RemoteVideoTrack) {
+ return this.track;
+ }
+ }
+ /** @internal */
+ updateInfo(info) {
+ this.trackSid = info.sid;
+ this.trackName = info.name;
+ this.source = Track.sourceFromProto(info.source);
+ this.mimeType = info.mimeType;
+ if (this.kind === Track.Kind.Video && info.width > 0) {
+ this.dimensions = {
+ width: info.width,
+ height: info.height
+ };
+ this.simulcasted = info.simulcast;
+ }
+ this.trackInfo = info;
+ livekitLogger.trace('update publication info', {
+ info
+ });
+ }
+}
+(function (TrackPublication) {
+ (function (SubscriptionStatus) {
+ SubscriptionStatus["Desired"] = "desired";
+ SubscriptionStatus["Subscribed"] = "subscribed";
+ SubscriptionStatus["Unsubscribed"] = "unsubscribed";
+ })(TrackPublication.SubscriptionStatus || (TrackPublication.SubscriptionStatus = {}));
+ (function (PermissionStatus) {
+ PermissionStatus["Allowed"] = "allowed";
+ PermissionStatus["NotAllowed"] = "not_allowed";
+ })(TrackPublication.PermissionStatus || (TrackPublication.PermissionStatus = {}));
+})(TrackPublication || (TrackPublication = {}));
+
+class LocalTrackPublication extends TrackPublication {
+ get isUpstreamPaused() {
+ var _a;
+ return (_a = this.track) === null || _a === void 0 ? void 0 : _a.isUpstreamPaused;
+ }
+ constructor(kind, ti, track) {
+ super(kind, ti.sid, ti.name);
+ this.track = undefined;
+ this.handleTrackEnded = () => {
+ this.emit(TrackEvent.Ended);
+ };
+ this.updateInfo(ti);
+ this.setTrack(track);
+ }
+ setTrack(track) {
+ if (this.track) {
+ this.track.off(TrackEvent.Ended, this.handleTrackEnded);
+ }
+ super.setTrack(track);
+ if (track) {
+ track.on(TrackEvent.Ended, this.handleTrackEnded);
+ }
+ }
+ get isMuted() {
+ if (this.track) {
+ return this.track.isMuted;
+ }
+ return super.isMuted;
+ }
+ get audioTrack() {
+ return super.audioTrack;
+ }
+ get videoTrack() {
+ return super.videoTrack;
+ }
+ /**
+ * Mute the track associated with this publication
+ */
+ mute() {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ return (_a = this.track) === null || _a === void 0 ? void 0 : _a.mute();
+ });
+ }
+ /**
+ * Unmute track associated with this publication
+ */
+ unmute() {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ return (_a = this.track) === null || _a === void 0 ? void 0 : _a.unmute();
+ });
+ }
+ /**
+ * Pauses the media stream track associated with this publication from being sent to the server
+ * and signals "muted" event to other participants
+ * Useful if you want to pause the stream without pausing the local media stream track
+ */
+ pauseUpstream() {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ yield (_a = this.track) === null || _a === void 0 ? void 0 : _a.pauseUpstream();
+ });
+ }
+ /**
+ * Resumes sending the media stream track associated with this publication to the server after a call to [[pauseUpstream()]]
+ * and signals "unmuted" event to other participants (unless the track is explicitly muted)
+ */
+ resumeUpstream() {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ yield (_a = this.track) === null || _a === void 0 ? void 0 : _a.resumeUpstream();
+ });
+ }
+}
+
+var ConnectionQuality;
+(function (ConnectionQuality) {
+ ConnectionQuality["Excellent"] = "excellent";
+ ConnectionQuality["Good"] = "good";
+ ConnectionQuality["Poor"] = "poor";
+ ConnectionQuality["Unknown"] = "unknown";
+})(ConnectionQuality || (ConnectionQuality = {}));
+function qualityFromProto(q) {
+ switch (q) {
+ case ConnectionQuality$1.EXCELLENT:
+ return ConnectionQuality.Excellent;
+ case ConnectionQuality$1.GOOD:
+ return ConnectionQuality.Good;
+ case ConnectionQuality$1.POOR:
+ return ConnectionQuality.Poor;
+ default:
+ return ConnectionQuality.Unknown;
+ }
+}
+class Participant extends eventsExports.EventEmitter {
+ /** @internal */
+ constructor(sid, identity, name, metadata) {
+ super();
+ /** audio level between 0-1.0, 1 being loudest, 0 being softest */
+ this.audioLevel = 0;
+ /** if participant is currently speaking */
+ this.isSpeaking = false;
+ this._connectionQuality = ConnectionQuality.Unknown;
+ this.setMaxListeners(100);
+ this.sid = sid;
+ this.identity = identity;
+ this.name = name;
+ this.metadata = metadata;
+ this.audioTracks = new Map();
+ this.videoTracks = new Map();
+ this.tracks = new Map();
+ }
+ getTracks() {
+ return Array.from(this.tracks.values());
+ }
+ /**
+ * Finds the first track that matches the source filter, for example, getting
+ * the user's camera track with getTrackBySource(Track.Source.Camera).
+ * @param source
+ * @returns
+ */
+ getTrack(source) {
+ for (const [, pub] of this.tracks) {
+ if (pub.source === source) {
+ return pub;
+ }
+ }
+ }
+ /**
+ * Finds the first track that matches the track's name.
+ * @param name
+ * @returns
+ */
+ getTrackByName(name) {
+ for (const [, pub] of this.tracks) {
+ if (pub.trackName === name) {
+ return pub;
+ }
+ }
+ }
+ get connectionQuality() {
+ return this._connectionQuality;
+ }
+ get isCameraEnabled() {
+ var _a;
+ const track = this.getTrack(Track.Source.Camera);
+ return !((_a = track === null || track === void 0 ? void 0 : track.isMuted) !== null && _a !== void 0 ? _a : true);
+ }
+ get isMicrophoneEnabled() {
+ var _a;
+ const track = this.getTrack(Track.Source.Microphone);
+ return !((_a = track === null || track === void 0 ? void 0 : track.isMuted) !== null && _a !== void 0 ? _a : true);
+ }
+ get isScreenShareEnabled() {
+ const track = this.getTrack(Track.Source.ScreenShare);
+ return !!track;
+ }
+ get isLocal() {
+ return false;
+ }
+ /** when participant joined the room */
+ get joinedAt() {
+ if (this.participantInfo) {
+ return new Date(this.participantInfo.joinedAt * 1000);
+ }
+ return new Date();
+ }
+ /** @internal */
+ updateInfo(info) {
+ // it's possible the update could be applied out of order due to await
+ // during reconnect sequences. when that happens, it's possible for server
+ // to have sent more recent version of participant info while JS is waiting
+ // to process the existing payload.
+ // when the participant sid remains the same, and we already have a later version
+ // of the payload, they can be safely skipped
+ if (this.participantInfo && this.participantInfo.sid === info.sid && this.participantInfo.version > info.version) {
+ return false;
+ }
+ this.identity = info.identity;
+ this.sid = info.sid;
+ this.setName(info.name);
+ this.setMetadata(info.metadata);
+ if (info.permission) {
+ this.setPermissions(info.permission);
+ }
+ // set this last so setMetadata can detect changes
+ this.participantInfo = info;
+ livekitLogger.trace('update participant info', {
+ info
+ });
+ return true;
+ }
+ /** @internal */
+ setMetadata(md) {
+ const changed = this.metadata !== md;
+ const prevMetadata = this.metadata;
+ this.metadata = md;
+ if (changed) {
+ this.emit(ParticipantEvent.ParticipantMetadataChanged, prevMetadata);
+ }
+ }
+ setName(name) {
+ const changed = this.name !== name;
+ this.name = name;
+ if (changed) {
+ this.emit(ParticipantEvent.ParticipantNameChanged, name);
+ }
+ }
+ /** @internal */
+ setPermissions(permissions) {
+ var _a, _b, _c, _d, _e;
+ const prevPermissions = this.permissions;
+ const changed = permissions.canPublish !== ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.canPublish) || permissions.canSubscribe !== ((_b = this.permissions) === null || _b === void 0 ? void 0 : _b.canSubscribe) || permissions.canPublishData !== ((_c = this.permissions) === null || _c === void 0 ? void 0 : _c.canPublishData) || permissions.hidden !== ((_d = this.permissions) === null || _d === void 0 ? void 0 : _d.hidden) || permissions.recorder !== ((_e = this.permissions) === null || _e === void 0 ? void 0 : _e.recorder) || permissions.canPublishSources.length !== this.permissions.canPublishSources.length || permissions.canPublishSources.some((value, index) => {
+ var _a;
+ return value !== ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.canPublishSources[index]);
+ });
+ this.permissions = permissions;
+ if (changed) {
+ this.emit(ParticipantEvent.ParticipantPermissionsChanged, prevPermissions);
+ }
+ return changed;
+ }
+ /** @internal */
+ setIsSpeaking(speaking) {
+ if (speaking === this.isSpeaking) {
+ return;
+ }
+ this.isSpeaking = speaking;
+ if (speaking) {
+ this.lastSpokeAt = new Date();
+ }
+ this.emit(ParticipantEvent.IsSpeakingChanged, speaking);
+ }
+ /** @internal */
+ setConnectionQuality(q) {
+ const prevQuality = this._connectionQuality;
+ this._connectionQuality = qualityFromProto(q);
+ if (prevQuality !== this._connectionQuality) {
+ this.emit(ParticipantEvent.ConnectionQualityChanged, this._connectionQuality);
+ }
+ }
+ addTrackPublication(publication) {
+ // forward publication driven events
+ publication.on(TrackEvent.Muted, () => {
+ this.emit(ParticipantEvent.TrackMuted, publication);
+ });
+ publication.on(TrackEvent.Unmuted, () => {
+ this.emit(ParticipantEvent.TrackUnmuted, publication);
+ });
+ const pub = publication;
+ if (pub.track) {
+ pub.track.sid = publication.trackSid;
+ }
+ this.tracks.set(publication.trackSid, publication);
+ switch (publication.kind) {
+ case Track.Kind.Audio:
+ this.audioTracks.set(publication.trackSid, publication);
+ break;
+ case Track.Kind.Video:
+ this.videoTracks.set(publication.trackSid, publication);
+ break;
+ }
+ }
+}
+
+function trackPermissionToProto(perms) {
+ var _a, _b, _c;
+ if (!perms.participantSid && !perms.participantIdentity) {
+ throw new Error('Invalid track permission, must provide at least one of participantIdentity and participantSid');
+ }
+ return {
+ participantIdentity: (_a = perms.participantIdentity) !== null && _a !== void 0 ? _a : '',
+ participantSid: (_b = perms.participantSid) !== null && _b !== void 0 ? _b : '',
+ allTracks: (_c = perms.allowAll) !== null && _c !== void 0 ? _c : false,
+ trackSids: perms.allowedTrackSids || []
+ };
+}
+
+class RemoteTrackPublication extends TrackPublication {
+ constructor(kind, ti, autoSubscribe) {
+ super(kind, ti.sid, ti.name);
+ this.track = undefined;
+ /** @internal */
+ this.allowed = true;
+ this.disabled = false;
+ this.currentVideoQuality = VideoQuality.HIGH;
+ this.handleEnded = track => {
+ this.setTrack(undefined);
+ this.emit(TrackEvent.Ended, track);
+ };
+ this.handleVisibilityChange = visible => {
+ livekitLogger.debug("adaptivestream video visibility ".concat(this.trackSid, ", visible=").concat(visible), {
+ trackSid: this.trackSid
+ });
+ this.disabled = !visible;
+ this.emitTrackUpdate();
+ };
+ this.handleVideoDimensionsChange = dimensions => {
+ livekitLogger.debug("adaptivestream video dimensions ".concat(dimensions.width, "x").concat(dimensions.height), {
+ trackSid: this.trackSid
+ });
+ this.videoDimensions = dimensions;
+ this.emitTrackUpdate();
+ };
+ this.subscribed = autoSubscribe;
+ this.updateInfo(ti);
+ }
+ /**
+ * Subscribe or unsubscribe to this remote track
+ * @param subscribed true to subscribe to a track, false to unsubscribe
+ */
+ setSubscribed(subscribed) {
+ const prevStatus = this.subscriptionStatus;
+ const prevPermission = this.permissionStatus;
+ this.subscribed = subscribed;
+ // reset allowed status when desired subscription state changes
+ // server will notify client via signal message if it's not allowed
+ if (subscribed) {
+ this.allowed = true;
+ }
+ const sub = {
+ trackSids: [this.trackSid],
+ subscribe: this.subscribed,
+ participantTracks: [{
+ // sending an empty participant id since TrackPublication doesn't keep it
+ // this is filled in by the participant that receives this message
+ participantSid: '',
+ trackSids: [this.trackSid]
+ }]
+ };
+ this.emit(TrackEvent.UpdateSubscription, sub);
+ this.emitSubscriptionUpdateIfChanged(prevStatus);
+ this.emitPermissionUpdateIfChanged(prevPermission);
+ }
+ get subscriptionStatus() {
+ if (this.subscribed === false) {
+ return TrackPublication.SubscriptionStatus.Unsubscribed;
+ }
+ if (!super.isSubscribed) {
+ return TrackPublication.SubscriptionStatus.Desired;
+ }
+ return TrackPublication.SubscriptionStatus.Subscribed;
+ }
+ get permissionStatus() {
+ return this.allowed ? TrackPublication.PermissionStatus.Allowed : TrackPublication.PermissionStatus.NotAllowed;
+ }
+ /**
+ * Returns true if track is subscribed, and ready for playback
+ */
+ get isSubscribed() {
+ if (this.subscribed === false) {
+ return false;
+ }
+ return super.isSubscribed;
+ }
+ // returns client's desire to subscribe to a track, also true if autoSubscribe is enabled
+ get isDesired() {
+ return this.subscribed !== false;
+ }
+ get isEnabled() {
+ return !this.disabled;
+ }
+ /**
+ * disable server from sending down data for this track. this is useful when
+ * the participant is off screen, you may disable streaming down their video
+ * to reduce bandwidth requirements
+ * @param enabled
+ */
+ setEnabled(enabled) {
+ if (!this.isManualOperationAllowed() || this.disabled === !enabled) {
+ return;
+ }
+ this.disabled = !enabled;
+ this.emitTrackUpdate();
+ }
+ /**
+ * for tracks that support simulcasting, adjust subscribed quality
+ *
+ * This indicates the highest quality the client can accept. if network
+ * bandwidth does not allow, server will automatically reduce quality to
+ * optimize for uninterrupted video
+ */
+ setVideoQuality(quality) {
+ if (!this.isManualOperationAllowed() || this.currentVideoQuality === quality) {
+ return;
+ }
+ this.currentVideoQuality = quality;
+ this.videoDimensions = undefined;
+ this.emitTrackUpdate();
+ }
+ setVideoDimensions(dimensions) {
+ var _a, _b;
+ if (!this.isManualOperationAllowed()) {
+ return;
+ }
+ if (((_a = this.videoDimensions) === null || _a === void 0 ? void 0 : _a.width) === dimensions.width && ((_b = this.videoDimensions) === null || _b === void 0 ? void 0 : _b.height) === dimensions.height) {
+ return;
+ }
+ if (this.track instanceof RemoteVideoTrack) {
+ this.videoDimensions = dimensions;
+ }
+ this.currentVideoQuality = undefined;
+ this.emitTrackUpdate();
+ }
+ setVideoFPS(fps) {
+ if (!this.isManualOperationAllowed()) {
+ return;
+ }
+ if (!(this.track instanceof RemoteVideoTrack)) {
+ return;
+ }
+ if (this.fps === fps) {
+ return;
+ }
+ this.fps = fps;
+ this.emitTrackUpdate();
+ }
+ get videoQuality() {
+ return this.currentVideoQuality;
+ }
+ /** @internal */
+ setTrack(track) {
+ const prevStatus = this.subscriptionStatus;
+ const prevPermission = this.permissionStatus;
+ const prevTrack = this.track;
+ if (prevTrack === track) {
+ return;
+ }
+ if (prevTrack) {
+ // unregister listener
+ prevTrack.off(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);
+ prevTrack.off(TrackEvent.VisibilityChanged, this.handleVisibilityChange);
+ prevTrack.off(TrackEvent.Ended, this.handleEnded);
+ prevTrack.detach();
+ prevTrack.stopMonitor();
+ this.emit(TrackEvent.Unsubscribed, prevTrack);
+ }
+ super.setTrack(track);
+ if (track) {
+ track.sid = this.trackSid;
+ track.on(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);
+ track.on(TrackEvent.VisibilityChanged, this.handleVisibilityChange);
+ track.on(TrackEvent.Ended, this.handleEnded);
+ this.emit(TrackEvent.Subscribed, track);
+ }
+ this.emitPermissionUpdateIfChanged(prevPermission);
+ this.emitSubscriptionUpdateIfChanged(prevStatus);
+ }
+ /** @internal */
+ setAllowed(allowed) {
+ const prevStatus = this.subscriptionStatus;
+ const prevPermission = this.permissionStatus;
+ this.allowed = allowed;
+ this.emitPermissionUpdateIfChanged(prevPermission);
+ this.emitSubscriptionUpdateIfChanged(prevStatus);
+ }
+ /** @internal */
+ setSubscriptionError(error) {
+ this.emit(TrackEvent.SubscriptionFailed, error);
+ }
+ /** @internal */
+ updateInfo(info) {
+ super.updateInfo(info);
+ const prevMetadataMuted = this.metadataMuted;
+ this.metadataMuted = info.muted;
+ if (this.track) {
+ this.track.setMuted(info.muted);
+ } else if (prevMetadataMuted !== info.muted) {
+ this.emit(info.muted ? TrackEvent.Muted : TrackEvent.Unmuted);
+ }
+ }
+ emitSubscriptionUpdateIfChanged(previousStatus) {
+ const currentStatus = this.subscriptionStatus;
+ if (previousStatus === currentStatus) {
+ return;
+ }
+ this.emit(TrackEvent.SubscriptionStatusChanged, currentStatus, previousStatus);
+ }
+ emitPermissionUpdateIfChanged(previousPermissionStatus) {
+ const currentPermissionStatus = this.permissionStatus;
+ if (currentPermissionStatus !== previousPermissionStatus) {
+ this.emit(TrackEvent.SubscriptionPermissionChanged, this.permissionStatus, previousPermissionStatus);
+ }
+ }
+ isManualOperationAllowed() {
+ if (this.kind === Track.Kind.Video && this.isAdaptiveStream) {
+ livekitLogger.warn('adaptive stream is enabled, cannot change video track settings', {
+ trackSid: this.trackSid
+ });
+ return false;
+ }
+ if (!this.isDesired) {
+ livekitLogger.warn('cannot update track settings when not subscribed', {
+ trackSid: this.trackSid
+ });
+ return false;
+ }
+ return true;
+ }
+ get isAdaptiveStream() {
+ return this.track instanceof RemoteVideoTrack && this.track.isAdaptiveStream;
+ }
+ /* @internal */
+ emitTrackUpdate() {
+ const settings = UpdateTrackSettings.fromPartial({
+ trackSids: [this.trackSid],
+ disabled: this.disabled,
+ fps: this.fps
+ });
+ if (this.videoDimensions) {
+ settings.width = this.videoDimensions.width;
+ settings.height = this.videoDimensions.height;
+ } else if (this.currentVideoQuality !== undefined) {
+ settings.quality = this.currentVideoQuality;
+ } else {
+ // defaults to high quality
+ settings.quality = VideoQuality.HIGH;
+ }
+ this.emit(TrackEvent.UpdateSettings, settings);
+ }
+}
+
+class RemoteParticipant extends Participant {
+ /** @internal */
+ static fromParticipantInfo(signalClient, pi) {
+ return new RemoteParticipant(signalClient, pi.sid, pi.identity, pi.name, pi.metadata);
+ }
+ /** @internal */
+ constructor(signalClient, sid, identity, name, metadata) {
+ super(sid, identity || '', name, metadata);
+ this.signalClient = signalClient;
+ this.tracks = new Map();
+ this.audioTracks = new Map();
+ this.videoTracks = new Map();
+ }
+ addTrackPublication(publication) {
+ super.addTrackPublication(publication);
+ // register action events
+ publication.on(TrackEvent.UpdateSettings, settings => {
+ livekitLogger.debug('send update settings', settings);
+ this.signalClient.sendUpdateTrackSettings(settings);
+ });
+ publication.on(TrackEvent.UpdateSubscription, sub => {
+ sub.participantTracks.forEach(pt => {
+ pt.participantSid = this.sid;
+ });
+ this.signalClient.sendUpdateSubscription(sub);
+ });
+ publication.on(TrackEvent.SubscriptionPermissionChanged, status => {
+ this.emit(ParticipantEvent.TrackSubscriptionPermissionChanged, publication, status);
+ });
+ publication.on(TrackEvent.SubscriptionStatusChanged, status => {
+ this.emit(ParticipantEvent.TrackSubscriptionStatusChanged, publication, status);
+ });
+ publication.on(TrackEvent.Subscribed, track => {
+ this.emit(ParticipantEvent.TrackSubscribed, track, publication);
+ });
+ publication.on(TrackEvent.Unsubscribed, previousTrack => {
+ this.emit(ParticipantEvent.TrackUnsubscribed, previousTrack, publication);
+ });
+ publication.on(TrackEvent.SubscriptionFailed, error => {
+ this.emit(ParticipantEvent.TrackSubscriptionFailed, publication.trackSid, error);
+ });
+ }
+ getTrack(source) {
+ const track = super.getTrack(source);
+ if (track) {
+ return track;
+ }
+ }
+ getTrackByName(name) {
+ const track = super.getTrackByName(name);
+ if (track) {
+ return track;
+ }
+ }
+ /**
+ * sets the volume on the participant's microphone track
+ * if no track exists the volume will be applied when the microphone track is added
+ */
+ setVolume(volume) {
+ this.volume = volume;
+ const audioPublication = this.getTrack(Track.Source.Microphone);
+ if (audioPublication && audioPublication.track) {
+ audioPublication.track.setVolume(volume);
+ }
+ }
+ /**
+ * gets the volume on the participant's microphone track
+ */
+ getVolume() {
+ const audioPublication = this.getTrack(Track.Source.Microphone);
+ if (audioPublication && audioPublication.track) {
+ return audioPublication.track.getVolume();
+ }
+ return this.volume;
+ }
+ /** @internal */
+ addSubscribedMediaTrack(mediaTrack, sid, mediaStream, receiver, adaptiveStreamSettings, triesLeft) {
+ // find the track publication
+ // it's possible for the media track to arrive before participant info
+ let publication = this.getTrackPublication(sid);
+ // it's also possible that the browser didn't honor our original track id
+ // FireFox would use its own local uuid instead of server track id
+ if (!publication) {
+ if (!sid.startsWith('TR')) {
+ // find the first track that matches type
+ this.tracks.forEach(p => {
+ if (!publication && mediaTrack.kind === p.kind.toString()) {
+ publication = p;
+ }
+ });
+ }
+ }
+ // when we couldn't locate the track, it's possible that the metadata hasn't
+ // yet arrived. Wait a bit longer for it to arrive, or fire an error
+ if (!publication) {
+ if (triesLeft === 0) {
+ livekitLogger.error('could not find published track', {
+ participant: this.sid,
+ trackSid: sid
+ });
+ this.emit(ParticipantEvent.TrackSubscriptionFailed, sid);
+ return;
+ }
+ if (triesLeft === undefined) triesLeft = 20;
+ setTimeout(() => {
+ this.addSubscribedMediaTrack(mediaTrack, sid, mediaStream, receiver, adaptiveStreamSettings, triesLeft - 1);
+ }, 150);
+ return;
+ }
+ if (mediaTrack.readyState === 'ended') {
+ livekitLogger.error('unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()', {
+ participant: this.sid,
+ trackSid: sid
+ });
+ this.emit(ParticipantEvent.TrackSubscriptionFailed, sid);
+ return;
+ }
+ const isVideo = mediaTrack.kind === 'video';
+ let track;
+ if (isVideo) {
+ track = new RemoteVideoTrack(mediaTrack, sid, receiver, adaptiveStreamSettings);
+ } else {
+ track = new RemoteAudioTrack(mediaTrack, sid, receiver, this.audioContext, this.audioOutput);
+ }
+ // set track info
+ track.source = publication.source;
+ // keep publication's muted status
+ track.isMuted = publication.isMuted;
+ track.setMediaStream(mediaStream);
+ track.start();
+ publication.setTrack(track);
+ // set participant volume on new microphone tracks
+ if (this.volume !== undefined && track instanceof RemoteAudioTrack && track.source === Track.Source.Microphone) {
+ track.setVolume(this.volume);
+ }
+ return publication;
+ }
+ /** @internal */
+ get hasMetadata() {
+ return !!this.participantInfo;
+ }
+ getTrackPublication(sid) {
+ return this.tracks.get(sid);
+ }
+ /** @internal */
+ updateInfo(info) {
+ if (!super.updateInfo(info)) {
+ return false;
+ }
+ // we are getting a list of all available tracks, reconcile in here
+ // and send out events for changes
+ // reconcile track publications, publish events only if metadata is already there
+ // i.e. changes since the local participant has joined
+ const validTracks = new Map();
+ const newTracks = new Map();
+ info.tracks.forEach(ti => {
+ var _a;
+ let publication = this.getTrackPublication(ti.sid);
+ if (!publication) {
+ // new publication
+ const kind = Track.kindFromProto(ti.type);
+ if (!kind) {
+ return;
+ }
+ publication = new RemoteTrackPublication(kind, ti, (_a = this.signalClient.connectOptions) === null || _a === void 0 ? void 0 : _a.autoSubscribe);
+ publication.updateInfo(ti);
+ newTracks.set(ti.sid, publication);
+ const existingTrackOfSource = Array.from(this.tracks.values()).find(publishedTrack => publishedTrack.source === (publication === null || publication === void 0 ? void 0 : publication.source));
+ if (existingTrackOfSource && publication.source !== Track.Source.Unknown) {
+ livekitLogger.debug("received a second track publication for ".concat(this.identity, " with the same source: ").concat(publication.source), {
+ oldTrack: existingTrackOfSource,
+ newTrack: publication,
+ participant: this,
+ participantInfo: info
+ });
+ }
+ this.addTrackPublication(publication);
+ } else {
+ publication.updateInfo(ti);
+ }
+ validTracks.set(ti.sid, publication);
+ });
+ // detect removed tracks
+ this.tracks.forEach(publication => {
+ if (!validTracks.has(publication.trackSid)) {
+ livekitLogger.trace('detected removed track on remote participant, unpublishing', {
+ publication,
+ participantSid: this.sid
+ });
+ this.unpublishTrack(publication.trackSid, true);
+ }
+ });
+ // always emit events for new publications, Room will not forward them unless it's ready
+ newTracks.forEach(publication => {
+ this.emit(ParticipantEvent.TrackPublished, publication);
+ });
+ return true;
+ }
+ /** @internal */
+ unpublishTrack(sid, sendUnpublish) {
+ const publication = this.tracks.get(sid);
+ if (!publication) {
+ return;
+ }
+ // also send unsubscribe, if track is actively subscribed
+ const {
+ track
+ } = publication;
+ if (track) {
+ track.stop();
+ publication.setTrack(undefined);
+ }
+ // remove track from maps only after unsubscribed has been fired
+ this.tracks.delete(sid);
+ // remove from the right type map
+ switch (publication.kind) {
+ case Track.Kind.Audio:
+ this.audioTracks.delete(sid);
+ break;
+ case Track.Kind.Video:
+ this.videoTracks.delete(sid);
+ break;
+ }
+ if (sendUnpublish) {
+ this.emit(ParticipantEvent.TrackUnpublished, publication);
+ }
+ }
+ /**
+ * @internal
+ */
+ setAudioContext(ctx) {
+ this.audioContext = ctx;
+ this.audioTracks.forEach(track => track.track instanceof RemoteAudioTrack && track.track.setAudioContext(ctx));
+ }
+ /**
+ * @internal
+ */
+ setAudioOutput(output) {
+ return __awaiter(this, void 0, void 0, function* () {
+ this.audioOutput = output;
+ const promises = [];
+ this.audioTracks.forEach(pub => {
+ var _a;
+ if (pub.track instanceof RemoteAudioTrack) {
+ promises.push(pub.track.setSinkId((_a = output.deviceId) !== null && _a !== void 0 ? _a : 'default'));
+ }
+ });
+ yield Promise.all(promises);
+ });
+ }
+ /** @internal */
+ emit(event) {
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ args[_key - 1] = arguments[_key];
+ }
+ livekitLogger.trace('participant event', {
+ participant: this.sid,
+ event,
+ args
+ });
+ return super.emit(event, ...args);
+ }
+}
+
+class LocalParticipant extends Participant {
+ /** @internal */
+ constructor(sid, identity, engine, options) {
+ super(sid, identity);
+ this.pendingPublishing = new Set();
+ this.pendingPublishPromises = new Map();
+ this.participantTrackPermissions = [];
+ this.allParticipantsAllowedToSubscribe = true;
+ this.handleReconnecting = () => {
+ if (!this.reconnectFuture) {
+ this.reconnectFuture = new Future();
+ }
+ };
+ this.handleReconnected = () => {
+ var _a, _b;
+ (_b = (_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a);
+ this.reconnectFuture = undefined;
+ this.updateTrackSubscriptionPermissions();
+ };
+ this.handleDisconnected = () => {
+ var _a, _b;
+ (_b = (_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.reject) === null || _b === void 0 ? void 0 : _b.call(_a, 'Got disconnected during publishing attempt');
+ this.reconnectFuture = undefined;
+ };
+ this.updateTrackSubscriptionPermissions = () => {
+ livekitLogger.debug('updating track subscription permissions', {
+ allParticipantsAllowed: this.allParticipantsAllowedToSubscribe,
+ participantTrackPermissions: this.participantTrackPermissions
+ });
+ this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe, this.participantTrackPermissions.map(p => trackPermissionToProto(p)));
+ };
+ /** @internal */
+ this.onTrackUnmuted = track => {
+ this.onTrackMuted(track, track.isUpstreamPaused);
+ };
+ // when the local track changes in mute status, we'll notify server as such
+ /** @internal */
+ this.onTrackMuted = (track, muted) => {
+ if (muted === undefined) {
+ muted = true;
+ }
+ if (!track.sid) {
+ livekitLogger.error('could not update mute status for unpublished track', track);
+ return;
+ }
+ this.engine.updateMuteStatus(track.sid, muted);
+ };
+ this.onTrackUpstreamPaused = track => {
+ livekitLogger.debug('upstream paused');
+ this.onTrackMuted(track, true);
+ };
+ this.onTrackUpstreamResumed = track => {
+ livekitLogger.debug('upstream resumed');
+ this.onTrackMuted(track, track.isMuted);
+ };
+ this.handleSubscribedQualityUpdate = update => __awaiter(this, void 0, void 0, function* () {
+ var _a, e_1, _b, _c;
+ var _d, _e;
+ if (!((_d = this.roomOptions) === null || _d === void 0 ? void 0 : _d.dynacast)) {
+ return;
+ }
+ const pub = this.videoTracks.get(update.trackSid);
+ if (!pub) {
+ livekitLogger.warn('received subscribed quality update for unknown track', {
+ method: 'handleSubscribedQualityUpdate',
+ sid: update.trackSid
+ });
+ return;
+ }
+ if (update.subscribedCodecs.length > 0) {
+ if (!pub.videoTrack) {
+ return;
+ }
+ const newCodecs = yield pub.videoTrack.setPublishingCodecs(update.subscribedCodecs);
+ try {
+ for (var _f = true, newCodecs_1 = __asyncValues(newCodecs), newCodecs_1_1; newCodecs_1_1 = yield newCodecs_1.next(), _a = newCodecs_1_1.done, !_a; _f = true) {
+ _c = newCodecs_1_1.value;
+ _f = false;
+ const codec = _c;
+ if (isBackupCodec(codec)) {
+ livekitLogger.debug("publish ".concat(codec, " for ").concat(pub.videoTrack.sid));
+ yield this.publishAdditionalCodecForTrack(pub.videoTrack, codec, pub.options);
+ }
+ }
+ } catch (e_1_1) {
+ e_1 = {
+ error: e_1_1
+ };
+ } finally {
+ try {
+ if (!_f && !_a && (_b = newCodecs_1.return)) yield _b.call(newCodecs_1);
+ } finally {
+ if (e_1) throw e_1.error;
+ }
+ }
+ } else if (update.subscribedQualities.length > 0) {
+ yield (_e = pub.videoTrack) === null || _e === void 0 ? void 0 : _e.setPublishingLayers(update.subscribedQualities);
+ }
+ });
+ this.handleLocalTrackUnpublished = unpublished => {
+ const track = this.tracks.get(unpublished.trackSid);
+ if (!track) {
+ livekitLogger.warn('received unpublished event for unknown track', {
+ method: 'handleLocalTrackUnpublished',
+ trackSid: unpublished.trackSid
+ });
+ return;
+ }
+ this.unpublishTrack(track.track);
+ };
+ this.handleTrackEnded = track => __awaiter(this, void 0, void 0, function* () {
+ if (track.source === Track.Source.ScreenShare || track.source === Track.Source.ScreenShareAudio) {
+ livekitLogger.debug('unpublishing local track due to TrackEnded', {
+ track: track.sid
+ });
+ this.unpublishTrack(track);
+ } else if (track.isUserProvided) {
+ yield track.mute();
+ } else if (track instanceof LocalAudioTrack || track instanceof LocalVideoTrack) {
+ try {
+ if (isWeb()) {
+ try {
+ const currentPermissions = yield navigator === null || navigator === void 0 ? void 0 : navigator.permissions.query({
+ // the permission query for camera and microphone currently not supported in Safari and Firefox
+ // @ts-ignore
+ name: track.source === Track.Source.Camera ? 'camera' : 'microphone'
+ });
+ if (currentPermissions && currentPermissions.state === 'denied') {
+ livekitLogger.warn("user has revoked access to ".concat(track.source));
+ // detect granted change after permissions were denied to try and resume then
+ currentPermissions.onchange = () => {
+ if (currentPermissions.state !== 'denied') {
+ if (!track.isMuted) {
+ track.restartTrack();
+ }
+ currentPermissions.onchange = null;
+ }
+ };
+ throw new Error('GetUserMedia Permission denied');
+ }
+ } catch (e) {
+ // permissions query fails for firefox, we continue and try to restart the track
+ }
+ }
+ if (!track.isMuted) {
+ livekitLogger.debug('track ended, attempting to use a different device');
+ yield track.restartTrack();
+ }
+ } catch (e) {
+ livekitLogger.warn("could not restart track, muting instead");
+ yield track.mute();
+ }
+ }
+ });
+ this.audioTracks = new Map();
+ this.videoTracks = new Map();
+ this.tracks = new Map();
+ this.engine = engine;
+ this.roomOptions = options;
+ this.setupEngine(engine);
+ }
+ get lastCameraError() {
+ return this.cameraError;
+ }
+ get lastMicrophoneError() {
+ return this.microphoneError;
+ }
+ getTrack(source) {
+ const track = super.getTrack(source);
+ if (track) {
+ return track;
+ }
+ }
+ getTrackByName(name) {
+ const track = super.getTrackByName(name);
+ if (track) {
+ return track;
+ }
+ }
+ /**
+ * @internal
+ */
+ setupEngine(engine) {
+ this.engine = engine;
+ this.engine.client.onRemoteMuteChanged = (trackSid, muted) => {
+ const pub = this.tracks.get(trackSid);
+ if (!pub || !pub.track) {
+ return;
+ }
+ if (muted) {
+ pub.mute();
+ } else {
+ pub.unmute();
+ }
+ };
+ this.engine.client.onSubscribedQualityUpdate = this.handleSubscribedQualityUpdate;
+ this.engine.client.onLocalTrackUnpublished = this.handleLocalTrackUnpublished;
+ this.engine.on(EngineEvent.Connected, this.handleReconnected).on(EngineEvent.Restarted, this.handleReconnected).on(EngineEvent.Resumed, this.handleReconnected).on(EngineEvent.Restarting, this.handleReconnecting).on(EngineEvent.Resuming, this.handleReconnecting).on(EngineEvent.Disconnected, this.handleDisconnected);
+ }
+ /**
+ * Sets and updates the metadata of the local participant.
+ * Note: this requires `canUpdateOwnMetadata` permission encoded in the token.
+ * @param metadata
+ */
+ setMetadata(metadata) {
+ var _a;
+ super.setMetadata(metadata);
+ this.engine.client.sendUpdateLocalMetadata(metadata, (_a = this.name) !== null && _a !== void 0 ? _a : '');
+ }
+ /**
+ * Sets and updates the name of the local participant.
+ * Note: this requires `canUpdateOwnMetadata` permission encoded in the token.
+ * @param metadata
+ */
+ setName(name) {
+ var _a;
+ super.setName(name);
+ this.engine.client.sendUpdateLocalMetadata((_a = this.metadata) !== null && _a !== void 0 ? _a : '', name);
+ }
+ /**
+ * Enable or disable a participant's camera track.
+ *
+ * If a track has already published, it'll mute or unmute the track.
+ * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise
+ */
+ setCameraEnabled(enabled, options, publishOptions) {
+ return this.setTrackEnabled(Track.Source.Camera, enabled, options, publishOptions);
+ }
+ /**
+ * Enable or disable a participant's microphone track.
+ *
+ * If a track has already published, it'll mute or unmute the track.
+ * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise
+ */
+ setMicrophoneEnabled(enabled, options, publishOptions) {
+ return this.setTrackEnabled(Track.Source.Microphone, enabled, options, publishOptions);
+ }
+ /**
+ * Start or stop sharing a participant's screen
+ * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise
+ */
+ setScreenShareEnabled(enabled, options, publishOptions) {
+ return this.setTrackEnabled(Track.Source.ScreenShare, enabled, options, publishOptions);
+ }
+ setTrackEnabled(source, enabled, options, publishOptions) {
+ var _a, _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ livekitLogger.debug('setTrackEnabled', {
+ source,
+ enabled
+ });
+ let track = this.getTrack(source);
+ if (enabled) {
+ if (track) {
+ yield track.unmute();
+ } else {
+ let localTracks;
+ if (this.pendingPublishing.has(source)) {
+ livekitLogger.info('skipping duplicate published source', {
+ source
+ });
+ // no-op it's already been requested
+ return;
+ }
+ this.pendingPublishing.add(source);
+ try {
+ switch (source) {
+ case Track.Source.Camera:
+ localTracks = yield this.createTracks({
+ video: (_a = options) !== null && _a !== void 0 ? _a : true
+ });
+ break;
+ case Track.Source.Microphone:
+ localTracks = yield this.createTracks({
+ audio: (_b = options) !== null && _b !== void 0 ? _b : true
+ });
+ break;
+ case Track.Source.ScreenShare:
+ localTracks = yield this.createScreenTracks(Object.assign({}, options));
+ break;
+ default:
+ throw new TrackInvalidError(source);
+ }
+ const publishPromises = [];
+ for (const localTrack of localTracks) {
+ livekitLogger.info('publishing track', {
+ localTrack
+ });
+ publishPromises.push(this.publishTrack(localTrack, publishOptions));
+ }
+ const publishedTracks = yield Promise.all(publishPromises);
+ // for screen share publications including audio, this will only return the screen share publication, not the screen share audio one
+ // revisit if we want to return an array of tracks instead for v2
+ [track] = publishedTracks;
+ } catch (e) {
+ if (e instanceof Error && !(e instanceof TrackInvalidError)) {
+ this.emit(ParticipantEvent.MediaDevicesError, e);
+ }
+ throw e;
+ } finally {
+ this.pendingPublishing.delete(source);
+ }
+ }
+ } else if (track && track.track) {
+ // screenshare cannot be muted, unpublish instead
+ if (source === Track.Source.ScreenShare) {
+ track = yield this.unpublishTrack(track.track);
+ const screenAudioTrack = this.getTrack(Track.Source.ScreenShareAudio);
+ if (screenAudioTrack && screenAudioTrack.track) {
+ this.unpublishTrack(screenAudioTrack.track);
+ }
+ } else {
+ yield track.mute();
+ }
+ }
+ return track;
+ });
+ }
+ /**
+ * Publish both camera and microphone at the same time. This is useful for
+ * displaying a single Permission Dialog box to the end user.
+ */
+ enableCameraAndMicrophone() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.pendingPublishing.has(Track.Source.Camera) || this.pendingPublishing.has(Track.Source.Microphone)) {
+ // no-op it's already been requested
+ return;
+ }
+ this.pendingPublishing.add(Track.Source.Camera);
+ this.pendingPublishing.add(Track.Source.Microphone);
+ try {
+ const tracks = yield this.createTracks({
+ audio: true,
+ video: true
+ });
+ yield Promise.all(tracks.map(track => this.publishTrack(track)));
+ } finally {
+ this.pendingPublishing.delete(Track.Source.Camera);
+ this.pendingPublishing.delete(Track.Source.Microphone);
+ }
+ });
+ }
+ /**
+ * Create local camera and/or microphone tracks
+ * @param options
+ * @returns
+ */
+ createTracks(options) {
+ var _a, _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ const opts = mergeDefaultOptions(options, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.audioCaptureDefaults, (_b = this.roomOptions) === null || _b === void 0 ? void 0 : _b.videoCaptureDefaults);
+ const constraints = constraintsForOptions(opts);
+ let stream;
+ try {
+ stream = yield navigator.mediaDevices.getUserMedia(constraints);
+ } catch (err) {
+ if (err instanceof Error) {
+ if (constraints.audio) {
+ this.microphoneError = err;
+ }
+ if (constraints.video) {
+ this.cameraError = err;
+ }
+ }
+ throw err;
+ }
+ if (constraints.audio) {
+ this.microphoneError = undefined;
+ }
+ if (constraints.video) {
+ this.cameraError = undefined;
+ }
+ return stream.getTracks().map(mediaStreamTrack => {
+ const isAudio = mediaStreamTrack.kind === 'audio';
+ isAudio ? options.audio : options.video;
+ let trackConstraints;
+ const conOrBool = isAudio ? constraints.audio : constraints.video;
+ if (typeof conOrBool !== 'boolean') {
+ trackConstraints = conOrBool;
+ }
+ const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints);
+ if (track.kind === Track.Kind.Video) {
+ track.source = Track.Source.Camera;
+ } else if (track.kind === Track.Kind.Audio) {
+ track.source = Track.Source.Microphone;
+ }
+ track.mediaStream = stream;
+ return track;
+ });
+ });
+ }
+ /**
+ * Creates a screen capture tracks with getDisplayMedia().
+ * A LocalVideoTrack is always created and returned.
+ * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.
+ */
+ createScreenTracks(options) {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (options === undefined) {
+ options = {};
+ }
+ if (options.resolution === undefined) {
+ options.resolution = ScreenSharePresets.h1080fps15.resolution;
+ }
+ let videoConstraints = true;
+ if (options.resolution) {
+ if (isSafari()) {
+ videoConstraints = {
+ width: {
+ max: options.resolution.width
+ },
+ height: {
+ max: options.resolution.height
+ },
+ frameRate: options.resolution.frameRate
+ };
+ } else {
+ videoConstraints = {
+ width: {
+ ideal: options.resolution.width
+ },
+ height: {
+ ideal: options.resolution.height
+ },
+ frameRate: options.resolution.frameRate
+ };
+ }
+ }
+ if (navigator.mediaDevices.getDisplayMedia === undefined) {
+ throw new DeviceUnsupportedError('getDisplayMedia not supported');
+ }
+ const stream = yield navigator.mediaDevices.getDisplayMedia({
+ audio: (_a = options.audio) !== null && _a !== void 0 ? _a : false,
+ video: videoConstraints,
+ // @ts-expect-error support for experimental display media features
+ controller: options.controller,
+ selfBrowserSurface: options.selfBrowserSurface,
+ surfaceSwitching: options.surfaceSwitching,
+ systemAudio: options.systemAudio
+ });
+ const tracks = stream.getVideoTracks();
+ if (tracks.length === 0) {
+ throw new TrackInvalidError('no video track found');
+ }
+ const screenVideo = new LocalVideoTrack(tracks[0], undefined, false);
+ screenVideo.source = Track.Source.ScreenShare;
+ const localTracks = [screenVideo];
+ if (stream.getAudioTracks().length > 0) {
+ const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false);
+ screenAudio.source = Track.Source.ScreenShareAudio;
+ localTracks.push(screenAudio);
+ }
+ return localTracks;
+ });
+ }
+ /**
+ * Publish a new track to the room
+ * @param track
+ * @param options
+ */
+ publishTrack(track, options) {
+ var _a, _b, _c;
+ return __awaiter(this, void 0, void 0, function* () {
+ yield (_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.promise;
+ if (track instanceof LocalTrack && this.pendingPublishPromises.has(track)) {
+ yield this.pendingPublishPromises.get(track);
+ }
+ // convert raw media track into audio or video track
+ if (track instanceof MediaStreamTrack) {
+ switch (track.kind) {
+ case 'audio':
+ track = new LocalAudioTrack(track, undefined, true);
+ break;
+ case 'video':
+ track = new LocalVideoTrack(track, undefined, true);
+ break;
+ default:
+ throw new TrackInvalidError("unsupported MediaStreamTrack kind ".concat(track.kind));
+ }
+ }
+ // is it already published? if so skip
+ let existingPublication;
+ this.tracks.forEach(publication => {
+ if (!publication.track) {
+ return;
+ }
+ if (publication.track === track) {
+ existingPublication = publication;
+ }
+ });
+ if (existingPublication) {
+ livekitLogger.warn('track has already been published, skipping');
+ return existingPublication;
+ }
+ const isStereo = (options === null || options === void 0 ? void 0 : options.forceStereo) || 'channelCount' in track.mediaStreamTrack.getSettings() &&
+ // @ts-ignore `channelCount` on getSettings() is currently only available for Safari, but is generally the best way to determine a stereo track https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings/channelCount
+ track.mediaStreamTrack.getSettings().channelCount === 2 || track.mediaStreamTrack.getConstraints().channelCount === 2;
+ // disable dtx for stereo track if not enabled explicitly
+ if (isStereo) {
+ if (!options) {
+ options = {};
+ }
+ if (options.dtx === undefined) {
+ livekitLogger.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.");
+ }
+ if (options.red === undefined) {
+ livekitLogger.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work.");
+ }
+ (_b = options.dtx) !== null && _b !== void 0 ? _b : options.dtx = false;
+ (_c = options.red) !== null && _c !== void 0 ? _c : options.red = false;
+ }
+ const opts = Object.assign(Object.assign({}, this.roomOptions.publishDefaults), options);
+ if (opts.source) {
+ track.source = opts.source;
+ }
+ const publishPromise = this.publish(track, opts, options, isStereo);
+ this.pendingPublishPromises.set(track, publishPromise);
+ try {
+ const publication = yield publishPromise;
+ return publication;
+ } catch (e) {
+ throw e;
+ } finally {
+ this.pendingPublishPromises.delete(track);
+ }
+ });
+ }
+ publish(track, opts, options, isStereo) {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
+ return __awaiter(this, void 0, void 0, function* () {
+ const existingTrackOfSource = Array.from(this.tracks.values()).find(publishedTrack => track instanceof LocalTrack && publishedTrack.source === track.source);
+ if (existingTrackOfSource && track.source !== Track.Source.Unknown) {
+ try {
+ // throw an Error in order to capture the stack trace
+ throw Error("publishing a second track with the same source: ".concat(track.source));
+ } catch (e) {
+ if (e instanceof Error) {
+ livekitLogger.warn(e.message, {
+ oldTrack: existingTrackOfSource,
+ newTrack: track,
+ trace: e.stack
+ });
+ }
+ }
+ }
+ if (opts.stopMicTrackOnMute && track instanceof LocalAudioTrack) {
+ track.stopOnMute = true;
+ }
+ if (track.source === Track.Source.ScreenShare && isFireFox()) {
+ // Firefox does not work well with simulcasted screen share
+ // we frequently get no data on layer 0 when enabled
+ opts.simulcast = false;
+ }
+ // require full AV1/VP9 SVC support prior to using it
+ if (opts.videoCodec === 'av1' && !supportsAV1()) {
+ opts.videoCodec = undefined;
+ }
+ if (opts.videoCodec === 'vp9' && !supportsVP9()) {
+ opts.videoCodec = undefined;
+ }
+ // handle track actions
+ track.on(TrackEvent.Muted, this.onTrackMuted);
+ track.on(TrackEvent.Unmuted, this.onTrackUnmuted);
+ track.on(TrackEvent.Ended, this.handleTrackEnded);
+ track.on(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);
+ track.on(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);
+ // create track publication from track
+ const req = AddTrackRequest.fromPartial({
+ // get local track id for use during publishing
+ cid: track.mediaStreamTrack.id,
+ name: options === null || options === void 0 ? void 0 : options.name,
+ type: Track.kindToProto(track.kind),
+ muted: track.isMuted,
+ source: Track.sourceToProto(track.source),
+ disableDtx: !((_a = opts.dtx) !== null && _a !== void 0 ? _a : true),
+ stereo: isStereo,
+ disableRed: !((_b = opts.red) !== null && _b !== void 0 ? _b : true)
+ });
+ // compute encodings and layers for video
+ let encodings;
+ let simEncodings;
+ if (track.kind === Track.Kind.Video) {
+ let dims = {
+ width: 0,
+ height: 0
+ };
+ try {
+ dims = yield track.waitForDimensions();
+ } catch (e) {
+ // use defaults, it's quite painful for congestion control without simulcast
+ // so using default dims according to publish settings
+ const defaultRes = (_d = (_c = this.roomOptions.videoCaptureDefaults) === null || _c === void 0 ? void 0 : _c.resolution) !== null && _d !== void 0 ? _d : VideoPresets.h720.resolution;
+ dims = {
+ width: defaultRes.width,
+ height: defaultRes.height
+ };
+ // log failure
+ livekitLogger.error('could not determine track dimensions, using defaults', dims);
+ }
+ // width and height should be defined for video
+ req.width = dims.width;
+ req.height = dims.height;
+ // for svc codecs, disable simulcast and use vp8 for backup codec
+ if (track instanceof LocalVideoTrack) {
+ if (isSVCCodec(opts.videoCodec)) {
+ // set scalabilityMode to 'L3T3_KEY' by default
+ opts.scalabilityMode = (_e = opts.scalabilityMode) !== null && _e !== void 0 ? _e : 'L3T3_KEY';
+ }
+ // set up backup
+ if (opts.videoCodec && opts.backupCodec && opts.videoCodec !== opts.backupCodec.codec) {
+ const simOpts = Object.assign({}, opts);
+ simOpts.simulcast = true;
+ simEncodings = computeTrackBackupEncodings(track, opts.backupCodec.codec, simOpts);
+ req.simulcastCodecs = [{
+ codec: opts.videoCodec,
+ cid: track.mediaStreamTrack.id,
+ enableSimulcastLayers: true
+ }, {
+ codec: opts.backupCodec.codec,
+ cid: '',
+ enableSimulcastLayers: true
+ }];
+ } else if (opts.videoCodec) {
+ // pass codec info to sfu so it can prefer codec for the client which don't support
+ // setCodecPreferences
+ req.simulcastCodecs = [{
+ codec: opts.videoCodec,
+ cid: track.mediaStreamTrack.id,
+ enableSimulcastLayers: (_f = opts.simulcast) !== null && _f !== void 0 ? _f : false
+ }];
+ }
+ }
+ encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, dims.width, dims.height, opts);
+ req.layers = videoLayersFromEncodings(req.width, req.height, encodings);
+ } else if (track.kind === Track.Kind.Audio) {
+ encodings = [{
+ maxBitrate: (_h = (_g = opts.audioPreset) === null || _g === void 0 ? void 0 : _g.maxBitrate) !== null && _h !== void 0 ? _h : opts.audioBitrate,
+ priority: (_k = (_j = opts.audioPreset) === null || _j === void 0 ? void 0 : _j.priority) !== null && _k !== void 0 ? _k : 'high',
+ networkPriority: (_m = (_l = opts.audioPreset) === null || _l === void 0 ? void 0 : _l.priority) !== null && _m !== void 0 ? _m : 'high'
+ }];
+ }
+ if (!this.engine || this.engine.isClosed) {
+ throw new UnexpectedConnectionState('cannot publish track when not connected');
+ }
+ const ti = yield this.engine.addTrack(req);
+ let primaryCodecSupported = false;
+ let backupCodecSupported = false;
+ ti.codecs.forEach(c => {
+ if (isCodecEqual(c.mimeType, opts.videoCodec)) {
+ primaryCodecSupported = true;
+ } else if (opts.backupCodec && isCodecEqual(c.mimeType, opts.backupCodec.codec)) {
+ backupCodecSupported = true;
+ }
+ });
+ if (req.simulcastCodecs.length > 0) {
+ if (!primaryCodecSupported && !backupCodecSupported) {
+ throw Error('cannot publish track, codec not supported by server');
+ }
+ if (!primaryCodecSupported && opts.backupCodec) {
+ const backupCodec = opts.backupCodec;
+ opts = Object.assign({}, opts);
+ livekitLogger.debug("primary codec ".concat(opts.videoCodec, " not supported, fallback to ").concat(backupCodec.codec));
+ opts.videoCodec = backupCodec.codec;
+ opts.videoEncoding = backupCodec.encoding;
+ encodings = simEncodings;
+ }
+ }
+ const publication = new LocalTrackPublication(track.kind, ti, track);
+ // save options for when it needs to be republished again
+ publication.options = opts;
+ track.sid = ti.sid;
+ if (!this.engine.publisher) {
+ throw new UnexpectedConnectionState('publisher is closed');
+ }
+ livekitLogger.debug("publishing ".concat(track.kind, " with encodings"), {
+ encodings,
+ trackInfo: ti
+ });
+ // store RTPSender
+ track.sender = yield this.engine.createSender(track, opts, encodings);
+ if (track.codec && isSVCCodec(track.codec) && encodings && ((_o = encodings[0]) === null || _o === void 0 ? void 0 : _o.maxBitrate)) {
+ this.engine.publisher.setTrackCodecBitrate(req.cid, track.codec, encodings[0].maxBitrate / 1000);
+ }
+ this.engine.negotiate();
+ if (track instanceof LocalVideoTrack) {
+ track.startMonitor(this.engine.client);
+ } else if (track instanceof LocalAudioTrack) {
+ track.startMonitor();
+ }
+ this.addTrackPublication(publication);
+ // send event for publication
+ this.emit(ParticipantEvent.LocalTrackPublished, publication);
+ return publication;
+ });
+ }
+ get isLocal() {
+ return true;
+ }
+ /** @internal
+ * publish additional codec to existing track
+ */
+ publishAdditionalCodecForTrack(track, videoCodec, options) {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ // is it not published? if so skip
+ let existingPublication;
+ this.tracks.forEach(publication => {
+ if (!publication.track) {
+ return;
+ }
+ if (publication.track === track) {
+ existingPublication = publication;
+ }
+ });
+ if (!existingPublication) {
+ throw new TrackInvalidError('track is not published');
+ }
+ if (!(track instanceof LocalVideoTrack)) {
+ throw new TrackInvalidError('track is not a video track');
+ }
+ const opts = Object.assign(Object.assign({}, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.publishDefaults), options);
+ const encodings = computeTrackBackupEncodings(track, videoCodec, opts);
+ if (!encodings) {
+ livekitLogger.info("backup codec has been disabled, ignoring request to add additional codec for track");
+ return;
+ }
+ const simulcastTrack = track.addSimulcastTrack(videoCodec, encodings);
+ const req = AddTrackRequest.fromPartial({
+ cid: simulcastTrack.mediaStreamTrack.id,
+ type: Track.kindToProto(track.kind),
+ muted: track.isMuted,
+ source: Track.sourceToProto(track.source),
+ sid: track.sid,
+ simulcastCodecs: [{
+ codec: opts.videoCodec,
+ cid: simulcastTrack.mediaStreamTrack.id,
+ enableSimulcastLayers: opts.simulcast
+ }]
+ });
+ req.layers = videoLayersFromEncodings(req.width, req.height, encodings);
+ if (!this.engine || this.engine.isClosed) {
+ throw new UnexpectedConnectionState('cannot publish track when not connected');
+ }
+ const ti = yield this.engine.addTrack(req);
+ yield this.engine.createSimulcastSender(track, simulcastTrack, opts, encodings);
+ this.engine.negotiate();
+ livekitLogger.debug("published ".concat(videoCodec, " for track ").concat(track.sid), {
+ encodings,
+ trackInfo: ti
+ });
+ });
+ }
+ unpublishTrack(track, stopOnUnpublish) {
+ var _a, _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ // look through all published tracks to find the right ones
+ const publication = this.getPublicationForTrack(track);
+ livekitLogger.debug('unpublishing track', {
+ track,
+ method: 'unpublishTrack'
+ });
+ if (!publication || !publication.track) {
+ livekitLogger.warn('track was not unpublished because no publication was found', {
+ track,
+ method: 'unpublishTrack'
+ });
+ return undefined;
+ }
+ track = publication.track;
+ track.off(TrackEvent.Muted, this.onTrackMuted);
+ track.off(TrackEvent.Unmuted, this.onTrackUnmuted);
+ track.off(TrackEvent.Ended, this.handleTrackEnded);
+ track.off(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);
+ track.off(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);
+ if (stopOnUnpublish === undefined) {
+ stopOnUnpublish = (_b = (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.stopLocalTrackOnUnpublish) !== null && _b !== void 0 ? _b : true;
+ }
+ if (stopOnUnpublish) {
+ track.stop();
+ }
+ let negotiationNeeded = false;
+ const trackSender = track.sender;
+ track.sender = undefined;
+ if (this.engine.publisher && this.engine.publisher.pc.connectionState !== 'closed' && trackSender) {
+ try {
+ for (const transceiver of this.engine.publisher.pc.getTransceivers()) {
+ // if sender is not currently sending (after replaceTrack(null))
+ // removeTrack would have no effect.
+ // to ensure we end up successfully removing the track, manually set
+ // the transceiver to inactive
+ if (transceiver.sender === trackSender) {
+ transceiver.direction = 'inactive';
+ negotiationNeeded = true;
+ }
+ }
+ if (this.engine.removeTrack(trackSender)) {
+ negotiationNeeded = true;
+ }
+ if (track instanceof LocalVideoTrack) {
+ for (const [, trackInfo] of track.simulcastCodecs) {
+ if (trackInfo.sender) {
+ if (this.engine.removeTrack(trackInfo.sender)) {
+ negotiationNeeded = true;
+ }
+ trackInfo.sender = undefined;
+ }
+ }
+ track.simulcastCodecs.clear();
+ }
+ } catch (e) {
+ livekitLogger.warn('failed to unpublish track', {
+ error: e,
+ method: 'unpublishTrack'
+ });
+ }
+ }
+ // remove from our maps
+ this.tracks.delete(publication.trackSid);
+ switch (publication.kind) {
+ case Track.Kind.Audio:
+ this.audioTracks.delete(publication.trackSid);
+ break;
+ case Track.Kind.Video:
+ this.videoTracks.delete(publication.trackSid);
+ break;
+ }
+ this.emit(ParticipantEvent.LocalTrackUnpublished, publication);
+ publication.setTrack(undefined);
+ if (negotiationNeeded) {
+ yield this.engine.negotiate();
+ }
+ return publication;
+ });
+ }
+ unpublishTracks(tracks) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const results = yield Promise.all(tracks.map(track => this.unpublishTrack(track)));
+ return results.filter(track => track instanceof LocalTrackPublication);
+ });
+ }
+ republishAllTracks(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const localPubs = [];
+ this.tracks.forEach(pub => {
+ if (pub.track) {
+ if (options) {
+ pub.options = Object.assign(Object.assign({}, pub.options), options);
+ }
+ localPubs.push(pub);
+ }
+ });
+ yield Promise.all(localPubs.map(pub => __awaiter(this, void 0, void 0, function* () {
+ const track = pub.track;
+ yield this.unpublishTrack(track, false);
+ yield this.publishTrack(track, pub.options);
+ })));
+ });
+ }
+ publishData(data, kind) {
+ let publishOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+ return __awaiter(this, void 0, void 0, function* () {
+ const destination = Array.isArray(publishOptions) ? publishOptions : publishOptions === null || publishOptions === void 0 ? void 0 : publishOptions.destination;
+ const destinationSids = [];
+ const topic = !Array.isArray(publishOptions) ? publishOptions.topic : undefined;
+ if (destination !== undefined) {
+ destination.forEach(val => {
+ if (val instanceof RemoteParticipant) {
+ destinationSids.push(val.sid);
+ } else {
+ destinationSids.push(val);
+ }
+ });
+ }
+ const packet = {
+ kind,
+ value: {
+ $case: 'user',
+ user: {
+ participantSid: this.sid,
+ payload: data,
+ destinationSids: destinationSids,
+ topic
+ }
+ }
+ };
+ yield this.engine.sendDataPacket(packet, kind);
+ });
+ }
+ /**
+ * Control who can subscribe to LocalParticipant's published tracks.
+ *
+ * By default, all participants can subscribe. This allows fine-grained control over
+ * who is able to subscribe at a participant and track level.
+ *
+ * Note: if access is given at a track-level (i.e. both [allParticipantsAllowed] and
+ * [ParticipantTrackPermission.allTracksAllowed] are false), any newer published tracks
+ * will not grant permissions to any participants and will require a subsequent
+ * permissions update to allow subscription.
+ *
+ * @param allParticipantsAllowed Allows all participants to subscribe all tracks.
+ * Takes precedence over [[participantTrackPermissions]] if set to true.
+ * By default this is set to true.
+ * @param participantTrackPermissions Full list of individual permissions per
+ * participant/track. Any omitted participants will not receive any permissions.
+ */
+ setTrackSubscriptionPermissions(allParticipantsAllowed) {
+ let participantTrackPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+ this.participantTrackPermissions = participantTrackPermissions;
+ this.allParticipantsAllowedToSubscribe = allParticipantsAllowed;
+ if (this.engine.client.isConnected) {
+ this.updateTrackSubscriptionPermissions();
+ }
+ }
+ /** @internal */
+ updateInfo(info) {
+ if (info.sid !== this.sid) {
+ // drop updates that specify a wrong sid.
+ // the sid for local participant is only explicitly set on join and full reconnect
+ return false;
+ }
+ if (!super.updateInfo(info)) {
+ return false;
+ }
+ // reconcile track mute status.
+ // if server's track mute status doesn't match actual, we'll have to update
+ // the server's copy
+ info.tracks.forEach(ti => {
+ var _a, _b;
+ const pub = this.tracks.get(ti.sid);
+ if (pub) {
+ const mutedOnServer = pub.isMuted || ((_b = (_a = pub.track) === null || _a === void 0 ? void 0 : _a.isUpstreamPaused) !== null && _b !== void 0 ? _b : false);
+ if (mutedOnServer !== ti.muted) {
+ livekitLogger.debug('updating server mute state after reconcile', {
+ sid: ti.sid,
+ muted: mutedOnServer
+ });
+ this.engine.client.sendMuteTrack(ti.sid, mutedOnServer);
+ }
+ }
+ });
+ return true;
+ }
+ getPublicationForTrack(track) {
+ let publication;
+ this.tracks.forEach(pub => {
+ const localTrack = pub.track;
+ if (!localTrack) {
+ return;
+ }
+ // this looks overly complicated due to this object tree
+ if (track instanceof MediaStreamTrack) {
+ if (localTrack instanceof LocalAudioTrack || localTrack instanceof LocalVideoTrack) {
+ if (localTrack.mediaStreamTrack === track) {
+ publication = pub;
+ }
+ }
+ } else if (track === localTrack) {
+ publication = pub;
+ }
+ });
+ return publication;
+ }
+ /** @internal */
+ publishedTracksInfo() {
+ const infos = [];
+ this.tracks.forEach(track => {
+ if (track.track !== undefined) {
+ infos.push({
+ cid: track.track.mediaStreamID,
+ track: track.trackInfo
+ });
+ }
+ });
+ return infos;
+ }
+ /** @internal */
+ dataChannelsInfo() {
+ const infos = [];
+ const getInfo = (dc, target) => {
+ if ((dc === null || dc === void 0 ? void 0 : dc.id) !== undefined && dc.id !== null) {
+ infos.push({
+ label: dc.label,
+ id: dc.id,
+ target
+ });
+ }
+ };
+ getInfo(this.engine.dataChannelForKind(DataPacket_Kind.LOSSY), SignalTarget.PUBLISHER);
+ getInfo(this.engine.dataChannelForKind(DataPacket_Kind.RELIABLE), SignalTarget.PUBLISHER);
+ getInfo(this.engine.dataChannelForKind(DataPacket_Kind.LOSSY, true), SignalTarget.SUBSCRIBER);
+ getInfo(this.engine.dataChannelForKind(DataPacket_Kind.RELIABLE, true), SignalTarget.SUBSCRIBER);
+ return infos;
+ }
+}
+
+var ConnectionState;
+(function (ConnectionState) {
+ ConnectionState["Disconnected"] = "disconnected";
+ ConnectionState["Connecting"] = "connecting";
+ ConnectionState["Connected"] = "connected";
+ ConnectionState["Reconnecting"] = "reconnecting";
+})(ConnectionState || (ConnectionState = {}));
+const connectionReconcileFrequency = 2 * 1000;
+/** @deprecated RoomState has been renamed to [[ConnectionState]] */
+const RoomState = ConnectionState;
+/**
+ * In LiveKit, a room is the logical grouping for a list of participants.
+ * Participants in a room can publish tracks, and subscribe to others' tracks.
+ *
+ * a Room fires [[RoomEvent | RoomEvents]].
+ *
+ * @noInheritDoc
+ */
+class Room extends eventsExports.EventEmitter {
+ /**
+ * Creates a new Room, the primary construct for a LiveKit session.
+ * @param options
+ */
+ constructor(options) {
+ var _this;
+ super();
+ _this = this;
+ this.state = ConnectionState.Disconnected;
+ /**
+ * list of participants that are actively speaking. when this changes
+ * a [[RoomEvent.ActiveSpeakersChanged]] event is fired
+ */
+ this.activeSpeakers = [];
+ this.audioEnabled = true;
+ this.connect = (url, token, opts) => __awaiter(this, void 0, void 0, function* () {
+ // In case a disconnect called happened right before the connect call, make sure the disconnect is completed first by awaiting its lock
+ const unlockDisconnect = yield this.disconnectLock.lock();
+ if (this.state === ConnectionState.Connected) {
+ // when the state is reconnecting or connected, this function returns immediately
+ livekitLogger.info("already connected to room ".concat(this.name));
+ unlockDisconnect();
+ return Promise.resolve();
+ }
+ if (this.connectFuture) {
+ unlockDisconnect();
+ return this.connectFuture.promise;
+ }
+ this.setAndEmitConnectionState(ConnectionState.Connecting);
+ const urlProvider = new RegionUrlProvider(url, token);
+ const connectFn = (resolve, reject, regionUrl) => __awaiter(this, void 0, void 0, function* () {
+ var _a;
+ if (this.abortController) {
+ this.abortController.abort();
+ }
+ this.abortController = new AbortController();
+ // at this point the intention to connect has been signalled so we can allow cancelling of the connection via disconnect() again
+ unlockDisconnect === null || unlockDisconnect === void 0 ? void 0 : unlockDisconnect();
+ try {
+ yield this.attemptConnection(regionUrl !== null && regionUrl !== void 0 ? regionUrl : url, token, opts, this.abortController);
+ this.abortController = undefined;
+ resolve();
+ } catch (e) {
+ if (isCloud(new URL(url)) && e instanceof ConnectionError && e.reason !== 3 /* ConnectionErrorReason.Cancelled */) {
+ let nextUrl = null;
+ try {
+ nextUrl = yield urlProvider.getNextBestRegionUrl((_a = this.abortController) === null || _a === void 0 ? void 0 : _a.signal);
+ } catch (error) {
+ if (error instanceof ConnectionError && (error.status === 401 || error.reason === 3 /* ConnectionErrorReason.Cancelled */)) {
+ reject(error);
+ return;
+ }
+ }
+ if (nextUrl) {
+ livekitLogger.debug('initial connection failed, retrying with another region');
+ yield connectFn(resolve, reject, nextUrl);
+ } else {
+ reject(e);
+ }
+ } else {
+ reject(e);
+ }
+ }
+ });
+ this.connectFuture = new Future(connectFn, () => {
+ this.clearConnectionFutures();
+ });
+ return this.connectFuture.promise;
+ });
+ this.connectSignal = (url, token, engine, connectOptions, roomOptions, abortController) => __awaiter(this, void 0, void 0, function* () {
+ const joinResponse = yield engine.join(url, token, {
+ autoSubscribe: connectOptions.autoSubscribe,
+ publishOnly: connectOptions.publishOnly,
+ adaptiveStream: typeof roomOptions.adaptiveStream === 'object' ? true : roomOptions.adaptiveStream,
+ maxRetries: connectOptions.maxRetries
+ }, abortController.signal);
+ let serverInfo = joinResponse.serverInfo;
+ if (!serverInfo) {
+ serverInfo = {
+ version: joinResponse.serverVersion,
+ region: joinResponse.serverRegion
+ };
+ }
+ livekitLogger.debug("connected to Livekit Server ".concat(Object.entries(serverInfo).map(_ref => {
+ let [key, value] = _ref;
+ return "".concat(key, ": ").concat(value);
+ }).join(', ')));
+ if (!joinResponse.serverVersion) {
+ throw new UnsupportedServer('unknown server version');
+ }
+ if (joinResponse.serverVersion === '0.15.1' && this.options.dynacast) {
+ livekitLogger.debug('disabling dynacast due to server version');
+ // dynacast has a bug in 0.15.1, so we cannot use it then
+ roomOptions.dynacast = false;
+ }
+ return joinResponse;
+ });
+ this.applyJoinResponse = joinResponse => {
+ const pi = joinResponse.participant;
+ this.localParticipant.sid = pi.sid;
+ this.localParticipant.identity = pi.identity;
+ // populate remote participants, these should not trigger new events
+ this.handleParticipantUpdates([pi, ...joinResponse.otherParticipants]);
+ if (joinResponse.room) {
+ this.handleRoomUpdate(joinResponse.room);
+ }
+ };
+ this.attemptConnection = (url, token, opts, abortController) => __awaiter(this, void 0, void 0, function* () {
+ var _b;
+ if (this.state === ConnectionState.Reconnecting) {
+ livekitLogger.info('Reconnection attempt replaced by new connection attempt');
+ // make sure we close and recreate the existing engine in order to get rid of any potentially ongoing reconnection attempts
+ this.recreateEngine();
+ } else {
+ // create engine if previously disconnected
+ this.maybeCreateEngine();
+ }
+ this.acquireAudioContext();
+ this.connOptions = Object.assign(Object.assign({}, roomConnectOptionDefaults), opts);
+ if (this.connOptions.rtcConfig) {
+ this.engine.rtcConfig = this.connOptions.rtcConfig;
+ }
+ if (this.connOptions.peerConnectionTimeout) {
+ this.engine.peerConnectionTimeout = this.connOptions.peerConnectionTimeout;
+ }
+ try {
+ const joinResponse = yield this.connectSignal(url, token, this.engine, this.connOptions, this.options, abortController);
+ this.applyJoinResponse(joinResponse);
+ // forward metadata changed for the local participant
+ this.setupLocalParticipantEvents();
+ this.emit(RoomEvent.SignalConnected);
+ } catch (err) {
+ this.recreateEngine();
+ this.handleDisconnect(this.options.stopLocalTrackOnUnpublish);
+ const resultingError = new ConnectionError("could not establish signal connection");
+ if (err instanceof Error) {
+ resultingError.message = "".concat(resultingError.message, ": ").concat(err.message);
+ }
+ if (err instanceof ConnectionError) {
+ resultingError.reason = err.reason;
+ resultingError.status = err.status;
+ }
+ livekitLogger.debug("error trying to establish signal connection", {
+ error: err
+ });
+ throw resultingError;
+ }
+ if (abortController.signal.aborted) {
+ this.recreateEngine();
+ this.handleDisconnect(this.options.stopLocalTrackOnUnpublish);
+ throw new ConnectionError("Connection attempt aborted");
+ }
+ try {
+ yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout, abortController);
+ } catch (e) {
+ this.recreateEngine();
+ this.handleDisconnect(this.options.stopLocalTrackOnUnpublish);
+ throw e;
+ }
+ // also hook unload event
+ if (isWeb() && this.options.disconnectOnPageLeave) {
+ // capturing both 'pagehide' and 'beforeunload' to capture broadest set of browser behaviors
+ window.addEventListener('pagehide', this.onPageLeave);
+ window.addEventListener('beforeunload', this.onPageLeave);
+ (_b = navigator.mediaDevices) === null || _b === void 0 ? void 0 : _b.addEventListener('devicechange', this.handleDeviceChange);
+ }
+ this.setAndEmitConnectionState(ConnectionState.Connected);
+ this.emit(RoomEvent.Connected);
+ this.registerConnectionReconcile();
+ });
+ /**
+ * disconnects the room, emits [[RoomEvent.Disconnected]]
+ */
+ this.disconnect = function () {
+ let stopTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+ return __awaiter(_this, void 0, void 0, function* () {
+ var _c, _d, _e, _f;
+ const unlock = yield this.disconnectLock.lock();
+ try {
+ if (this.state === ConnectionState.Disconnected) {
+ livekitLogger.debug('already disconnected');
+ return;
+ }
+ livekitLogger.info('disconnect from room', {
+ identity: this.localParticipant.identity
+ });
+ if (this.state === ConnectionState.Connecting || this.state === ConnectionState.Reconnecting) {
+ // try aborting pending connection attempt
+ livekitLogger.warn('abort connection attempt');
+ (_c = this.abortController) === null || _c === void 0 ? void 0 : _c.abort();
+ // in case the abort controller didn't manage to cancel the connection attempt, reject the connect promise explicitly
+ (_e = (_d = this.connectFuture) === null || _d === void 0 ? void 0 : _d.reject) === null || _e === void 0 ? void 0 : _e.call(_d, new ConnectionError('Client initiated disconnect'));
+ this.connectFuture = undefined;
+ }
+ // send leave
+ if ((_f = this.engine) === null || _f === void 0 ? void 0 : _f.client.isConnected) {
+ yield this.engine.client.sendLeave();
+ }
+ // close engine (also closes client)
+ if (this.engine) {
+ yield this.engine.close();
+ }
+ this.handleDisconnect(stopTracks, DisconnectReason.CLIENT_INITIATED);
+ /* @ts-ignore */
+ this.engine = undefined;
+ } finally {
+ unlock();
+ }
+ });
+ };
+ this.onPageLeave = () => __awaiter(this, void 0, void 0, function* () {
+ yield this.disconnect();
+ });
+ this.handleRestarting = () => {
+ this.clearConnectionReconcile();
+ // also unwind existing participants & existing subscriptions
+ for (const p of this.participants.values()) {
+ this.handleParticipantDisconnected(p.sid, p);
+ }
+ if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {
+ this.emit(RoomEvent.Reconnecting);
+ }
+ };
+ this.handleSignalRestarted = joinResponse => __awaiter(this, void 0, void 0, function* () {
+ livekitLogger.debug("signal reconnected to server", {
+ region: joinResponse.serverRegion
+ });
+ this.cachedParticipantSids = [];
+ this.applyJoinResponse(joinResponse);
+ try {
+ // unpublish & republish tracks
+ const localPubs = [];
+ this.localParticipant.tracks.forEach(pub => {
+ if (pub.track) {
+ localPubs.push(pub);
+ }
+ });
+ yield Promise.all(localPubs.map(pub => __awaiter(this, void 0, void 0, function* () {
+ const track = pub.track;
+ this.localParticipant.unpublishTrack(track, false);
+ if (!track.isMuted) {
+ if ((track instanceof LocalAudioTrack || track instanceof LocalVideoTrack) && !track.isUserProvided) {
+ // we need to restart the track before publishing, often a full reconnect
+ // is necessary because computer had gone to sleep.
+ livekitLogger.debug('restarting existing track', {
+ track: pub.trackSid
+ });
+ yield track.restartTrack();
+ }
+ livekitLogger.debug('publishing new track', {
+ track: pub.trackSid
+ });
+ yield this.localParticipant.publishTrack(track, pub.options);
+ }
+ })));
+ } catch (error) {
+ livekitLogger.error('error trying to re-publish tracks after reconnection', {
+ error
+ });
+ }
+ try {
+ yield this.engine.waitForRestarted();
+ livekitLogger.debug("fully reconnected to server", {
+ region: joinResponse.serverRegion
+ });
+ } catch (_g) {
+ // reconnection failed, handleDisconnect is being invoked already, just return here
+ return;
+ }
+ this.setAndEmitConnectionState(ConnectionState.Connected);
+ this.emit(RoomEvent.Reconnected);
+ this.registerConnectionReconcile();
+ // emit participant connected events after connection has been re-established
+ this.participants.forEach(participant => {
+ this.emit(RoomEvent.ParticipantConnected, participant);
+ });
+ });
+ this.handleParticipantUpdates = participantInfos => {
+ // handle changes to participant state, and send events
+ participantInfos.forEach(info => {
+ if (info.identity === this.localParticipant.identity) {
+ this.localParticipant.updateInfo(info);
+ return;
+ }
+ // ensure identity <=> sid mapping
+ const sid = this.identityToSid.get(info.identity);
+ if (sid && sid !== info.sid) {
+ // sid had changed, need to remove previous participant
+ this.handleParticipantDisconnected(sid, this.participants.get(sid));
+ }
+ let remoteParticipant = this.participants.get(info.sid);
+ const isNewParticipant = !remoteParticipant;
+ // when it's disconnected, send updates
+ if (info.state === ParticipantInfo_State.DISCONNECTED) {
+ this.handleParticipantDisconnected(info.sid, remoteParticipant);
+ } else {
+ // create participant if doesn't exist
+ remoteParticipant = this.getOrCreateParticipant(info.sid, info);
+ if (!isNewParticipant) {
+ // just update, no events
+ remoteParticipant.updateInfo(info);
+ }
+ }
+ });
+ };
+ // updates are sent only when there's a change to speaker ordering
+ this.handleActiveSpeakersUpdate = speakers => {
+ const activeSpeakers = [];
+ const seenSids = {};
+ speakers.forEach(speaker => {
+ seenSids[speaker.sid] = true;
+ if (speaker.sid === this.localParticipant.sid) {
+ this.localParticipant.audioLevel = speaker.level;
+ this.localParticipant.setIsSpeaking(true);
+ activeSpeakers.push(this.localParticipant);
+ } else {
+ const p = this.participants.get(speaker.sid);
+ if (p) {
+ p.audioLevel = speaker.level;
+ p.setIsSpeaking(true);
+ activeSpeakers.push(p);
+ }
+ }
+ });
+ if (!seenSids[this.localParticipant.sid]) {
+ this.localParticipant.audioLevel = 0;
+ this.localParticipant.setIsSpeaking(false);
+ }
+ this.participants.forEach(p => {
+ if (!seenSids[p.sid]) {
+ p.audioLevel = 0;
+ p.setIsSpeaking(false);
+ }
+ });
+ this.activeSpeakers = activeSpeakers;
+ this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);
+ };
+ // process list of changed speakers
+ this.handleSpeakersChanged = speakerUpdates => {
+ const lastSpeakers = new Map();
+ this.activeSpeakers.forEach(p => {
+ lastSpeakers.set(p.sid, p);
+ });
+ speakerUpdates.forEach(speaker => {
+ let p = this.participants.get(speaker.sid);
+ if (speaker.sid === this.localParticipant.sid) {
+ p = this.localParticipant;
+ }
+ if (!p) {
+ return;
+ }
+ p.audioLevel = speaker.level;
+ p.setIsSpeaking(speaker.active);
+ if (speaker.active) {
+ lastSpeakers.set(speaker.sid, p);
+ } else {
+ lastSpeakers.delete(speaker.sid);
+ }
+ });
+ const activeSpeakers = Array.from(lastSpeakers.values());
+ activeSpeakers.sort((a, b) => b.audioLevel - a.audioLevel);
+ this.activeSpeakers = activeSpeakers;
+ this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);
+ };
+ this.handleStreamStateUpdate = streamStateUpdate => {
+ streamStateUpdate.streamStates.forEach(streamState => {
+ const participant = this.participants.get(streamState.participantSid);
+ if (!participant) {
+ return;
+ }
+ const pub = participant.getTrackPublication(streamState.trackSid);
+ if (!pub || !pub.track) {
+ return;
+ }
+ pub.track.streamState = Track.streamStateFromProto(streamState.state);
+ participant.emit(ParticipantEvent.TrackStreamStateChanged, pub, pub.track.streamState);
+ this.emitWhenConnected(RoomEvent.TrackStreamStateChanged, pub, pub.track.streamState, participant);
+ });
+ };
+ this.handleSubscriptionPermissionUpdate = update => {
+ const participant = this.participants.get(update.participantSid);
+ if (!participant) {
+ return;
+ }
+ const pub = participant.getTrackPublication(update.trackSid);
+ if (!pub) {
+ return;
+ }
+ pub.setAllowed(update.allowed);
+ };
+ this.handleSubscriptionError = update => {
+ const participant = Array.from(this.participants.values()).find(p => p.tracks.has(update.trackSid));
+ if (!participant) {
+ return;
+ }
+ const pub = participant.getTrackPublication(update.trackSid);
+ if (!pub) {
+ return;
+ }
+ pub.setSubscriptionError(update.err);
+ };
+ this.handleDataPacket = (userPacket, kind) => {
+ // find the participant
+ const participant = this.participants.get(userPacket.participantSid);
+ this.emit(RoomEvent.DataReceived, userPacket.payload, participant, kind, userPacket.topic);
+ // also emit on the participant
+ participant === null || participant === void 0 ? void 0 : participant.emit(ParticipantEvent.DataReceived, userPacket.payload, kind);
+ };
+ this.handleAudioPlaybackStarted = () => {
+ if (this.canPlaybackAudio) {
+ return;
+ }
+ this.audioEnabled = true;
+ this.emit(RoomEvent.AudioPlaybackStatusChanged, true);
+ };
+ this.handleAudioPlaybackFailed = e => {
+ livekitLogger.warn('could not playback audio', e);
+ if (!this.canPlaybackAudio) {
+ return;
+ }
+ this.audioEnabled = false;
+ this.emit(RoomEvent.AudioPlaybackStatusChanged, false);
+ };
+ this.handleDeviceChange = () => __awaiter(this, void 0, void 0, function* () {
+ this.emit(RoomEvent.MediaDevicesChanged);
+ });
+ this.handleRoomUpdate = room => {
+ const oldRoom = this.roomInfo;
+ this.roomInfo = room;
+ if (oldRoom && oldRoom.metadata !== room.metadata) {
+ this.emitWhenConnected(RoomEvent.RoomMetadataChanged, room.metadata);
+ }
+ if ((oldRoom === null || oldRoom === void 0 ? void 0 : oldRoom.activeRecording) !== room.activeRecording) {
+ this.emitWhenConnected(RoomEvent.RecordingStatusChanged, room.activeRecording);
+ }
+ };
+ this.handleConnectionQualityUpdate = update => {
+ update.updates.forEach(info => {
+ if (info.participantSid === this.localParticipant.sid) {
+ this.localParticipant.setConnectionQuality(info.quality);
+ return;
+ }
+ const participant = this.participants.get(info.participantSid);
+ if (participant) {
+ participant.setConnectionQuality(info.quality);
+ }
+ });
+ };
+ this.onLocalParticipantMetadataChanged = metadata => {
+ this.emit(RoomEvent.ParticipantMetadataChanged, metadata, this.localParticipant);
+ };
+ this.onLocalParticipantNameChanged = name => {
+ this.emit(RoomEvent.ParticipantNameChanged, name, this.localParticipant);
+ };
+ this.onLocalTrackMuted = pub => {
+ this.emit(RoomEvent.TrackMuted, pub, this.localParticipant);
+ };
+ this.onLocalTrackUnmuted = pub => {
+ this.emit(RoomEvent.TrackUnmuted, pub, this.localParticipant);
+ };
+ this.onLocalTrackPublished = pub => __awaiter(this, void 0, void 0, function* () {
+ this.emit(RoomEvent.LocalTrackPublished, pub, this.localParticipant);
+ if (pub.track instanceof LocalAudioTrack) {
+ const trackIsSilent = yield pub.track.checkForSilence();
+ if (trackIsSilent) {
+ this.emit(RoomEvent.LocalAudioSilenceDetected, pub);
+ }
+ }
+ });
+ this.onLocalTrackUnpublished = pub => {
+ this.emit(RoomEvent.LocalTrackUnpublished, pub, this.localParticipant);
+ };
+ this.onLocalConnectionQualityChanged = quality => {
+ this.emit(RoomEvent.ConnectionQualityChanged, quality, this.localParticipant);
+ };
+ this.onMediaDevicesError = e => {
+ this.emit(RoomEvent.MediaDevicesError, e);
+ };
+ this.onLocalParticipantPermissionsChanged = prevPermissions => {
+ this.emit(RoomEvent.ParticipantPermissionsChanged, prevPermissions, this.localParticipant);
+ };
+ this.setMaxListeners(100);
+ this.participants = new Map();
+ this.cachedParticipantSids = [];
+ this.identityToSid = new Map();
+ this.options = Object.assign(Object.assign({}, roomOptionDefaults), options);
+ this.options.audioCaptureDefaults = Object.assign(Object.assign({}, audioDefaults), options === null || options === void 0 ? void 0 : options.audioCaptureDefaults);
+ this.options.videoCaptureDefaults = Object.assign(Object.assign({}, videoDefaults), options === null || options === void 0 ? void 0 : options.videoCaptureDefaults);
+ this.options.publishDefaults = Object.assign(Object.assign({}, publishDefaults), options === null || options === void 0 ? void 0 : options.publishDefaults);
+ this.maybeCreateEngine();
+ this.disconnectLock = new Mutex();
+ this.localParticipant = new LocalParticipant('', '', this.engine, this.options);
+ }
+ /**
+ * if the current room has a participant with `recorder: true` in its JWT grant
+ **/
+ get isRecording() {
+ var _a, _b;
+ return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.activeRecording) !== null && _b !== void 0 ? _b : false;
+ }
+ /** server assigned unique room id */
+ get sid() {
+ var _a, _b;
+ return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.sid) !== null && _b !== void 0 ? _b : '';
+ }
+ /** user assigned name, derived from JWT token */
+ get name() {
+ var _a, _b;
+ return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '';
+ }
+ /** room metadata */
+ get metadata() {
+ var _a;
+ return (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.metadata;
+ }
+ get numParticipants() {
+ var _a, _b;
+ return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.numParticipants) !== null && _b !== void 0 ? _b : 0;
+ }
+ get numPublishers() {
+ var _a, _b;
+ return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.numPublishers) !== null && _b !== void 0 ? _b : 0;
+ }
+ maybeCreateEngine() {
+ if (this.engine && !this.engine.isClosed) {
+ return;
+ }
+ this.engine = new RTCEngine(this.options);
+ this.engine.client.onParticipantUpdate = this.handleParticipantUpdates;
+ this.engine.client.onRoomUpdate = this.handleRoomUpdate;
+ this.engine.client.onSpeakersChanged = this.handleSpeakersChanged;
+ this.engine.client.onStreamStateUpdate = this.handleStreamStateUpdate;
+ this.engine.client.onSubscriptionPermissionUpdate = this.handleSubscriptionPermissionUpdate;
+ this.engine.client.onConnectionQuality = this.handleConnectionQualityUpdate;
+ this.engine.client.onSubscriptionError = this.handleSubscriptionError;
+ this.engine.on(EngineEvent.MediaTrackAdded, (mediaTrack, stream, receiver) => {
+ this.onTrackAdded(mediaTrack, stream, receiver);
+ }).on(EngineEvent.Disconnected, reason => {
+ this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, reason);
+ }).on(EngineEvent.ActiveSpeakersUpdate, this.handleActiveSpeakersUpdate).on(EngineEvent.DataPacketReceived, this.handleDataPacket).on(EngineEvent.Resuming, () => {
+ this.clearConnectionReconcile();
+ if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {
+ this.emit(RoomEvent.Reconnecting);
+ }
+ this.cachedParticipantSids = Array.from(this.participants.keys());
+ }).on(EngineEvent.Resumed, () => {
+ this.setAndEmitConnectionState(ConnectionState.Connected);
+ this.emit(RoomEvent.Reconnected);
+ this.registerConnectionReconcile();
+ this.updateSubscriptions();
+ // once reconnected, figure out if any participants connected during reconnect and emit events for it
+ const diffParticipants = Array.from(this.participants.values()).filter(p => !this.cachedParticipantSids.includes(p.sid));
+ diffParticipants.forEach(p => this.emit(RoomEvent.ParticipantConnected, p));
+ this.cachedParticipantSids = [];
+ }).on(EngineEvent.SignalResumed, () => {
+ if (this.state === ConnectionState.Reconnecting) {
+ this.sendSyncState();
+ }
+ }).on(EngineEvent.Restarting, this.handleRestarting).on(EngineEvent.SignalRestarted, this.handleSignalRestarted).on(EngineEvent.DCBufferStatusChanged, (status, kind) => {
+ this.emit(RoomEvent.DCBufferStatusChanged, status, kind);
+ });
+ if (this.localParticipant) {
+ this.localParticipant.setupEngine(this.engine);
+ }
+ }
+ /**
+ * getLocalDevices abstracts navigator.mediaDevices.enumerateDevices.
+ * In particular, it handles Chrome's unique behavior of creating `default`
+ * devices. When encountered, it'll be removed from the list of devices.
+ * The actual default device will be placed at top.
+ * @param kind
+ * @returns a list of available local devices
+ */
+ static getLocalDevices(kind) {
+ let requestPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+ return DeviceManager.getInstance().getDevices(kind, requestPermissions);
+ }
+ /**
+ * prepares the connection to the livekit server by sending a HEAD request in order to
+ * 1. speed up DNS resolution
+ * 2. speed up TLS setup
+ * on the actual connection request
+ * throws an error if server is not reachable after the request timeout
+ * @experimental
+ */
+ prepareConnection(url) {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield fetch("http".concat(url.substring(2)), {
+ method: 'HEAD'
+ });
+ });
+ }
+ /**
+ * retrieves a participant by identity
+ * @param identity
+ * @returns
+ */
+ getParticipantByIdentity(identity) {
+ if (this.localParticipant.identity === identity) {
+ return this.localParticipant;
+ }
+ const sid = this.identityToSid.get(identity);
+ if (sid) {
+ return this.participants.get(sid);
+ }
+ }
+ clearConnectionFutures() {
+ this.connectFuture = undefined;
+ }
+ /**
+ * @internal for testing
+ */
+ simulateScenario(scenario) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let postAction = () => {};
+ let req;
+ switch (scenario) {
+ case 'signal-reconnect':
+ yield this.engine.client.close();
+ if (this.engine.client.onClose) {
+ this.engine.client.onClose('simulate disconnect');
+ }
+ break;
+ case 'speaker':
+ req = SimulateScenario.fromPartial({
+ scenario: {
+ $case: 'speakerUpdate',
+ speakerUpdate: 3
+ }
+ });
+ break;
+ case 'node-failure':
+ req = SimulateScenario.fromPartial({
+ scenario: {
+ $case: 'nodeFailure',
+ nodeFailure: true
+ }
+ });
+ break;
+ case 'server-leave':
+ req = SimulateScenario.fromPartial({
+ scenario: {
+ $case: 'serverLeave',
+ serverLeave: true
+ }
+ });
+ break;
+ case 'migration':
+ req = SimulateScenario.fromPartial({
+ scenario: {
+ $case: 'migration',
+ migration: true
+ }
+ });
+ break;
+ case 'resume-reconnect':
+ this.engine.failNext();
+ yield this.engine.client.close();
+ if (this.engine.client.onClose) {
+ this.engine.client.onClose('simulate resume-reconnect');
+ }
+ break;
+ case 'full-reconnect':
+ this.engine.fullReconnectOnNext = true;
+ yield this.engine.client.close();
+ if (this.engine.client.onClose) {
+ this.engine.client.onClose('simulate full-reconnect');
+ }
+ break;
+ case 'force-tcp':
+ case 'force-tls':
+ req = SimulateScenario.fromPartial({
+ scenario: {
+ $case: 'switchCandidateProtocol',
+ switchCandidateProtocol: scenario === 'force-tls' ? 2 : 1
+ }
+ });
+ postAction = () => __awaiter(this, void 0, void 0, function* () {
+ const onLeave = this.engine.client.onLeave;
+ if (onLeave) {
+ onLeave({
+ reason: DisconnectReason.CLIENT_INITIATED,
+ canReconnect: true
+ });
+ }
+ });
+ break;
+ }
+ if (req) {
+ this.engine.client.sendSimulateScenario(req);
+ postAction();
+ }
+ });
+ }
+ /**
+ * Browsers have different policies regarding audio playback. Most requiring
+ * some form of user interaction (click/tap/etc).
+ * In those cases, audio will be silent until a click/tap triggering one of the following
+ * - `startAudio`
+ * - `getUserMedia`
+ */
+ startAudio() {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield this.acquireAudioContext();
+ const elements = [];
+ this.participants.forEach(p => {
+ p.audioTracks.forEach(t => {
+ if (t.track) {
+ t.track.attachedElements.forEach(e => {
+ elements.push(e);
+ });
+ }
+ });
+ });
+ try {
+ yield Promise.all(elements.map(e => {
+ e.muted = false;
+ return e.play();
+ }));
+ this.handleAudioPlaybackStarted();
+ } catch (err) {
+ this.handleAudioPlaybackFailed(err);
+ throw err;
+ }
+ });
+ }
+ /**
+ * Returns true if audio playback is enabled
+ */
+ get canPlaybackAudio() {
+ return this.audioEnabled;
+ }
+ /**
+ * Returns the active audio output device used in this room.
+ *
+ * Note: to get the active `audioinput` or `videoinput` use [[LocalTrack.getDeviceId()]]
+ *
+ * @return the previously successfully set audio output device ID or an empty string if the default device is used.
+ */
+ getActiveAudioOutputDevice() {
+ var _a, _b;
+ return (_b = (_a = this.options.audioOutput) === null || _a === void 0 ? void 0 : _a.deviceId) !== null && _b !== void 0 ? _b : '';
+ }
+ /**
+ * Switches all active devices used in this room to the given device.
+ *
+ * Note: setting AudioOutput is not supported on some browsers. See [setSinkId](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId#browser_compatibility)
+ *
+ * @param kind use `videoinput` for camera track,
+ * `audioinput` for microphone track,
+ * `audiooutput` to set speaker for all incoming audio tracks
+ * @param deviceId
+ */
+ switchActiveDevice(kind, deviceId) {
+ let exact = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ var _a;
+ var _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ const deviceConstraint = exact ? {
+ exact: deviceId
+ } : deviceId;
+ if (kind === 'audioinput') {
+ const prevDeviceId = this.options.audioCaptureDefaults.deviceId;
+ this.options.audioCaptureDefaults.deviceId = deviceConstraint;
+ const tracks = Array.from(this.localParticipant.audioTracks.values()).filter(track => track.source === Track.Source.Microphone);
+ try {
+ yield Promise.all(tracks.map(t => {
+ var _a;
+ return (_a = t.audioTrack) === null || _a === void 0 ? void 0 : _a.setDeviceId(deviceConstraint);
+ }));
+ } catch (e) {
+ this.options.audioCaptureDefaults.deviceId = prevDeviceId;
+ throw e;
+ }
+ } else if (kind === 'videoinput') {
+ const prevDeviceId = this.options.videoCaptureDefaults.deviceId;
+ this.options.videoCaptureDefaults.deviceId = deviceConstraint;
+ const tracks = Array.from(this.localParticipant.videoTracks.values()).filter(track => track.source === Track.Source.Camera);
+ try {
+ yield Promise.all(tracks.map(t => {
+ var _a;
+ return (_a = t.videoTrack) === null || _a === void 0 ? void 0 : _a.setDeviceId(deviceConstraint);
+ }));
+ } catch (e) {
+ this.options.videoCaptureDefaults.deviceId = prevDeviceId;
+ throw e;
+ }
+ } else if (kind === 'audiooutput') {
+ // TODO add support for webaudio mix once the API becomes available https://github.com/WebAudio/web-audio-api/pull/2498
+ if (!supportsSetSinkId()) {
+ throw new Error('cannot switch audio output, setSinkId not supported');
+ }
+ (_a = (_b = this.options).audioOutput) !== null && _a !== void 0 ? _a : _b.audioOutput = {};
+ const prevDeviceId = this.options.audioOutput.deviceId;
+ this.options.audioOutput.deviceId = deviceId;
+ try {
+ yield Promise.all(Array.from(this.participants.values()).map(p => p.setAudioOutput({
+ deviceId
+ })));
+ } catch (e) {
+ this.options.audioOutput.deviceId = prevDeviceId;
+ throw e;
+ }
+ }
+ });
+ }
+ setupLocalParticipantEvents() {
+ this.localParticipant.on(ParticipantEvent.ParticipantMetadataChanged, this.onLocalParticipantMetadataChanged).on(ParticipantEvent.ParticipantNameChanged, this.onLocalParticipantNameChanged).on(ParticipantEvent.TrackMuted, this.onLocalTrackMuted).on(ParticipantEvent.TrackUnmuted, this.onLocalTrackUnmuted).on(ParticipantEvent.LocalTrackPublished, this.onLocalTrackPublished).on(ParticipantEvent.LocalTrackUnpublished, this.onLocalTrackUnpublished).on(ParticipantEvent.ConnectionQualityChanged, this.onLocalConnectionQualityChanged).on(ParticipantEvent.MediaDevicesError, this.onMediaDevicesError).on(ParticipantEvent.ParticipantPermissionsChanged, this.onLocalParticipantPermissionsChanged);
+ }
+ recreateEngine() {
+ var _a;
+ (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close();
+ /* @ts-ignore */
+ this.engine = undefined;
+ // clear out existing remote participants, since they may have attached
+ // the old engine
+ this.participants.clear();
+ this.maybeCreateEngine();
+ }
+ onTrackAdded(mediaTrack, stream, receiver) {
+ // don't fire onSubscribed when connecting
+ // WebRTC fires onTrack as soon as setRemoteDescription is called on the offer
+ // at that time, ICE connectivity has not been established so the track is not
+ // technically subscribed.
+ // We'll defer these events until when the room is connected or eventually disconnected.
+ if (this.state === ConnectionState.Connecting || this.state === ConnectionState.Reconnecting) {
+ const reconnectedHandler = () => {
+ this.onTrackAdded(mediaTrack, stream, receiver);
+ cleanup();
+ };
+ const cleanup = () => {
+ this.off(RoomEvent.Reconnected, reconnectedHandler);
+ this.off(RoomEvent.Connected, reconnectedHandler);
+ this.off(RoomEvent.Disconnected, cleanup);
+ };
+ this.once(RoomEvent.Reconnected, reconnectedHandler);
+ this.once(RoomEvent.Connected, reconnectedHandler);
+ this.once(RoomEvent.Disconnected, cleanup);
+ return;
+ }
+ if (this.state === ConnectionState.Disconnected) {
+ livekitLogger.warn('skipping incoming track after Room disconnected');
+ return;
+ }
+ const parts = unpackStreamId(stream.id);
+ const participantId = parts[0];
+ let trackId = parts[1];
+ if (!trackId || trackId === '') trackId = mediaTrack.id;
+ if (participantId === this.localParticipant.sid) {
+ livekitLogger.warn('tried to create RemoteParticipant for local participant');
+ return;
+ }
+ const participant = this.getOrCreateParticipant(participantId);
+ let adaptiveStreamSettings;
+ if (this.options.adaptiveStream) {
+ if (typeof this.options.adaptiveStream === 'object') {
+ adaptiveStreamSettings = this.options.adaptiveStream;
+ } else {
+ adaptiveStreamSettings = {};
+ }
+ }
+ participant.addSubscribedMediaTrack(mediaTrack, trackId, stream, receiver, adaptiveStreamSettings);
+ }
+ handleDisconnect() {
+ let shouldStopTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+ let reason = arguments.length > 1 ? arguments[1] : undefined;
+ var _a;
+ this.clearConnectionReconcile();
+ if (this.state === ConnectionState.Disconnected) {
+ return;
+ }
+ try {
+ this.participants.forEach(p => {
+ p.tracks.forEach(pub => {
+ p.unpublishTrack(pub.trackSid);
+ });
+ });
+ this.localParticipant.tracks.forEach(pub => {
+ var _a, _b;
+ if (pub.track) {
+ this.localParticipant.unpublishTrack(pub.track, shouldStopTracks);
+ }
+ if (shouldStopTracks) {
+ (_a = pub.track) === null || _a === void 0 ? void 0 : _a.detach();
+ (_b = pub.track) === null || _b === void 0 ? void 0 : _b.stop();
+ }
+ });
+ this.localParticipant.off(ParticipantEvent.ParticipantMetadataChanged, this.onLocalParticipantMetadataChanged).off(ParticipantEvent.ParticipantNameChanged, this.onLocalParticipantNameChanged).off(ParticipantEvent.TrackMuted, this.onLocalTrackMuted).off(ParticipantEvent.TrackUnmuted, this.onLocalTrackUnmuted).off(ParticipantEvent.LocalTrackPublished, this.onLocalTrackPublished).off(ParticipantEvent.LocalTrackUnpublished, this.onLocalTrackUnpublished).off(ParticipantEvent.ConnectionQualityChanged, this.onLocalConnectionQualityChanged).off(ParticipantEvent.MediaDevicesError, this.onMediaDevicesError).off(ParticipantEvent.ParticipantPermissionsChanged, this.onLocalParticipantPermissionsChanged);
+ this.localParticipant.tracks.clear();
+ this.localParticipant.videoTracks.clear();
+ this.localParticipant.audioTracks.clear();
+ this.participants.clear();
+ this.activeSpeakers = [];
+ if (this.audioContext && typeof this.options.expWebAudioMix === 'boolean') {
+ this.audioContext.close();
+ this.audioContext = undefined;
+ }
+ if (isWeb()) {
+ window.removeEventListener('beforeunload', this.onPageLeave);
+ window.removeEventListener('pagehide', this.onPageLeave);
+ (_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.removeEventListener('devicechange', this.handleDeviceChange);
+ }
+ } finally {
+ this.setAndEmitConnectionState(ConnectionState.Disconnected);
+ this.emit(RoomEvent.Disconnected, reason);
+ }
+ }
+ handleParticipantDisconnected(sid, participant) {
+ // remove and send event
+ this.participants.delete(sid);
+ if (!participant) {
+ return;
+ }
+ this.identityToSid.delete(participant.identity);
+ participant.tracks.forEach(publication => {
+ participant.unpublishTrack(publication.trackSid, true);
+ });
+ this.emit(RoomEvent.ParticipantDisconnected, participant);
+ }
+ acquireAudioContext() {
+ var _a, _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (typeof this.options.expWebAudioMix !== 'boolean' && this.options.expWebAudioMix.audioContext) {
+ // override audio context with custom audio context if supplied by user
+ this.audioContext = this.options.expWebAudioMix.audioContext;
+ yield this.audioContext.resume();
+ } else {
+ // by using an AudioContext, it reduces lag on audio elements
+ // https://stackoverflow.com/questions/9811429/html5-audio-tag-on-safari-has-a-delay/54119854#54119854
+ this.audioContext = (_a = getNewAudioContext()) !== null && _a !== void 0 ? _a : undefined;
+ }
+ if (this.options.expWebAudioMix) {
+ this.participants.forEach(participant => participant.setAudioContext(this.audioContext));
+ }
+ const newContextIsRunning = ((_b = this.audioContext) === null || _b === void 0 ? void 0 : _b.state) === 'running';
+ if (newContextIsRunning !== this.canPlaybackAudio) {
+ this.audioEnabled = newContextIsRunning;
+ this.emit(RoomEvent.AudioPlaybackStatusChanged, newContextIsRunning);
+ }
+ });
+ }
+ createParticipant(id, info) {
+ let participant;
+ if (info) {
+ participant = RemoteParticipant.fromParticipantInfo(this.engine.client, info);
+ } else {
+ participant = new RemoteParticipant(this.engine.client, id, '', undefined, undefined);
+ }
+ if (this.options.expWebAudioMix) {
+ participant.setAudioContext(this.audioContext);
+ }
+ return participant;
+ }
+ getOrCreateParticipant(id, info) {
+ if (this.participants.has(id)) {
+ return this.participants.get(id);
+ }
+ // it's possible for the RTC track to arrive before signaling data
+ // when this happens, we'll create the participant and make the track work
+ const participant = this.createParticipant(id, info);
+ this.participants.set(id, participant);
+ if (info) {
+ this.identityToSid.set(info.identity, info.sid);
+ // if we have valid info and the participant wasn't in the map before, we can assume the participant is new
+ // firing here to make sure that `ParticipantConnected` fires before the initial track events
+ this.emitWhenConnected(RoomEvent.ParticipantConnected, participant);
+ }
+ // also forward events
+ // trackPublished is only fired for tracks added after both local participant
+ // and remote participant joined the room
+ participant.on(ParticipantEvent.TrackPublished, trackPublication => {
+ this.emitWhenConnected(RoomEvent.TrackPublished, trackPublication, participant);
+ }).on(ParticipantEvent.TrackSubscribed, (track, publication) => {
+ // monitor playback status
+ if (track.kind === Track.Kind.Audio) {
+ track.on(TrackEvent.AudioPlaybackStarted, this.handleAudioPlaybackStarted);
+ track.on(TrackEvent.AudioPlaybackFailed, this.handleAudioPlaybackFailed);
+ }
+ this.emit(RoomEvent.TrackSubscribed, track, publication, participant);
+ }).on(ParticipantEvent.TrackUnpublished, publication => {
+ this.emit(RoomEvent.TrackUnpublished, publication, participant);
+ }).on(ParticipantEvent.TrackUnsubscribed, (track, publication) => {
+ this.emit(RoomEvent.TrackUnsubscribed, track, publication, participant);
+ }).on(ParticipantEvent.TrackSubscriptionFailed, sid => {
+ this.emit(RoomEvent.TrackSubscriptionFailed, sid, participant);
+ }).on(ParticipantEvent.TrackMuted, pub => {
+ this.emitWhenConnected(RoomEvent.TrackMuted, pub, participant);
+ }).on(ParticipantEvent.TrackUnmuted, pub => {
+ this.emitWhenConnected(RoomEvent.TrackUnmuted, pub, participant);
+ }).on(ParticipantEvent.ParticipantMetadataChanged, metadata => {
+ this.emitWhenConnected(RoomEvent.ParticipantMetadataChanged, metadata, participant);
+ }).on(ParticipantEvent.ParticipantNameChanged, name => {
+ this.emitWhenConnected(RoomEvent.ParticipantNameChanged, name, participant);
+ }).on(ParticipantEvent.ConnectionQualityChanged, quality => {
+ this.emitWhenConnected(RoomEvent.ConnectionQualityChanged, quality, participant);
+ }).on(ParticipantEvent.ParticipantPermissionsChanged, prevPermissions => {
+ this.emitWhenConnected(RoomEvent.ParticipantPermissionsChanged, prevPermissions, participant);
+ }).on(ParticipantEvent.TrackSubscriptionStatusChanged, (pub, status) => {
+ this.emitWhenConnected(RoomEvent.TrackSubscriptionStatusChanged, pub, status, participant);
+ }).on(ParticipantEvent.TrackSubscriptionFailed, (trackSid, error) => {
+ this.emit(RoomEvent.TrackSubscriptionFailed, trackSid, participant, error);
+ }).on(ParticipantEvent.TrackSubscriptionPermissionChanged, (pub, status) => {
+ this.emitWhenConnected(RoomEvent.TrackSubscriptionPermissionChanged, pub, status, participant);
+ });
+ // update info at the end after callbacks have been set up
+ if (info) {
+ participant.updateInfo(info);
+ }
+ return participant;
+ }
+ sendSyncState() {
+ var _a, _b;
+ if (this.engine.subscriber === undefined || this.engine.subscriber.pc.localDescription === null) {
+ return;
+ }
+ const previousAnswer = this.engine.subscriber.pc.localDescription;
+ const previousOffer = this.engine.subscriber.pc.remoteDescription;
+ /* 1. autosubscribe on, so subscribed tracks = all tracks - unsub tracks,
+ in this case, we send unsub tracks, so server add all tracks to this
+ subscribe pc and unsub special tracks from it.
+ 2. autosubscribe off, we send subscribed tracks.
+ */
+ const autoSubscribe = (_b = (_a = this.connOptions) === null || _a === void 0 ? void 0 : _a.autoSubscribe) !== null && _b !== void 0 ? _b : true;
+ const trackSids = new Array();
+ this.participants.forEach(participant => {
+ participant.tracks.forEach(track => {
+ if (track.isDesired !== autoSubscribe) {
+ trackSids.push(track.trackSid);
+ }
+ });
+ });
+ this.engine.client.sendSyncState({
+ answer: toProtoSessionDescription({
+ sdp: previousAnswer.sdp,
+ type: previousAnswer.type
+ }),
+ offer: previousOffer ? toProtoSessionDescription({
+ sdp: previousOffer.sdp,
+ type: previousOffer.type
+ }) : undefined,
+ subscription: {
+ trackSids,
+ subscribe: !autoSubscribe,
+ participantTracks: []
+ },
+ publishTracks: this.localParticipant.publishedTracksInfo(),
+ dataChannels: this.localParticipant.dataChannelsInfo()
+ });
+ }
+ /**
+ * After resuming, we'll need to notify the server of the current
+ * subscription settings.
+ */
+ updateSubscriptions() {
+ for (const p of this.participants.values()) {
+ for (const pub of p.videoTracks.values()) {
+ if (pub.isSubscribed && pub instanceof RemoteTrackPublication) {
+ pub.emitTrackUpdate();
+ }
+ }
+ }
+ }
+ registerConnectionReconcile() {
+ this.clearConnectionReconcile();
+ let consecutiveFailures = 0;
+ this.connectionReconcileInterval = CriticalTimers.setInterval(() => {
+ if (
+ // ensure we didn't tear it down
+ !this.engine ||
+ // engine detected close, but Room missed it
+ this.engine.isClosed ||
+ // transports failed without notifying engine
+ !this.engine.verifyTransport()) {
+ consecutiveFailures++;
+ livekitLogger.warn('detected connection state mismatch', {
+ numFailures: consecutiveFailures
+ });
+ if (consecutiveFailures >= 3) {
+ this.recreateEngine();
+ this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, DisconnectReason.STATE_MISMATCH);
+ }
+ } else {
+ consecutiveFailures = 0;
+ }
+ }, connectionReconcileFrequency);
+ }
+ clearConnectionReconcile() {
+ if (this.connectionReconcileInterval) {
+ CriticalTimers.clearInterval(this.connectionReconcileInterval);
+ }
+ }
+ setAndEmitConnectionState(state) {
+ if (state === this.state) {
+ // unchanged
+ return false;
+ }
+ this.state = state;
+ this.emit(RoomEvent.ConnectionStateChanged, this.state);
+ return true;
+ }
+ emitWhenConnected(event) {
+ if (this.state === ConnectionState.Connected) {
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ args[_key - 1] = arguments[_key];
+ }
+ return this.emit(event, ...args);
+ }
+ return false;
+ }
+ /**
+ * Allows to populate a room with simulated participants.
+ * No actual connection to a server will be established, all state is
+ * @experimental
+ */
+ simulateParticipants(options) {
+ var _a, _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ const publishOptions = Object.assign({
+ audio: true,
+ video: true,
+ useRealTracks: false
+ }, options.publish);
+ const participantOptions = Object.assign({
+ count: 9,
+ audio: false,
+ video: true,
+ aspectRatios: [1.66, 1.7, 1.3]
+ }, options.participants);
+ this.handleDisconnect();
+ this.roomInfo = {
+ sid: 'RM_SIMULATED',
+ name: 'simulated-room',
+ emptyTimeout: 0,
+ maxParticipants: 0,
+ creationTime: new Date().getTime(),
+ metadata: '',
+ numParticipants: 1,
+ numPublishers: 1,
+ turnPassword: '',
+ enabledCodecs: [],
+ activeRecording: false
+ };
+ this.localParticipant.updateInfo(ParticipantInfo.fromPartial({
+ identity: 'simulated-local',
+ name: 'local-name'
+ }));
+ this.setupLocalParticipantEvents();
+ this.emit(RoomEvent.SignalConnected);
+ this.emit(RoomEvent.Connected);
+ this.setAndEmitConnectionState(ConnectionState.Connected);
+ if (publishOptions.video) {
+ const camPub = new LocalTrackPublication(Track.Kind.Video, TrackInfo.fromPartial({
+ source: TrackSource.CAMERA,
+ sid: Math.floor(Math.random() * 10000).toString(),
+ type: TrackType.AUDIO,
+ name: 'video-dummy'
+ }), new LocalVideoTrack(publishOptions.useRealTracks ? (yield navigator.mediaDevices.getUserMedia({
+ video: true
+ })).getVideoTracks()[0] : createDummyVideoStreamTrack((_a = 160 * participantOptions.aspectRatios[0]) !== null && _a !== void 0 ? _a : 1, 160, true, true)));
+ // @ts-ignore
+ this.localParticipant.addTrackPublication(camPub);
+ this.localParticipant.emit(ParticipantEvent.LocalTrackPublished, camPub);
+ }
+ if (publishOptions.audio) {
+ const audioPub = new LocalTrackPublication(Track.Kind.Audio, TrackInfo.fromPartial({
+ source: TrackSource.MICROPHONE,
+ sid: Math.floor(Math.random() * 10000).toString(),
+ type: TrackType.AUDIO
+ }), new LocalAudioTrack(publishOptions.useRealTracks ? (yield navigator.mediaDevices.getUserMedia({
+ audio: true
+ })).getAudioTracks()[0] : getEmptyAudioStreamTrack()));
+ // @ts-ignore
+ this.localParticipant.addTrackPublication(audioPub);
+ this.localParticipant.emit(ParticipantEvent.LocalTrackPublished, audioPub);
+ }
+ for (let i = 0; i < participantOptions.count - 1; i += 1) {
+ let info = ParticipantInfo.fromPartial({
+ sid: Math.floor(Math.random() * 10000).toString(),
+ identity: "simulated-".concat(i),
+ state: ParticipantInfo_State.ACTIVE,
+ tracks: [],
+ joinedAt: Date.now()
+ });
+ const p = this.getOrCreateParticipant(info.identity, info);
+ if (participantOptions.video) {
+ const dummyVideo = createDummyVideoStreamTrack((_b = 160 * participantOptions.aspectRatios[i % participantOptions.aspectRatios.length]) !== null && _b !== void 0 ? _b : 1, 160, false, true);
+ const videoTrack = TrackInfo.fromPartial({
+ source: TrackSource.CAMERA,
+ sid: Math.floor(Math.random() * 10000).toString(),
+ type: TrackType.AUDIO
+ });
+ p.addSubscribedMediaTrack(dummyVideo, videoTrack.sid, new MediaStream([dummyVideo]));
+ info.tracks = [...info.tracks, videoTrack];
+ }
+ if (participantOptions.audio) {
+ const dummyTrack = getEmptyAudioStreamTrack();
+ const audioTrack = TrackInfo.fromPartial({
+ source: TrackSource.MICROPHONE,
+ sid: Math.floor(Math.random() * 10000).toString(),
+ type: TrackType.AUDIO
+ });
+ p.addSubscribedMediaTrack(dummyTrack, audioTrack.sid, new MediaStream([dummyTrack]));
+ info.tracks = [...info.tracks, audioTrack];
+ }
+ p.updateInfo(info);
+ }
+ });
+ }
+ // /** @internal */
+ emit(event) {
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+ args[_key2 - 1] = arguments[_key2];
+ }
+ // active speaker updates are too spammy
+ if (event !== RoomEvent.ActiveSpeakersChanged) {
+ livekitLogger.debug("room event ".concat(event), {
+ event,
+ args
+ });
+ }
+ return super.emit(event, ...args);
+ }
+}
+
+var CheckStatus;
+(function (CheckStatus) {
+ CheckStatus[CheckStatus["IDLE"] = 0] = "IDLE";
+ CheckStatus[CheckStatus["RUNNING"] = 1] = "RUNNING";
+ CheckStatus[CheckStatus["SKIPPED"] = 2] = "SKIPPED";
+ CheckStatus[CheckStatus["SUCCESS"] = 3] = "SUCCESS";
+ CheckStatus[CheckStatus["FAILED"] = 4] = "FAILED";
+})(CheckStatus || (CheckStatus = {}));
+class Checker extends eventsExports.EventEmitter {
+ constructor(url, token) {
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+ super();
+ this.status = CheckStatus.IDLE;
+ this.logs = [];
+ this.errorsAsWarnings = false;
+ this.url = url;
+ this.token = token;
+ this.name = this.constructor.name;
+ this.room = new Room(options.roomOptions);
+ this.connectOptions = options.connectOptions;
+ if (options.errorsAsWarnings) {
+ this.errorsAsWarnings = options.errorsAsWarnings;
+ }
+ }
+ run(onComplete) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.status !== CheckStatus.IDLE) {
+ throw Error('check is running already');
+ }
+ this.setStatus(CheckStatus.RUNNING);
+ this.appendMessage("".concat(this.name, " started."));
+ try {
+ yield this.perform();
+ } catch (err) {
+ if (err instanceof Error) {
+ if (this.errorsAsWarnings) {
+ this.appendWarning(err.message);
+ } else {
+ this.appendError(err.message);
+ }
+ }
+ }
+ yield this.disconnect();
+ // sleep for a bit to ensure disconnect
+ yield new Promise(resolve => setTimeout(resolve, 500));
+ // @ts-ignore
+ if (this.status !== CheckStatus.SKIPPED) {
+ this.setStatus(this.isSuccess() ? CheckStatus.SUCCESS : CheckStatus.FAILED);
+ }
+ if (onComplete) {
+ onComplete();
+ }
+ return this.getInfo();
+ });
+ }
+ isSuccess() {
+ return !this.logs.some(l => l.level === 'error');
+ }
+ connect() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.room.state === ConnectionState.Connected) {
+ return this.room;
+ }
+ yield this.room.connect(this.url, this.token);
+ return this.room;
+ });
+ }
+ disconnect() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.room && this.room.state !== ConnectionState.Disconnected) {
+ yield this.room.disconnect();
+ // wait for it to go through
+ yield new Promise(resolve => setTimeout(resolve, 500));
+ }
+ });
+ }
+ skip() {
+ this.setStatus(CheckStatus.SKIPPED);
+ }
+ appendMessage(message) {
+ this.logs.push({
+ level: 'info',
+ message
+ });
+ this.emit('update', this.getInfo());
+ }
+ appendWarning(message) {
+ this.logs.push({
+ level: 'warning',
+ message
+ });
+ this.emit('update', this.getInfo());
+ }
+ appendError(message) {
+ this.logs.push({
+ level: 'error',
+ message
+ });
+ this.emit('update', this.getInfo());
+ }
+ setStatus(status) {
+ this.status = status;
+ this.emit('update', this.getInfo());
+ }
+ get engine() {
+ var _a;
+ return (_a = this.room) === null || _a === void 0 ? void 0 : _a.engine;
+ }
+ getInfo() {
+ return {
+ logs: this.logs,
+ name: this.name,
+ status: this.status,
+ description: this.description
+ };
+ }
+}
+
+/**
+ * Creates a local video and audio track at the same time. When acquiring both
+ * audio and video tracks together, it'll display a single permission prompt to
+ * the user instead of two separate ones.
+ * @param options
+ */
+function createLocalTracks(options) {
+ var _a, _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ // set default options to true
+ options !== null && options !== void 0 ? options : options = {};
+ (_a = options.audio) !== null && _a !== void 0 ? _a : options.audio = true;
+ (_b = options.video) !== null && _b !== void 0 ? _b : options.video = true;
+ const opts = mergeDefaultOptions(options, audioDefaults, videoDefaults);
+ const constraints = constraintsForOptions(opts);
+ // Keep a reference to the promise on DeviceManager and await it in getLocalDevices()
+ // works around iOS Safari Bug https://bugs.webkit.org/show_bug.cgi?id=179363
+ const mediaPromise = navigator.mediaDevices.getUserMedia(constraints);
+ if (options.audio) {
+ DeviceManager.userMediaPromiseMap.set('audioinput', mediaPromise);
+ mediaPromise.catch(() => DeviceManager.userMediaPromiseMap.delete('audioinput'));
+ }
+ if (options.video) {
+ DeviceManager.userMediaPromiseMap.set('videoinput', mediaPromise);
+ mediaPromise.catch(() => DeviceManager.userMediaPromiseMap.delete('videoinput'));
+ }
+ const stream = yield mediaPromise;
+ return stream.getTracks().map(mediaStreamTrack => {
+ const isAudio = mediaStreamTrack.kind === 'audio';
+ isAudio ? options.audio : options.video;
+ let trackConstraints;
+ const conOrBool = isAudio ? constraints.audio : constraints.video;
+ if (typeof conOrBool !== 'boolean') {
+ trackConstraints = conOrBool;
+ }
+ const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints);
+ if (track.kind === Track.Kind.Video) {
+ track.source = Track.Source.Camera;
+ } else if (track.kind === Track.Kind.Audio) {
+ track.source = Track.Source.Microphone;
+ }
+ track.mediaStream = stream;
+ return track;
+ });
+ });
+}
+/**
+ * Creates a [[LocalVideoTrack]] with getUserMedia()
+ * @param options
+ */
+function createLocalVideoTrack(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const tracks = yield createLocalTracks({
+ audio: false,
+ video: options
+ });
+ return tracks[0];
+ });
+}
+function createLocalAudioTrack(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const tracks = yield createLocalTracks({
+ audio: options,
+ video: false
+ });
+ return tracks[0];
+ });
+}
+/**
+ * Creates a screen capture tracks with getDisplayMedia().
+ * A LocalVideoTrack is always created and returned.
+ * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.
+ */
+function createLocalScreenTracks(options) {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ if (options === undefined) {
+ options = {};
+ }
+ if (options.resolution === undefined) {
+ options.resolution = VideoPresets.h1080.resolution;
+ }
+ let videoConstraints = true;
+ if (options.resolution) {
+ videoConstraints = {
+ width: options.resolution.width,
+ height: options.resolution.height
+ };
+ }
+ if (navigator.mediaDevices.getDisplayMedia === undefined) {
+ throw new DeviceUnsupportedError('getDisplayMedia not supported');
+ }
+ // typescript definition is missing getDisplayMedia: https://github.com/microsoft/TypeScript/issues/33232
+ // @ts-ignore
+ const stream = yield navigator.mediaDevices.getDisplayMedia({
+ audio: (_a = options.audio) !== null && _a !== void 0 ? _a : false,
+ video: videoConstraints
+ });
+ const tracks = stream.getVideoTracks();
+ if (tracks.length === 0) {
+ throw new TrackInvalidError('no video track found');
+ }
+ const screenVideo = new LocalVideoTrack(tracks[0], undefined, false);
+ screenVideo.source = Track.Source.ScreenShare;
+ const localTracks = [screenVideo];
+ if (stream.getAudioTracks().length > 0) {
+ const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false);
+ screenAudio.source = Track.Source.ScreenShareAudio;
+ localTracks.push(screenAudio);
+ }
+ return localTracks;
+ });
+}
+
+class PublishAudioCheck extends Checker {
+ get description() {
+ return 'Can publish audio';
+ }
+ perform() {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ const room = yield this.connect();
+ const track = yield createLocalAudioTrack();
+ room.localParticipant.publishTrack(track);
+ // wait for a few seconds to publish
+ yield new Promise(resolve => setTimeout(resolve, 3000));
+ // verify RTC stats that it's publishing
+ const stats = yield (_a = track.sender) === null || _a === void 0 ? void 0 : _a.getStats();
+ if (!stats) {
+ throw new Error('Could not get RTCStats');
+ }
+ let numPackets = 0;
+ stats.forEach(stat => {
+ if (stat.type === 'outbound-rtp' && stat.mediaType === 'audio') {
+ numPackets = stat.packetsSent;
+ }
+ });
+ if (numPackets === 0) {
+ throw new Error('Could not determine packets are sent');
+ }
+ this.appendMessage("published ".concat(numPackets, " audio packets"));
+ });
+ }
+}
+
+class PublishVideoCheck extends Checker {
+ get description() {
+ return 'Can publish video';
+ }
+ perform() {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ const room = yield this.connect();
+ const track = yield createLocalVideoTrack();
+ room.localParticipant.publishTrack(track);
+ // wait for a few seconds to publish
+ yield new Promise(resolve => setTimeout(resolve, 3000));
+ // verify RTC stats that it's publishing
+ const stats = yield (_a = track.sender) === null || _a === void 0 ? void 0 : _a.getStats();
+ if (!stats) {
+ throw new Error('Could not get RTCStats');
+ }
+ let numPackets = 0;
+ stats.forEach(stat => {
+ if (stat.type === 'outbound-rtp' && stat.mediaType === 'video') {
+ numPackets = stat.packetsSent;
+ }
+ });
+ if (numPackets === 0) {
+ throw new Error('Could not determine packets are sent');
+ }
+ this.appendMessage("published ".concat(numPackets, " video packets"));
+ });
+ }
+}
+
+class ReconnectCheck extends Checker {
+ get description() {
+ return 'Resuming connection after interruption';
+ }
+ perform() {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ const room = yield this.connect();
+ let reconnectingTriggered = false;
+ let reconnected = false;
+ let reconnectResolver;
+ const reconnectTimeout = new Promise(resolve => {
+ setTimeout(resolve, 5000);
+ reconnectResolver = resolve;
+ });
+ room.on(RoomEvent.Reconnecting, () => {
+ reconnectingTriggered = true;
+ }).on(RoomEvent.Reconnected, () => {
+ reconnected = true;
+ reconnectResolver(true);
+ });
+ (_a = room.engine.client.ws) === null || _a === void 0 ? void 0 : _a.close();
+ const onClose = room.engine.client.onClose;
+ if (onClose) {
+ onClose('');
+ }
+ yield reconnectTimeout;
+ if (!reconnectingTriggered) {
+ throw new Error('Did not attempt to reconnect');
+ } else if (!reconnected || room.state !== ConnectionState.Connected) {
+ this.appendWarning('reconnection is only possible in Redis-based configurations');
+ throw new Error('Not able to reconnect');
+ }
+ });
+ }
+}
+
+class TURNCheck extends Checker {
+ get description() {
+ return 'Can connect via TURN';
+ }
+ perform() {
+ var _a, _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ const signalClient = new SignalClient();
+ const joinRes = yield signalClient.join(this.url, this.token, {
+ autoSubscribe: true,
+ maxRetries: 0
+ });
+ let hasTLS = false;
+ let hasTURN = false;
+ let hasSTUN = false;
+ for (let iceServer of joinRes.iceServers) {
+ for (let url of iceServer.urls) {
+ if (url.startsWith('turn:')) {
+ hasTURN = true;
+ hasSTUN = true;
+ } else if (url.startsWith('turns:')) {
+ hasTURN = true;
+ hasSTUN = true;
+ hasTLS = true;
+ }
+ if (url.startsWith('stun:')) {
+ hasSTUN = true;
+ }
+ }
+ }
+ if (!hasSTUN) {
+ this.appendWarning('No STUN servers configured on server side.');
+ } else if (hasTURN && !hasTLS) {
+ this.appendWarning('TURN is configured server side, but TURN/TLS is unavailable.');
+ }
+ yield signalClient.close();
+ if (((_b = (_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.rtcConfig) === null || _b === void 0 ? void 0 : _b.iceServers) || hasTURN) {
+ yield this.room.connect(this.url, this.token, {
+ rtcConfig: {
+ iceTransportPolicy: 'relay'
+ }
+ });
+ } else {
+ this.appendWarning('No TURN servers configured.');
+ this.skip();
+ yield new Promise(resolve => setTimeout(resolve, 0));
+ }
+ });
+ }
+}
+
+class WebRTCCheck extends Checker {
+ get description() {
+ return 'Establishing WebRTC connection';
+ }
+ perform() {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ console.log('initiating room connection');
+ this.room = yield this.connect();
+ console.log('now the room is connected');
+ } catch (err) {
+ this.appendWarning('ports need to be open on firewall in order to connect.');
+ throw err;
+ }
+ });
+ }
+}
+
+class WebSocketCheck extends Checker {
+ get description() {
+ return 'Connecting to signal connection via WebSocket';
+ }
+ perform() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (this.url.startsWith('ws:') || this.url.startsWith('http:')) {
+ this.appendWarning('Server is insecure, clients may block connections to it');
+ }
+ let signalClient = new SignalClient();
+ const joinRes = yield signalClient.join(this.url, this.token, {
+ autoSubscribe: true,
+ maxRetries: 0
+ });
+ this.appendMessage("Connected to server, version ".concat(joinRes.serverVersion, "."));
+ yield signalClient.close();
+ });
+ }
+}
+
+class ConnectionCheck extends eventsExports.EventEmitter {
+ constructor(url, token) {
+ super();
+ this.checkResults = new Map();
+ this.url = url;
+ this.token = token;
+ }
+ getNextCheckId() {
+ const nextId = this.checkResults.size;
+ this.checkResults.set(nextId, {
+ logs: [],
+ status: CheckStatus.IDLE,
+ name: '',
+ description: ''
+ });
+ return nextId;
+ }
+ updateCheck(checkId, info) {
+ this.checkResults.set(checkId, info);
+ this.emit('checkUpdate', checkId, info);
+ }
+ isSuccess() {
+ return Array.from(this.checkResults.values()).every(r => r.status !== CheckStatus.FAILED);
+ }
+ getResults() {
+ return Array.from(this.checkResults.values());
+ }
+ createAndRunCheck(check) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const checkId = this.getNextCheckId();
+ const test = new check(this.url, this.token);
+ const handleUpdate = info => {
+ this.updateCheck(checkId, info);
+ };
+ test.on('update', handleUpdate);
+ const result = yield test.run();
+ test.off('update', handleUpdate);
+ return result;
+ });
+ }
+ checkWebsocket() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.createAndRunCheck(WebSocketCheck);
+ });
+ }
+ checkWebRTC() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.createAndRunCheck(WebRTCCheck);
+ });
+ }
+ checkTURN() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.createAndRunCheck(TURNCheck);
+ });
+ }
+ checkReconnect() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.createAndRunCheck(ReconnectCheck);
+ });
+ }
+ checkPublishAudio() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.createAndRunCheck(PublishAudioCheck);
+ });
+ }
+ checkPublishVideo() {
+ return __awaiter(this, void 0, void 0, function* () {
+ return this.createAndRunCheck(PublishVideoCheck);
+ });
+ }
+}
+
+
+//# sourceMappingURL=livekit-client.esm.mjs.map
+
+
/***/ })
/******/ });
@@ -44759,7 +46581,7 @@ const unwrap = (value) => reverseTransformCache.get(value);
/******/ }
/******/ };
/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId);
-/******/ } else installedChunks[chunkId] = 0;
+/******/ }
/******/ }
/******/ }
/******/ };
diff --git a/umd/index.dev.js.map b/umd/index.dev.js.map
index c4197677..c5291462 100644
--- a/umd/index.dev.js.map
+++ b/umd/index.dev.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.dev.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8BAA8B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAM;AACrB,eAAe,qBAAM;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA,wCAAwC,MAAM;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,wEAAwE,KAAK;;AAEhI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,qBAAM;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,MAAM;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAa,GAAG,KAAK;AACjD;AACA;AACA;AACA,+BAA+B,iBAAiB,IAAI,SAAS,GAAG,SAAS;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,IAAI;AACvD,KAAK;AACL;AACA,mBAAmB,MAAM,IAAI;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,GAAG;AACf;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,yBAAyB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,SAAS;AAClD;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ,UAAU,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,EAAE;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAE49B;AAC59B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/jE+C;AAGxC,MAAMC,QAAQ,GAAG,YAAY,IAAID,wDAAe,IAAI,MAAM,CAAC;AAG3D,MAAME,OAAO,GAAG,kCAAkC;AAGlD,MAAMC,WAAW,GAAG;EAACC,MAAM,EAAE,eAAe;EAAEC,KAAK,EAAE;AAAgB,CAAC;AAGtE,MAAMC,YAAY,GAAGH,WAAW,CAACC,MAAM;AAGvC,MAAMG,eAAe,GAAG,IAAI;AAG5B,MAAMC,cAAc,GAAG,KAAK;AAE5B,MAAMC,UAAU,GAAG,KAAK;AAGxB,MAAMC,cAAc,GAAG,CAAC;AAExB,MAAMC,cAAc,GAAG,EAAE;AAEzB,MAAMC,aAAa,GAAG,EAAE;AAGxB,MAAMC,uBAAuB,GAAG,OAAO;AAEvC,MAAMC,mBAAmB,GAAG,SAAS;AAErC,MAAMC,mBAAmB,GAAG,IAAI;AAGhC,MAAMC,cAAc,GAAG,GAAG;AAI1B,MAAMC,gBAAgB,GAAG,GAAG;AAE5B,MAAMC,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CA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA,wFAAwF;AACxF,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA,wEAAwE;AACxE,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4sCAA4sC;AAC5sC,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA,wBAAwB;;AAExB;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,WAAW,sBAAsB,+CAA+C;AAChF,WAAW,UAAU;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,sBAAsB,+CAA+C;AAChF,WAAW,UAAU;AACrB,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,SAAS;AACpB,aAAa;AACb;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,gEAAgE,kBAAkB;AAClF,aAAa;AACb;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2EAA2E,kBAAkB;AAC7F;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,iFAAiF,qBAAqB;AACtG;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;;AAEA;AACA,iFAAiF,qBAAqB;AACtG;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,iFAAiF,oBAAoB;AACrG;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,0FAA0F,2BAA2B;AACrH;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;;AAEA;AACA,0FAA0F,2BAA2B;AACrH;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,oFAAoF,uBAAuB;AAC3G;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,6FAA6F,8BAA8B;AAC3H;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;;AAEA;AACA,6FAA6F,8BAA8B;AAC3H;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yEAAyE,mBAAmB;AAC5F;AACA,WAAW,qBAAqB;AAChC,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD,kBAAkB;AACrE;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,+EAA+E,oBAAoB;AACnG;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE,IAAI;;AAEJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4EAA4E,oBAAoB;AAChG;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE;AACpE,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oEAAoE,kBAAkB;AACtF;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gEAAgE,kBAAkB;AAClF;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;;AAEA;AACA,gEAAgE,kBAAkB;AAClF;AACA,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,qDAAqD,6BAA6B;AAClF;AACA,WAAW;AACX,aAAa;AACb;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,sDAAsD,8BAA8B;AACpF;AACA,WAAW;AACX,aAAa;AACb;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA,yCAAyC,6HAA6H;AACtK;;AAEA;AACA,6FAA6F,qBAAqB;AAClH;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA,yCAAyC,8HAA8H;AACvK;;AAEA;AACA,6GAA6G,sBAAsB;AACnI;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wGAAwG,8BAA8B;AACtI;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA,wGAAwG,8BAA8B;AACtI;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,sBAAsB;AACnH;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,UAAU;AACV,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8FAA8F,uBAAuB;AACrH;AACA,WAAW,cAAc;AACzB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,UAAU;AACrB,UAAU;AACV,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,UAAU;AACrB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,UAAU;AACrB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,wBAAwB;AACzC,kBAAkB,qBAAqB;AACvC;;AAEA;;AAEA;;AAEA;;AAEA;AACA,wBAAwB,qBAAqB;AAC7C;AACA,UAAU;AACV,WAAW,YAAY;AACvB,WAAW,MAAM;AACjB,aAAa;AACb;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,GAAG;AACd,WAAW,MAAM;AACjB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,OAAO;;AAEzB;AACA;AACA,aAAa,YAAY;AACzB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,YAAY;AACzB,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,SAAS;AACxB;AACA;AACA,8BAA8B,EAAE,mBAAmB,EAAE,iBAAiB,EAAE;AACxE;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,mBAAmB;AAChC;AACA;AACA,8CAA8C;AAC9C,oDAAoD;AACpD;AACA,sBAAsB,qBAAqB,qDAAqD;AAChG;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,gBAAgB,qBAAqB;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG,IAAI;AACP;AACA;AACA;AACA,qGAAqG,qDAAqD;AAC1J;AACA,6DAA6D;AAC7D;AACA,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG,IAAI;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA,yBAAyB;AACzB;AACA,IAAI,aAAa;AACjB;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA,4BAA4B,4BAA4B;AACxD;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,aAAa,YAAY;AACzB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kCAAkC,+EAA+E;AACjH;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,YAAY;AACzB,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA,4BAA4B,gBAAgB;AAC5C;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;;AAEA;AACA,wBAAwB,gBAAgB;AACxC;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,oBAAoB;AACjC,eAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,qJAAqJ;;AAErJ;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,wFAAwF;;AAExF;AACA;AACA,cAAc;AACd;AACA;AACA,uDAAuD,kCAAkC;;AAEzF;AACA;AACA;AACA,eAAe,GAAG;AAClB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,GAAG;AAClB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,GAAG;AAClB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,SAAS;AAC3B;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,sCAAsC,EAAE;;AAExC;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,mBAAmB;AAClC,eAAe,mBAAmB;AAClC,eAAe,SAAS;AACxB,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA,+CAA+C,iBAAiB;AAChE;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,qDAAqD;AACrD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,mBAAmB;AAClC;AACA;AACA,yCAAyC;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;;AAEA;AACA,sCAAsC,uBAAuB;AAC7D;AACA,cAAc;AACd,iBAAiB,kBAAkB;AACnC;;AAEA;AACA;AACA,eAAe,UAAU;AACzB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA,sBAAsB,uBAAuB;;AAE7C;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA,gEAAgE,QAAQ;AACxE;AACA;;AAEA;AACA,sCAAsC,uBAAuB;AAC7D;AACA,cAAc;AACd,eAAe,kBAAkB;AACjC,iBAAiB;AACjB;;AAEA;AACA;AACA,eAAe,UAAU;AACzB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,mBAAmB;AACnB;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;;AAEA;AACA,4CAA4C,sBAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA,kBAAkB;AAClB;;AAEA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,qBAAqB,GAAG,oBAAoB,yCAAyC;AAClG;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,kBAAkB,gBAAgB;AAClC;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,0BAA0B,IAAI,4BAA4B;AACtE,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,wCAAwC,qBAAqB,eAAe;AAC5E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,gDAAgD;AACrF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;;AAEA;AACA;AACA,oBAAoB;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,qBAAqB,GAAG,oBAAoB,sCAAsC;AAC/F,YAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA,IAAI;AACJ,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,yCAAyC,sCAAsC;AAC/E;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA,UAAU;AACV,WAAW,YAAY;AACvB,WAAW,MAAM;AACjB,aAAa;AACb;;AAEA;AACA,+BAA+B,mBAAmB,eAAe,qBAAqB;AACtF;AACA;AACA;AACA,UAAU;AACV,WAAW,uBAAuB;AAClC,WAAW,iCAAiC;AAC5C,aAAa,wBAAwB;AACrC;;AAEA;AACA;AACA,6CAA6C,qBAAqB;AAClE;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA,mCAAmC,kCAAkC;AACrE,WAAW,qCAAqC;AAChD,WAAW,mBAAmB;AAC9B,WAAW,mBAAmB;AAC9B,WAAW,uBAAuB;AAClC,WAAW,iCAAiC;AAC5C,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,sBAAsB;AACzD;AACA,YAAY;AACZ,aAAa,mCAAmC,YAAY,IAAI;AAChE,aAAa,YAAY;AACzB,aAAa,iBAAiB;AAC9B,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,qCAAqC,cAAc;AACnD;AACA,YAAY;AACZ,aAAa,YAAY;AACzB,aAAa,iBAAiB;AAC9B,eAAe;AACf;;AAEA;AACA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gDAAgD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,0EAA0E;AAC1E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,yEAAyE;AACzE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,yFAAyF;AACzF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,mFAAmF;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,sFAAsF;AACtF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,6EAA6E;AAC7E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,8EAA8E;AAC9E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,8EAA8E;AAC9E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,uFAAuF;AACvF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,+EAA+E;AAC/E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,8EAA8E;AAC9E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,qFAAqF;AACrF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,8EAA8E;AAC9E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,8EAA8E;AAC9E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,uFAAuF;AACvF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,sFAAsF;AACtF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,kFAAkF;AAClF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+FAA+F,QAAQ;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG,IAAI;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,KAAK;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,aAAa;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gCAAgC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,iBAAiB,oBAAoB;AACrC,kBAAkB,iBAAiB;AACnC;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB;AACtB,6BAA6B;AAC7B;AACA;AACA;AACA,6DAA6D;AAC7D,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP,mDAAmD;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,mBAAmB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,iFAAiF;AACjF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,kFAAkF;AAClF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,kFAAkF;AAClF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,mFAAmF;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,kFAAkF;AAClF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,oFAAoF;AACpF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,gFAAgF;AAChF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,qFAAqF;AACrF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,0FAA0F;AAC1F,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,4FAA4F;AAC5F,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,sFAAsF;AACtF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,qFAAqF;AACrF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,sFAAsF;AACtF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,uFAAuF;AACvF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,gFAAgF;AAChF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,qFAAqF;AACrF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,6FAA6F;AAC7F,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,6EAA6E;AAC7E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,mFAAmF;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,8EAA8E;AAC9E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,yFAAyF;AACzF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,2FAA2F;AAC3F,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,mFAAmF;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,qFAAqF;AACrF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,qFAAqF;AACrF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,mFAAmF;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,2FAA2F;AAC3F,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,mFAAmF;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA,0FAA0F;AAC1F,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,gGAAgG;AAChG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,6EAA6E;AAC7E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,mFAAmF;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,oFAAoF;AACpF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wEAAwE;AACxE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wEAAwE;AACxE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gDAAgD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gDAAgD;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,yBAAyB;AAC1C,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,kBAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,IAAI;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,IAAI;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,gBAAgB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,GAAG;AACxF;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,+CAA+C;AAC/C,yDAAyD;AACzD;AACA;AACA;AACA;AACA,4BAA4B,IAAI,iEAAiE;AACjG,gEAAgE;AAChE,wDAAwD,0CAA0C;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA4C,IAAI,WAAW,IAAI;AAC/D;AACA,+BAA+B;AAC/B,8DAA8D,SAAS;AACvE;AACA,iEAAiE,qEAAqE;AACtI;AACA,kDAAkD,EAAE,0FAA0F,uBAAuB,IAAI;AACzK;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kCAAkC,EAAE;AAC7C;AACA,4CAA4C,EAAE,iBAAiB;AAC/D;AACA,oBAAoB,EAAE,UAAU;AAChC;AACA,8IAA8I,IAAI,4FAA4F,IAAI;AAClP;AACA,0BAA0B,EAAE,gBAAgB,EAAE,GAAG,aAAa,IAAI,8GAA8G;AAChL;AACA,4EAA4E,EAAE,WAAW,EAAE;AAC3F;AACA;AACA;AACA;AACA,+DAA+D,eAAe,IAAI;AAClF;AACA;AACA,0BAA0B,EAAE,WAAW,EAAE,yDAAyD,IAAI;AACtG;AACA;AACA;AACA,gCAAgC,EAAE;AAClC;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B,qFAAqF;AACrF;AACA;AACA,oCAAoC,MAAM;AAC1C;AACA;AACA,6DAA6D,IAAI,IAAI;AACrE;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,gBAAgB,kCAAkC,GAAG;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,IAAI;AAChC;AACA,0BAA0B,EAAE;AAC5B;AACA,0BAA0B,IAAI;AAC9B;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA,mEAAmE,IAAI;AACvE;AACA;AACA,wEAAwE,EAAE;AAC1E,6DAA6D,EAAE;AAC/D,8DAA8D,EAAE;AAChE,gEAAgE,EAAE;AAClE;AACA,gEAAgE,EAAE,oCAAoC,EAAE;AACxG,wEAAwE,IAAI;AAC5E,4EAA4E,IAAI;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,EAAE;AAC5D,gFAAgF;AAChF,8DAA8D;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD;AACtD;AACA,0EAA0E,WAAW;AACrF;AACA;AACA;AACA;;AAEA;AACA,mDAAmD,iFAAiF;AACpI;AACA;AACA;AACA,gEAAgE;AAChE;AACA,8DAA8D,EAAE;AAChE;AACA;AACA,uCAAuC,OAAO,IAAI,IAAI;AACtD,qGAAqG;AACrG;AACA;AACA;AACA;;AAEA;AACA,uDAAuD;AACvD,iEAAiE,QAAQ,IAAI;AAC7E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,IAAI;AACtB,+CAA+C,IAAI;AACnD,qDAAqD;AACrD,+CAA+C;AAC/C,8CAA8C,IAAI,EAAE;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA,kBAAkB,IAAI,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,qCAAqC;AACrC,uEAAuE;AACvE,wFAAwF,SAAS;AACjG,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI,mCAAmC,IAAI;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;;AAEA;;AAEA;AACA;;AAEA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB,aAAa,QAAQ;AACrB,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB,aAAa,QAAQ;AACrB,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA;AACA,cAAc,YAAY;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,uBAAuB;AACxC,kBAAkB,oBAAoB;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA,4EAA4E;;AAE5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE;AACtE;AACA;AACA;AACA,IAAI;AACJ;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,wEAAwE;AACxE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,mCAAmC,QAAQ;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,uCAAuC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,6CAA6C;AAChD;AACA;AACA;AACA;AACA;AACA,GAAG,8DAA8D;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sBAAsB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,mCAAmC,wBAAwB;AAC3D;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,oEAAoE;AAC9H;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,kFAAkF;AACrF;AACA;AACA;AACA,GAAG,8EAA8E;AACjF,CAAC,4CAA4C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,oBAAoB;AACpB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,2FAA2F,aAAa;AACxG;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,oEAAoE;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,UAAU,aAAa;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,mBAAmB;AAClG;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,iBAAiB,wBAAwB;AACzC,kBAAkB,qBAAqB;AACvC;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,sCAAsC,UAAU;AAChD,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,mCAAmC,eAAe,WAAW;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,8BAA8B,aAAa;AAC3C,0BAA0B,WAAW;AACrC;AACA;AACA;AACA;AACA,kBAAkB;AAClB,kCAAkC;AAClC,sBAAsB;AACtB,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,+BAA+B;AAC/B,+BAA+B,EAAE;AACjC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,oCAAoC;AACpC;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4CAA4C;AAC5C;;AAEA,sBAAsB,kCAAkC;AACxD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,uBAAuB,6BAA6B;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kFAAkF;AAClF,KAAK;AACL;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,eAAe;AACf;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD,wEAAwE;AACxE,wEAAwE;AACxE,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,aAAa;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,oBAAoB,kCAAkC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+FAA+F,eAAe;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,QAAQ,aAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEkhC;AAClhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvosBoE;AACuB;AACkF;AAC9H;AAClB;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gBAAgB,GAAG,gBAAgB;AAC7D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oDAAM;;AAEzB;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,sCAAsC,SAAS;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,cAAc;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,SAAS;AAClE;AACA,uEAAuE,SAAS;AAChF,0EAA0E,SAAS;AACnF,sEAAsE,SAAS;AAC/E;AACA,6EAA6E,SAAS;AACtF;AACA;AACA,iGAAiG,sBAAsB;AACvH,oGAAoG,sBAAsB;AAC1H,oGAAoG,sBAAsB;AAC1H,2GAA2G,sBAAsB;AACjI;AACA,0BAA0B,wDAAY;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,uCAAuC;AACvC;AACA;AACA;AACA;AACA,wCAAwC,0DAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,qBAAqB;AACxG;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA,sBAAsB;AACtB;AACA,mCAAmC,iEAAiE;AACpG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,0BAA0B,mEAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yDAAS;AACrB,YAAY,yDAAS;AACrB;AACA;AACA;AACA,uFAAuF,eAAe;AACtG;AACA;AACA,0BAA0B,mEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,eAAe;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,kBAAkB,QAAQ;AAC7E;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA,2BAA2B,0DAAS,IAAI,QAAQ,oBAAoB,kBAAkB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mEAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAa;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2CAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS,GAAG,kBAAkB;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,aAAa;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kCAAkC;AAClD,6BAA6B,6EAA6B,kBAAkB,0CAA0C;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,oEAAoB;AACjC;AACA;AACA;AACA,mBAAmB,yEAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,6EAA6B;AACxC;AACA,qBAAqB,yCAAyC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAS;AACpC,2BAA2B,0DAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAE2R;AAC3R;;;;;;;;;;;;;;;;;;ACp6B0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oDAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,WAAW;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,gBAAgB,eAAe,UAAU;AAC1F;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,wCAAwC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,gBAAgB,eAAe;AAC/B;AACA;AACA,2BAA2B,UAAU,GAAG,qBAAqB;AAC7D;AACA;AACA,qCAAqC,WAAW;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kCAAkC;AAC/D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gBAAgB,mCAAmC,UAAU;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEmD;AACnD;;;;;;;;;;;;;;;;;;;;;;;ACxZ0F;AAC1C;AACa;AAChC;;AAE7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA,gDAAgD;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,WAAW;AAC5H;AACA;AACA,yDAAyD,cAAc,4BAA4B,cAAc,cAAc,GAAG,eAAe;AACjJ;AACA;AACA;AACA,0BAA0B,wDAAY;AACtC;AACA;AACA,6BAA6B,yDAAa;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,WAAW;AAC/C,cAAc,sBAAsB,YAAY,UAAU;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,yCAAyC,cAAc;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,uBAAuB,EAAE,aAAa;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,qCAAqC,IAAI,KAAK;AACzF;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kBAAkB,GAAG,gBAAgB;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2CAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,qCAAqC;AAC/E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,KAAK;AACxD,cAAc,oCAAoC,GAAG,IAAI;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,eAAe,aAAa,oDAAoD;AACjI;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,uEAAuE,wBAAwB,WAAW;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,wBAAwB,aAAa,oDAAoD;AACpK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,eAAe,gCAAgC;AACxF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yCAAyC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,KAAK;AAC7C,cAAc,oCAAoC,GAAG,IAAI;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD,IAAI,iCAAiC;AACrC,qBAAqB,iCAAiC;AACtD;AACA;AACA;AACA,gCAAgC,qDAAM;AACtC,8BAA8B,2DAAY;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,2DAAY;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iEAAkB,KAAK,0DAAS;AACpC,IAAI,iEAAkB,KAAK,0DAAS;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8DAAe;AACf;AACA,8DAAe;;AAE+D;AAC9E;;;;;;;;;;;;;;;;;;ACjoCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,IAAI,KAAK,cAAc;AACnD;AACA;AACA,sFAAsF,QAAQ;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,IAAI;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAE4D;AAC5D;;;;;;;;;;;;;;;;;;;;;;;;AC1NiC;AACe;AACT;AAC+F;AAC5C;;AAE1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;;AAEvC;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,2CAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,6CAAQ;AAClB,UAAU,6CAAQ;AAClB,UAAU,6CAAQ;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2CAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,WAAW;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,WAAW;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA,gJAAgJ,qBAAqB;AACrK,+HAA+H,WAAW;AAC1I;AACA;AACA,yBAAyB,WAAW;AACpC,wHAAwH,WAAW;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wDAAY;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4CAA4C,GAAG,mBAAmB;AAC1G;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4CAA4C,GAAG,MAAM;AAC7F;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uBAAuB,WAAW;AAClC,cAAc,SAAS,YAAY,UAAU;AAC7C;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA,qDAAqD,UAAU;AAC/D,KAAK;AACL;AACA,mBAAmB,kCAAkC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,mBAAmB,6CAA6C;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iEAAkB,KAAK,0DAAS;AACpC,IAAI,iEAAkB,KAAK,0DAAS;AACpC,IAAI,8DAAe;AACnB;AACA,IAAI,8DAAe;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yEAAyB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oEAAoB;AAC5B,QAAQ,iEAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qDAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,WAAW,2DAAY,CAAC,kEAAkB;AAC1C;AACA;AACA,mBAAmB,iBAAiB;AACpC,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kEAAkB;AAClC;AACA;AACA;AACA,wDAAwD,iBAAiB;AACzE,QAAQ,iBAAiB;AACzB;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kEAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kEAAkB;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEoH;AACpH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjtCgD;AAClB;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAAe;AACf;;;;;;;;;;;;;;;;;;;;ACvBoC;AACpC;;;;;;;;;;;;;;;;;;;ACDmE;AACN;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAyC,IAAI;AAC9E;AACA,wBAAwB,qDAAI;AAC5B;AACA;AACA,oBAAoB,qDAAI,sDAAsD,qDAAI;AAClF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,UAAU,IAAI;AACxC;AACA;AACA;AACA,WAAW,qDAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAY;AACZ;AACA;AACA;AACA,CAAC;;AAE2B;;;;;;;;;;;;;;;;;;;ACvF5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEqG;;;;;;;UCxLrG;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WCzBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sDAAsD;WACtD,sCAAsC,iEAAiE;WACvG;WACA;WACA;WACA;WACA;WACA;;;;;WCzBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;;;;;WCRA;WACA;WACA;WACA;WACA;;;;;WCJA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA;WACA,uBAAuB,4BAA4B;WACnD;WACA;WACA;WACA,iBAAiB,oBAAoB;WACrC;WACA,mGAAmG,YAAY;WAC/G;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,mEAAmE,iCAAiC;WACpG;WACA;WACA;WACA;;;;;WCxCA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;;;;;WCAA;;WAEA;WACA;WACA;WACA;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","sources":["webpack://tinode-webapp/./node_modules/@firebase/util/dist/index.esm2017.js","webpack://tinode-webapp/./src/config.js","webpack://tinode-webapp/./src/constants.js","webpack://tinode-webapp/./src/lib/blob-helpers.js","webpack://tinode-webapp/./src/lib/formatters.js","webpack://tinode-webapp/./src/lib/host-name.js","webpack://tinode-webapp/./src/lib/local-storage.js","webpack://tinode-webapp/./src/lib/navigation.js","webpack://tinode-webapp/./src/lib/strformat.js","webpack://tinode-webapp/./src/lib/utils.js","webpack://tinode-webapp/./src/version.js","webpack://tinode-webapp/./src/views/acc-notifications-view.jsx","webpack://tinode-webapp/./src/views/acc-security-view.jsx","webpack://tinode-webapp/./src/views/acc-support-view.jsx","webpack://tinode-webapp/./src/views/contacts-view.jsx","webpack://tinode-webapp/./src/views/info-view.jsx","webpack://tinode-webapp/./src/views/login-view.jsx","webpack://tinode-webapp/./src/views/logo-view.jsx","webpack://tinode-webapp/./src/views/messages-view.jsx","webpack://tinode-webapp/./src/views/new-topic-view.jsx","webpack://tinode-webapp/./src/views/settings-view.jsx","webpack://tinode-webapp/./src/views/sidepanel-view.jsx","webpack://tinode-webapp/./src/views/tinode-web.jsx","webpack://tinode-webapp/./src/views/topic-common-view.jsx","webpack://tinode-webapp/./src/views/validation-view.jsx","webpack://tinode-webapp/./src/widgets/alert.jsx","webpack://tinode-webapp/./src/widgets/attachment.jsx","webpack://tinode-webapp/./src/widgets/audio-player.jsx","webpack://tinode-webapp/./src/widgets/avatar-crop.jsx","webpack://tinode-webapp/./src/widgets/avatar-upload.jsx","webpack://tinode-webapp/./src/widgets/badge-list.jsx","webpack://tinode-webapp/./src/widgets/button-back.jsx","webpack://tinode-webapp/./src/widgets/call-incoming.jsx","webpack://tinode-webapp/./src/widgets/call-message.jsx","webpack://tinode-webapp/./src/widgets/call-panel.jsx","webpack://tinode-webapp/./src/widgets/call-status.jsx","webpack://tinode-webapp/./src/widgets/chat-message.jsx","webpack://tinode-webapp/./src/widgets/checkbox.jsx","webpack://tinode-webapp/./src/widgets/chip-input.jsx","webpack://tinode-webapp/./src/widgets/chip.jsx","webpack://tinode-webapp/./src/widgets/contact-action.jsx","webpack://tinode-webapp/./src/widgets/contact-badges.jsx","webpack://tinode-webapp/./src/widgets/contact-list.jsx","webpack://tinode-webapp/./src/widgets/contact.jsx","webpack://tinode-webapp/./src/widgets/context-menu.jsx","webpack://tinode-webapp/./src/widgets/cropper.jsx","webpack://tinode-webapp/./src/widgets/doc-preview.jsx","webpack://tinode-webapp/./src/widgets/error-panel.jsx","webpack://tinode-webapp/./src/widgets/file-progress.jsx","webpack://tinode-webapp/./src/widgets/forward-dialog.jsx","webpack://tinode-webapp/./src/widgets/group-manager.jsx","webpack://tinode-webapp/./src/widgets/group-subs.jsx","webpack://tinode-webapp/./src/widgets/host-selector.jsx","webpack://tinode-webapp/./src/widgets/image-preview.jsx","webpack://tinode-webapp/./src/widgets/in-place-edit.jsx","webpack://tinode-webapp/./src/widgets/inline-video.jsx","webpack://tinode-webapp/./src/widgets/invitation.jsx","webpack://tinode-webapp/./src/widgets/lazy-image.jsx","webpack://tinode-webapp/./src/widgets/letter-tile.jsx","webpack://tinode-webapp/./src/widgets/load-spinner.jsx","webpack://tinode-webapp/./src/widgets/menu-cancel.jsx","webpack://tinode-webapp/./src/widgets/menu-contacts.jsx","webpack://tinode-webapp/./src/widgets/menu-start.jsx","webpack://tinode-webapp/./src/widgets/meta-message.jsx","webpack://tinode-webapp/./src/widgets/new-topic-by-id.jsx","webpack://tinode-webapp/./src/widgets/new-topic-group.jsx","webpack://tinode-webapp/./src/widgets/permissions-editor.jsx","webpack://tinode-webapp/./src/widgets/pinned-messages.jsx","webpack://tinode-webapp/./src/widgets/received-marker.jsx","webpack://tinode-webapp/./src/widgets/search-contacts.jsx","webpack://tinode-webapp/./src/widgets/send-message.jsx","webpack://tinode-webapp/./src/widgets/side-navbar.jsx","webpack://tinode-webapp/./src/widgets/tag-manager.jsx","webpack://tinode-webapp/./src/widgets/topic-desc-edit.jsx","webpack://tinode-webapp/./src/widgets/topic-security.jsx","webpack://tinode-webapp/./src/widgets/unread-badge.jsx","webpack://tinode-webapp/./src/widgets/uploading-image.jsx","webpack://tinode-webapp/./src/widgets/vc-carousel-item.jsx","webpack://tinode-webapp/./src/widgets/vc-carousel.jsx","webpack://tinode-webapp/./src/widgets/vc-panel.jsx","webpack://tinode-webapp/./src/widgets/video-preview.jsx","webpack://tinode-webapp/./src/widgets/visible-password.jsx","webpack://tinode-webapp/./node_modules/react-dom/client.js","webpack://tinode-webapp/external var \"React\"","webpack://tinode-webapp/external var \"ReactDOM\"","webpack://tinode-webapp/external var \"ReactIntl\"","webpack://tinode-webapp/external var \"tinode\"","webpack://tinode-webapp/../../../go/src/github.com/livekit/client-sdk-js/dist/livekit-client.esm.mjs","webpack://tinode-webapp/./node_modules/@firebase/app/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/component/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/installations/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/logger/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/messaging/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/firebase/app/dist/esm/index.esm.js","webpack://tinode-webapp/./node_modules/firebase/messaging/dist/esm/index.esm.js","webpack://tinode-webapp/./node_modules/idb/build/index.js","webpack://tinode-webapp/./node_modules/idb/build/wrap-idb-value.js","webpack://tinode-webapp/webpack/bootstrap","webpack://tinode-webapp/webpack/runtime/compat get default export","webpack://tinode-webapp/webpack/runtime/create fake namespace object","webpack://tinode-webapp/webpack/runtime/define property getters","webpack://tinode-webapp/webpack/runtime/ensure chunk","webpack://tinode-webapp/webpack/runtime/get javascript chunk filename","webpack://tinode-webapp/webpack/runtime/global","webpack://tinode-webapp/webpack/runtime/hasOwnProperty shorthand","webpack://tinode-webapp/webpack/runtime/load script","webpack://tinode-webapp/webpack/runtime/make namespace object","webpack://tinode-webapp/webpack/runtime/publicPath","webpack://tinode-webapp/webpack/runtime/jsonp chunk loading","webpack://tinode-webapp/./src/index.js"],"sourcesContent":["/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\r\n */\r\nconst CONSTANTS = {\r\n /**\r\n * @define {boolean} Whether this is the client Node.js SDK.\r\n */\r\n NODE_CLIENT: false,\r\n /**\r\n * @define {boolean} Whether this is the Admin Node.js SDK.\r\n */\r\n NODE_ADMIN: false,\r\n /**\r\n * Firebase SDK Version\r\n */\r\n SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws an error if the provided assertion is falsy\r\n */\r\nconst assert = function (assertion, message) {\r\n if (!assertion) {\r\n throw assertionError(message);\r\n }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n */\r\nconst assertionError = function (message) {\r\n return new Error('Firebase Database (' +\r\n CONSTANTS.SDK_VERSION +\r\n ') INTERNAL ASSERT FAILED: ' +\r\n message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst stringToByteArray$1 = function (str) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if ((c & 0xfc00) === 0xd800 &&\r\n i + 1 < str.length &&\r\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\r\n // Surrogate Pair\r\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param bytes Array of numbers representing characters.\r\n * @return Stringification of the array.\r\n */\r\nconst byteArrayToString = function (bytes) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let pos = 0, c = 0;\r\n while (pos < bytes.length) {\r\n const c1 = bytes[pos++];\r\n if (c1 < 128) {\r\n out[c++] = String.fromCharCode(c1);\r\n }\r\n else if (c1 > 191 && c1 < 224) {\r\n const c2 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n }\r\n else if (c1 > 239 && c1 < 365) {\r\n // Surrogate Pair\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n const c4 = bytes[pos++];\r\n const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n 0x10000;\r\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n }\r\n else {\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n }\r\n }\r\n return out.join('');\r\n};\r\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\r\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\r\n// Static lookup maps, lazily populated by init_()\r\nconst base64 = {\r\n /**\r\n * Maps bytes to characters.\r\n */\r\n byteToCharMap_: null,\r\n /**\r\n * Maps characters to bytes.\r\n */\r\n charToByteMap_: null,\r\n /**\r\n * Maps bytes to websafe characters.\r\n * @private\r\n */\r\n byteToCharMapWebSafe_: null,\r\n /**\r\n * Maps websafe characters to bytes.\r\n * @private\r\n */\r\n charToByteMapWebSafe_: null,\r\n /**\r\n * Our default alphabet, shared between\r\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n */\r\n ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n /**\r\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n */\r\n get ENCODED_VALS() {\r\n return this.ENCODED_VALS_BASE + '+/=';\r\n },\r\n /**\r\n * Our websafe alphabet.\r\n */\r\n get ENCODED_VALS_WEBSAFE() {\r\n return this.ENCODED_VALS_BASE + '-_.';\r\n },\r\n /**\r\n * Whether this browser supports the atob and btoa functions. This extension\r\n * started at Mozilla but is now implemented by many browsers. We use the\r\n * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n * but still allowing the standard per-browser compilations.\r\n *\r\n */\r\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n /**\r\n * Base64-encode an array of bytes.\r\n *\r\n * @param input An array of bytes (numbers with\r\n * value in [0, 255]) to encode.\r\n * @param webSafe Boolean indicating we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeByteArray(input, webSafe) {\r\n if (!Array.isArray(input)) {\r\n throw Error('encodeByteArray takes an array as a parameter');\r\n }\r\n this.init_();\r\n const byteToCharMap = webSafe\r\n ? this.byteToCharMapWebSafe_\r\n : this.byteToCharMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length; i += 3) {\r\n const byte1 = input[i];\r\n const haveByte2 = i + 1 < input.length;\r\n const byte2 = haveByte2 ? input[i + 1] : 0;\r\n const haveByte3 = i + 2 < input.length;\r\n const byte3 = haveByte3 ? input[i + 2] : 0;\r\n const outByte1 = byte1 >> 2;\r\n const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n let outByte4 = byte3 & 0x3f;\r\n if (!haveByte3) {\r\n outByte4 = 64;\r\n if (!haveByte2) {\r\n outByte3 = 64;\r\n }\r\n }\r\n output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n }\r\n return output.join('');\r\n },\r\n /**\r\n * Base64-encode a string.\r\n *\r\n * @param input A string to encode.\r\n * @param webSafe If true, we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return btoa(input);\r\n }\r\n return this.encodeByteArray(stringToByteArray$1(input), webSafe);\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * @param input to decode.\r\n * @param webSafe True if we should use the\r\n * alternative alphabet.\r\n * @return string representing the decoded value.\r\n */\r\n decodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return atob(input);\r\n }\r\n return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * In base-64 decoding, groups of four characters are converted into three\r\n * bytes. If the encoder did not apply padding, the input length may not\r\n * be a multiple of 4.\r\n *\r\n * In this case, the last group will have fewer than 4 characters, and\r\n * padding will be inferred. If the group has one or two characters, it decodes\r\n * to one byte. If the group has three characters, it decodes to two bytes.\r\n *\r\n * @param input Input to decode.\r\n * @param webSafe True if we should use the web-safe alphabet.\r\n * @return bytes representing the decoded value.\r\n */\r\n decodeStringToByteArray(input, webSafe) {\r\n this.init_();\r\n const charToByteMap = webSafe\r\n ? this.charToByteMapWebSafe_\r\n : this.charToByteMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length;) {\r\n const byte1 = charToByteMap[input.charAt(i++)];\r\n const haveByte2 = i < input.length;\r\n const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n ++i;\r\n const haveByte3 = i < input.length;\r\n const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n const haveByte4 = i < input.length;\r\n const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n throw new DecodeBase64StringError();\r\n }\r\n const outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n output.push(outByte1);\r\n if (byte3 !== 64) {\r\n const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n output.push(outByte2);\r\n if (byte4 !== 64) {\r\n const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n output.push(outByte3);\r\n }\r\n }\r\n }\r\n return output;\r\n },\r\n /**\r\n * Lazy static initialization function. Called before\r\n * accessing any of the static map variables.\r\n * @private\r\n */\r\n init_() {\r\n if (!this.byteToCharMap_) {\r\n this.byteToCharMap_ = {};\r\n this.charToByteMap_ = {};\r\n this.byteToCharMapWebSafe_ = {};\r\n this.charToByteMapWebSafe_ = {};\r\n // We want quick mappings back and forth, so we precompute two maps.\r\n for (let i = 0; i < this.ENCODED_VALS.length; i++) {\r\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n // Be forgiving when decoding and correctly decode both encodings.\r\n if (i >= this.ENCODED_VALS_BASE.length) {\r\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n/**\r\n * An error encountered while decoding base64 string.\r\n */\r\nclass DecodeBase64StringError extends Error {\r\n constructor() {\r\n super(...arguments);\r\n this.name = 'DecodeBase64StringError';\r\n }\r\n}\r\n/**\r\n * URL-safe base64 encoding\r\n */\r\nconst base64Encode = function (str) {\r\n const utf8Bytes = stringToByteArray$1(str);\r\n return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 encoding (without \".\" padding in the end).\r\n * e.g. Used in JSON Web Token (JWT) parts.\r\n */\r\nconst base64urlEncodeWithoutPadding = function (str) {\r\n // Use base64url encoding and remove padding in the end (dot characters).\r\n return base64Encode(str).replace(/\\./g, '');\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param str To be decoded\r\n * @return Decoded result, if possible\r\n */\r\nconst base64Decode = function (str) {\r\n try {\r\n return base64.decodeString(str, true);\r\n }\r\n catch (e) {\r\n console.error('base64Decode failed: ', e);\r\n }\r\n return null;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays). Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n *\r\n * Note: we don't merge __proto__ to prevent prototype pollution\r\n */\r\nfunction deepExtend(target, source) {\r\n if (!(source instanceof Object)) {\r\n return source;\r\n }\r\n switch (source.constructor) {\r\n case Date:\r\n // Treat Dates like scalars; if the target date object had any child\r\n // properties - they will be lost!\r\n const dateValue = source;\r\n return new Date(dateValue.getTime());\r\n case Object:\r\n if (target === undefined) {\r\n target = {};\r\n }\r\n break;\r\n case Array:\r\n // Always copy the array source and overwrite the target.\r\n target = [];\r\n break;\r\n default:\r\n // Not a plain Object - treat it as a scalar.\r\n return source;\r\n }\r\n for (const prop in source) {\r\n // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\r\n if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\r\n continue;\r\n }\r\n target[prop] = deepExtend(target[prop], source[prop]);\r\n }\r\n return target;\r\n}\r\nfunction isValidKey(key) {\r\n return key !== '__proto__';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Polyfill for `globalThis` object.\r\n * @returns the `globalThis` object for the given environment.\r\n * @public\r\n */\r\nfunction getGlobal() {\r\n if (typeof self !== 'undefined') {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined') {\r\n return window;\r\n }\r\n if (typeof global !== 'undefined') {\r\n return global;\r\n }\r\n throw new Error('Unable to locate global object.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;\r\n/**\r\n * Attempt to read defaults from a JSON string provided to\r\n * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in\r\n * process(.)env(.)__FIREBASE_DEFAULTS_PATH__\r\n * The dots are in parens because certain compilers (Vite?) cannot\r\n * handle seeing that variable in comments.\r\n * See https://github.com/firebase/firebase-js-sdk/issues/6838\r\n */\r\nconst getDefaultsFromEnvVariable = () => {\r\n if (typeof process === 'undefined' || typeof process.env === 'undefined') {\r\n return;\r\n }\r\n const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\r\n if (defaultsJsonString) {\r\n return JSON.parse(defaultsJsonString);\r\n }\r\n};\r\nconst getDefaultsFromCookie = () => {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n let match;\r\n try {\r\n match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\r\n }\r\n catch (e) {\r\n // Some environments such as Angular Universal SSR have a\r\n // `document` object but error on accessing `document.cookie`.\r\n return;\r\n }\r\n const decoded = match && base64Decode(match[1]);\r\n return decoded && JSON.parse(decoded);\r\n};\r\n/**\r\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\r\n * (1) if such an object exists as a property of `globalThis`\r\n * (2) if such an object was provided on a shell environment variable\r\n * (3) if such an object exists in a cookie\r\n * @public\r\n */\r\nconst getDefaults = () => {\r\n try {\r\n return (getDefaultsFromGlobal() ||\r\n getDefaultsFromEnvVariable() ||\r\n getDefaultsFromCookie());\r\n }\r\n catch (e) {\r\n /**\r\n * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\r\n * to any environment case we have not accounted for. Log to\r\n * info instead of swallowing so we can find these unknown cases\r\n * and add paths for them if needed.\r\n */\r\n console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\r\n return;\r\n }\r\n};\r\n/**\r\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };\r\n/**\r\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHostnameAndPort = (productName) => {\r\n const host = getDefaultEmulatorHost(productName);\r\n if (!host) {\r\n return undefined;\r\n }\r\n const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\r\n if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\r\n throw new Error(`Invalid host ${host} with no separate hostname and port!`);\r\n }\r\n // eslint-disable-next-line no-restricted-globals\r\n const port = parseInt(host.substring(separatorIndex + 1), 10);\r\n if (host[0] === '[') {\r\n // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\r\n return [host.substring(1, separatorIndex - 1), port];\r\n }\r\n else {\r\n return [host.substring(0, separatorIndex), port];\r\n }\r\n};\r\n/**\r\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\r\n * @public\r\n */\r\nconst getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };\r\n/**\r\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\r\n * prefixed by \"_\")\r\n * @public\r\n */\r\nconst getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Deferred {\r\n constructor() {\r\n this.reject = () => { };\r\n this.resolve = () => { };\r\n this.promise = new Promise((resolve, reject) => {\r\n this.resolve = resolve;\r\n this.reject = reject;\r\n });\r\n }\r\n /**\r\n * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n */\r\n wrapCallback(callback) {\r\n return (error, value) => {\r\n if (error) {\r\n this.reject(error);\r\n }\r\n else {\r\n this.resolve(value);\r\n }\r\n if (typeof callback === 'function') {\r\n // Attaching noop handler just in case developer wasn't expecting\r\n // promises\r\n this.promise.catch(() => { });\r\n // Some of our callbacks don't expect a value and our own tests\r\n // assert that the parameter length is 1\r\n if (callback.length === 1) {\r\n callback(error);\r\n }\r\n else {\r\n callback(error, value);\r\n }\r\n }\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction createMockUserToken(token, projectId) {\r\n if (token.uid) {\r\n throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\r\n }\r\n // Unsecured JWTs use \"none\" as the algorithm.\r\n const header = {\r\n alg: 'none',\r\n type: 'JWT'\r\n };\r\n const project = projectId || 'demo-project';\r\n const iat = token.iat || 0;\r\n const sub = token.sub || token.user_id;\r\n if (!sub) {\r\n throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\r\n }\r\n const payload = Object.assign({ \r\n // Set all required fields to decent defaults\r\n iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\r\n sign_in_provider: 'custom',\r\n identities: {}\r\n } }, token);\r\n // Unsecured JWTs use the empty string as a signature.\r\n const signature = '';\r\n return [\r\n base64urlEncodeWithoutPadding(JSON.stringify(header)),\r\n base64urlEncodeWithoutPadding(JSON.stringify(payload)),\r\n signature\r\n ].join('.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return user agent string\r\n */\r\nfunction getUA() {\r\n if (typeof navigator !== 'undefined' &&\r\n typeof navigator['userAgent'] === 'string') {\r\n return navigator['userAgent'];\r\n }\r\n else {\r\n return '';\r\n }\r\n}\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\r\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\r\n * wait for a callback.\r\n */\r\nfunction isMobileCordova() {\r\n return (typeof window !== 'undefined' &&\r\n // @ts-ignore Setting up an broadly applicable index signature for Window\r\n // just to deal with this case would probably be a bad idea.\r\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n}\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return true if Node.js environment is detected or specified.\r\n */\r\n// Node detection logic from: https://github.com/iliakan/detect-node/\r\nfunction isNode() {\r\n var _a;\r\n const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;\r\n if (forceEnvironment === 'node') {\r\n return true;\r\n }\r\n else if (forceEnvironment === 'browser') {\r\n return false;\r\n }\r\n try {\r\n return (Object.prototype.toString.call(global.process) === '[object process]');\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Detect Browser Environment\r\n */\r\nfunction isBrowser() {\r\n return typeof self === 'object' && self.self === self;\r\n}\r\nfunction isBrowserExtension() {\r\n const runtime = typeof chrome === 'object'\r\n ? chrome.runtime\r\n : typeof browser === 'object'\r\n ? browser.runtime\r\n : undefined;\r\n return typeof runtime === 'object' && runtime.id !== undefined;\r\n}\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return true if ReactNative environment is detected.\r\n */\r\nfunction isReactNative() {\r\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n}\r\n/** Detects Electron apps. */\r\nfunction isElectron() {\r\n return getUA().indexOf('Electron/') >= 0;\r\n}\r\n/** Detects Internet Explorer. */\r\nfunction isIE() {\r\n const ua = getUA();\r\n return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\r\n}\r\n/** Detects Universal Windows Platform apps. */\r\nfunction isUWP() {\r\n return getUA().indexOf('MSAppHost/') >= 0;\r\n}\r\n/**\r\n * Detect whether the current SDK build is the Node version.\r\n *\r\n * @return true if it's the Node SDK build.\r\n */\r\nfunction isNodeSdk() {\r\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n}\r\n/** Returns true if we are running in Safari. */\r\nfunction isSafari() {\r\n return (!isNode() &&\r\n navigator.userAgent.includes('Safari') &&\r\n !navigator.userAgent.includes('Chrome'));\r\n}\r\n/**\r\n * This method checks if indexedDB is supported by current browser/service worker context\r\n * @return true if indexedDB is supported by current browser/service worker context\r\n */\r\nfunction isIndexedDBAvailable() {\r\n try {\r\n return typeof indexedDB === 'object';\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\r\n * if errors occur during the database open operation.\r\n *\r\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\r\n * private browsing)\r\n */\r\nfunction validateIndexedDBOpenable() {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n let preExist = true;\r\n const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\r\n const request = self.indexedDB.open(DB_CHECK_NAME);\r\n request.onsuccess = () => {\r\n request.result.close();\r\n // delete database only when it doesn't pre-exist\r\n if (!preExist) {\r\n self.indexedDB.deleteDatabase(DB_CHECK_NAME);\r\n }\r\n resolve(true);\r\n };\r\n request.onupgradeneeded = () => {\r\n preExist = false;\r\n };\r\n request.onerror = () => {\r\n var _a;\r\n reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\r\n };\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n });\r\n}\r\n/**\r\n *\r\n * This method checks whether cookie is enabled within current browser\r\n * @return true if cookie is enabled within current browser\r\n */\r\nfunction areCookiesEnabled() {\r\n if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\r\n return false;\r\n }\r\n return true;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Standardized Firebase Error.\r\n *\r\n * Usage:\r\n *\r\n * // Typescript string literals for type-safe codes\r\n * type Err =\r\n * 'unknown' |\r\n * 'object-not-found'\r\n * ;\r\n *\r\n * // Closure enum for type-safe error codes\r\n * // at-enum {string}\r\n * var Err = {\r\n * UNKNOWN: 'unknown',\r\n * OBJECT_NOT_FOUND: 'object-not-found',\r\n * }\r\n *\r\n * let errors: Map = {\r\n * 'generic-error': \"Unknown error\",\r\n * 'file-not-found': \"Could not find file: {$file}\",\r\n * };\r\n *\r\n * // Type-safe function - must pass a valid error code as param.\r\n * let error = new ErrorFactory('service', 'Service', errors);\r\n *\r\n * ...\r\n * throw error.create(Err.GENERIC);\r\n * ...\r\n * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\r\n * ...\r\n * // Service: Could not file file: foo.txt (service/file-not-found).\r\n *\r\n * catch (e) {\r\n * assert(e.message === \"Could not find file: foo.txt.\");\r\n * if ((e as FirebaseError)?.code === 'service/file-not-found') {\r\n * console.log(\"Could not read file: \" + e['file']);\r\n * }\r\n * }\r\n */\r\nconst ERROR_NAME = 'FirebaseError';\r\n// Based on code from:\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\r\nclass FirebaseError extends Error {\r\n constructor(\r\n /** The error code for this error. */\r\n code, message, \r\n /** Custom data for this error. */\r\n customData) {\r\n super(message);\r\n this.code = code;\r\n this.customData = customData;\r\n /** The custom name for all FirebaseErrors. */\r\n this.name = ERROR_NAME;\r\n // Fix For ES5\r\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n Object.setPrototypeOf(this, FirebaseError.prototype);\r\n // Maintains proper stack trace for where our error was thrown.\r\n // Only available on V8.\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ErrorFactory.prototype.create);\r\n }\r\n }\r\n}\r\nclass ErrorFactory {\r\n constructor(service, serviceName, errors) {\r\n this.service = service;\r\n this.serviceName = serviceName;\r\n this.errors = errors;\r\n }\r\n create(code, ...data) {\r\n const customData = data[0] || {};\r\n const fullCode = `${this.service}/${code}`;\r\n const template = this.errors[code];\r\n const message = template ? replaceTemplate(template, customData) : 'Error';\r\n // Service Name: Error message (service/code).\r\n const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\r\n const error = new FirebaseError(fullCode, fullMessage, customData);\r\n return error;\r\n }\r\n}\r\nfunction replaceTemplate(template, data) {\r\n return template.replace(PATTERN, (_, key) => {\r\n const value = data[key];\r\n return value != null ? String(value) : `<${key}?>`;\r\n });\r\n}\r\nconst PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n return JSON.stringify(data);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst decode = function (token) {\r\n let header = {}, claims = {}, data = {}, signature = '';\r\n try {\r\n const parts = token.split('.');\r\n header = jsonEval(base64Decode(parts[0]) || '');\r\n claims = jsonEval(base64Decode(parts[1]) || '');\r\n signature = parts[2];\r\n data = claims['d'] || {};\r\n delete claims['d'];\r\n }\r\n catch (e) { }\r\n return {\r\n header,\r\n claims,\r\n data,\r\n signature\r\n };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidTimestamp = function (token) {\r\n const claims = decode(token).claims;\r\n const now = Math.floor(new Date().getTime() / 1000);\r\n let validSince = 0, validUntil = 0;\r\n if (typeof claims === 'object') {\r\n if (claims.hasOwnProperty('nbf')) {\r\n validSince = claims['nbf'];\r\n }\r\n else if (claims.hasOwnProperty('iat')) {\r\n validSince = claims['iat'];\r\n }\r\n if (claims.hasOwnProperty('exp')) {\r\n validUntil = claims['exp'];\r\n }\r\n else {\r\n // token will expire after 24h by default\r\n validUntil = validSince + 86400;\r\n }\r\n }\r\n return (!!now &&\r\n !!validSince &&\r\n !!validUntil &&\r\n now >= validSince &&\r\n now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst issuedAtTime = function (token) {\r\n const claims = decode(token).claims;\r\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n return claims['iat'];\r\n }\r\n return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidFormat = function (token) {\r\n const decoded = decode(token), claims = decoded.claims;\r\n return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isAdmin = function (token) {\r\n const claims = decode(token).claims;\r\n return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction contains(obj, key) {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n}\r\nfunction safeGet(obj, key) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return obj[key];\r\n }\r\n else {\r\n return undefined;\r\n }\r\n}\r\nfunction isEmpty(obj) {\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction map(obj, fn, contextObj) {\r\n const res = {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n res[key] = fn.call(contextObj, obj[key], key, obj);\r\n }\r\n }\r\n return res;\r\n}\r\n/**\r\n * Deep equal two objects. Support Arrays and Objects.\r\n */\r\nfunction deepEqual(a, b) {\r\n if (a === b) {\r\n return true;\r\n }\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n for (const k of aKeys) {\r\n if (!bKeys.includes(k)) {\r\n return false;\r\n }\r\n const aProp = a[k];\r\n const bProp = b[k];\r\n if (isObject(aProp) && isObject(bProp)) {\r\n if (!deepEqual(aProp, bProp)) {\r\n return false;\r\n }\r\n }\r\n else if (aProp !== bProp) {\r\n return false;\r\n }\r\n }\r\n for (const k of bKeys) {\r\n if (!aKeys.includes(k)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isObject(thing) {\r\n return thing !== null && typeof thing === 'object';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Rejects if the given promise doesn't resolve in timeInMS milliseconds.\r\n * @internal\r\n */\r\nfunction promiseWithTimeout(promise, timeInMS = 2000) {\r\n const deferredPromise = new Deferred();\r\n setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);\r\n promise.then(deferredPromise.resolve, deferredPromise.reject);\r\n return deferredPromise.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\r\n * params object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n */\r\nfunction querystring(querystringParams) {\r\n const params = [];\r\n for (const [key, value] of Object.entries(querystringParams)) {\r\n if (Array.isArray(value)) {\r\n value.forEach(arrayVal => {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n });\r\n }\r\n else {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n }\r\n }\r\n return params.length ? '&' + params.join('&') : '';\r\n}\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\r\n * (e.g. {arg: 'val', arg2: 'val2'})\r\n */\r\nfunction querystringDecode(querystring) {\r\n const obj = {};\r\n const tokens = querystring.replace(/^\\?/, '').split('&');\r\n tokens.forEach(token => {\r\n if (token) {\r\n const [key, value] = token.split('=');\r\n obj[decodeURIComponent(key)] = decodeURIComponent(value);\r\n }\r\n });\r\n return obj;\r\n}\r\n/**\r\n * Extract the query string part of a URL, including the leading question mark (if present).\r\n */\r\nfunction extractQuerystring(url) {\r\n const queryStart = url.indexOf('?');\r\n if (!queryStart) {\r\n return '';\r\n }\r\n const fragmentStart = url.indexOf('#', queryStart);\r\n return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n * var sha1 = new sha1();\r\n * sha1.update(bytes);\r\n * var hash = sha1.digest();\r\n *\r\n * Performance:\r\n * Chrome 23: ~400 Mbit/s\r\n * Firefox 16: ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @final\r\n * @struct\r\n */\r\nclass Sha1 {\r\n constructor() {\r\n /**\r\n * Holds the previous values of accumulated variables a-e in the compress_\r\n * function.\r\n * @private\r\n */\r\n this.chain_ = [];\r\n /**\r\n * A buffer holding the partially computed hash result.\r\n * @private\r\n */\r\n this.buf_ = [];\r\n /**\r\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\r\n * as the message schedule in the docs.\r\n * @private\r\n */\r\n this.W_ = [];\r\n /**\r\n * Contains data needed to pad messages less than 64 bytes.\r\n * @private\r\n */\r\n this.pad_ = [];\r\n /**\r\n * @private {number}\r\n */\r\n this.inbuf_ = 0;\r\n /**\r\n * @private {number}\r\n */\r\n this.total_ = 0;\r\n this.blockSize = 512 / 8;\r\n this.pad_[0] = 128;\r\n for (let i = 1; i < this.blockSize; ++i) {\r\n this.pad_[i] = 0;\r\n }\r\n this.reset();\r\n }\r\n reset() {\r\n this.chain_[0] = 0x67452301;\r\n this.chain_[1] = 0xefcdab89;\r\n this.chain_[2] = 0x98badcfe;\r\n this.chain_[3] = 0x10325476;\r\n this.chain_[4] = 0xc3d2e1f0;\r\n this.inbuf_ = 0;\r\n this.total_ = 0;\r\n }\r\n /**\r\n * Internal compress helper function.\r\n * @param buf Block to compress.\r\n * @param offset Offset of the block in the buffer.\r\n * @private\r\n */\r\n compress_(buf, offset) {\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n const W = this.W_;\r\n // get 16 big endian words\r\n if (typeof buf === 'string') {\r\n for (let i = 0; i < 16; i++) {\r\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n // have a bug that turns the post-increment ++ operator into pre-increment\r\n // during JIT compilation. We have code that depends heavily on SHA-1 for\r\n // correctness and which is affected by this bug, so I've removed all uses\r\n // of post-increment ++ in which the result value is used. We can revert\r\n // this change once the Safari bug\r\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n // most clients have been updated.\r\n W[i] =\r\n (buf.charCodeAt(offset) << 24) |\r\n (buf.charCodeAt(offset + 1) << 16) |\r\n (buf.charCodeAt(offset + 2) << 8) |\r\n buf.charCodeAt(offset + 3);\r\n offset += 4;\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < 16; i++) {\r\n W[i] =\r\n (buf[offset] << 24) |\r\n (buf[offset + 1] << 16) |\r\n (buf[offset + 2] << 8) |\r\n buf[offset + 3];\r\n offset += 4;\r\n }\r\n }\r\n // expand to 80 words\r\n for (let i = 16; i < 80; i++) {\r\n const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n }\r\n let a = this.chain_[0];\r\n let b = this.chain_[1];\r\n let c = this.chain_[2];\r\n let d = this.chain_[3];\r\n let e = this.chain_[4];\r\n let f, k;\r\n // TODO(user): Try to unroll this loop to speed up the computation.\r\n for (let i = 0; i < 80; i++) {\r\n if (i < 40) {\r\n if (i < 20) {\r\n f = d ^ (b & (c ^ d));\r\n k = 0x5a827999;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0x6ed9eba1;\r\n }\r\n }\r\n else {\r\n if (i < 60) {\r\n f = (b & c) | (d & (b | c));\r\n k = 0x8f1bbcdc;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0xca62c1d6;\r\n }\r\n }\r\n const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n e = d;\r\n d = c;\r\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n b = a;\r\n a = t;\r\n }\r\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n }\r\n update(bytes, length) {\r\n // TODO(johnlenz): tighten the function signature and remove this check\r\n if (bytes == null) {\r\n return;\r\n }\r\n if (length === undefined) {\r\n length = bytes.length;\r\n }\r\n const lengthMinusBlock = length - this.blockSize;\r\n let n = 0;\r\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n const buf = this.buf_;\r\n let inbuf = this.inbuf_;\r\n // The outer while loop should execute at most twice.\r\n while (n < length) {\r\n // When we have no data in the block to top up, we can directly process the\r\n // input buffer (assuming it contains sufficient data). This gives ~25%\r\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n // the data is provided in large chunks (or in multiples of 64 bytes).\r\n if (inbuf === 0) {\r\n while (n <= lengthMinusBlock) {\r\n this.compress_(bytes, n);\r\n n += this.blockSize;\r\n }\r\n }\r\n if (typeof bytes === 'string') {\r\n while (n < length) {\r\n buf[inbuf] = bytes.charCodeAt(n);\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n while (n < length) {\r\n buf[inbuf] = bytes[n];\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.inbuf_ = inbuf;\r\n this.total_ += length;\r\n }\r\n /** @override */\r\n digest() {\r\n const digest = [];\r\n let totalBits = this.total_ * 8;\r\n // Add pad 0x80 0x00*.\r\n if (this.inbuf_ < 56) {\r\n this.update(this.pad_, 56 - this.inbuf_);\r\n }\r\n else {\r\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n }\r\n // Add # bits.\r\n for (let i = this.blockSize - 1; i >= 56; i--) {\r\n this.buf_[i] = totalBits & 255;\r\n totalBits /= 256; // Don't use bit-shifting here!\r\n }\r\n this.compress_(this.buf_);\r\n let n = 0;\r\n for (let i = 0; i < 5; i++) {\r\n for (let j = 24; j >= 0; j -= 8) {\r\n digest[n] = (this.chain_[i] >> j) & 255;\r\n ++n;\r\n }\r\n }\r\n return digest;\r\n }\r\n}\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n const proxy = new ObserverProxy(executor, onNoObservers);\r\n return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nclass ObserverProxy {\r\n /**\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\n constructor(executor, onNoObservers) {\r\n this.observers = [];\r\n this.unsubscribes = [];\r\n this.observerCount = 0;\r\n // Micro-task scheduling by calling task.then().\r\n this.task = Promise.resolve();\r\n this.finalized = false;\r\n this.onNoObservers = onNoObservers;\r\n // Call the executor asynchronously so subscribers that are called\r\n // synchronously after the creation of the subscribe function\r\n // can still receive the very first value generated in the executor.\r\n this.task\r\n .then(() => {\r\n executor(this);\r\n })\r\n .catch(e => {\r\n this.error(e);\r\n });\r\n }\r\n next(value) {\r\n this.forEachObserver((observer) => {\r\n observer.next(value);\r\n });\r\n }\r\n error(error) {\r\n this.forEachObserver((observer) => {\r\n observer.error(error);\r\n });\r\n this.close(error);\r\n }\r\n complete() {\r\n this.forEachObserver((observer) => {\r\n observer.complete();\r\n });\r\n this.close();\r\n }\r\n /**\r\n * Subscribe function that can be used to add an Observer to the fan-out list.\r\n *\r\n * - We require that no event is sent to a subscriber sychronously to their\r\n * call to subscribe().\r\n */\r\n subscribe(nextOrObserver, error, complete) {\r\n let observer;\r\n if (nextOrObserver === undefined &&\r\n error === undefined &&\r\n complete === undefined) {\r\n throw new Error('Missing Observer.');\r\n }\r\n // Assemble an Observer object when passed as callback functions.\r\n if (implementsAnyMethods(nextOrObserver, [\r\n 'next',\r\n 'error',\r\n 'complete'\r\n ])) {\r\n observer = nextOrObserver;\r\n }\r\n else {\r\n observer = {\r\n next: nextOrObserver,\r\n error,\r\n complete\r\n };\r\n }\r\n if (observer.next === undefined) {\r\n observer.next = noop;\r\n }\r\n if (observer.error === undefined) {\r\n observer.error = noop;\r\n }\r\n if (observer.complete === undefined) {\r\n observer.complete = noop;\r\n }\r\n const unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n // Attempt to subscribe to a terminated Observable - we\r\n // just respond to the Observer with the final error or complete\r\n // event.\r\n if (this.finalized) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n try {\r\n if (this.finalError) {\r\n observer.error(this.finalError);\r\n }\r\n else {\r\n observer.complete();\r\n }\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n return;\r\n });\r\n }\r\n this.observers.push(observer);\r\n return unsub;\r\n }\r\n // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n // any unsubscribed Observer.\r\n unsubscribeOne(i) {\r\n if (this.observers === undefined || this.observers[i] === undefined) {\r\n return;\r\n }\r\n delete this.observers[i];\r\n this.observerCount -= 1;\r\n if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n this.onNoObservers(this);\r\n }\r\n }\r\n forEachObserver(fn) {\r\n if (this.finalized) {\r\n // Already closed by previous event....just eat the additional values.\r\n return;\r\n }\r\n // Since sendOne calls asynchronously - there is no chance that\r\n // this.observers will become undefined.\r\n for (let i = 0; i < this.observers.length; i++) {\r\n this.sendOne(i, fn);\r\n }\r\n }\r\n // Call the Observer via one of it's callback function. We are careful to\r\n // confirm that the observe has not been unsubscribed since this asynchronous\r\n // function had been queued.\r\n sendOne(i, fn) {\r\n // Execute the callback asynchronously\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n if (this.observers !== undefined && this.observers[i] !== undefined) {\r\n try {\r\n fn(this.observers[i]);\r\n }\r\n catch (e) {\r\n // Ignore exceptions raised in Observers or missing methods of an\r\n // Observer.\r\n // Log error to console. b/31404806\r\n if (typeof console !== 'undefined' && console.error) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n close(err) {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n if (err !== undefined) {\r\n this.finalError = err;\r\n }\r\n // Proxy is no longer needed - garbage collect references\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n this.observers = undefined;\r\n this.onNoObservers = undefined;\r\n });\r\n }\r\n}\r\n/** Turn synchronous function into one called asynchronously. */\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction async(fn, onError) {\r\n return (...args) => {\r\n Promise.resolve(true)\r\n .then(() => {\r\n fn(...args);\r\n })\r\n .catch((error) => {\r\n if (onError) {\r\n onError(error);\r\n }\r\n });\r\n };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n for (const method of methods) {\r\n if (method in obj && typeof obj[method] === 'function') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction noop() {\r\n // do nothing\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param fnName The function name\r\n * @param minCount The minimum number of arguments to allow for the function call\r\n * @param maxCount The maximum number of argument to allow for the function call\r\n * @param argCount The actual number of arguments provided.\r\n */\r\nconst validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n let argError;\r\n if (argCount < minCount) {\r\n argError = 'at least ' + minCount;\r\n }\r\n else if (argCount > maxCount) {\r\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n }\r\n if (argError) {\r\n const error = fnName +\r\n ' failed: Was called with ' +\r\n argCount +\r\n (argCount === 1 ? ' argument.' : ' arguments.') +\r\n ' Expects ' +\r\n argError +\r\n '.';\r\n throw new Error(error);\r\n }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param fnName The function name\r\n * @param argName The name of the argument\r\n * @return The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argName) {\r\n return `${fnName} failed: ${argName} argument `;\r\n}\r\n/**\r\n * @param fnName\r\n * @param argumentNumber\r\n * @param namespace\r\n * @param optional\r\n */\r\nfunction validateNamespace(fnName, namespace, optional) {\r\n if (optional && !namespace) {\r\n return;\r\n }\r\n if (typeof namespace !== 'string') {\r\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');\r\n }\r\n}\r\nfunction validateCallback(fnName, argumentName, \r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\ncallback, optional) {\r\n if (optional && !callback) {\r\n return;\r\n }\r\n if (typeof callback !== 'function') {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');\r\n }\r\n}\r\nfunction validateContextObject(fnName, argumentName, context, optional) {\r\n if (optional && !context) {\r\n return;\r\n }\r\n if (typeof context !== 'object' || context === null) {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript. All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nconst stringToByteArray = function (str) {\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n // Is this the lead surrogate in a surrogate pair?\r\n if (c >= 0xd800 && c <= 0xdbff) {\r\n const high = c - 0xd800; // the high 10 bits.\r\n i++;\r\n assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n c = 0x10000 + (high << 10) + low;\r\n }\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if (c < 65536) {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nconst stringLength = function (str) {\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const c = str.charCodeAt(i);\r\n if (c < 128) {\r\n p++;\r\n }\r\n else if (c < 2048) {\r\n p += 2;\r\n }\r\n else if (c >= 0xd800 && c <= 0xdbff) {\r\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\r\n p += 4;\r\n i++; // skip trail surrogate.\r\n }\r\n else {\r\n p += 3;\r\n }\r\n }\r\n return p;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Copied from https://stackoverflow.com/a/2117523\r\n * Generates a new uuid.\r\n * @public\r\n */\r\nconst uuidv4 = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The amount of milliseconds to exponentially increase.\r\n */\r\nconst DEFAULT_INTERVAL_MILLIS = 1000;\r\n/**\r\n * The factor to backoff by.\r\n * Should be a number greater than 1.\r\n */\r\nconst DEFAULT_BACKOFF_FACTOR = 2;\r\n/**\r\n * The maximum milliseconds to increase to.\r\n *\r\n * Visible for testing\r\n */\r\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\r\n/**\r\n * The percentage of backoff time to randomize by.\r\n * See\r\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\r\n * for context.\r\n *\r\n *
Visible for testing\r\n */\r\nconst RANDOM_FACTOR = 0.5;\r\n/**\r\n * Based on the backoff method from\r\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\r\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\r\n */\r\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\r\n // Calculates an exponentially increasing value.\r\n // Deviation: calculates value from count and a constant interval, so we only need to save value\r\n // and count to restore state.\r\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\r\n // A random \"fuzz\" to avoid waves of retries.\r\n // Deviation: randomFactor is required.\r\n const randomWait = Math.round(\r\n // A fraction of the backoff value to add/subtract.\r\n // Deviation: changes multiplication order to improve readability.\r\n RANDOM_FACTOR *\r\n currBaseValue *\r\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\r\n // if we add or subtract.\r\n (Math.random() - 0.5) *\r\n 2);\r\n // Limits backoff to max to avoid effectively permanent backoff.\r\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provide English ordinal letters after a number\r\n */\r\nfunction ordinal(i) {\r\n if (!Number.isFinite(i)) {\r\n return `${i}`;\r\n }\r\n return i + indicator(i);\r\n}\r\nfunction indicator(i) {\r\n i = Math.abs(i);\r\n const cent = i % 100;\r\n if (cent >= 10 && cent <= 20) {\r\n return 'th';\r\n }\r\n const dec = i % 10;\r\n if (dec === 1) {\r\n return 'st';\r\n }\r\n if (dec === 2) {\r\n return 'nd';\r\n }\r\n if (dec === 3) {\r\n return 'rd';\r\n }\r\n return 'th';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getModularInstance(service) {\r\n if (service && service._delegate) {\r\n return service._delegate;\r\n }\r\n else {\r\n return service;\r\n }\r\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, uuidv4, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n//# sourceMappingURL=index.esm2017.js.map\n","import { PACKAGE_VERSION } from './version.js';\n\n// Name of this application, used in the User-Agent.\nexport const APP_NAME = 'TinodeWeb/' + (PACKAGE_VERSION || '0.21');\n\n// API key. Use https://github.com/tinode/chat/tree/master/keygen to generate your own\nexport const API_KEY = 'AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K';\n\n// The array of possible hosts to connect to.\nexport const KNOWN_HOSTS = {hosted: 'web.tinode.co', local: 'localhost:6060'};\n\n// Default host name and port to connect to.\nexport const DEFAULT_HOST = KNOWN_HOSTS.hosted;\n\n// Enable console logging.\nexport const LOGGING_ENABLED = true;\n\n// Minimum time between two keypress notifications, milliseconds.\nexport const KEYPRESS_DELAY = 3_000;\n// Delay before sending a read notification, milliseconds.\nexport const READ_DELAY = 1_500;\n\n// The default shortest allowed tag length. Matches the value on the server.\nexport const MIN_TAG_LENGTH = 2;\n// The default greatest allowed tag length. Matches the value on the server.\nexport const MAX_TAG_LENGTH = 96;\n// The default maximum number of tags allowed. Matches the value on the server.\nexport const MAX_TAG_COUNT = 16;\n\n// Access mode for P2P subscriptions initiated by the current user.\nexport const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';\n// Access mode for new group topics created by the current user.\nexport const NEW_GRP_ACCESS_MODE = 'JRWPSAO';\n// Access mode for a channel.\nexport const CHANNEL_ACCESS_MODE = 'JR';\n\n// Access mode for no access.\nexport const NO_ACCESS_MODE = 'N';\n\n// Mediaquery breakpoint between desktop and mobile, in px. Should match the value\n// in @media (max-size: 640px) in base.css\nexport const MEDIA_BREAKPOINT = 640;\n// Size of css 'rem' unit in pixels. Default 1rem = 10pt = 13px.\nexport const REM_SIZE = 13;\n\n// Size of the avatar image: when image dimensions are greater or the image is not square, it's resized to\n// a square of this size or less.\nexport const AVATAR_SIZE = 384;\n\n// Maximum size of an avatar in bytes for sending in-band. Bigger avatars will be sent out of band (as uploads).\nexport const MAX_AVATAR_BYTES = 4096;\n\n// Size of the broken_image shown in MessagesView\nexport const BROKEN_IMAGE_SIZE = 32;\n\n// Size of video preview when dimensions are missing.\nexport const NO_DIMENSIONS_VIDEO = 128;\n\n// Number of chat messages to fetch in one call.\nexport const MESSAGES_PAGE = 24;\n\n// Default maximum in-band (included directly into the message) attachment size which fits into\n// a message of 256K in size. Used when the server-provided value is unavailable. The actual\n// binary size of the attachment should be smaller due to base64 encoding expansion and some overhead,\n// for instance 1024 bytes.\n// Increase this limit to a greater value in production, if desired. Also increase\n// max_message_size in the server config.\nexport const MAX_INBAND_ATTACHMENT_SIZE = 262_144;\n\n// Default absolute maximum attachment size to be used with the server = 8MB.\n// Used when the server-provided value is unavailable. Increase to something like 100MB in production.\nexport const MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;\n\n// Maximum allowed linear dimension (pixels) of an image sent inline. Larger images will be shrunk\n// to make the larger dimension fit under this size. You may want to adjust it to 1600 or\n// 2400 for production.\nexport const MAX_IMAGE_DIM = 1024;\n\n// Linear dimensions of image preview: shrink image under this size for previews.\nexport const IMAGE_PREVIEW_DIM = 64;\n\n// Linear dimensions of video screencapture: shrink image under this size for previews.\nexport const VIDEO_PREVIEW_DIM = 96;\n\n// Linear dimensions of image thumbnail: shrink image under this size for thumbnails in reply quote previews.\nexport const IMAGE_THUMBNAIL_DIM = 36;\n// Width of video thumbnail: allow it to be wider, but not taller. Use IMAGE_THUMBNAIL_DIM for height.\nexport const VIDEO_THUMBNAIL_WIDTH = 48;\n\n// Maximum number of online users to be shown in a topic title bar. Others will be\n// hidden under \"+X more\"\nexport const MAX_ONLINE_IN_TOPIC = 4;\n\n// Maximum length of user name, topic title, and private comment.\nexport const MAX_TITLE_LENGTH = 60;\n// Maximum length of topic description.\nexport const MAX_TOPIC_DESCRIPTION_LENGTH = 360;\n// Maximum length of user name when displaying a video call.\nexport const MAX_PEER_TITLE_LENGTH = 20;\n\n// Length of message previews in chat list, in characters.\nexport const MESSAGE_PREVIEW_LENGTH = 80;\n\n// Length of a quote in quoted reply (for outgoing messages).\nexport const QUOTED_REPLY_LENGTH = 30;\n// Length of a preview of a forwarded message.\nexport const FORWARDED_PREVIEW_LENGTH = 84;\n// Length of preview for a message being edited.\nexport const EDIT_PREVIEW_LENGTH = 48;\n\n// Minimum duration of an audio recording in milliseconds (2 sec).\nexport const MIN_DURATION = 2_000;\n// Maximum duration of an audio recording in milliseconds (10 min).\nexport const MAX_DURATION = 600_000;\n\n// Link for \"Contact Us\".\nexport const LINK_CONTACT_US = 'mailto:support@tinode.co';\n\n// Link to Privacy Policy.\nexport const LINK_PRIVACY_POLICY = 'https://tinode.co/privacy.html';\n\n// Link to Terms of Service.\nexport const LINK_TERMS_OF_SERVICE = 'https://tinode.co/terms.html';\n\n// When user starts a P2P topic, automatic subscription does not\n// happen until the first message. Setting this option to true enables\n// immediate subscription.\nexport const IMMEDIATE_P2P_SUBSCRIPTION = false;\n","// Video call states.\nexport const CALL_STATE_NONE = 0;\nexport const CALL_STATE_OUTGOING_INITATED = 1;\nexport const CALL_STATE_INCOMING_RECEIVED = 2;\nexport const CALL_STATE_IN_PROGRESS = 3;\n\n// Video call message headers representing call state.\nexport const CALL_HEAD_STARTED = 'started';\n\n// Gap between video conference carousel items.\nexport const VC_CAROUSEL_ITEM_GAP = 16;\n","// File and image helper functions.\n\n// Supported image MIME types and corresponding file extensions.\nexport const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];\nexport const MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];\n\n// Get an URL from a theCard photo: either create a data: URL or return reference URL.\nexport function makeImageUrl(photo) {\n if (photo && typeof photo == 'object') {\n if (photo.ref) {\n return photo.ref\n }\n if (photo.data && photo.type) {\n const mime = photo.type.startsWith('image/') ? photo.type : ('image/' + photo.type);\n return 'data:' + mime + ';base64,' + photo.data;\n }\n }\n return null;\n}\n\n// Calculate linear dimensions for scaling image down to fit under a certain size.\n// Returns an object which contains destination sizes, source sizes, and offsets\n// into source (when making square images).\nexport function fitImageSize(width, height, maxWidth, maxHeight, forceSquare) {\n // Sanitize input\n width = width | 0;\n height = height | 0;\n maxWidth = maxWidth | 0;\n maxHeight = maxHeight | 0;\n\n if (width <= 0 || height <= 0 || maxWidth <= 0 || maxHeight <= 0) {\n return null;\n }\n\n if (forceSquare) {\n maxWidth = maxHeight = Math.min(maxWidth, maxHeight);\n }\n\n const scale = Math.min(\n Math.min(width, maxWidth) / width,\n Math.min(height, maxHeight) / height\n );\n\n const size = {\n dstWidth: (width * scale) | 0,\n dstHeight: (height * scale) | 0,\n };\n\n if (forceSquare) {\n // Also calculate parameters for making the image square.\n size.dstWidth = size.dstHeight = Math.min(size.dstWidth, size.dstHeight);\n size.srcWidth = size.srcHeight = Math.min(width, height);\n size.xoffset = ((width - size.srcWidth) / 2) | 0;\n size.yoffset = ((height - size.srcWidth) / 2) | 0;\n } else {\n size.xoffset = size.yoffset = 0;\n size.srcWidth = width;\n size.srcHeight = height;\n }\n return size;\n}\n\n// Ensure file's extension matches mime content type\nexport function fileNameForMime(fname, mime) {\n const idx = SUPPORTED_IMAGE_FORMATS.indexOf(mime);\n if (idx < 0 || !fname) {\n // Unknown mime or empty name.\n return fname;\n }\n const ext = MIME_EXTENSIONS[idx];\n\n const at = fname.lastIndexOf('.');\n if (at >= 0) {\n fname = fname.substring(0, at);\n }\n return fname + '.' + ext;\n}\n\n// Scale uploaded image to fit under certain dimensions and byte size, optionally constraining to a square.\n// Returns a promise which is resolven on success or rejected on failure.\nexport function imageScaled(fileOrBlob, maxWidth, maxHeight, maxSize, forceSquare) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onerror = function(err) {\n reject(new Error(\"Image format unrecognized\"));\n }\n img.onload = async function() {\n // Once the image is loaded, the URL is no longer needed.\n URL.revokeObjectURL(img.src);\n\n // Calculate the desired image dimensions.\n const dim = fitImageSize(img.width, img.height, maxWidth, maxHeight, forceSquare);\n if (!dim) {\n reject(new Error(\"Invalid image\"));\n return;\n }\n let canvas = document.createElement('canvas');\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n let ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n\n const mime = SUPPORTED_IMAGE_FORMATS.includes(fileOrBlob.type) ? fileOrBlob.type : 'image/jpeg';\n // Generate blob to check size of the image.\n let blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n if (!blob) {\n reject(new Error(\"Unsupported image format\"));\n return;\n }\n // Ensure the image is not too large. Shrink the image keeping the aspect ratio.\n // Do nothing if maxsize is <= 0.\n while (maxSize > 0 && blob.length > maxSize) {\n dim.dstWidth = (dim.dstWidth * 0.70710678118) | 0;\n dim.dstHeight = (dim.dstHeight * 0.70710678118) | 0;\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n ctx = canvas.getContext('2d');\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n }\n\n canvas = null;\n resolve({mime: mime, blob: blob, width: dim.dstWidth, height: dim.dstHeight, name: fileNameForMime(fileOrBlob.name, mime)});\n };\n img.src = URL.createObjectURL(fileOrBlob);\n });\n}\n\n// Scale and crop image according to specified dimensions.\n// The coordinates are in unscaled image pixels, i.e. cut the rectangle first then scale it.\n// returns a promise.\nexport function imageCrop(mime, objURL, left, top, width, height, scale) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onerror = _ => {\n reject(new Error(\"Image format unrecognized\"));\n };\n img.onload = _ => {\n // Once the image is loaded, the URL is no longer needed.\n URL.revokeObjectURL(img.src);\n\n let canvas = document.createElement('canvas');\n canvas.width = width * scale;\n canvas.height = height * scale;\n let ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(img, left, top, width, height, 0, 0, canvas.width, canvas.height);\n\n mime = SUPPORTED_IMAGE_FORMATS.includes(mime) ? mime : 'image/jpeg';\n // Generate blob to check size of the image.\n canvas.toBlob((blob) => {\n // Allow GC.\n canvas = null;\n if (blob) {\n resolve({mime: mime, blob: blob, width: width, height: height});\n } else {\n reject(new Error(\"Unsupported image format\"));\n }\n }, mime);\n };\n img.src = objURL;\n });\n}\n\n// Convert file to base64 string.\nexport function fileToBase64(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = _ => {\n reject(reader.error);\n };\n reader.onload = _ => {\n resolve({mime: file.type, bits: reader.result.split(',')[1], name: file.name});\n };\n reader.readAsDataURL(file);\n });\n}\n\n// Convert Blob to base64 string. Returns a promise resolved with the base64 string and mime.\nexport function blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = _ => {\n reject(reader.error);\n };\n reader.onload = _ => {\n resolve({mime: blob.type, bits: reader.result.split(',')[1]});\n };\n reader.readAsDataURL(blob);\n });\n}\n\n// File pasted from the clipboard. It's either an inline image or a file attachment.\nexport function filePasted(event, onImageSuccess, onAttachmentSuccess, onError) {\n const items = (event.clipboardData || event.originalEvent.clipboardData || {}).items;\n if (!items || !items.length) {\n return false;\n }\n\n for (let i in items) {\n const item = items[i];\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (!file) {\n console.error(\"Failed to get file object from pasted file item\", item.kind, item.type);\n onError(\"Failed to get file object from pasted file item\");\n continue;\n }\n if (file.type && file.type.split('/')[0] == 'image') {\n onImageSuccess(file);\n } else {\n onAttachmentSuccess(file);\n }\n // Indicate that the pasted data contains a file.\n return true;\n }\n }\n // No file found.\n return false;\n}\n\n// Get mime type from data URL header.\nexport function getMimeType(header) {\n const mime = /^data:(image\\/[-+a-z0-9.]+);base64/.exec(header);\n return (mime && mime.length > 1) ? mime[1] : null;\n}\n\n// Given length of a binary object in bytes, calculate the length after\n// base64 encoding.\nexport function base64EncodedLen(n) {\n return Math.floor((n + 2) / 3) * 4;\n}\n\n// Given length of a base64-encoded object, calculate decoded size of the\n// pbject in bytes.\nexport function base64DecodedLen(n) {\n return Math.floor(n / 4) * 3;\n}\n\n// Re-encode string to standard base64 encoding with padding.\n// The string may be base64-URL encoded without the padding.\nexport function base64ReEncode(str) {\n if (str) {\n str = str.replace(/-/g, '+').replace(/_/g, '/');\n try {\n str = btoa(atob(str));\n } catch(err) {\n console.error(\"Failed to base64 re-encode string.\", err);\n str = null;\n }\n }\n return str;\n}\n\n// Convert a base64 encoded string with the provided mime type into a Blob.\nexport function base64ToBlob(str, mime) {\n if (!str) {\n return null;\n }\n\n try {\n // Make blob.\n const bin = atob(str);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return new Blob([buf], { type: mime });\n } catch(err) {\n console.error(\"Failed to convert base64 to blob: \", err);\n }\n\n return null;\n}\n\nexport function intArrayToBase64(arr) {\n if (!Array.isArray(arr)) {\n return null;\n }\n try {\n let bin = '';\n new Uint8Array(arr).forEach(b => bin += String.fromCharCode(b));\n return window.btoa(bin);\n } catch (err) {}\n return null;\n}\n\nexport function base64ToIntArray(b64) {\n const arr = [];\n try {\n const bin = window.atob(b64);\n [...bin].forEach(c => {\n arr.push(c.charCodeAt(0));\n });\n return arr;\n } catch (err) {}\n return null;\n}\n","import React from 'react';\nimport { defineMessages } from 'react-intl';\n\nimport { Drafty } from 'tinode-sdk';\n\nimport AudioPlayer from '../widgets/audio-player.jsx'\nimport CallMessage from '../widgets/call-message.jsx'\nimport CallStatus from '../widgets/call-status.jsx';\nimport InlineVideo from '../widgets/inline-video.jsx';\nimport LazyImage from '../widgets/lazy-image.jsx'\nimport UploadingImage from '../widgets/uploading-image.jsx'\n\nimport { BROKEN_IMAGE_SIZE, IMAGE_THUMBNAIL_DIM, NO_DIMENSIONS_VIDEO, REM_SIZE, VIDEO_THUMBNAIL_WIDTH } from '../config.js';\nimport { base64ToBlob, blobToBase64, fitImageSize, imageScaled } from './blob-helpers.js';\nimport { idToColorClass, secondsToTime, shortenFileName } from './strformat.js';\nimport { cancelablePromise, sanitizeUrlForMime } from './utils.js';\n\nconst messages = defineMessages({\n drafty_form: {\n id: 'drafty_form',\n defaultMessage: 'Form: ',\n description: 'Comment for form in Drafty'\n },\n drafty_attachment: {\n id: 'drafty_attachment',\n defaultMessage: 'Attachment',\n description: 'Comment for attachment in Drafty'\n },\n drafty_image: {\n id: 'drafty_image',\n defaultMessage: 'Picture',\n description: 'Comment for embedded images in Drafty'\n },\n drafty_video: {\n id: 'drafty_video',\n defaultMessage: 'Video recording',\n description: 'Comment for videos embedded in Drafty'\n },\n drafty_unknown: {\n id: 'drafty_unknown',\n defaultMessage: 'Unsupported',\n description: 'Unsupported entity in drafty'\n }\n});\n\n// The main Drafty formatter: converts Drafty elements into React classes. 'this' is set by the caller.\n// 'this' must contain:\n// viewportWidth:\n// authorizeURL:\n// onImagePreview:\n// onVideoPreview:\n// onFormButtonClick:\n// onQuoteClick:\nexport function fullFormatter(style, data, values, key, stack) {\n if (stack.includes('QQ')) {\n return quoteFormatter.call(this, style, data, values, key);\n }\n\n if (!style) {\n // Unformatted.\n return values;\n }\n\n let el = Drafty.tagName(style);\n let attr = Drafty.attrValue(style, data) || {};\n attr.key = key;\n switch (style) {\n case 'AU':\n // Show audio player.\n if (attr.src) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'audio'));\n attr.duration = data.duration > 0 ? (data.duration | 0) : undefined;\n attr.preview = data.preview;\n attr.loading = 'lazy';\n }\n el = AudioPlayer;\n // Audio element cannot have content.\n values = null;\n break;\n case 'BR':\n values = null;\n break;\n case 'EX':\n // Ignore.\n break;\n case 'HL':\n // Highlighted text. Assign class name.\n attr.className = 'highlight';\n break;\n case 'HD':\n el = null;\n values = null;\n break;\n case 'IM':\n // Additional processing for images\n el = handleImageData.call(this, el, data, attr);\n // Image element cannot have content.\n values = null;\n break;\n case 'BN':\n // Button\n attr.onClick = this.onFormButtonClick;\n let inner = React.Children.map(values, (child) => {\n return typeof child == 'string' ? child : undefined;\n });\n if (!inner || inner.length == 0) {\n inner = [attr.name]\n }\n // Get text which will be sent back when the button is clicked.\n attr['data-title'] = inner.join('');\n break;\n case 'MN':\n // Mention\n attr.className = 'mention'\n if (data) {\n attr.className += ' ' + idToColorClass(data.val, false, true);\n }\n break;\n case 'FM':\n // Form\n attr.className = 'bot-form';\n break;\n case 'RW':\n // Form element formatting is dependent on element content.\n break;\n case 'QQ':\n // Quote/citation.\n attr.className = 'reply-quote'\n attr.onClick = this.onQuoteClick;\n break;\n case 'VC':\n el = CallMessage;\n // Video call messages do not have content.\n values = null;\n if (data) {\n attr.callState = data.state;\n attr.incoming = data.incoming;\n attr.duration = data.duration;\n attr.vc = data.vc;\n attr.onCallJoin = this.onCallJoin;\n }\n break;\n case 'VD':\n // Additional processing for videos.\n el = handleVideoData.call(this, el, data, attr);\n // Video element cannot have content.\n values = null;\n break;\n default:\n if (!el) {\n // Unknown element.\n el = React.Fragment;\n attr = {key: key};\n // Generate comment for unknown element.\n let body = values;\n if (!Array.isArray(values) || !values.join('').trim()) {\n body = [{this.formatMessage(messages.drafty_unknown)}];\n }\n values = [extension, ' '].concat(body);\n }\n break;\n }\n if (!el) {\n return values;\n }\n return React.createElement(el, attr, values);\n}\n\n// Additional processing of image data.\nfunction handleImageData(el, data, attr) {\n if (!data) {\n attr.src = 'img/broken_image.png';\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n };\n return el;\n }\n\n attr.className = 'inline-image';\n const dim = fitImageSize(data.width, data.height,\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\n {dstWidth: BROKEN_IMAGE_SIZE, dstHeight: BROKEN_IMAGE_SIZE};\n attr.style = {\n width: dim.dstWidth + 'px',\n height: dim.dstHeight + 'px',\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\n minWidth: dim.dstWidth + 'px',\n minHeight: dim.dstHeight + 'px'\n };\n if (!Drafty.isProcessing(data)) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\n attr.alt = data.name;\n if (attr.src) {\n if (Math.max(data.width || 0, data.height || 0) > IMAGE_THUMBNAIL_DIM) {\n // Allow previews for large enough images.\n attr.onClick = this.onImagePreview;\n attr.className += ' image-clickable';\n }\n attr.loading = 'lazy';\n } else {\n attr.src = null;\n }\n } else {\n // Use custom element instead of
.\n el = UploadingImage;\n }\n\n return el;\n}\n\n// Additional processing of image data.\nfunction handleVideoData(el, data, attr) {\n if (!data) {\n attr.src = 'img/broken_video.png';\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n };\n return el;\n }\n attr.className = 'inline-image';\n const dim = fitImageSize(data.width, data.height,\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\n {dstWidth: NO_DIMENSIONS_VIDEO, dstHeight: NO_DIMENSIONS_VIDEO};\n attr.style = {\n width: dim.dstWidth + 'px',\n height: dim.dstHeight + 'px',\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\n minWidth: dim.dstWidth + 'px',\n minHeight: dim.dstHeight + 'px'\n };\n if (!Drafty.isProcessing(data)) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\n attr.alt = data.name;\n if (data.ref || data.val) {\n attr.onClick = this.onVideoPreview;\n attr.loading = 'lazy';\n }\n el = InlineVideo;\n } else {\n // Use custom element instead of
.\n el = UploadingImage;\n }\n\n return el;\n}\n\n// Converts Drafty object into a one-line preview. 'this' is set by the caller.\n// 'this' must contain:\n// formatMessage: this.props.intl.formatMessage\n// messages: formatjs messages defined with defineMessages.\nexport function previewFormatter(style, data, values, key) {\n if (!style) {\n // Unformatted.\n return values;\n }\n\n let el = Drafty.tagName(style);\n const attr = { key: key };\n switch (style) {\n case 'AU':\n // Voicemail as '[mic] 0:00'.\n el = React.Fragment;\n values = [mic, ' ', secondsToTime(data.duration/1000)];\n break;\n case 'BR':\n // Replace new line with a space.\n el = React.Fragment;\n values = [' '];\n break;\n case 'HL':\n // Make highlight less prominent in preview.\n attr.className = 'highlight preview';\n break;\n case 'LN':\n case 'MN':\n // Disable links in previews.\n el = 'span';\n break;\n case 'IM':\n // Replace image with '[icon] Image'.\n el = React.Fragment;\n values = [photo, ' ', this.formatMessage(messages.drafty_image)];\n break;\n case 'BN':\n el = 'span';\n attr.className = 'flat-button faux';\n break;\n case 'FM':\n el = React.Fragment;\n values = [dashboard,\n this.formatMessage(messages.drafty_form)].concat(' ', values || []);\n break;\n case 'RW':\n el = React.Fragment;\n break;\n case 'EX':\n if (data) {\n if (data.mime == 'application/json') {\n // Ignore JSON attachments: they are form response payloads.\n return null;\n }\n // Clear payload.\n delete data.val;\n delete data.ref;\n }\n el = React.Fragment;\n values = [attachment, ' ', this.formatMessage(messages.drafty_attachment)];\n break;\n case 'VC':\n el = CallStatus;\n if (data) {\n attr.callState = data.state;\n attr.incoming = data.incoming;\n attr.duration = data.duration;\n }\n values = null;\n break;\n case 'QQ':\n case 'HD':\n el = null;\n values = null;\n break;\n case 'VD':\n // Replace image with '[icon] Video'.\n el = React.Fragment;\n values = [play_circle_outline, ' ', this.formatMessage(messages.drafty_video)];\n break;\n default:\n if (!el) {\n // Unknown element.\n el = React.Fragment;\n values = [extension, ' ', this.formatMessage(messages.drafty_unknown)];\n }\n break;\n }\n if (!el) {\n return values;\n }\n return React.createElement(el, attr, values);\n};\n\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\nfunction inlineImageAttr(attr, data) {\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n maxWidth: IMAGE_THUMBNAIL_DIM + 'px',\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\n }\n attr.className = 'inline-image';\n attr.alt = this.formatMessage(messages.drafty_image);\n if (!data) {\n attr.src = 'img/broken_image.png';\n } else {\n attr.src = attr.src || 'img/broken_image.png';\n }\n attr.title = attr.alt;\n return attr;\n}\n\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\nfunction inlineVideoAttr(attr, data) {\n const dim = fitImageSize(data.width, data.height, VIDEO_THUMBNAIL_WIDTH, IMAGE_THUMBNAIL_DIM);\n attr.style = {\n width: dim.width + 'px',\n height: dim.height + 'px',\n maxWidth: VIDEO_THUMBNAIL_WIDTH + 'px',\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\n }\n attr.className = 'inline-image';\n attr.alt = this.formatMessage(messages.drafty_video);\n attr.title = attr.alt;\n if (!data) {\n attr.src = 'img/broken_video.png';\n } else {\n attr.src = attr.src || 'img/broken_video.png';\n }\n return attr;\n}\n\n// Displays a portion of Drafty within 'QQ' quotes. 'this' is set by the caller.\n// 'this' must contain:\n// formatMessage: this.props.intl.formatMessage\n// messages: formatjs messages defined with defineMessages.\n// authorizeURL: this.props.tinode.authorizeURL\n// onQuoteClick: this.handleQuoteClick (optional)\nfunction quoteFormatter(style, data, values, key) {\n if (['BR', 'EX', 'IM', 'MN', 'VD'].includes(style)) {\n let el = Drafty.tagName(style);\n let attr = Drafty.attrValue(style, data) || {};\n attr.key = key;\n switch(style) {\n case 'BR':\n values = null;\n break;\n case 'IM':\n attr = inlineImageAttr.call(this, attr, data);\n values = [React.createElement('img', attr, null), ' ', attr.alt];\n el = React.Fragment;\n // Fragment attributes.\n attr = {key: key};\n break;\n case 'VD':\n attr = inlineVideoAttr.call(this, attr, data);\n values = [React.createElement('img', attr, null), ' ', attr.alt];\n el = React.Fragment;\n // Fragment attributes.\n attr = {key: key};\n break;\n case 'MN':\n el = 'span';\n attr.className = 'mention'\n if (data) {\n attr.className += ' ' + idToColorClass(data.val, false, true);\n }\n break;\n case 'EX':\n let fname;\n if (data) {\n if (data.mime == 'application/json') {\n // Ignore JSON attachments: they are form response payloads.\n return null;\n }\n fname = data.name;\n // Clear payload.\n delete data.val;\n delete data.ref;\n }\n el = React.Fragment;\n values = [attachment,\n shortenFileName(fname, 16) || this.formatMessage(messages.drafty_attachment)];\n break;\n }\n return React.createElement(el, attr, values);\n }\n return previewFormatter.call(this, style, data, values, key);\n}\n\n// Create image thumbnail suitable for inclusion in a quote.\nfunction quoteImageOrVideo(data, isVideo) {\n let promise;\n let bits, ref, mime;\n if (isVideo) {\n bits = data.preview;\n mime = data.premime || 'image/jpeg';\n ref = data.preref;\n } else {\n bits = data.val;\n mime = data.mime;\n ref = data.ref;\n }\n // Get the blob from the image data.\n if (bits) {\n const blob = base64ToBlob(bits, mime);\n if (!blob) {\n throw new Error(\"Invalid image\");\n }\n promise = Promise.resolve(blob);\n } else if (ref) {\n promise = fetch(this.authorizeURL(sanitizeUrlForMime(ref, 'image')))\n .then(evt => {\n if (evt.ok) {\n return evt.blob();\n } else {\n throw new Error(`Image fetch unsuccessful: ${evt.status} ${evt.statusText}`);\n }\n });\n } else {\n throw new Error(\"Missing image data\");\n }\n\n // Scale the blob.\n return promise\n .then(blob => {\n // If it's an image, cut the square from the center of the image and shrink it.\n // If it's a video, allow it to be rectantular.\n return imageScaled(blob, isVideo ? VIDEO_THUMBNAIL_WIDTH : IMAGE_THUMBNAIL_DIM, IMAGE_THUMBNAIL_DIM, -1, !isVideo)\n }).then(scaled => {\n if (isVideo) {\n data.premime = scaled.mime;\n } else {\n data.mime = scaled.mime;\n }\n data.size = scaled.blob.size;\n data.width = scaled.width;\n data.height = scaled.height;\n delete data.ref;\n delete data.preref;\n // Keeping the original file name, if provided: ex.data.name;\n\n data.src = URL.createObjectURL(scaled.blob);\n return blobToBase64(scaled.blob);\n }).then(b64 => {\n if (isVideo) {\n data.preview = b64.bits;\n } else {\n data.val = b64.bits;\n }\n return data;\n }).catch(err => {\n delete data.val;\n delete data.preview;\n delete data.src;\n data.width = IMAGE_THUMBNAIL_DIM;\n data.height = IMAGE_THUMBNAIL_DIM;\n // Rethrow.\n throw err;\n });\n}\n\n// Create a preview of a reply.\nexport function replyFormatter(style, data, values, key, stack) {\n if (style == 'IM' || style == 'VD') {\n const isImage = style == 'IM';\n const attr = isImage ? inlineImageAttr.call(this, {key: key}, data) :\n inlineVideoAttr.call(this, {key: key}, data);\n\n let loadedPromise;\n try {\n loadedPromise = cancelablePromise(quoteImageOrVideo.call(this, data, style == 'VD'));\n } catch (error) {\n console.warn(\"Failed to quote image:\", error.message);\n loadedPromise = cancelablePromise(error);\n }\n attr.whenDone = loadedPromise;\n values = [React.createElement(LazyImage, attr, null), ' ', attr.alt];\n return React.createElement(React.Fragment, {key: key}, values);\n } else if (style == 'QQ') {\n if (stack.includes('QQ')) {\n // Quote inside quote when forwarding a message.\n return React.createElement('span', {key: key},\n [format_quote, ' ']);\n }\n\n const attr = Drafty.attrValue('QQ', data) || {};\n attr.key = key;\n attr.className = 'reply-quote'\n return React.createElement(Drafty.tagName('QQ'), attr, values);\n }\n return quoteFormatter.call(this, style, data, values, key);\n}\n","import { KNOWN_HOSTS, DEFAULT_HOST } from '../config.js';\n\n// Detect server address from the URL\nexport function detectServerAddress() {\n let host = DEFAULT_HOST;\n if (typeof window.location == 'object') {\n if (window.location.protocol == 'file:' || window.location.hostname == 'localhost') {\n host = KNOWN_HOSTS.local;\n } else if (window.location.hostname) {\n host = window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n }\n }\n return host;\n}\n\n// Detect if the page is served over HTTPS.\nexport function isSecureConnection() {\n if (typeof window.location == 'object') {\n return window.location.protocol == 'https:';\n }\n return false;\n}\n\nexport function isLocalHost() {\n if (typeof window.location == 'object') {\n return window.location.hostname == 'localhost';\n }\n return false;\n}\n","// Helper functions for storing values in localStorage.\n// By default localStorage can store only strings, not objects or other types.\n\nexport default class LocalStorageUtil {\n // Replace old object with the new one.\n static setObject(key, value) {\n localStorage.setItem(key, JSON.stringify(value));\n }\n\n // Get stored object.\n static getObject(key) {\n const value = localStorage.getItem(key);\n return value && JSON.parse(value);\n }\n\n // Partially or wholly update stored object.\n static updateObject(key, value) {\n const oldVal = this.getObject(key);\n this.setObject(key, Object.assign(oldVal || {}, value));\n }\n\n // Just a wrapper.\n static removeItem(key) {\n localStorage.removeItem(key);\n }\n}\n","// Utility class for hash navigation.\n\nexport default class HashNavigation {\n // Parse hash as in http://www.example.com/path#hash as if it were\n // path and arguments.\n static parseUrlHash(hash) {\n // Split path from args, path -> parts[0], args->path[1]\n const parts = hash.split('?', 2);\n const params = {};\n let path = [];\n if (parts[0]) {\n path = parts[0].replace('#', '').split('/');\n }\n if (parts[1]) {\n parts[1].split('&').forEach((arg) => {\n // Can't use split() because the value may contain '='.\n const eq = arg.indexOf('=');\n if (eq > 0) {\n params[arg.slice(0, eq)] = decodeURIComponent(arg.slice(eq + 1));\n }\n });\n }\n return {path: path, params: params};\n }\n\n static navigateTo(url) {\n window.location.hash = url;\n }\n\n static composeUrlHash(path, params) {\n let url = path.join('/');\n const args = [];\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n args.push(key + '=' + encodeURIComponent(params[key]));\n }\n }\n if (args.length > 0) {\n url += '?' + args.join('&');\n }\n return url;\n }\n\n static addUrlParam(hash, key, value) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.params[key] = value;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static removeUrlParam(hash, key) {\n const parsed = HashNavigation.parseUrlHash(hash);\n delete parsed.params[key];\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlSidePanel(hash, sidepanel) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.path[0] = sidepanel;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlInfoPanel(hash, infopanel) {\n const parsed = HashNavigation.parseUrlHash(hash);\n if (infopanel) {\n parsed.params.info = infopanel;\n } else {\n delete parsed.params.info;\n }\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlTopic(hash, topic) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.path[1] = topic;\n // Close InfoView on topic change.\n delete parsed.params.info;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n}\n","// Short representation of time in the past.\nexport function shortDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n if (then.getFullYear() == now.getFullYear()) {\n // Same year.\n if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {\n // Same month and day, show time only.\n return then.toLocaleTimeString(locale, {hour12: false, hour: '2-digit', minute: '2-digit'});\n }\n // Different month and/or day, show month day, time.\n return then.toLocaleDateString(locale,\n {hour12: false, month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit'});\n }\n // Different year: just show the date.\n return then.toLocaleDateString(locale, {year: 'numeric', month: 'short', day: 'numeric'});\n}\n\n// Representation a date relative to now.\nexport function relativeDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n const thenDays = Math.floor((then.getTime() - then.getTimezoneOffset() * 60_000) / 86_400_000);\n const nowDays = Math.floor((now.getTime() - now.getTimezoneOffset() * 60_000) / 86_400_000);\n const diff = thenDays - nowDays;\n if (Math.abs(diff) < 2) {\n // Today or yesterday.\n return new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).format(diff, 'day')\n }\n // More than two days: just show the date.\n return new Intl.DateTimeFormat(locale).format(then);\n}\n\n// Convert seconds to [hours:]minutes:seconds, i.e. 156 sec -> 2:36, 3756 sec -> 1:02:36.\n// If fixedMins is true, then minutes are represented by at least two digits.\nexport function secondsToTime(seconds, fixedMin) {\n if (typeof seconds != 'number') {\n return '';\n }\n\n let min = (Math.floor(seconds / 60) | 0) % 60;\n let hours = Math.floor(seconds / 3600) | 0;\n\n if (fixedMin || hours > 0) {\n min = min < 10 ? `0${min}` : min;\n }\n let sec = (seconds | 0) % 60;\n sec = sec < 10 ? `0${sec}` : sec;\n if (hours == 0) {\n return `${min}:${sec}`;\n }\n return `${hours}:${min}:${sec}`;\n}\n\n// Convert a number of bytes to human-readable format.\nexport function bytesToHumanSize(bytes) {\n if (!bytes || bytes == 0) {\n return '0 Bytes';\n }\n\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const bucket = Math.min(Math.floor(Math.log2(bytes) / 10) | 0, sizes.length-1);\n const count = bytes / Math.pow(1024, bucket);\n const round = bucket > 0 ? (count < 3 ? 2 : (count < 30 ? 1 : 0)) : 0;\n return count.toFixed(round) + ' ' + sizes[bucket];\n}\n\n// Shorten a file name to be under maxLength by clipping out the middle.\nexport function shortenFileName(filename, maxLength) {\n if (typeof filename != 'string') {\n return filename;\n }\n return filename.length > maxLength ?\n filename.slice(0, maxLength/2 - 1) + '…' + filename.slice(1 - maxLength/2) : filename;\n}\n\n// Get 32 bit integer hash value for a string. Ideally it should produce the same value\n// as Java's String#hash().\nfunction stringToColorHash(value) {\n let hash = 0;\n value = '' + value;\n for (let i = 0; i < value.length; i++) {\n hash = ((hash << 5) - hash) + value.charCodeAt(i);\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n}\n\n// User avatar letter color id.\nexport function letterTileColorId(userId) {\n return Math.abs(stringToColorHash(userId)) % 16;\n}\n\n// Converts user or topic ID to a CSS color class. Ideally it should produce the same color value as Java version.\n// params:\n// - {string} id: user or topic ID\n// - {boolean} light: light or dark version of the color.\n// - {boolean} fg: foreground (text) or background color.\nexport function idToColorClass(id, light, fg) {\n return (light ? 'lt-' : 'dk-') + (fg ? 'fg-' : 'bg-') + letterTileColorId(id);\n}\n\n// Takes ISO Alpha-2 country code, like 'US' and converts it to a flag emoji.\nexport function flagEmoji(countryCode) {\n const codePoints = countryCode\n .toUpperCase()\n .split('')\n .map(char => 0x1F1A5 + char.charCodeAt());\n return String.fromCodePoint(...codePoints);\n}\n","// Odds and ends\n\nimport { Tinode } from 'tinode-sdk';\n\n// Make shortcut icon appear with a green dot + show unread count in title.\nexport function updateFavicon(count) {\n const oldIcon = document.getElementById('shortcut-icon');\n const head = document.head || document.getElementsByTagName('head')[0];\n const newIcon = document.createElement('link');\n newIcon.type = 'image/png';\n newIcon.id = 'shortcut-icon';\n newIcon.rel = 'shortcut icon';\n newIcon.href = 'img/logo32x32' + (count > 0 ? 'a' : '') + '.png';\n if (oldIcon) {\n head.removeChild(oldIcon);\n }\n head.appendChild(newIcon);\n\n document.title = (count > 0 ? '('+count+') ' : '') + 'Tinode';\n}\n\n// Create theCard which represents user's or topic's \"public\" info.\nexport function theCard(fn, imageUrl, imageMimeType, note) {\n let card = null;\n fn = fn && fn.trim();\n note = note && note.trim();\n\n if (fn) {\n card = {\n fn: fn\n };\n }\n\n if (typeof note == 'string') {\n card = card || {};\n card.note = note ? note : Tinode.DEL_CHAR;\n }\n\n if (imageUrl) {\n card = card || {};\n let mimeType = imageMimeType;\n // Is this a data URL \"data:[][;base64],\"?\n const matches = /^data:(image\\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl);\n if (matches) {\n mimeType = matches[1];\n card.photo = {\n data: imageUrl.substring(imageUrl.indexOf(',') + 1),\n ref: Tinode.DEL_CHAR\n };\n } else {\n card.photo = {\n data: Tinode.DEL_CHAR,\n ref: imageUrl\n };\n }\n card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);\n }\n\n return card;\n}\n\n// Deep-shallow compare two arrays: shallow compare each element.\nexport function arrayEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (!Array.isArray(a) || !Array.isArray(b)) {\n return false;\n }\n\n // Compare lengths first.\n if (a.length != b.length) {\n return false;\n }\n // Order of elements is ignored.\n a.sort();\n b.sort();\n for (let i = 0, l = a.length; i < l; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\n\n// Checks (loosely) if the given string is a phone. If so, returns the phone number in a format\n// as close to E.164 as possible.\nexport function asPhone(val) {\n val = val.trim();\n if (/^(?:\\+?(\\d{1,3}))?[- (.]*(\\d{3})[- ).]*(\\d{3})[- .]*(\\d{2})[- .]*(\\d{2})?$/.test(val)) {\n return val.replace(/[- ().]*/, '');\n }\n return null;\n}\n\n// Checks (loosely) if the given string is an email. If so returns the email.\nexport function asEmail(val) {\n val = val.trim();\n if (/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$/.test(val)) {\n return val;\n }\n return null;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\n// Ensure URL does not present an XSS risk. Optional allowedSchemes may contain an array of\n// strings with permitted URL schemes, such as ['ftp', 'ftps']; otherwise accept http and https only.\nexport function sanitizeUrl(url, allowedSchemes) {\n if (typeof url != 'string') {\n return url;\n }\n\n // Strip control characters and whitespace. They are not valid URL characters anyway.\n url = url.replace(/[^\\x20-\\x7E]/gmi, '').trim();\n\n // Relative URLs are safe.\n // Relative URL does not start with ':', abcd123: or '//'.\n if (!/^([a-z][a-z0-9+.-]*:|\\/\\/)/i.test(url)) {\n return url;\n }\n\n // Blob URLs are safe.\n if (/^blob:http/.test(url)) {\n return url;\n }\n\n // Absolute URL. Accept only safe schemes, or no scheme.\n const schemes = Array.isArray(allowedSchemes) ? allowedSchemes.join('|') : 'http|https';\n const re = new RegExp('^((' + schemes + '):|//)', 'i');\n if (!re.test(url)) {\n return null;\n }\n\n return url;\n}\n\n// Ensure URL is suitable as a source like
field: the URL must be a relative URL or\n// have http:, https:, blob: or data: scheme.\n// In case of data: scheme, the URL must must be of the right MIME type such as 'data:{mimeMajor}/XXXX;base64,'.\nexport function sanitizeUrlForMime(url, mimeMajor) {\n if (!url) {\n return null;\n }\n\n const sanitizedUrl = sanitizeUrl(url);\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Is this a data: URL of the appropriate mime type?\n const re = new RegExp(`data:${mimeMajor}\\/[a-z0-9.-]+;base64,`, 'i');\n if (re.test(url.trim())) {\n return url;\n }\n\n return null;\n}\n\n// Given message's received status, return name and color of a delivery indicator icon.\nexport function deliveryMarker(received) {\n switch (received) {\n case Tinode.MESSAGE_STATUS_SENDING:\n return { name: 'access_time' }; // watch face\n case Tinode.MESSAGE_STATUS_FAILED:\n case Tinode.MESSAGE_STATUS_FATAL:\n return { name: 'warning', color: 'danger-color' }; // yellow icon /!\\\n case Tinode.MESSAGE_STATUS_SENT:\n return { name: 'done' }; // checkmark\n case Tinode.MESSAGE_STATUS_RECEIVED:\n return { name: 'done_all' }; // double checkmark\n case Tinode.MESSAGE_STATUS_READ:\n return { name: 'done_all', color: 'blue' }; // blue double checkmark\n }\n return null;\n}\n\n// Wraps a promise to make it cancelable.\n// The parameter can be either a promise or an error. If it's an error, the wrapped promise is\n// created in a rejected state.\nexport function cancelablePromise(promise) {\n let hasCanceled = false;\n\n const wrappedPromise = promise instanceof Error ?\n Promise.reject(promise) :\n new Promise((resolve, reject) => {\n promise.then(\n result => hasCanceled ? reject({isCanceled: true}) : resolve(result),\n error => hasCanceled ? reject({isCanceled: true}) : reject(error)\n );\n });\n\n return {\n promise: wrappedPromise,\n cancel() {\n hasCanceled = true;\n },\n };\n};\n\n// Clips string to the specified length.\nexport function clipStr(str, length) {\n return str && str.substring(0, length);\n}\n","// This is a generated file. Don't edit.\n\nexport const PACKAGE_VERSION = \"0.23.0-rc1\";\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport CheckBox from '../widgets/checkbox.jsx';\n\nexport default class EditAccountView extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleCheckboxClick = this.handleCheckboxClick.bind(this);\n }\n\n handleCheckboxClick(what, checked) {\n if (what == 'sound') {\n this.props.onToggleMessageSounds(checked);\n } else if (what == 'alert') {\n this.props.onTogglePushNotifications(checked);\n } else if (what == 'incognito') {\n this.props.onToggleIncognitoMode(checked);\n }\n }\n\n render() {\n return (\n